321#ifdef VERBOSE_DEBUG_OUTPUT
322 *out_ <<
"DEBUG: " << __PRETTY_FUNCTION__ <<
"\n";
324 this->checkInitialized();
328 TEMPUS_FUNC_TIME_MONITOR(
"Tempus::StepperHHTAlpha::takeStep()");
330 TEUCHOS_TEST_FOR_EXCEPTION(
331 solutionHistory->getNumStates() < 2, std::logic_error,
332 "Error - StepperHHTAlpha<Scalar>::takeStep(...)\n"
333 <<
"Need at least two SolutionStates for HHTAlpha.\n"
334 <<
" Number of States = " << solutionHistory->getNumStates()
335 <<
"\nTry setting in \"Solution History\" \"Storage Type\" = "
336 <<
"\"Undo\"\n or \"Storage Type\" = \"Static\" and \"Storage Limit\" = "
339 RCP<StepperHHTAlpha<Scalar> > thisStepper = Teuchos::rcpFromRef(*
this);
340 stepperHHTAlphaAppAction_->execute(
341 solutionHistory, thisStepper,
344 RCP<SolutionState<Scalar> > workingState =
345 solutionHistory->getWorkingState();
346 RCP<SolutionState<Scalar> > currentState =
347 solutionHistory->getCurrentState();
349 Teuchos::RCP<WrapperModelEvaluatorSecondOrder<Scalar> > wrapperModel =
350 Teuchos::rcp_dynamic_cast<WrapperModelEvaluatorSecondOrder<Scalar> >(
351 this->wrapperModel_);
354 RCP<const Thyra::VectorBase<Scalar> > d_old = currentState->getX();
355 RCP<const Thyra::VectorBase<Scalar> > v_old = currentState->getXDot();
356 RCP<Thyra::VectorBase<Scalar> > a_old = currentState->getXDotDot();
361 *out_ <<
"IKT d_old = " << Thyra::max(*d_old) <<
"\n";
362 *out_ <<
"IKT v_old = " << Thyra::max(*v_old) <<
"\n";
367 RCP<Thyra::VectorBase<Scalar> > d_new = workingState->getX();
368 RCP<Thyra::VectorBase<Scalar> > v_new = workingState->getXDot();
369 RCP<Thyra::VectorBase<Scalar> > a_new = workingState->getXDotDot();
372 const Scalar time = currentState->getTime();
373 const Scalar dt = workingState->getTimeStep();
375 Scalar t = time + dt;
379 if (time == solutionHistory->minTime()) {
380 RCP<Thyra::VectorBase<Scalar> > d_init =
381 Thyra::createMember(d_old->space());
382 RCP<Thyra::VectorBase<Scalar> > v_init =
383 Thyra::createMember(v_old->space());
384 RCP<Thyra::VectorBase<Scalar> > a_init =
385 Thyra::createMember(a_old->space());
386 Thyra::copy(*d_old, d_init.ptr());
387 Thyra::copy(*v_old, v_init.ptr());
388 if (this->initialGuess_ !=
392 (a_init->space())->isCompatible(*this->initialGuess_->space());
393 TEUCHOS_TEST_FOR_EXCEPTION(
394 is_compatible !=
true, std::logic_error,
395 "Error in Tempus::NemwarkImplicitAForm takeStep(): user-provided "
397 <<
"for Newton is not compatible with solution vector!\n");
398 Thyra::copy(*this->initialGuess_, a_init.ptr());
401 Thyra::put_scalar(0.0, a_init.ptr());
403 wrapperModel->initializeNewmark(v_init, d_init, 0.0, time, beta_, gamma_);
404 const Thyra::SolveStatus<Scalar> sStatus =
405 (*(this->solver_)).solve(&*a_init);
407 workingState->setSolutionStatus(sStatus);
408 Thyra::copy(*a_init, a_old.ptr());
412 *out_ <<
"IKT a_old = " << Thyra::max(*a_old) <<
"\n";
416 RCP<Thyra::VectorBase<Scalar> > d_pred =
417 Thyra::createMember(d_old->space());
418 RCP<Thyra::VectorBase<Scalar> > v_pred =
419 Thyra::createMember(v_old->space());
422 predictDisplacement(*d_pred, *d_old, *v_old, *a_old, dt);
423 predictVelocity(*v_pred, *v_old, *a_old, dt);
427 predictDisplacement_alpha_f(*d_pred, *d_old);
428 predictVelocity_alpha_f(*v_pred, *v_old);
431 wrapperModel->initializeNewmark(v_pred, d_pred, dt, t, beta_, gamma_);
433 stepperHHTAlphaAppAction_->execute(
434 solutionHistory, thisStepper,
438 const Thyra::SolveStatus<Scalar> sStatus =
439 (*(this->solver_)).solve(&*a_new);
441 stepperHHTAlphaAppAction_->execute(
442 solutionHistory, thisStepper,
446 correctAcceleration(*a_new, *a_old);
449 correctVelocity(*v_new, *v_pred, *a_new, dt);
450 correctDisplacement(*d_new, *d_pred, *a_new, dt);
452 workingState->setSolutionStatus(sStatus);
453 workingState->setOrder(this->getOrder());
454 workingState->computeNorms(currentState);
456 stepperHHTAlphaAppAction_->execute(
457 solutionHistory, thisStepper,
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...