259#ifdef VERBOSE_DEBUG_OUTPUT
260 *out_ <<
"DEBUG: " << __PRETTY_FUNCTION__ <<
"\n";
262 this->checkInitialized();
266 TEMPUS_FUNC_TIME_MONITOR(
"Tempus::StepperNewmarkImplicitDForm::takeStep()");
268 TEUCHOS_TEST_FOR_EXCEPTION(
269 solutionHistory->getNumStates() < 2, std::logic_error,
270 "Error - StepperNewmarkImplicitDForm<Scalar>::takeStep(...)\n"
271 <<
"Need at least two SolutionStates for NewmarkImplicitDForm.\n"
272 <<
" Number of States = " << solutionHistory->getNumStates()
273 <<
"\nTry setting in \"Solution History\" \"Storage Type\" = "
275 <<
" or \"Storage Type\" = \"Static\" and \"Storage Limit\" = "
278 auto thisStepper = Teuchos::rcpFromRef(*
this);
279 stepperNewmarkImpAppAction_->execute(
280 solutionHistory, thisStepper,
282 Scalar>::ACTION_LOCATION::BEGIN_STEP);
284 RCP<SolutionState<Scalar>> workingState =
285 solutionHistory->getWorkingState();
286 RCP<SolutionState<Scalar>> currentState =
287 solutionHistory->getCurrentState();
289 Teuchos::RCP<WrapperModelEvaluatorSecondOrder<Scalar>> wrapperModel =
290 Teuchos::rcp_dynamic_cast<WrapperModelEvaluatorSecondOrder<Scalar>>(
291 this->wrapperModel_);
294 RCP<const Thyra::VectorBase<Scalar>> d_old = currentState->getX();
295 RCP<Thyra::VectorBase<Scalar>> v_old = currentState->getXDot();
296 RCP<Thyra::VectorBase<Scalar>> a_old = currentState->getXDotDot();
300 RCP<Thyra::VectorBase<Scalar>> d_new = workingState->getX();
301 RCP<Thyra::VectorBase<Scalar>> v_new = workingState->getXDot();
302 RCP<Thyra::VectorBase<Scalar>> a_new = workingState->getXDotDot();
305 const Scalar time = currentState->getTime();
306 const Scalar dt = workingState->getTimeStep();
308 Scalar t = time + dt;
311 Teuchos::Range1D range;
313 *out_ <<
"\n*** d_old ***\n";
314 RTOpPack::ConstSubVectorView<Scalar> dov;
315 d_old->acquireDetachedView(range, &dov);
316 auto doa = dov.values();
317 for (
auto i = 0; i < doa.size(); ++i) *out_ << doa[i] <<
" ";
318 *out_ <<
"\n*** d_old ***\n";
320 *out_ <<
"\n*** v_old ***\n";
321 RTOpPack::ConstSubVectorView<Scalar> vov;
322 v_old->acquireDetachedView(range, &vov);
323 auto voa = vov.values();
324 for (
auto i = 0; i < voa.size(); ++i) *out_ << voa[i] <<
" ";
325 *out_ <<
"\n*** v_old ***\n";
327 *out_ <<
"\n*** a_old ***\n";
328 RTOpPack::ConstSubVectorView<Scalar> aov;
329 a_old->acquireDetachedView(range, &aov);
330 auto aoa = aov.values();
331 for (
auto i = 0; i < aoa.size(); ++i) *out_ << aoa[i] <<
" ";
332 *out_ <<
"\n*** a_old ***\n";
336 RCP<Thyra::VectorBase<Scalar>> d_pred = Thyra::createMember(d_old->space());
337 RCP<Thyra::VectorBase<Scalar>> v_pred = Thyra::createMember(v_old->space());
340 predictDisplacement(*d_pred, *d_old, *v_old, *a_old, dt);
341 predictVelocity(*v_pred, *v_old, *a_old, dt);
344 *out_ <<
"\n*** d_pred ***\n";
345 RTOpPack::ConstSubVectorView<Scalar> dpv;
346 d_pred->acquireDetachedView(range, &dpv);
347 auto dpa = dpv.values();
348 for (
auto i = 0; i < dpa.size(); ++i) *out_ << dpa[i] <<
" ";
349 *out_ <<
"\n*** d_pred ***\n";
351 *out_ <<
"\n*** v_pred ***\n";
352 RTOpPack::ConstSubVectorView<Scalar> vpv;
353 v_pred->acquireDetachedView(range, &vpv);
354 auto vpa = vpv.values();
355 for (
auto i = 0; i < vpa.size(); ++i) *out_ << vpa[i] <<
" ";
356 *out_ <<
"\n*** v_pred ***\n";
360 wrapperModel->initializeNewmark(v_pred, d_pred, dt, t, beta_, gamma_);
363 RCP<Thyra::VectorBase<Scalar>> initial_guess =
364 Thyra::createMember(d_pred->space());
365 if ((time == solutionHistory->minTime()) &&
366 (this->initialGuess_ != Teuchos::null)) {
371 (initial_guess->space())->isCompatible(*this->initialGuess_->space());
372 TEUCHOS_TEST_FOR_EXCEPTION(
373 is_compatible !=
true, std::logic_error,
374 "Error in Tempus::NemwarkImplicitDForm takeStep(): user-provided "
376 <<
"for Newton is not compatible with solution vector!\n");
377 Thyra::copy(*this->initialGuess_, initial_guess.ptr());
381 Thyra::copy(*d_pred, initial_guess.ptr());
384 stepperNewmarkImpAppAction_->execute(
385 solutionHistory, thisStepper,
387 Scalar>::ACTION_LOCATION::BEFORE_SOLVE);
390 const Thyra::SolveStatus<Scalar> sStatus =
391 (*(this->solver_)).solve(&*initial_guess);
393 workingState->setSolutionStatus(sStatus);
395 stepperNewmarkImpAppAction_->execute(
396 solutionHistory, thisStepper,
398 Scalar>::ACTION_LOCATION::AFTER_SOLVE);
402 Thyra::copy(*initial_guess, d_new.ptr());
405 correctAcceleration(*a_new, *d_pred, *d_new, dt);
406 correctVelocity(*v_new, *v_pred, *a_new, dt);
409 *out_ <<
"\n*** d_new ***\n";
410 RTOpPack::ConstSubVectorView<Scalar> dnv;
411 d_new->acquireDetachedView(range, &dnv);
412 auto dna = dnv.values();
413 for (
auto i = 0; i < dna.size(); ++i) *out_ << dna[i] <<
" ";
414 *out_ <<
"\n*** d_new ***\n";
416 *out_ <<
"\n*** v_new ***\n";
417 RTOpPack::ConstSubVectorView<Scalar> vnv;
418 v_new->acquireDetachedView(range, &vnv);
419 auto vna = vnv.values();
420 for (
auto i = 0; i < vna.size(); ++i) *out_ << vna[i] <<
" ";
421 *out_ <<
"\n*** v_new ***\n";
423 *out_ <<
"\n*** a_new ***\n";
424 RTOpPack::ConstSubVectorView<Scalar> anv;
425 a_new->acquireDetachedView(range, &anv);
426 auto ana = anv.values();
427 for (
auto i = 0; i < ana.size(); ++i) *out_ << ana[i] <<
" ";
428 *out_ <<
"\n*** a_new ***\n";
431 workingState->setOrder(this->getOrder());
432 workingState->computeNorms(currentState);
434 stepperNewmarkImpAppAction_->execute(
435 solutionHistory, thisStepper,
437 Scalar>::ACTION_LOCATION::END_STEP);