Tempus  Version of the Day
Time Integration
Tempus_StepperForwardEuler_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_StepperForwardEuler_decl_hpp
10 #define Tempus_StepperForwardEuler_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_Stepper.hpp"
15 
16 
17 namespace Tempus {
18 
19 /** \brief Forward Euler time stepper.
20  *
21  * For the explicit ODE system,
22  * \f[
23  * \dot{x} = \bar{f}(x,t),
24  * \f]
25  * the Forward Euler stepper can be written as
26  * \f[
27  * x_{n} = x_{n-1} + \Delta t\, \bar{f}(x_{n-1},t_{n-1})
28  * \f]
29  * Forward Euler is an explicit time stepper (i.e., no solver used).
30  * Note that the time derivative by definition is
31  * \f[
32  * \dot{x}_{n} = \bar{f}(x_{n},t_{n}),
33  * \f]
34  *
35  * <b> Algorithm </b>
36  * The single-timestep algorithm for Forward Euler is simply,
37  * - Evaluate \f$\bar{f}(x_{n-1},t_{n-1})\f$
38  * - \f$x_{n} \leftarrow x_{n-1} + \Delta t\, \bar{f}(x_{n-1},t_{n-1})\f$
39  * - \f$\dot{x}_n \leftarrow \bar{f}(x_{n},t_{n})\f$ [Optional]
40  */
41 template<class Scalar>
42 class StepperForwardEuler : virtual public Tempus::Stepper<Scalar>
43 {
44 public:
45 
46  /// Constructor
48  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
49  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
50 
51  /// \name Basic stepper methods
52  //@{
53  virtual void setModel(
54  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
55  virtual void setNonConstModel(
56  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel);
57  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >
58  getModel(){return appModel_;}
59 
60  virtual void setSolver(std::string solverName);
61  virtual void setSolver(
62  Teuchos::RCP<Teuchos::ParameterList> solverPL=Teuchos::null);
63  virtual void setSolver(
64  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
65  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
66  { return Teuchos::null; }
67  virtual void setObserver(
68  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
69 
70  /// Initialize during construction and after changing input parameters.
71  virtual void initialize();
72 
73  /// Take the specified timestep, dt, and return true if successful.
74  virtual void takeStep(
75  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
76 
77  virtual std::string getStepperType() const
78  { return stepperPL_->get<std::string>("Stepper Type"); }
79 
80  /// Get a default (initial) StepperState
81  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
82  virtual Scalar getOrder() const {return 1.0;}
83  virtual Scalar getOrderMin() const {return 1.0;}
84  virtual Scalar getOrderMax() const {return 1.0;}
85  virtual Scalar getInitTimeStep(
86  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const
87  {return std::numeric_limits<Scalar>::max();}
88 
89  virtual bool isExplicit() const {return true;}
90  virtual bool isImplicit() const {return false;}
91  virtual bool isExplicitImplicit() const
92  {return isExplicit() and isImplicit();}
93  virtual bool isOneStepMethod() const {return true;}
94  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
95  //@}
96 
97  /// Pass initial guess to Newton solver (only relevant for implicit solvers)
98  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
99  {initial_guess_ = initial_guess;}
100 
101  /// Provide temporary xDot memory for Stepper if SolutionState doesn't.
102  virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotTemp(
103  Teuchos::RCP<Thyra::VectorBase<Scalar> > x);
104 
105  /// \name ParameterList methods
106  //@{
107  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
108  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
109  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
110  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
111  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
112  //@}
113 
114  /// \name Overridden from Teuchos::Describable
115  //@{
116  virtual std::string description() const;
117  virtual void describe(Teuchos::FancyOStream & out,
118  const Teuchos::EVerbosityLevel verbLevel) const;
119  //@}
120 
121 private:
122 
123  /// Default Constructor -- not allowed
125 
126 protected:
127 
128  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
129  /// Explicit ODE ModelEvaluator
130  Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > appModel_;
131 
132  Thyra::ModelEvaluatorBase::InArgs<Scalar> inArgs_;
133  Thyra::ModelEvaluatorBase::OutArgs<Scalar> outArgs_;
134 
135  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
136  Teuchos::RCP<StepperForwardEulerObserver<Scalar> > stepperFEObserver_;
137 
138  Teuchos::RCP<Thyra::VectorBase<Scalar> > xDotTemp_;
139  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
140 };
141 
142 } // namespace Tempus
143 
144 #endif // Tempus_StepperForwardEuler_decl_hpp
Tempus::StepperForwardEuler::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperForwardEuler_impl.hpp:101
Tempus::StepperForwardEuler::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperForwardEuler_decl.hpp:58
Tempus::StepperForwardEuler::xDotTemp_
Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotTemp_
Definition: Tempus_StepperForwardEuler_decl.hpp:138
Tempus::StepperForwardEuler::setSolver
virtual void setSolver(std::string solverName)
Set solver via ParameterList solver name.
Definition: Tempus_StepperForwardEuler_impl.hpp:49
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperForwardEuler::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperForwardEuler_impl.hpp:113
Tempus::StepperForwardEuler::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperForwardEuler_decl.hpp:83
Tempus::StepperForwardEuler::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperForwardEuler_decl.hpp:139
Tempus::StepperForwardEuler::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperForwardEuler_impl.hpp:81
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperForwardEuler
Forward Euler time stepper.
Definition: Tempus_StepperForwardEuler_decl.hpp:42
Tempus::StepperForwardEuler::getStepperType
virtual std::string getStepperType() const
Definition: Tempus_StepperForwardEuler_decl.hpp:77
Tempus::StepperForwardEuler::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperForwardEuler_impl.hpp:249
Tempus::StepperForwardEuler::stepperFEObserver_
Teuchos::RCP< StepperForwardEulerObserver< Scalar > > stepperFEObserver_
Definition: Tempus_StepperForwardEuler_decl.hpp:136
Tempus::StepperForwardEuler::outArgs_
Thyra::ModelEvaluatorBase::OutArgs< Scalar > outArgs_
Definition: Tempus_StepperForwardEuler_decl.hpp:133
Tempus::StepperForwardEuler::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperForwardEuler_impl.hpp:188
Tempus::StepperForwardEuler::getSolver
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
Definition: Tempus_StepperForwardEuler_decl.hpp:65
Tempus::StepperForwardEuler::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_StepperForwardEuler_decl.hpp:98
Tempus::StepperForwardEuler::setNonConstModel
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperForwardEuler_impl.hpp:42
Tempus::StepperForwardEuler::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperForwardEuler_decl.hpp:90
Tempus::StepperForwardEuler::stepperPL_
Teuchos::RCP< Teuchos::ParameterList > stepperPL_
Definition: Tempus_StepperForwardEuler_decl.hpp:128
Tempus::StepperForwardEuler::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperForwardEuler_decl.hpp:84
Tempus::StepperForwardEuler::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperForwardEuler_decl.hpp:91
Tempus::StepperForwardEuler::inArgs_
Thyra::ModelEvaluatorBase::InArgs< Scalar > inArgs_
Definition: Tempus_StepperForwardEuler_decl.hpp:132
Tempus::StepperForwardEuler::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperForwardEuler_decl.hpp:135
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperForwardEuler::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperForwardEuler_impl.hpp:267
Tempus_Stepper.hpp
Tempus::StepperForwardEuler::getXDotTemp
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotTemp(Teuchos::RCP< Thyra::VectorBase< Scalar > > x)
Provide temporary xDot memory for Stepper if SolutionState doesn't.
Definition: Tempus_StepperForwardEuler_impl.hpp:170
Tempus::StepperForwardEuler::description
virtual std::string description() const
Definition: Tempus_StepperForwardEuler_impl.hpp:197
Tempus::StepperForwardEuler::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperForwardEuler_impl.hpp:259
Tempus::StepperForwardEuler::getInitTimeStep
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
Definition: Tempus_StepperForwardEuler_decl.hpp:85
Tempus::StepperForwardEuler::appModel_
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > appModel_
Explicit ODE ModelEvaluator.
Definition: Tempus_StepperForwardEuler_decl.hpp:130
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperForwardEuler::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperForwardEuler_decl.hpp:82
Tempus::Stepper
Thyra Base interface for time steppers.
Definition: Tempus_Integrator.hpp:24
Tempus::StepperForwardEuler::StepperForwardEuler
StepperForwardEuler()
Default Constructor – not allowed.
Tempus::StepperForwardEuler::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperForwardEuler_impl.hpp:31
Tempus::StepperForwardEuler::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperForwardEuler_decl.hpp:94
Tempus::StepperForwardEuler::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperForwardEuler_impl.hpp:215
Tempus::StepperForwardEuler::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperForwardEuler_impl.hpp:236
Tempus::StepperForwardEuler::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperForwardEuler_impl.hpp:205
Tempus::StepperForwardEuler::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperForwardEuler_decl.hpp:93
Tempus_StepperForwardEulerObserver.hpp
Tempus::StepperForwardEuler::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperForwardEuler_decl.hpp:89