26 {{CONSTRUCTOR_IMPLEMENTATION}}
30{{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::~{{CLASSNAME}}(){
35double {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getMinTimeStamp()
const {
36 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMinTimeStamp();
40double {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getMaxTimeStamp()
const {
41 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMaxTimeStamp();
45double {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getMinTimeStepSize()
const {
46 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMinTimeStepSize();
50double {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getMaxTimeStepSize()
const {
51 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMaxTimeStepSize();
55double {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getMaxMeshSize()
const {
56 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMaxMeshSize();
60double {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getMinMeshSize()
const {
61 return repositories::{{REGULAR_SOLVER_INSTANCE}}.getMinMeshSize();
64int {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getNumberOfDoFs()
const {
68{{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::SolverState {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::getSolverState()
const {
73void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::startGridConstructionStep() {
74 assertion( _solverState == SolverState::GridConstruction );
78void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::finishGridConstructionStep() {
82void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::startGridInitialisationStep() {
83 _solverState = SolverState::GridInitialisation;
87void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::finishGridInitialisationStep() {
92void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::suspendSolversForOneGridSweep() {
93 _solverState = SolverState::Suspended;
97void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::startTimeStep() {
98 switch (_solverState) {
99 case SolverState::GridConstruction:
100 _solverState = SolverState::GridInitialisation;
102 case SolverState::GridInitialisation:
103 case SolverState::PlottingAfterGridInitialisation:
106 case SolverState::LimiterStatusSpreadingToNeighbours:
107 case SolverState::TimeStepping:
108 case SolverState::Plotting:
109 case SolverState::Suspended:
110 _solverState = SolverState::TimeStepping;
114 {{START_TIME_STEP_IMPLEMENTATION}}
116 if(_solverState==SolverState::LimiterStatusSpreadingToNeighbours){
117 repositories::{{REGULAR_SOLVER_INSTANCE}}.suspendSolversForOneGridSweep();
118 repositories::{{LIMITER_SOLVER_INSTANCE}}.suspendSolversForOneGridSweep();
124void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::finishTimeStep() {
125 if ( isLastGridSweepOfTimeStep() ) {
131 tarch::mpi::Rank::getInstance().allReduce(
136 [&]() ->
void { tarch::services::ServiceRepository::getInstance().receiveDanglingMessages(); }
139 if(_solverState==SolverState::LimiterStatusSpreadingToNeighbours){
141 tarch::mpi::Rank::getInstance().allReduce(
142 &newNumberOfTroubleCells,
146 [&]() ->
void { tarch::services::ServiceRepository::getInstance().receiveDanglingMessages(); }
152 {{FINISH_TIME_STEP_IMPLEMENTATION}}
158void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::printTimeStep() {
159 {{PRINT_TIME_STEP_IMPLEMENTATION}}
161 if (getNumberOfTroubledCells() > 0) {
162 logInfo(
"printTimeStep()",
"Solver {{SOLVER_NAME}}:");
163 logInfo(
"printTimeStep()",
"Number of troubled cells: " << getNumberOfTroubledCells());
168void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::startPlottingStep(){
169 if ( _solverState==SolverState::GridInitialisation) {
170 _solverState = SolverState::PlottingAfterGridInitialisation;
173 _solverState = SolverState::Plotting;
178void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::finishPlottingStep() {
182std::string {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::toString(SolverState state) {
184 case SolverState::GridConstruction:
185 return "grid-construction";
186 case SolverState::GridInitialisation:
187 return "grid-initialisation";
188 case SolverState::PlottingAfterGridInitialisation:
189 return "plotting-after-grid-initialisation";
190 case SolverState::LimiterStatusSpreadingToNeighbours:
191 return "limiter status spreading to neighbours";
192 case SolverState::TimeStepping:
193 return "timestepping";
194 case SolverState::Plotting:
196 case SolverState::Suspended:
203bool {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::mayPlot()
const {
204 return _solverState!=SolverState::LimiterStatusSpreadingToNeighbours;
208bool {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::isFirstGridSweepOfTimeStep()
const {
210 _solverState!=SolverState::LimiterStatusSpreadingToNeighbours
212 repositories::{{REGULAR_SOLVER_INSTANCE}}.isFirstGridSweepOfTimeStep()
214 repositories::{{LIMITER_SOLVER_INSTANCE}}.isFirstGridSweepOfTimeStep()
220bool {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::isLastGridSweepOfTimeStep()
const {
222 _solverState!=SolverState::LimiterStatusSpreadingToNeighbours
224 repositories::{{REGULAR_SOLVER_INSTANCE}}.isLastGridSweepOfTimeStep()
226 repositories::{{LIMITER_SOLVER_INSTANCE}}.isLastGridSweepOfTimeStep()
231void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::startSimulation() {
236void {{NAMESPACE | join(
"::")}}::{{CLASSNAME}}::finishSimulation() {
241void {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::addTroubledCell(){
242 tarch::multicore::Lock lock(_semaphore);
245int {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::getNumberOfTroubledCells()
const {
250{%
if ADMISSIBILITY_IMPLEMENTATION!=
"<empty>" and ADMISSIBILITY_IMPLEMENTATION!=
"<user-defined>" %}
251bool {{FULL_QUALIFIED_NAMESPACE}}::{{CLASSNAME}}::isPhysicallyAdmissible(
252 const {{REGULAR_SOLVER_STORAGE_PRECISION}}*
const Q,
253 const tarch::la::Vector<DIMENSIONS,double>&
x,
254 const tarch::la::Vector<DIMENSIONS,double>& h,
258 {%
if ADMISSIBILITY_IMPLEMENTATION!=
"<none>"%}
259 {{ADMISSIBILITY_IMPLEMENTATION}}
268{{SOLVER_USER_DEFINITIONS}}
tarch::logging::Log _log("::")