16 #include "../TestModels/DahlquistTestModel.hpp"
18 namespace Tempus_Unit_Test {
22 using Teuchos::rcp_const_cast;
23 using Teuchos::rcp_dynamic_cast;
117 class StepperRKModifierBogackiShampineTest
123 : 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();
152 auto DME = Teuchos::rcp_dynamic_cast<
154 stepper->getModel());
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()) {
185 else if (stageNumber == 1) {
195 else if (stageNumber == 2) {
206 else if (stageNumber == 3) {
213 else if (workingState->getNConsecutiveFailures() > 0) {
226 const double x_1 = get_ele(*(x), 0);
227 time = workingState->getTime();
233 if (stepper->getUseEmbedded() ==
true) {
235 TEST_ASSERT(std::abs(workingState->getTolAbs()) < relTol);
237 TEST_ASSERT(std::abs(workingState->getErrorRel()) < relTol);
242 "Error - unknown action location.\n");
258 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
260 stepper->setModel(model);
261 stepper->setAppAction(modifier);
262 stepper->setICConsistency(
"Consistent");
263 stepper->setUseFSAL(
false);
264 stepper->initialize();
270 stepper->setInitialConditions(solutionHistory);
271 solutionHistory->initWorkingState();
273 solutionHistory->getWorkingState()->setTimeStep(dt);
274 solutionHistory->getWorkingState()->setTime(dt);
275 stepper->takeStep(solutionHistory);
288 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
290 stepper->setModel(model);
291 stepper->setAppAction(modifier);
292 stepper->setICConsistency(
"Consistent");
293 stepper->setUseFSAL(
true);
294 stepper->initialize();
300 stepper->setInitialConditions(solutionHistory);
301 solutionHistory->initWorkingState();
303 solutionHistory->getWorkingState()->setTimeStep(dt);
304 solutionHistory->getWorkingState()->setTime(dt);
305 stepper->takeStep(solutionHistory);
318 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
320 stepper->setModel(model);
321 stepper->setAppAction(modifier);
322 stepper->setICConsistency(
"Consistent");
323 stepper->setUseFSAL(
true);
324 stepper->initialize();
330 stepper->setInitialConditions(solutionHistory);
331 solutionHistory->initWorkingState();
333 solutionHistory->getWorkingState()->setTimeStep(dt);
334 solutionHistory->getWorkingState()->setTime(dt);
335 solutionHistory->getWorkingState()->setNConsecutiveFailures(1);
336 stepper->takeStep(solutionHistory);
349 auto modifier =
rcp(
new StepperRKModifierBogackiShampineTest(out, success));
351 stepper->setModel(model);
352 stepper->setAppAction(modifier);
353 stepper->setICConsistency(
"Consistent");
354 stepper->setUseFSAL(
false);
355 stepper->setUseEmbedded(
true);
356 stepper->initialize();
362 stepper->setInitialConditions(solutionHistory);
363 solutionHistory->initWorkingState();
365 solutionHistory->getWorkingState()->setTimeStep(dt);
366 solutionHistory->getWorkingState()->setTime(dt);
367 solutionHistory->getWorkingState()->setTolRel(1.0);
368 solutionHistory->getWorkingState()->setTolAbs(0.0);
369 stepper->takeStep(solutionHistory);
382 class StepperRKModifierXBogackiShampineTest
388 : out(Out), success(Success)
393 virtual ~StepperRKModifierXBogackiShampineTest() {}
398 const double dt,
const int stageNumber,
402 const double relTol = 1.0e-14;
404 const double x_0 = get_ele(*(x), 0);
416 const double X_i = get_ele(*(x), 0);
417 if (stageNumber == 0) {
421 else if (stageNumber == 1) {
425 else if (stageNumber == 2) {
429 else if (stageNumber == 3) {
439 const double x_1 = get_ele(*(x), 0);
447 "Error - unknown action location.\n");
463 auto modifierX =
rcp(
new StepperRKModifierXBogackiShampineTest(out, success));
465 stepper->setModel(model);
466 stepper->setAppAction(modifierX);
467 stepper->setICConsistency(
"Consistent");
468 stepper->setUseFSAL(
false);
469 stepper->initialize();
475 stepper->setInitialConditions(solutionHistory);
476 solutionHistory->initWorkingState();
478 solutionHistory->getWorkingState()->setTimeStep(dt);
479 solutionHistory->getWorkingState()->setTime(dt);
480 stepper->takeStep(solutionHistory);
493 auto modifierX =
rcp(
new StepperRKModifierXBogackiShampineTest(out, success));
495 stepper->setModel(model);
496 stepper->setAppAction(modifierX);
497 stepper->setICConsistency(
"Consistent");
498 stepper->setUseFSAL(
true);
499 stepper->initialize();
505 stepper->setInitialConditions(solutionHistory);
506 solutionHistory->initWorkingState();
508 solutionHistory->getWorkingState()->setTimeStep(dt);
509 solutionHistory->getWorkingState()->setTime(dt);
510 stepper->takeStep(solutionHistory);
523 auto modifierX =
rcp(
new StepperRKModifierXBogackiShampineTest(out, success));
525 stepper->setModel(model);
526 stepper->setAppAction(modifierX);
527 stepper->setICConsistency(
"Consistent");
528 stepper->setUseFSAL(
true);
529 stepper->initialize();
535 stepper->setInitialConditions(solutionHistory);
536 solutionHistory->initWorkingState();
538 solutionHistory->getWorkingState()->setTimeStep(dt);
539 solutionHistory->getWorkingState()->setTime(dt);
540 solutionHistory->getWorkingState()->setNConsecutiveFailures(1);
541 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.