Tempus  Version of the Day
Time Integration
Tempus_StepperTrapezoidal_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_StepperTrapezoidal_decl_hpp
10 #define Tempus_StepperTrapezoidal_decl_hpp
11 
12 #include "Tempus_StepperImplicit.hpp"
15 
16 
17 namespace Tempus {
18 
19 /** \brief Trapezoidal method time stepper.
20  *
21  * For the implicit ODE system, \f$\mathcal{F}(\dot{x},x,t) = 0\f$,
22  * the solution, \f$\dot{x}\f$ and \f$x\f$, is determined using a
23  * solver (e.g., a non-linear solver, like NOX).
24  *
25  * <b> Algorithm </b>
26  * The single-timestep algorithm for Trapezoidal method is simply,
27  * - Solve \f$f(\dot{x}=(x_n-x_{n-1})/(\Delta t_n/2) - \dot{x}_{n-1}, x_n, t_n)=0\f$ for \f$x_n\f$
28  * - \f$\dot{x}_n \leftarrow (x_n-x_{n-1})/(\Delta t_n/2) - \dot{x}_{n-1}\f$ [Optional]
29  * - Solve \f$f(\dot{x}_n,x_n,t_n)=0\f$ for \f$\dot{x}_n\f$ [Optional]
30  */
31 template<class Scalar>
32 class StepperTrapezoidal : virtual public Tempus::StepperImplicit<Scalar>
33 {
34 public:
35 
36  /// Constructor
38  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
39  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
40 
41  /// \name Basic stepper methods
42  //@{
43  virtual void setObserver(
44  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
45 
46  /// Initialize during construction and after changing input parameters.
47  virtual void initialize();
48 
49  /// Take the specified timestep, dt, and return true if successful.
50  virtual void takeStep(
51  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
52 
53  /// Get a default (initial) StepperState
54  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
55  virtual Scalar getOrder() const {return 2.0;}
56  virtual Scalar getOrderMin() const {return 2.0;}
57  virtual Scalar getOrderMax() const {return 2.0;}
58 
59  virtual bool isExplicit() const {return false;}
60  virtual bool isImplicit() const {return true;}
61  virtual bool isExplicitImplicit() const
62  {return isExplicit() and isImplicit();}
63  virtual bool isOneStepMethod() const {return true;}
64  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
65  //@}
66 
67  /// Pass initial guess to Newton solver (only relevant for explicit schemes)
68  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
69  {initial_guess_ = initial_guess;}
70 
71  /// Provide temporary xDot memory for Stepper if SolutionState doesn't.
72  virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotTemp(
73  Teuchos::RCP<Thyra::VectorBase<Scalar> > x);
74 
75  /// \name ParameterList methods
76  //@{
77  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
78  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
79  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
80  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
81  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
82  //@}
83 
84  /// \name Overridden from Teuchos::Describable
85  //@{
86  virtual std::string description() const;
87  virtual void describe(Teuchos::FancyOStream & out,
88  const Teuchos::EVerbosityLevel verbLevel) const;
89  //@}
90 
91 private:
92 
93  /// Default Constructor -- not allowed
95 
96 private:
97 
98  Teuchos::RCP<Stepper<Scalar> > predictorStepper_;
99  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
100  Teuchos::RCP<StepperTrapezoidalObserver<Scalar> > stepperTrapObserver_;
101  Teuchos::RCP<Thyra::VectorBase<Scalar> > xDotTemp_;
102  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
103 
104 };
105 
106 /** \brief Time-derivative interface for Trapezoidal method.
107  *
108  * Given the state \f$x\f$, compute the Trapezoidal method time-derivative,
109  * \f[
110  * \dot{x}_{n} = \frac{(x_{n} - x_{n-1})}{(\Delta t_n/2)} - \dot{x}_{n-1}.
111  * \f]
112  * \f$\ddot{x}\f$ is not used and set to null.
113  */
114 template <typename Scalar>
116  : virtual public Tempus::TimeDerivative<Scalar>
117 {
118 public:
119 
120  /// Constructor
122  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld,
123  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xDotOld)
124  { initialize(s, xOld, xDotOld); }
125 
126  /// Destructor
128 
129  /// Compute the time derivative.
130  virtual void compute(
131  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x,
132  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDot,
133  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
134  {
135  xDotDot = Teuchos::null;
136  // Calculate the Trapezoidal method x dot vector
137  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xOld_);
138  Thyra::V_VpStV (xDot.ptr(),*xDot,-1.0,*xDotOld_);
139  }
140 
141  virtual void initialize(Scalar s,
142  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld,
143  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xDotOld)
144  { s_ = s; xOld_ = xOld; xDotOld_ = xDotOld; }
145 
146 private:
147 
148  Scalar s_; // = 1.0/(dt/2)
149  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld_;
150  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xDotOld_;
151 };
152 
153 
154 } // namespace Tempus
155 
156 #endif // Tempus_StepperTrapezoidal_decl_hpp
Tempus::StepperTrapezoidal::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:64
Tempus::StepperTrapezoidalTimeDerivative::StepperTrapezoidalTimeDerivative
StepperTrapezoidalTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xDotOld)
Constructor.
Definition: Tempus_StepperTrapezoidal_decl.hpp:121
Tempus::StepperTrapezoidal::predictorStepper_
Teuchos::RCP< Stepper< Scalar > > predictorStepper_
Definition: Tempus_StepperTrapezoidal_decl.hpp:98
Tempus::StepperTrapezoidal::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperTrapezoidal_impl.hpp:220
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperTrapezoidal::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperTrapezoidal_impl.hpp:162
Tempus::StepperTrapezoidal::stepperTrapObserver_
Teuchos::RCP< StepperTrapezoidalObserver< Scalar > > stepperTrapObserver_
Definition: Tempus_StepperTrapezoidal_decl.hpp:100
Tempus::StepperTrapezoidal::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperTrapezoidal_impl.hpp:235
Tempus_StepperTrapezoidalObserver.hpp
Tempus::StepperTrapezoidal::StepperTrapezoidal
StepperTrapezoidal()
Default Constructor – not allowed.
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperTrapezoidalTimeDerivative::~StepperTrapezoidalTimeDerivative
virtual ~StepperTrapezoidalTimeDerivative()
Destructor.
Definition: Tempus_StepperTrapezoidal_decl.hpp:127
Tempus::StepperTrapezoidal::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:55
Tempus::StepperTrapezoidal::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperTrapezoidal_decl.hpp:99
Tempus::StepperTrapezoidal::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperTrapezoidal_impl.hpp:61
Tempus::StepperTrapezoidal::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperTrapezoidal_impl.hpp:179
Tempus::StepperTrapezoidalTimeDerivative::compute
virtual void compute(Teuchos::RCP< const Thyra::VectorBase< Scalar > > x, Teuchos::RCP< Thyra::VectorBase< Scalar > > xDot, Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotDot=Teuchos::null)
Compute the time derivative.
Definition: Tempus_StepperTrapezoidal_decl.hpp:130
Tempus::StepperTrapezoidal::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperTrapezoidal_impl.hpp:263
Tempus::StepperTrapezoidal::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperTrapezoidal_decl.hpp:102
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperTrapezoidalTimeDerivative::xDotOld_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xDotOld_
Definition: Tempus_StepperTrapezoidal_decl.hpp:150
Tempus::StepperTrapezoidal::description
virtual std::string description() const
Definition: Tempus_StepperTrapezoidal_impl.hpp:171
Tempus::StepperTrapezoidalTimeDerivative::s_
Scalar s_
Definition: Tempus_StepperTrapezoidal_decl.hpp:148
Tempus::StepperTrapezoidal::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperTrapezoidal_impl.hpp:39
Tempus::StepperTrapezoidalTimeDerivative::initialize
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xDotOld)
Definition: Tempus_StepperTrapezoidal_decl.hpp:141
Tempus::StepperImplicit
Thyra Base interface for implicit time steppers.
Definition: Tempus_StepperImplicit_decl.hpp:24
Tempus::StepperTrapezoidal::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:59
Tempus::StepperTrapezoidal::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperTrapezoidal_impl.hpp:189
Tempus::StepperTrapezoidal::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:60
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperTrapezoidal::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperTrapezoidal_impl.hpp:75
Tempus_WrapperModelEvaluator.hpp
Tempus::TimeDerivative
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
Definition: Tempus_TimeDerivative.hpp:32
Tempus::StepperTrapezoidalTimeDerivative
Time-derivative interface for Trapezoidal method.
Definition: Tempus_StepperTrapezoidal_decl.hpp:115
Tempus::StepperTrapezoidal::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:63
Tempus::StepperTrapezoidal::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_StepperTrapezoidal_impl.hpp:144
Tempus::StepperTrapezoidal::xDotTemp_
Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotTemp_
Definition: Tempus_StepperTrapezoidal_decl.hpp:101
Tempus::StepperTrapezoidal::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:61
Tempus::StepperTrapezoidal::setInitialGuess
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver (only relevant for explicit schemes)
Definition: Tempus_StepperTrapezoidal_decl.hpp:68
Tempus::StepperTrapezoidal::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperTrapezoidal_impl.hpp:255
Tempus::StepperTrapezoidal
Trapezoidal method time stepper.
Definition: Tempus_StepperTrapezoidal_decl.hpp:32
Tempus::StepperTrapezoidal::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:57
Tempus::StepperTrapezoidalTimeDerivative::xOld_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld_
Definition: Tempus_StepperTrapezoidal_decl.hpp:149
Tempus::StepperTrapezoidal::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperTrapezoidal_decl.hpp:56