Tempus  Version of the Day
Time Integration
Tempus_StepperExplicitRK_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_StepperExplicitRK_decl_hpp
10 #define Tempus_StepperExplicitRK_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_Stepper.hpp"
16 
17 
18 namespace Tempus {
19 
20 /** \brief Explicit Runge-Kutta time stepper.
21  *
22  * For the explicit ODE system,
23  * \f[
24  * \dot{x} = \bar{f}(x,t),
25  * \f]
26  * the general explicit Runge-Kutta method for \f$s\f$-stages can be
27  * written as
28  * \f[
29  * X_{i} = x_{n-1}
30  * + \Delta t\,\sum_{j=1}^{i-1} a_{ij}\,\bar{f}(X_{j},t_{n-1}+c_{j}\Delta t)
31  * \f]
32  * \f[
33  * x_{n} = x_{n-1}
34  * + \Delta t\,\sum_{i=1}^{s}b_{i}\,\bar{f}(X_{i},t_{n-1}+c_{i}\Delta t)
35  * \f]
36  * where \f$X_{i}\f$ are intermediate approximations to the solution
37  * at times, \f$t_{n-1}+c_{i}\Delta t\f$, (stage solutions) which may
38  * be correct to a lower order of accuracy than the solution, \f$x_{n}\f$.
39  * We should note that these lower-order approximations are combined
40  * through \f$b_{i}\f$ so that error terms cancel out and produce a
41  * more accurate solution. Note for explicit RK that \f$a_{ij}=0\f$ for
42  * \f$j \leq i\f$ and does not require any solves.
43  * Note that the stage time derivatives are
44  * \f[
45  * \dot{X}_{i} = \bar{f}(X_{i},t_{n-1}+c_{i}\Delta t),
46  * \f]
47  * and the time derivative by definition is
48  * \f[
49  * \dot{x}_{n} = \bar{f}(x_{n},t_{n}),
50  * \f]
51  *
52  * <b> Algorithm </b>
53  * The single-timestep algorithm for Explicit RK is simply,
54  * - for \f$i = 1 \ldots s\f$ do
55  * - \f$X_i \leftarrow x_{n-1}
56  * + \Delta t\,\sum_{j=1}^{i-1} a_{ij}\,\dot{X}_j\f$
57  * - Evaluate \f$\bar{f}(X_{i},t_{n-1}+c_{i}\Delta t)\f$
58  * - \f$\dot{X}_i \leftarrow \bar{f}(X_i,t_{n-1}+c_i\Delta t)\f$
59  * - end for
60  * - \f$x_n \leftarrow x_{n-1} + \Delta t\,\sum_{i=1}^{s}b_i\,\dot{X}_i\f$
61  * - \f$\dot{x}_n \leftarrow \bar{f}(x_{n},t_{n})\f$ [Optional]
62  */
63 template<class Scalar>
64 class StepperExplicitRK : virtual public Tempus::Stepper<Scalar>
65 {
66 public:
67 
68  /// Constructor to use default Stepper parameters.
70  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
71  std::string stepperType = "RK Explicit 4 Stage");
72 
73  /// Constructor to specialize Stepper parameters.
75  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
76  Teuchos::RCP<Teuchos::ParameterList> pList);
77 
78  /// Constructor for StepperFactory.
80  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
81  std::string stepperType, Teuchos::RCP<Teuchos::ParameterList> pList);
82 
83  /// \name Basic stepper methods
84  //@{
85  virtual void setModel(
86  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
87  virtual void setNonConstModel(
88  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel);
89  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >
90  getModel(){return appModel_;}
91 
92  virtual void setSolver(std::string solverName);
93  virtual void setSolver(
94  Teuchos::RCP<Teuchos::ParameterList> solverPL=Teuchos::null);
95  virtual void setSolver(
96  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
97  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
98  { return Teuchos::null; }
99  virtual void setObserver(
100  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
101 
102  virtual void setTableau(std::string stepperType);
103 
104  virtual void setTableau(
105  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
106 
107  /// Initialize during construction and after changing input parameters.
108  virtual void initialize();
109 
110  /// Take the specified timestep, dt, and return true if successful.
111  virtual void takeStep(
112  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
113 
114  /// Pass initial guess to Newton solver (only relevant for implicit solvers)
115  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
116  {initial_guess_ = initial_guess;}
117 
118  virtual std::string getStepperType() const
119  { return stepperPL_->get<std::string>("Stepper Type"); }
120 
121  /// Get a default (initial) StepperState
122  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
123  virtual Scalar getOrder() const {return ERK_ButcherTableau_->order();}
124  virtual Scalar getOrderMin() const {return ERK_ButcherTableau_->orderMin();}
125  virtual Scalar getOrderMax() const {return ERK_ButcherTableau_->orderMax();}
126  virtual Scalar getInitTimeStep(
127  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const;
128 
129  virtual bool isExplicit() const {return true;}
130  virtual bool isImplicit() const {return false;}
131  virtual bool isExplicitImplicit() const
132  {return isExplicit() and isImplicit();}
133  virtual bool isOneStepMethod() const {return true;}
134  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
135  //@}
136 
137  /// \name ParameterList methods
138  //@{
139  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
140  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
141  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
142  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
143  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
144  //@}
145 
146  /// \name Overridden from Teuchos::Describable
147  //@{
148  virtual std::string description() const;
149  virtual void describe(Teuchos::FancyOStream & out,
150  const Teuchos::EVerbosityLevel verbLevel) const;
151  //@}
152 
153 private:
154 
155  /// Default Constructor -- not allowed
157 
158 protected:
159 
160  std::string description_;
161  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
162  /// Explicit ODE ModelEvaluator
163  Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > appModel_;
164 
165  Thyra::ModelEvaluatorBase::InArgs<Scalar> inArgs_;
166  Thyra::ModelEvaluatorBase::OutArgs<Scalar> outArgs_;
167 
168  Teuchos::RCP<const RKButcherTableau<Scalar> > ERK_ButcherTableau_;
169 
170  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > > stageXDot_;
171  Teuchos::RCP<Thyra::VectorBase<Scalar> > stageX_;
172 
173  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
174  Teuchos::RCP<StepperExplicitRKObserver<Scalar> > stepperExplicitRKObserver_;
175 
176  // For Embedded RK
177  Teuchos::RCP<Thyra::VectorBase<Scalar> > ee_;
178  Teuchos::RCP<Thyra::VectorBase<Scalar> > abs_u0;
179  Teuchos::RCP<Thyra::VectorBase<Scalar> > abs_u;
180  Teuchos::RCP<Thyra::VectorBase<Scalar> > sc;
181 
182  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
183 
184 };
185 
186 } // namespace Tempus
187 
188 #endif // Tempus_StepperExplicitRK_decl_hpp
Tempus::StepperExplicitRK
Explicit Runge-Kutta time stepper.
Definition: Tempus_StepperExplicitRK_decl.hpp:64
Tempus::StepperExplicitRK::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperExplicitRK_decl.hpp:90
Tempus::StepperExplicitRK::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperExplicitRK_decl.hpp:131
Tempus::StepperExplicitRK::getSolver
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
Definition: Tempus_StepperExplicitRK_decl.hpp:97
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperExplicitRK::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperExplicitRK_decl.hpp:133
Tempus::StepperExplicitRK::ee_
Teuchos::RCP< Thyra::VectorBase< Scalar > > ee_
Definition: Tempus_StepperExplicitRK_decl.hpp:177
Tempus::StepperExplicitRK::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperExplicitRK_impl.hpp:54
Tempus::StepperExplicitRK::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperExplicitRK_decl.hpp:129
Tempus::StepperExplicitRK::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperExplicitRK_impl.hpp:417
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperExplicitRK::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperExplicitRK_impl.hpp:500
Tempus::StepperExplicitRK::abs_u
Teuchos::RCP< Thyra::VectorBase< Scalar > > abs_u
Definition: Tempus_StepperExplicitRK_decl.hpp:179
Tempus::StepperExplicitRK::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperExplicitRK_decl.hpp:123
Tempus_RKButcherTableau.hpp
Tempus::StepperExplicitRK::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperExplicitRK_impl.hpp:472
Tempus::StepperExplicitRK::StepperExplicitRK
StepperExplicitRK()
Default Constructor – not allowed.
Tempus::StepperExplicitRK::sc
Teuchos::RCP< Thyra::VectorBase< Scalar > > sc
Definition: Tempus_StepperExplicitRK_decl.hpp:180
Tempus::StepperExplicitRK::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperExplicitRK_impl.hpp:443
Tempus::StepperExplicitRK::description
virtual std::string description() const
Definition: Tempus_StepperExplicitRK_impl.hpp:410
Tempus::StepperExplicitRK::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperExplicitRK_impl.hpp:228
Tempus::StepperExplicitRK::setInitialGuess
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver (only relevant for implicit solvers)
Definition: Tempus_StepperExplicitRK_decl.hpp:115
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperExplicitRK::inArgs_
Thyra::ModelEvaluatorBase::InArgs< Scalar > inArgs_
Definition: Tempus_StepperExplicitRK_decl.hpp:165
Tempus::StepperExplicitRK::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperExplicitRK_decl.hpp:182
Tempus::StepperExplicitRK::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperExplicitRK_impl.hpp:401
Tempus::StepperExplicitRK::getStepperType
virtual std::string getStepperType() const
Definition: Tempus_StepperExplicitRK_decl.hpp:118
Tempus::StepperExplicitRK::stepperExplicitRKObserver_
Teuchos::RCP< StepperExplicitRKObserver< Scalar > > stepperExplicitRKObserver_
Definition: Tempus_StepperExplicitRK_decl.hpp:174
Tempus_Stepper.hpp
Tempus::StepperExplicitRK::setNonConstModel
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperExplicitRK_impl.hpp:65
Tempus::StepperExplicitRK::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperExplicitRK_impl.hpp:283
Tempus::StepperExplicitRK::getInitTimeStep
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
Definition: Tempus_StepperExplicitRK_impl.hpp:104
Tempus::StepperExplicitRK::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperExplicitRK_decl.hpp:173
Tempus::StepperExplicitRK::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperExplicitRK_impl.hpp:427
Tempus_StepperExplicitRKObserver.hpp
Tempus::StepperExplicitRK::stepperPL_
Teuchos::RCP< Teuchos::ParameterList > stepperPL_
Definition: Tempus_StepperExplicitRK_decl.hpp:161
Tempus::StepperExplicitRK::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperExplicitRK_decl.hpp:130
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperExplicitRK::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperExplicitRK_impl.hpp:492
Tempus::Stepper
Thyra Base interface for time steppers.
Definition: Tempus_Integrator.hpp:24
Tempus::StepperExplicitRK::ERK_ButcherTableau_
Teuchos::RCP< const RKButcherTableau< Scalar > > ERK_ButcherTableau_
Definition: Tempus_StepperExplicitRK_decl.hpp:168
Tempus::StepperExplicitRK::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperExplicitRK_decl.hpp:134
Tempus::StepperExplicitRK::outArgs_
Thyra::ModelEvaluatorBase::OutArgs< Scalar > outArgs_
Definition: Tempus_StepperExplicitRK_decl.hpp:166
Tempus::StepperExplicitRK::stageX_
Teuchos::RCP< Thyra::VectorBase< Scalar > > stageX_
Definition: Tempus_StepperExplicitRK_decl.hpp:171
Tempus::StepperExplicitRK::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperExplicitRK_impl.hpp:250
Tempus::StepperExplicitRK::appModel_
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > appModel_
Explicit ODE ModelEvaluator.
Definition: Tempus_StepperExplicitRK_decl.hpp:163
Tempus::StepperExplicitRK::setSolver
virtual void setSolver(std::string solverName)
Set solver via ParameterList solver name.
Definition: Tempus_StepperExplicitRK_impl.hpp:72
Tempus::StepperExplicitRK::setTableau
virtual void setTableau(std::string stepperType)
Definition: Tempus_StepperExplicitRK_impl.hpp:187
Tempus::StepperExplicitRK::abs_u0
Teuchos::RCP< Thyra::VectorBase< Scalar > > abs_u0
Definition: Tempus_StepperExplicitRK_decl.hpp:178
Tempus::StepperExplicitRK::stageXDot_
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageXDot_
Definition: Tempus_StepperExplicitRK_decl.hpp:170
Tempus::StepperExplicitRK::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperExplicitRK_decl.hpp:124
Tempus::StepperExplicitRK::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperExplicitRK_decl.hpp:125
Tempus::StepperExplicitRK::description_
std::string description_
Definition: Tempus_StepperExplicitRK_decl.hpp:160