21#include "kernels/{{SOLVER_NAME}}/Quadrature.h"
25{%
for item in NAMESPACE -%}
26 namespace {{ item }} {
31{%
for item in NAMESPACE -%}
35class {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
37 enum class SolverState {
40 LimiterStatusSpreadingToNeighbours,
43 PlottingAfterGridInitialisation,
47 static std::string
toString(SolverState);
52 SolverState getSolverState()
const;
54 double getMinTimeStamp(
bool ofCurrentlyRunningGridSweep=
false) const final;
55 double getMaxTimeStamp(
bool ofCurrentlyRunningGridSweep=false) const final;
56 double getMinTimeStepSize() const final;
57 double getMaxTimeStepSize() const final;
59 virtual
double getMaxMeshSize() const override final;
60 virtual
double getMinMeshSize() const override final;
63 static constexpr
double MaxAdmissibleCellH = 1000.;
64 static constexpr
double MinAdmissibleCellH = 0.;
70 virtual
void startGridConstructionStep() override;
76 virtual
void finishGridConstructionStep() override;
83 virtual
void startGridInitialisationStep() override;
89 virtual
void finishGridInitialisationStep() override;
92 virtual
void suspendSolversForOneGridSweep() override;
99 virtual
void startTimeStep(
100 double globalMinTimeStamp,
101 double globalMaxTimeStamp,
102 double globalMinTimeStepSize,
103 double globalMaxTimeStepSize
110 virtual
void finishTimeStep() override;
117 virtual
void startPlottingStep(
118 double globalMinTimeStamp,
119 double globalMaxTimeStamp,
120 double globalMinTimeStepSize,
121 double globalMaxTimeStepSize
128 virtual
void finishPlottingStep() override;
133 virtual
bool mayPlot() const override;
139 bool isFirstGridSweepOfTimeStep() const;
140 bool isLastGridSweepOfTimeStep() const;
146 virtual
void startSimulation() override;
152 virtual
void finishSimulation() override;
161 void addTroubledCell();
162 int getNumberOfTroubledCells() const;
167 void mapDiscreteMaximumPrincipleObservables(
double* const observables, const
double* const Q)
const {
174 double getDiscreteMaximumPrincipleRelaxationParameter(
175 const double& specifiedRelaxationParameter,
176 const int& observable,
177 const double& localMin,
178 const double& localMax,
179 const double& boundaryMinPerObservable,
180 const double& previousMax)
const {
185{%
if ADMISSIBILITY_IMPLEMENTATION!=
"<none>" %}
186 virtual bool isPhysicallyAdmissible(
187 const double*
const Q,
190 const double timeStamp) {%
if ADMISSIBILITY_IMPLEMENTATION==
"<user-defined>" %} = 0 {%
else %}
final {% endif %};
196 SolverState _solverState;
204 {{SOLVER_USER_DECLARATIONS}}
_totalNumberOfTroubledCells(0)
std::string toString(Filter filter)
tarch::logging::Log _log("exahype2::fv")
void triggerNonCriticalAssertion(std::string file, int line, std::string expression, std::string parameterValuePairs)
Trigger a non-critical assertion.