19{%
if USE_VARIABLE_SHORTCUT is sameas
True %}
20#include "VariableShortcuts.h"
25{%
for item in NAMESPACE -%}
26 namespace {{ item }} {
31{%
for item in NAMESPACE -%}
35class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
37 enum class SolverState {
41 Plotting {%
for item in range(RK_STEPS) -%}
43 ProjectOnFacesAndComputeVolumeIntegralOfStep{{item}},
44 SolveRiemannProblemAndAddToVolumeIntegralOfStep{{item}}
48 static std::string
toString(SolverState);
50 static constexpr int DGOrder = {{DG_ORDER}};
57 static constexpr double MaxAdmissibleCellH = {{MAX_CELL_H}};
70 static constexpr double MinAdmissibleCellH = {{MIN_CELL_H}};
72{{BASIS_DECLARATIONS | indent(4,True) }}
81 static std::bitset<Dimensions> PeriodicBC;
83 double getMinTimeStamp(
bool ofCurrentlyRunningGridSweep=
false) const final;
84 double getMaxTimeStamp(
bool ofCurrentlyRunningGridSweep=false) const final;
85 double getMinTimeStepSize() const final;
86 double getMaxTimeStepSize() const final;
96 virtual ::
exahype2::RefinementCommand refinementCriterion(
97 const
double * __restrict__ Q,
98 const
tarch::la::
Vector<Dimensions,
double>& volumeCentre,
99 const
tarch::la::
Vector<Dimensions,
double>& volumeH,
101 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
119 virtual void initialCondition(
120 double * __restrict__ Q,
124 bool gridIsConstructed
125 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
127 {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<none>" %}
135 virtual void boundaryConditions(
136 const double * __restrict__ Qinside,
137 double * __restrict__ Qoutside,
141 ) {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
145 virtual void suspendSolversForOneGridSweep()
override;
151 virtual void startGridConstructionStep()
override;
157 virtual void finishGridConstructionStep()
override;
163 virtual void startGridInitialisationStep()
override;
169 virtual void finishGridInitialisationStep()
override;
175 virtual void startTimeStep(
176 double globalMinTimeStamp,
177 double globalMaxTimeStamp,
178 double globalMinTimeStepSize,
179 double globalMaxTimeStepSize
186 virtual void finishTimeStep()
override;
192 virtual void startPlottingStep(
193 double globalMinTimeStamp,
194 double globalMaxTimeStamp,
195 double globalMinTimeStepSize,
196 double globalMaxTimeStepSize
203 virtual void finishPlottingStep()
override;
214 double getMaxCellSize(
bool currentTimeStep =
true)
const;
215 double getMinCellSize(
bool currentTimeStep =
true)
const;
220 virtual double getMaxMeshSize() const override final;
221 virtual
double getMinMeshSize() const override final;
229 void update(
double timeStepSize,
double timeStamp,
double cellSize);
231 SolverState getSolverState() const;
236 virtual
bool mayPlot() const override;
242 bool isFirstGridSweepOfTimeStep() const;
243 bool isLastGridSweepOfTimeStep() const;
249 virtual
void startSimulation() override;
255 virtual
void finishSimulation() override;
257 {%
if STATELESS_PDE_TERMS %}
272 virtual bool cellCanUseStatelessPDETerms(
282 SolverState _solverState;
290 double _localMinTimeStampThisTimeStep;
291 double _localMaxTimeStampThisTimeStep;
309 {{ABSTRACT_SOLVER_USER_DECLARATIONS}}
_maxCellHThisTimeStep(0.0)
_maxTimeStampThisTimeStep(0.0)
_minTimeStepSize(std::numeric_limits< double >::max())
_maxTimeStepSizeThisTimeStep(0.0)
_minTimeStampThisTimeStep(0.0)
_minCellHThisTimeStep(0.0)
_minTimeStepSizeThisTimeStep(std::numeric_limits< double >::max())
std::string toString(Filter filter)
tarch::logging::Log _log("exahype2::fv")
NumberOfAuxiliaryVariables
For the generic kernels that I use here most of the time.
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.