Peano
Loading...
Searching...
No Matches
AbstractSolverDefinitions.py
Go to the documentation of this file.
1# This file is part of the ExaHyPE2 project. For conditions of distribution and
2# use, please see the copyright notice at www.peano-framework.org
3import jinja2
4
5
8 self,
9 flux_implementation,
10 ncp_implementation,
11 eigenvalues_implementation,
12 source_term_implementation,
13 material_parameters_implementation,
14 point_source_implementation,
15 is_linear,
16 computation_precisions,
17 pde_terms_without_state,
18 ):
19 self._flux_implementation = flux_implementation
20 self._ncp_implementation = ncp_implementation
21 self._eigenvalues_implementation = eigenvalues_implementation
22 self._source_term_implementation = source_term_implementation
23 self._material_parameters_implementation = material_parameters_implementation
24 self._point_source_implementation = point_source_implementation
25 self._is_linear = is_linear
26 self._computation_precisions = computation_precisions
27 self._pde_terms_without_state = pde_terms_without_state
28
30 Template = jinja2.Template(
31 """
32{% for PRECISION_NUM in range(0,COMPUTATION_PRECISIONS|length) %}
33
34{% if EIGENVALUES_IMPLEMENTATION!="<empty>" and EIGENVALUES_IMPLEMENTATION!="<user-defined>" and EIGENVALUES_IMPLEMENTATION!="<none>" %}
35double {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::maxEigenvalue(
36 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q,
37 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
38 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
39 [[maybe_unused]] double t,
40 [[maybe_unused]] double dt,
41 [[maybe_unused]] int normal
42) {
43 {{EIGENVALUES_IMPLEMENTATION}}
44}
45{% endif %}
46
47{% if FLUX_IMPLEMENTATION!="<empty>" and FLUX_IMPLEMENTATION!="<user-defined>" and FLUX_IMPLEMENTATION!="<none>"%}
48void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::flux(
49 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ Q,
50 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
51 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
52 [[maybe_unused]] double t,
53 [[maybe_unused]] double dt,
54 [[maybe_unused]] int normal,
55 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* __restrict__ F
56) {
57 {{FLUX_IMPLEMENTATION}}
58}
59{% endif %}
60
61{% if NCP_IMPLEMENTATION!="<empty>" and NCP_IMPLEMENTATION!="<user-defined>" and NCP_IMPLEMENTATION!="<none>"%}
62void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::nonconservativeProduct(
63 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}*__restrict__ Q,
64 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}*__restrict__ deltaQ,
65 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
66 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
67 [[maybe_unused]] double t,
68 [[maybe_unused]] double dt,
69 [[maybe_unused]] int normal,
70 {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}*__restrict__ BTimesDeltaQ
71) {
72 {{NCP_IMPLEMENTATION}}
73}
74{% endif %}
75
76{% if SOURCE_TERM_IMPLEMENTATION!="<empty>" and SOURCE_TERM_IMPLEMENTATION!="<user-defined>" and SOURCE_TERM_IMPLEMENTATION!="<none>"%}
77void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::algebraicSource(
78 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
79 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
80 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
81 [[maybe_unused]] double t,
82 [[maybe_unused]] double dt,
83 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* S
84) {
85 {{SOURCE_TERM_IMPLEMENTATION}}
86}
87{% endif %}
88
89{% if MATERIAL_PARAM_IMPLEMENTATION!="<empty>" and MATERIAL_PARAM_IMPLEMENTATION!="<user-defined>" and MATERIAL_PARAM_IMPLEMENTATION!="<none>"%}
90void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::multiplyMaterialParameterMatrix(
91 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
92 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& x,
93 [[maybe_unused]] const tarch::la::Vector<Dimensions, double>& h,
94 [[maybe_unused]] double t,
95 [[maybe_unused]] double dt,
96 [[maybe_unused]] int normal,
97 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const rhs
98) {
99 {{MATERIAL_PARAM_IMPLEMENTATION}}
100}
101{% endif %}
102
103{% if POINT_SOURCE_IMPLEMENTATION!="<empty>" and POINT_SOURCE_IMPLEMENTATION!="<user-defined>" and POINT_SOURCE_IMPLEMENTATION!="<none>"%}
104void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::pointSource(
105 [[maybe_unused]] const {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const Q,
106 [[maybe_unused]] const double* const x,
107 [[maybe_unused]] const double t,
108 [[maybe_unused]] const double dt,
109 [[maybe_unused]] {{COMPUTATION_PRECISIONS[PRECISION_NUM]}}* const forceVector,
110 [[maybe_unused]] int n
111) {
112 {{POINT_SOURCE_IMPLEMENTATION}}
113}
114{% endif %}
115
116{% endfor %}
117""",
118 undefined=jinja2.DebugUndefined,
119 )
120
121 d = {}
122 d["FLUX_IMPLEMENTATION"] = self._flux_implementation
123 d["NCP_IMPLEMENTATION"] = self._ncp_implementation
124 d["EIGENVALUES_IMPLEMENTATION"] = self._eigenvalues_implementation
125 d["SOURCE_TERM_IMPLEMENTATION"] = self._source_term_implementation
126 d["MATERIAL_PARAM_IMPLEMENTATION"] = self._material_parameters_implementation
127 d["POINT_SOURCE_IMPLEMENTATION"] = self._point_source_implementation
128 d["IS_LINEAR"] = self._is_linear
129 d["COMPUTATION_PRECISIONS"] = self._computation_precisions
130 d["STATELESS_PDE_TERMS"] = self._pde_terms_without_state
131 return Template.render(**d)
__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)