11#include "Tempus_StepperHHTAlpha.hpp"
19#include "../TestModels/HarmonicOscillatorModel.hpp"
25using Teuchos::rcp_const_cast;
26using Teuchos::rcp_dynamic_cast;
27using Teuchos::ParameterList;
28using Teuchos::sublist;
39 stepper->setModel(model);
40 stepper->initialize();
41 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
48 bool useFSAL = stepper->getUseFSAL();
49 std::string ICConsistency = stepper->getICConsistency();
50 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
51 bool zeroInitialGuess = stepper->getZeroInitialGuess();
52 std::string schemeName =
"Newmark Beta User Defined";
63 stepper->setSolver(solver); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
64 stepper->setUseFSAL(useFSAL); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
65 stepper->setICConsistency(ICConsistency); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
66 stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
67 stepper->setZeroInitialGuess(zeroInitialGuess); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
69 stepper->setAppAction(modifier); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
70 stepper->setAppAction(modifierX); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
71 stepper->setAppAction(observer); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
73 stepper->setSchemeName(schemeName); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
74 stepper->setBeta(beta); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
75 stepper->setGamma(gamma); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
76 stepper->setAlphaF(alpha_f); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
77 stepper->setAlphaM(alpha_m); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
81 model, solver, useFSAL,
82 ICConsistency, ICConsistencyCheck, zeroInitialGuess,
83 schemeName, beta, gamma, alpha_f, alpha_m,modifier));
84 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
87 TEUCHOS_ASSERT(stepper->getOrder() == 2);
101class StepperHHTAlphaModifierTest
107 StepperHHTAlphaModifierTest()
108 : testBEGIN_STEP(false), testBEFORE_SOLVE(false),
109 testAFTER_SOLVE(false), testEND_STEP(false),
110 testCurrentValue(-0.99), testWorkingValue(-0.99),
111 testDt(-1.5), testName(
"")
115 virtual ~StepperHHTAlphaModifierTest(){}
124 case StepperHHTAlphaAppAction<double>::BEGIN_STEP:
126 testBEGIN_STEP =
true;
127 auto x = sh->getCurrentState()->getX();
128 testCurrentValue = get_ele(*(x), 0);
131 case StepperHHTAlphaAppAction<double>::BEFORE_SOLVE:
133 testBEFORE_SOLVE =
true;
134 testDt = sh->getWorkingState()->getTimeStep()/10.0;
135 sh->getWorkingState()->setTimeStep(testDt);
138 case StepperHHTAlphaAppAction<double>::AFTER_SOLVE:
140 testAFTER_SOLVE =
true;
141 testName =
"HHT Alpha - Modifier";
142 stepper->setStepperName(testName);
145 case StepperHHTAlphaAppAction<double>::END_STEP:
148 auto x = sh->getWorkingState()->getX();
149 testWorkingValue = get_ele(*(x), 0);
153 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
154 "Error - unknown action location.\n");
158 bool testBEFORE_SOLVE;
159 bool testAFTER_SOLVE;
161 double testCurrentValue;
162 double testWorkingValue;
164 std::string testName;
169 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
174 stepper->setModel(model);
175 auto modifier = rcp(
new StepperHHTAlphaModifierTest());
176 stepper->setAppAction(modifier);
177 stepper->initialize();
183 stepper->setInitialConditions(solutionHistory);
184 solutionHistory->initWorkingState();
186 solutionHistory->getWorkingState()->setTimeStep(dt);
187 stepper->takeStep(solutionHistory);
190 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
191 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
192 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
193 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
196 auto x = solutionHistory->getCurrentState()->getX();
197 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
198 x = solutionHistory->getWorkingState()->getX();
199 TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
200 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
201 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
202 TEST_COMPARE(modifier->testName, ==,
"HHT Alpha - Modifier");
207class StepperHHTAlphaObserverTest
212 StepperHHTAlphaObserverTest()
213 : testBEGIN_STEP(false), testBEFORE_SOLVE(false),
214 testAFTER_SOLVE(false), testEND_STEP(false),
215 testCurrentValue(-0.99), testWorkingValue(-0.99),
216 testDt(-1.5), testName(
"")
220 virtual ~StepperHHTAlphaObserverTest(){}
223 virtual void observe(
229 case StepperHHTAlphaAppAction<double>::BEGIN_STEP:
231 testBEGIN_STEP =
true;
232 auto x = sh->getCurrentState()->getX();
233 testCurrentValue = get_ele(*(x), 0);
236 case StepperHHTAlphaAppAction<double>::BEFORE_SOLVE:
238 testBEFORE_SOLVE =
true;
239 testDt = sh->getWorkingState()->getTimeStep();
242 case StepperHHTAlphaAppAction<double>::AFTER_SOLVE:
244 testAFTER_SOLVE =
true;
245 testName = stepper->getStepperType();
248 case StepperHHTAlphaAppAction<double>::END_STEP:
251 auto x = sh->getWorkingState()->getX();
252 testWorkingValue = get_ele(*(x), 0);
256 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
257 "Error - unknown action location.\n");
262 bool testBEFORE_SOLVE;
263 bool testAFTER_SOLVE;
265 double testCurrentValue;
266 double testWorkingValue;
268 std::string testName;
273 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
278 stepper->setModel(model);
279 auto observer = rcp(
new StepperHHTAlphaObserverTest());
280 stepper->setAppAction(observer);
281 stepper->initialize();
287 stepper->setInitialConditions(solutionHistory);
288 solutionHistory->initWorkingState();
290 solutionHistory->getWorkingState()->setTimeStep(dt);
291 stepper->takeStep(solutionHistory);
294 TEST_COMPARE(observer->testBEGIN_STEP, ==,
true);
295 TEST_COMPARE(observer->testBEFORE_SOLVE, ==,
true);
296 TEST_COMPARE(observer->testAFTER_SOLVE, ==,
true);
297 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, ==,
"HHT-Alpha");
310class StepperHHTAlphaModifierXTest
316 StepperHHTAlphaModifierXTest()
317 : testX_BEGIN_STEP(false), testX_BEFORE_SOLVE(false),
318 testX_AFTER_SOLVE(false), testX_END_STEP(false),
319 testXbegin(-0.99), testXend(-0.99),
320 testDt(-1.5), testTime(-1.5)
324 virtual ~StepperHHTAlphaModifierXTest(){}
329 const double time,
const double dt,
333 case StepperHHTAlphaModifierXBase<double>::X_BEGIN_STEP:
335 testX_BEGIN_STEP =
true;
336 testXbegin = get_ele(*(x), 0);
339 case StepperHHTAlphaModifierXBase<double>::X_BEFORE_SOLVE:
341 testX_BEFORE_SOLVE =
true;
345 case StepperHHTAlphaModifierXBase<double>::X_AFTER_SOLVE:
347 testX_AFTER_SOLVE =
true;
351 case StepperHHTAlphaModifierXBase<double>::X_END_STEP:
353 testX_END_STEP =
true;
354 testXend = get_ele(*(x), 0);
358 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
359 "Error - unknown action location.\n");
363 bool testX_BEGIN_STEP;
364 bool testX_BEFORE_SOLVE;
365 bool testX_AFTER_SOLVE;
375 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
380 stepper->setModel(model);
381 auto modifierX = rcp(
new StepperHHTAlphaModifierXTest());
382 stepper->setAppAction(modifierX);
383 stepper->initialize();
388 stepper->setInitialConditions(solutionHistory);
389 solutionHistory->initWorkingState();
391 solutionHistory->getWorkingState()->setTimeStep(dt);
392 stepper->takeStep(solutionHistory);
395 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
396 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
397 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
398 TEST_COMPARE(modifierX->testX_END_STEP, ==,
true);
401 auto xbegin = solutionHistory->getCurrentState()->getX();
402 TEST_FLOATING_EQUALITY(modifierX->testXbegin, get_ele(*(xbegin), 0), 1.0e-14);
403 auto xend = solutionHistory->getWorkingState()->getX();
404 TEST_FLOATING_EQUALITY(modifierX->testXend, get_ele(*(xend), 0),1.0e-14);
405 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
406 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
407 auto time = solutionHistory->getWorkingState()->getTime();
408 TEST_FLOATING_EQUALITY(modifierX->testTime, time, 1.0e-14);
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
ACTION_LOCATION
Indicates the location of application action (see algorithm).
Base modifier for StepperHHTAlpha.
Default modifier for StepperHHTAlpha.
Base ModifierX for StepperHHTAlpha.
MODIFIER_TYPE
Indicates the location of application action (see algorithm).
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.
Default ModifierX for StepperHHTAlpha.
Base observer for StepperHHTAlpha.
Default observer for StepperHHTAlpha.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.