1
2 from sfc.representation.geometryrepresentation import GeometryRepresentation
3
7
8 - def generate_declarations(self,
9 cellvolume,
10 circumradius,
11 cellsurfacearea,
12 facetarea,
13 facetnormal):
46
48 gr = self.geomrep
49 nsd = gr.sfc_cell.nsd
50
51 code = []
52 code += ['', '// Local coordinates']
53 code += self.gen_xi_code()
54
55 if x:
56 code += ['', '// Global coordinates']
57 code += self.gen_x_code()
58
59 assert not (D and facet_D)
60 if D or facet_D:
61 code += ['', '// Integration point scaling factor']
62 if D:
63 code += self.gen_D_code()
64 if facet_D:
65 code += self.gen_facet_D_code()
66
67 return code
68
70 code = []
71 gr = self.geomrep
72 nsd = gr.sfc_cell.nsd
73 if 0:
74 coords = ', '.join('qp[%d]' % i for i in range(nsd))
75 code += ["const double xi[%d] = { %s };" % (nsd, coords)]
76 assert gr.xi_sym[0].printc() == "xi[0]"
77 else:
78 code += ["const double %s = qp[%d];" % (gr.xi_sym[i].printc(), i)
79 for i in range(nsd)]
80 assert gr.xi_sym[0].printc() == "x"
81 return code
82
84 gr = self.geomrep
85 nsd = gr.sfc_cell.nsd
86 code = [gr.x_sym[i].printc() for i in range(nsd)]
87 return code
89 gr = self.geomrep
90 nsd = gr.sfc_cell.nsd
91 code = []
92
93 if 0:
94 coords = ', '.join('qp[%d]' % i for i in range(nsd))
95 code += ["const double x[%d] = { %s };" % (nsd, coords)]
96 assert gr.x_sym[0].printc() == "x[0]"
97 else:
98 code += ["const double %s = %s;" % (gr.x_sym[i].printc(), gr.x_expr[i].printc())
99 for i in range(nsd)]
100 assert gr.x_sym[0].printc() == "x0"
101 return code
102
104 "Return names of vertex coordinate "
105 sc = self.geomrep.sfc_cell
106 d = sc.nsd
107 num_vertices = sc.num_vertices
108 return [gr.vx_sym[i][j].printc()
109 for i in range(nv)
110 for j in range(d)]
112 gr = self.geomrep
113 sc = gr.sfc_cell
114 d = sc.nsd
115 nv = sc.num_vertices
116 code = ["const double %s = %s;" % (gr.vx_sym[i][j].printc(),
117 gr.vx_expr[i][j].printc())
118 for i in range(nv)
119 for j in range(d)]
120 return code
121
123 d = self.geomrep.sfc_cell.nsd
124 return [self.geomrep.x0_sym[i].printc() % i for i in range(d)]
129 d = self.geomrep.sfc_cell.nsd
130 expr = ", ".join(self.geomrep.x0_expr[i].printc() for i in range(d))
131 code = "const double x0[%d] = { %s };" % (d, expr)
132 return [code]
133
135 d = self.geomrep.sfc_cell.nsd
136 return [self.geomrep.G_sym[i,j].printc()
137 for i in range(d)
138 for j in range(d)]
140 gr = self.geomrep
141 d = gr.sfc_cell.nsd
142 if 0:
143 expr = ", ".join(gr.G_expr[i,j].printc()
144 for i in range(d)
145 for j in range(d))
146 code = ["const double G[%d] = { %s };" % (d*d, expr)]
147 else:
148 code = ["const double %s = %s;" % (gr.G_sym[i,j].printc(),
149 gr.G_expr[i,j].printc())
150 for i in range(d) for j in range(d)]
151 return code
152
154 d = self.geomrep.sfc_cell.nsd
155 return [self.geomrep.Ginv_sym[i,j].printc()
156 for i in range(d)
157 for j in range(d)]
159 gr = self.geomrep
160 d = gr.sfc_cell.nsd
161 if 0:
162 expr = ", ".join(gr.Ginv_expr[i,j].printc()
163 for i in range(d)
164 for j in range(d))
165 code = ["const double Ginv[%d] = { %s };" % (d*d, expr)]
166 else:
167 code = ["const double %s = %s;" % (gr.Ginv_sym[i,j].printc(),
168 gr.Ginv_expr[i,j].printc())
169 for i in range(d) for j in range(d)]
170 return code
171
173 return [self.geomrep.detG_sym.printc()]
175 expr = self.geomrep.detG_expr.printc()
176 code = "const double detG = %s;" % expr
177 return [code]
178
180 return [self.geomrep.detGtmp_sym.printc()]
182 expr = self.geomrep.detGtmp_expr.printc()
183 code = "const double detGtmp = %s;" % expr
184 return [code]
185
187 return [self.geomrep.detG_sign_sym.printc()]
189 expr = self.geomrep.detG_sign_expr.printc()
190 code = "const double detG_sign = %s;" % expr
191 return [code]
192
196 gr = self.geomrep
197 code = []
198 code += ["switch (facet)", "{"]
199 for f in range(gr.sfc_cell.num_facets):
200 code += ["case %d:" % f]
201 code += ["%s = %s;" % (gr.facet_D_sym.printc(),
202 gr.facet_D_expr[f].printc())]
203 code += ["}"]
204
205 code += ["const double %s = %s * %s;" % (gr.D_sym.printc(),
206 gr.facet_D_sym.printc(),
207 gr.quad_weight_sym.printc())]
208 return code
209
213 gr = self.geomrep
214 code = []
215
216 code += ["const double %s = %s;" % (gr.D_sym.printc(), gr.D_expr.printc())]
217 return code
218
220 d = self.geomrep.sfc_cell.nsd
221 return [self.geomrep.n_sym[0].printc() % i for i in range(d)]
223 gr = self.geomrep
224 d = gr.sfc_cell.nsd
225 code = []
226 assert self.geomrep.n_sym[0].printc() == "n0"
227 code = []
228 code += ["double %s;" % (', '.join('n%d'%i for i in range(d)),)]
229 code += ["switch (facet)", "{"]
230 for f in range(gr.sfc_cell.num_facets):
231 code += ["case %d:" % f]
232
233 for i in range(d):
234 name = gr.n_tmp_sym[i].printc()
235 expr = gr.n_tmp_expr[f][i].printc()
236 code += [" %s = %s;" % (name, expr)]
237 code += ["}"]
238
239
240 normscale = "1.0"
241 norm2 = ' + '.join((gr.n_sym[i].printc() + '*' + gr.n_sym[i].printc()) for i in range(d))
242 code += ['const double nnorm = %s * sqrt(%s);' % (normscale, norm2)]
243 for i in range(d):
244 code += ['%s /= nnorm;' % (gr.n_sym[i].printc(),)]
245 return [code]
246
250 gr = self.geomrep
251 sc = gr.sfc_cell
252 expr = (gr.detG_sym * sc.reference_volume).printc()
253 code = "const double K_vol = %s;" % expr
254 return [code]
255
259 expr = "FIXME"
260 code = "const double K_rad = %s;" % expr
261 return [code]
262
266 expr = "FIXME"
267 code = "const double K_surf = %s;" % expr
268 return [code]
269
273 expr = "FIXME"
274 code = "const double F_area = %s;" % expr
275 return [code]
276