15 #include "Tempus_StepperForwardEuler.hpp"
16 #include "Tempus_StepperBackwardEuler.hpp"
18 #include "Tempus_StepperOperatorSplit.hpp"
26 #include "../TestModels/VanDerPol_IMEX_ExplicitModel.hpp"
27 #include "../TestModels/VanDerPol_IMEX_ImplicitModel.hpp"
29 namespace Tempus_Unit_Test {
34 using Teuchos::rcp_const_cast;
35 using Teuchos::rcp_dynamic_cast;
36 using Teuchos::sublist;
55 stepper->addStepper(subStepper1);
56 stepper->addStepper(subStepper2);
57 stepper->initialize();
67 bool useFSAL = stepper->getUseFSAL();
68 std::string ICConsistency = stepper->getICConsistency();
69 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
73 stepper->setAppAction(modifier);
74 stepper->initialize();
76 stepper->setAppAction(modifierX);
77 stepper->initialize();
79 stepper->setAppAction(observer);
80 stepper->initialize();
82 stepper->setUseFSAL(useFSAL);
83 stepper->initialize();
85 stepper->setICConsistency(ICConsistency);
86 stepper->initialize();
88 stepper->setICConsistencyCheck(ICConsistencyCheck);
89 stepper->initialize();
91 stepper->setOrder(order);
92 stepper->initialize();
94 stepper->setOrderMin(order);
95 stepper->initialize();
97 stepper->setOrderMax(order);
98 stepper->initialize();
102 std::vector<RCP<const Thyra::ModelEvaluator<double> > > models;
103 models.push_back(explicitModel);
104 models.push_back(implicitModel);
106 std::vector<Teuchos::RCP<Tempus::Stepper<double> > > subStepperList;
107 subStepperList.push_back(subStepper1);
108 subStepperList.push_back(subStepper2);
111 models, subStepperList, useFSAL, ICConsistency, ICConsistencyCheck, order,
112 order, order, modifier));
125 auto pList = Teuchos::getParametersFromXmlFile(
126 "../test/OperatorSplit/Tempus_OperatorSplit_VanDerPol.xml");
127 auto tempusPL = sublist(pList,
"Tempus",
true);
128 auto stepperPL = sublist(tempusPL,
"Demo Stepper",
true);
134 std::vector<RCP<const Thyra::ModelEvaluator<double> > > models;
135 models.push_back(explicitModel);
136 models.push_back(implicitModel);
142 auto stepper = sf->createStepper(stepperPL, models);
148 class StepperOperatorSplitModifierTest
152 StepperOperatorSplitModifierTest()
153 : testBEGIN_STEP(false),
155 testCurrentValue(-0.99),
156 testWorkingValue(-0.99),
163 virtual ~StepperOperatorSplitModifierTest() {}
170 double>::ACTION_LOCATION actLoc)
174 testBEGIN_STEP =
true;
175 auto x = sh->getCurrentState()->getX();
176 testCurrentValue = get_ele(*(x), 0);
180 testBEFORE_STEPPER =
true;
181 testDt = sh->getWorkingState()->getTimeStep() / 10.0;
182 sh->getWorkingState()->setTimeStep(testDt);
186 testAFTER_STEPPER =
true;
187 testName =
"OperatorSplit - Modifier";
188 stepper->setStepperName(testName);
193 auto x = sh->getWorkingState()->getX();
194 testWorkingValue = get_ele(*(x), 0);
199 "Error - unknown action location.\n");
204 bool testBEFORE_STEPPER;
205 bool testAFTER_STEPPER;
207 double testCurrentValue;
208 double testWorkingValue;
210 std::string testName;
225 auto modifier =
rcp(
new StepperOperatorSplitModifierTest());
226 stepper->setAppAction(modifier);
227 stepper->addStepper(subStepper1);
228 stepper->addStepper(subStepper2);
229 stepper->initialize();
232 auto inArgsIC = stepper->getModel()->getNominalValues();
237 icState->setTime(0.0);
238 icState->setIndex(1);
239 icState->setTimeStep(-15.0);
240 icState->setOrder(stepper->getOrder());
245 solutionHistory->setName(
"Forward States");
247 solutionHistory->setStorageLimit(2);
248 solutionHistory->addState(icState);
251 stepper->setInitialConditions(solutionHistory);
252 solutionHistory->initWorkingState();
253 solutionHistory->getWorkingState()->setTimeStep(-15.0);
254 stepper->takeStep(solutionHistory);
263 auto x = solutionHistory->getCurrentState()->getX();
265 x = solutionHistory->getWorkingState()->getX();
267 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
270 TEST_COMPARE(modifier->testName, ==,
"OperatorSplit - Modifier");
275 class StepperOperatorSplitObserverTest
279 StepperOperatorSplitObserverTest()
280 : testBEGIN_STEP(false),
281 testBEFORE_STEPPER(false),
282 testAFTER_STEPPER(false),
284 testCurrentValue(-0.99),
285 testWorkingValue(-0.99),
287 testName(
"Operator Split")
292 virtual ~StepperOperatorSplitObserverTest() {}
295 virtual void observe(
299 double>::ACTION_LOCATION actLoc)
303 testBEGIN_STEP =
true;
304 auto x = sh->getCurrentState()->getX();
305 testCurrentValue = get_ele(*(x), 0);
309 testBEFORE_STEPPER =
true;
310 testDt = sh->getWorkingState()->getTimeStep();
314 testAFTER_STEPPER =
true;
315 testName = stepper->getStepperType();
320 auto x = sh->getWorkingState()->getX();
321 testWorkingValue = get_ele(*(x), 0);
326 "Error - unknown action location.\n");
331 bool testBEFORE_STEPPER;
332 bool testAFTER_STEPPER;
334 double testCurrentValue;
335 double testWorkingValue;
337 std::string testName;
352 auto observer =
rcp(
new StepperOperatorSplitObserverTest());
353 stepper->setAppAction(observer);
354 stepper->addStepper(subStepper1);
355 stepper->addStepper(subStepper2);
356 stepper->initialize();
359 auto inArgsIC = stepper->getModel()->getNominalValues();
364 icState->setTime(0.0);
365 icState->setIndex(1);
366 icState->setTimeStep(-1.5);
367 icState->setOrder(stepper->getOrder());
372 solutionHistory->setName(
"Forward States");
374 solutionHistory->setStorageLimit(2);
375 solutionHistory->addState(icState);
378 stepper->setInitialConditions(solutionHistory);
379 solutionHistory->initWorkingState();
380 solutionHistory->getWorkingState()->setTimeStep(-1.5);
381 stepper->takeStep(solutionHistory);
390 auto x = solutionHistory->getCurrentState()->getX();
392 x = solutionHistory->getWorkingState()->getX();
401 class StepperOperatorSplitModifierXTest
405 StepperOperatorSplitModifierXTest()
406 : testX_BEGIN_STEP(false),
407 testX_BEFORE_STEPPER(false),
408 testX_AFTER_STEPPER(false),
409 testXDOT_END_STEP(false),
418 virtual ~StepperOperatorSplitModifierXTest() {}
422 const double time,
const double dt,
424 double>::MODIFIER_TYPE modType)
428 testX_BEGIN_STEP =
true;
429 testX = get_ele(*(x), 0);
433 testX_BEFORE_STEPPER =
true;
438 testX_AFTER_STEPPER =
true;
443 testXDOT_END_STEP =
true;
444 testXDot = get_ele(*(x), 0);
449 "Error - unknown action location.\n");
453 bool testX_BEGIN_STEP;
454 bool testX_BEFORE_STEPPER;
455 bool testX_AFTER_STEPPER;
456 bool testXDOT_END_STEP;
475 auto modifierX =
rcp(
new StepperOperatorSplitModifierXTest());
476 stepper->setAppAction(modifierX);
477 stepper->addStepper(subStepper1);
478 stepper->addStepper(subStepper2);
479 stepper->initialize();
482 auto inArgsIC = stepper->getModel()->getNominalValues();
487 icState->setTime(0.0);
488 icState->setIndex(1);
489 icState->setTimeStep(-1.5);
490 icState->setOrder(stepper->getOrder());
495 solutionHistory->setName(
"Forward States");
497 solutionHistory->setStorageLimit(2);
498 solutionHistory->addState(icState);
501 stepper->setInitialConditions(solutionHistory);
502 solutionHistory->initWorkingState();
503 solutionHistory->getWorkingState()->setTimeStep(-1.5);
504 stepper->takeStep(solutionHistory);
508 TEST_COMPARE(modifierX->testX_BEFORE_STEPPER, ==,
true);
513 auto x = solutionHistory->getCurrentState()->getX();
516 auto xDot = solutionHistory->getWorkingState()->getXDot();
517 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
520 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
523 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.
van der Pol model formulated for IMEX-RK.
Explicit Runge-Kutta time stepper.
After a stepper evaluation.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_COMPARE(v1, comp, v2)
Modify at the end of the step.
Base ModifierX for StepperOperatorSplit.
Base modifier for OperatorSplit.
At the beginning of the step.
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
OperatorSplit stepper loops through the Stepper list.
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)
Before a stepper evaluation.
Base observer for StepperOperatorSplit.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
Default modifier for StepperOperatorSplit.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Keep a fix number of states.
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.
StepperOperatorSplitAppAction class for StepperOperatorSplit.
Teuchos::RCP< StepperBackwardEuler< Scalar > > createStepperBackwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
van der Pol model formulated for IMEX.
#define TEUCHOS_ASSERT(assertion_test)
Default ModifierX for StepperOperatorSplit.
Modify before the implicit solve.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
Default observer for StepperOperatorSplit.
Modify at the beginning of the step.