Tempus  Version of the Day
Time Integration
Tempus_StepperBackwardEuler_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_StepperBackwardEuler_decl_hpp
10 #define Tempus_StepperBackwardEuler_decl_hpp
11 
12 #include "Tempus_StepperImplicit.hpp"
16 
17 
18 namespace Tempus {
19 
20 /** \brief Backward Euler time stepper.
21  *
22  * For the implicit ODE system, \f$\mathcal{F}(\dot{x},x,t) = 0\f$,
23  * the solution, \f$\dot{x}\f$ and \f$x\f$, is determined using a
24  * solver (e.g., a non-linear solver, like NOX).
25  *
26  * <b> Algorithm </b>
27  * The single-timestep algorithm for Backward Euler is simply,
28  * - Solve \f$f(\dot{x}=(x_n-x_{n-1})/\Delta t_n, x_n, t_n)=0\f$ for \f$x_n\f$
29  * - \f$\dot{x}_n \leftarrow (x_n-x_{n-1})/\Delta t_n\f$ [Optional]
30  * - Solve \f$f(\dot{x}_n,x_n,t_n)=0\f$ for \f$\dot{x}_n\f$ [Optional]
31  */
32 template<class Scalar>
34  virtual public Tempus::StepperImplicit<Scalar>,
35  virtual public Tempus::StepperOptimizationInterface<Scalar>
36 {
37 public:
38 
39  /// Constructor
41  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
42  Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
43 
44  /// \name Basic stepper methods
45  //@{
46  virtual void setObserver(
47  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
48 
49  /// Set the predictor
50  void setPredictor(std::string predictorName);
51  void setPredictor(Teuchos::RCP<Teuchos::ParameterList>predPL=Teuchos::null);
52 
53  /// Initialize during construction and after changing input parameters.
54  virtual void initialize();
55 
56  /// Take the specified timestep, dt, and return true if successful.
57  virtual void takeStep(
58  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
59 
60  /// Pass initial guess to Newton solver
61  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
62  {initial_guess_ = initial_guess;}
63 
64  /// Get a default (initial) StepperState
65  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
66  virtual Scalar getOrder() const {return 1.0;}
67  virtual Scalar getOrderMin() const {return 1.0;}
68  virtual Scalar getOrderMax() const {return 1.0;}
69 
70  virtual bool isExplicit() const {return false;}
71  virtual bool isImplicit() const {return true;}
72  virtual bool isExplicitImplicit() const
73  {return isExplicit() and isImplicit();}
74  virtual bool isOneStepMethod() const {return true;}
75  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
76  //@}
77 
78  /// Compute predictor given the supplied stepper
79  virtual void computePredictor(
80  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
81 
82  /// Provide temporary xDot memory for Stepper if SolutionState doesn't.
83  virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotTemp(
84  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x) const;
85 
86  /// \name ParameterList methods
87  //@{
88  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
89  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
90  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
91  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
92  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
93  //@}
94 
95  /// \name Overridden from Teuchos::Describable
96  //@{
97  virtual std::string description() const;
98  virtual void describe(Teuchos::FancyOStream & out,
99  const Teuchos::EVerbosityLevel verbLevel) const;
100  //@}
101 
102  /// \name Implementation of StepperOptimizationInterface
103  //@{
104  virtual int stencilLength() const;
105  virtual void computeStepResidual(
106  Thyra::VectorBase<Scalar>& residual,
107  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
108  const Teuchos::Array<Scalar>& t,
109  const Thyra::VectorBase<Scalar>& p,
110  const int param_index) const;
111  virtual void computeStepJacobian(
112  Thyra::LinearOpBase<Scalar>& jacobian,
113  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
114  const Teuchos::Array<Scalar>& t,
115  const Thyra::VectorBase<Scalar>& p,
116  const int param_index,
117  const int deriv_index) const;
118  virtual void computeStepParamDeriv(
119  Thyra::LinearOpBase<Scalar>& deriv,
120  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
121  const Teuchos::Array<Scalar>& t,
122  const Thyra::VectorBase<Scalar>& p,
123  const int param_index) const;
124  virtual void computeStepSolver(
125  Thyra::LinearOpWithSolveBase<Scalar>& jacobian_solver,
126  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
127  const Teuchos::Array<Scalar>& t,
128  const Thyra::VectorBase<Scalar>& p,
129  const int param_index) const;
130  //@}
131 
132 private:
133 
134  /// Default Constructor -- not allowed
136 
137  /// Implementation of computeStep*() methods
139  const Thyra::ModelEvaluatorBase::OutArgs<Scalar>& outArgs,
140  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
141  const Teuchos::Array<Scalar>& t,
142  const Thyra::VectorBase<Scalar>& p,
143  const int param_index,
144  const int deriv_index = 0) const;
145 
146 private:
147 
148  Teuchos::RCP<Stepper<Scalar> > predictorStepper_;
149  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
150  Teuchos::RCP<StepperBackwardEulerObserver<Scalar> > stepperBEObserver_;
151 
152  mutable Teuchos::RCP<Thyra::VectorBase<Scalar> > xDotTemp_;
153  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
154 };
155 
156 /** \brief Time-derivative interface for Backward Euler.
157  *
158  * Given the state \f$x\f$, compute the Backward Euler time-derivative,
159  * \f[
160  * \dot{x}_{n} = \frac{(x_{n} - x_{n-1})}{\Delta t_{n}}.
161  * \f]
162  * \f$\ddot{x}\f$ is not used and set to null.
163  */
164 template <typename Scalar>
166  : virtual public Tempus::TimeDerivative<Scalar>
167 {
168 public:
169 
170  /// Constructor
172  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld)
173  { initialize(s, xOld); }
174 
175  /// Destructor
177 
178  /// Compute the time derivative.
179  virtual void compute(
180  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x,
181  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDot,
182  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
183  {
184  xDotDot = Teuchos::null;
185  // Calculate the Backward Euler x dot vector
186  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xOld_);
187  }
188 
189  virtual void initialize(Scalar s,
190  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld)
191  { s_ = s; xOld_ = xOld; }
192 
193 private:
194 
195  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld_;
196  Scalar s_; // = 1.0/dt
197 };
198 
199 
200 } // namespace Tempus
201 
202 #endif // Tempus_StepperBackwardEuler_decl_hpp
Tempus::StepperBackwardEuler::computeStepParamDeriv
virtual void computeStepParamDeriv(Thyra::LinearOpBase< Scalar > &deriv, const Teuchos::Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &x, const Teuchos::Array< Scalar > &t, const Thyra::VectorBase< Scalar > &p, const int param_index) const
Compute time step derivative w.r.t. model parameters.
Definition: Tempus_StepperBackwardEuler_impl.hpp:398
Tempus::StepperBackwardEulerTimeDerivative::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_StepperBackwardEuler_decl.hpp:179
Tempus::StepperBackwardEuler::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:66
Tempus::StepperBackwardEuler::computeStepResidDerivImpl
void computeStepResidDerivImpl(const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs, const Teuchos::Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &x, const Teuchos::Array< Scalar > &t, const Thyra::VectorBase< Scalar > &p, const int param_index, const int deriv_index=0) const
Implementation of computeStep*() methods.
Definition: Tempus_StepperBackwardEuler_impl.hpp:431
Tempus::StepperBackwardEuler::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperBackwardEuler_impl.hpp:305
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperBackwardEuler::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperBackwardEuler_impl.hpp:103
Tempus::StepperBackwardEulerTimeDerivative::xOld_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld_
Definition: Tempus_StepperBackwardEuler_decl.hpp:195
Tempus::StepperBackwardEuler::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperBackwardEuler_impl.hpp:320
Tempus::StepperBackwardEulerTimeDerivative::s_
Scalar s_
Definition: Tempus_StepperBackwardEuler_decl.hpp:196
Tempus::StepperBackwardEuler::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:70
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperBackwardEuler::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:71
Tempus::StepperBackwardEuler::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:68
Tempus::StepperOptimizationInterface
Stepper interface to support full-space optimization.
Definition: Tempus_StepperOptimizationInterface.hpp:39
Tempus::StepperBackwardEuler::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:74
Tempus::StepperBackwardEuler::stencilLength
virtual int stencilLength() const
Return the number of solution vectors in the time step stencil.
Definition: Tempus_StepperBackwardEuler_impl.hpp:358
Tempus::StepperBackwardEulerTimeDerivative
Time-derivative interface for Backward Euler.
Definition: Tempus_StepperBackwardEuler_decl.hpp:165
Tempus::StepperBackwardEuler::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperBackwardEuler_impl.hpp:348
Tempus::StepperBackwardEuler::StepperBackwardEuler
StepperBackwardEuler()
Default Constructor – not allowed.
Tempus::StepperBackwardEuler::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperBackwardEuler_decl.hpp:153
Tempus::StepperBackwardEuler::stepperBEObserver_
Teuchos::RCP< StepperBackwardEulerObserver< Scalar > > stepperBEObserver_
Definition: Tempus_StepperBackwardEuler_decl.hpp:150
Tempus::StepperBackwardEulerTimeDerivative::StepperBackwardEulerTimeDerivative
StepperBackwardEulerTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld)
Constructor.
Definition: Tempus_StepperBackwardEuler_decl.hpp:171
Tempus::StepperBackwardEulerTimeDerivative::initialize
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld)
Definition: Tempus_StepperBackwardEuler_decl.hpp:189
Tempus::StepperBackwardEuler::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:75
Tempus::StepperBackwardEuler::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperBackwardEuler_impl.hpp:124
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus_StepperOptimizationInterface.hpp
Tempus::StepperBackwardEuler::xDotTemp_
Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotTemp_
Definition: Tempus_StepperBackwardEuler_decl.hpp:152
Tempus::StepperBackwardEuler::setPredictor
void setPredictor(std::string predictorName)
Set the predictor.
Definition: Tempus_StepperBackwardEuler_impl.hpp:47
Tempus::StepperBackwardEuler::description
virtual std::string description() const
Definition: Tempus_StepperBackwardEuler_impl.hpp:256
Tempus::StepperBackwardEuler
Backward Euler time stepper.
Definition: Tempus_StepperBackwardEuler_decl.hpp:33
Tempus::StepperImplicit
Thyra Base interface for implicit time steppers.
Definition: Tempus_StepperImplicit_decl.hpp:24
Tempus::StepperBackwardEuler::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperBackwardEuler_impl.hpp:264
Tempus::StepperBackwardEuler::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:72
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperBackwardEuler::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperBackwardEuler_decl.hpp:149
Tempus::StepperBackwardEuler::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperBackwardEuler_impl.hpp:139
Tempus::StepperBackwardEuler::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperBackwardEuler_decl.hpp:67
Tempus::StepperBackwardEuler::computePredictor
virtual void computePredictor(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Compute predictor given the supplied stepper.
Definition: Tempus_StepperBackwardEuler_impl.hpp:221
Tempus_WrapperModelEvaluator.hpp
Tempus::StepperBackwardEuler::computeStepSolver
virtual void computeStepSolver(Thyra::LinearOpWithSolveBase< Scalar > &jacobian_solver, const Teuchos::Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &x, const Teuchos::Array< Scalar > &t, const Thyra::VectorBase< Scalar > &p, const int param_index) const
Compute time step Jacobian solver.
Definition: Tempus_StepperBackwardEuler_impl.hpp:415
Tempus::TimeDerivative
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
Definition: Tempus_TimeDerivative.hpp:32
Tempus::StepperBackwardEuler::setInitialGuess
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver.
Definition: Tempus_StepperBackwardEuler_decl.hpp:61
Tempus::StepperBackwardEuler::getXDotTemp
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotTemp(Teuchos::RCP< const Thyra::VectorBase< Scalar > > x) const
Provide temporary xDot memory for Stepper if SolutionState doesn't.
Definition: Tempus_StepperBackwardEuler_impl.hpp:211
Tempus::StepperBackwardEuler::computeStepJacobian
virtual void computeStepJacobian(Thyra::LinearOpBase< Scalar > &jacobian, const Teuchos::Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &x, const Teuchos::Array< Scalar > &t, const Thyra::VectorBase< Scalar > &p, const int param_index, const int deriv_index) const
Compute time step Jacobian.
Definition: Tempus_StepperBackwardEuler_impl.hpp:381
Tempus::StepperBackwardEuler::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperBackwardEuler_impl.hpp:340
Tempus::StepperBackwardEuler::predictorStepper_
Teuchos::RCP< Stepper< Scalar > > predictorStepper_
Definition: Tempus_StepperBackwardEuler_decl.hpp:148
Tempus::StepperBackwardEulerTimeDerivative::~StepperBackwardEulerTimeDerivative
virtual ~StepperBackwardEulerTimeDerivative()
Destructor.
Definition: Tempus_StepperBackwardEuler_decl.hpp:176
Tempus::StepperBackwardEuler::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperBackwardEuler_impl.hpp:247
Tempus_StepperBackwardEulerObserver.hpp
Tempus::StepperBackwardEuler::computeStepResidual
virtual void computeStepResidual(Thyra::VectorBase< Scalar > &residual, const Teuchos::Array< Teuchos::RCP< const Thyra::VectorBase< Scalar > > > &x, const Teuchos::Array< Scalar > &t, const Thyra::VectorBase< Scalar > &p, const int param_index) const
Compute time step residual.
Definition: Tempus_StepperBackwardEuler_impl.hpp:366
Tempus::StepperBackwardEuler::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperBackwardEuler_impl.hpp:274