Tempus  Version of the Day
Time Integration
Tempus_StepperLeapfrog_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_StepperLeapfrog_decl_hpp
10 #define Tempus_StepperLeapfrog_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_Stepper.hpp"
15 
16 
17 namespace Tempus {
18 
19 /** \brief Leapfrog time stepper.
20  *
21  * For the governing equation,
22  * \f[
23  * M(t) \ddot{x} + K(t) x = F(t),
24  * \f]
25  * one can write the explicit ODE system,
26  * \f[
27  * \ddot{x} = f(x,t),
28  * \f]
29  * where
30  * \f[
31  * f(x,t) = \left(M(t)\right)^{-1} \left( F(t) - K(t) x \right).
32  * \f]
33  * The Leapfrog stepper can be written as
34  * \f{eqnarray*}{
35  * x_{n+1} & = & x_{n} + \Delta t\, \dot{x}_{n+1/2} \\
36  * \ddot{x}_{n+1} & = & f(x_{n+1},t_{n+1}) \\
37  * \dot{x}_{n+3/2} & = & \dot{x}_{n+1/2} + \Delta t\, \ddot{x}_{n+1}
38  * \f}
39  * where the position and velocity are leapfrogged over each other.
40  * On startup the velocity half-step can be obtained with
41  * \f{eqnarray*}{
42  * \dot{x}_{n+1/2} & = & \dot{x}_{n} + \frac{1}{2} \Delta t\, \ddot{x}_{n} \\
43  * \dot{x}_{n+1/2} & = & \dot{x}_{n} + \frac{1}{2} \Delta t\, f(x_{n},t_{n})
44  * \f}
45  * and to complete the time step, the final velocity half-step is obtained
46  * with
47  * \f{eqnarray*}{
48  * \dot{x}_{n+1}&=&\dot{x}_{n+1/2} +\frac{1}{2} \Delta t\, \ddot{x}_{n+1} \\
49  * \dot{x}_{n+1}&=&\dot{x}_{n+1/2} +\frac{1}{2} \Delta t\, f(x_{n+1},t_{n+1})
50  * \f}
51  *
52  * <b> Algorithm </b>
53  *
54  * Beginning with \f$(x_n,\dot{x}_{n+1/2})\f$ or \f$(x_n,\dot{x}_{n})\f$
55  * and/or ending with \f$(x_{n+1},\dot{x}_{n+3/2})\f$ or
56  * \f$(x_{n+1},\dot{x}_{n+1})\f$, the algorithm for Leapfrog is
57  * - if "startup"
58  * - \f$ \ddot{x}_{n} \leftarrow f(x_{n},t_{n}) \f$
59  * - \f$ \dot{x}_{n+1/2} \leftarrow
60  * \dot{x}_{n} + \frac{1}{2} \Delta t\, \ddot{x}_{n} \f$
61  * - \f$x_{n+1} \leftarrow x_{n} + \Delta t\, \dot{x}_{n+1/2} \f$
62  * - \f$\ddot{x}_{n+1} \leftarrow f(x_{n+1},t_{n+1}) \f$
63  * - if "ending"
64  * - \f$ \dot{x}_{n+1} \leftarrow
65  * \dot{x}_{n+1/2} +\frac{1}{2} \Delta t\, \ddot{x}_{n+1} \f$
66  * - else
67  * - \f$ \dot{x}_{n+3/2} \leftarrow
68  * \dot{x}_{n+1/2} + \Delta t\, \ddot{x}_{n+1} \f$
69  */
70 template<class Scalar>
71 class StepperLeapfrog : virtual public Tempus::Stepper<Scalar>
72 {
73 public:
74 
75  /// Constructor
77  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
78  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
79 
80  /// \name Basic stepper methods
81  //@{
82  virtual void setModel(
83  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
84  virtual void setNonConstModel(
85  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel);
86  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >
87  getModel(){return appModel_;}
88 
89  virtual void setSolver(std::string solverName);
90  virtual void setSolver(
91  Teuchos::RCP<Teuchos::ParameterList> solverPL=Teuchos::null);
92  virtual void setSolver(
93  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
94  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
95  { return Teuchos::null; }
96  virtual void setObserver(
97  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
98 
99  /// Initialize during construction and after changing input parameters.
100  virtual void initialize();
101 
102  /// Take the specified timestep, dt, and return true if successful.
103  virtual void takeStep(
104  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
105 
106  /// Pass initial guess to Newton solver (only relevant for implicit solvers)
107  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
108  {initial_guess_ = initial_guess;}
109 
110  virtual std::string getStepperType() const
111  { return stepperPL_->get<std::string>("Stepper Type"); }
112 
113  /// Get a default (initial) StepperState
114  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
115  virtual Scalar getOrder() const {return 2.0;}
116  virtual Scalar getOrderMin() const {return 2.0;}
117  virtual Scalar getOrderMax() const {return 2.0;}
118  virtual Scalar getInitTimeStep(
119  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const
120  {return std::numeric_limits<Scalar>::max();}
121 
122  virtual bool isExplicit() const {return true;}
123  virtual bool isImplicit() const {return false;}
124  virtual bool isExplicitImplicit() const
125  {return isExplicit() and isImplicit();}
126  virtual bool isOneStepMethod() const {return true;}
127  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
128  //@}
129 
130  virtual void setIsXDotXDotInitialized(bool tf)
131  { stepperPL_->set<bool>("Is xDotDot Initialized", int(tf)); }
132  virtual bool getIsXDotXDotInitialized() const
133  { return stepperPL_->get<bool>("Is xDotDot Initialized"); }
134 
135  /// \name ParameterList methods
136  //@{
137  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
138  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
139  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
140  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
141  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
142  //@}
143 
144  /// \name Overridden from Teuchos::Describable
145  //@{
146  virtual std::string description() const;
147  virtual void describe(Teuchos::FancyOStream & out,
148  const Teuchos::EVerbosityLevel verbLevel) const;
149  //@}
150 
151 private:
152 
153  /// Default Constructor -- not allowed
154  StepperLeapfrog();
155 
156 protected:
157 
158  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
159  /// Explicit ODE ModelEvaluator
160  Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > appModel_;
161 
162  Thyra::ModelEvaluatorBase::InArgs<Scalar> inArgs_;
163  Thyra::ModelEvaluatorBase::OutArgs<Scalar> outArgs_;
164 
165  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
166  Teuchos::RCP<StepperLeapfrogObserver<Scalar> > stepperLFObserver_;
167 
168  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
169 
170 };
171 
172 } // namespace Tempus
173 
174 #endif // Tempus_StepperLeapfrog_decl_hpp
Tempus::StepperLeapfrog::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperLeapfrog_impl.hpp:81
Tempus::StepperLeapfrog::inArgs_
Thyra::ModelEvaluatorBase::InArgs< Scalar > inArgs_
Definition: Tempus_StepperLeapfrog_decl.hpp:162
Tempus::StepperLeapfrog::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperLeapfrog_decl.hpp:165
Tempus::StepperLeapfrog::outArgs_
Thyra::ModelEvaluatorBase::OutArgs< Scalar > outArgs_
Definition: Tempus_StepperLeapfrog_decl.hpp:163
Tempus::StepperLeapfrog::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperLeapfrog_impl.hpp:113
Tempus::StepperLeapfrog::StepperLeapfrog
StepperLeapfrog()
Default Constructor – not allowed.
Tempus::StepperLeapfrog::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperLeapfrog_decl.hpp:87
Tempus::StepperLeapfrog::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperLeapfrog_impl.hpp:286
Tempus::StepperLeapfrog::getIsXDotXDotInitialized
virtual bool getIsXDotXDotInitialized() const
Definition: Tempus_StepperLeapfrog_decl.hpp:132
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperLeapfrog::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperLeapfrog_decl.hpp:168
Tempus::StepperLeapfrog
Leapfrog time stepper.
Definition: Tempus_StepperLeapfrog_decl.hpp:71
Tempus::StepperLeapfrog::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperLeapfrog_impl.hpp:304
Tempus_StepperLeapfrogObserver.hpp
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperLeapfrog::getInitTimeStep
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
Definition: Tempus_StepperLeapfrog_decl.hpp:118
Tempus::StepperLeapfrog::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperLeapfrog_impl.hpp:221
Tempus::StepperLeapfrog::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperLeapfrog_decl.hpp:124
Tempus::StepperLeapfrog::stepperLFObserver_
Teuchos::RCP< StepperLeapfrogObserver< Scalar > > stepperLFObserver_
Definition: Tempus_StepperLeapfrog_decl.hpp:166
Tempus::StepperLeapfrog::setIsXDotXDotInitialized
virtual void setIsXDotXDotInitialized(bool tf)
Definition: Tempus_StepperLeapfrog_decl.hpp:130
Tempus::StepperLeapfrog::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperLeapfrog_impl.hpp:31
Tempus::StepperLeapfrog::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperLeapfrog_impl.hpp:101
Tempus::StepperLeapfrog::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperLeapfrog_decl.hpp:122
Tempus::StepperLeapfrog::setSolver
virtual void setSolver(std::string solverName)
Set solver via ParameterList solver name.
Definition: Tempus_StepperLeapfrog_impl.hpp:49
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperLeapfrog::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperLeapfrog_decl.hpp:117
Tempus::StepperLeapfrog::setNonConstModel
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperLeapfrog_impl.hpp:42
Tempus::StepperLeapfrog::appModel_
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > appModel_
Explicit ODE ModelEvaluator.
Definition: Tempus_StepperLeapfrog_decl.hpp:160
Tempus::StepperLeapfrog::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperLeapfrog_decl.hpp:115
Tempus::StepperLeapfrog::description
virtual std::string description() const
Definition: Tempus_StepperLeapfrog_impl.hpp:230
Tempus_Stepper.hpp
Tempus::StepperLeapfrog::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperLeapfrog_impl.hpp:238
Tempus::StepperLeapfrog::getStepperType
virtual std::string getStepperType() const
Definition: Tempus_StepperLeapfrog_decl.hpp:110
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::Stepper
Thyra Base interface for time steppers.
Definition: Tempus_Integrator.hpp:24
Tempus::StepperLeapfrog::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_StepperLeapfrog_decl.hpp:107
Tempus::StepperLeapfrog::stepperPL_
Teuchos::RCP< Teuchos::ParameterList > stepperPL_
Definition: Tempus_StepperLeapfrog_decl.hpp:158
Tempus::StepperLeapfrog::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperLeapfrog_impl.hpp:269
Tempus::StepperLeapfrog::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperLeapfrog_impl.hpp:248
Tempus::StepperLeapfrog::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperLeapfrog_decl.hpp:127
Tempus::StepperLeapfrog::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperLeapfrog_decl.hpp:116
Tempus::StepperLeapfrog::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperLeapfrog_decl.hpp:123
Tempus::StepperLeapfrog::getSolver
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
Definition: Tempus_StepperLeapfrog_decl.hpp:94
Tempus::StepperLeapfrog::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperLeapfrog_impl.hpp:296
Tempus::StepperLeapfrog::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperLeapfrog_decl.hpp:126