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(
bool ofCurrentlyRunningGridSweep=
false) const final;
107 double getMaxTimeStamp(
bool ofCurrentlyRunningGridSweep=false) 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(
bool currentTimeStep =
true)
const;
228 double getMinPatchSize(
bool currentTimeStep =
true)
const;
229 double getMaxGridCellSize(
bool currentTimeStep =
true)
const;
230 double getMinGridCellSize(
bool currentTimeStep =
true)
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;
298 double _localMinTimeStampThisTimeStep;
299 double _localMaxTimeStampThisTimeStep;
317 {{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.