42 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
43 "Tempus_NewmarkImplicitDForm_HarmonicOscillator_Damped_SecondOrder.xml");
44 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
47 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
48 auto model = Teuchos::rcp(
50 auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double>>(model);
57 RCP<Tempus::TimeStepControl<double>> timeStepControl =
60 pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
61 timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
62 timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
63 timeStepControl->setFinalTime(tscPL.get<
double>(
"Final Time"));
64 timeStepControl->setInitTimeStep(dt);
65 timeStepControl->initialize();
68 using Teuchos::rcp_const_cast;
69 auto inArgsIC = model->getNominalValues();
70 RCP<Thyra::VectorBase<double>> icX =
71 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
72 RCP<Thyra::VectorBase<double>> icXDot =
73 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
74 RCP<Thyra::VectorBase<double>> icXDotDot =
75 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
76 RCP<Tempus::SolutionState<double>> icState =
78 icState->setTime(timeStepControl->getInitTime());
79 icState->setIndex(timeStepControl->getInitIndex());
80 icState->setTimeStep(0.0);
81 icState->setOrder(stepper->getOrder());
85 RCP<Tempus::SolutionHistory<double>> solutionHistory =
87 solutionHistory->setName(
"Forward States");
89 solutionHistory->setStorageLimit(2);
90 solutionHistory->addState(icState);
93 RCP<Tempus::IntegratorBasic<double>> integrator =
94 Tempus::createIntegratorBasic<double>();
95 integrator->setStepper(stepper);
96 integrator->setTimeStepControl(timeStepControl);
97 integrator->setSolutionHistory(solutionHistory);
99 integrator->initialize();
102 bool integratorStatus = integrator->advanceTime();
103 TEST_ASSERT(integratorStatus)
106 double time = integrator->getTime();
107 double timeFinal = pl->sublist(
"Default Integrator")
108 .sublist(
"Time Step Control")
109 .get<
double>(
"Final Time");
110 TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
113 RCP<Thyra::VectorBase<double>> x = integrator->getX();
114 RCP<const Thyra::VectorBase<double>> x_exact =
115 model->getExactSolution(time).get_x();
118 RCP<Thyra::VectorBase<double>> xdiff = x->clone_v();
119 Thyra::V_StVpStV(xdiff.ptr(), 1.0, *x_exact, -1.0, *(x));
122 out <<
" Stepper = " << stepper->description() << std::endl;
123 out <<
" =========================" << std::endl;
124 out <<
" Exact solution : " << get_ele(*(x_exact), 0) << std::endl;
125 out <<
" Computed solution: " << get_ele(*(x), 0) << std::endl;
126 out <<
" Difference : " << get_ele(*(xdiff), 0) << std::endl;
127 out <<
" =========================" << std::endl;
128 TEST_FLOATING_EQUALITY(get_ele(*(x), 0), -0.222222, 1.0e-4);
269 stepper->setModel(model);
270 stepper->initialize();
271 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
282 bool useFSAL = stepper->getUseFSAL();
283 std::string ICConsistency = stepper->getICConsistency();
284 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
285 bool zeroInitialGuess = stepper->getZeroInitialGuess();
286 std::string schemeName =
"Average Acceleration";
291 stepper->setAppAction(modifier);
292 stepper->initialize();
293 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
294 stepper->setAppAction(modifierX);
295 stepper->initialize();
296 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
297 stepper->setSolver(solver);
298 stepper->initialize();
299 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
300 stepper->setUseFSAL(useFSAL);
301 stepper->initialize();
302 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
303 stepper->setICConsistency(ICConsistency);
304 stepper->initialize();
305 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
306 stepper->setICConsistencyCheck(ICConsistencyCheck);
307 stepper->initialize();
308 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
309 stepper->setZeroInitialGuess(zeroInitialGuess);
310 stepper->initialize();
311 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
313 stepper->setSchemeName(schemeName);
314 stepper->initialize();
315 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
316 stepper->setBeta(beta);
317 stepper->initialize();
318 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
319 stepper->setGamma(gamma);
320 stepper->initialize();
321 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
325 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
326 zeroInitialGuess, schemeName, beta, gamma, modifier));
327 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
330 TEUCHOS_ASSERT(stepper->getOrder() == 2);
343 using Teuchos::ParameterList;
345 using Teuchos::sublist;
350 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
351 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
352 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
355 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
356 RCP<const Thyra::ModelEvaluator<double>> model =
360 RCP<Tempus::StepperNewmarkImplicitDForm<double>> stepper =
363 auto modifier = rcp(
new StepperNewmarkImplicitDFormModifierTest());
364 stepper->setAppAction(modifier);
365 stepper->initialize();
368 RCP<Tempus::TimeStepControl<double>> timeStepControl =
370 ParameterList tscPL =
371 pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
372 timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
373 timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
374 timeStepControl->setFinalTime(dt);
375 timeStepControl->setInitTimeStep(dt);
376 timeStepControl->initialize();
379 using Teuchos::rcp_const_cast;
380 auto inArgsIC = model->getNominalValues();
381 RCP<Thyra::VectorBase<double>> icX =
382 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
383 RCP<Thyra::VectorBase<double>> icXDot =
384 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
385 RCP<Thyra::VectorBase<double>> icXDotDot =
386 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
387 RCP<Tempus::SolutionState<double>> icState =
389 icState->setTime(timeStepControl->getInitTime());
390 icState->setIndex(timeStepControl->getInitIndex());
391 icState->setTimeStep(0.0);
392 icState->setOrder(stepper->getOrder());
396 RCP<Tempus::SolutionHistory<double>> solutionHistory =
398 solutionHistory->setName(
"Forward States");
400 solutionHistory->setStorageLimit(2);
401 solutionHistory->addState(icState);
404 RCP<Tempus::IntegratorBasic<double>> integrator =
405 Tempus::createIntegratorBasic<double>();
406 integrator->setStepper(stepper);
407 integrator->setTimeStepControl(timeStepControl);
408 integrator->setSolutionHistory(solutionHistory);
409 integrator->initialize();
412 bool integratorStatus = integrator->advanceTime();
413 TEST_ASSERT(integratorStatus)
416 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
417 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
418 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
419 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
422 auto x = integrator->getX();
423 auto Dt = integrator->getTime();
424 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
425 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
426 TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
431 using Teuchos::ParameterList;
433 using Teuchos::sublist;
438 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
439 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
440 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
443 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
444 RCP<const Thyra::ModelEvaluator<double>> model =
448 RCP<Tempus::StepperNewmarkImplicitDForm<double>> stepper =
451 auto modifierX = rcp(
new StepperNewmarkImplicitDFormModifierXTest());
452 stepper->setAppAction(modifierX);
453 stepper->initialize();
456 RCP<Tempus::TimeStepControl<double>> timeStepControl =
458 ParameterList tscPL =
459 pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
460 timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
461 timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
462 timeStepControl->setFinalTime(dt);
463 timeStepControl->setInitTimeStep(dt);
464 timeStepControl->initialize();
467 using Teuchos::rcp_const_cast;
468 auto inArgsIC = model->getNominalValues();
469 RCP<Thyra::VectorBase<double>> icX =
470 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
471 RCP<Thyra::VectorBase<double>> icXDot =
472 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
473 RCP<Thyra::VectorBase<double>> icXDotDot =
474 rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
475 RCP<Tempus::SolutionState<double>> icState =
477 icState->setTime(timeStepControl->getInitTime());
478 icState->setIndex(timeStepControl->getInitIndex());
479 icState->setTimeStep(0.0);
480 icState->setOrder(stepper->getOrder());
484 RCP<Tempus::SolutionHistory<double>> solutionHistory =
486 solutionHistory->setName(
"Forward States");
488 solutionHistory->setStorageLimit(2);
489 solutionHistory->addState(icState);
492 RCP<Tempus::IntegratorBasic<double>> integrator =
493 Tempus::createIntegratorBasic<double>();
494 integrator->setStepper(stepper);
495 integrator->setTimeStepControl(timeStepControl);
496 integrator->setSolutionHistory(solutionHistory);
497 integrator->initialize();
500 bool integratorStatus = integrator->advanceTime();
501 TEST_ASSERT(integratorStatus)
504 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
505 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
506 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
507 TEST_COMPARE(modifierX->testX_END_STEP, ==,
true);
510 auto Dt = integrator->getTime();
511 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
513 const auto x = integrator->getX();
514 TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...