6 |
* Type definitions for Basis functions. |
* Type definitions for Basis functions. |
7 |
*) |
*) |
8 |
|
|
9 |
structure Basis = |
structure Basis : sig |
10 |
struct |
|
11 |
|
val env : Env.env |
12 |
|
|
13 |
|
end = struct |
14 |
local |
local |
15 |
structure N = BasisNames |
structure N = BasisNames |
16 |
structure Ty = Types |
structure Ty = Types |
72 |
in |
in |
73 |
[field(k, d, dd), tensor[d]] --> Ty.T_Tensor dd |
[field(k, d, dd), tensor[d]] --> Ty.T_Tensor dd |
74 |
end)), |
end)), |
75 |
(N.op_at, all([DK, NK, SK], |
(N.op_D, all([DK, NK, SK], |
76 |
fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let |
fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let |
77 |
val k0 = Ty.DiffVar(k, 0) |
val k0 = Ty.DiffVar(k, 0) |
78 |
val km1 = Ty.DiffVar(k, ~1) |
val km1 = Ty.DiffVar(k, ~1) |
124 |
(N.kn_tent, ty(Ty.T_Kernel(Ty.DiffConst 0))) |
(N.kn_tent, ty(Ty.T_Kernel(Ty.DiffConst 0))) |
125 |
] |
] |
126 |
|
|
127 |
|
(* seed the basis environment *) |
128 |
|
val env = let |
129 |
|
fun ins ((name, ty), env) = let |
130 |
|
val x = Var.newPoly (name, AST.BasisVar, ty) |
131 |
|
in |
132 |
|
Env.insertGlobal (env, name, x) |
133 |
|
end |
134 |
|
in |
135 |
|
List.foldl ins (Env.new()) basis |
136 |
|
end |
137 |
|
|
138 |
end (* local *) |
end (* local *) |
139 |
end |
end |