43 stepper->setModel(model);
44 stepper->initialize();
45 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
56 bool useFSAL = stepper->getUseFSAL();
57 std::string ICConsistency = stepper->getICConsistency();
58 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
59 bool zeroInitialGuess = stepper->getZeroInitialGuess();
60 std::string schemeName =
"Average Acceleration";
65 stepper->setAppAction(modifier);
66 stepper->initialize();
67 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
68 stepper->setAppAction(modifierX);
69 stepper->initialize();
70 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
71 stepper->setSolver(solver);
72 stepper->initialize();
73 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
74 stepper->setUseFSAL(useFSAL);
75 stepper->initialize();
76 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
77 stepper->setICConsistency(ICConsistency);
78 stepper->initialize();
79 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
80 stepper->setICConsistencyCheck(ICConsistencyCheck);
81 stepper->initialize();
82 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
83 stepper->setZeroInitialGuess(zeroInitialGuess);
84 stepper->initialize();
85 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
87 stepper->setSchemeName(schemeName);
88 stepper->initialize();
89 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
90 stepper->setBeta(beta);
91 stepper->initialize();
92 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
93 stepper->setGamma(gamma);
94 stepper->initialize();
95 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
99 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
100 zeroInitialGuess, schemeName, beta, gamma, modifier));
101 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
104 TEUCHOS_ASSERT(stepper->getOrder() == 2);
120 std::vector<std::string> options;
121 options.push_back(
"Default Parameters");
122 options.push_back(
"ICConsistency and Check");
124 for (
const auto& option : options) {
126 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
127 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder."
129 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
132 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
135 auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double>>(model);
138 RCP<Tempus::StepperNewmarkImplicitAForm<double>> stepper =
140 if (option ==
"ICConsistency and Check") {
141 stepper->setICConsistency(
"Consistent");
142 stepper->setICConsistencyCheck(
true);
144 stepper->initialize();
147 RCP<Tempus::TimeStepControl<double>> timeStepControl =
149 ParameterList tscPL =
150 pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
151 timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
152 timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
153 timeStepControl->setFinalTime(tscPL.get<
double>(
"Final Time"));
154 timeStepControl->setInitTimeStep(dt);
155 timeStepControl->initialize();
158 using Teuchos::rcp_const_cast;
159 auto inArgsIC = model->getNominalValues();
160 RCP<Thyra::VectorBase<double>> icX =
161 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
162 RCP<Thyra::VectorBase<double>> icXDot =
163 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
164 RCP<Thyra::VectorBase<double>> icXDotDot =
165 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
166 RCP<Tempus::SolutionState<double>> icState =
168 icState->setTime(timeStepControl->getInitTime());
169 icState->setIndex(timeStepControl->getInitIndex());
170 icState->setTimeStep(0.0);
171 icState->setOrder(stepper->getOrder());
175 RCP<Tempus::SolutionHistory<double>> solutionHistory =
177 solutionHistory->setName(
"Forward States");
179 solutionHistory->setStorageLimit(2);
180 solutionHistory->addState(icState);
183 stepper->setInitialConditions(solutionHistory);
186 RCP<Tempus::IntegratorBasic<double>> integrator =
187 Tempus::createIntegratorBasic<double>();
188 integrator->setStepper(stepper);
189 integrator->setTimeStepControl(timeStepControl);
190 integrator->setSolutionHistory(solutionHistory);
192 integrator->initialize();
195 bool integratorStatus = integrator->advanceTime();
196 TEST_ASSERT(integratorStatus)
199 double time = integrator->getTime();
200 double timeFinal = pl->sublist(
"Default Integrator")
201 .sublist(
"Time Step Control")
202 .get<
double>(
"Final Time");
203 TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
206 RCP<Thyra::VectorBase<double>> x = integrator->getX();
207 RCP<const Thyra::VectorBase<double>> x_exact =
208 model->getExactSolution(time).get_x();
211 RCP<Thyra::VectorBase<double>> xdiff = x->clone_v();
212 Thyra::V_StVpStV(xdiff.ptr(), 1.0, *x_exact, -1.0, *(x));
215 out <<
" Stepper = " << stepper->description() <<
"\n with "
216 << option << std::endl;
217 out <<
" =========================" << std::endl;
218 out <<
" Exact solution : " << get_ele(*(x_exact), 0) << std::endl;
219 out <<
" Computed solution: " << get_ele(*(x), 0) << std::endl;
220 out <<
" Difference : " << get_ele(*(xdiff), 0) << std::endl;
221 out <<
" =========================" << std::endl;
222 TEST_FLOATING_EQUALITY(get_ele(*(x), 0), -0.222222, 1.0e-4);
359 using Teuchos::ParameterList;
361 using Teuchos::sublist;
366 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
367 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
368 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
371 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
372 RCP<const Thyra::ModelEvaluator<double>> model =
376 RCP<Tempus::StepperNewmarkImplicitAForm<double>> stepper =
379 auto modifier = rcp(
new StepperNewmarkImplicitAFormModifierTest());
380 stepper->setAppAction(modifier);
381 stepper->initialize();
384 RCP<Tempus::TimeStepControl<double>> timeStepControl =
386 ParameterList tscPL =
387 pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
388 timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
389 timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
390 timeStepControl->setFinalTime(dt);
391 timeStepControl->setInitTimeStep(dt);
392 timeStepControl->initialize();
395 using Teuchos::rcp_const_cast;
396 auto inArgsIC = model->getNominalValues();
397 RCP<Thyra::VectorBase<double>> icX =
398 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
399 RCP<Thyra::VectorBase<double>> icXDot =
400 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
401 RCP<Thyra::VectorBase<double>> icXDotDot =
402 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
403 RCP<Tempus::SolutionState<double>> icState =
405 icState->setTime(timeStepControl->getInitTime());
406 icState->setIndex(timeStepControl->getInitIndex());
407 icState->setTimeStep(0.0);
408 icState->setOrder(stepper->getOrder());
412 RCP<Tempus::SolutionHistory<double>> solutionHistory =
414 solutionHistory->setName(
"Forward States");
416 solutionHistory->setStorageLimit(2);
417 solutionHistory->addState(icState);
420 RCP<Tempus::IntegratorBasic<double>> integrator =
421 Tempus::createIntegratorBasic<double>();
422 integrator->setStepper(stepper);
423 integrator->setTimeStepControl(timeStepControl);
424 integrator->setSolutionHistory(solutionHistory);
425 integrator->initialize();
428 bool integratorStatus = integrator->advanceTime();
429 TEST_ASSERT(integratorStatus)
432 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
433 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
434 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
435 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
438 auto x = integrator->getX();
439 auto Dt = integrator->getTime();
440 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
441 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
442 TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
447 using Teuchos::ParameterList;
449 using Teuchos::sublist;
454 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
455 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
456 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
459 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
460 RCP<const Thyra::ModelEvaluator<double>> model =
464 RCP<Tempus::StepperNewmarkImplicitAForm<double>> stepper =
467 auto modifierX = rcp(
new StepperNewmarkImplicitAFormModifierXTest());
468 stepper->setAppAction(modifierX);
469 stepper->initialize();
472 RCP<Tempus::TimeStepControl<double>> timeStepControl =
474 ParameterList tscPL =
475 pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
476 timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
477 timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
478 timeStepControl->setFinalTime(dt);
479 timeStepControl->setInitTimeStep(dt);
480 timeStepControl->initialize();
483 using Teuchos::rcp_const_cast;
484 auto inArgsIC = model->getNominalValues();
485 RCP<Thyra::VectorBase<double>> icX =
486 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
487 RCP<Thyra::VectorBase<double>> icXDot =
488 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
489 RCP<Thyra::VectorBase<double>> icXDotDot =
490 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
491 RCP<Tempus::SolutionState<double>> icState =
493 icState->setTime(timeStepControl->getInitTime());
494 icState->setIndex(timeStepControl->getInitIndex());
495 icState->setTimeStep(0.0);
496 icState->setOrder(stepper->getOrder());
500 RCP<Tempus::SolutionHistory<double>> solutionHistory =
502 solutionHistory->setName(
"Forward States");
504 solutionHistory->setStorageLimit(2);
505 solutionHistory->addState(icState);
508 RCP<Tempus::IntegratorBasic<double>> integrator =
509 Tempus::createIntegratorBasic<double>();
510 integrator->setStepper(stepper);
511 integrator->setTimeStepControl(timeStepControl);
512 integrator->setSolutionHistory(solutionHistory);
513 integrator->initialize();
516 bool integratorStatus = integrator->advanceTime();
517 TEST_ASSERT(integratorStatus)
520 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
521 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
522 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
523 TEST_COMPARE(modifierX->testX_END_STEP, ==,
true);
526 auto Dt = integrator->getTime();
527 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
529 const auto x = integrator->getX();
530 TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...