12#include "Tempus_StepperHHTAlpha.hpp"
20#include "../TestModels/HarmonicOscillatorModel.hpp"
24using Teuchos::ParameterList;
27using Teuchos::rcp_const_cast;
28using Teuchos::rcp_dynamic_cast;
29using Teuchos::sublist;
39 stepper->setModel(model);
40 stepper->initialize();
41 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
47 bool useFSAL = stepper->getUseFSAL();
48 std::string ICConsistency = stepper->getICConsistency();
49 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
50 bool zeroInitialGuess = stepper->getZeroInitialGuess();
51 std::string schemeName =
"Newmark Beta User Defined";
62 stepper->setSolver(solver);
63 stepper->initialize();
64 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
65 stepper->setUseFSAL(useFSAL);
66 stepper->initialize();
67 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
68 stepper->setICConsistency(ICConsistency);
69 stepper->initialize();
70 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
71 stepper->setICConsistencyCheck(ICConsistencyCheck);
72 stepper->initialize();
73 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
74 stepper->setZeroInitialGuess(zeroInitialGuess);
75 stepper->initialize();
76 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
78 stepper->setAppAction(modifier);
79 stepper->initialize();
80 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
81 stepper->setAppAction(modifierX);
82 stepper->initialize();
83 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
84 stepper->setAppAction(observer);
85 stepper->initialize();
86 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
88 stepper->setSchemeName(schemeName);
89 stepper->initialize();
90 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
91 stepper->setBeta(beta);
92 stepper->initialize();
93 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
94 stepper->setGamma(gamma);
95 stepper->initialize();
96 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
97 stepper->setAlphaF(alpha_f);
98 stepper->initialize();
99 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
100 stepper->setAlphaM(alpha_m);
101 stepper->initialize();
102 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
106 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
107 zeroInitialGuess, schemeName, beta, gamma, alpha_f, alpha_m, modifier));
108 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
111 TEUCHOS_ASSERT(stepper->getOrder() == 2);
124class StepperHHTAlphaModifierTest
128 StepperHHTAlphaModifierTest()
129 : testBEGIN_STEP(false),
130 testBEFORE_SOLVE(false),
131 testAFTER_SOLVE(false),
133 testCurrentValue(-0.99),
134 testWorkingValue(-0.99),
141 virtual ~StepperHHTAlphaModifierTest() {}
151 case StepperHHTAlphaAppAction<double>::BEGIN_STEP: {
152 testBEGIN_STEP =
true;
153 auto x = sh->getCurrentState()->getX();
154 testCurrentValue = get_ele(*(x), 0);
157 case StepperHHTAlphaAppAction<double>::BEFORE_SOLVE: {
158 testBEFORE_SOLVE =
true;
159 testDt = sh->getWorkingState()->getTimeStep() / 10.0;
160 sh->getWorkingState()->setTimeStep(testDt);
163 case StepperHHTAlphaAppAction<double>::AFTER_SOLVE: {
164 testAFTER_SOLVE =
true;
165 testName =
"HHT Alpha - Modifier";
166 stepper->setStepperName(testName);
169 case StepperHHTAlphaAppAction<double>::END_STEP: {
171 auto x = sh->getWorkingState()->getX();
172 testWorkingValue = get_ele(*(x), 0);
176 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
177 "Error - unknown action location.\n");
181 bool testBEFORE_SOLVE;
182 bool testAFTER_SOLVE;
184 double testCurrentValue;
185 double testWorkingValue;
187 std::string testName;
192 Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
197 stepper->setModel(model);
198 auto modifier = rcp(
new StepperHHTAlphaModifierTest());
199 stepper->setAppAction(modifier);
200 stepper->initialize();
206 stepper->setInitialConditions(solutionHistory);
207 solutionHistory->initWorkingState();
209 solutionHistory->getWorkingState()->setTimeStep(dt);
210 stepper->takeStep(solutionHistory);
213 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
214 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
215 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
216 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
219 auto x = solutionHistory->getCurrentState()->getX();
220 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
221 x = solutionHistory->getWorkingState()->getX();
222 TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
223 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
224 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
225 TEST_COMPARE(modifier->testName, ==,
"HHT Alpha - Modifier");
230class StepperHHTAlphaObserverTest
234 StepperHHTAlphaObserverTest()
235 : testBEGIN_STEP(false),
236 testBEFORE_SOLVE(false),
237 testAFTER_SOLVE(false),
239 testCurrentValue(-0.99),
240 testWorkingValue(-0.99),
247 virtual ~StepperHHTAlphaObserverTest() {}
250 virtual void observe(
257 case StepperHHTAlphaAppAction<double>::BEGIN_STEP: {
258 testBEGIN_STEP =
true;
259 auto x = sh->getCurrentState()->getX();
260 testCurrentValue = get_ele(*(x), 0);
263 case StepperHHTAlphaAppAction<double>::BEFORE_SOLVE: {
264 testBEFORE_SOLVE =
true;
265 testDt = sh->getWorkingState()->getTimeStep();
268 case StepperHHTAlphaAppAction<double>::AFTER_SOLVE: {
269 testAFTER_SOLVE =
true;
270 testName = stepper->getStepperType();
273 case StepperHHTAlphaAppAction<double>::END_STEP: {
275 auto x = sh->getWorkingState()->getX();
276 testWorkingValue = get_ele(*(x), 0);
280 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
281 "Error - unknown action location.\n");
286 bool testBEFORE_SOLVE;
287 bool testAFTER_SOLVE;
289 double testCurrentValue;
290 double testWorkingValue;
292 std::string testName;
297 Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
302 stepper->setModel(model);
303 auto observer = rcp(
new StepperHHTAlphaObserverTest());
304 stepper->setAppAction(observer);
305 stepper->initialize();
311 stepper->setInitialConditions(solutionHistory);
312 solutionHistory->initWorkingState();
314 solutionHistory->getWorkingState()->setTimeStep(dt);
315 stepper->takeStep(solutionHistory);
318 TEST_COMPARE(observer->testBEGIN_STEP, ==,
true);
319 TEST_COMPARE(observer->testBEFORE_SOLVE, ==,
true);
320 TEST_COMPARE(observer->testAFTER_SOLVE, ==,
true);
321 TEST_COMPARE(observer->testEND_STEP, ==,
true);
323 auto x = solutionHistory->getCurrentState()->getX();
324 TEST_FLOATING_EQUALITY(observer->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
325 x = solutionHistory->getWorkingState()->getX();
326 TEST_FLOATING_EQUALITY(observer->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
327 TEST_FLOATING_EQUALITY(observer->testDt, dt, 1.0e-14);
329 TEST_COMPARE(observer->testName, ==,
"HHT-Alpha");
334class StepperHHTAlphaModifierXTest
338 StepperHHTAlphaModifierXTest()
339 : testX_BEGIN_STEP(false),
340 testX_BEFORE_SOLVE(false),
341 testX_AFTER_SOLVE(false),
342 testX_END_STEP(false),
351 virtual ~StepperHHTAlphaModifierXTest() {}
361 case StepperHHTAlphaModifierXBase<double>::X_BEGIN_STEP: {
362 testX_BEGIN_STEP =
true;
363 testXbegin = get_ele(*(x), 0);
366 case StepperHHTAlphaModifierXBase<double>::X_BEFORE_SOLVE: {
367 testX_BEFORE_SOLVE =
true;
371 case StepperHHTAlphaModifierXBase<double>::X_AFTER_SOLVE: {
372 testX_AFTER_SOLVE =
true;
376 case StepperHHTAlphaModifierXBase<double>::X_END_STEP: {
377 testX_END_STEP =
true;
378 testXend = get_ele(*(x), 0);
382 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
383 "Error - unknown action location.\n");
387 bool testX_BEGIN_STEP;
388 bool testX_BEFORE_SOLVE;
389 bool testX_AFTER_SOLVE;
399 Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
404 stepper->setModel(model);
405 auto modifierX = rcp(
new StepperHHTAlphaModifierXTest());
406 stepper->setAppAction(modifierX);
407 stepper->initialize();
412 stepper->setInitialConditions(solutionHistory);
413 solutionHistory->initWorkingState();
415 solutionHistory->getWorkingState()->setTimeStep(dt);
416 stepper->takeStep(solutionHistory);
419 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
420 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
421 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
422 TEST_COMPARE(modifierX->testX_END_STEP, ==,
true);
425 auto xbegin = solutionHistory->getCurrentState()->getX();
426 TEST_FLOATING_EQUALITY(modifierX->testXbegin, get_ele(*(xbegin), 0), 1.0e-14);
427 auto xend = solutionHistory->getWorkingState()->getX();
428 TEST_FLOATING_EQUALITY(modifierX->testXend, get_ele(*(xend), 0), 1.0e-14);
429 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
430 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
431 auto time = solutionHistory->getWorkingState()->getTime();
432 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.