Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_StepperNewmarkImplicitDForm_impl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
9 #ifndef Tempus_StepperNewmarkImplicitDForm_impl_hpp
10 #define Tempus_StepperNewmarkImplicitDForm_impl_hpp
11 
13 
14 //#define VERBOSE_DEBUG_OUTPUT
15 //#define DEBUG_OUTPUT
16 
17 namespace Tempus {
18 
19 template <class Scalar>
22  const Thyra::VectorBase<Scalar>& a, const Scalar dt) const
23 {
24 #ifdef VERBOSE_DEBUG_OUTPUT
25  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
26 #endif
27  // vPred = v + dt*(1.0-gamma_)*a
28  Thyra::V_StVpStV(Teuchos::ptrFromRef(vPred), 1.0, v, dt * (1.0 - gamma_), a);
29 }
30 
31 template <class Scalar>
35  const Scalar dt) const
36 {
37 #ifdef VERBOSE_DEBUG_OUTPUT
38  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
39 #endif
41  Thyra::createMember<Scalar>(dPred.space());
42  // dPred = dt*v + dt*dt/2.0*(1.0-2.0*beta_)*a
43  Scalar aConst = dt * dt / 2.0 * (1.0 - 2.0 * beta_);
44  Thyra::V_StVpStV(Teuchos::ptrFromRef(dPred), dt, v, aConst, a);
45  // dPred += d;
46  Thyra::Vp_V(Teuchos::ptrFromRef(dPred), d, 1.0);
47 }
48 
49 template <class Scalar>
52  const Thyra::VectorBase<Scalar>& a, const Scalar dt) const
53 {
54 #ifdef VERBOSE_DEBUG_OUTPUT
55  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
56 #endif
57  // v = vPred + dt*gamma_*a
58  Thyra::V_StVpStV(Teuchos::ptrFromRef(v), 1.0, vPred, dt * gamma_, a);
59 }
60 
61 template <class Scalar>
64  const Thyra::VectorBase<Scalar>& a, const Scalar dt) const
65 {
66 #ifdef VERBOSE_DEBUG_OUTPUT
67  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
68 #endif
69  // d = dPred + beta_*dt*dt*a
70  Thyra::V_StVpStV(Teuchos::ptrFromRef(d), 1.0, dPred, beta_ * dt * dt, a);
71 }
72 
73 template <class Scalar>
76  const Thyra::VectorBase<Scalar>& d, const Scalar dt) const
77 {
78 #ifdef VERBOSE_DEBUG_OUTPUT
79  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
80 #endif
81  // a = (d - dPred) / (beta_*dt*dt)
82  Scalar const c = 1.0 / beta_ / dt / dt;
83  Thyra::V_StVpStV(Teuchos::ptrFromRef(a), c, d, -c, dPred);
84 }
85 
86 template <class Scalar>
88 {
89  if (schemeName_ != "User Defined") {
90  *out_ << "\nWARNING: schemeName != 'User Defined' (=" << schemeName_
91  << ").\n"
92  << " Not setting beta, and leaving as beta = " << beta_ << "!\n";
93  return;
94  }
95 
96  beta_ = beta;
97 
98  if (beta_ == 0.0) {
99  *out_ << "\nWARNING: Running (implicit implementation of) Newmark "
100  << "Implicit a-Form Stepper with Beta = 0.0, which \n"
101  << "specifies an explicit scheme. Mass lumping is not possible, "
102  << "so this will be slow! To run explicit \n"
103  << "implementation of Newmark Implicit a-Form Stepper, please "
104  << "re-run with 'Stepper Type' = 'Newmark Explicit a-Form'.\n"
105  << "This stepper allows for mass lumping when called through "
106  << "Piro::TempusSolver.\n";
107  }
108 
110  (beta_ > 1.0) || (beta_ < 0.0), std::logic_error,
111  "\nError in 'Newmark Implicit a-Form' stepper: invalid value of Beta = "
112  << beta_ << ". Please select Beta >= 0 and <= 1. \n");
113 
114  this->isInitialized_ = false;
115 }
116 
117 template <class Scalar>
119 {
120  if (schemeName_ != "User Defined") {
121  *out_ << "\nWARNING: schemeName != 'User Defined' (=" << schemeName_
122  << ").\n"
123  << " Not setting gamma, and leaving as gamma = " << gamma_ << "!\n";
124  return;
125  }
126 
127  gamma_ = gamma;
128 
130  (gamma_ > 1.0) || (gamma_ < 0.0), std::logic_error,
131  "\nError in 'Newmark Implicit a-Form' stepper: invalid value of Gamma ="
132  << gamma_ << ". Please select Gamma >= 0 and <= 1. \n");
133 
134  this->isInitialized_ = false;
135 }
136 
137 template <class Scalar>
139 {
140  schemeName_ = schemeName;
141 
142  if (schemeName_ == "Average Acceleration") {
143  beta_ = 0.25;
144  gamma_ = 0.5;
145  }
146  else if (schemeName_ == "Linear Acceleration") {
147  beta_ = 0.25;
148  gamma_ = 1.0 / 6.0;
149  }
150  else if (schemeName_ == "Central Difference") {
151  beta_ = 0.0;
152  gamma_ = 0.5;
153  }
154  else if (schemeName_ == "User Defined") {
155  beta_ = 0.25;
156  gamma_ = 0.5; // Use defaults until setBeta and setGamma calls.
157  }
158  else {
160  true, std::logic_error,
161  "\nError in Tempus::StepperNewmarkImplicitDForm! "
162  << "Invalid Scheme Name = " << schemeName_ << ". \n"
163  << "Valid Scheme Names are: 'Average Acceleration', "
164  << "'Linear Acceleration', \n"
165  << "'Central Difference' and 'User Defined'.\n");
166  }
167 
168  this->isInitialized_ = false;
169 }
170 
171 template <class Scalar>
173  : out_(Teuchos::VerboseObjectBase::getDefaultOStream())
174 {
175 #ifdef VERBOSE_DEBUG_OUTPUT
176  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
177 #endif
178 
179  this->setStepperName("Newmark Implicit d-Form");
180  this->setStepperType("Newmark Implicit d-Form");
181  this->setUseFSAL(false);
182  this->setICConsistency("None");
183  this->setICConsistencyCheck(false);
184  this->setZeroInitialGuess(false);
185  this->setSchemeName("Average Acceleration");
186 
187  this->setAppAction(Teuchos::null);
188  this->setDefaultSolver();
189 }
190 
191 template <class Scalar>
193  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& appModel,
195  bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck,
196  bool zeroInitialGuess, std::string schemeName, Scalar beta, Scalar gamma,
198  stepperAppAction)
199  : out_(Teuchos::VerboseObjectBase::getDefaultOStream())
200 {
201  this->setStepperName("Newmark Implicit d-Form");
202  this->setStepperType("Newmark Implicit d-Form");
203  this->setUseFSAL(useFSAL);
204  this->setICConsistency(ICConsistency);
205  this->setICConsistencyCheck(ICConsistencyCheck);
206  this->setZeroInitialGuess(zeroInitialGuess);
207  this->setSchemeName(schemeName);
208  this->setBeta(beta);
209  this->setGamma(gamma);
210  this->setAppAction(stepperAppAction);
211  this->setSolver(solver);
212 
213  if (appModel != Teuchos::null) {
214  this->setModel(appModel);
215  this->initialize();
216  }
217 }
218 
219 template <class Scalar>
221  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& appModel)
222 {
223 #ifdef VERBOSE_DEBUG_OUTPUT
224  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
225 #endif
226  validSecondOrderODE_DAE(appModel);
227  this->wrapperModel_ =
229  appModel, "Newmark Implicit d-Form"));
230 
231  TEUCHOS_TEST_FOR_EXCEPTION(this->getSolver() == Teuchos::null,
232  std::logic_error, "Error - Solver is not set!\n");
233  this->getSolver()->setModel(this->wrapperModel_);
234 
235  this->isInitialized_ = false;
236 }
237 
238 template <class Scalar>
241 {
242  if (appAction == Teuchos::null) {
243  // Create default appAction
244  stepperNewmarkImpAppAction_ =
246  }
247  else {
248  stepperNewmarkImpAppAction_ = appAction;
249  }
250 
251  this->isInitialized_ = false;
252 }
253 
254 template <class Scalar>
256  const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory)
257 {
258 #ifdef VERBOSE_DEBUG_OUTPUT
259  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
260 #endif
261  this->checkInitialized();
262 
263  using Teuchos::RCP;
264 
265  TEMPUS_FUNC_TIME_MONITOR("Tempus::StepperNewmarkImplicitDForm::takeStep()");
266  {
268  solutionHistory->getNumStates() < 2, std::logic_error,
269  "Error - StepperNewmarkImplicitDForm<Scalar>::takeStep(...)\n"
270  << "Need at least two SolutionStates for NewmarkImplicitDForm.\n"
271  << " Number of States = " << solutionHistory->getNumStates()
272  << "\nTry setting in \"Solution History\" \"Storage Type\" = "
273  << "\"Undo\"\n"
274  << " or \"Storage Type\" = \"Static\" and \"Storage Limit\" = "
275  << "\"2\"\n");
276 
277  auto thisStepper = Teuchos::rcpFromRef(*this);
278  stepperNewmarkImpAppAction_->execute(
279  solutionHistory, thisStepper,
281  Scalar>::ACTION_LOCATION::BEGIN_STEP);
282 
283  RCP<SolutionState<Scalar>> workingState =
284  solutionHistory->getWorkingState();
285  RCP<SolutionState<Scalar>> currentState =
286  solutionHistory->getCurrentState();
287 
289  Teuchos::rcp_dynamic_cast<WrapperModelEvaluatorSecondOrder<Scalar>>(
290  this->wrapperModel_);
291 
292  // Get values of d, v and a from previous step
293  RCP<const Thyra::VectorBase<Scalar>> d_old = currentState->getX();
294  RCP<Thyra::VectorBase<Scalar>> v_old = currentState->getXDot();
295  RCP<Thyra::VectorBase<Scalar>> a_old = currentState->getXDotDot();
296 
297  // Get new values of d, v and a from current workingState
298  //(to be updated here)
299  RCP<Thyra::VectorBase<Scalar>> d_new = workingState->getX();
300  RCP<Thyra::VectorBase<Scalar>> v_new = workingState->getXDot();
301  RCP<Thyra::VectorBase<Scalar>> a_new = workingState->getXDotDot();
302 
303  // Get time and dt
304  const Scalar time = currentState->getTime();
305  const Scalar dt = workingState->getTimeStep();
306  // Update time
307  Scalar t = time + dt;
308 
309 #ifdef DEBUG_OUTPUT
310  Teuchos::Range1D range;
311 
312  *out_ << "\n*** d_old ***\n";
313  RTOpPack::ConstSubVectorView<Scalar> dov;
314  d_old->acquireDetachedView(range, &dov);
315  auto doa = dov.values();
316  for (auto i = 0; i < doa.size(); ++i) *out_ << doa[i] << " ";
317  *out_ << "\n*** d_old ***\n";
318 
319  *out_ << "\n*** v_old ***\n";
320  RTOpPack::ConstSubVectorView<Scalar> vov;
321  v_old->acquireDetachedView(range, &vov);
322  auto voa = vov.values();
323  for (auto i = 0; i < voa.size(); ++i) *out_ << voa[i] << " ";
324  *out_ << "\n*** v_old ***\n";
325 
326  *out_ << "\n*** a_old ***\n";
327  RTOpPack::ConstSubVectorView<Scalar> aov;
328  a_old->acquireDetachedView(range, &aov);
329  auto aoa = aov.values();
330  for (auto i = 0; i < aoa.size(); ++i) *out_ << aoa[i] << " ";
331  *out_ << "\n*** a_old ***\n";
332 #endif
333 
334  // allocate d and v predictors
335  RCP<Thyra::VectorBase<Scalar>> d_pred = Thyra::createMember(d_old->space());
336  RCP<Thyra::VectorBase<Scalar>> v_pred = Thyra::createMember(v_old->space());
337 
338  // compute displacement and velocity predictors
339  predictDisplacement(*d_pred, *d_old, *v_old, *a_old, dt);
340  predictVelocity(*v_pred, *v_old, *a_old, dt);
341 
342 #ifdef DEBUG_OUTPUT
343  *out_ << "\n*** d_pred ***\n";
344  RTOpPack::ConstSubVectorView<Scalar> dpv;
345  d_pred->acquireDetachedView(range, &dpv);
346  auto dpa = dpv.values();
347  for (auto i = 0; i < dpa.size(); ++i) *out_ << dpa[i] << " ";
348  *out_ << "\n*** d_pred ***\n";
349 
350  *out_ << "\n*** v_pred ***\n";
351  RTOpPack::ConstSubVectorView<Scalar> vpv;
352  v_pred->acquireDetachedView(range, &vpv);
353  auto vpa = vpv.values();
354  for (auto i = 0; i < vpa.size(); ++i) *out_ << vpa[i] << " ";
355  *out_ << "\n*** v_pred ***\n";
356 
357 #endif
358  // inject d_pred, v_pred, a and other relevant data into wrapperModel
359  wrapperModel->initializeNewmark(v_pred, d_pred, dt, t, beta_, gamma_);
360 
361  // create initial guess in NOX solver
362  RCP<Thyra::VectorBase<Scalar>> initial_guess =
363  Thyra::createMember(d_pred->space());
364  if ((time == solutionHistory->minTime()) &&
365  (this->initialGuess_ != Teuchos::null)) {
366  // if first time step and initialGuess_ is provided, set initial_guess =
367  // initialGuess_ Throw an exception if initial_guess is not compatible
368  // with solution
369  bool is_compatible =
370  (initial_guess->space())->isCompatible(*this->initialGuess_->space());
372  is_compatible != true, std::logic_error,
373  "Error in Tempus::NemwarkImplicitDForm takeStep(): user-provided "
374  "initial guess'!\n"
375  << "for Newton is not compatible with solution vector!\n");
376  Thyra::copy(*this->initialGuess_, initial_guess.ptr());
377  }
378  else {
379  // Otherwise, set initial guess = diplacement predictor
380  Thyra::copy(*d_pred, initial_guess.ptr());
381  }
382 
383  stepperNewmarkImpAppAction_->execute(
384  solutionHistory, thisStepper,
386  Scalar>::ACTION_LOCATION::BEFORE_SOLVE);
387 
388  // Set d_pred as initial guess for NOX solver, and solve nonlinear system.
389  const Thyra::SolveStatus<Scalar> sStatus =
390  (*(this->solver_)).solve(&*initial_guess);
391 
392  workingState->setSolutionStatus(sStatus); // Converged --> pass.
393 
394  stepperNewmarkImpAppAction_->execute(
395  solutionHistory, thisStepper,
397  Scalar>::ACTION_LOCATION::AFTER_SOLVE);
398 
399  // solve will return converged solution in initial_guess
400  // vector. Copy it here to d_new, to define the new displacement.
401  Thyra::copy(*initial_guess, d_new.ptr());
402 
403  // correct acceleration, velocity
404  correctAcceleration(*a_new, *d_pred, *d_new, dt);
405  correctVelocity(*v_new, *v_pred, *a_new, dt);
406 
407 #ifdef DEBUG_OUTPUT
408  *out_ << "\n*** d_new ***\n";
409  RTOpPack::ConstSubVectorView<Scalar> dnv;
410  d_new->acquireDetachedView(range, &dnv);
411  auto dna = dnv.values();
412  for (auto i = 0; i < dna.size(); ++i) *out_ << dna[i] << " ";
413  *out_ << "\n*** d_new ***\n";
414 
415  *out_ << "\n*** v_new ***\n";
416  RTOpPack::ConstSubVectorView<Scalar> vnv;
417  v_new->acquireDetachedView(range, &vnv);
418  auto vna = vnv.values();
419  for (auto i = 0; i < vna.size(); ++i) *out_ << vna[i] << " ";
420  *out_ << "\n*** v_new ***\n";
421 
422  *out_ << "\n*** a_new ***\n";
423  RTOpPack::ConstSubVectorView<Scalar> anv;
424  a_new->acquireDetachedView(range, &anv);
425  auto ana = anv.values();
426  for (auto i = 0; i < ana.size(); ++i) *out_ << ana[i] << " ";
427  *out_ << "\n*** a_new ***\n";
428 #endif
429 
430  workingState->setOrder(this->getOrder());
431  workingState->computeNorms(currentState);
432 
433  stepperNewmarkImpAppAction_->execute(
434  solutionHistory, thisStepper,
436  Scalar>::ACTION_LOCATION::END_STEP);
437  }
438  return;
439 }
440 
447 template <class Scalar>
450 {
451 #ifdef VERBOSE_DEBUG_OUTPUT
452  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
453 #endif
455  rcp(new StepperState<Scalar>(this->getStepperType()));
456  return stepperState;
457 }
458 
459 template <class Scalar>
461  Teuchos::FancyOStream& out, const Teuchos::EVerbosityLevel verbLevel) const
462 {
463 #ifdef VERBOSE_DEBUG_OUTPUT
464  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
465 #endif
466 
467  out.setOutputToRootOnly(0);
468  out << std::endl;
469  Stepper<Scalar>::describe(out, verbLevel);
470  StepperImplicit<Scalar>::describe(out, verbLevel);
471 
472  out << "--- StepperNewmarkImplicitDForm ---\n";
473  out << " schemeName_ = " << schemeName_ << std::endl;
474  out << " beta_ = " << beta_ << std::endl;
475  out << " gamma_ = " << gamma_ << std::endl;
476  out << "-----------------------------------" << std::endl;
477 }
478 
479 template <class Scalar>
481  Teuchos::FancyOStream& out) const
482 {
483  out.setOutputToRootOnly(0);
484  bool isValidSetup = true;
485 
486  if (!Stepper<Scalar>::isValidSetup(out)) isValidSetup = false;
487 
488  // if ( !StepperImplicit<Scalar>::isValidSetup(out) ) isValidSetup = false;
489  if (this->wrapperModel_->getAppModel() == Teuchos::null) {
490  isValidSetup = false;
491  out << "The application ModelEvaluator is not set!\n";
492  }
493 
494  if (this->wrapperModel_ == Teuchos::null) {
495  isValidSetup = false;
496  out << "The wrapper ModelEvaluator is not set!\n";
497  }
498 
499  if (this->solver_ == Teuchos::null) {
500  isValidSetup = false;
501  out << "The solver is not set!\n";
502  }
503 
504  return isValidSetup;
505 }
506 
507 template <class Scalar>
510 {
511 #ifdef VERBOSE_DEBUG_OUTPUT
512  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
513 #endif
514  auto pl = this->getValidParametersBasicImplicit();
515 
516  auto newmarkPL = Teuchos::parameterList("Newmark Parameters");
517  newmarkPL->set<std::string>("Scheme Name", schemeName_);
518  newmarkPL->set<double>("Beta", beta_);
519  newmarkPL->set<double>("Gamma", gamma_);
520  pl->set("Newmark Parameters", *newmarkPL);
521 
522  return pl;
523 }
524 
525 // Nonmember constructor - ModelEvaluator and ParameterList
526 // ------------------------------------------------------------------------
527 template <class Scalar>
530  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& model,
532 {
534  stepper->setStepperImplicitValues(pl);
535 
536  if (pl != Teuchos::null) {
537  if (pl->isSublist("Newmark Parameters")) {
538  auto newmarkPL = pl->sublist("Newmark Parameters", true);
539  std::string schemeName =
540  newmarkPL.get<std::string>("Scheme Name", "Average Acceleration");
541  stepper->setSchemeName(schemeName);
542  if (schemeName == "User Defined") {
543  stepper->setBeta(newmarkPL.get<double>("Beta", 0.25));
544  stepper->setGamma(newmarkPL.get<double>("Gamma", 0.5));
545  }
546  }
547  else {
548  stepper->setSchemeName("Average Acceleration");
549  }
550  }
551 
552  if (model != Teuchos::null) {
553  stepper->setModel(model);
554  stepper->initialize();
555  }
556 
557  return stepper;
558 }
559 
560 } // namespace Tempus
561 #endif // Tempus_StepperNewmarkImplicitDForm_impl_hpp
virtual RCP< const VectorSpaceBase< Scalar > > space() const =0
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver) override
Set solver.
void correctVelocity(Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
T & get(const std::string &name, T def_value)
Teuchos::RCP< StepperNewmarkImplicitDForm< Scalar > > createStepperNewmarkImplicitDForm(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >> &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void setStepperName(std::string s)
Set the stepper name.
void correctDisplacement(Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
virtual void initialize()
Initialize after construction and changing input parameters.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
A ModelEvaluator for residual evaluations given a state. This ModelEvaluator takes a state...
Thyra Base interface for time steppers.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
StepperState is a simple class to hold state information about the stepper.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar >> &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
bool isSublist(const std::string &name) const
void predictDisplacement(Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
void predictVelocity(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
void setICConsistencyCheck(bool c)
virtual void setAppAction(Teuchos::RCP< StepperNewmarkImplicitDFormAppAction< Scalar >> appAction)
virtual void setZeroInitialGuess(bool zIG)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
basic_FancyOStream & setOutputToRootOnly(const int rootRank)
Application Action for StepperNewmarkImplicitDForm.
void validSecondOrderODE_DAE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
virtual void setUseFSAL(bool a)
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >> &appModel)
void correctAcceleration(Thyra::VectorBase< Scalar > &a, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d, const Scalar dt) const
void setStepperType(std::string s)
Set the stepper type.
void setICConsistency(std::string s)