11 #include "Tempus_StepperForwardEuler.hpp"
12 #include "Tempus_StepperBackwardEuler.hpp"
14 #include "Tempus_StepperSubcycling.hpp"
22 namespace Tempus_Unit_Test {
27 using Teuchos::rcp_const_cast;
28 using Teuchos::rcp_dynamic_cast;
29 using Teuchos::sublist;
46 solutionHistory->addState(icState);
47 solutionHistory->initWorkingState();
52 stepper->setSubcyclingStepper(stepperBE);
53 stepper->setInitialConditions(solutionHistory);
54 stepper->initialize();
64 bool useFSAL = stepper->getUseFSAL();
65 std::string ICConsistency = stepper->getICConsistency();
66 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
69 stepper->setSolver(solver);
70 stepper->initialize();
72 stepper->setAppAction(modifier);
73 stepper->initialize();
75 stepper->setAppAction(modifierX);
76 stepper->initialize();
78 stepper->setAppAction(observer);
79 stepper->initialize();
81 stepper->setUseFSAL(useFSAL);
82 stepper->initialize();
84 stepper->setICConsistency(ICConsistency);
85 stepper->initialize();
87 stepper->setICConsistencyCheck(ICConsistencyCheck);
88 stepper->initialize();
94 scIntegrator->setStepper(stepperFE);
95 scIntegrator->setSolutionHistory(solutionHistory);
96 scIntegrator->initialize();
99 model, scIntegrator, useFSAL, ICConsistency, ICConsistencyCheck,
116 stepper->setSubcyclingStepper(stepperBE);
119 auto inArgsIC = model->getNominalValues();
124 solutionHistory->addState(icState);
125 solutionHistory->initWorkingState();
128 stepper->setInitialConditions(solutionHistory);
129 stepper->initialize();
132 stepper->setSubcyclingInitTimeStep(0.25);
133 stepper->setSubcyclingMaxTimeStep(0.5);
134 double maxTimeStep_Set = stepper->getSubcyclingMaxTimeStep();
135 stepper->takeStep(solutionHistory);
136 double maxTimeStep_After = stepper->getSubcyclingMaxTimeStep();
143 class StepperSubcyclingModifierTest
147 StepperSubcyclingModifierTest()
148 : testBEGIN_STEP(false),
150 testCurrentValue(-0.99),
151 testWorkingValue(-0.99),
157 virtual ~StepperSubcyclingModifierTest() {}
168 testBEGIN_STEP =
true;
169 auto x = sh->getCurrentState()->getX();
170 testCurrentValue = get_ele(*(x), 0);
171 testName =
"Subcycling - Modifier";
172 stepper->setStepperName(testName);
177 auto x = sh->getWorkingState()->getX();
178 testWorkingValue = get_ele(*(x), 0);
179 testDt = sh->getWorkingState()->getTimeStep() / 10.0;
180 sh->getWorkingState()->setTimeStep(testDt);
185 "Error - unknown action location.\n");
191 double testCurrentValue;
192 double testWorkingValue;
194 std::string testName;
206 auto modifier =
rcp(
new StepperSubcyclingModifierTest());
207 stepper->setAppAction(modifier);
208 stepper->setSubcyclingStepper(stepperFE);
210 stepper->setSubcyclingMinTimeStep(15);
211 stepper->setSubcyclingInitTimeStep(15.0);
212 stepper->setSubcyclingMaxTimeStep(15.0);
213 stepper->setSubcyclingMaxFailures(10);
214 stepper->setSubcyclingMaxConsecFailures(5);
215 stepper->setSubcyclingScreenOutputIndexInterval(1);
216 stepper->setSubcyclingPrintDtChanges(
true);
220 timeStepControl->setInitIndex(0);
221 timeStepControl->setInitTime(0.0);
222 timeStepControl->setFinalTime(1.0);
223 timeStepControl->setInitTimeStep(15.0);
224 timeStepControl->initialize();
227 auto inArgsIC = model->getNominalValues();
231 icState->setTime(timeStepControl->getInitTime());
232 icState->setIndex(timeStepControl->getInitIndex());
233 icState->setTimeStep(0.0);
238 solutionHistory->setName(
"Forward States");
240 solutionHistory->setStorageLimit(2);
241 solutionHistory->addState(icState);
244 stepper->setInitialConditions(solutionHistory);
245 stepper->initialize();
248 stepper->setInitialConditions(solutionHistory);
249 solutionHistory->initWorkingState();
250 solutionHistory->getWorkingState()->setTimeStep(15.0);
251 stepper->takeStep(solutionHistory);
258 auto x = solutionHistory->getCurrentState()->getX();
260 x = solutionHistory->getWorkingState()->getX();
262 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
265 TEST_COMPARE(modifier->testName, ==,
"Subcycling - Modifier");
270 class StepperSubcyclingObserverTest
274 StepperSubcyclingObserverTest()
275 : testBEGIN_STEP(false),
277 testCurrentValue(-0.99),
278 testWorkingValue(-0.99),
280 testName(
"Subcyling")
285 virtual ~StepperSubcyclingObserverTest() {}
288 virtual void observe(
296 testBEGIN_STEP =
true;
297 auto x = sh->getCurrentState()->getX();
298 testCurrentValue = get_ele(*(x), 0);
303 auto x = sh->getWorkingState()->getX();
304 testWorkingValue = get_ele(*(x), 0);
309 "Error - unknown action location.\n");
315 double testCurrentValue;
316 double testWorkingValue;
318 std::string testName;
330 auto observer =
rcp(
new StepperSubcyclingObserverTest());
331 stepper->setAppAction(observer);
332 stepper->setSubcyclingStepper(stepperFE);
334 stepper->setSubcyclingMinTimeStep(15);
335 stepper->setSubcyclingInitTimeStep(15.0);
336 stepper->setSubcyclingMaxTimeStep(15.0);
337 stepper->setSubcyclingMaxFailures(10);
338 stepper->setSubcyclingMaxConsecFailures(5);
339 stepper->setSubcyclingScreenOutputIndexInterval(1);
340 stepper->setSubcyclingPrintDtChanges(
true);
344 timeStepControl->setInitIndex(0);
345 timeStepControl->setInitTime(0.0);
346 timeStepControl->setFinalTime(1.0);
347 timeStepControl->setInitTimeStep(15.0);
348 timeStepControl->initialize();
351 auto inArgsIC = model->getNominalValues();
355 icState->setTime(timeStepControl->getInitTime());
356 icState->setIndex(timeStepControl->getInitIndex());
357 icState->setTimeStep(0.0);
362 solutionHistory->setName(
"Forward States");
364 solutionHistory->setStorageLimit(2);
365 solutionHistory->addState(icState);
368 stepper->setInitialConditions(solutionHistory);
369 stepper->initialize();
372 stepper->setInitialConditions(solutionHistory);
373 solutionHistory->initWorkingState();
374 solutionHistory->getWorkingState()->setTimeStep(15.0);
375 stepper->takeStep(solutionHistory);
382 auto x = solutionHistory->getCurrentState()->getX();
384 x = solutionHistory->getWorkingState()->getX();
393 class StepperSubcyclingModifierXTest
397 StepperSubcyclingModifierXTest()
398 : testX_BEGIN_STEP(false),
399 testXDOT_END_STEP(false),
408 virtual ~StepperSubcyclingModifierXTest() {}
412 const double time,
const double dt,
414 double>::MODIFIER_TYPE modType)
418 testX_BEGIN_STEP =
true;
419 testX = get_ele(*(x), 0);
424 testXDOT_END_STEP =
true;
425 testXDot = get_ele(*(x), 0);
431 "Error - unknown action location.\n");
435 bool testX_BEGIN_STEP;
436 bool testXDOT_END_STEP;
452 auto modifierX =
rcp(
new StepperSubcyclingModifierXTest());
453 stepper->setAppAction(modifierX);
454 stepper->setSubcyclingStepper(stepperFE);
456 stepper->setSubcyclingMinTimeStep(15);
457 stepper->setSubcyclingInitTimeStep(15.0);
458 stepper->setSubcyclingMaxTimeStep(15.0);
459 stepper->setSubcyclingMaxFailures(10);
460 stepper->setSubcyclingMaxConsecFailures(5);
461 stepper->setSubcyclingScreenOutputIndexInterval(1);
462 stepper->setSubcyclingPrintDtChanges(
true);
466 timeStepControl->setInitIndex(0);
467 timeStepControl->setInitTime(0.0);
468 timeStepControl->setFinalTime(1.0);
469 timeStepControl->setInitTimeStep(15.0);
470 timeStepControl->initialize();
473 auto inArgsIC = model->getNominalValues();
479 icState->setTime(timeStepControl->getInitTime());
480 icState->setIndex(timeStepControl->getInitIndex());
481 icState->setTimeStep(0.0);
486 solutionHistory->setName(
"Forward States");
488 solutionHistory->setStorageLimit(2);
489 solutionHistory->addState(icState);
492 stepper->setInitialConditions(solutionHistory);
493 stepper->initialize();
496 stepper->setInitialConditions(solutionHistory);
497 solutionHistory->initWorkingState();
498 solutionHistory->getWorkingState()->setTimeStep(15.0);
499 stepper->takeStep(solutionHistory);
502 stepper->setInitialConditions(solutionHistory);
503 solutionHistory->initWorkingState();
504 solutionHistory->getWorkingState()->setTimeStep(15.0);
505 stepper->takeStep(solutionHistory);
512 auto x = solutionHistory->getCurrentState()->getX();
515 auto xDot = solutionHistory->getWorkingState()->getXDot();
516 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
519 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
522 auto time = solutionHistory->getWorkingState()->getTime();
Teuchos::RCP< SolutionState< Scalar > > createSolutionStateX(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdot=Teuchos::null, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdotdot=Teuchos::null)
Nonmember constructor from non-const solution vectors, x.
Modify at the end of the step.
At the beginning of the step.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_COMPARE(v1, comp, v2)
Default modifier for StepperSubcycling.
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Sine-Cosine model problem from Rythmos. This is a canonical Sine-Cosine differential equation with a...
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.
Teuchos::RCP< StepperForwardEuler< Scalar > > createStepperForwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
Modify at the beginning of the step.
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
ACTION_LOCATION
Indicates the location of application action (see algorithm).
Keep a fix number of states.
Base modifier for StepperSubcycling.
Default ModifierX for StepperSubcycling.
Default observer for StepperSubcycling.
Teuchos::RCP< StepperBackwardEuler< Scalar > > createStepperBackwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Base observer for StepperSubcycling.
virtual ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const =0
#define TEUCHOS_ASSERT(assertion_test)
Base ModifierX for StepperSubcycling.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)