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 {
33 using Teuchos::rcp_const_cast;
34 using Teuchos::rcp_dynamic_cast;
36 using Teuchos::sublist;
54 stepper->addStepper(subStepper1);
55 stepper->addStepper(subStepper2);
56 stepper->initialize();
63 bool useFSAL = stepper->getUseFSAL();
64 std::string ICConsistency = stepper->getICConsistency();
65 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
73 stepper->setICConsistency(ICConsistency); stepper->initialize();
TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
74 stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize();
TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
81 std::vector<RCP<const Thyra::ModelEvaluator<double> > > models;
82 models.push_back(explicitModel);
83 models.push_back(implicitModel);
85 std::vector<Teuchos::RCP<Tempus::Stepper<double> > > subStepperList;
86 subStepperList.push_back(subStepper1);
87 subStepperList.push_back(subStepper2);
90 models, subStepperList, useFSAL, ICConsistency, ICConsistencyCheck,order, order, order,modifier));
104 auto pList = Teuchos::getParametersFromXmlFile(
105 "../test/OperatorSplit/Tempus_OperatorSplit_VanDerPol.xml");
106 auto tempusPL = sublist(pList,
"Tempus",
true);
107 auto stepperPL = sublist(tempusPL,
"Demo Stepper",
true);
111 std::vector<RCP<const Thyra::ModelEvaluator<double> > > models;
112 models.push_back(explicitModel);
113 models.push_back(implicitModel);
120 auto stepper = sf->createStepper(stepperPL, models);
127 class StepperOperatorSplitModifierTest
133 StepperOperatorSplitModifierTest()
134 : testBEGIN_STEP(false), testEND_STEP(false),
135 testCurrentValue(-0.99), testWorkingValue(-0.99),
136 testDt(-1.5), testName(
"")
140 virtual ~StepperOperatorSplitModifierTest(){}
151 testBEGIN_STEP =
true;
152 auto x = sh->getCurrentState()->getX();
153 testCurrentValue = get_ele(*(x), 0);
158 testBEFORE_STEPPER =
true;
159 testDt = sh->getWorkingState()->getTimeStep()/10.0;
160 sh->getWorkingState()->setTimeStep(testDt);
165 testAFTER_STEPPER =
true;
166 testName =
"OperatorSplit - Modifier";
167 stepper->setStepperName(testName);
173 auto x = sh->getWorkingState()->getX();
174 testWorkingValue = get_ele(*(x), 0);
179 "Error - unknown action location.\n");
184 bool testBEFORE_STEPPER;
185 bool testAFTER_STEPPER;
187 double testCurrentValue;
188 double testWorkingValue;
190 std::string testName;
203 auto modifier =
rcp(
new StepperOperatorSplitModifierTest());
204 stepper->setAppAction(modifier);
205 stepper->addStepper(subStepper1);
206 stepper->addStepper(subStepper2);
207 stepper->initialize();
210 auto inArgsIC = stepper->getModel()->getNominalValues();
214 icState->setTime (0.0);
215 icState->setIndex (1);
216 icState->setTimeStep(-15.0);
217 icState->setOrder (stepper->getOrder());
222 solutionHistory->setName(
"Forward States");
224 solutionHistory->setStorageLimit(2);
225 solutionHistory->addState(icState);
228 stepper->setInitialConditions(solutionHistory);
229 solutionHistory->initWorkingState();
230 solutionHistory->getWorkingState()->setTimeStep(-15.0);
231 stepper->takeStep(solutionHistory);
240 auto x = solutionHistory->getCurrentState()->getX();
242 x = solutionHistory->getWorkingState()->getX();
244 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
247 TEST_COMPARE(modifier->testName, ==,
"OperatorSplit - Modifier");
252 class StepperOperatorSplitObserverTest
258 StepperOperatorSplitObserverTest()
259 : testBEGIN_STEP(false), testBEFORE_STEPPER(false),
260 testAFTER_STEPPER(false), testEND_STEP(false),
261 testCurrentValue(-0.99), testWorkingValue(-0.99),
262 testDt(-1.5), testName(
"Operator Split")
266 virtual ~StepperOperatorSplitObserverTest(){}
269 virtual void observe(
277 testBEGIN_STEP =
true;
278 auto x = sh->getCurrentState()->getX();
279 testCurrentValue = get_ele(*(x), 0);
284 testBEFORE_STEPPER =
true;
285 testDt = sh->getWorkingState()->getTimeStep();
290 testAFTER_STEPPER =
true;
291 testName = stepper->getStepperType();
297 auto x = sh->getWorkingState()->getX();
298 testWorkingValue = get_ele(*(x), 0);
303 "Error - unknown action location.\n");
308 bool testBEFORE_STEPPER;
309 bool testAFTER_STEPPER;
311 double testCurrentValue;
312 double testWorkingValue;
314 std::string testName;
327 auto observer =
rcp(
new StepperOperatorSplitObserverTest());
328 stepper->setAppAction(observer);
329 stepper->addStepper(subStepper1);
330 stepper->addStepper(subStepper2);
331 stepper->initialize();
334 auto inArgsIC = stepper->getModel()->getNominalValues();
338 icState->setTime (0.0);
339 icState->setIndex (1);
340 icState->setTimeStep(-1.5);
341 icState->setOrder (stepper->getOrder());
346 solutionHistory->setName(
"Forward States");
348 solutionHistory->setStorageLimit(2);
349 solutionHistory->addState(icState);
352 stepper->setInitialConditions(solutionHistory);
353 solutionHistory->initWorkingState();
354 solutionHistory->getWorkingState()->setTimeStep(-1.5);
355 stepper->takeStep(solutionHistory);
364 auto x = solutionHistory->getCurrentState()->getX();
366 x = solutionHistory->getWorkingState()->getX();
375 class StepperOperatorSplitModifierXTest
381 StepperOperatorSplitModifierXTest()
382 : testX_BEGIN_STEP(false), testX_BEFORE_STEPPER(false),
383 testX_AFTER_STEPPER(false), testXDOT_END_STEP(false),
384 testX(-0.99), testXDot(-0.99),
385 testDt(-1.5), testTime(-1.5)
389 virtual ~StepperOperatorSplitModifierXTest(){}
394 const double time,
const double dt,
400 testX_BEGIN_STEP =
true;
401 testX = get_ele(*(x), 0);
406 testX_BEFORE_STEPPER =
true;
412 testX_AFTER_STEPPER =
true;
418 testXDOT_END_STEP =
true;
419 testXDot = get_ele(*(x), 0);
424 "Error - unknown action location.\n");
428 bool testX_BEGIN_STEP;
429 bool testX_BEFORE_STEPPER;
430 bool testX_AFTER_STEPPER;
431 bool testXDOT_END_STEP;
448 auto modifierX =
rcp(
new StepperOperatorSplitModifierXTest());
449 stepper->setAppAction(modifierX);
450 stepper->addStepper(subStepper1);
451 stepper->addStepper(subStepper2);
452 stepper->initialize();
455 auto inArgsIC = stepper->getModel()->getNominalValues();
459 icState->setTime (0.0);
460 icState->setIndex (1);
461 icState->setTimeStep(-1.5);
462 icState->setOrder (stepper->getOrder());
467 solutionHistory->setName(
"Forward States");
469 solutionHistory->setStorageLimit(2);
470 solutionHistory->addState(icState);
473 stepper->setInitialConditions(solutionHistory);
474 solutionHistory->initWorkingState();
475 solutionHistory->getWorkingState()->setTimeStep(-1.5);
476 stepper->takeStep(solutionHistory);
480 TEST_COMPARE(modifierX->testX_BEFORE_STEPPER, ==,
true);
485 auto x = solutionHistory->getCurrentState()->getX();
488 auto xDot = solutionHistory->getWorkingState()->getXDot();
489 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
492 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
495 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.
MODIFIER_TYPE
Indicates the location of application action (see algorithm).
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.
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.