172 auto model = rcp(
new Tempus_Test::HarmonicOscillatorModel<double>());
176 stepper->setModel(model);
177 stepper->initialize();
178 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
188 bool useFSAL = stepper->getUseFSAL();
189 std::string ICConsistency = stepper->getICConsistency();
190 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
191 bool zeroInitialGuess = stepper->getZeroInitialGuess();
192 std::string schemeName =
"Average Acceleration";
198 stepper->setAppAction(modifier); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
199 stepper->setAppAction(modifierX); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
200 stepper->setSolver(solver); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
201 stepper->setUseFSAL(useFSAL); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
202 stepper->setICConsistency(ICConsistency); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
203 stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
204 stepper->setZeroInitialGuess(zeroInitialGuess); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
206 stepper->setSchemeName(schemeName); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
207 stepper->setBeta(beta); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
208 stepper->setGamma(gamma); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
213 model, solver, useFSAL,
214 ICConsistency, ICConsistencyCheck, zeroInitialGuess,
215 schemeName, beta, gamma, modifier));
216 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
219 TEUCHOS_ASSERT(stepper->getOrder() == 2);
234 using Teuchos::sublist;
235 using Teuchos::ParameterList;
240 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
241 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
242 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
245 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
246 RCP<const Thyra::ModelEvaluator<double> > model =
247 Teuchos::rcp(
new Tempus_Test::HarmonicOscillatorModel<double>(hom_pl));
250 RCP<Tempus::StepperNewmarkImplicitDForm<double> > stepper =
253 auto modifier = rcp(
new StepperNewmarkImplicitDFormModifierTest());
254 stepper->setAppAction(modifier);
255 stepper->initialize();
258 RCP<Tempus::TimeStepControl<double> > timeStepControl =
260 ParameterList tscPL = pl->sublist(
"Default Integrator")
261 .sublist(
"Time Step Control");
262 timeStepControl->setInitIndex(tscPL.get<
int> (
"Initial Time Index"));
263 timeStepControl->setInitTime (tscPL.get<
double>(
"Initial Time"));
264 timeStepControl->setFinalTime(dt);
265 timeStepControl->setInitTimeStep(dt);
266 timeStepControl->initialize();
269 using Teuchos::rcp_const_cast;
270 auto inArgsIC = model->getNominalValues();
271 RCP<Thyra::VectorBase<double> > icX =
272 rcp_const_cast<Thyra::VectorBase<double> > (inArgsIC.get_x());
273 RCP<Thyra::VectorBase<double> > icXDot =
274 rcp_const_cast<Thyra::VectorBase<double> > (inArgsIC.get_x_dot());
275 RCP<Thyra::VectorBase<double> > icXDotDot =
276 rcp_const_cast<Thyra::VectorBase<double> > (inArgsIC.get_x_dot_dot());
277 RCP<Tempus::SolutionState<double> > icState =
279 icState->setTime (timeStepControl->getInitTime());
280 icState->setIndex (timeStepControl->getInitIndex());
281 icState->setTimeStep(0.0);
282 icState->setOrder (stepper->getOrder());
286 RCP<Tempus::SolutionHistory<double> > solutionHistory =
288 solutionHistory->setName(
"Forward States");
290 solutionHistory->setStorageLimit(2);
291 solutionHistory->addState(icState);
294 RCP<Tempus::IntegratorBasic<double> > integrator =
295 Tempus::createIntegratorBasic<double>();
296 integrator->setStepper(stepper);
297 integrator->setTimeStepControl(timeStepControl);
298 integrator->setSolutionHistory(solutionHistory);
299 integrator->initialize();
302 bool integratorStatus = integrator->advanceTime();
303 TEST_ASSERT(integratorStatus)
307 TEST_COMPARE(modifier->testBEGIN_STEP, ==,
true);
308 TEST_COMPARE(modifier->testBEFORE_SOLVE, ==,
true);
309 TEST_COMPARE(modifier->testAFTER_SOLVE, ==,
true);
310 TEST_COMPARE(modifier->testEND_STEP, ==,
true);
313 auto x = integrator->getX();
314 auto Dt = integrator->getTime();
315 TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
316 TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
317 TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
323 using Teuchos::sublist;
324 using Teuchos::ParameterList;
329 RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
330 "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
331 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
334 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
335 RCP<const Thyra::ModelEvaluator<double> > model =
336 Teuchos::rcp(
new Tempus_Test::HarmonicOscillatorModel<double>(hom_pl));
339 RCP<Tempus::StepperNewmarkImplicitDForm<double> > stepper =
342 auto modifierX = rcp(
new StepperNewmarkImplicitDFormModifierXTest());
343 stepper->setAppAction(modifierX);
344 stepper->initialize();
347 RCP<Tempus::TimeStepControl<double> > timeStepControl =
349 ParameterList tscPL = pl->sublist(
"Default Integrator")
350 .sublist(
"Time Step Control");
351 timeStepControl->setInitIndex(tscPL.get<
int> (
"Initial Time Index"));
352 timeStepControl->setInitTime (tscPL.get<
double>(
"Initial Time"));
353 timeStepControl->setFinalTime(dt);
354 timeStepControl->setInitTimeStep(dt);
355 timeStepControl->initialize();
358 using Teuchos::rcp_const_cast;
359 auto inArgsIC = model->getNominalValues();
360 RCP<Thyra::VectorBase<double> > icX =
361 rcp_const_cast<Thyra::VectorBase<double> > (inArgsIC.get_x());
362 RCP<Thyra::VectorBase<double> > icXDot =
363 rcp_const_cast<Thyra::VectorBase<double> > (inArgsIC.get_x_dot());
364 RCP<Thyra::VectorBase<double> > icXDotDot =
365 rcp_const_cast<Thyra::VectorBase<double> > (inArgsIC.get_x_dot_dot());
366 RCP<Tempus::SolutionState<double> > icState =
368 icState->setTime (timeStepControl->getInitTime());
369 icState->setIndex (timeStepControl->getInitIndex());
370 icState->setTimeStep(0.0);
371 icState->setOrder (stepper->getOrder());
375 RCP<Tempus::SolutionHistory<double> > solutionHistory =
377 solutionHistory->setName(
"Forward States");
379 solutionHistory->setStorageLimit(2);
380 solutionHistory->addState(icState);
383 RCP<Tempus::IntegratorBasic<double> > integrator =
384 Tempus::createIntegratorBasic<double>();
385 integrator->setStepper(stepper);
386 integrator->setTimeStepControl(timeStepControl);
387 integrator->setSolutionHistory(solutionHistory);
388 integrator->initialize();
391 bool integratorStatus = integrator->advanceTime();
392 TEST_ASSERT(integratorStatus)
395 TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==,
true);
396 TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==,
true);
397 TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==,
true);
398 TEST_COMPARE(modifierX->testX_END_STEP, ==,
true);
402 auto Dt = integrator->getTime();
403 TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
405 const auto x = integrator->getX();
406 TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...