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

SCM Repository

[diderot] Diff of /branches/chiw17/src/compiler/mid-to-low/ein-to-scalar.sml
ViewVC logotype

Diff of /branches/chiw17/src/compiler/mid-to-low/ein-to-scalar.sml

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

revision 5013, Fri Jul 7 20:18:01 2017 UTC revision 5014, Mon Jul 10 03:06:01 2017 UTC
# Line 37  Line 37 
37            (* end case *))            (* end case *))
38    
39      fun expand {avail, mapp, body, lowArgs} = let      fun expand {avail, mapp, body, lowArgs} = let
40    (*
41                val i = Mk.lookupMu (mapp, E.V 0)
42    val _ = print(String.concat["\nin direction i:",Int.toString(i)])*)
43    (*
44                  val j = Mk.lookupMu (mapp, E.V 1)
45    val _ = print(String.concat["\nin direction i:",Int.toString(i),"-",Int.toString(j)])
46    *)
47            fun gen (mapp, body) = let            fun gen (mapp, body) = let
48                (*********sumexpression ********)                (*********sumexpression ********)
49                  fun tb n =  List.tabulate (n, fn e => e)                  fun tb n =  List.tabulate (n, fn e => e)
# Line 115  Line 122 
122                      | E.Probe(E.Delta e1, e2) => gen(mapp, E.Delta e1)                      | E.Probe(E.Delta e1, e2) => gen(mapp, E.Delta e1)
123                      | E.Probe e => raise Fail("probe ein-exp: " ^ EinPP.expToString body)                      | E.Probe e => raise Fail("probe ein-exp: " ^ EinPP.expToString body)
124                      | E.Field _ => raise Fail("field should have been replaced: " ^ EinPP.expToString body)                      | E.Field _ => raise Fail("field should have been replaced: " ^ EinPP.expToString body)
125                      | E.Poly(id, alpha, n, []) =>   (case n                      | E.Poly(id, alpha, n, []) =>   let
126                          of 1 => gen(mapp, E.Tensor(id, alpha))                          val t = E.Tensor(id, alpha)
127                          | 2  => gen(mapp, E.Opn(E.Prod, [E.Tensor(id, alpha),E.Tensor(id, alpha)]))                          val ts = List.tabulate (n, fn _ => t)
128                          (* end case*))                          in  gen(mapp, E.Opn(E.Prod, ts)) end
129  (*                       | E.Poly(id, [], 1, [vx]) => gen(mapp, E.Const 1) (* derivative of a scalar? *)
130                       | E.Poly(id, [], 1, [vx]) => gen(mapp, E.Const 0) (* derivative of a scalar? *)                       | E.Poly(id, [E.C c], n, [vx]) =>   let
                      | E.Poly(id, [E.C c], 1, [vx]) =>   let  
131                          val dx = Mk.lookupMu (mapp, vx)                          val dx = Mk.lookupMu (mapp, vx)
132                          val e = if(dx=c) then E.Tensor(id, [E.C c])  else E.Const 0                          val _ = print(String.concat["\n\t Poly1_", Int.toString(c),"^",Int.toString(n),"-dx",Int.toString(dx)])
133                            val ec = E.Const n
134                            val t = E.Tensor(id, [E.C c])
135                            val ts = List.tabulate (n-1, fn _ => t)
136                            val e = if(dx=c)
137                                then (case n
138                                    of 1 => E.Const 1
139                                    | _ =>  E.Opn(E.Prod, ec::ts)
140                                    (* end case *))
141                                else E.Const 0
142                          (* here need to implement partial derivative in respect to an axis *)                          (* here need to implement partial derivative in respect to an axis *)
143                          in gen(mapp, e) end                          in gen(mapp, e) end
                      | E.Poly(id, [E.C c], 2, [vx]) =>   let  
                         val dx = Mk.lookupMu (mapp, vx)  
                         val ec = E.Const 2  
                         val et = E.Tensor(id, [E.C c])  
                         val e = E.Opn(E.Prod, [ec, et])  
                         in gen(mapp, e) end  
 *)  
144                      | _ => raise Fail("unsupported ein-exp: " ^ EinPP.expToString body)                      | _ => raise Fail("unsupported ein-exp: " ^ EinPP.expToString body)
145                    (*end case*)                    (*end case*)
146                  end                  end

Legend:
Removed from v.5013  
changed lines
  Added in v.5014

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