Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/translate/translate-basis.sml
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2628, Wed May 21 04:02:06 2014 UTC revision 2867, Tue Feb 10 06:52:58 2015 UTC
# Line 23  Line 23 
23      structure Op = HighOps      structure Op = HighOps
24      structure Ty = SimpleTypes      structure Ty = SimpleTypes
25      structure VTbl = Var.Tbl      structure VTbl = Var.Tbl
   
26      structure mk= mkOperators      structure mk= mkOperators
27    
28      fun trType (Ty.TY ty) = TranslateTy.tr ty      fun trType (Ty.TY ty) = TranslateTy.tr ty
# Line 51  Line 50 
50    
51      fun kernel h (y, [], []) = assign(y, Op.Kernel(h, 0), [])      fun kernel h (y, [], []) = assign(y, Op.Kernel(h, 0), [])
52    
53        val cnt = ref 0
54        fun genName prefix = let
55            val n = !cnt
56            in
57                cnt := n+1;
58                String.concat[prefix, "_", Int.toString n]
59            end
60    (* utility functions for synthesizing eigenvector/eigenvalue code *)    (* utility functions for synthesizing eigenvector/eigenvalue code *)
61      fun eigenVec (rator, dim) = let      fun eigenVec (rator, dim) = let
62            val ty = DstTy.SeqTy(DstTy.realTy, dim)            val ty = DstTy.SeqTy(DstTy.realTy, dim)
# Line 75  Line 81 
81    
82      fun  simpleEOp rator (y, _,xs) = [assignEin(y, rator, xs)]      fun  simpleEOp rator (y, _,xs) = [assignEin(y, rator, xs)]
83    
   
   
   
   
84  (* shape is an int list, DIM is in int|variable, k-level of differntiation *)  (* shape is an int list, DIM is in int|variable, k-level of differntiation *)
85    
86   (* build a table that maps Basis variables to their translation functions *)   (* build a table that maps Basis variables to their translation functions *)
# Line 118  Line 120 
120    
121                  (BV.add_rf,             fn (y, [_,Ty.DIM d], xs) =>                  (BV.add_rf,             fn (y, [_,Ty.DIM d], xs) =>
122                                              [assignEin(y, mk.addTenField(d),xs)]),                                              [assignEin(y, mk.addTenField(d),xs)]),
   
   
123                  (BV.sub_ii,             simpleOp Op.ISub),                  (BV.sub_ii,             simpleOp Op.ISub),
124                  (BV.sub_tt,             fn (y, [shp], xs) => let                  (BV.sub_tt,             fn (y, [shp], xs) => let
125                                          val ty1 as DstTy.TensorTy dd1 = shapeVarToTensor shp                                          val ty1 as DstTy.TensorTy dd1 = shapeVarToTensor shp
# Line 129  Line 129 
129                                          end),                                          end),
130                  (BV.sub_ff,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], xs) =>                  (BV.sub_ff,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], xs) =>
131                                                [assignEin(y, mk.subField(d, dd),xs)]),                                                [assignEin(y, mk.subField(d, dd),xs)]),
   
   
132                  (BV.sub_fr,             fn (y, [_,Ty.DIM d], xs) =>                  (BV.sub_fr,             fn (y, [_,Ty.DIM d], xs) =>
133                                              [assignEin(y, mk.subFieldTen(d),xs)]),                                              [assignEin(y, mk.subFieldTen(d),xs)]),
134    
135                  (BV.sub_rf,             fn (y, [_,Ty.DIM d], xs) =>                  (BV.sub_rf,             fn (y, [_,Ty.DIM d], xs) =>
136                                            [assignEin(y, mk.subTenField(d),xs)]),                                            [assignEin(y, mk.subTenField(d),xs)]),
   
137                  (BV.mul_ii,             simpleOp Op.IMul),                  (BV.mul_ii,             simpleOp Op.IMul),
138                  (BV.mul_rr,             fn (y,_,args) => [assignEin(y, mk.prodScalar,args)]),                  (BV.mul_rr,             fn (y,_,args) => [assignEin(y, mk.prodScalar,args)]),
139                  (BV.mul_rt,             fn (y, [shp], xs) => let                  (BV.mul_rt,             fn (y, [shp], xs) => let
# Line 155  Line 152 
152                                              [assignEin(y, mk.scaleField(d, dd),xs)]),                                              [assignEin(y, mk.scaleField(d, dd),xs)]),
153                  (BV.mul_fr,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], [f, s]) =>                  (BV.mul_fr,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], [f, s]) =>
154                                              [assignEin(y, mk.scaleField(d, dd),[s,f])]),                                              [assignEin(y, mk.scaleField(d, dd),[s,f])]),
 (*MARK-mul_ff*)  
155                  (BV.mul_ss,             fn (y, [_,Ty.DIM d], xs) =>                  (BV.mul_ss,             fn (y, [_,Ty.DIM d], xs) =>
156                                          [assignEin(y, mk.mulFieldss d,xs)]),                                          [assignEin(y, mk.mulFieldss d,xs)]),
157                  (BV.mul_sf,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], xs) =>                  (BV.mul_sf,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], xs) =>
158                                              [assignEin(y, mk.mulFieldsf(d,dd),xs)]),                                              [assignEin(y, mk.mulFieldsf(d,dd),xs)]),
159                  (BV.mul_fs,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], [f,s]) =>                  (BV.mul_fs,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], [s,f]) =>
160                                          [assignEin(y, mk.mulFieldsf(d,dd),[s,f])]),                                          [assignEin(y, mk.mulFieldsf(d,dd),[f,s])]),
   
161                  (BV.div_ii,             simpleOp Op.IDiv),                  (BV.div_ii,             simpleOp Op.IDiv),
162                  (BV.div_rr,             fn (y,_,args) => [assignEin(y, mk.divScalar,args)]),                  (BV.div_rr,             fn (y,_,args) => [assignEin(y, mk.divScalar,args)]),
163                  (BV.div_tr,             fn (y, [shp], xs) => let                  (BV.div_tr,             fn (y, [shp], xs) => let
# Line 173  Line 168 
168                                          end),                                          end),
169                  (BV.div_fr,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], xs) =>                  (BV.div_fr,             fn (y, [_,Ty.DIM d, Ty.SHAPE dd], xs) =>
170                                              [assignEin(y, mk.divideField(d, dd),xs)]),                                              [assignEin(y, mk.divideField(d, dd),xs)]),
171                    (BV.div_fs,             fn (y, [_,_,Ty.DIM d, Ty.SHAPE dd], xs) =>
172                                            [assignEin(y, mk.divFieldfs(d, dd),xs)]),
173                  (BV.div_ss,             fn (y, [_,Ty.DIM d], xs) =>                  (BV.div_ss,             fn (y, [_,Ty.DIM d], xs) =>
174                                              [assignEin(y, mk.divFieldss d,xs)]),                                              [assignEin(y, mk.divFieldss d,xs)]),
   
175                  (BV.exp_ri,             simpleOp(Op.Power)),                  (BV.exp_ri,             simpleOp(Op.Power)),
176                  (BV.exp_rr,             basisFn MathFuns.pow),                  (BV.exp_rr,             basisFn MathFuns.pow),
177                  (BV.curl2D,              simpleEOp mk.curl2d),                  (BV.curl2D,              simpleEOp mk.curl2d),
# Line 195  Line 191 
191                                          [assignEin(y, mk.negField(d, dd),xs)]),                                          [assignEin(y, mk.negField(d, dd),xs)]),
192                  (BV.op_probe,           fn (y, [_, Ty.DIM d, Ty.SHAPE dd], xs) =>                  (BV.op_probe,           fn (y, [_, Ty.DIM d, Ty.SHAPE dd], xs) =>
193                                              [assignEin(y, (mk.probe(dd,d)),xs)]),                                              [assignEin(y, (mk.probe(dd,d)),xs)]),
194                  (BV.op_D,               fn (y, [_, Ty.DIM d], xs) =>  [assignEin(y, mk.grad([d]),xs)]),                  (BV.op_D,               fn (y, [_, Ty.DIM d], xs) =>  (case d
195                                                of 2=>[assignEin(y, mk.grad([d]),xs)]
196                  (BV.op_Dotimes,         fn (y, [_, Ty.DIM d1, Ty.SHAPE dd, Ty.DIM d2], xs) => let                                              |  3=>[assignEin(y, mk.grad([d]),xs)]
197                                      val x= print (String.concat[" d1:",Int.toString(d1)," d2:",Int.toString(d2),                                              | _ => raise Fail "unsupported gradient"
198                                          " shape:",Int.toString(length(dd)), "\n"])                                              (*end case*))),
199                                          val g=print "*******\n"                  (BV.op_Dotimes,         fn (y, [_, Ty.DIM d1, Ty.SHAPE dd, Ty.DIM d2], xs) =>                                    [assignEin(y, mk.dotimes(d1, dd@[d2]),xs)]),
                                         val gg2=print(Int.toString(length(xs)))  
                         in  
                                     [assignEin(y, mk.dotimes(d1, dd@[d2]),xs)] end ),  
200                  (BV.op_Ddot,         fn (y, [_, Ty.DIM d1,  Ty.SHAPE dd, Ty.DIM d2], xs) =>                  (BV.op_Ddot,         fn (y, [_, Ty.DIM d1,  Ty.SHAPE dd, Ty.DIM d2], xs) =>
201                                          [assignEin(y, mk.divergence(d1, dd),xs)] ),                                          [assignEin(y, mk.divergence(d1, dd),xs)] ),
202                    (BV.op_norm,            fn (y, [sv], xs) => let
203                                                val ty=shapeVarToTensor sv
204                  (BV.op_norm,            fn (y, [sv], xs) => (case shapeVarToTensor sv                                              in (case shapeVarToTensor sv
205                                             of DstTy.TensorTy[] => assign(y, Op.Abs DstTy.realTy, xs)                                             of DstTy.TensorTy[] => assign(y, Op.Abs DstTy.realTy, xs)
206                                              | ty => assign(y, Op.Norm ty, xs)                                                  | DstTy.TensorTy [alpha]
207                                                        => [assignEin(y, mk.magnitudeTenVec [alpha],xs@xs)]
208                                                    | DstTy.TensorTy[_,_]     => assign(y, Op.Norm ty, xs)
209    
210                                                    | DstTy.TensorTy[_,_,_] => assign(y, Op.Norm ty, xs)
211                                                    | _ => raise Fail"unsupported norm of TensorTy"
212                                                    (* end case *))
213                                                end),
214                    (BV.op_normFld,            fn (y, [ _,Ty.DIM d1, Ty.SHAPE dd], xs) => (case dd
215                                                of []
216                                                    => [assignEin(y, mk.magnitudeFldVec(d1, []),xs)]
217                                                    | [i]
218                                                        => [assignEin(y, mk.magnitudeFldVec(d1, [i]),xs@xs)]
219                                                    | _ => raise Fail"unsupported norm of fieldTy"
220                                            (* end case *))),                                            (* end case *))),
221                  (BV.op_not,             simpleOp Op.Not),                  (BV.op_not,             simpleOp Op.Not),
222                  (BV.op_cross,            simpleEOp mk.crossProduct),                  (BV.op_cross,            simpleEOp mk.crossProduct),
223                  (BV.op_crossField,       simpleEOp mk.crossProductField),                  (BV.op_cross2,            simpleEOp mk.crossProduct2),
224                    (BV.op_crossField2d,       simpleEOp mk.crossProductField2d),
225                     (BV.op_crossField3d,       simpleEOp mk.crossProductField3d),
226                  (BV.op_outer,           fn (y, [Ty.DIM d1, Ty.DIM d2], xs) =>                  (BV.op_outer,           fn (y, [Ty.DIM d1, Ty.DIM d2], xs) =>
227                                              [assignEin(y, (mk.outerProduct(d1, d2)), xs)]),                                              [assignEin(y, (mk.outerProduct(d1, d2)), xs)]),
 (* Any Shape fields  
                  (BV.op_outerField,      fn (y, [_, Ty.DIM d1, Ty.SHAPE dd1, Ty.SHAPE dd2], xs)=>  
                                         [assignEin(y, mk.outerField(d1, dd1, dd2),   xs)]),  
 *)  
228                  (BV.op_outerField,      fn (y, [_, Ty.DIM d1], xs)=>                  (BV.op_outerField,      fn (y, [_, Ty.DIM d1], xs)=>
229                                              [assignEin(y, mk.outerField(d1),   xs)]),                                              [assignEin(y, mk.outerField(d1),   xs)]),
   
   
230                  (BV.op_inner,           fn (y, [sh1, sh2, _], xs) => let                  (BV.op_inner,           fn (y, [sh1, sh2, _], xs) => let
231                                              val ty1 as DstTy.TensorTy dd1 = shapeVarToTensor sh1                                              val ty1 as DstTy.TensorTy dd1 = shapeVarToTensor sh1
232                                              val ty2 as DstTy.TensorTy dd2 = shapeVarToTensor sh2                                              val ty2 as DstTy.TensorTy dd2 = shapeVarToTensor sh2
# Line 232  Line 234 
234                                              [assignEin(y, (mk.innerProduct(dd1,dd2)),xs)]                                              [assignEin(y, (mk.innerProduct(dd1,dd2)),xs)]
235                                          end),                                          end),
236    
237                  (BV.op_innerField,      fn (y,  [_,Ty.SHAPE dd1,Ty.DIM d,Ty.SHAPE dd2,_], xs) =>                  (BV.op_innerField,      fn (y,  [_,_,Ty.SHAPE dd1,Ty.DIM d,Ty.SHAPE dd2,_], xs) =>
238                                              [assignEin(y, mk.innerProductField(dd1,d,dd2),xs)]),                                              [assignEin(y, mk.innerProductField(dd1,d,dd2),xs)]),
239                  (BV.op_colon,           fn (y, [sh1, sh2, _], xs) => let                  (BV.op_colon,           fn (y, [sh1, sh2, _], xs) => let
240                                              val ty1 as DstTy.TensorTy dd1 = shapeVarToTensor sh1                                              val ty1 as DstTy.TensorTy dd1 = shapeVarToTensor sh1
# Line 260  Line 262 
262                  (BV.evals3x3,           eigenVal (Op.Eigen3x3, 3)),                  (BV.evals3x3,           eigenVal (Op.Eigen3x3, 3)),
263                  (BV.evecs2x2,           eigenVec (Op.Eigen2x2, 2)),                  (BV.evecs2x2,           eigenVec (Op.Eigen2x2, 2)),
264                  (BV.evecs3x3,           eigenVec (Op.Eigen3x3, 3)),                  (BV.evecs3x3,           eigenVec (Op.Eigen3x3, 3)),
265    
266    
267                  (BV.fn_max,             simpleOp Op.Max),                  (BV.fn_max,             simpleOp Op.Max),
268                  (BV.fn_min,             simpleOp Op.Min),                  (BV.fn_min,             simpleOp Op.Min),
269    
# Line 272  Line 276 
276                                            [assignEin(y,(mk.trace d), xs)]),                                            [assignEin(y,(mk.trace d), xs)]),
277                  (BV.fn_traceField,           fn (y, [_,Ty.DIM d,Ty.SHAPE dd], xs) =>                  (BV.fn_traceField,           fn (y, [_,Ty.DIM d,Ty.SHAPE dd], xs) =>
278                          [assignEin(y,mk.traceField(d,dd), xs)]),                          [assignEin(y,mk.traceField(d,dd), xs)]),
   
279                  (BV.fn_transpose,       fn (y, [Ty.DIM d1, Ty.DIM d2], xs) =>                  (BV.fn_transpose,       fn (y, [Ty.DIM d1, Ty.DIM d2], xs) =>
280                                            [assignEin(y, (mk.transpose [d1,d2]), xs)]),                                            [assignEin(y, (mk.transpose [d1,d2]), xs)]),
   
281                  (BV.fn_transposeField,  fn (y, [_,Ty.DIM d1, Ty.DIM d2,Ty.DIM d3], xs) =>                  (BV.fn_transposeField,  fn (y, [_,Ty.DIM d1, Ty.DIM d2,Ty.DIM d3], xs) =>
282                      [assignEin(y, (mk.transposeField (d1,d2,d3)), xs)]),                      [assignEin(y, (mk.transposeField (d1,d2,d3)), xs)]),
   
283                  (BV.kn_bspln3,          kernel Kernel.bspln3),                  (BV.kn_bspln3,          kernel Kernel.bspln3),
284                  (BV.kn_bspln5,          kernel Kernel.bspln5),                  (BV.kn_bspln5,          kernel Kernel.bspln5),
285                  (BV.kn_ctmr,            kernel Kernel.ctmr),                  (BV.kn_ctmr,            kernel Kernel.ctmr),

Legend:
Removed from v.2628  
changed lines
  Added in v.2867

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0