Home My Page Projects Code Snippets Project Openings diderot

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/basis/basis-vars.sml
 [diderot] / branches / charisee / src / compiler / basis / basis-vars.sml

Diff of /branches/charisee/src/compiler/basis/basis-vars.sml

revision 2584, Tue Apr 15 03:22:58 2014 UTC revision 2585, Thu Apr 17 03:52:19 2014 UTC
# Line 314  Line 314
314                  [field(k0, d, Ty.Shape[])]                  [field(k0, d, Ty.Shape[])]
315                    --> field(km1, d, Ty.Shape[d])                    --> field(km1, d, Ty.Shape[d])
316                end))                end))
317    (* differetiation of higher-order tensor fields *)    (* differentiation of higher-order tensor fields *)
318      val op_Dotimes = polyVar (N.op_Dotimes, all([DK, NK, SK, NK],      val op_Dotimes = polyVar (N.op_Dotimes, all([DK, NK, SK, NK],
319            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let
320                val k0 = Ty.DiffVar(k, 0)                val k0 = Ty.DiffVar(k, 0)
# Line 329  Line 329
329
330
331
332  (* differetiation of higher-order tensor fields *)     (* divergence differentiation of higher-order tensor fields *)
333  val op_Ddot = polyVar (N.op_Ddot, all([DK, NK, SK, NK],  val op_Ddot = polyVar (N.op_Ddot, all([DK, NK, SK, NK],
334  fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let  fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let
335  val k0 = Ty.DiffVar(k, 0)  val k0 = Ty.DiffVar(k, 0)
336  val km1 = Ty.DiffVar(k, ~1)  val km1 = Ty.DiffVar(k, ~1)
337  val d = Ty.DimVar d  val d = Ty.DimVar d
338  val d' = Ty.DimVar d'  val d' = Ty.DimVar d'
339  val dd = Ty.ShapeVar dd              val ddK = Ty.ShapeVar dd
340  in  in
341  [field(k0, d, Ty.ShapeExt(dd, d'))]                  [field(k0, d, Ty.ShapeExt(ddK, d'))]
342  (*-->Ty.realTy*)                  --> field(k0, d, Ty.ShapeVar dd)
--> field(k0, d, Ty.Shape[])

(*field(km1, d, Ty.ShapeExt(Ty.ShapeExt(dd, d'), d))*)
343  end))  end))
344
345      val op_norm = polyVar (N.op_norm, all([SK],      val op_norm = polyVar (N.op_norm, all([SK],
# Line 373  Line 370
370                    --> Ty.T_Tensor(Ty.ShapeVar s3)))                    --> Ty.T_Tensor(Ty.ShapeVar s3)))
371
372
373      val op_innerField = polyVar (N.op_dot, all([DK, NK, SK],      val op_innerField = polyVar (N.op_dot, all([DK, SK,NK, SK,SK],
374      fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let          fn [Ty.DIFF k,Ty.SHAPE dd1, Ty.DIM d, Ty.SHAPE dd2,Ty.SHAPE dd3] => let
375      val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}               val _=print "\n E"
376      val t2 = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.Shape[]}              val k0=Ty.DiffVar(k, 0)
377                val d' = Ty.DimVar d
378                val _ = print(String.concat["\n Basis Var Inner product Field. "])
379
380                val t1 = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd1}
381                val t2 = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd2}
382                val t3 = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape =     Ty.ShapeVar dd3}
383    (*
384                val h = field(k0, d',  Ty.Shape[Ty.DimConst 3, Ty.DimConst 2])
385    *)
386                val f = field(k0, d',  Ty.Shape[ Ty.DimConst 2])
387                val h = field(k0, d',  Ty.Shape[])
388
389      in      in
390          [t, t] --> t2
391                    [f,f] --> h
392      end))      end))
393
394
# Line 441  Line 451
451                    [t] --> t                    [t] --> t
452                  end))                  end))
453
454    (* outer product *)    (* outer products*)
455
456      local      local
457        fun mkOuter [Ty.DIM d1, Ty.DIM d2] = let        fun mkOuter [Ty.DIM d1, Ty.DIM d2] = let
458              val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1])              val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1])
459              val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d2])              val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d2])
460              val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2])              val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2])
461
462
463
464
465              in              in
466                [vt1, vt2] --> mt                [vt1, vt2] --> mt
467              end              end
# Line 454  Line 469
469      val op_outer = polyVar (N.op_outer, all([NK, NK], mkOuter))      val op_outer = polyVar (N.op_outer, all([NK, NK], mkOuter))
470      end      end
471
472  (*
473
474
475
476      fun field' (k, d, dd) = field(k, Ty.DimConst d, Ty.Shape(List.map Ty.DimConst dd))      fun field' (k, d, dd) = field(k, Ty.DimConst d, Ty.Shape(List.map Ty.DimConst dd))
477
478      local      local
479        fun mkOuterField [Ty.DIFF k, Ty.DIM d] = let
480            val k0=Ty.DiffVar(k, 0)
481            val d' = Ty.DimVar d
482            val f = field(k0, d', Ty.Shape[d'])
483           (* val h = field(k0, d',  Ty.Shape[d',d'])*)
484            val h = field(k0, d',  Ty.Shape[Ty.DimConst 3, Ty.DimConst 2])
485            in
486                [f, f] --> h
487            end
488        in
489            val op_outerField = polyVar (N.op_outer, all([DK,NK], mkOuterField))
490        end
491    (*
492        local
493        fun mkOuterFieldTen [Ty.DIFF k, Ty.DIM d] = let
494            val k0=Ty.DiffVar(k, 0)
495            val d' = Ty.DimVar d
496
497            val t = Ty.T_Tensor(Ty.Shape[d'])
498            val f = field(k0, d', Ty.Shape[d'])
499            val h = field(k0, d',  Ty.Shape[d',d'])
500
501            in
502                [f, t] --> h
503            end
504        in
505            val op_outerFieldTen = polyVar (N.op_outer, all([DK,NK], mkOuterFieldTen))
506        end
507    *)
508
509
510
511    (* Fields of any shape, and dimension
512      fun mkOuterField [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1, Ty.SHAPE dd2] = let      fun mkOuterField [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1, Ty.SHAPE dd2] = let
513          val d1 = Ty.ShapeVar dd1          val d1 = Ty.ShapeVar dd1
514          val d2 = Ty.ShapeVar dd2          val d2 = Ty.ShapeVar dd2
515          val f = field(Ty.DiffVar(k, 0), d,  d1)  val k0=Ty.DiffVar(k, 0)
516          val g = field(Ty.DiffVar(k, 0), d,  d2)  val d' = Ty.DimVar d
517          val h = field'(Ty.DiffVar(k, 0), 3,  [2,2])
518    val f = field(k0, d', d1)
519    val g = field(k0, d',  d2)
520    val h = field'(k0, 2,  [2,2])
521
522
523      in      in
# Line 473  Line 526
526      in      in
527          val op_outerField = polyVar (N.op_outer, all([DK,NK, SK,SK], mkOuterField))          val op_outerField = polyVar (N.op_outer, all([DK,NK, SK,SK], mkOuterField))
528      end      end
529
530
531  *)  *)
532
533      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],

Legend:
 Removed from v.2584 changed lines Added in v.2585