11 #include "Tempus_StepperForwardEuler.hpp"
12 #include "Tempus_StepperBackwardEuler.hpp"
22 namespace Tempus_Unit_Test {
26 using Teuchos::rcp_const_cast;
27 using Teuchos::rcp_dynamic_cast;
29 using Teuchos::sublist;
40 stepper->setModel(model);
41 stepper->initialize();
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();
67 stepper->setPredictor(predictorStepper); 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));
95 class 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(){}
120 testBEGIN_STEP =
true;
121 auto x = sh->getCurrentState()->getX();
122 testCurrentValue = get_ele(*(x), 0);
127 testBEFORE_SOLVE =
true;
128 testDt = sh->getWorkingState()->getTimeStep()/10.0;
129 sh->getWorkingState()->setTimeStep(testDt);
134 testAFTER_SOLVE =
true;
135 testName =
"Backward Euler - Modifier";
136 stepper->setStepperName(testName);
142 auto x = sh->getWorkingState()->getX();
143 testWorkingValue = get_ele(*(x), 0);
148 "Error - unknown action location.\n");
153 bool testBEFORE_SOLVE;
154 bool testAFTER_SOLVE;
156 double testCurrentValue;
157 double testWorkingValue;
159 std::string testName;
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);
191 auto x = solutionHistory->getCurrentState()->getX();
193 x = solutionHistory->getWorkingState()->getX();
195 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
198 TEST_COMPARE(modifier->testName, ==,
"Backward Euler - Modifier");
205 class 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(
230 testBEGIN_STEP =
true;
231 auto x = sh->getCurrentState()->getX();
232 testCurrentValue = get_ele(*(x), 0);
237 testBEFORE_SOLVE =
true;
238 testDt = sh->getWorkingState()->getTimeStep();
243 testAFTER_SOLVE =
true;
244 testName = stepper->getStepperType();
250 auto x = sh->getWorkingState()->getX();
251 testWorkingValue = get_ele(*(x), 0);
256 "Error - unknown action location.\n");
261 bool testBEFORE_SOLVE;
262 bool testAFTER_SOLVE;
264 double testCurrentValue;
265 double testWorkingValue;
267 std::string testName;
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);
299 auto x = solutionHistory->getCurrentState()->getX();
301 x = solutionHistory->getWorkingState()->getX();
311 class 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,
336 testX_BEGIN_STEP =
true;
337 testX = get_ele(*(x), 0);
342 testX_BEFORE_SOLVE =
true;
348 testX_AFTER_SOLVE =
true;
354 testXDOT_END_STEP =
true;
355 testXDot = get_ele(*(x), 0);
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;
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);
403 auto x = solutionHistory->getCurrentState()->getX();
406 auto xDot = solutionHistory->getWorkingState()->getXDot();
407 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
410 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
413 auto time = solutionHistory->getWorkingState()->getTime();
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
Default observer for StepperBackwardEuler.
MODIFIER_TYPE
Indicates the location of application action (see algorithm).
Forward Euler time stepper.
ACTION_LOCATION
Indicates the location of application action (see algorithm).
Modify before the implicit solve.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_COMPARE(v1, comp, v2)
After the implicit solve.
At the beginning of the step.
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Default modifier for StepperBackwardEuler.
Modify after the implicit solve.
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.
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.
Base ModifierX for StepperBackwardEuler.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Modify at the beginning of the step.
Base observer for StepperBackwardEuler.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
Backward Euler time stepper.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Modify at the end of the step.
Before the implicit solve.
Base modifier for StepperBackwardEuler.
#define TEUCHOS_ASSERT(assertion_test)
Default ModifierX for StepperBackwardEuler.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)