385#ifdef VERBOSE_DEBUG_OUTPUT
386 *
out_ <<
"DEBUG: " << __PRETTY_FUNCTION__ <<
"\n";
392 TEMPUS_FUNC_TIME_MONITOR(
"Tempus::StepperHHTAlpha::takeStep()");
394 TEUCHOS_TEST_FOR_EXCEPTION(
395 solutionHistory->getNumStates() < 2, std::logic_error,
396 "Error - StepperHHTAlpha<Scalar>::takeStep(...)\n"
397 <<
"Need at least two SolutionStates for HHTAlpha.\n"
398 <<
" Number of States = " << solutionHistory->getNumStates()
399 <<
"\nTry setting in \"Solution History\" \"Storage Type\" = "
400 <<
"\"Undo\"\n or \"Storage Type\" = \"Static\" and \"Storage Limit\" = "
403 RCP<StepperHHTAlpha<Scalar> > thisStepper = Teuchos::rcpFromRef(*
this);
405 solutionHistory, thisStepper,
408 RCP<SolutionState<Scalar> > workingState =
409 solutionHistory->getWorkingState();
410 RCP<SolutionState<Scalar> > currentState =
411 solutionHistory->getCurrentState();
413 Teuchos::RCP<WrapperModelEvaluatorSecondOrder<Scalar> > wrapperModel =
414 Teuchos::rcp_dynamic_cast<WrapperModelEvaluatorSecondOrder<Scalar> >(
418 RCP<const Thyra::VectorBase<Scalar> > d_old = currentState->getX();
419 RCP<const Thyra::VectorBase<Scalar> > v_old = currentState->getXDot();
420 RCP<Thyra::VectorBase<Scalar> > a_old = currentState->getXDotDot();
425 *
out_ <<
"IKT d_old = " << Thyra::max(*d_old) <<
"\n";
426 *
out_ <<
"IKT v_old = " << Thyra::max(*v_old) <<
"\n";
431 RCP<Thyra::VectorBase<Scalar> > d_new = workingState->getX();
432 RCP<Thyra::VectorBase<Scalar> > v_new = workingState->getXDot();
433 RCP<Thyra::VectorBase<Scalar> > a_new = workingState->getXDotDot();
436 const Scalar time = currentState->getTime();
437 const Scalar dt = workingState->getTimeStep();
440 Scalar t_alpha_f = time + (1.0 -
alpha_f_) * dt;
444 if (time == solutionHistory->minTime()) {
445 RCP<Thyra::VectorBase<Scalar> > d_init =
446 Thyra::createMember(d_old->space());
447 RCP<Thyra::VectorBase<Scalar> > v_init =
448 Thyra::createMember(v_old->space());
449 RCP<Thyra::VectorBase<Scalar> > a_init =
450 Thyra::createMember(a_old->space());
451 Thyra::copy(*d_old, d_init.ptr());
452 Thyra::copy(*v_old, v_init.ptr());
457 (a_init->space())->isCompatible(*this->
initialGuess_->space());
458 TEUCHOS_TEST_FOR_EXCEPTION(
459 is_compatible !=
true, std::logic_error,
460 "Error in Tempus::NemwarkImplicitAForm takeStep(): user-provided "
462 <<
"for Newton is not compatible with solution vector!\n");
466 Thyra::put_scalar(0.0, a_init.ptr());
468 wrapperModel->initializeNewmark(v_init, d_init, 0.0, time,
beta_,
gamma_);
469 const Thyra::SolveStatus<Scalar> sStatus =
470 (*(this->
solver_)).solve(&*a_init);
472 workingState->setSolutionStatus(sStatus);
473 Thyra::copy(*a_init, a_old.ptr());
477 *
out_ <<
"IKT a_old = " << Thyra::max(*a_old) <<
"\n";
481 RCP<Thyra::VectorBase<Scalar> > d_pred =
482 Thyra::createMember(d_old->space());
483 RCP<Thyra::VectorBase<Scalar> > v_pred =
484 Thyra::createMember(v_old->space());
488 RCP<Thyra::VectorBase<Scalar> > d_pred_alpha_f =
489 Thyra::createMember(d_old->space());
490 RCP<Thyra::VectorBase<Scalar> > v_pred_alpha_f =
491 Thyra::createMember(v_old->space());
500 Thyra::copy(*d_pred, d_pred_alpha_f.ptr());
501 Thyra::copy(*v_pred, v_pred_alpha_f.ptr());
506 wrapperModel->initializeNewmark(
507 v_pred_alpha_f, d_pred_alpha_f, dt, t_alpha_f,
beta_,
gamma_);
510 solutionHistory, thisStepper,
514 const Thyra::SolveStatus<Scalar> sStatus =
515 (*(this->
solver_)).solve(&*a_new);
518 solutionHistory, thisStepper,
530 workingState->setSolutionStatus(sStatus);
531 workingState->setOrder(this->
getOrder());
532 workingState->computeNorms(currentState);
535 solutionHistory, thisStepper,
636 Teuchos::RCP<Teuchos::ParameterList> pl)
639 stepper->setStepperImplicitValues(pl);
641 if (pl != Teuchos::null) {
642 if (pl->isSublist(
"HHT-Alpha Parameters")) {
643 auto hhtalphaPL = pl->sublist(
"HHT-Alpha Parameters",
true);
644 std::string schemeName = hhtalphaPL.get<std::string>(
645 "Scheme Name",
"Newmark Beta Average Acceleration");
646 stepper->setSchemeName(schemeName);
647 stepper->setAlphaF(hhtalphaPL.get<
double>(
"Alpha_f", 0.0));
648 stepper->setAlphaM(hhtalphaPL.get<
double>(
"Alpha_m", 0.0));
649 if (schemeName ==
"Newmark Beta User Defined") {
650 stepper->setBeta(hhtalphaPL.get<
double>(
"Beta", 0.25));
651 stepper->setGamma(hhtalphaPL.get<
double>(
"Gamma", 0.5));
655 stepper->setSchemeName(
"Newmark Beta Average Acceleration");
656 stepper->setAlphaF(0.0);
657 stepper->setAlphaM(0.0);
659 stepper->validateSchemeParameters();
662 if (model != Teuchos::null) {
663 stepper->setModel(model);
664 stepper->initialize();
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...