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 -%}
38class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
57 enum class Offloadable {
61 enum class SolverState {
64 PlottingAfterGridInitialisation,
66 RungeKuttaSubStep0AfterGridInitialisation,
67 Plotting {%
for item in range(RK_STEPS) -%}
69 RungeKuttaSubStep{{item}}
73 static std::string
toString(SolverState);
75 static constexpr int NumberOfGridCellsPerPatchPerAxis = {{NUMBER_OF_GRID_CELLS_PER_PATCH_PER_AXIS}};
82 static constexpr double MaxAdmissiblePatchH = {{MAX_GRID_CELL_H}} * NumberOfGridCellsPerPatchPerAxis;
83 static constexpr double MaxAdmissibleGridCellH = {{MAX_GRID_CELL_H}};
84 static constexpr double MaxAdmissibleCellH = MaxAdmissiblePatchH;
94 static constexpr double MinAdmissiblePatchH = {{MIN_GRID_CELL_H}} * NumberOfGridCellsPerPatchPerAxis;
95 static constexpr double MinAdmissibleGridCellH = {{MIN_GRID_CELL_H}};
96 static constexpr double MinAdmissibleCellH = MinAdmissiblePatchH;
104 static std::bitset<Dimensions> PeriodicBC;
106 double getMinTimeStamp() const final;
107 double getMaxTimeStamp() const final;
108 double getMinTimeStepSize() const final;
109 double getMaxTimeStepSize() const final;
116 virtual ::
exahype2::RefinementCommand refinementCriterion(
117 const
double * __restrict__ Q,
118 const
tarch::la::Vector<Dimensions,
double>& meshCellCentre,
119 const
tarch::la::Vector<Dimensions,
double>& meshCellH,
121 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
124 virtual void initialCondition(
125 double * __restrict__ Q,
128 bool gridIsConstructed
129 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
132 {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<none>" %}
140 virtual void boundaryConditions(
141 const double * __restrict__ Qinside,
142 double * __restrict__ Qoutside,
147 ) {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
156 virtual void startGridConstructionStep()
override;
162 virtual void finishGridConstructionStep()
override;
170 virtual void startGridInitialisationStep()
override;
176 virtual void finishGridInitialisationStep()
override;
185 virtual void startTimeStep(
186 double globalMinTimeStamp,
187 double globalMaxTimeStamp,
188 double globalMinTimeStepSize,
189 double globalMaxTimeStepSize
196 virtual void finishTimeStep()
override;
203 virtual void startPlottingStep(
204 double globalMinTimeStamp,
205 double globalMaxTimeStamp,
206 double globalMinTimeStepSize,
207 double globalMaxTimeStepSize
215 virtual void finishPlottingStep()
override;
227 double getMaxPatchSize()
const;
228 double getMinPatchSize()
const;
229 double getMaxGridCellSize()
const;
230 double getMinGridCellSize()
const;
238 virtual double getMaxMeshSize() const override final;
239 virtual
double getMinMeshSize() const override final;
247 void update(
double timeStepSize,
double timeStamp,
double patchSize);
249 SolverState getSolverState() const;
251 #if defined(GPUOffloadingOMP)
252 #pragma omp declare target
257 #if defined(GPUOffloadingOMP)
258 #pragma omp end declare target
264 virtual bool mayPlot()
const override;
266 virtual void suspendSolversForOneGridSweep()
override;
272 bool isFirstGridSweepOfTimeStep()
const;
273 bool isLastGridSweepOfTimeStep()
const;
279 virtual void startSimulation()
override;
285 virtual void finishSimulation()
override;
290 SolverState _solverState;
292 double _minTimeStamp;
293 double _maxTimeStamp;
295 double _minTimeStampThisTimeStep;
296 double _maxTimeStampThisTimeStep;
298 double _localMinTimeStampThisTimeStep;
299 double _localMaxTimeStampThisTimeStep;
301 double _minGridCellH;
302 double _maxGridCellH;
304 double _minGridCellHThisTimeStep;
305 double _maxGridCellHThisTimeStep;
307 double _minTimeStepSize;
308 double _maxTimeStepSize;
310 double _minTimeStepSizeThisTimeStep;
311 double _maxTimeStepSizeThisTimeStep;
317 {{ABSTRACT_SOLVER_USER_DECLARATIONS}}
std::string toString(exahype2::RefinementCommand value)
NumberOfAuxiliaryVariables
This file is part of the multigrid project within Peano 4.
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.