Home My Page Projects Code Snippets Project Openings diderot

# SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/ein/mkoperators.sml
 [diderot] / branches / charisee / src / compiler / ein / mkoperators.sml

# Diff of /branches/charisee/src/compiler/ein/mkoperators.sml

revision 2510, Thu Nov 14 20:33:18 2013 UTC revision 2515, Mon Dec 2 03:42:14 2013 UTC
# Line 38  Line 38
38
39       val zero=E.EIN{       val zero=E.EIN{
40          params = [], index = [],          params = [], index = [],
41          body = E.Const(9.560)          body = E.Const(0.0)
42          }          }
43
44
45
(* just to test normalize
val (index', expindex')= specialize(alpha,0)
in
E.EIN{
params = [E.TEN, E.TEN], index = index',
}
end
*)

46       (* Subtracting tensors *)       (* Subtracting tensors *)
47       fun subTen(alpha)=let       fun subTen(alpha)=let
48          val (index', expindex')= specialize(alpha,0)          val (index', expindex')= specialize(alpha,0)
# Line 75  Line 64
64      fun trace(dim) = E.EIN{      fun trace(dim) = E.EIN{
65          params = [E.TEN],         (* M *)          params = [E.TEN],         (* M *)
66          index = [],           (* i *)          index = [],           (* i *)
67          body = E.Sum([(E.V 0,1,dim)],E.Tensor(0, [E.V 0, E.V 0]))          body = E.Sum([(E.V 0,1,dim-1)],E.Tensor(0, [E.V 0, E.V 0]))
68      }      }
69
70      fun negTen(alpha)=let      fun negTen(alpha)=let
# Line 103  Line 92
92          val (indexA, expindexA)= specialize(alpha,0)          val (indexA, expindexA)= specialize(alpha,0)
93          val (indexB, expindexB)= specialize(beta,(length(alpha)))          val (indexB, expindexB)= specialize(beta,(length(alpha)))
94          val s'=E.V(length(alpha)+ length(beta))          val s'=E.V(length(alpha)+ length(beta))
95          val s''=[(s',0,i)]          val s''=[(s',0,i-1)]
96          in E.EIN{          in E.EIN{
97              params = [E.TEN, E.TEN],              (* T and T' *)              params = [E.TEN, E.TEN],              (* T and T' *)
98              index = indexA@indexB,   (* \alpha \beta, i *)              index = indexA@indexB,   (* \alpha \beta, i *)
# Line 121  Line 110
110          val (indexB, expindexB)= specialize(beta,(length(alpha)))          val (indexB, expindexB)= specialize(beta,(length(alpha)))
111          val sumi=length(alpha)+ length(beta)          val sumi=length(alpha)+ length(beta)
112          val s'=[E.V sumi,E.V(sumi+1)]          val s'=[E.V sumi,E.V(sumi+1)]
113          val s''=[(E.V sumi,0,i),(E.V(sumi+1),0,j)]          val s''=[(E.V sumi,0,i-1),(E.V(sumi+1),0,j-1)]
114          in E.EIN{          in E.EIN{
115              params = [E.TEN,E.TEN],              params = [E.TEN,E.TEN],
116              index = indexA@indexB,              index = indexA@indexB,
# Line 145  Line 134
134          body= E.Tensor(0, [E.V 1,E.V 0])          body= E.Tensor(0, [E.V 1,E.V 0])
135        }        }
136
137      (* generic mod <T_{\alpha} * T_{ \alpha}>_{\alpha } *)
(*fun modulate(alpha) = let
val (indexA, expindexA)= specialize(alpha,0)
in E.EIN{
params = [E.TEN, E.TEN],
index = indexA,
body = E.Prod[E.Tensor(0, expindexA), E.Tensor(1, expindexA)]
}
end*)
138      fun modulate(dim) =E.EIN{      fun modulate(dim) =E.EIN{
139          params = [E.TEN, E.TEN],          params = [E.TEN, E.TEN],
140          index = [dim],          index = [dim],
# Line 165  Line 146
146      val crossProduct = E.EIN{      val crossProduct = E.EIN{
147          params = [E.TEN, E.TEN],          params = [E.TEN, E.TEN],
148          index= [3],          index= [3],
149          body=E.Sum([(E. V 1,0,3),(E.V 2,0,3)],          body=E.Sum([(E. V 1,0,2),(E.V 2,0,2)],
150              E.Prod[ E.Epsilon(0, 1, 2), E.Tensor(0, [E.V 1]),  E.Tensor(1, [E.V 2 ]) ])              E.Prod[ E.Epsilon(0, 1, 2), E.Tensor(0, [E.V 1]),  E.Tensor(1, [E.V 2 ]) ])
151      }      }
152
# Line 252  Line 233
233          }          }
234          end          end
235
236          (*< Sigma d F_alpha /  d x_ij> *)          (*< Sigma d F_alpha /  d x_i>iALpha *)
237          fun hessian(dim,alpha)= let          fun dotimes(dim,alpha)= let
238               val n=length(alpha)               val n=length(alpha)
239               fun expIndex(n,inc)=List.tabulate(n, (fn(x)=>E.V (x+inc)))               fun expIndex(n,inc)=List.tabulate(n, (fn(x)=>E.V (x+inc)))
240               val i'=expIndex(n,1)               val i'=expIndex(n,0)
241                 val z=length i'
242
243              in          in E.EIN{
244              E.EIN{              params = [E.FLD(dim)], index =[dim]@alpha,
245              params = [E.FLD(dim)],              body = E.Apply(E.Partial [E.V (z)] ,E.Field(0,i'))
index =[dim]@alpha,
body = E.Apply(E.Partial [E.V (0)] ,E.Field(0,i'))
246              }              }
247              end              end
248
# Line 272  Line 252
252          in E.EIN{          in E.EIN{
253              params = [E.FLD(dim)],              params = [E.FLD(dim)],
254              index = [],              index = [],
255              body = E.Sum([(E.V 0,0,dim)],E.Apply(E.Partial([E.V(0)]),E.Field(0,[E.V(0)])))              body = E.Sum([(E.V 0,0,dim-1)],E.Apply(E.Partial([E.V(0)]),E.Field(0,[E.V(0)])))
256          }          }
257          end          end
258
# Line 308  Line 288
288      val curl3d=E.EIN{      val curl3d=E.EIN{
289          params = [E.TEN],          params = [E.TEN],
290          index = [3],          index = [3],
291          body = E.Sum([(E.V 1,0,3), (E.V 2,0,3)],E.Prod[E.Epsilon(0, 1, 2),E.Apply( E.Partial([E.V 1]), E.Field(0,[E.V 2]))])          body = E.Sum([(E.V 1,0,2), (E.V 2,0,2)],E.Prod[E.Epsilon(0, 1, 2),E.Apply( E.Partial([E.V 1]), E.Field(0,[E.V 2]))])
292      }      }
293
294      (*Scalars*)      (*Scalars*)
# Line 346  Line 326
326          params = [E.TEN, E.TEN, E.TEN],          params = [E.TEN, E.TEN, E.TEN],
327          index = [i],          index = [i],