20{%
if USE_VARIABLE_SHORTCUT is sameas
True %}
21#include "VariableShortcuts.h"
26{%
for item in NAMESPACE -%}
27 namespace {{ item }} {
32{%
for item in NAMESPACE -%}
36class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
38 enum class SolverState {
42 PlottingAfterGridInitialisation,
43 RungeKuttaPrimarySubStep0AfterGridInitialisation,
44 Plotting {%
for item in range(RK_STEPS) -%}
46 RungeKuttaPrimarySubStep{{item}},
47 RungeKuttaSecondarySubStep{{item}}
51 static std::string
toString(SolverState);
53 static constexpr int NumberOfGridCellsPerPatchPerAxis = {{NUMBER_OF_GRID_CELLS_PER_PATCH_PER_AXIS}};
60 static constexpr double MaxAdmissiblePatchH = {{MAX_GRID_CELL_H}} * NumberOfGridCellsPerPatchPerAxis;
61 static constexpr double MaxAdmissibleGridCellH = {{MAX_GRID_CELL_H}};
62 static constexpr double MaxAdmissibleCellH = MaxAdmissiblePatchH;
72 static constexpr double MinAdmissiblePatchH = {{MIN_GRID_CELL_H}} * NumberOfGridCellsPerPatchPerAxis;
73 static constexpr double MinAdmissibleGridCellH = {{MIN_GRID_CELL_H}};
74 static constexpr double MinAdmissibleCellH = MinAdmissiblePatchH;
82 static std::bitset<Dimensions> PeriodicBC;
84 double getMinTimeStamp(
bool ofCurrentlyRunningGridSweep=
false) const final;
85 double getMaxTimeStamp(
bool ofCurrentlyRunningGridSweep=false) const final;
86 double getMinTimeStepSize() const final;
87 double getMaxTimeStepSize() const final;
94 virtual ::
exahype2::RefinementCommand refinementCriterion(
95 const
double * __restrict__ Q,
96 const
tarch::la::
Vector<Dimensions,
double>& meshCellCentre,
97 const
tarch::la::
Vector<Dimensions,
double>& meshCellH,
99 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
102 virtual void initialCondition(
103 double * __restrict__ Q,
106 bool gridIsConstructed
107 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
110 {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<none>" %}
118 virtual void boundaryConditions(
119 const double * __restrict__ Qinside,
120 double * __restrict__ Qoutside,
125 ) {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
135 virtual void startGridConstructionStep()
override;
141 virtual void finishGridConstructionStep()
override;
148 virtual void startGridInitialisationStep()
override;
154 virtual void finishGridInitialisationStep()
override;
157 virtual void suspendSolversForOneGridSweep()
override;
164 virtual void startTimeStep(
165 double globalMinTimeStamp,
166 double globalMaxTimeStamp,
167 double globalMinTimeStepSize,
168 double globalMaxTimeStepSize
175 virtual void finishTimeStep()
override;
182 virtual void startPlottingStep(
183 double globalMinTimeStamp,
184 double globalMaxTimeStamp,
185 double globalMinTimeStepSize,
186 double globalMaxTimeStepSize
193 virtual void finishPlottingStep()
override;
205 double getMaxPatchSize(
bool currentTimeStep =
true)
const;
206 double getMinPatchSize(
bool currentTimeStep =
true)
const;
207 double getMaxGridCellSize(
bool currentTimeStep =
true)
const;
208 double getMinGridCellSize(
bool currentTimeStep =
true)
const;
216 virtual double getMaxMeshSize() const override final;
217 virtual
double getMinMeshSize() const override final;
225 void update(
double timeStepSize,
double timeStamp,
double patchSize);
227 SolverState getSolverState() const;
229 #if defined(GPUOffloadingOMP)
230 #pragma omp declare target
235 #if defined(GPUOffloadingOMP)
236 #pragma omp end declare target
242 virtual bool mayPlot()
const override;
248 bool isFirstGridSweepOfTimeStep()
const;
249 bool isLastGridSweepOfTimeStep()
const;
255 virtual void startSimulation()
override;
261 virtual void finishSimulation()
override;
263 {%
if STATELESS_PDE_TERMS %}
278 virtual bool patchCanUseStatelessPDETerms(
288 SolverState _solverState;
296 double _localMinTimeStampThisTimeStep;
297 double _localMaxTimeStampThisTimeStep;
315 {{ABSTRACT_SOLVER_USER_DECLARATIONS}}
_minGridCellHThisTimeStep(std::numeric_limits< double >::max()/NumberOfGridCellsPerPatchPerAxis/2.0)
_maxGridCellHThisTimeStep(0.0)
_minGridCellH(std::numeric_limits< double >::max()/NumberOfGridCellsPerPatchPerAxis/2.0)
_maxTimeStampThisTimeStep(0.0)
_minTimeStepSize(std::numeric_limits< double >::max())
_maxTimeStepSizeThisTimeStep(0.0)
_minTimeStampThisTimeStep(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.