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 2857, Sun Jan 18 17:30:52 2015 UTC revision 2867, Tue Feb 10 06:52:58 2015 UTC
# Line 409  Line 409 
409              body = E.Div(E.Field(0, []),E.Field(1, []))              body = E.Div(E.Field(0, []),E.Field(1, []))
410          }          }
411    
412        fun divFieldfs(dim,shape) = let
413            val  expindex= specialize(shape,0)
414            in  E.EIN{
415                params = [E.FLD(dim),E.FLD(dim)],
416                index = shape,
417                body = E.Prod[E.Field(0, expindex),E.Div(E.Const 1,E.Field(1, []))]
418                }
419            end
420    
421      (*Assumes same dimension vector field *)      (*Assumes same dimension vector field *)
422      fun outerField dim =      fun outerField dim =
423          E.EIN{          E.EIN{
# Line 502  Line 511 
511              }              }
512          end          end
513    
514    
515    
516        fun magnitudeTenVec(i::beta) = let
517                val shape1=i::beta
518                val n=length(shape1)
519                val alpha= List.take(shape1,n-1)
520                val expindexA= specialize(alpha,0)
521                val expindexB= specialize(beta,(length(alpha)))
522                val s'=E.V(length(alpha)+ length(beta))
523                val s''=[(s',0,i-1)]
524            in E.EIN{
525                params = [E.TEN(1,shape1),E.TEN(1,shape1)],
526                index = alpha@beta,
527                body = E.Sqrt(E.Sum(s'', E.Prod[
528                    E.Tensor(0, expindexA@[s']),
529                    E.Tensor(0, [s']@expindexB )
530                    ]))
531                }
532    
533            end
534        fun magnitudeFldVec(dim,[]) =
535            E.EIN{
536                params = [E.FLD(dim)],
537                index = [],
538                body =  E.Field(0, [])
539                }
540            | magnitudeFldVec(dim,i::beta) = let
541            val shape1=i::beta
542            val alpha= List.take(shape1,length(shape1)-1)
543            val expindexA= specialize(alpha,0)
544            val expindexB= specialize(beta,(length(alpha)))
545            val s'=E.V(length(alpha)+ length(beta))
546            val s''=[(s',0,i-1)]
547            in E.EIN{
548                params = [E.FLD(dim) ,E.FLD(dim)],              (* T and T' *)
549                index = alpha@beta,(* \alpha \beta, i *)
550                body = E.Sqrt(E.Sum(s'', E.Prod[
551                    E.Field(0, expindexA@[s']),   (* F_{\alpha i} *)
552                    E.Field(1, [s']@expindexB )  (* F'_{i \beta} *)
553                    ]))
554                }
555            end
556    
557    
558    end; (* local *)    end; (* local *)
559    

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

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