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 namespace Tempus {
21 
22 enum OrderODE {
25 };
26 
55 template <class Scalar>
56 class Stepper : virtual public Teuchos::Describable,
57  virtual public Teuchos::VerboseObject<Stepper<Scalar> > {
58  public:
60 
61  virtual void setModel(
62  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel)
63  {
64  }
65 
67  {
68  return Teuchos::null;
69  }
70 
72  virtual void setSolver(
74  {
75  }
76 
79  {
80  return Teuchos::null;
81  }
82 
84  virtual void initialize();
85 
87  virtual bool isInitialized() { return isInitialized_; }
88 
90  virtual void checkInitialized();
91 
93  virtual void setInitialConditions(
94  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) = 0;
95 
97  virtual void takeStep(
98  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) = 0;
99 
102  initialGuess = Teuchos::null) = 0;
103 
106  virtual Scalar getOrder() const = 0;
107  virtual Scalar getOrderMin() const = 0;
108  virtual Scalar getOrderMax() const = 0;
109  virtual Scalar getInitTimeStep(
110  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const = 0;
111 
112  virtual bool isExplicit() const = 0;
113  virtual bool isImplicit() const = 0;
114  virtual bool isExplicitImplicit() const = 0;
115 
116  virtual bool isOneStepMethod() const = 0;
117  virtual bool isMultiStepMethod() const = 0;
118 
120  void setStepperName(std::string s)
121  {
122  stepperName_ = s;
123  isInitialized_ = false;
124  }
125 
136  std::string getStepperName() const { return stepperName_; }
137 
138  protected:
140  void setStepperType(std::string s)
141  {
142  stepperType_ = s;
143  isInitialized_ = false;
144  }
145 
146  public:
151  std::string getStepperType() const { return stepperType_; }
152 
153  virtual void setUseFSAL(bool a) { setUseFSALFalseOnly(a); }
154  void setUseFSALTrueOnly(bool a);
155  void setUseFSALFalseOnly(bool a);
156  bool getUseFSAL() const { return useFSAL_; }
157 
158  void setICConsistency(std::string s)
159  {
160  ICConsistency_ = s;
161  isInitialized_ = false;
162  }
163  std::string getICConsistency() const { return ICConsistency_; }
164 
166  {
168  isInitialized_ = false;
169  }
171 
172  virtual OrderODE getOrderODE() const = 0;
173 
176 
179 
182 
187 
189 
190  virtual std::string description() const { return stepperType_; }
192 
194 
195  virtual void describe(Teuchos::FancyOStream& out,
196  const Teuchos::EVerbosityLevel verbLevel) const;
198 
199  virtual bool isValidSetup(Teuchos::FancyOStream& out) const;
200 
203 
205 
208 
209  private:
210  std::string stepperName_;
211  std::string stepperType_;
212  std::string ICConsistency_ =
213  std::string("None");
215  false;
216 
217  // RCP to SolutionState memory or Stepper temporary memory (if needed).
221 
222  protected:
225  {
226  stepperX_ = x;
227  }
228 
231  {
232  stepperXDot_ = xDot;
233  }
234 
236  virtual void setStepperXDotDot(
238  {
239  stepperXDotDot_ = xDotDot;
240  }
241 
242  bool useFSAL_ = false;
244  false;
245 };
246 
248 
249 
254 template <class Scalar>
255 void validExplicitODE(
256  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
257 
260 
264 template <class Scalar>
266  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
267 
269 template <class Scalar>
271  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
272 
275 template <class Scalar>
277  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
278 
282 
283 } // namespace Tempus
284 #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)
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)
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