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 TimeStepAfterGridInitialisation,
40 PlottingAfterGridInitialisation,
44 static std::string
toString(SolverState);
46 static constexpr int NumberOfFiniteVolumesPerAxisPerPatch = {{NUMBER_OF_VOLUMES_PER_AXIS}};
53 static constexpr double MaxAdmissiblePatchH = {{MAX_VOLUME_H}} * NumberOfFiniteVolumesPerAxisPerPatch;
54 static constexpr double MaxAdmissibleVolumeH = {{MAX_VOLUME_H}};
55 static constexpr double MaxAdmissibleCellH = MaxAdmissiblePatchH;
65 static constexpr double MinAdmissiblePatchH = {{MIN_VOLUME_H}} * NumberOfFiniteVolumesPerAxisPerPatch;
66 static constexpr double MinAdmissibleVolumeH = {{MIN_VOLUME_H}};
67 static constexpr double MinAdmissibleCellH = MinAdmissiblePatchH;
74 static std::bitset<Dimensions> PeriodicBC;
76 double getMinTimeStamp() const final;
77 double getMaxTimeStamp() const final;
78 double getMinTimeStepSize() const final;
79 double getMaxTimeStepSize() const final;
85 virtual ::
exahype2::RefinementCommand refinementCriterion(
86 [[maybe_unused]] const
double* __restrict__ Q,
87 [[maybe_unused]] const
tarch::la::Vector<Dimensions,
double>& volumeCentre,
88 [[maybe_unused]] const
tarch::la::Vector<Dimensions,
double>& volumeH,
89 [[maybe_unused]]
double t
90 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
92 virtual void initialCondition(
93 [[maybe_unused]]
double* __restrict__ Q,
96 [[maybe_unused]]
bool gridIsConstructed
97 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
99 {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<none>" %}
107 virtual void boundaryConditions(
108 [[maybe_unused]]
const double* __restrict__ Qinside,
109 [[maybe_unused]]
double* __restrict__ Qoutside,
112 [[maybe_unused]]
double t,
113 [[maybe_unused]]
int normal
114 ) {%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
121 virtual void startGridConstructionStep()
override;
127 virtual void finishGridConstructionStep()
override;
133 virtual void startGridInitialisationStep()
override;
139 virtual void finishGridInitialisationStep()
override;
145 virtual void startTimeStep(
146 double globalMinTimeStamp,
147 double globalMaxTimeStamp,
148 double globalMinTimeStepSize,
149 double globalMaxTimeStepSize
156 virtual void finishTimeStep()
override;
162 virtual void startPlottingStep(
163 double globalMinTimeStamp,
164 double globalMaxTimeStamp,
165 double globalMinTimeStepSize,
166 double globalMaxTimeStepSize
173 virtual void finishPlottingStep()
override;
184 double getMaxPatchSize()
const;
185 double getMinPatchSize()
const;
186 double getMaxVolumeSize()
const;
187 double getMinVolumeSize()
const;
192 virtual double getMaxMeshSize() const override final;
193 virtual
double getMinMeshSize() const override final;
201 void update(
double timeStepSize,
double timeStamp,
double patchSize);
203 SolverState getSolverState() const;
205 #if defined(GPUOffloadingOMP)
206 #pragma omp declare target
211 #if defined(GPUOffloadingOMP)
212 #pragma omp end declare target
218 virtual bool mayPlot()
const override;
224 bool isFirstGridSweepOfTimeStep()
const;
225 bool isLastGridSweepOfTimeStep()
const;
227 {%
if STATELESS_PDE_TERMS %}
242 virtual bool patchCanUseStatelessPDETerms(
253 virtual void startSimulation()
override;
255 virtual void suspendSolversForOneGridSweep()
override;
261 virtual void finishSimulation()
override;
266 SolverState _solverState;
268 double _minTimeStamp;
269 double _maxTimeStamp;
271 double _minTimeStampThisTimeStep;
272 double _maxTimeStampThisTimeStep;
274 double _localMinTimeStampThisTimeStep;
275 double _localMaxTimeStampThisTimeStep;
280 double _minVolumeHThisTimeStep;
281 double _maxVolumeHThisTimeStep;
283 double _minTimeStepSize;
284 double _maxTimeStepSize;
286 double _minTimeStepSizeThisTimeStep;
287 double _maxTimeStepSizeThisTimeStep;
293 {{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.