Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_Stepper_decl.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_Stepper_decl_hpp
10#define Tempus_Stepper_decl_hpp
11
12#include "Teuchos_TimeMonitor.hpp"
13
14#include "Thyra_ModelEvaluator.hpp"
15#include "Thyra_NonlinearSolverBase.hpp"
16
17#include "Tempus_config.hpp"
18#include "Tempus_SolutionHistory.hpp"
19
20
21namespace Tempus {
22
27
56template<class Scalar>
58 : virtual public Teuchos::Describable,
59 virtual public Teuchos::VerboseObject<Stepper<Scalar> >
60{
61public:
62
64
65 virtual void setModel(
66 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel) {}
67
68 virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel() const
69 { return Teuchos::null; }
70
72 virtual void setSolver(
73 Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver) {}
74
76 virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
77 { return Teuchos::null; }
78
80 virtual void initialize();
81
83 virtual bool isInitialized() { return isInitialized_; }
84
86 virtual void checkInitialized();
87
89 virtual void setInitialConditions (
90 const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) = 0;
91
93 virtual void takeStep(
94 const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) = 0;
95
97 virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> >
98 initialGuess = Teuchos::null) = 0;
99
100 virtual Teuchos::RCP<Tempus::StepperState<Scalar> >
102 virtual Scalar getOrder() const = 0;
103 virtual Scalar getOrderMin() const = 0;
104 virtual Scalar getOrderMax() const = 0;
105 virtual Scalar getInitTimeStep(
106 const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const = 0;
107
108 virtual bool isExplicit() const = 0;
109 virtual bool isImplicit() const = 0;
110 virtual bool isExplicitImplicit() const = 0;
111
112 virtual bool isOneStepMethod() const = 0;
113 virtual bool isMultiStepMethod() const = 0;
114
116 void setStepperName(std::string s) { stepperName_ = s;
117 isInitialized_ = false; }
118
129 std::string getStepperName() const { return stepperName_; }
130
131protected:
133 void setStepperType(std::string s) { stepperType_ = s;
134 isInitialized_ = false; }
135
136public:
141 std::string getStepperType() const { return stepperType_; }
142
143 virtual void setUseFSAL(bool a) { setUseFSALFalseOnly(a); }
144 void setUseFSALTrueOnly(bool a);
145 void setUseFSALFalseOnly(bool a);
146 bool getUseFSAL() const { return useFSAL_; }
147
148 void setICConsistency(std::string s) { ICConsistency_ = s;
149 isInitialized_ = false; }
150 std::string getICConsistency() const { return ICConsistency_; }
151
155
156 virtual OrderODE getOrderODE() const = 0;
157
159 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getStepperX();
160
162 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getStepperXDot();
163
165 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getStepperXDotDot();
166
168 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getStepperXDotDot(
169 Teuchos::RCP<SolutionState<Scalar> > state);
171
173
174 virtual std::string description() const { return stepperType_; }
176
178
179 virtual void describe(Teuchos::FancyOStream & out,
180 const Teuchos::EVerbosityLevel verbLevel) const;
182
183 virtual bool isValidSetup(Teuchos::FancyOStream & out) const;
184
186 void setStepperValues(const Teuchos::RCP<Teuchos::ParameterList> pl);
187
188 virtual Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
189
191 Teuchos::RCP<Teuchos::ParameterList> getValidParametersBasic() const;
192
193private:
194
195 std::string stepperName_;
196 std::string stepperType_;
197 std::string ICConsistency_ = std::string("None");
198 bool ICConsistencyCheck_ = false;
199
200 // RCP to SolutionState memory or Stepper temporary memory (if needed).
201 Teuchos::RCP<Thyra::VectorBase<Scalar> > stepperX_;
202 Teuchos::RCP<Thyra::VectorBase<Scalar> > stepperXDot_;
203 Teuchos::RCP<Thyra::VectorBase<Scalar> > stepperXDotDot_;
204
205protected:
206
208 virtual void setStepperX(Teuchos::RCP<Thyra::VectorBase<Scalar> > x)
209 { stepperX_ = x; }
210
212 virtual void setStepperXDot(Teuchos::RCP<Thyra::VectorBase<Scalar> > xDot)
213 { stepperXDot_ = xDot; }
214
216 virtual void setStepperXDotDot(Teuchos::RCP<Thyra::VectorBase<Scalar> > xDotDot)
217 { stepperXDotDot_ = xDotDot; }
218
219 bool useFSAL_ = false;
220 bool isInitialized_ = false;
221};
222
223
225
226
231 template<class Scalar>
232 void validExplicitODE(
233 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
234
236
240 template<class Scalar>
242 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
243
245 template<class Scalar>
247 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
248
250 template<class Scalar>
252 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
253
255 Teuchos::RCP<Teuchos::ParameterList> defaultSolverParameters();
257
258
259} // namespace Tempus
260#endif // Tempus_Stepper_decl_hpp
Thyra Base interface for time steppers.
bool isInitialized_
True if stepper's member data is initialized.
std::string getStepperName() const
Get the stepper name.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()=0
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
void setICConsistencyCheck(bool c)
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getStepperXDotDot()
Get Stepper xDotDot.
bool ICConsistencyCheck_
Check if the initial condition is consistent.
void setUseFSALFalseOnly(bool a)
bool getICConsistencyCheck() const
virtual void setStepperXDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xDot)
Set xDot for Stepper storage.
std::string stepperType_
Name of stepper type.
virtual void setStepperXDotDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotDot)
Set x for Stepper storage.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getStepperXDot()
Get Stepper xDot.
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)=0
Set initial conditions, make them consistent, and set stepper memory.
void setStepperName(std::string s)
Set the stepper name.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver)
Set solver.
bool useFSAL_
Use First-Same-As-Last (FSAL) principle.
virtual std::string description() const
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initialGuess=Teuchos::null)=0
Pass initial guess to Newton solver (for implicit schemes)
virtual Scalar getOrder() const =0
virtual bool isMultiStepMethod() const =0
virtual OrderODE getOrderODE() const =0
virtual void setStepperX(Teuchos::RCP< Thyra::VectorBase< Scalar > > x)
Set x for Stepper storage.
void setStepperValues(const Teuchos::RCP< Teuchos::ParameterList > pl)
Set Stepper member data from ParameterList.
Teuchos::RCP< Thyra::VectorBase< Scalar > > stepperXDot_
virtual bool isImplicit() const =0
virtual void initialize()
Initialize after construction and changing input parameters.
std::string getICConsistency() const
virtual bool isExplicitImplicit() const =0
std::string getStepperType() const
Get the stepper type. The stepper type is used as an identifier for the stepper, and can only be set ...
virtual bool isExplicit() const =0
Teuchos::RCP< Teuchos::ParameterList > getValidParametersBasic() const
Add basic parameters to Steppers ParameterList.
virtual void setUseFSAL(bool a)
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual void checkInitialized()
Check initialization, and error out on failure.
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getStepperX()
Get Stepper x.
Teuchos::RCP< Thyra::VectorBase< Scalar > > stepperX_
virtual Scalar getOrderMax() const =0
void setUseFSALTrueOnly(bool a)
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const =0
Teuchos::RCP< Thyra::VectorBase< Scalar > > stepperXDotDot_
std::string ICConsistency_
Type of consistency to apply to ICs.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)=0
Take the specified timestep, dt, and return true if successful.
void setStepperType(std::string s)
Set the stepper type.
virtual bool isOneStepMethod() const =0
virtual bool isInitialized()
True if stepper's member data is initialized.
virtual Scalar getOrderMin() const =0
void setICConsistency(std::string s)
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
std::string stepperName_
Name used for output and ParameterLists.
void validSecondOrderExplicitODE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Validate that the model supports explicit second order ODE evaluation, f(x,xdot,t) [=xdotdot].
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].
void validImplicitODE_DAE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Validate ME supports implicit ODE/DAE evaluation, f(xdot,x,t) [= 0].
@ SECOND_ORDER_ODE
Stepper integrates second-order ODEs.
@ FIRST_ORDER_ODE
Stepper integrates first-order ODEs.
void validExplicitODE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Validate that the model supports explicit ODE evaluation, f(x,t) [=xdot].
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.