Peano
Loading...
Searching...
No Matches
PosterioriLimitingAbstract.template.cpp
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#include "{{CLASSNAME}}.h"
8
9#include <algorithm>
10
11#include "Constants.h"
12
14
15#include "repositories/SolverRepository.h"
16
17tarch::logging::Log {{NAMESPACE | join("::")}}::{{CLASSNAME}}::{{CLASSNAME}}::_log("{{NAMESPACE | join("::")}}::{{CLASSNAME}}::{{CLASSNAME}}");
18
19{{NAMESPACE | join("::")}}::{{CLASSNAME}}::{{CLASSNAME}}():
20 _solverState(SolverState::GridConstruction),
23 {{CONSTRUCTOR_IMPLEMENTATION}}
24
25 kernels::{{SOLVER_NAME}}::Quadrature<double>::initQuadratureNodesAndWeights();
26}
27
28{{NAMESPACE | join("::")}}::{{CLASSNAME}}::~{{CLASSNAME}}(){
29 kernels::{{SOLVER_NAME}}::Quadrature<double>::freeQuadratureNodesAndWeights();
30}
31
32double {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getMinTimeStamp(bool ofCurrentlyRunningGridSweep) const {
33 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMinTimeStamp();
34}
35
36double {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getMaxTimeStamp(bool ofCurrentlyRunningGridSweep) const {
37 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMaxTimeStamp();
38}
39
40double {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getMinTimeStepSize() const {
41 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMinTimeStepSize();
42}
43
44double {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getMaxTimeStepSize() const {
45 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMaxTimeStepSize();
46}
47
48double {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getMaxMeshSize() const {
49 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMaxMeshSize();
50}
51
52double {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getMinMeshSize() const {
53 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMinMeshSize();
54}
55
56{{NAMESPACE | join("::")}}::{{CLASSNAME}}::SolverState {{NAMESPACE | join("::")}}::{{CLASSNAME}}::getSolverState() const {
57 return _solverState;
58}
59
60void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::startGridConstructionStep() {
61 assertion( _solverState == SolverState::GridConstruction );
62}
63
64void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::finishGridConstructionStep() {}
65
66void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::startGridInitialisationStep() {
67 _solverState = SolverState::GridInitialisation;
68}
69
70void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::finishGridInitialisationStep() {}
71
72void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::suspendSolversForOneGridSweep() {
73 _solverState = SolverState::Suspended;
74}
75
76void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::startTimeStep(
77 double globalMinTimeStamp,
78 double globalMaxTimeStamp,
79 double globalMinTimeStepSize,
80 double globalMaxTimeStepSize
81) {
82 switch (_solverState) {
83 case SolverState::GridConstruction:
84 _solverState = SolverState::GridInitialisation;
85 break;
86 case SolverState::GridInitialisation:
87 case SolverState::Suspended:
88 case SolverState::Plotting:
89 case SolverState::RegularSolver:
90 _solverState = (_numberOfTroubledCellsThisTimeStep == 0 ?
91 SolverState::RegularSolver : SolverState::LimiterStatusSpreadingToNeighbours);
92 break;
93 case SolverState::LimiterStatusSpreadingToNeighbours:
94 _solverState = SolverState::LimiterStatusSpreadingToSecondNeighbours;
95 break;
96 case SolverState::LimiterStatusSpreadingToSecondNeighbours:
97 _solverState = SolverState::LimiterSolver;
98 break;
99 case SolverState::LimiterSolver:
100 _solverState = SolverState::RegularSolver;
101 break;
102 }
103
104 if (_solverState==SolverState::RegularSolver) {
105 _cellUpdates = 0;
107 }
108
109 {{START_TIME_STEP_IMPLEMENTATION}}
110
111 if (_solverState==SolverState::RegularSolver) {
112 repositories::{{LIMITER_SOLVER_INSTANCE}}.suspendSolversForOneGridSweep();
113
114 _cellUpdates = 0;
116 }
117
118 if (_solverState==SolverState::LimiterSolver) {
119 repositories::{{REGULAR_SOLVER_INSTANCE}}.suspendSolversForOneGridSweep();
120 }
121
122 if(_solverState==SolverState::LimiterStatusSpreadingToNeighbours
123 or _solverState==SolverState::LimiterStatusSpreadingToSecondNeighbours
124 ) {
125 repositories::{{LIMITER_SOLVER_INSTANCE}}.suspendSolversForOneGridSweep();
126 repositories::{{REGULAR_SOLVER_INSTANCE}}.suspendSolversForOneGridSweep();
127 }
128
129 if (
131// and ( _solverState==SolverState::RegularSolver or _solverState==SolverState::LimiterSolver )
132 ) {
133
134 logInfo("startTimeStep(...)", "Solver {{SOLVER_NAME}}:");
135 logInfo("startTimeStep(...)", "total number of troubled cells: " << _numberOfTroubledCellsThisTimeStep);
136 logInfo("startTimeStep(...)", "phase " + toString(_solverState));
137 }
138}
139
140void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::finishTimeStep() {
141 if (isLastGridSweepOfTimeStep()) {
142 #ifdef Parallel
143 int newCellUpdates = _cellUpdates;
144 int newNumberOfTroubleCells = _numberOfTroubledCellsThisTimeStep;
145
147 &newCellUpdates,
149 1, MPI_INT,
150 MPI_SUM,
152 );
153
155 &newNumberOfTroubleCells,
157 1, MPI_INT,
158 MPI_SUM,
160 );
161 #endif
162
163 {{FINISH_TIME_STEP_IMPLEMENTATION}}
164 }
165}
166
167void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::startPlottingStep(
168 double globalMinTimeStamp,
169 double globalMaxTimeStamp,
170 double globalMinTimeStepSize,
171 double globalMaxTimeStepSize
172) {
173 assertion( mayPlot() );
174 _solverState = SolverState::Plotting;
175}
176
177
178void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::finishPlottingStep() {
179}
180
181
182std::string {{NAMESPACE | join("::")}}::{{CLASSNAME}}::toString(SolverState state) {
183 switch (state) {
184 case SolverState::GridConstruction:
185 return "grid-construction";
186 case SolverState::GridInitialisation:
187 return "grid-initialisation";
188 case SolverState::RegularSolver:
189 return "regular-(non-limiting)-solver";
190 case SolverState::LimiterStatusSpreadingToNeighbours:
191 return "limiter-status-spreading-to-neighbours";
192 case SolverState::LimiterStatusSpreadingToSecondNeighbours:
193 return "limiter-status-spreading-to-second-neighbours";
194 case SolverState::LimiterSolver:
195 return "limiting-solver";
196 case SolverState::Plotting:
197 return "plotting";
198 case SolverState::Suspended:
199 return "suspended";
200 }
201 return "<undef>";
202}
203
204
205bool {{NAMESPACE | join("::")}}::{{CLASSNAME}}::mayPlot() const {
206 return
207 (
208 (
209 _solverState==SolverState::GridInitialisation
210 or
211 _solverState==SolverState::RegularSolver
212 and repositories::{{REGULAR_SOLVER_INSTANCE}}.mayPlot()
214 )
215 or
216 (
217 _solverState==SolverState::LimiterSolver and
218 repositories::{{LIMITER_SOLVER_INSTANCE}}.mayPlot()
219 )
220 );
221}
222
223
224bool {{NAMESPACE | join("::")}}::{{CLASSNAME}}::isFirstGridSweepOfTimeStep() const {
225 return (
226 ( _solverState==SolverState::RegularSolver and repositories::{{REGULAR_SOLVER_INSTANCE}}.isFirstGridSweepOfTimeStep() )
227 or
228 ( _solverState==SolverState::LimiterSolver and repositories::{{LIMITER_SOLVER_INSTANCE}}.isFirstGridSweepOfTimeStep() )
229 );
230
231}
232
233
234bool {{NAMESPACE | join("::")}}::{{CLASSNAME}}::isLastGridSweepOfTimeStep() const {
235 return (
236 ( _solverState==SolverState::RegularSolver and repositories::{{REGULAR_SOLVER_INSTANCE}}.isLastGridSweepOfTimeStep() )
237 or
238 ( _solverState==SolverState::LimiterSolver and repositories::{{LIMITER_SOLVER_INSTANCE}}.isLastGridSweepOfTimeStep() )
239 );
240}
241
242
243void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::startSimulation() {
244
245}
246
247
248void {{NAMESPACE | join("::")}}::{{CLASSNAME}}::finishSimulation() {
249
250}
251
252
253void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::addTroubledCell(){
255}
256int {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::getNumberOfTroubledCells() const {
258}
259
260
261{% if ADMISSIBILITY_IMPLEMENTATION!="<empty>" and ADMISSIBILITY_IMPLEMENTATION!="<user-defined>" %}
262bool {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::isPhysicallyAdmissible(
263 const double* const Q,
266 const double timeStamp
267){
268 {% if ADMISSIBILITY_IMPLEMENTATION!="<none>"%}
269 {{ADMISSIBILITY_IMPLEMENTATION}}
270 {% else %}
271 return true;
272 {% endif %}
273
274}
275{% endif %}
276
277{{SOLVER_USER_DEFINITIONS}}
#define assertion(expr)
AutomatonState state
#define logInfo(methodName, logMacroMessageStream)
Wrapper macro around tarch::tarch::logging::Log to improve logging.
Definition Log.h:411
_cellUpdates(0)
Log Device.
Definition Log.h:516
bool isGlobalMaster() const
Is this node the global master process, i.e.
Definition Rank.cpp:420
static Rank & getInstance()
This operation returns the singleton instance.
Definition Rank.cpp:539
void allReduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, std::function< void()> waitor=[]() -> void {})
Definition Rank.cpp:284
virtual void receiveDanglingMessages() override
Answer to MPI Messages.
static ServiceRepository & getInstance()
std::string toString(Filter filter)
Definition convert.cpp:170
tarch::logging::Log _log("exahype2::fv")
Definition idx.h:5
Simple vector class.
Definition Vector.h:150