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

SCM Repository

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

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

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

revision 2520, Mon Dec 30 05:08:47 2013 UTC revision 2521, Thu Jan 9 02:17:07 2014 UTC
# Line 25  Line 25 
25          val (index', expindex')= specialize(alpha,0)          val (index', expindex')= specialize(alpha,0)
26          in          in
27              E.EIN{              E.EIN{
28              params = [E.TEN, E.TEN], index = index',              params = [E.TEN 1, E.TEN 1], index = index',
29              body = E.Add[E.Tensor(0, expindex'), E.Tensor(1, expindex')]              body = E.Add[E.Tensor(0, expindex'), E.Tensor(1, expindex')]
30              }              }
31          end          end
32    
33      fun createVec(dim)=E.EIN{      fun createVec(dim)=E.EIN{
34          params = [E.TEN], index = [dim],          params = [E.TEN 1], index = [dim],
35          body = E.Tensor(0, [E.V 0])          body = E.Tensor(0, [E.V 0])
36          }          }
37    
# Line 48  Line 48 
48          val (index', expindex')= specialize(alpha,0)          val (index', expindex')= specialize(alpha,0)
49          in          in
50              E.EIN{              E.EIN{
51              params = [E.TEN, E.TEN], index = index',              params = [E.TEN 1, E.TEN 1], index = index',
52              body = E.Sub(E.Tensor(0, expindex'), E.Tensor(1, expindex'))}              body = E.Sub(E.Tensor(0, expindex'), E.Tensor(1, expindex'))}
53          end          end
54    
55      fun divTen(alpha) =let      fun divTen(alpha) =let
56          val (index', expindex')= specialize(alpha,0)          val (index', expindex')= specialize(alpha,0)
57          in  E.EIN{          in  E.EIN{
58              params = [E.TEN, E.TEN], index = index',              params = [E.TEN 1, E.TEN 1], index = index',
59              body = E.Div(E.Tensor(0, expindex'), E.Tensor(1,[]))              body = E.Div(E.Tensor(0, expindex'), E.Tensor(1,[]))
60          }          }
61          end          end
62    
63      (* Trace: <M_{i, i}>  This one Sx represents both i's*)      (* Trace: <M_{i, i}>  This one Sx represents both i's*)
64      fun trace(dim) = E.EIN{      fun trace(dim) = E.EIN{
65          params = [E.TEN],         (* M *)          params = [E.TEN 1],         (* M *)
66          index = [],           (* i *)          index = [],           (* i *)
67          body = E.Sum([(E.V 0,1,dim-1)],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      }      }
# Line 70  Line 70 
70      fun negTen(alpha)=let      fun negTen(alpha)=let
71          val (index', expindex')= specialize(alpha,0)          val (index', expindex')= specialize(alpha,0)
72          in E.EIN{          in E.EIN{
73              params = [E.TEN],              params = [E.TEN 1],
74              index = index',              index = index',
75              body = E.Neg(E.Tensor(0, expindex'))              body = E.Neg(E.Tensor(0, expindex'))
76          }          }
# Line 80  Line 80 
80      fun scaleTen(alpha) = let      fun scaleTen(alpha) = let
81          val (index', expindex')= specialize(alpha,0)          val (index', expindex')= specialize(alpha,0)
82          in E.EIN{          in E.EIN{
83              params = [E.TEN, E.TEN],    (* s and T *)              params = [E.TEN 1, E.TEN 1],    (* s and T *)
84              index = index',           (* \alpha *)              index = index',           (* \alpha *)
85              body = E.Prod[ E.Tensor(0, []),  E.Tensor(1, expindex')]              body = E.Prod[ E.Tensor(0, []),  E.Tensor(1, expindex')]
86          }          }
# Line 94  Line 94 
94          val s'=E.V(length(alpha)+ length(beta))          val s'=E.V(length(alpha)+ length(beta))
95          val s''=[(s',0,i-1)]          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 1, E.TEN 1],              (* T and T' *)
98              index = indexA@indexB,   (* \alpha \beta, i *)              index = indexA@indexB,   (* \alpha \beta, i *)
99              body = E.Sum(s'', E.Prod[              body = E.Sum(s'', E.Prod[
100                  E.Tensor(0, expindexA@[s']),   (* T_{\alpha i} *)                  E.Tensor(0, expindexA@[s']),   (* T_{\alpha i} *)
# Line 112  Line 112 
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-1),(E.V(sumi+1),0,j-1)]          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 1,E.TEN 1],
116              index = indexA@indexB,              index = indexA@indexB,
117              body = E.Sum(s'',E.Prod[              body = E.Sum(s'',E.Prod[
118                  E.Tensor(0, expindexA@s'),                  E.Tensor(0, expindexA@s'),
# Line 123  Line 123 
123    
124      (*Vector Examples : <T_i * T_j>_ij..t0⊗t1*)      (*Vector Examples : <T_i * T_j>_ij..t0⊗t1*)
125      fun outerProduct(dimA,dimB) =E.EIN{      fun outerProduct(dimA,dimB) =E.EIN{
126          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1],
127          index= [dimA,dimB],          index= [dimA,dimB],
128          body= E.Prod[E.Tensor(0, [E.V 0]), E.Tensor(1, [E.V 1])]          body= E.Prod[E.Tensor(0, [E.V 0]), E.Tensor(1, [E.V 1])]
129      }      }
130    
131    
132      fun transpose([i,j]) =E.EIN{      fun transpose([i,j]) =E.EIN{
133          params = [E.TEN], index= [i,j],          params = [E.TEN 1], index= [i,j],
134          body= E.Tensor(0, [E.V 1,E.V 0])          body= E.Tensor(0, [E.V 1,E.V 0])
135        }        }
136    
137    
138      fun modulate(dim) =E.EIN{      fun modulate(dim) =E.EIN{
139          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1],
140          index = [dim],          index = [dim],
141          body = E.Prod[E.Tensor(0, [E.V 0]), E.Tensor(1, [E.V 0])]          body = E.Prod[E.Tensor(0, [E.V 0]), E.Tensor(1, [E.V 0])]
142          }          }
# Line 144  Line 144 
144    
145      (*crossProduct is on 3D vectors ..vec3 t8=t0 × t1; *)      (*crossProduct is on 3D vectors ..vec3 t8=t0 × t1; *)
146      val crossProduct = E.EIN{      val crossProduct = E.EIN{
147          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1],
148          index= [3],          index= [3],
149          body=E.Sum([(E. V 1,0,2),(E.V 2,0,2)],          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 ]) ])
# Line 159  Line 159 
159    
160      (*Tensor and Fields*)      (*Tensor and Fields*)
161      fun addTenField(dim) = E.EIN{      fun addTenField(dim) = E.EIN{
162          params = [E.TEN,E.FLD(dim)],          params = [E.TEN 1,E.FLD(dim)],
163          index = [],          index = [],
164          body = E.Add[E.Tensor(0, []),E.Field(1, [])]          body = E.Add[E.Tensor(0, []),E.Field(1, [])]
165      }      }
166    
167      fun subTenField(dim) = E.EIN{      fun subTenField(dim) = E.EIN{
168          params = [E.TEN,E.FLD(dim)],          params = [E.TEN 1,E.FLD(dim)],
169          index = [],          index = [],
170          body = E.Add[E.Tensor(0, []),E.Neg(E.Field(1, []))]          body = E.Add[E.Tensor(0, []),E.Neg(E.Field(1, []))]
171      }      }
172    
173      fun subFieldTen(dim) = E.EIN{      fun subFieldTen(dim) = E.EIN{
174          params = [E.TEN,E.FLD(dim)],          params = [E.TEN 1,E.FLD(dim)],
175          index = [],          index = [],
176          body = E.Sub(E.Field(1, []),E.Tensor(0, []))          body = E.Sub(E.Field(1, []),E.Tensor(0, []))
177      }      }
# Line 199  Line 199 
199      fun scaleField(dim,shape) =let      fun scaleField(dim,shape) =let
200          val (index', expindex')= specialize(shape,0)          val (index', expindex')= specialize(shape,0)
201          in E.EIN{          in E.EIN{
202              params = [E.TEN,E.FLD(dim)],              params = [E.TEN 1,E.FLD(dim)],
203              index = index',              index = index',
204              body = E.Prod[ E.Tensor(0,[]), E.Field(1,expindex')]              body = E.Prod[ E.Tensor(0,[]), E.Field(1,expindex')]
205          }          }
# Line 208  Line 208 
208      fun divideField(dim,shape) = let      fun divideField(dim,shape) = let
209          val (index', expindex')= specialize(shape,0)          val (index', expindex')= specialize(shape,0)
210          in E.EIN{          in E.EIN{
211              params = [E.TEN,E.FLD(dim)],              params = [E.FLD(dim),E.TEN 1],
212              index = index',              index = index',
213              body = E.Div(E.Field(1, expindex'), E.Tensor(0, []))              body = E.Div(E.Field(0, expindex'), E.Tensor(1, []))
214          }          }
215          end          end
216    
# Line 271  Line 271 
271          val (indexT, expindexT)= specialize(alpha,0)          val (indexT, expindexT)= specialize(alpha,0)
272    
273          in E.EIN{          in E.EIN{
274              params = [E.FLD(dim),E.TEN],              params = [E.FLD(dim),E.TEN 0],
275              index= indexT,              index= indexT,
276              body= E.Probe(E.Field(0, expindexT), E.Tensor(1,[]))              body= E.Probe(E.Field(0, expindexT), E.Tensor(1,[]))
277          }          }
# Line 286  Line 286 
286      }      }
287    
288      val curl3d=E.EIN{      val curl3d=E.EIN{
289          params = [E.TEN],          params = [E.TEN 1],
290          index = [3],          index = [3],
291          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]))])          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      }      }
# Line 294  Line 294 
294      (*Scalars*)      (*Scalars*)
295      (* Add Scalars*)      (* Add Scalars*)
296      val addScalar = E.EIN{      val addScalar = E.EIN{
297          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1] ,
298          index = [],          index = [],
299          body = E.Add[ E.Tensor(0, []), E.Tensor(1, [])]          body = E.Add[ E.Tensor(0, []), E.Tensor(1, [])]
300      }      }
301    
302      (* Subtract Scalars*)      (* Subtract Scalars*)
303      val subScalar = E.EIN{      val subScalar = E.EIN{
304          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1],
305          index = [],          index = [],
306          body = E.Sub( E.Tensor(0, []), E.Tensor(1, []))          body = E.Sub( E.Tensor(0, []), E.Tensor(1, []))
307      }      }
308    
309      (* Divide Scalars*)      (* Divide Scalars*)
310      val divScalar = E.EIN{      val divScalar = E.EIN{
311          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1],
312          index = [],          index = [],
313          body = E.Div( E.Tensor(0, []), E.Tensor(1, []))          body = E.Div( E.Tensor(0, []), E.Tensor(1, []))
314      }      }
# Line 316  Line 316 
316    
317      (* Product Scalars*)      (* Product Scalars*)
318      val prodScalar = E.EIN{      val prodScalar = E.EIN{
319          params = [E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1],
320          index = [],          index = [],
321          body = E.Prod[ E.Tensor(0, []), E.Tensor(1, [])]          body = E.Prod[ E.Tensor(0, []), E.Tensor(1, [])]
322      }      }
323    
324      (*Transform M_ij x_j+T*)      (*Transform M_ij x_j+T*)
325      fun transform(i, j) = E.EIN{      fun transform(i, j) = E.EIN{
326          params = [E.TEN, E.TEN, E.TEN],          params = [E.TEN 1, E.TEN 1, E.TEN 1],
327          index = [i],          index = [i],
328          body = E.Add          body = E.Add
329              [E.Sum([(E.V 1, 0,j-1)],E.Prod[E.Tensor(0, [E.V 0, E.V 1]), E.Tensor(1, [E.V 1])]),              [E.Sum([(E.V 1, 0,j-1)],E.Prod[E.Tensor(0, [E.V 0, E.V 1]), E.Tensor(1, [E.V 1])]),

Legend:
Removed from v.2520  
changed lines
  Added in v.2521

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