16 #include "../TestModels/DahlquistTestModel.hpp"
19 namespace Tempus_Unit_Test {
23 using Teuchos::rcp_const_cast;
24 using Teuchos::rcp_dynamic_cast;
117 class StepperRKModifierBogackiShampineTest
124 : out(Out), success(Success)
128 virtual ~StepperRKModifierBogackiShampineTest(){}
136 const double relTol = 1.0e-14;
137 auto stageNumber = stepper->getStageNumber();
140 auto currentState = sh->getCurrentState();
141 auto workingState = sh->getWorkingState();
142 const double dt = workingState->getTimeStep();
143 double time = currentState->getTime();
144 if (stageNumber >= 0) time += c(stageNumber)*dt;
146 auto x = workingState->getX();
147 auto xDot = workingState->getXDot();
148 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
153 auto DME = Teuchos::rcp_dynamic_cast<
159 const double x_0 = get_ele(*(x), 0);
160 const double xDot_0 = get_ele(*(xDot), 0);
172 const double X_i = get_ele(*(x), 0);
173 const double f_i = get_ele(*(xDot), 0);
174 if (stageNumber == 0) {
178 !stepper->getUseFSAL()) {
184 }
else if (stageNumber == 1) {
193 }
else if (stageNumber == 2) {
202 }
else if (stageNumber == 3) {
207 }
else if (workingState->getNConsecutiveFailures() > 0) {
219 const double x_1 = get_ele(*(x), 0);
220 time = workingState->getTime();
226 if (stepper->getUseEmbedded() ==
true) {
228 TEST_ASSERT(std::abs(workingState->getTolAbs()) < relTol);
230 TEST_ASSERT(std::abs(workingState->getErrorRel()) < relTol);
235 "Error - unknown action location.\n");
253 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
255 stepper->setModel(model);
256 stepper->setAppAction(modifier);
257 stepper->setICConsistency(
"Consistent");
258 stepper->setUseFSAL(
false);
259 stepper->initialize();
265 stepper->setInitialConditions(solutionHistory);
266 solutionHistory->initWorkingState();
268 solutionHistory->getWorkingState()->setTimeStep(dt);
269 solutionHistory->getWorkingState()->setTime(dt);
270 stepper->takeStep(solutionHistory);
284 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
286 stepper->setModel(model);
287 stepper->setAppAction(modifier);
288 stepper->setICConsistency(
"Consistent");
289 stepper->setUseFSAL(
true);
290 stepper->initialize();
296 stepper->setInitialConditions(solutionHistory);
297 solutionHistory->initWorkingState();
299 solutionHistory->getWorkingState()->setTimeStep(dt);
300 solutionHistory->getWorkingState()->setTime(dt);
301 stepper->takeStep(solutionHistory);
315 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
317 stepper->setModel(model);
318 stepper->setAppAction(modifier);
319 stepper->setICConsistency(
"Consistent");
320 stepper->setUseFSAL(
true);
321 stepper->initialize();
327 stepper->setInitialConditions(solutionHistory);
328 solutionHistory->initWorkingState();
330 solutionHistory->getWorkingState()->setTimeStep(dt);
331 solutionHistory->getWorkingState()->setTime(dt);
332 solutionHistory->getWorkingState()->setNConsecutiveFailures(1);
333 stepper->takeStep(solutionHistory);
347 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
349 stepper->setModel(model);
350 stepper->setAppAction(modifier);
351 stepper->setICConsistency(
"Consistent");
352 stepper->setUseFSAL(
false);
353 stepper->setUseEmbedded(
true);
354 stepper->initialize();
360 stepper->setInitialConditions(solutionHistory);
361 solutionHistory->initWorkingState();
363 solutionHistory->getWorkingState()->setTimeStep(dt);
364 solutionHistory->getWorkingState()->setTime(dt);
365 solutionHistory->getWorkingState()->setTolRel(1.0);
366 solutionHistory->getWorkingState()->setTolAbs(0.0);
367 stepper->takeStep(solutionHistory);
380 class StepperRKModifierXBogackiShampineTest
387 : out(Out), success(Success)
391 virtual ~StepperRKModifierXBogackiShampineTest(){}
396 const double time,
const double dt,
const int stageNumber,
399 const double relTol = 1.0e-14;
401 const double x_0 = get_ele(*(x), 0);
412 const double X_i = get_ele(*(x), 0);
413 if (stageNumber == 0) {
416 }
else if (stageNumber == 1) {
419 }
else if (stageNumber == 2) {
422 }
else if (stageNumber == 3) {
431 const double x_1 = get_ele(*(x), 0);
439 "Error - unknown action location.\n");
457 auto modifierX =
rcp(
new StepperRKModifierXBogackiShampineTest(out, success));
459 stepper->setModel(model);
460 stepper->setAppAction(modifierX);
461 stepper->setICConsistency(
"Consistent");
462 stepper->setUseFSAL(
false);
463 stepper->initialize();
469 stepper->setInitialConditions(solutionHistory);
470 solutionHistory->initWorkingState();
472 solutionHistory->getWorkingState()->setTimeStep(dt);
473 solutionHistory->getWorkingState()->setTime(dt);
474 stepper->takeStep(solutionHistory);
488 auto modifierX =
rcp(
new StepperRKModifierXBogackiShampineTest(out, success));
490 stepper->setModel(model);
491 stepper->setAppAction(modifierX);
492 stepper->setICConsistency(
"Consistent");
493 stepper->setUseFSAL(
true);
494 stepper->initialize();
500 stepper->setInitialConditions(solutionHistory);
501 solutionHistory->initWorkingState();
503 solutionHistory->getWorkingState()->setTimeStep(dt);
504 solutionHistory->getWorkingState()->setTime(dt);
505 stepper->takeStep(solutionHistory);
519 auto modifierX =
rcp(
new StepperRKModifierXBogackiShampineTest(out, success));
521 stepper->setModel(model);
522 stepper->setAppAction(modifierX);
523 stepper->setICConsistency(
"Consistent");
524 stepper->setUseFSAL(
true);
525 stepper->initialize();
531 stepper->setInitialConditions(solutionHistory);
532 solutionHistory->initWorkingState();
534 solutionHistory->getWorkingState()->setTimeStep(dt);
535 solutionHistory->getWorkingState()->setTime(dt);
536 solutionHistory->getWorkingState()->setNConsecutiveFailures(1);
537 stepper->takeStep(solutionHistory);
At the beginning of the stage.
At the beginning of the step.
Modify at the end of the step.
Modify after the implicit solve.
Base ModifierX for StepperRK.
Modify at the beginning of the stage.
The classic Dahlquist Test Problem.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Before the implicit solve.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
Modify before the implicit solve.
Base class for Runge-Kutta methods, ExplicitRK, DIRK and IMEX.
Modify at the beginning of the step.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Explicit RK Bogacki-Shampine Butcher Tableau.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Modify at the end of the stage.
MODIFIER_TYPE
Indicates the location of application action (see algorithm).
Modify before the explicit evaluation.
ACTION_LOCATION
Indicates the location of application action (see algorithm).
After the implicit solve.
Before the explicit evaluation.
#define TEUCHOS_ASSERT(assertion_test)
Base modifier for StepperRK.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const int, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.