16{%
if USE_VARIABLE_SHORTCUT is sameas
True %}
17#include "VariableShortcuts.h"
22{%
for item in NAMESPACE -%}
23 namespace {{ item }} {
28{%
for item in NAMESPACE -%}
32class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
34 enum class SolverState {
39 PlottingInitialCondition,
40 PrimaryAfterGridInitialisation,
45 static std::string
toString(SolverState);
47 static constexpr int NumberOfFiniteVolumesPerAxisPerPatch = {{NUMBER_OF_VOLUMES_PER_AXIS}};
54 static constexpr double MaxAdmissiblePatchH = {{MAX_VOLUME_H}} * NumberOfFiniteVolumesPerAxisPerPatch;
55 static constexpr double MaxAdmissibleVolumeH = {{MAX_VOLUME_H}};
56 static constexpr double MaxAdmissibleCellH = MaxAdmissiblePatchH;
66 static constexpr double MinAdmissiblePatchH = {{MIN_VOLUME_H}} * NumberOfFiniteVolumesPerAxisPerPatch;
67 static constexpr double MinAdmissibleVolumeH = {{MIN_VOLUME_H}};
68 static constexpr double MinAdmissibleCellH = MinAdmissiblePatchH;
75 static std::bitset<Dimensions> PeriodicBC;
77 double getMinTimeStamp() const final;
78 double getMaxTimeStamp() const final;
79 double getMinTimeStepSize() const final;
80 double getMaxTimeStepSize() const final;
88 virtual ::
exahype2::RefinementCommand refinementCriterion(
89 [[maybe_unused]] const
double* __restrict__ Q,
90 [[maybe_unused]] const
tarch::la::Vector<Dimensions,
double>& volumeCentre,
91 [[maybe_unused]] const
tarch::la::Vector<Dimensions,
double>& volumeH,
92 [[maybe_unused]]
double t
93 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
95 virtual void initialCondition(
96 [[maybe_unused]]
double* __restrict__ Q,
99 [[maybe_unused]]
bool gridIsConstructed
100 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
102 {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION!=
"<none>" %}
110 virtual void boundaryConditions(
111 [[maybe_unused]]
const double* __restrict__ Qinside,
112 [[maybe_unused]]
double* __restrict__ Qoutside,
115 [[maybe_unused]]
double t,
116 [[maybe_unused]]
int normal
117 ) {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
124 virtual void startGridConstructionStep()
override;
130 virtual void finishGridConstructionStep()
override;
136 virtual void startGridInitialisationStep()
override;
142 virtual void finishGridInitialisationStep()
override;
148 virtual void startTimeStep(
149 double globalMinTimeStamp,
150 double globalMaxTimeStamp,
151 double globalMinTimeStepSize,
152 double globalMaxTimeStepSize
159 virtual void finishTimeStep()
override;
165 virtual void startPlottingStep(
166 double globalMinTimeStamp,
167 double globalMaxTimeStamp,
168 double globalMinTimeStepSize,
169 double globalMaxTimeStepSize
176 virtual void finishPlottingStep()
override;
178 virtual void suspendSolversForOneGridSweep()
override;
189 double getMaxPatchSize()
const;
190 double getMinPatchSize()
const;
191 double getMaxVolumeSize()
const;
192 double getMinVolumeSize()
const;
197 virtual double getMaxMeshSize() const override final;
198 virtual
double getMinMeshSize() const override final;
206 void update(
double timeStepSize,
double timeStamp,
double patchSize);
208 SolverState getSolverState() const;
213 static constexpr
int NumberOfUnknowns = {{NUMBER_OF_UNKNOWNS}};
227 virtual bool mayPlot()
const override;
240 bool isFirstGridSweepOfTimeStep()
const;
241 bool isLastGridSweepOfTimeStep()
const;
243 {%
if STATELESS_PDE_TERMS %}
258 virtual bool patchCanUseStatelessPDETerms(
269 virtual void startSimulation()
override;
275 virtual void finishSimulation()
override;
280 SolverState _solverState;
282 double _minTimeStamp;
283 double _maxTimeStamp;
285 double _minTimeStampThisTimeStep;
286 double _maxTimeStampThisTimeStep;
288 double _localMinTimeStampThisTimeStep;
289 double _localMaxTimeStampThisTimeStep;
294 double _minVolumeHThisTimeStep;
295 double _maxVolumeHThisTimeStep;
297 double _minTimeStepSize;
298 double _maxTimeStepSize;
300 double _minTimeStepSizeThisTimeStep;
301 double _maxTimeStepSizeThisTimeStep;
307 {{ABSTRACT_SOLVER_USER_DECLARATIONS}}
std::string toString(exahype2::RefinementCommand value)
NumberOfAuxiliaryVariables
This file is part of the ExaHyPE 2 project within Peano 4.
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.