Peano
Loading...
Searching...
No Matches
PosterioriLimitingAbstract.template.h
Go to the documentation of this file.
1// **********************************************************************************************
2// *** !!!WARNING!!! ***
3// *** WARNING: AUTO GENERATED FILE! DO NOT MODIFY BY HAND! YOUR CHANGES WILL BE OVERWRITTEN! ***
4// *** !!!WARNING!!! ***
5// *** Generated by Peano's Python API: www.peano-framework.org ***
6// **********************************************************************************************
7#pragma once
8
9#include "Constants.h"
10
11#include "exahype2/Solver.h"
12
14#include "tarch/la/Vector.h"
15#include "tarch/logging/Log.h"
16#include "tarch/mpi/Rank.h"
18
20
21#include "kernels/{{SOLVER_NAME}}/Quadrature.h"
22
23{{SOLVER_INCLUDES}}
24
25{% for item in NAMESPACE -%}
26 namespace {{ item }} {
27
28{%- endfor %}
29 class {{CLASSNAME}};
30
31{% for item in NAMESPACE -%}
32 }
33{%- endfor %}
34
35class {{NAMESPACE | join("::")}}::{{CLASSNAME}}: public ::exahype2::Solver {
36 public:
37 enum class SolverState {
38 GridConstruction,
39 GridInitialisation,
40 RegularSolver,
41 LimiterStatusSpreadingToNeighbours,
42 LimiterStatusSpreadingToSecondNeighbours,
43 LimiterSolver,
44 Plotting,
45 Suspended
46 };
47
48 static std::string toString(SolverState);
49
50 {{CLASSNAME}}();
51 ~{{CLASSNAME}}();
52
53 SolverState getSolverState() const;
54
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;
59
60 virtual double getMaxMeshSize() const override final;
61 virtual double getMinMeshSize() const override final;
62
63 //TODO: link these to the max and min of the other solvers
64 static constexpr double MaxAdmissibleCellH = 1000.;
65 static constexpr double MinAdmissibleCellH = 0.;
66
71 virtual void startGridConstructionStep() override;
72
77 virtual void finishGridConstructionStep() override;
78
79
84 virtual void startGridInitialisationStep() override;
85
90 virtual void finishGridInitialisationStep() override;
91
92
93 virtual void suspendSolversForOneGridSweep() override;
94
95
100 virtual void startTimeStep(
101 double globalMinTimeStamp,
102 double globalMaxTimeStamp,
103 double globalMinTimeStepSize,
104 double globalMaxTimeStepSize
105 ) override;
106
111 virtual void finishTimeStep() override;
112
113
118 virtual void startPlottingStep(
119 double globalMinTimeStamp,
120 double globalMaxTimeStamp,
121 double globalMinTimeStepSize,
122 double globalMaxTimeStepSize
123 ) override;
124
129 virtual void finishPlottingStep() override;
130
134 virtual bool mayPlot() const override;
135
140 bool isFirstGridSweepOfTimeStep() const;
141 bool isLastGridSweepOfTimeStep() const;
142
147 virtual void startSimulation() override;
148
153 virtual void finishSimulation() override;
154
155
156 public:
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}};
160
166 void addTroubledCell();
167 int getNumberOfTroubledCells() const;
168
174 void mapDiscreteMaximumPrincipleObservables(double* const observables, const double* const Q) const {
175 if (NumberOfDMPObservables>0) {
176 std::copy_n(Q,NumberOfDMPObservables,observables);
177 }
178 }
179
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;
193 }
194
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 %};
201{% endif %}
202
203 protected:
205
206 SolverState _solverState;
207
208 int _cellUpdates;
209
211
213
214 {{SOLVER_USER_DECLARATIONS}}
215};
Log Device.
Definition Log.h:516
std::string toString(Filter filter)
Definition convert.cpp:170
tarch::logging::Log _log("exahype2::fv")
Simple vector class.
Definition Vector.h:150