26using Teuchos::rcp_const_cast;
27using Teuchos::rcp_dynamic_cast;
28using Teuchos::ParameterList;
29using Teuchos::sublist;
36 auto model = rcp(
new Tempus_Test::SinCosModel<double>());
40 stepper->setModel(model);
41 stepper->initialize();
42 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
53 predictorStepper->setModel(model);
54 predictorStepper->initialize();
57 bool useFSAL = defaultStepper->getUseFSAL();
58 std::string ICConsistency = defaultStepper->getICConsistency();
59 bool ICConsistencyCheck = defaultStepper->getICConsistencyCheck();
60 bool zeroInitialGuess = defaultStepper->getZeroInitialGuess();
63 stepper->setAppAction(modifier); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
64 stepper->setAppAction(modifierX); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
65 stepper->setAppAction(observer); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
66 stepper->setSolver(solver); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
67 stepper->setPredictor(predictorStepper); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
68 stepper->setUseFSAL(useFSAL); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
69 stepper->setICConsistency(ICConsistency); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
70 stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
71 stepper->setZeroInitialGuess(zeroInitialGuess); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
75 model, solver, predictorStepper, useFSAL,
76 ICConsistency, ICConsistencyCheck, zeroInitialGuess, modifier));
77 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
80 TEUCHOS_ASSERT(stepper->getOrder() == 1);
88 auto model = rcp(
new Tempus_Test::SinCosModel<double>());
95class StepperBackwardEulerModifierTest
101 StepperBackwardEulerModifierTest()
102 : testBEGIN_STEP(false), testBEFORE_SOLVE(false),
103 testAFTER_SOLVE(false), testEND_STEP(false),
104 testCurrentValue(-0.99), testWorkingValue(-0.99),
105 testDt(-1.5), testName(
"")
109 virtual ~StepperBackwardEulerModifierTest(){}
118 case StepperBackwardEulerAppAction<double>::BEGIN_STEP:
120 testBEGIN_STEP =
true;
121 auto x = sh->getCurrentState()->getX();
122 testCurrentValue = get_ele(*(x), 0);
125 case StepperBackwardEulerAppAction<double>::BEFORE_SOLVE:
127 testBEFORE_SOLVE =
true;
128 testDt = sh->getWorkingState()->getTimeStep()/10.0;
129 sh->getWorkingState()->setTimeStep(testDt);
132 case StepperBackwardEulerAppAction<double>::AFTER_SOLVE:
134 testAFTER_SOLVE =
true;
135 testName =
"Backward Euler - Modifier";
136 stepper->setStepperName(testName);
139 case StepperBackwardEulerAppAction<double>::END_STEP:
142 auto x = sh->getWorkingState()->getX();
143 testWorkingValue = get_ele(*(x), 0);
147 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
148 "Error - unknown action location.\n");
153 bool testBEFORE_SOLVE;
154 bool testAFTER_SOLVE;
156 double testCurrentValue;
157 double testWorkingValue;
159 std::string testName;
164 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
165 model = rcp(
new Tempus_Test::SinCosModel<double>());
169 stepper->setModel(model);
170 auto modifier = rcp(
new StepperBackwardEulerModifierTest());
171 stepper->setAppAction(modifier);
172 stepper->initialize();
178 stepper->setInitialConditions(solutionHistory);
179 solutionHistory->initWorkingState();
181 solutionHistory->getWorkingState()->setTimeStep(dt);
182 stepper->takeStep(solutionHistory);
185 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
186 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
187 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
188 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
191 auto x = solutionHistory->getCurrentState()->getX();
192 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
193 x = solutionHistory->getWorkingState()->getX();
194 TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
195 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
196 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
198 TEST_COMPARE(modifier->testName, ==,
"Backward Euler - Modifier");
205class StepperBackwardEulerObserverTest
211 StepperBackwardEulerObserverTest()
212 : testBEGIN_STEP(false), testBEFORE_SOLVE(false),
213 testAFTER_SOLVE(false), testEND_STEP(false),
214 testCurrentValue(-0.99), testWorkingValue(-0.99),
215 testDt(-1.5), testName(
"")
219 virtual ~StepperBackwardEulerObserverTest(){}
222 virtual void observe(
228 case StepperBackwardEulerAppAction<double>::BEGIN_STEP:
230 testBEGIN_STEP =
true;
231 auto x = sh->getCurrentState()->getX();
232 testCurrentValue = get_ele(*(x), 0);
235 case StepperBackwardEulerAppAction<double>::BEFORE_SOLVE:
237 testBEFORE_SOLVE =
true;
238 testDt = sh->getWorkingState()->getTimeStep();
241 case StepperBackwardEulerAppAction<double>::AFTER_SOLVE:
243 testAFTER_SOLVE =
true;
244 testName = stepper->getStepperType();
247 case StepperBackwardEulerAppAction<double>::END_STEP:
250 auto x = sh->getWorkingState()->getX();
251 testWorkingValue = get_ele(*(x), 0);
255 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
256 "Error - unknown action location.\n");
261 bool testBEFORE_SOLVE;
262 bool testAFTER_SOLVE;
264 double testCurrentValue;
265 double testWorkingValue;
267 std::string testName;
272 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
273 model = rcp(
new Tempus_Test::SinCosModel<double>());
277 stepper->setModel(model);
278 auto observer = rcp(
new StepperBackwardEulerObserverTest());
279 stepper->setAppAction(observer);
280 stepper->initialize();
286 stepper->setInitialConditions(solutionHistory);
287 solutionHistory->initWorkingState();
289 solutionHistory->getWorkingState()->setTimeStep(dt);
290 stepper->takeStep(solutionHistory);
293 TEST_COMPARE(observer->testBEGIN_STEP, ==,
true);
294 TEST_COMPARE(observer->testBEFORE_SOLVE, ==,
true);
295 TEST_COMPARE(observer->testAFTER_SOLVE, ==,
true);
296 TEST_COMPARE(observer->testEND_STEP, ==,
true);
299 auto x = solutionHistory->getCurrentState()->getX();
300 TEST_FLOATING_EQUALITY(observer->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
301 x = solutionHistory->getWorkingState()->getX();
302 TEST_FLOATING_EQUALITY(observer->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
303 TEST_FLOATING_EQUALITY(observer->testDt, dt, 1.0e-14);
305 TEST_COMPARE(observer->testName, ==,
"Backward Euler");
311class StepperBackwardEulerModifierXTest
317 StepperBackwardEulerModifierXTest()
318 : testX_BEGIN_STEP(false), testX_BEFORE_SOLVE(false),
319 testX_AFTER_SOLVE(false), testXDOT_END_STEP(false),
320 testX(-0.99), testXDot(-0.99),
321 testDt(-1.5), testTime(-1.5)
325 virtual ~StepperBackwardEulerModifierXTest(){}
330 const double time,
const double dt,
334 case StepperBackwardEulerModifierXBase<double>::X_BEGIN_STEP:
336 testX_BEGIN_STEP =
true;
337 testX = get_ele(*(x), 0);
340 case StepperBackwardEulerModifierXBase<double>::X_BEFORE_SOLVE:
342 testX_BEFORE_SOLVE =
true;
346 case StepperBackwardEulerModifierXBase<double>::X_AFTER_SOLVE:
348 testX_AFTER_SOLVE =
true;
352 case StepperBackwardEulerModifierXBase<double>::XDOT_END_STEP:
354 testXDOT_END_STEP =
true;
355 testXDot = get_ele(*(x), 0);
359 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
360 "Error - unknown action location.\n");
364 bool testX_BEGIN_STEP;
365 bool testX_BEFORE_SOLVE;
366 bool testX_AFTER_SOLVE;
367 bool testXDOT_END_STEP;
376 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
377 model = rcp(
new Tempus_Test::SinCosModel<double>());
381 stepper->setModel(model);
382 auto modifierX = rcp(
new StepperBackwardEulerModifierXTest());
383 stepper->setAppAction(modifierX);
384 stepper->initialize();
390 stepper->setInitialConditions(solutionHistory);
391 solutionHistory->initWorkingState();
393 solutionHistory->getWorkingState()->setTimeStep(dt);
394 stepper->takeStep(solutionHistory);
397 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
398 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
399 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
400 TEST_COMPARE(modifierX->testXDOT_END_STEP, ==,
true);
403 auto x = solutionHistory->getCurrentState()->getX();
404 TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
406 auto xDot = solutionHistory->getWorkingState()->getXDot();
407 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
409 TEST_FLOATING_EQUALITY(modifierX->testXDot, get_ele(*(xDot), 0),1.0e-14);
410 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
411 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
413 auto time = solutionHistory->getWorkingState()->getTime();
414 TEST_FLOATING_EQUALITY(modifierX->testTime, time, 1.0e-14);
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...