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 {
41 LimiterStatusSpreadingToNeighbours,
42 LimiterStatusSpreadingToSecondNeighbours,
48 static std::string
toString(SolverState);
53 SolverState getSolverState()
const;
55 double getMinTimeStamp(
bool ofCurrentlyRunningGridSweep=
false) const final;
56 double getMaxTimeStamp(
bool ofCurrentlyRunningGridSweep=false) const final;
57 double getMinTimeStepSize() const final;
58 double getMaxTimeStepSize() const final;
60 virtual
double getMaxMeshSize() const override final;
61 virtual
double getMinMeshSize() const override final;
64 static constexpr
double MaxAdmissibleCellH = 1000.;
65 static constexpr
double MinAdmissibleCellH = 0.;
71 virtual
void startGridConstructionStep() override;
77 virtual
void finishGridConstructionStep() override;
84 virtual
void startGridInitialisationStep() override;
90 virtual
void finishGridInitialisationStep() override;
93 virtual
void suspendSolversForOneGridSweep() override;
100 virtual
void startTimeStep(
101 double globalMinTimeStamp,
102 double globalMaxTimeStamp,
103 double globalMinTimeStepSize,
104 double globalMaxTimeStepSize
111 virtual
void finishTimeStep() override;
118 virtual
void startPlottingStep(
119 double globalMinTimeStamp,
120 double globalMaxTimeStamp,
121 double globalMinTimeStepSize,
122 double globalMaxTimeStepSize
129 virtual
void finishPlottingStep() override;
134 virtual
bool mayPlot() const override;
140 bool isFirstGridSweepOfTimeStep() const;
141 bool isLastGridSweepOfTimeStep() const;
147 virtual
void startSimulation() override;
153 virtual
void finishSimulation() override;
157 static constexpr
int NumberOfDMPObservables = {{NUMBER_OF_DMP_OBSERVABLES}};
158 static constexpr double RelaxationParameter = {{DMP_RELAXATION_PARAMETER}};
159 static constexpr double DifferencesScaling = {{DMP_DIFFERENCES_SCALING}};
166 void addTroubledCell();
167 int getNumberOfTroubledCells()
const;
174 void mapDiscreteMaximumPrincipleObservables(
double*
const observables,
const double*
const Q)
const {
175 if (NumberOfDMPObservables>0) {
176 std::copy_n(Q,NumberOfDMPObservables,observables);
185 double getDiscreteMaximumPrincipleRelaxationParameter(
186 const double& specifiedRelaxationParameter,
187 const int& observable,
188 const double& localMin,
189 const double& localMax,
190 const double& boundaryMinPerObservable,
191 const double& previousMax)
const {
192 return specifiedRelaxationParameter;
195{%
if ADMISSIBILITY_IMPLEMENTATION!=
"<none>" %}
196 virtual bool isPhysicallyAdmissible(
197 const double*
const Q,
200 const double timeStamp) {%
if ADMISSIBILITY_IMPLEMENTATION==
"<user-defined>" %} = 0 {%
else %}
final {% endif %};
206 SolverState _solverState;
214 {{SOLVER_USER_DECLARATIONS}}
_numberOfTroubledCellsThisTimeStep(0)
std::string toString(Filter filter)
tarch::logging::Log _log("exahype2::fv")