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);
130 stepper->setModel(model);
131 stepper->initialize();
132 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
134 stepper->setSchemeName(
"Newmark Beta User Defined");
135 stepper->setBeta(0.3025);
136 stepper->setGamma(0.6);
137 stepper->setAlphaF(0.1);
138 stepper->setAlphaM(0.0);
139 stepper->initialize();
140 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
142 TEST_COMPARE(stepper->getSchemeName(), ==,
"Newmark Beta User Defined");
143 TEST_FLOATING_EQUALITY(stepper->getBeta(), 0.3025, 1.0e-14);
144 TEST_FLOATING_EQUALITY(stepper->getGamma(), 0.6, 1.0e-14);
145 TEST_FLOATING_EQUALITY(stepper->getAlphaF(), 0.1, 1.0e-14);
146 TEST_FLOATING_EQUALITY(stepper->getAlphaM(), 0.0, 1.0e-14);
157 stepper->setModel(model);
158 stepper->initialize();
159 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
161 stepper->setSchemeName(
"Newmark Beta Average Acceleration");
162 stepper->setBeta(0.3025);
163 stepper->setGamma(0.6);
164 stepper->setAlphaF(0.1);
165 stepper->setAlphaM(0.0);
166 stepper->initialize();
167 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
169 TEST_COMPARE(stepper->getSchemeName(), ==,
"Newmark Beta Average Acceleration");
170 TEST_FLOATING_EQUALITY(stepper->getBeta(), 0.25, 1.0e-14);
171 TEST_FLOATING_EQUALITY(stepper->getGamma(), 0.5, 1.0e-14);
172 TEST_FLOATING_EQUALITY(stepper->getAlphaF(), 0.1, 1.0e-14);
173 TEST_FLOATING_EQUALITY(stepper->getAlphaM(), 0.0, 1.0e-14);
182 std::ostringstream oss;
183 auto captured = Teuchos::fancyOStream(Teuchos::rcpFromRef(oss));
184 auto oldOut = Teuchos::VerboseObjectBase::getDefaultOStream();
185 Teuchos::VerboseObjectBase::setDefaultOStream(captured);
188 stepper->setModel(model);
189 stepper->setSchemeName(
"Newmark Beta User Defined");
190 stepper->setAlphaF(0.1);
191 stepper->setAlphaM(0.0);
192 stepper->setGamma(0.6);
193 stepper->setBeta(0.3025);
194 stepper->validateSchemeParameters();
196 Teuchos::VerboseObjectBase::setDefaultOStream(oldOut);
198 const std::string output = oss.str();
199 TEST_ASSERT(output.find(
"WARNING: For HHT-Alpha") == std::string::npos);
208 std::ostringstream oss;
209 auto captured = Teuchos::fancyOStream(Teuchos::rcpFromRef(oss));
210 auto oldOut = Teuchos::VerboseObjectBase::getDefaultOStream();
211 Teuchos::VerboseObjectBase::setDefaultOStream(captured);
214 stepper->setModel(model);
215 stepper->setSchemeName(
"Newmark Beta User Defined");
216 stepper->setAlphaF(0.1);
217 stepper->setAlphaM(0.0);
218 stepper->setGamma(0.5);
219 stepper->setBeta(0.25);
220 stepper->validateSchemeParameters();
222 Teuchos::VerboseObjectBase::setDefaultOStream(oldOut);
224 const std::string output = oss.str();
225 TEST_ASSERT(output.find(
"WARNING: For HHT-Alpha") != std::string::npos);
226 TEST_ASSERT(output.find(
"gamma_ (0.5)") != std::string::npos);
227 TEST_ASSERT(output.find(
"beta_ (0.25)") != std::string::npos);
228 TEST_ASSERT(output.find(
"0.5+alpha_f_ (0.6)") != std::string::npos);
229 TEST_ASSERT(output.find(
"0.25*(1.0+alpha_f_)^2 (0.3025)") !=
235class StepperHHTAlphaModifierTest
239 StepperHHTAlphaModifierTest()
240 : testBEGIN_STEP(false),
241 testBEFORE_SOLVE(false),
242 testAFTER_SOLVE(false),
244 testCurrentValue(-0.99),
245 testWorkingValue(-0.99),
252 virtual ~StepperHHTAlphaModifierTest() {}
256 Teuchos::RCP<Tempus::SolutionHistory<double> > sh,
257 Teuchos::RCP<Tempus::StepperHHTAlpha<double> > stepper,
263 testBEGIN_STEP =
true;
264 auto x = sh->getCurrentState()->getX();
265 testCurrentValue = get_ele(*(x), 0);
269 testBEFORE_SOLVE =
true;
270 testDt = sh->getWorkingState()->getTimeStep() / 10.0;
271 sh->getWorkingState()->setTimeStep(testDt);
275 testAFTER_SOLVE =
true;
276 testName =
"HHT Alpha - Modifier";
277 stepper->setStepperName(testName);
282 auto x = sh->getWorkingState()->getX();
283 testWorkingValue = get_ele(*(x), 0);
287 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
288 "Error - unknown action location.\n");
292 bool testBEFORE_SOLVE;
293 bool testAFTER_SOLVE;
295 double testCurrentValue;
296 double testWorkingValue;
298 std::string testName;
303 Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
308 stepper->setModel(model);
309 auto modifier = rcp(
new StepperHHTAlphaModifierTest());
310 stepper->setAppAction(modifier);
311 stepper->initialize();
317 stepper->setInitialConditions(solutionHistory);
318 solutionHistory->initWorkingState();
320 solutionHistory->getWorkingState()->setTimeStep(dt);
321 stepper->takeStep(solutionHistory);
324 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
325 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
326 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
327 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
330 auto x = solutionHistory->getCurrentState()->getX();
331 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
332 x = solutionHistory->getWorkingState()->getX();
333 TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
334 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
335 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
336 TEST_COMPARE(modifier->testName, ==,
"HHT Alpha - Modifier");
341class StepperHHTAlphaObserverTest
345 StepperHHTAlphaObserverTest()
346 : testBEGIN_STEP(false),
347 testBEFORE_SOLVE(false),
348 testAFTER_SOLVE(false),
350 testCurrentValue(-0.99),
351 testWorkingValue(-0.99),
358 virtual ~StepperHHTAlphaObserverTest() {}
361 virtual void observe(
362 Teuchos::RCP<
const Tempus::SolutionHistory<double> > sh,
363 Teuchos::RCP<
const Tempus::StepperHHTAlpha<double> > stepper,
369 testBEGIN_STEP =
true;
370 auto x = sh->getCurrentState()->getX();
371 testCurrentValue = get_ele(*(x), 0);
375 testBEFORE_SOLVE =
true;
376 testDt = sh->getWorkingState()->getTimeStep();
380 testAFTER_SOLVE =
true;
381 testName = stepper->getStepperType();
386 auto x = sh->getWorkingState()->getX();
387 testWorkingValue = get_ele(*(x), 0);
391 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
392 "Error - unknown action location.\n");
397 bool testBEFORE_SOLVE;
398 bool testAFTER_SOLVE;
400 double testCurrentValue;
401 double testWorkingValue;
403 std::string testName;
408 Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
413 stepper->setModel(model);
414 auto observer = rcp(
new StepperHHTAlphaObserverTest());
415 stepper->setAppAction(observer);
416 stepper->initialize();
422 stepper->setInitialConditions(solutionHistory);
423 solutionHistory->initWorkingState();
425 solutionHistory->getWorkingState()->setTimeStep(dt);
426 stepper->takeStep(solutionHistory);
429 TEST_COMPARE(observer->testBEGIN_STEP, ==,
true);
430 TEST_COMPARE(observer->testBEFORE_SOLVE, ==,
true);
431 TEST_COMPARE(observer->testAFTER_SOLVE, ==,
true);
432 TEST_COMPARE(observer->testEND_STEP, ==,
true);
434 auto x = solutionHistory->getCurrentState()->getX();
435 TEST_FLOATING_EQUALITY(observer->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
436 x = solutionHistory->getWorkingState()->getX();
437 TEST_FLOATING_EQUALITY(observer->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
438 TEST_FLOATING_EQUALITY(observer->testDt, dt, 1.0e-14);
440 TEST_COMPARE(observer->testName, ==,
"HHT-Alpha");
445class StepperHHTAlphaModifierXTest
449 StepperHHTAlphaModifierXTest()
450 : testX_BEGIN_STEP(false),
451 testX_BEFORE_SOLVE(false),
452 testX_AFTER_SOLVE(false),
453 testX_END_STEP(false),
462 virtual ~StepperHHTAlphaModifierXTest() {}
466 Teuchos::RCP<Thyra::VectorBase<double> > x,
const double time,
472 case StepperHHTAlphaModifierXBase<double>::X_BEGIN_STEP: {
473 testX_BEGIN_STEP =
true;
474 testXbegin = get_ele(*(x), 0);
477 case StepperHHTAlphaModifierXBase<double>::X_BEFORE_SOLVE: {
478 testX_BEFORE_SOLVE =
true;
482 case StepperHHTAlphaModifierXBase<double>::X_AFTER_SOLVE: {
483 testX_AFTER_SOLVE =
true;
487 case StepperHHTAlphaModifierXBase<double>::X_END_STEP: {
488 testX_END_STEP =
true;
489 testXend = get_ele(*(x), 0);
493 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
494 "Error - unknown action location.\n");
498 bool testX_BEGIN_STEP;
499 bool testX_BEFORE_SOLVE;
500 bool testX_AFTER_SOLVE;
510 Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
515 stepper->setModel(model);
516 auto modifierX = rcp(
new StepperHHTAlphaModifierXTest());
517 stepper->setAppAction(modifierX);
518 stepper->initialize();
523 stepper->setInitialConditions(solutionHistory);
524 solutionHistory->initWorkingState();
526 solutionHistory->getWorkingState()->setTimeStep(dt);
527 stepper->takeStep(solutionHistory);
530 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
531 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
532 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
533 TEST_COMPARE(modifierX->testX_END_STEP, ==,
true);
536 auto xbegin = solutionHistory->getCurrentState()->getX();
537 TEST_FLOATING_EQUALITY(modifierX->testXbegin, get_ele(*(xbegin), 0), 1.0e-14);
538 auto xend = solutionHistory->getWorkingState()->getX();
539 TEST_FLOATING_EQUALITY(modifierX->testXend, get_ele(*(xend), 0), 1.0e-14);
540 auto Dt = solutionHistory->getWorkingState()->getTimeStep();
541 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
542 auto time = solutionHistory->getWorkingState()->getTime();
543 TEST_FLOATING_EQUALITY(modifierX->testTime, time, 1.0e-14);
StepperHHTAlphaAppAction()
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).
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.