Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Tempus_StepperHHTAlpha_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_StepperHHTAlpha_impl_hpp
10 #define Tempus_StepperHHTAlpha_impl_hpp
11 
12 #include "Tempus_config.hpp"
14 #include "Teuchos_VerboseObjectParameterListHelpers.hpp"
15 #include "NOX_Thyra.H"
16 
17 //#define VERBOSE_DEBUG_OUTPUT
18 //#define DEBUG_OUTPUT
19 
20 namespace Tempus {
21 
22 // Forward Declaration for recursive includes (this Stepper <--> StepperFactory)
23 template<class Scalar> class StepperFactory;
24 
25 
26 template<class Scalar>
28 predictVelocity(Thyra::VectorBase<Scalar>& vPred,
29  const Thyra::VectorBase<Scalar>& v,
30  const Thyra::VectorBase<Scalar>& a,
31  const Scalar dt) const
32 {
33 #ifdef VERBOSE_DEBUG_OUTPUT
34  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
35 #endif
36  //vPred = v + dt*(1.0-gamma_)*a
37  Thyra::V_StVpStV(Teuchos::ptrFromRef(vPred), 1.0, v, dt*(1.0-gamma_), a);
38 }
39 
40 template<class Scalar>
42 predictDisplacement(Thyra::VectorBase<Scalar>& dPred,
43  const Thyra::VectorBase<Scalar>& d,
44  const Thyra::VectorBase<Scalar>& v,
45  const Thyra::VectorBase<Scalar>& a,
46  const Scalar dt) const
47 {
48 #ifdef VERBOSE_DEBUG_OUTPUT
49  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
50 #endif
51  Teuchos::RCP<const Thyra::VectorBase<Scalar> > tmp =
52  Thyra::createMember<Scalar>(dPred.space());
53  //dPred = dt*v + dt*dt/2.0*(1.0-2.0*beta_)*a
54  Scalar aConst = dt*dt/2.0*(1.0-2.0*beta_);
55  Thyra::V_StVpStV(Teuchos::ptrFromRef(dPred), dt, v, aConst, a);
56  //dPred += d;
57  Thyra::Vp_V(Teuchos::ptrFromRef(dPred), d, 1.0);
58 }
59 
60 
61 template<class Scalar>
63 predictVelocity_alpha_f(Thyra::VectorBase<Scalar>& vPred,
64  const Thyra::VectorBase<Scalar>& v) const
65 {
66 #ifdef VERBOSE_DEBUG_OUTPUT
67  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
68 #endif
69  //vPred = (1-alpha_f)*vPred + alpha_f*v
70  Thyra::V_StVpStV(Teuchos::ptrFromRef(vPred), 1.0-alpha_f_, vPred, alpha_f_, v);
71 }
72 
73 
74 template<class Scalar>
76 predictDisplacement_alpha_f(Thyra::VectorBase<Scalar>& dPred,
77  const Thyra::VectorBase<Scalar>& d) const
78 {
79 #ifdef VERBOSE_DEBUG_OUTPUT
80  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
81 #endif
82  //dPred = (1-alpha_f)*dPred + alpha_f*d
83  Thyra::V_StVpStV(Teuchos::ptrFromRef(dPred), 1.0-alpha_f_, dPred, alpha_f_, d);
84 }
85 
86 template<class Scalar>
88 correctAcceleration(Thyra::VectorBase<Scalar>& a_n_plus1,
89  const Thyra::VectorBase<Scalar>& a_n) const
90 {
91 #ifdef VERBOSE_DEBUG_OUTPUT
92  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
93 #endif
94  Scalar c = 1.0/(1.0-alpha_m_);
95  //a_n_plus1 = 1.0/(1.0-alpha_m_)*a_n_plus1 - alpha_m/(1.0-alpha_m)*a_n = (1-alpha_f)*vPred + alpha_f*v
96  Thyra::V_StVpStV(Teuchos::ptrFromRef(a_n_plus1), c, a_n_plus1, -c*alpha_m_, a_n);
97 }
98 
99 
100 
101 template<class Scalar>
103 correctVelocity(Thyra::VectorBase<Scalar>& v,
104  const Thyra::VectorBase<Scalar>& vPred,
105  const Thyra::VectorBase<Scalar>& a,
106  const Scalar dt) const
107 {
108 #ifdef VERBOSE_DEBUG_OUTPUT
109  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
110 #endif
111  //v = vPred + dt*gamma_*a
112  Thyra::V_StVpStV(Teuchos::ptrFromRef(v), 1.0, vPred, dt*gamma_, a);
113 }
114 
115 template<class Scalar>
117 correctDisplacement(Thyra::VectorBase<Scalar>& d,
118  const Thyra::VectorBase<Scalar>& dPred,
119  const Thyra::VectorBase<Scalar>& a,
120  const Scalar dt) const
121 {
122 #ifdef VERBOSE_DEBUG_OUTPUT
123  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
124 #endif
125  //d = dPred + beta_*dt*dt*a
126  Thyra::V_StVpStV(Teuchos::ptrFromRef(d), 1.0, dPred, beta_*dt*dt, a);
127 }
128 
129 
130 
131 template<class Scalar>
133 {
134  if (schemeName_ != "Newmark Beta User Defined") {
135  *out_ << "\nWARNING: schemeName != 'Newmark Beta User Defined' (=" <<schemeName_<< ").\n"
136  << " Not setting beta, and leaving as beta = " << beta_ << "!\n";
137  return;
138  }
139 
140  beta_ = beta;
141 
142  if (beta_ == 0.0) {
143  *out_ << "\nWARNING: Running (implicit implementation of) Newmark "
144  << "Implicit a-Form Stepper with Beta = 0.0, which \n"
145  << "specifies an explicit scheme. Mass lumping is not possible, "
146  << "so this will be slow! To run explicit \n"
147  << "implementation of Newmark Implicit a-Form Stepper, please "
148  << "re-run with 'Stepper Type' = 'Newmark Explicit a-Form'.\n"
149  << "This stepper allows for mass lumping when called through "
150  << "Piro::TempusSolver.\n";
151  }
152 
153  TEUCHOS_TEST_FOR_EXCEPTION( (beta_ > 1.0) || (beta_ < 0.0),
154  std::logic_error,
155  "\nError in 'Newmark Implicit a-Form' stepper: invalid value of Beta = "
156  << beta_ << ". Please select Beta >= 0 and <= 1. \n");
157 }
158 
159 
160 template<class Scalar>
162 {
163  if (schemeName_ != "Newmark Beta User Defined") {
164  *out_ << "\nWARNING: schemeName != 'Newmark Beta User Defined' (=" <<schemeName_<< ").\n"
165  << " Not setting gamma, and leaving as gamma = " << gamma_ << "!\n";
166  return;
167  }
168 
169  gamma_ = gamma;
170 
171  TEUCHOS_TEST_FOR_EXCEPTION( (gamma_ > 1.0) || (gamma_ < 0.0),
172  std::logic_error,
173  "\nError in 'Newmark Implicit a-Form' stepper: invalid value of Gamma ="
174  <<gamma_ << ". Please select Gamma >= 0 and <= 1. \n");
175 }
176 
177 
178 template<class Scalar>
180 {
181  alpha_f_ = alpha_f;
182 
183  TEUCHOS_TEST_FOR_EXCEPTION( (alpha_f_ > 1.0) || (alpha_f_ < 0.0),
184  std::logic_error,
185  "\nError in 'HHT-Alpha' stepper: invalid value of Alpha_f = "
186  << alpha_f_ << ". Please select Alpha_f >= 0 and <= 1. \n");
187 }
188 
189 
190 template<class Scalar>
192 {
193  alpha_m_ = alpha_m;
194 
195  TEUCHOS_TEST_FOR_EXCEPTION( (alpha_m_ >= 1.0) || (alpha_m_ < 0.0),
196  std::logic_error,
197  "\nError in 'HHT-Alpha' stepper: invalid value of Alpha_m = "
198  << alpha_m_ << ". Please select Alpha_m >= 0 and < 1. \n");
199 }
200 
201 
202 template<class Scalar>
204  std::string schemeName)
205 {
206  schemeName_ = schemeName;
207 
208  if (schemeName_ == "Newmark Beta Average Acceleration") {
209  beta_= 0.25; gamma_ = 0.5;
210  }
211  else if (schemeName_ == "Newmark Beta Linear Acceleration") {
212  beta_= 0.25; gamma_ = 1.0/6.0;
213  }
214  else if (schemeName_ == "Newmark Beta Central Difference") {
215  beta_= 0.0; gamma_ = 0.5;
216  }
217  else if (schemeName_ == "Newmark Beta User Defined") {
218  beta_= 0.25; gamma_ = 0.5; // Use defaults until setBeta and setGamma calls.
219  }
220  else {
221  TEUCHOS_TEST_FOR_EXCEPTION(true,
222  std::logic_error,
223  "\nError in Tempus::StepperHHTAlpha! "
224  <<"Invalid Scheme Name = " << schemeName_ <<". \n"
225  <<"Valid Scheme Names are: 'Newmark Beta Average Acceleration', "
226  <<"'Newmark Beta Linear Acceleration', \n"
227  <<"'Newmark Beta Central Difference' and 'Newmark Beta User Defined'.\n");
228  }
229 }
230 
231 
232 template<class Scalar>
234  out_(Teuchos::VerboseObjectBase::getDefaultOStream())
235 {
236 #ifdef VERBOSE_DEBUG_OUTPUT
237  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
238 #endif
239 
240  this->setStepperType( "HHT-Alpha");
241  this->setUseFSAL( this->getUseFSALDefault());
244  this->setZeroInitialGuess( false);
245  this->setSchemeName( "Newmark Beta Average Acceleration");
246  this->setAlphaF( 0.0);
247  this->setAlphaM( 0.0);
248 
249  this->setObserver();
250 }
251 
252 
253 template<class Scalar>
255  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
256  const Teuchos::RCP<StepperObserver<Scalar> >& obs,
257  const Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> >& solver,
258  bool useFSAL,
259  std::string ICConsistency,
260  bool ICConsistencyCheck,
261  bool zeroInitialGuess,
262  std::string schemeName,
263  Scalar beta,
264  Scalar gamma,
265  Scalar alpha_f,
266  Scalar alpha_m)
267  : out_(Teuchos::VerboseObjectBase::getDefaultOStream())
268 {
269  this->setStepperType( "HHT-Alpha");
270  this->setUseFSAL( useFSAL);
271  this->setICConsistency( ICConsistency);
272  this->setICConsistencyCheck( ICConsistencyCheck);
273  this->setZeroInitialGuess( zeroInitialGuess);
274  this->setSchemeName( schemeName);
275  this->setBeta( beta);
276  this->setGamma( gamma);
277  this->setAlphaF( alpha_f);
278  this->setAlphaM( alpha_m);
279 
280  this->setObserver(obs);
281 
282  if (appModel != Teuchos::null) {
283 
284  this->setModel(appModel);
285  this->setSolver(solver);
286  this->initialize();
287  }
288 }
289 
290 
291 template<class Scalar>
293  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel)
294 {
295 #ifdef VERBOSE_DEBUG_OUTPUT
296  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
297 #endif
298  validSecondOrderODE_DAE(appModel);
299  Teuchos::RCP<WrapperModelEvaluatorSecondOrder<Scalar> > wrapperModel =
300  Teuchos::rcp(new WrapperModelEvaluatorSecondOrder<Scalar>(appModel,
301  "HHT-Alpha"));
302  this->wrapperModel_ = wrapperModel;
303 }
304 
305 
306 template<class Scalar>
308 {
309  TEUCHOS_TEST_FOR_EXCEPTION( this->wrapperModel_ == Teuchos::null,
310  std::logic_error,
311  "Error - Need to set the model, setModel(), before calling "
312  "StepperHHTAlpha::initialize()\n");
313 
314 #ifdef VERBOSE_DEBUG_OUTPUT
315  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
316 #endif
317 }
318 
319 
320 template<class Scalar>
322  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory)
323 {
324 #ifdef VERBOSE_DEBUG_OUTPUT
325  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
326 #endif
327  using Teuchos::RCP;
328 
329  TEMPUS_FUNC_TIME_MONITOR("Tempus::StepperHHTAlpha::takeStep()");
330  {
331  TEUCHOS_TEST_FOR_EXCEPTION(solutionHistory->getNumStates() < 2,
332  std::logic_error,
333  "Error - StepperHHTAlpha<Scalar>::takeStep(...)\n"
334  "Need at least two SolutionStates for HHTAlpha.\n"
335  " Number of States = " << solutionHistory->getNumStates() << "\n"
336  "Try setting in \"Solution History\" \"Storage Type\" = \"Undo\"\n"
337  " or \"Storage Type\" = \"Static\" and \"Storage Limit\" = \"2\"\n");
338 
339  RCP<SolutionState<Scalar> > workingState=solutionHistory->getWorkingState();
340  RCP<SolutionState<Scalar> > currentState=solutionHistory->getCurrentState();
341 
342  Teuchos::RCP<WrapperModelEvaluatorSecondOrder<Scalar> > wrapperModel =
343  Teuchos::rcp_dynamic_cast<WrapperModelEvaluatorSecondOrder<Scalar> >(
344  this->wrapperModel_);
345 
346  //Get values of d, v and a from previous step
347  RCP<const Thyra::VectorBase<Scalar> > d_old = currentState->getX();
348  RCP<const Thyra::VectorBase<Scalar> > v_old = currentState->getXDot();
349  RCP<Thyra::VectorBase<Scalar> > a_old = currentState->getXDotDot();
350 
351 #ifdef DEBUG_OUTPUT
352  //IKT, 3/21/17, debug output: pring d_old, v_old, a_old to check for
353  // correctness.
354  *out_ << "IKT d_old = " << Thyra::max(*d_old) << "\n";
355  *out_ << "IKT v_old = " << Thyra::max(*v_old) << "\n";
356 #endif
357 
358  //Get new values of d, v and a from current workingState
359  //(to be updated here)
360  RCP<Thyra::VectorBase<Scalar> > d_new = workingState->getX();
361  RCP<Thyra::VectorBase<Scalar> > v_new = workingState->getXDot();
362  RCP<Thyra::VectorBase<Scalar> > a_new = workingState->getXDotDot();
363 
364  //Get time and dt
365  const Scalar time = currentState->getTime();
366  const Scalar dt = workingState->getTimeStep();
367  //Update time
368  Scalar t = time+dt;
369 
370  //Compute initial acceleration, a_old, using initial displacement (d_old) and initial
371  //velocity (v_old) if in 1st time step
372  if (time == solutionHistory->minTime()) {
373  RCP<Thyra::VectorBase<Scalar> > d_init = Thyra::createMember(d_old->space());
374  RCP<Thyra::VectorBase<Scalar> > v_init = Thyra::createMember(v_old->space());
375  RCP<Thyra::VectorBase<Scalar> > a_init = Thyra::createMember(a_old->space());
376  Thyra::copy(*d_old, d_init.ptr());
377  Thyra::copy(*v_old, v_init.ptr());
378  if (this->initial_guess_ != Teuchos::null) { //set initial guess for Newton, if provided
379  //Throw an exception if initial_guess is not compatible with solution
380  bool is_compatible = (a_init->space())->isCompatible(*this->initial_guess_->space());
381  TEUCHOS_TEST_FOR_EXCEPTION(
382  is_compatible != true, std::logic_error,
383  "Error in Tempus::NemwarkImplicitAForm takeStep(): user-provided initial guess'!\n"
384  << "for Newton is not compatible with solution vector!\n");
385  Thyra::copy(*this->initial_guess_, a_init.ptr());
386  }
387  else { //if no initial_guess_ provide, set 0 initial guess
388  Thyra::put_scalar(0.0, a_init.ptr());
389  }
390  wrapperModel->initializeNewmark(v_init,d_init,0.0,time,beta_,gamma_);
391  const Thyra::SolveStatus<Scalar> sStatus=this->solveImplicitODE(a_init);
392 
393  workingState->setSolutionStatus(sStatus); // Converged --> pass.
394  Thyra::copy(*a_init, a_old.ptr());
395  }
396 #ifdef DEBUG_OUTPUT
397  //IKT, 3/30/17, debug output: pring a_old to check for correctness.
398  *out_ << "IKT a_old = " << Thyra::max(*a_old) << "\n";
399 #endif
400 
401 
402  //allocate d and v predictors
403  RCP<Thyra::VectorBase<Scalar> > d_pred =Thyra::createMember(d_old->space());
404  RCP<Thyra::VectorBase<Scalar> > v_pred =Thyra::createMember(v_old->space());
405 
406  //compute displacement and velocity predictors
407  predictDisplacement(*d_pred, *d_old, *v_old, *a_old, dt);
408  predictVelocity(*v_pred, *v_old, *a_old, dt);
409 
410  //compute second displacement and velocity predictors (those that are functions of alpha_f)
411  predictDisplacement_alpha_f(*d_pred, *d_old);
412  predictVelocity_alpha_f(*v_pred, *v_old);
413 
414  //inject d_pred, v_pred, a and other relevant data into wrapperModel
415  wrapperModel->initializeNewmark(v_pred,d_pred,dt,t,beta_,gamma_);
416 
417  //Solve for new acceleration
418  const Thyra::SolveStatus<Scalar> sStatus = this->solveImplicitODE(a_new);
419 
420  //correct acceleration (function of alpha_m)
421  correctAcceleration(*a_new, *a_old);
422 
423  //correct velocity and displacement
424  correctVelocity(*v_new, *v_pred, *a_new, dt);
425  correctDisplacement(*d_new, *d_pred, *a_new, dt);
426 
427  workingState->setSolutionStatus(sStatus); // Converged --> pass.
428  workingState->setOrder(this->getOrder());
429  }
430  return;
431 }
432 
433 
434 
435 /** \brief Provide a StepperState to the SolutionState.
436  * This Stepper does not have any special state data,
437  * so just provide the base class StepperState with the
438  * Stepper description. This can be checked to ensure
439  * that the input StepperState can be used by this Stepper.
440  */
441 template<class Scalar>
442 Teuchos::RCP<Tempus::StepperState<Scalar> >
445 {
446 #ifdef VERBOSE_DEBUG_OUTPUT
447  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
448 #endif
449  Teuchos::RCP<Tempus::StepperState<Scalar> > stepperState =
450  rcp(new StepperState<Scalar>(this->getStepperType()));
451  return stepperState;
452 }
453 
454 
455 template<class Scalar>
457  Teuchos::FancyOStream &out,
458  const Teuchos::EVerbosityLevel /* verbLevel */) const
459 {
460 #ifdef VERBOSE_DEBUG_OUTPUT
461  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
462 #endif
463  out << this->getStepperType() << "::describe:" << std::endl
464  << "wrapperModel_ = " << this->wrapperModel_->description() << std::endl;
465 }
466 
467 
468 template<class Scalar>
469 Teuchos::RCP<const Teuchos::ParameterList>
471 {
472 #ifdef VERBOSE_DEBUG_OUTPUT
473  *out_ << "DEBUG: " << __PRETTY_FUNCTION__ << "\n";
474 #endif
475  Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
476  getValidParametersBasic(pl, this->getStepperType());
477  pl->set<std::string>("Scheme Name", "Newmark Beta Average Acceleration");
478  pl->set<double> ("Beta", 0.25);
479  pl->set<double> ("Gamma", 0.5 );
480  pl->set<double> ("Alpha_f", 0.0 );
481  pl->set<double> ("Alpha_m", 0.0 );
482  pl->set<std::string>("Solver Name", "Default Solver");
483  pl->set<bool> ("Zero Initial Guess", false);
484  Teuchos::RCP<Teuchos::ParameterList> solverPL = defaultSolverParameters();
485  pl->set("Default Solver", *solverPL);
486 
487  return pl;
488 }
489 
490 
491 } // namespace Tempus
492 #endif // Tempus_StepperHHTAlpha_impl_hpp
void correctDisplacement(Thyra::VectorBase< Scalar > &d, const Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
void correctVelocity(Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
void correctAcceleration(Thyra::VectorBase< Scalar > &a_n_plus1, const Thyra::VectorBase< Scalar > &a_n) const
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver=Teuchos::null)
Set solver.
virtual bool getICConsistencyCheckDefault() const
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.
virtual std::string getICConsistencyDefault() const
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
StepperHHTAlpha()
Default constructor.
A ModelEvaluator for residual evaluations given a state. This ModelEvaluator takes a state...
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > >=Teuchos::null)
Set Observer.
StepperState is a simple class to hold state information about the stepper.
void predictVelocity_alpha_f(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v) const
void setICConsistencyCheck(bool c)
void setSchemeName(std::string schemeName)
StepperObserver class for Stepper class.
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
virtual void setZeroInitialGuess(bool zIG)
Set parameter so that the initial guess is set to zero (=True) or use last timestep (=False)...
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
void predictDisplacement_alpha_f(Thyra::VectorBase< Scalar > &dPred, const Thyra::VectorBase< Scalar > &d) 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 validSecondOrderODE_DAE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Validate ME supports 2nd order implicit ODE/DAE evaluation, f(xdotdot,xdot,x,t) [= 0]...
Teuchos::RCP< Teuchos::FancyOStream > out_
void predictVelocity(Thyra::VectorBase< Scalar > &vPred, const Thyra::VectorBase< Scalar > &v, const Thyra::VectorBase< Scalar > &a, const Scalar dt) const
virtual bool getUseFSALDefault() const
virtual void initialize()
Initialize during construction and after changing input parameters.
void getValidParametersBasic(Teuchos::RCP< Teuchos::ParameterList > pl, std::string stepperType)
Provide basic parameters to Steppers.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
void setStepperType(std::string s)
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
void setICConsistency(std::string s)