11 #include "Tempus_StepperTrapezoidal.hpp"
19 namespace Tempus_Unit_Test {
24 using Teuchos::rcp_const_cast;
25 using Teuchos::rcp_dynamic_cast;
26 using Teuchos::sublist;
36 stepper->setModel(model);
37 stepper->initialize();
47 bool useFSAL = stepper->getUseFSAL();
48 std::string ICConsistency = stepper->getICConsistency();
49 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
50 bool zeroInitialGuess = stepper->getZeroInitialGuess();
53 stepper->setAppAction(modifier);
54 stepper->initialize();
56 stepper->setAppAction(modifierX);
57 stepper->initialize();
59 stepper->setSolver(solver);
60 stepper->initialize();
62 stepper->setUseFSAL(useFSAL);
63 stepper->initialize();
65 stepper->setICConsistency(ICConsistency);
66 stepper->initialize();
68 stepper->setICConsistencyCheck(ICConsistencyCheck);
69 stepper->initialize();
71 stepper->setZeroInitialGuess(zeroInitialGuess);
72 stepper->initialize();
77 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
78 zeroInitialGuess, modifier));
95 class StepperTrapezoidalModifierTest
99 StepperTrapezoidalModifierTest()
100 : testBEGIN_STEP(false),
101 testBEFORE_SOLVE(false),
102 testAFTER_SOLVE(false),
104 testCurrentValue(-0.99),
105 testWorkingValue(-0.99),
112 virtual ~StepperTrapezoidalModifierTest() {}
118 double>::ACTION_LOCATION actLoc)
122 testBEGIN_STEP =
true;
123 auto x = sh->getCurrentState()->getX();
124 testCurrentValue = get_ele(*(x), 0);
128 testBEFORE_SOLVE =
true;
129 testDt = sh->getWorkingState()->getTimeStep() / 10.0;
130 sh->getWorkingState()->setTimeStep(testDt);
134 testAFTER_SOLVE =
true;
135 testName =
"Trapezoidal - Modifier";
136 stepper->setStepperName(testName);
141 auto x = sh->getWorkingState()->getX();
142 testWorkingValue = get_ele(*(x), 0);
147 "Error - unknown action location.\n");
152 bool testBEFORE_SOLVE;
153 bool testAFTER_SOLVE;
155 double testCurrentValue;
156 double testWorkingValue;
158 std::string testName;
168 stepper->setModel(model);
169 auto modifier =
rcp(
new StepperTrapezoidalModifierTest());
170 stepper->setAppAction(modifier);
171 stepper->initialize();
177 stepper->setInitialConditions(solutionHistory);
178 solutionHistory->initWorkingState();
180 solutionHistory->getWorkingState()->setTimeStep(dt);
181 stepper->takeStep(solutionHistory);
190 auto x = solutionHistory->getCurrentState()->getX();
192 x = solutionHistory->getWorkingState()->getX();
194 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
196 TEST_COMPARE(modifier->testName, ==,
"Trapezoidal - Modifier");
201 class StepperTrapezoidalObserverTest
205 StepperTrapezoidalObserverTest()
206 : testBEGIN_STEP(false),
207 testBEFORE_SOLVE(false),
208 testAFTER_SOLVE(false),
210 testCurrentValue(-0.99),
211 testWorkingValue(-0.99),
218 virtual ~StepperTrapezoidalObserverTest() {}
221 virtual void observe(
225 double>::ACTION_LOCATION actLoc)
229 testBEGIN_STEP =
true;
230 auto x = sh->getCurrentState()->getX();
231 testCurrentValue = get_ele(*(x), 0);
235 testBEFORE_SOLVE =
true;
236 testDt = sh->getWorkingState()->getTimeStep();
240 testAFTER_SOLVE =
true;
241 testName = stepper->getStepperType();
246 auto x = sh->getWorkingState()->getX();
247 testWorkingValue = get_ele(*(x), 0);
252 "Error - unknown action location.\n");
256 bool testBEFORE_SOLVE;
257 bool testAFTER_SOLVE;
259 double testCurrentValue;
260 double testWorkingValue;
262 std::string testName;
272 stepper->setModel(model);
273 auto observer =
rcp(
new StepperTrapezoidalObserverTest());
274 stepper->setAppAction(observer);
275 stepper->initialize();
281 stepper->setInitialConditions(solutionHistory);
282 solutionHistory->initWorkingState();
284 solutionHistory->getWorkingState()->setTimeStep(dt);
285 stepper->takeStep(solutionHistory);
294 auto x = solutionHistory->getCurrentState()->getX();
296 x = solutionHistory->getWorkingState()->getX();
299 TEST_COMPARE(observer->testName, ==,
"Trapezoidal Method");
304 class StepperTrapezoidalModifierXTest
308 StepperTrapezoidalModifierXTest()
309 : testX_BEGIN_STEP(false),
310 testX_BEFORE_SOLVE(false),
311 testX_AFTER_SOLVE(false),
312 testXDOT_END_STEP(false),
321 virtual ~StepperTrapezoidalModifierXTest() {}
324 const double time,
const double dt,
326 double>::MODIFIER_TYPE modType)
330 testX_BEGIN_STEP =
true;
331 testX = get_ele(*(x), 0);
335 testX_BEFORE_SOLVE =
true;
340 testX_AFTER_SOLVE =
true;
345 testXDOT_END_STEP =
true;
346 testXDot = get_ele(*(x), 0);
351 "Error - unknown action location.\n");
354 bool testX_BEGIN_STEP;
355 bool testX_BEFORE_SOLVE;
356 bool testX_AFTER_SOLVE;
357 bool testXDOT_END_STEP;
371 stepper->setModel(model);
372 auto modifierX =
rcp(
new StepperTrapezoidalModifierXTest());
373 stepper->setAppAction(modifierX);
374 stepper->initialize();
380 stepper->setInitialConditions(solutionHistory);
381 solutionHistory->initWorkingState();
383 solutionHistory->getWorkingState()->setTimeStep(dt);
384 stepper->takeStep(solutionHistory);
393 auto x = solutionHistory->getCurrentState()->getX();
396 auto xDot = solutionHistory->getWorkingState()->getXDot();
397 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
400 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
402 auto time = solutionHistory->getWorkingState()->getTime();
Trapezoidal method time stepper.
Default modifier for StepperTrapezoidal.
Modify at the end of the step.
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
Modify before the implicit solve.
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_COMPARE(v1, comp, v2)
#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.
Base ModifierX for StepperTrapezoidal.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
Modify at the beginning of the step.
Base modifier for StepperTrapezoidal.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Application Action for StepperTrapezoidal.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Base observer for StepperTrapezoidal.
#define TEUCHOS_ASSERT(assertion_test)
Default ModifierX for StepperTrapezoidal.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
Modify after the implicit solve.
At the beginning of the step.