13 #include "Tempus_TimeStepControl.hpp"
15 #include "Tempus_StepperNewmarkImplicitDForm.hpp"
21 #include "../TestModels/HarmonicOscillatorModel.hpp"
24 namespace Tempus_Unit_Test {
28 using Teuchos::rcp_const_cast;
29 using Teuchos::rcp_dynamic_cast;
31 using Teuchos::sublist;
44 "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();
102 bool integratorStatus = integrator->advanceTime();
107 double time = integrator->getTime();
108 double timeFinal =pl->
sublist(
"Default Integrator")
109 .
sublist(
"Time Step Control").
get<
double>(
"Final Time");
115 model->getExactSolution(time).get_x();
119 Thyra::V_StVpStV(xdiff.
ptr(), 1.0, *x_exact, -1.0, *(x));
122 std::cout <<
" Stepper = " << stepper->description() << std::endl;
123 std::cout <<
" =========================" << std::endl;
124 std::cout <<
" Exact solution : " << get_ele(*(x_exact), 0) << std::endl;
125 std::cout <<
" Computed solution: " << get_ele(*(x ), 0) << std::endl;
126 std::cout <<
" Difference : " << get_ele(*(xdiff ), 0) << std::endl;
127 std::cout <<
" =========================" << std::endl;
128 TEST_FLOATING_EQUALITY(get_ele(*(x), 0), -0.222222, 1.0e-4 );
133 class StepperNewmarkImplicitDFormModifierTest
139 StepperNewmarkImplicitDFormModifierTest()
140 : testBEGIN_STEP(false), testBEFORE_SOLVE(false),
141 testAFTER_SOLVE(false), testEND_STEP(false),
142 testCurrentValue(-0.99),
143 testDt(-1.5), testName(
"")
147 virtual ~StepperNewmarkImplicitDFormModifierTest(){}
158 testBEGIN_STEP =
true;
163 testBEFORE_SOLVE =
true;
164 testDt = sh->getWorkingState()->getTimeStep();
170 testAFTER_SOLVE =
true;
171 testName =
"Newmark Implicit A Form - Modifier";
172 stepper->setStepperName(testName);
178 auto x = sh->getWorkingState()->getX();
179 testCurrentValue = get_ele(*(x), 0);
184 "Error - unknown action location.\n");
189 bool testBEFORE_SOLVE;
190 bool testAFTER_SOLVE;
192 double testCurrentValue;
194 std::string testName;
200 class StepperNewmarkImplicitDFormModifierXTest
206 StepperNewmarkImplicitDFormModifierXTest()
207 : testX_BEGIN_STEP(false), testX_BEFORE_SOLVE(false),
208 testX_AFTER_SOLVE(false), testX_END_STEP(false),
209 testX(-0.99), testXDot(-0.99),
210 testDt(-1.5), testTime(-1.5)
214 virtual ~StepperNewmarkImplicitDFormModifierXTest(){}
219 const double time,
const double dt,
225 testX_BEGIN_STEP =
true;
226 testX = get_ele(*(x), 0);
231 testX_BEFORE_SOLVE =
true;
237 testX_AFTER_SOLVE =
true;
239 testX = get_ele(*(x), 0);
244 testX_END_STEP =
true;
245 testX = get_ele(*(x), 0);
250 "Error - unknown action location.\n");
254 bool testX_BEGIN_STEP;
255 bool testX_BEFORE_SOLVE;
256 bool testX_AFTER_SOLVE;
272 stepper->setModel(model);
273 stepper->initialize();
284 bool useFSAL = stepper->getUseFSAL();
285 std::string ICConsistency = stepper->getICConsistency();
286 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
287 bool zeroInitialGuess = stepper->getZeroInitialGuess();
288 std::string schemeName =
"Average Acceleration";
298 stepper->setICConsistency(ICConsistency); stepper->initialize();
TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
299 stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize();
TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
300 stepper->setZeroInitialGuess(zeroInitialGuess); stepper->initialize();
TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
309 model, solver, useFSAL,
310 ICConsistency, ICConsistencyCheck, zeroInitialGuess,
311 schemeName, beta, gamma, modifier));
330 using Teuchos::sublist;
337 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
349 auto modifier =
rcp(
new StepperNewmarkImplicitDFormModifierTest());
350 stepper->setAppAction(modifier);
351 stepper->initialize();
358 timeStepControl->setInitIndex(tscPL.
get<
int> (
"Initial Time Index"));
359 timeStepControl->setInitTime (tscPL.
get<
double>(
"Initial Time"));
360 timeStepControl->setFinalTime(dt);
361 timeStepControl->setInitTimeStep(dt);
362 timeStepControl->initialize();
365 using Teuchos::rcp_const_cast;
366 auto inArgsIC = model->getNominalValues();
375 icState->setTime (timeStepControl->getInitTime());
376 icState->setIndex (timeStepControl->getInitIndex());
377 icState->setTimeStep(0.0);
378 icState->setOrder (stepper->getOrder());
384 solutionHistory->setName(
"Forward States");
386 solutionHistory->setStorageLimit(2);
387 solutionHistory->addState(icState);
391 Tempus::createIntegratorBasic<double>();
392 integrator->setStepper(stepper);
393 integrator->setTimeStepControl(timeStepControl);
394 integrator->setSolutionHistory(solutionHistory);
395 integrator->initialize();
398 bool integratorStatus = integrator->advanceTime();
409 auto x = integrator->getX();
410 auto Dt = integrator->getTime();
413 TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
419 using Teuchos::sublist;
426 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
438 auto modifierX =
rcp(
new StepperNewmarkImplicitDFormModifierXTest());
439 stepper->setAppAction(modifierX);
440 stepper->initialize();
447 timeStepControl->setInitIndex(tscPL.
get<
int> (
"Initial Time Index"));
448 timeStepControl->setInitTime (tscPL.
get<
double>(
"Initial Time"));
449 timeStepControl->setFinalTime(dt);
450 timeStepControl->setInitTimeStep(dt);
451 timeStepControl->initialize();
454 using Teuchos::rcp_const_cast;
455 auto inArgsIC = model->getNominalValues();
464 icState->setTime (timeStepControl->getInitTime());
465 icState->setIndex (timeStepControl->getInitIndex());
466 icState->setTimeStep(0.0);
467 icState->setOrder (stepper->getOrder());
473 solutionHistory->setName(
"Forward States");
475 solutionHistory->setStorageLimit(2);
476 solutionHistory->addState(icState);
480 Tempus::createIntegratorBasic<double>();
481 integrator->setStepper(stepper);
482 integrator->setTimeStepControl(timeStepControl);
483 integrator->setSolutionHistory(solutionHistory);
484 integrator->initialize();
487 bool integratorStatus = integrator->advanceTime();
498 auto Dt = integrator->getTime();
501 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.
Teuchos::RCP< StepperNewmarkImplicitDForm< Scalar > > createStepperNewmarkImplicitDForm(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
T & get(const std::string &name, T def_value)
#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)