19#include "kernels/{{SOLVER_NAME}}/Quadrature.h"
20#include "kernels/{{SOLVER_NAME}}/DGMatrices.h"
22{%
if USE_HALF_PRECISION==
True %}
26{%
if USE_VARIABLE_SHORTCUT is sameas
True %}
27#include "VariableShortcuts.h"
32{%
for item in NAMESPACE -%}
38{%
for item in NAMESPACE -%}
42class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
44 enum class SolverState {
48 PredictionOnHangingCells,
54 static std::string
toString(SolverState);
56 static constexpr int Order = {{ORDER}};
62 static constexpr double CFL = {{CFL_SAFETY_FACTOR}};
63 static constexpr double PNPM = {{CFL_ADER}};
68 {%
if USE_POINT_SOURCE %}
69 static constexpr int NumberOfPointSources = {{NUMBER_OF_POINT_SOURCES}};
70 double pointSourceLocation[NumberOfPointSources][Dimensions];
78 static constexpr double MaxAdmissibleCellH = {{MAX_CELL_H}};
88 static constexpr double MinAdmissibleCellH = {{MIN_CELL_H}};
96 static std::bitset<Dimensions> PeriodicBC;
98 double getMinTimeStamp() const final;
99 double getMaxTimeStamp() const final;
100 double getMinTimeStepSize() const final;
101 double getMaxTimeStepSize() const final;
111 virtual ::
exahype2::RefinementCommand refinementCriterion(
112 const {{SOLUTION_STORAGE_PRECISION}} * __restrict__ Q,
116 ) {%
if REFINEMENT_CRITERION_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
134 virtual void initialCondition(
135 {{SOLUTION_STORAGE_PRECISION}}* __restrict__ Q,
139 bool gridIsConstructed
140 ) {%
if INITIAL_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final {% endif %};
161 virtual void boundaryConditions(
162 const {{CORRECTOR_COMPUTATION_PRECISION}} * __restrict__ Qinside,
163 {{CORRECTOR_COMPUTATION_PRECISION}} * __restrict__ Qoutside,
168 ){%
if BOUNDARY_CONDITIONS_IMPLEMENTATION==
"<user-defined>" %}= 0{%
else %}
final{% endif %};
170 {%
if ADAPTIVE_PRECISION_IMPLEMENTATION!=
"<none>" %}
180 virtual ::exahype2::PrecisionCommand precisionCriterion(
181 const {{SOLUTION_STORAGE_PRECISION}} * __restrict__ Q,
185 SolverState currentState
186 ) {%
if ADAPTIVE_PRECISION_IMPLEMENTATION==
"<user-defined>" %} = 0{%
else %}
final {% endif %};
189 {%
if RIEMANN_SOLVER_IMPLEMENTATION!=
"<none>" %}
200 {{CORRECTOR_COMPUTATION_PRECISION}}*
const FL,
201 {{CORRECTOR_COMPUTATION_PRECISION}}*
const FR,
202 const {{CORRECTOR_COMPUTATION_PRECISION}}*
const QL,
203 const {{CORRECTOR_COMPUTATION_PRECISION}}*
const QR,
210 int faceIndex) {%
if RIEMANN_SOLVER_IMPLEMENTATION==
"<user-defined>" %} = 0{%
else %}
final {% endif %};
217 virtual void startGridConstructionStep()
override;
223 virtual void finishGridConstructionStep()
override;
230 virtual void startGridInitialisationStep()
override;
236 virtual void finishGridInitialisationStep()
override;
238 virtual void suspendSolversForOneGridSweep()
override;
244 virtual void startTimeStep(
245 double globalMinTimeStamp,
246 double globalMaxTimeStamp,
247 double globalMinTimeStepSize,
248 double globalMaxTimeStepSize
255 virtual void finishTimeStep()
override;
261 virtual void startPlottingStep(
262 double globalMinTimeStamp,
263 double globalMaxTimeStamp,
264 double globalMinTimeStepSize,
265 double globalMaxTimeStepSize
272 virtual void finishPlottingStep()
override;
277 double getMaxCellSize()
const;
278 double getMinCellSize()
const;
283 virtual double getMaxMeshSize() const override final;
284 virtual
double getMinMeshSize() const override final;
292 void update(
double timeStepSize,
double timeStamp,
double cellSize);
294 SolverState getSolverState() const;
299 virtual
bool mayPlot() const override;
305 bool isFirstGridSweepOfTimeStep() const;
306 bool isLastGridSweepOfTimeStep() const;
312 virtual
void startSimulation() override;
318 virtual
void finishSimulation() override;
320 {{ABSTRACT_SOLVER_USER_DECLARATIONS}}
325 SolverState _solverState;
327 double _minTimeStamp;
328 double _maxTimeStamp;
330 double _minTimeStampThisTimeStep;
331 double _maxTimeStampThisTimeStep;
333 double _localMinTimeStampThisTimeStep;
334 double _localMaxTimeStampThisTimeStep;
339 double _minCellHThisTimeStep;
340 double _maxCellHThisTimeStep;
342 double _minTimeStepSize;
343 double _maxTimeStepSize;
345 double _minTimeStepSizeThisTimeStep;
346 double _maxTimeStepSizeThisTimeStep;
std::string toString(exahype2::RefinementCommand value)
void riemannSolver(double *FL, double *FR, const double *const QL, const double *const QR, const double dt, const int direction, bool isBoundaryFace, int faceIndex)
NumberOfAuxiliaryVariables
This file is part of the ExaHyPE 2 project within Peano 4.