Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Tempus_StepperSubcycling_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_StepperSubcycling_impl_hpp
10 #define Tempus_StepperSubcycling_impl_hpp
11 
16 #include "Tempus_IntegratorObserverSubcycling.hpp"
17 #include "Tempus_IntegratorObserverNoOp.hpp"
18 
19 #include "Teuchos_VerboseObjectParameterListHelpers.hpp"
20 #include "Thyra_VectorStdOps.hpp"
21 
22 
23 namespace Tempus {
24 
25 
26 template<class Scalar>
28 {
29  using Teuchos::RCP;
30  using Teuchos::ParameterList;
31 
32  this->setStepperType( "Subcycling");
33  this->setUseFSAL( this->getUseFSALDefault());
34  this->setICConsistency( this->getICConsistencyDefault());
35  this->setICConsistencyCheck( this->getICConsistencyCheckDefault());
36 
37 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
38  this->setObserver(Teuchos::rcp(new StepperSubcyclingObserver<Scalar>()));
39 #endif
40  this->setAppAction(Teuchos::null);
41  scIntegrator_ = Teuchos::rcp(new IntegratorBasic<Scalar>());
42  scIntegrator_->setTimeStepControl();
43 
44  scIntegrator_->setObserver(
45  Teuchos::rcp(new IntegratorObserverNoOp<Scalar>()));
46 
47  this->setSubcyclingPrintDtChanges(false);
48 
49  RCP<ParameterList> tempusPL = scIntegrator_->getTempusParameterList();
50 
51  { // Set default subcycling Stepper to Forward Euler.
52  tempusPL->sublist("Default Integrator")
53  .set("Stepper Name", "Default Subcycling Stepper");
54  RCP<ParameterList> stepperPL = Teuchos::parameterList();
55  stepperPL->set("Stepper Type", "Forward Euler");
56  tempusPL->set("Default Subcycling Stepper", *stepperPL);
57 
58  auto sf = Teuchos::rcp(new Tempus::StepperFactory<Scalar>());
59  auto stepperFE = sf->createStepperForwardEuler(Teuchos::null,Teuchos::null);
60  setSubcyclingStepper(stepperFE);
61  }
62 
63  // Keep the default SolutionHistory settings:
64  // * 'Storage Type' = "Undo"
65  // * 'Storage Limit' = 2
66  // Also
67  // * No checkpointing within the subcycling, but can restart from
68  // failed subcycle step.
69 
70  // Keep the default TimeStepControl settings for subcycling:
71  // * Finish exactly on the full timestep.
72  // * No solution output during the subcycling.
73  // * Variable time step size.
74  // Set the default initial time step size.
75  {
76  tempusPL->sublist("Default Integrator")
77  .sublist("Time Step Control")
78  .set("Initial Time Step", std::numeric_limits<Scalar>::max());
79  }
80 }
81 
82 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
83 template<class Scalar>
85  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
86  const Teuchos::RCP<StepperSubcyclingObserver<Scalar> >& obs,
87  const Teuchos::RCP<IntegratorBasic<Scalar> >& scIntegrator,
88  bool useFSAL,
89  std::string ICConsistency,
90  bool ICConsistencyCheck)
91 {
92  this->setStepperType( "Subcycling");
93  this->setUseFSAL( useFSAL);
94  this->setICConsistency( ICConsistency);
95  this->setICConsistencyCheck( ICConsistencyCheck);
96 
97  this->setObserver(obs);
98  this->setAppAction(Teuchos::null);
99  scIntegrator_ = scIntegrator;
100  this->setSubcyclingPrintDtChanges(false);
101 
102  if (appModel != Teuchos::null) {
103  this->setModel(appModel);
104  this->initialize();
105  }
106 }
107 #endif
108 
109 template<class Scalar>
111  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
112  const Teuchos::RCP<IntegratorBasic<Scalar> >& scIntegrator,
113  bool useFSAL,
114  std::string ICConsistency,
115  bool ICConsistencyCheck,
116  const Teuchos::RCP<StepperSubcyclingAppAction<Scalar> >& stepperSCAppAction)
117 {
118  this->setStepperType( "Subcycling");
119  this->setUseFSAL( useFSAL);
120  this->setICConsistency( ICConsistency);
121  this->setICConsistencyCheck( ICConsistencyCheck);
122 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
123  this->setObserver();
124 #endif
125  this->setAppAction(stepperSCAppAction);
126  scIntegrator_ = scIntegrator;
127  this->setSubcyclingPrintDtChanges(false);
128 
129  if (appModel != Teuchos::null) {
130  this->setModel(appModel);
131  this->initialize();
132  }
133 }
134 
135 template<class Scalar>
137  Teuchos::RCP<Stepper<Scalar> > stepper)
138 {
139  scIntegrator_->setStepperWStepper(stepper);
140  this->isInitialized_ = false;
141 }
142 
143 
144 template<class Scalar>
146 {
147  scIntegrator_->getNonConstTimeStepControl()->setMinTimeStep(MinTimeStep);
148  this->isInitialized_ = false;
149 }
150 
151 
152 template<class Scalar>
154 {
155  scIntegrator_->getNonConstTimeStepControl()->setInitTimeStep(InitTimeStep);
156  this->isInitialized_ = false;
157 }
158 
159 
160 template<class Scalar>
162 {
163  scIntegrator_->getNonConstTimeStepControl()->setMaxTimeStep(MaxTimeStep);
164  this->isInitialized_ = false;
165 }
166 
167 
168 template<class Scalar>
170 {
171  scIntegrator_->getNonConstTimeStepControl()->setStepType(stepType);
172 
173  auto tsc = scIntegrator_->getNonConstTimeStepControl();
174  auto tscStrategy = tsc->getTimeStepControlStrategy();
175  tscStrategy->clearObservers();
176 
177  Teuchos::RCP<TimeStepControlStrategy<Scalar> > strategy =
178  Teuchos::rcp(new TimeStepControlStrategyConstant<Scalar>());
179  if (stepType == "Variable")
180  strategy = Teuchos::rcp(new TimeStepControlStrategyBasicVS<Scalar>());
181 
182  tscStrategy->addStrategy(strategy);
183 
184  this->isInitialized_ = false;
185 }
186 
187 
188 template<class Scalar>
190 {
191  scIntegrator_->getNonConstTimeStepControl()->setMaxFailures(MaxFailures);
192  this->isInitialized_ = false;
193 }
194 
195 
196 template<class Scalar>
198 setSubcyclingMaxConsecFailures(int MaxConsecFailures)
199 {
200  scIntegrator_->getNonConstTimeStepControl()->setMaxConsecFailures(MaxConsecFailures);
201  this->isInitialized_ = false;
202 }
203 
204 
205 template<class Scalar>
208 {
209  scIntegrator_->setScreenOutputIndexInterval(i);
210  this->isInitialized_ = false;
211 }
212 
213 
214 template<class Scalar>
217 {
218  scIntegrator_->setScreenOutputIndexList(s);
219  this->isInitialized_ = false;
220 }
221 
222 
223 template<class Scalar>
226  Teuchos::RCP<TimeStepControlStrategy<Scalar> > tscs)
227 {
228  scIntegrator_->getNonConstTimeStepControl()->getTimeStepControlStrategy()->clearObservers();
229  scIntegrator_->getNonConstTimeStepControl()->setTimeStepControlStrategy(tscs);
230  this->isInitialized_ = false;
231 }
232 
233 
234 template<class Scalar>
236  Teuchos::RCP<IntegratorObserver<Scalar> > obs)
237 {
238  scIntegrator_->setObserver(obs);
239  this->isInitialized_ = false;
240 }
241 
242 
243 template<class Scalar>
245  bool printDtChanges)
246 {
247  scIntegrator_->getNonConstTimeStepControl()->setPrintDtChanges(printDtChanges);
248  this->isInitialized_ = false;
249 }
250 
251 
252 template<class Scalar>
253 Teuchos::RCP<const Stepper<Scalar> >
255 { return scIntegrator_->getStepper(); }
256 
257 
258 template<class Scalar>
260 { return scIntegrator_->getTimeStepControl()->getMinTimeStep(); }
261 
262 
263 template<class Scalar>
265 { return scIntegrator_->getTimeStepControl()->getInitTimeStep(); }
266 
267 
268 template<class Scalar>
270 { return scIntegrator_->getTimeStepControl()->getMaxTimeStep(); }
271 
272 
273 template<class Scalar>
275 { return scIntegrator_->getTimeStepControl()->getStepType(); }
276 
277 
278 template<class Scalar>
280 { return scIntegrator_->getTimeStepControl()->getMaxFailures(); }
281 
282 
283 template<class Scalar>
285 { return scIntegrator_->getTimeStepControl()->getMaxConsecFailures(); }
286 
287 
288 template<class Scalar>
290 { return scIntegrator_->getScreenOutputIndexInterval(); }
291 
292 
293 template<class Scalar>
295 { return scIntegrator_->getScreenOutputIndexList(); }
296 
297 
298 template<class Scalar>
299 Teuchos::RCP<TimeStepControlStrategy<Scalar> >
301 { return scIntegrator_->getTimeStepControl()->getTimeStepControlStrategy(); }
302 
303 template<class Scalar>
304 Teuchos::RCP<IntegratorObserver<Scalar> >
306 { return scIntegrator_->getObserver(); }
307 
308 template<class Scalar>
310 { return scIntegrator_->getTimeStepControl()->getPrintDtChanges(); }
311 
312 
313 template<class Scalar>
315  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel)
316 {
317  scIntegrator_->setStepper(appModel);
318  this->isInitialized_ = false;
319 }
320 
321 
322 template<class Scalar>
324  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel)
325 {
326  setModel(appModel);
327  this->isInitialized_ = false;
328 }
329 
330 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
331 template<class Scalar>
333  Teuchos::RCP<StepperObserver<Scalar> > obs)
334 {
335  if (obs != Teuchos::null) stepperSCObserver_ =
336  Teuchos::rcp_dynamic_cast<StepperSubcyclingObserver<Scalar> > (obs, true);
337 
338  if (stepperSCObserver_ == Teuchos::null)
339  stepperSCObserver_ = Teuchos::rcp(new StepperSubcyclingObserver<Scalar>());
340 
341  this->isInitialized_ = false;
342 }
343 
344 template<class Scalar>
345 Teuchos::RCP<StepperObserver<Scalar> >
347 { return stepperSCObserver_; }
348 #endif
349 
350 template<class Scalar>
352  Teuchos::RCP<StepperSubcyclingAppAction<Scalar> > appAction)
353  {
354  if (appAction == Teuchos::null) {
355  // Create default appAction
356  stepperSCAppAction_ =
357  Teuchos::rcp(new StepperSubcyclingModifierDefault<Scalar>());
358  } else {
359  stepperSCAppAction_ = appAction;
360  }
361  this->isInitialized_ = false;
362 }
363 
364 template<class Scalar>
366 {
367  Teuchos::RCP<Teuchos::FancyOStream> out = this->getOStream();
368  bool isValidSetup = true;
369 
370  if ( !(this->getICConsistency() == "None" ||
371  this->getICConsistency() == "Zero" ||
372  this->getICConsistency() == "App" ||
373  this->getICConsistency() == "Consistent") ) {
374  isValidSetup = false;
375  *out << "The IC consistency does not have a valid value!\n"
376  << "('None', 'Zero', 'App' or 'Consistent')\n"
377  << " ICConsistency = " << this->getICConsistency() << "\n";
378  }
379  scIntegrator_->initialize();
380 
381 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
382  if (stepperSCObserver_ == Teuchos::null) {
383  isValidSetup = false;
384  *out << "The Subcycling observer is not set!\n";
385  }
386 #endif
387  if (stepperSCAppAction_ == Teuchos::null) {
388  isValidSetup = false;
389  *out << "The Subcycling AppAction is not set!\n";
390  }
391 
392  if (isValidSetup)
393  this->isInitialized_ = true; // Only place it is set to true.
394  else
395  this->describe(*out, Teuchos::VERB_MEDIUM);
396 }
397 
398 
399 template<class Scalar>
401 { return scIntegrator_->getStepper()->isExplicit(); }
402 
403 
404 template<class Scalar>
406 { return scIntegrator_->getStepper()->isImplicit(); }
407 
408 
409 template<class Scalar>
411 { return scIntegrator_->getStepper()->isExplicitImplicit(); }
412 
413 
414 template<class Scalar>
416 { return scIntegrator_->getStepper()->isOneStepMethod(); }
417 
418 
419 template<class Scalar>
421 { return scIntegrator_->getStepper()->isMultiStepMethod(); }
422 
423 
424 template<class Scalar>
426 { return scIntegrator_->getStepper()->getOrder(); }
427 
428 
429 template<class Scalar>
431 { return scIntegrator_->getStepper()->getOrderMin(); }
432 
433 
434 template<class Scalar>
436 { return scIntegrator_->getStepper()->getOrderMax(); }
437 
438 
439 template<class Scalar>
441 { return scIntegrator_->getStepper()->getOrderODE(); }
442 
443 
444 template<class Scalar>
446  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const
447 { return scIntegrator_->getStepper()->getInitTimeStep(solutionHistory); }
448 
449 
450 template<class Scalar>
452  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initialGuess)
453 {
454  scIntegrator_->getStepper()->setInitialGuess(initialGuess);
455  this->isInitialized_ = false;
456 }
457 
458 
459 template<class Scalar>
461  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory)
462 { scIntegrator_->getStepper()->setInitialConditions(solutionHistory); }
463 
464 
465 template<class Scalar>
467  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver)
468 {
469  scIntegrator_->getStepper()->setSolver(solver);
470  this->isInitialized_ = false;
471 }
472 
473 
474 template<class Scalar>
475 Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> >
477 { return scIntegrator_->getStepper()->getSolver(); }
478 
479 
480 template<class Scalar>
482  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory)
483 {
484  using Teuchos::RCP;
485 
486  TEMPUS_FUNC_TIME_MONITOR("Tempus::StepperSubcycling::takeStep()");
487  {
488  TEUCHOS_TEST_FOR_EXCEPTION(solutionHistory->getNumStates() < 2,
489  std::logic_error,
490  "Error - StepperSubcycling<Scalar>::takeStep(...)\n"
491  "Need at least two SolutionStates for Subcycling.\n"
492  " Number of States = " << solutionHistory->getNumStates() << "\n"
493  "Try setting in \"Solution History\" \"Storage Type\" = \"Undo\"\n"
494  " or \"Storage Type\" = \"Static\" and \"Storage Limit\" = \"2\"\n");
495 
496 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
497  stepperSCObserver_->observeBeginTakeStep(solutionHistory, *this);
498 #endif
499  RCP<StepperSubcycling<Scalar> > thisStepper = Teuchos::rcpFromRef(*this);
500  stepperSCAppAction_->execute(solutionHistory, thisStepper,
502  RCP<SolutionState<Scalar> > currentState=solutionHistory->getCurrentState();
503  RCP<SolutionState<Scalar> > workingState=solutionHistory->getWorkingState();
504 
505  auto scTSC = scIntegrator_->getNonConstTimeStepControl();
506  scTSC->setInitTime (currentState->getTime());
507  scTSC->setInitIndex (0);
508  scTSC->setFinalTime (workingState->getTime());
509 
510  auto subcyclingState = currentState->clone();
511  subcyclingState->setTimeStep(scTSC->getInitTimeStep());
512  subcyclingState->setOrder(scIntegrator_->getStepper()->getOrder());
513  subcyclingState->setIndex(0);
514  subcyclingState->setNFailures(0);
515  subcyclingState->setNRunningFailures(0);
516  subcyclingState->setNConsecutiveFailures(0);
517  subcyclingState->setOutput(false);
518  subcyclingState->setOutputScreen(false);
519 
520  TEUCHOS_TEST_FOR_EXCEPTION(!subcyclingState->getIsSynced(),std::logic_error,
521  "Error - StepperSubcycling<Scalar>::takeStep(...)\n"
522  " Subcycling requires the the solution is synced!\n"
523  " (i.e., x, xDot, and xDotDot at the same time level.\n");
524 
525  auto scSH = rcp(new Tempus::SolutionHistory<Scalar>());
526  scSH->setName("Subcycling States");
527  scSH->setStorageType(Tempus::STORAGE_TYPE_STATIC);
528  scSH->setStorageLimit(3);
529  scSH->addState(subcyclingState);
530 
531  scIntegrator_->setSolutionHistory(scSH);
532 
533  bool pass = scIntegrator_->advanceTime();
534 
535  RCP<SolutionState<Scalar> > scCS = scSH->getCurrentState();
536 
537  RCP<Thyra::VectorBase<Scalar> > x = workingState->getX();
538  RCP<Thyra::VectorBase<Scalar> > scX = scCS->getX();
539  Thyra::V_V(x.ptr(), *(scX));
540 
541  RCP<Thyra::VectorBase<Scalar> > xDot = workingState->getXDot();
542  if (xDot != Teuchos::null) {
543  RCP<Thyra::VectorBase<Scalar> > scXDot = scCS->getXDot();
544  Thyra::V_V(xDot.ptr(), *(scXDot));
545  }
546 
547  RCP<Thyra::VectorBase<Scalar> > xDotDot = workingState->getXDotDot();
548  if (xDotDot != Teuchos::null) {
549  RCP<Thyra::VectorBase<Scalar> > scXDotDot = scCS->getXDotDot();
550  Thyra::V_V(xDotDot.ptr(), *(scXDotDot));
551  }
552 
553  if (pass == true) workingState->setSolutionStatus(Status::PASSED);
554  else workingState->setSolutionStatus(Status::FAILED);
555  workingState->setOrder(scCS->getOrder());
556  workingState->computeNorms(currentState);
557  scSH->clear();
558 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
559  stepperSCObserver_->observeEndTakeStep(solutionHistory, *this);
560 #endif
561  stepperSCAppAction_->execute(solutionHistory, thisStepper,
563  }
564  return;
565 }
566 
567 
568 /** \brief Provide a StepperState to the SolutionState.
569  * This Stepper does not have any special state data,
570  * so just provide the base class StepperState with the
571  * Stepper description. This can be checked to ensure
572  * that the input StepperState can be used by this Stepper.
573  */
574 template<class Scalar>
575 Teuchos::RCP<Tempus::StepperState<Scalar> > StepperSubcycling<Scalar>::
577 {
578  Teuchos::RCP<Tempus::StepperState<Scalar> > stepperState =
579  rcp(new StepperState<Scalar>(this->getStepperType()));
580  return stepperState;
581 }
582 
583 
584 template<class Scalar>
586  Teuchos::FancyOStream &out,
587  const Teuchos::EVerbosityLevel verbLevel) const
588 {
589  out << std::endl;
590  Stepper<Scalar>::describe(out, verbLevel);
591 
592  out << "--- StepperSubcycling ---\n";
593 #ifndef TEMPUS_HIDE_DEPRECATED_CODE
594  out << " stepperSCObserver = " << stepperSCObserver_ << std::endl;
595 #endif
596  out << " stepperSCAppAction = " << stepperSCAppAction_ << std::endl;
597  out << " scIntegrator = " << scIntegrator_ << std::endl;
598  out << "-------------------------" << std::endl;
599  scIntegrator_->getStepper()->describe(out, verbLevel);
600 }
601 
602 
603 template<class Scalar>
604 Teuchos::RCP<const Teuchos::ParameterList>
606 {
607  TEUCHOS_TEST_FOR_EXCEPTION(true, std::logic_error,
608  "Error - StepperSubcycling<Scalar>::getValidParameters()\n"
609  " is not implemented yet.\n");
610 
611  Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
612  getValidParametersBasic(pl, this->getStepperType());
613  pl->set<bool>("Use FSAL", true);
614  pl->set<std::string>("Initial Condition Consistency", "Consistent");
615  return pl;
616 }
617 
618 
619 } // namespace Tempus
620 #endif // Tempus_StepperSubcycling_impl_hpp
virtual int getSubcyclingMaxConsecFailures() const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual void setSubcyclingStepper(Teuchos::RCP< Stepper< Scalar > > stepper)
virtual void initialize()
Initialize during construction and after changing input parameters.
virtual void setSubcyclingMinTimeStep(Scalar MinTimeStep)
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void setSubcyclingScreenOutputIndexInterval(int i)
virtual void setSubcyclingMaxTimeStep(Scalar MaxTimeStep)
StepControlStrategy class for TimeStepControl.
virtual Scalar getSubcyclingMaxTimeStep() const
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver=Teuchos::null)
Set solver.
virtual void setSubcyclingMaxConsecFailures(int MaxConsecFailures)
virtual void setSubcyclingTimeStepControlStrategy(Teuchos::RCP< TimeStepControlStrategy< Scalar > > tscs)
Application Action for StepperSubcycling.
Thyra Base interface for time steppers.
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getSubcyclingIntegratorObserver() const
virtual int getSubcyclingScreenOutputIndexInterval() const
virtual void setSubcyclingIntegratorObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs)
StepperState is a simple class to hold state information about the stepper.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
IntegratorObserverNoOp class for time integrators. This basic class has simple no-op functions...
IntegratorObserver class for time integrators.
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void setSubcyclingStepType(std::string StepType)
virtual void setSubcyclingScreenOutputIndexList(std::string s)
virtual std::string getSubcyclingStepType() const
StepperObserver class for Stepper class.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
Keep a fix number of states.
StepControlStrategy class for TimeStepControl.
virtual void setSubcyclingInitTimeStep(Scalar InitTimeStep)
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver (only relevant for implicit solvers)
virtual Teuchos::RCP< const Stepper< Scalar > > getSubcyclingStepper() const
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
virtual void setSubcyclingPrintDtChanges(bool printDtChanges)
virtual std::string getSubcyclingScreenOutputIndexList() const
virtual Scalar getSubcyclingMinTimeStep() const
virtual bool getSubcyclingPrintDtChanges() const
StepperSubcyclingObserver class for StepperSubcycling.
StepControlStrategy class for TimeStepControl.
void getValidParametersBasic(Teuchos::RCP< Teuchos::ParameterList > pl, std::string stepperType)
Provide basic parameters to Steppers.
virtual Teuchos::RCP< TimeStepControlStrategy< Scalar > > getSubcyclingTimeStepControlStrategy() const
virtual Scalar getSubcyclingInitTimeStep() const
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Set the initial conditions, make them consistent, and set needed memory.
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
virtual void setAppAction(Teuchos::RCP< StepperSubcyclingAppAction< Scalar > > appAction=Teuchos::null)
virtual Teuchos::RCP< StepperObserver< Scalar > > getObserver() const
Get Observer.
virtual void setSubcyclingMaxFailures(int MaxFailures)