23{%
if USE_VARIABLE_SHORTCUT is sameas
True %}
24#include "VariableShortcuts.h"
27{%
for item in NAMESPACE -%}
28 namespace {{ item }} {
33{%
for item in NAMESPACE -%}
39class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
41 enum class SolverState {
45 PlottingAfterGridInitialisation,
46 RungeKuttaSubStep0AfterGridInitialisation,
47 Plotting {%
for item in range(RK_STEPS) -%}
49 RungeKuttaSubStep{{item}}
51 {%
if RECONSTRUCTION_STAGES!=0 %} {%
for item in range(RECONSTRUCTION_STAGES) -%}
53 ReconstructionSubStep{{item}}
58 static std::string
toString(SolverState);
60 static constexpr int NumberOfGridCellsPerPatchPerAxis = {{NUMBER_OF_GRID_CELLS_PER_PATCH_PER_AXIS}};
67 static constexpr double MaxAdmissiblePatchH = {{MAX_GRID_CELL_H}} * NumberOfGridCellsPerPatchPerAxis;
68 static constexpr double MaxAdmissibleGridCellH = {{MAX_GRID_CELL_H}};
69 static constexpr double MaxAdmissibleCellH = MaxAdmissiblePatchH;
79 static constexpr double MinAdmissiblePatchH = {{MIN_GRID_CELL_H}} * NumberOfGridCellsPerPatchPerAxis;
80 static constexpr double MinAdmissibleGridCellH = {{MIN_GRID_CELL_H}};
81 static constexpr double MinAdmissibleCellH = MinAdmissiblePatchH;
89 static std::bitset<Dimensions> PeriodicBC;
91 double getMinTimeStamp(
bool ofCurrentlyRunningGridSweep=
false) const final;
92 double getMaxTimeStamp(
bool ofCurrentlyRunningGridSweep=false) const final;
93 double getMinTimeStepSize() const final;
94 double getMaxTimeStepSize() const final;
101 virtual ::
exahype2::RefinementCommand refinementCriterion(
102 const
double * __restrict__ Q,
103 const
tarch::la::
Vector<Dimensions,
double>& meshCellCentre,
104 const
tarch::la::
Vector<Dimensions,
double>& meshCellH,
106 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
109 virtual void initialCondition(
110 double * __restrict__ Q,
113 bool gridIsConstructed
114 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
117 {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<none>" %}
125 virtual void boundaryConditions(
126 const double * __restrict__ Qinside,
127 double * __restrict__ Qoutside,
132 ) {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
141 virtual void startGridConstructionStep()
override;
147 virtual void finishGridConstructionStep()
override;
155 virtual void startGridInitialisationStep()
override;
161 virtual void finishGridInitialisationStep()
override;
163 virtual void suspendSolversForOneGridSweep()
override;
171 virtual void startTimeStep(
172 double globalMinTimeStamp,
173 double globalMaxTimeStamp,
174 double globalMinTimeStepSize,
175 double globalMaxTimeStepSize
182 virtual void finishTimeStep()
override;
189 virtual void startPlottingStep(
190 double globalMinTimeStamp,
191 double globalMaxTimeStamp,
192 double globalMinTimeStepSize,
193 double globalMaxTimeStepSize
201 virtual void finishPlottingStep()
override;
213 double getMaxPatchSize(
bool currentTimeStep =
true)
const;
214 double getMinPatchSize(
bool currentTimeStep =
true)
const;
215 double getMaxGridCellSize(
bool currentTimeStep =
true)
const;
216 double getMinGridCellSize(
bool currentTimeStep =
true)
const;
224 virtual double getMaxMeshSize() const override final;
225 virtual
double getMinMeshSize() const override final;
233 void update(
double timeStepSize,
double timeStamp,
double patchSize);
235 SolverState getSolverState() const;
237 #if defined(GPUOffloadingOMP)
238 #pragma omp declare target
243 #if defined(GPUOffloadingOMP)
244 #pragma omp end declare target
251 virtual bool mayPlot()
const override;
257 bool isFirstGridSweepOfTimeStep()
const;
258 bool isLastGridSweepOfTimeStep()
const;
264 virtual void startSimulation()
override;
270 virtual void finishSimulation()
override;
275 SolverState _solverState;
283 double _localMinTimeStampThisTimeStep;
284 double _localMaxTimeStampThisTimeStep;
302 {{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.