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>" %}
33 virtual double maxEigenvalue(
34 const {{COMPUTATION_PRECISIONS[0]}}* __restrict__ Q,
35 const tarch::la::Vector<Dimensions, double>& x,
36 const tarch::la::Vector<Dimensions, double>& h,
43 {% if FLUX_IMPLEMENTATION=="<user-defined>" %}
45 const {{COMPUTATION_PRECISIONS[0]}}* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
46 const tarch::la::Vector<Dimensions, double>& x,
47 const tarch::la::Vector<Dimensions, double>& h,
51 {{COMPUTATION_PRECISIONS[0]}} * __restrict__ F // F[{{NUMBER_OF_UNKNOWNS}}]
55 {% if NCP_IMPLEMENTATION=="<user-defined>" %}
56 void nonconservativeProduct(
57 const {{COMPUTATION_PRECISIONS[0]}}*__restrict__ Q,
58 const {{COMPUTATION_PRECISIONS[0]}}*__restrict__ deltaQ,
59 const tarch::la::Vector<Dimensions, double>& x,
60 const tarch::la::Vector<Dimensions, double>& h,
64 {{COMPUTATION_PRECISIONS[0]}}*__restrict__ BTimesDeltaQ
68 {% if SOURCE_TERM_IMPLEMENTATION=="<user-defined>" %}
70 const {{COMPUTATION_PRECISIONS[0]}}* const Q,
71 const tarch::la::Vector<Dimensions, double>& x,
72 const tarch::la::Vector<Dimensions, double>& h,
75 {{COMPUTATION_PRECISIONS[0]}}* S
79 {% if MATERIAL_PARAM_IMPLEMENTATION=="<user-defined>" %}
80 void multiplyMaterialParameterMatrix(
81 const {{COMPUTATION_PRECISIONS[0]}}* const Q,
82 const tarch::la::Vector<Dimensions, double>& x,
83 const tarch::la::Vector<Dimensions, double>& h,
87 {{COMPUTATION_PRECISIONS[0]}}* const rhs
91 {% if POINT_SOURCE_IMPLEMENTATION=="<user-defined>" %}
93 const {{COMPUTATION_PRECISIONS[0]}}* const Q,
94 const double* const x,
97 {{COMPUTATION_PRECISIONS[0]}}* const forceVector,
102 {% if POINT_SOURCE_IMPLEMENTATION!="<none>" %}
103 void initPointSourceLocations(
104 double sourceLocation[NumberOfPointSources][Dimensions]
108 undefined=jinja2.DebugUndefined,
111 Template_MultiplePrecisions = jinja2.Template(
113 {% if EIGENVALUES_IMPLEMENTATION=="<user-defined>" %}
114 template <typename T>
115 double maxEigenvalue(
116 const T* __restrict__ Q,
117 const tarch::la::Vector<Dimensions, double>& x,
118 const tarch::la::Vector<Dimensions, double>& h,
125 {% if FLUX_IMPLEMENTATION=="<user-defined>" %}
126 template <typename T>
128 const T* __restrict__ Q, // Q[{{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}}]
129 const tarch::la::Vector<Dimensions, double>& x,
130 const tarch::la::Vector<Dimensions, double>& h,
134 T* __restrict__ F // F[{{NUMBER_OF_UNKNOWNS}}]
138 {% if NCP_IMPLEMENTATION=="<user-defined>" %}
139 template <typename T>
140 void nonconservativeProduct(
141 const T*__restrict__ Q,
142 const T*__restrict__ deltaQ,
143 const tarch::la::Vector<Dimensions, double>& x,
144 const tarch::la::Vector<Dimensions, double>& h,
148 T*__restrict__ BTimesDeltaQ
152 {% if SOURCE_TERM_IMPLEMENTATION=="<user-defined>" %}
153 template <typename T>
154 void algebraicSource(
156 const tarch::la::Vector<Dimensions, double>& x,
157 const tarch::la::Vector<Dimensions, double>& h,
164 {% if MATERIAL_PARAM_IMPLEMENTATION=="<user-defined>" %}
165 template <typename T>
166 void multiplyMaterialParameterMatrix(
168 const tarch::la::Vector<Dimensions, double>& x,
169 const tarch::la::Vector<Dimensions, double>& h,
177 {% if POINT_SOURCE_IMPLEMENTATION=="<user-defined>" %}
178 template <typename T>
181 const double* const x,
184 T* const forceVector,
189 {% if POINT_SOURCE_IMPLEMENTATION!="<none>" %}
190 void initPointSourceLocations(
191 double sourceLocation[NumberOfPointSources][Dimensions]
195 {% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
197 {% if EIGENVALUES_IMPLEMENTATION=="<user-defined>" %}
198 double maxEigenvalue(
199 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q,
200 const tarch::la::Vector<Dimensions, double>& x,
201 const tarch::la::Vector<Dimensions, double>& h,
206 return maxEigenvalue<{{COMPUTATION_PRECISIONS[PRECISION_NUM]}}> (Q, x, h, t, dt, normal);
210 {% if FLUX_IMPLEMENTATION=="<user-defined>" %}
212 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q,
213 const tarch::la::Vector<Dimensions, double>& x,
214 const tarch::la::Vector<Dimensions, double>& h,
218 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ F
220 flux<{{COMPUTATION_PRECISIONS[PRECISION_NUM]}}>(Q, x, h, t, dt, normal, F);
224 {% if NCP_IMPLEMENTATION=="<user-defined>" %}
225 void nonconservativeProduct(
226 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}} *__restrict__ Q,
227 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}} *__restrict__ deltaQ,
228 const tarch::la::Vector<Dimensions, double>& x,
229 const tarch::la::Vector<Dimensions, double>& h,
233 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}} *__restrict__ BTimesDeltaQ
235 nonconservativeProduct<{{COMPUTATION_PRECISIONS[PRECISION_NUM]}}>(Q, deltaQ, x, h, t, dt, normal, BTimesDeltaQ);
239 {% if SOURCE_TERM_IMPLEMENTATION=="<user-defined>" %}
240 void algebraicSource(
241 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
242 const tarch::la::Vector<Dimensions, double>& x,
243 const tarch::la::Vector<Dimensions, double>& h,
246 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* S
248 algebraicSource<{{COMPUTATION_PRECISIONS[PRECISION_NUM]}}>(Q, x, h, t, dt, S);
252 {% if MATERIAL_PARAM_IMPLEMENTATION=="<user-defined>" %}
253 void multiplyMaterialParameterMatrix(
254 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
255 const tarch::la::Vector<Dimensions, double>& x,
256 const tarch::la::Vector<Dimensions, double>& h,
260 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const rhs
262 multiplyMaterialParameterMatrix<{{COMPUTATION_PRECISIONS[PRECISION_NUM]}}>(Q, x, h, t, dt, normal, rhs);
266 {% if POINT_SOURCE_IMPLEMENTATION=="<user-defined>" %}
268 const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
269 const double* const x,
272 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const forceVector,
275 pointSource<{{COMPUTATION_PRECISIONS[PRECISION_NUM]}}>(Q, x, t, dt, forceVector, n);
281 undefined=jinja2.DebugUndefined,
296 return Template_MultiplePrecisions.render(**d)
298 return Template_SinglePrecisions.render(**d)
_source_term_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)
_point_source_implementation
create_solver_user_declarations(self)
_eigenvalues_implementation
_material_parameters_implementation