Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
21 namespace Tempus {
22 
23 enum OrderODE {
26 };
27 
56 template<class Scalar>
57 class Stepper
58  : virtual public Teuchos::Describable,
59  virtual public Teuchos::VerboseObject<Stepper<Scalar> >
60 {
61 public:
62 
64 
65  virtual void setModel(
66  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel) {}
67 
69  { return Teuchos::null; }
70 
72  virtual void setSolver(
74 
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 
98  initialGuess = Teuchos::null) = 0;
99 
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 
131 protected:
133  void setStepperType(std::string s) { stepperType_ = s;
134  isInitialized_ = false; }
135 
136 public:
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 
153  isInitialized_ = false; }
155 
156  virtual OrderODE getOrderODE() const = 0;
157 
160 
163 
166 
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 
187 
189 
192 
193 private:
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).
204 
205 protected:
206 
209  { stepperX_ = x; }
210 
213  { stepperXDot_ = xDot; }
214 
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 
257 
258 
259 } // namespace Tempus
260 #endif // Tempus_Stepper_decl_hpp
virtual bool isInitialized()
True if stepper&#39;s member data is initialized.
virtual Scalar getOrderMax() const =0
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)=0
Take the specified timestep, dt, and return true if successful.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
std::string getStepperName() const
Get the stepper name.
virtual OrderODE getOrderODE() 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 ...
bool getUseFSAL() const
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver)
Set solver.
void setStepperName(std::string s)
Set the stepper name.
bool getICConsistencyCheck() const
virtual bool isExplicit() const =0
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.
virtual void setStepperXDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xDot)
Set xDot for Stepper storage.
void validExplicitODE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Validate that the model supports explicit ODE evaluation, f(x,t) [=xdot].
virtual void initialize()
Initialize after construction and changing input parameters.
bool isInitialized_
True if stepper&#39;s member data is initialized.
Teuchos::RCP< Teuchos::ParameterList > getValidParametersBasic() const
Add basic parameters to Steppers ParameterList.
virtual bool isOneStepMethod() const =0
std::string stepperName_
Name used for output and ParameterLists.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
virtual Scalar getOrderMin() const =0
std::string getICConsistency() const
virtual bool isMultiStepMethod() const =0
void setUseFSALFalseOnly(bool a)
Stepper integrates second-order ODEs.
virtual void checkInitialized()
Check initialization, and error out on failure.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Teuchos::RCP< Thyra::VectorBase< Scalar > > stepperXDot_
void setUseFSALTrueOnly(bool a)
bool useFSAL_
Use First-Same-As-Last (FSAL) principle.
virtual void setStepperX(Teuchos::RCP< Thyra::VectorBase< Scalar > > x)
Set x for Stepper storage.
virtual std::string description() const
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const =0
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initialGuess=Teuchos::null)=0
Pass initial guess to Newton solver (for implicit schemes)
void setICConsistencyCheck(bool c)
Teuchos::RCP< Thyra::VectorBase< Scalar > > stepperXDotDot_
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getStepperX()
Get Stepper x.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual void setStepperXDotDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotDot)
Set x for Stepper storage.
void setStepperValues(const Teuchos::RCP< Teuchos::ParameterList > pl)
Set Stepper member data from ParameterList.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()=0
std::string ICConsistency_
Type of consistency to apply to ICs.
Stepper integrates first-order ODEs.
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]...
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)=0
Set initial conditions, make them consistent, and set stepper memory.
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]...
bool ICConsistencyCheck_
Check if the initial condition is consistent.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getStepperXDotDot()
Get Stepper xDotDot.
Teuchos::RCP< Thyra::VectorBase< Scalar > > stepperX_
std::string stepperType_
Name of stepper type.
virtual void setUseFSAL(bool a)
void validImplicitODE_DAE(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Validate ME supports implicit ODE/DAE evaluation, f(xdot,x,t) [= 0].
virtual bool isImplicit() const =0
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
void setStepperType(std::string s)
Set the stepper type.
Solution state for integrators and steppers.
virtual bool isExplicitImplicit() const =0
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getStepperXDot()
Get Stepper xDot.
virtual Scalar getOrder() const =0
void setICConsistency(std::string s)
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const