11 eigenvalues_implementation,
12 source_term_implementation,
13 material_parameters_implementation,
14 point_source_implementation,
16 computation_precisions,
17 pde_terms_without_state,
30 Template_SinglePrecisions = jinja2.Template(
32{% if EIGENVALUES_IMPLEMENTATION=="<user-defined>" %}
33double {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::maxEigenvalue(
34 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
35 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
36 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
37 [[maybe_unused]] double t,
38 [[maybe_unused]] double dt,
39 [[maybe_unused]] int normal
41 logTraceInWith3Arguments("maxEigenvalue(...)", x, t, normal);
43 double maxEigenvalue = 1.0;
45 logTraceOut("maxEigenvalue(...)");
49{% if FLUX_IMPLEMENTATION=="<user-defined>" %}
50void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::flux(
51 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
52 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
53 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
54 [[maybe_unused]] double t,
55 [[maybe_unused]] double dt,
56 [[maybe_unused]] int normal,
57 [[maybe_unused]] {{COMPUTATION_PRECISIONS[0]}}* __restrict__ F // F[{{NUMBER_OF_UNKNOWNS}}]
59 logTraceIn("flux(...)");
61 logTraceOut("flux(...)");
65{% if NCP_IMPLEMENTATION=="<user-defined>" %}
66void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::nonconservativeProduct(
67 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
68 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* __restrict__ deltaQ, // deltaQ[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
69 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
70 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
71 [[maybe_unused]] double t,
72 [[maybe_unused]] double dt,
73 [[maybe_unused]] int normal,
74 [[maybe_unused]] {{COMPUTATION_PRECISIONS[0]}}* __restrict__ BTimesDeltaQ // BTimesDeltaQ[{{NUMBER_OF_UNKNOWNS}}]
76 logTraceInWith3Arguments("nonconservativeProduct(...)", x, t, normal);
78 logTraceOut("nonconservativeProduct(...)");
82{% if SOURCE_TERM_IMPLEMENTATION=="<user-defined>" %}
83void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::algebraicSource(
84 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* const Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
85 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
86 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
87 [[maybe_unused]] double t,
88 [[maybe_unused]] double dt,
89 [[maybe_unused]] {{COMPUTATION_PRECISIONS[0]}}* S
91 logTraceInWith6Arguments("algebraicSource(...)", Q, x, h, t, dt, S);
93 logTraceOut("algebraicSource(...)");
97{% if MATERIAL_PARAM_IMPLEMENTATION=="<user-defined>" %}
98void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::multiplyMaterialParameterMatrix(
99 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* const Q,
100 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
101 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
102 [[maybe_unused]] double t,
103 [[maybe_unused]] double dt,
104 [[maybe_unused]] int normal,
105 [[maybe_unused]] {{COMPUTATION_PRECISIONS[0]}}* const rhs
111{% if POINT_SOURCE_IMPLEMENTATION!="<none>" %}
112void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::initPointSourceLocations(
113 [[maybe_unused]] double sourceLocation[NumberOfPointSources][Dimensions]
119{% if POINT_SOURCE_IMPLEMENTATION=="<user-defined>" %}
120void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::pointSource(
121 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[0]}}* const Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
122 [[maybe_unused]] const double* const x,
123 [[maybe_unused]] const double t,
124 [[maybe_unused]] const double dt,
125 [[maybe_unused]] {{COMPUTATION_PRECISIONS[0]}}* const forceVector, // forceVector[{{NUMBER_OF_UNKNOWNS}}
126 [[maybe_unused]] int n
132 undefined=jinja2.DebugUndefined,
135 Template_MultiplePrecisions = jinja2.Template(
137{% if EIGENVALUES_IMPLEMENTATION=="<user-defined>" %}
139double {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::maxEigenvalue(
140 [[maybe_unused]] const T* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
141 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
142 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
143 [[maybe_unused]] double t,
144 [[maybe_unused]] double dt,
145 [[maybe_unused]] int normal
147 logTraceInWith3Arguments("maxEigenvalue(...)", x, t, normal);
149 logTraceOut("maxEigenvalue(...)");
152{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
153template double {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::maxEigenvalue(
154 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
155 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
156 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
157 [[maybe_unused]] double t,
158 [[maybe_unused]] double dt,
159 [[maybe_unused]] int normal
164{% if FLUX_IMPLEMENTATION=="<user-defined>" %}
166void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::flux(
167 [[maybe_unused]] const T* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
168 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
169 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
170 [[maybe_unused]] double t,
171 [[maybe_unused]] double dt,
172 [[maybe_unused]] int normal,
173 [[maybe_unused]] T* __restrict__ F // F[{{NUMBER_OF_UNKNOWNS}}]
175 logTraceIn( "flux(...)");
177 logTraceOut( "flux(...)" );
180{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
181template void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::flux(
182 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q,
183 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
184 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
185 [[maybe_unused]] double t,
186 [[maybe_unused]] double dt,
187 [[maybe_unused]] int normal,
188 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ F
193{% if NCP_IMPLEMENTATION=="<user-defined>" %}
195void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::nonconservativeProduct(
196 [[maybe_unused]] const T* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
197 [[maybe_unused]] const T* __restrict__ deltaQ, // deltaQ[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
198 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
199 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
200 [[maybe_unused]] double t,
201 [[maybe_unused]] double dt,
202 [[maybe_unused]] int normal,
203 [[maybe_unused]] T* __restrict__ BTimesDeltaQ // BTimesDeltaQ[{{NUMBER_OF_UNKNOWNS}}]
205 logTraceInWith3Arguments("nonconservativeProduct(...)", x, t, normal);
207 logTraceOut("nonconservativeProduct(...)");
210{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
211template void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::nonconservativeProduct(
212 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q,
213 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ deltaQ,
214 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
215 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
216 [[maybe_unused]] double t,
217 [[maybe_unused]] double dt,
218 [[maybe_unused]] int normal,
219 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ BTimesDeltaQ
224{% if SOURCE_TERM_IMPLEMENTATION=="<user-defined>" %}
226void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::algebraicSource(
227 [[maybe_unused]] const T* const Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
228 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
229 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
230 [[maybe_unused]] double t,
231 [[maybe_unused]] double dt,
232 [[maybe_unused]] T* S
234 logTraceInWith6Arguments("algebraicSource(...)", Q, x, h, t, dt, S);
236 logTraceOut("algebraicSource(...)");
239{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
240template void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::algebraicSource(
241 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
242 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
243 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
244 [[maybe_unused]] double t,
245 [[maybe_unused]] double dt,
246 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* S
251{% if MATERIAL_PARAM_IMPLEMENTATION=="<user-defined>" %}
253void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::multiplyMaterialParameterMatrix(
254 [[maybe_unused]] const T* const Q,
255 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
256 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
257 [[maybe_unused]] double t,
258 [[maybe_unused]] double dt,
259 [[maybe_unused]] int normal,
260 [[maybe_unused]] T* const rhs
265{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
266template void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::multiplyMaterialParameterMatrix(
267 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
268 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
269 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
270 [[maybe_unused]] double t,
271 [[maybe_unused]] double dt,
272 [[maybe_unused]] int normal,
273 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const rhs
278{% if POINT_SOURCE_IMPLEMENTATION!="<none>" %}
279void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::initPointSourceLocations(
280 [[maybe_unused]] double sourceLocation[NumberOfPointSources][Dimensions]
286{% if POINT_SOURCE_IMPLEMENTATION=="<user-defined>" %}
288void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::pointSource(
289 [[maybe_unused]] const T* const Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
290 [[maybe_unused]] const double* const x,
291 [[maybe_unused]] const double t,
292 [[maybe_unused]] const double dt,
293 [[maybe_unused]] T* const forceVector, // forceVector[{{NUMBER_OF_UNKNOWNS}}
294 [[maybe_unused]] int n
299{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
300template void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::pointSource(
301 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
302 [[maybe_unused]] const double* const x,
303 [[maybe_unused]] const double t,
304 [[maybe_unused]] const double dt,
305 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const forceVector,
306 [[maybe_unused]] int n
311 undefined=jinja2.DebugUndefined,
326 return Template_MultiplePrecisions.render(**d)
328 return Template_SinglePrecisions.render(**d)
_source_term_implementation
_material_parameters_implementation
_eigenvalues_implementation
create_solver_user_definitions(self)
_point_source_implementation
__init__(self, flux_implementation, ncp_implementation, eigenvalues_implementation, source_term_implementation, material_parameters_implementation, point_source_implementation, is_linear, computation_precisions, pde_terms_without_state)