13 #include "Tempus_TimeStepControl.hpp"
15 #include "Tempus_StepperNewmarkImplicitDForm.hpp"
21 #include "../TestModels/HarmonicOscillatorModel.hpp"
23 namespace Tempus_Unit_Test {
28 using Teuchos::rcp_const_cast;
29 using Teuchos::rcp_dynamic_cast;
30 using Teuchos::sublist;
42 "Tempus_NewmarkImplicitDForm_HarmonicOscillator_Damped_SecondOrder.xml");
60 timeStepControl->setInitIndex(tscPL.
get<
int>(
"Initial Time Index"));
61 timeStepControl->setInitTime(tscPL.
get<
double>(
"Initial Time"));
62 timeStepControl->setFinalTime(tscPL.
get<
double>(
"Final Time"));
63 timeStepControl->setInitTimeStep(dt);
64 timeStepControl->initialize();
67 using Teuchos::rcp_const_cast;
68 auto inArgsIC = model->getNominalValues();
77 icState->setTime(timeStepControl->getInitTime());
78 icState->setIndex(timeStepControl->getInitIndex());
79 icState->setTimeStep(0.0);
80 icState->setOrder(stepper->getOrder());
86 solutionHistory->setName(
"Forward States");
88 solutionHistory->setStorageLimit(2);
89 solutionHistory->addState(icState);
93 Tempus::createIntegratorBasic<double>();
94 integrator->setStepper(stepper);
95 integrator->setTimeStepControl(timeStepControl);
96 integrator->setSolutionHistory(solutionHistory);
98 integrator->initialize();
101 bool integratorStatus = integrator->advanceTime();
105 double time = integrator->getTime();
106 double timeFinal = pl->
sublist(
"Default Integrator")
108 .
get<
double>(
"Final Time");
114 model->getExactSolution(time).get_x();
118 Thyra::V_StVpStV(xdiff.
ptr(), 1.0, *x_exact, -1.0, *(x));
121 out <<
" Stepper = " << stepper->description() << std::endl;
122 out <<
" =========================" << std::endl;
123 out <<
" Exact solution : " << get_ele(*(x_exact), 0) << std::endl;
124 out <<
" Computed solution: " << get_ele(*(x), 0) << std::endl;
125 out <<
" Difference : " << get_ele(*(xdiff), 0) << std::endl;
126 out <<
" =========================" << std::endl;
127 TEST_FLOATING_EQUALITY(get_ele(*(x), 0), -0.222222, 1.0e-4);
131 class StepperNewmarkImplicitDFormModifierTest
135 StepperNewmarkImplicitDFormModifierTest()
136 : testBEGIN_STEP(false),
137 testBEFORE_SOLVE(false),
138 testAFTER_SOLVE(false),
140 testCurrentValue(-0.99),
147 virtual ~StepperNewmarkImplicitDFormModifierTest() {}
154 double>::ACTION_LOCATION actLoc)
158 testBEGIN_STEP =
true;
162 testBEFORE_SOLVE =
true;
163 testDt = sh->getWorkingState()->getTimeStep();
168 testAFTER_SOLVE =
true;
169 testName =
"Newmark Implicit A Form - Modifier";
170 stepper->setStepperName(testName);
175 auto x = sh->getWorkingState()->getX();
176 testCurrentValue = get_ele(*(x), 0);
181 "Error - unknown action location.\n");
186 bool testBEFORE_SOLVE;
187 bool testAFTER_SOLVE;
189 double testCurrentValue;
191 std::string testName;
196 class StepperNewmarkImplicitDFormModifierXTest
200 StepperNewmarkImplicitDFormModifierXTest()
201 : testX_BEGIN_STEP(false),
202 testX_BEFORE_SOLVE(false),
203 testX_AFTER_SOLVE(false),
204 testX_END_STEP(false),
213 virtual ~StepperNewmarkImplicitDFormModifierXTest() {}
220 double>::MODIFIER_TYPE modType)
224 testX_BEGIN_STEP =
true;
225 testX = get_ele(*(x), 0);
229 testX_BEFORE_SOLVE =
true;
234 testX_AFTER_SOLVE =
true;
236 testX = get_ele(*(x), 0);
240 testX_END_STEP =
true;
241 testX = get_ele(*(x), 0);
246 "Error - unknown action location.\n");
250 bool testX_BEGIN_STEP;
251 bool testX_BEFORE_SOLVE;
252 bool testX_AFTER_SOLVE;
268 stepper->setModel(model);
269 stepper->initialize();
281 bool useFSAL = stepper->getUseFSAL();
282 std::string ICConsistency = stepper->getICConsistency();
283 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
284 bool zeroInitialGuess = stepper->getZeroInitialGuess();
285 std::string schemeName =
"Average Acceleration";
290 stepper->setAppAction(modifier);
291 stepper->initialize();
293 stepper->setAppAction(modifierX);
294 stepper->initialize();
296 stepper->setSolver(solver);
297 stepper->initialize();
299 stepper->setUseFSAL(useFSAL);
300 stepper->initialize();
302 stepper->setICConsistency(ICConsistency);
303 stepper->initialize();
305 stepper->setICConsistencyCheck(ICConsistencyCheck);
306 stepper->initialize();
308 stepper->setZeroInitialGuess(zeroInitialGuess);
309 stepper->initialize();
312 stepper->setSchemeName(schemeName);
313 stepper->initialize();
315 stepper->setBeta(beta);
316 stepper->initialize();
318 stepper->setGamma(gamma);
319 stepper->initialize();
324 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
325 zeroInitialGuess, schemeName, beta, gamma, modifier));
344 using Teuchos::sublist;
350 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
362 auto modifier =
rcp(
new StepperNewmarkImplicitDFormModifierTest());
363 stepper->setAppAction(modifier);
364 stepper->initialize();
371 timeStepControl->setInitIndex(tscPL.
get<
int>(
"Initial Time Index"));
372 timeStepControl->setInitTime(tscPL.
get<
double>(
"Initial Time"));
373 timeStepControl->setFinalTime(dt);
374 timeStepControl->setInitTimeStep(dt);
375 timeStepControl->initialize();
378 using Teuchos::rcp_const_cast;
379 auto inArgsIC = model->getNominalValues();
388 icState->setTime(timeStepControl->getInitTime());
389 icState->setIndex(timeStepControl->getInitIndex());
390 icState->setTimeStep(0.0);
391 icState->setOrder(stepper->getOrder());
397 solutionHistory->setName(
"Forward States");
399 solutionHistory->setStorageLimit(2);
400 solutionHistory->addState(icState);
404 Tempus::createIntegratorBasic<double>();
405 integrator->setStepper(stepper);
406 integrator->setTimeStepControl(timeStepControl);
407 integrator->setSolutionHistory(solutionHistory);
408 integrator->initialize();
411 bool integratorStatus = integrator->advanceTime();
421 auto x = integrator->getX();
422 auto Dt = integrator->getTime();
425 TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
432 using Teuchos::sublist;
438 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
450 auto modifierX =
rcp(
new StepperNewmarkImplicitDFormModifierXTest());
451 stepper->setAppAction(modifierX);
452 stepper->initialize();
459 timeStepControl->setInitIndex(tscPL.
get<
int>(
"Initial Time Index"));
460 timeStepControl->setInitTime(tscPL.
get<
double>(
"Initial Time"));
461 timeStepControl->setFinalTime(dt);
462 timeStepControl->setInitTimeStep(dt);
463 timeStepControl->initialize();
466 using Teuchos::rcp_const_cast;
467 auto inArgsIC = model->getNominalValues();
476 icState->setTime(timeStepControl->getInitTime());
477 icState->setIndex(timeStepControl->getInitIndex());
478 icState->setTimeStep(0.0);
479 icState->setOrder(stepper->getOrder());
485 solutionHistory->setName(
"Forward States");
487 solutionHistory->setStorageLimit(2);
488 solutionHistory->addState(icState);
492 Tempus::createIntegratorBasic<double>();
493 integrator->setStepper(stepper);
494 integrator->setTimeStepControl(timeStepControl);
495 integrator->setSolutionHistory(solutionHistory);
496 integrator->initialize();
499 bool integratorStatus = integrator->advanceTime();
509 auto Dt = integrator->getTime();
512 const auto x = integrator->getX();
Teuchos::RCP< SolutionState< Scalar > > createSolutionStateX(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdot=Teuchos::null, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdotdot=Teuchos::null)
Nonmember constructor from non-const solution vectors, x.
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
T & get(const std::string &name, T def_value)
Teuchos::RCP< StepperNewmarkImplicitDForm< Scalar > > createStepperNewmarkImplicitDForm(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >> &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.
Consider the ODE: where is a constant, is a constant damping parameter, is a constant forcing par...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Keep a fix number of states.
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)