67 static bool gridConstructed =
false;
68 static double nextMaxPlotTimeStamp = {{NAMESPACE | join(
"::")}}::FirstPlotTimeStamp;
69 static double nextMinPlotTimeStamp = {{NAMESPACE | join(
"::")}}::FirstPlotTimeStamp;
71 bool continueToSolve =
true;
72 static bool haveReceivedNoncriticialAssertion =
false;
81 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::Plot )
83 haveReceivedNoncriticialAssertion =
true;
85 "selectNextAlgorithmicStep()",
"non-critical assertion has been triggered in code. Dump final state and terminate"
89 continueToSolve =
false;
91 else if ( repositories::rerunPreviousGridSweep() ) {
93 "selectNextAlgorithmicStep()",
94 "rerun previous step " << repositories::StepRepository::toString(
102 else if (not gridConstructed) {
104 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::CreateGrid )
111 "selectNextAlgorithmicStep()",
113 ", which his smaller than global h_max=" << GlobalMaxH <<
114 ". Continue with load balancing "
121 "selectNextAlgorithmicStep()",
122 "mesh has been stationary for more than 5 grid sweeps. Stop grid construction"
124 gridConstructed =
true;
135 not repositories::loadBalancer.hasSplitRecently()
138 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::InitialConditions )
146 repositories::loadBalancer.hasSplitRecently()
149 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::CreateGrid )
157 {%
if INITIALISATIONSTEP_NAMES|length>0 %}
162 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::{{INITIALISATIONSTEP_NAMES[0]}} )
167 {%
for STEP_NUMBER in range(0,INITIALISATIONSTEP_NAMES|length-1) %}
169 repositories::StepRepository::toStepEnum(
peano4::parallel::Node::getInstance().getCurrentProgramStep())==repositories::StepRepository::Steps::{{INITIALISATIONSTEP_NAMES[STEP_NUMBER]}}
172 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::{{INITIALISATIONSTEP_NAMES[STEP_NUMBER+1]}} )
179 {%
if INITIALISATIONSTEP_NAMES|length>0 %}
180 repositories::StepRepository::toStepEnum(
peano4::parallel::Node::getInstance().getCurrentProgramStep())==repositories::StepRepository::Steps::{{INITIALISATIONSTEP_NAMES[-1]}}
185 TimeInBetweenPlots>0.0
188 "selectNextAlgorithmicStep()",
189 "plot initial condition"
192 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::Plot )
196 {%
if INITIALISATIONSTEP_NAMES|length>0 %}
197 repositories::StepRepository::toStepEnum(
peano4::parallel::Node::getInstance().getCurrentProgramStep())==repositories::StepRepository::Steps::{{INITIALISATIONSTEP_NAMES[-1]}}
203 "selectNextAlgorithmicStep()",
204 "no plotting active, switch to first time step immediately"
207 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::{{SOLVERSTEP_NAMES[0]}} )
215 {%
for STEP_NUMBER in range(0,SOLVERSTEP_NAMES|length-1) %}
217 repositories::StepRepository::toStepEnum(
peano4::parallel::Node::getInstance().getCurrentProgramStep())==repositories::StepRepository::Steps::{{SOLVERSTEP_NAMES[STEP_NUMBER]}}
220 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::{{SOLVERSTEP_NAMES[STEP_NUMBER+1]}} )
228 ( repositories::getMinTimeStamp()>=MinTerminalTime or repositories::getMaxTimeStamp()>=MaxTerminalTime )
230 ( TimeInBetweenPlots>0.0 )
233 "selectNextAlgorithmicStep()",
234 "plot final solution"
237 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::Plot )
243 ( repositories::getMinTimeStamp()>=MinTerminalTime or repositories::getMaxTimeStamp()>=MaxTerminalTime )
245 continueToSolve =
false;
250 TimeInBetweenPlots>0.0
252 (repositories::getMinTimeStamp()>=nextMinPlotTimeStamp or repositories::getMaxTimeStamp()>=nextMaxPlotTimeStamp)
254 if (repositories::getMinTimeStamp()>=nextMinPlotTimeStamp) {
255 nextMinPlotTimeStamp += TimeInBetweenPlots;
257 if (repositories::getMaxTimeStamp()>=nextMaxPlotTimeStamp) {
258 nextMaxPlotTimeStamp += TimeInBetweenPlots;
261 if ( nextMinPlotTimeStamp < repositories::getMinTimeStamp() ) {
263 "selectNextAlgorithmicStep()",
264 "code is asked to plot every dt=" << TimeInBetweenPlots <<
", but this seems to be less than the time step size of the solvers. " <<
265 "So postpone next plot to t=" << (repositories::getMinTimeStamp() + TimeInBetweenPlots)
267 nextMinPlotTimeStamp = repositories::getMinTimeStamp() + TimeInBetweenPlots;
269 else if ( nextMaxPlotTimeStamp < repositories::getMaxTimeStamp() ) {
271 "selectNextAlgorithmicStep()",
272 "code is asked to plot every dt=" << TimeInBetweenPlots <<
", but this seems to be less than the time step size of the solvers. " <<
273 "So postpone next plot to t=" << (repositories::getMaxTimeStamp() + TimeInBetweenPlots)
275 nextMaxPlotTimeStamp = repositories::getMaxTimeStamp() + TimeInBetweenPlots;
278 nextMaxPlotTimeStamp = std::max(nextMaxPlotTimeStamp,nextMinPlotTimeStamp);
281 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::Plot )
288 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::{{SOLVERSTEP_NAMES[0]}} )
297 ( repositories::getMinTimeStamp()>=MinTerminalTime or repositories::getMaxTimeStamp()>=MaxTerminalTime )
300 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::Cleanup )
307 repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::{{SOLVERSTEP_NAMES[0]}} )
316 continueToSolve =
false;
319 logError(
"selectNextAlgorithmicStep",
"no switch variant found" );
323 return continueToSolve;