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_config.hpp"
13 #include "Tempus_StepperImplicit.hpp"
17 
18 
19 namespace Tempus {
20 
74 template<class Scalar>
76  virtual public Tempus::StepperImplicit<Scalar>,
77  virtual public Tempus::StepperOptimizationInterface<Scalar>
78 {
79 public:
80 
87 
90  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
91  const Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> >& solver,
92  const Teuchos::RCP<Stepper<Scalar> >& predictorStepper,
93  bool useFSAL,
94  std::string ICConsistency,
95  bool ICConsistencyCheck,
96  bool zeroInitialGuess,
97  const Teuchos::RCP<StepperBackwardEulerAppAction<Scalar> >& stepperBEAppAction);
98 
100 
101  virtual void setAppAction(
102  Teuchos::RCP<StepperBackwardEulerAppAction<Scalar> > appAction);
103 
104  virtual Teuchos::RCP<StepperBackwardEulerAppAction<Scalar> > getAppAction() const
105  { return stepperBEAppAction_; }
106 
108  void setPredictor(std::string predictorType = "None");
109  void setPredictor(Teuchos::RCP<Stepper<Scalar> > predictorStepper);
110 
112  virtual void setModel(
113  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel) override;
114 
116  virtual void setInitialConditions (
117  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) override;
118 
120  virtual void takeStep(
121  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) override;
122 
124  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState() override;
125  virtual Scalar getOrder() const override {return 1.0;}
126  virtual Scalar getOrderMin() const override {return 1.0;}
127  virtual Scalar getOrderMax() const override {return 1.0;}
128 
129  virtual bool isExplicit() const override {return false;}
130  virtual bool isImplicit() const override {return true;}
131  virtual bool isExplicitImplicit() const override
132  {return isExplicit() && isImplicit();}
133  virtual bool isOneStepMethod() const override {return true;}
134  virtual bool isMultiStepMethod() const override {return !isOneStepMethod();}
135  virtual OrderODE getOrderODE() const override {return FIRST_ORDER_ODE;}
137 
139  virtual Scalar getAlpha(const Scalar dt) const override { return Scalar(1.0)/dt; }
141  virtual Scalar getBeta (const Scalar ) const override { return Scalar(1.0); }
142 
144  virtual void computePredictor(
145  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
146 
148  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const override;
149 
151 
152  virtual void describe(Teuchos::FancyOStream & out,
153  const Teuchos::EVerbosityLevel verbLevel) const override;
155 
156  virtual bool isValidSetup(Teuchos::FancyOStream & out) const override;
157 
159 
160  virtual int stencilLength() const override;
161  virtual void computeStepResidual(
162  Thyra::VectorBase<Scalar>& residual,
163  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
164  const Teuchos::Array<Scalar>& t,
165  const Thyra::VectorBase<Scalar>& p,
166  const int param_index) const override;
167  virtual void computeStepJacobian(
168  Thyra::LinearOpBase<Scalar>& jacobian,
169  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
170  const Teuchos::Array<Scalar>& t,
171  const Thyra::VectorBase<Scalar>& p,
172  const int param_index,
173  const int deriv_index) const override;
174  virtual void computeStepParamDeriv(
176  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
177  const Teuchos::Array<Scalar>& t,
178  const Thyra::VectorBase<Scalar>& p,
179  const int param_index) const override;
180  virtual void computeStepSolver(
181  Thyra::LinearOpWithSolveBase<Scalar>& jacobian_solver,
182  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
183  const Teuchos::Array<Scalar>& t,
184  const Thyra::VectorBase<Scalar>& p,
185  const int param_index) const override;
187 
188 private:
189 
192  const Thyra::ModelEvaluatorBase::OutArgs<Scalar>& outArgs,
193  const Teuchos::Array< Teuchos::RCP<const Thyra::VectorBase<Scalar> > >& x,
194  const Teuchos::Array<Scalar>& t,
195  const Thyra::VectorBase<Scalar>& p,
196  const int param_index,
197  const int deriv_index = 0) const;
198 
199 private:
200 
201  Teuchos::RCP<Stepper<Scalar> > predictorStepper_;
202  Teuchos::RCP<StepperBackwardEulerAppAction<Scalar> > stepperBEAppAction_;
203 
204 };
205 
214 template <typename Scalar>
216  : virtual public Tempus::TimeDerivative<Scalar>
217 {
218 public:
219 
222  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld)
223  { initialize(s, xOld); }
224 
227 
229  virtual void compute(
230  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x,
231  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDot,
232  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
233  {
234  xDotDot = Teuchos::null;
235  // Calculate the Backward Euler x dot vector
236  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xOld_);
237  }
238 
239  virtual void initialize(Scalar s,
240  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld)
241  { s_ = s; xOld_ = xOld; }
242 
243 private:
244 
245  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld_;
246  Scalar s_; // = 1.0/dt
247 };
248 
249 
251 // ------------------------------------------------------------------------
252 template<class Scalar>
253 Teuchos::RCP<StepperBackwardEuler<Scalar> >
255  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
256  Teuchos::RCP<Teuchos::ParameterList> pl);
257 
258 
259 } // namespace Tempus
260 
261 #endif // Tempus_StepperBackwardEuler_decl_hpp
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld_
Teuchos::RCP< StepperBackwardEulerAppAction< Scalar > > stepperBEAppAction_
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.
virtual OrderODE getOrderODE() const override
virtual void computePredictor(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Compute predictor given the supplied stepper.
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 override
Compute time step derivative w.r.t. model parameters.
virtual Scalar getBeta(const Scalar) const override
Return beta = d(x)/dx.
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 override
Compute time step residual.
Application Action for StepperBackwardEuler.
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 override
Compute time step Jacobian solver.
Thyra Base interface for time steppers.
Thyra Base interface for implicit time steppers.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) override
Take the specified timestep, dt, and return true if successful.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const override
virtual bool isOneStepMethod() const override
virtual bool isMultiStepMethod() const override
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Return a valid ParameterList with current settings.
void setPredictor(std::string predictorType="None")
Set the predictor.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState() override
Get a default (initial) StepperState.
virtual Scalar getOrderMin() const override
virtual Scalar getAlpha(const Scalar dt) const override
Return alpha = d(xDot)/dx.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Teuchos::RCP< Stepper< Scalar > > predictorStepper_
virtual void setAppAction(Teuchos::RCP< StepperBackwardEulerAppAction< Scalar > > appAction)
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 override
Compute time step Jacobian.
virtual Teuchos::RCP< StepperBackwardEulerAppAction< Scalar > > getAppAction() const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual bool isExplicitImplicit() const override
Stepper integrates first-order ODEs.
StepperBackwardEulerTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld)
Constructor.
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) override
Set the initial conditions and make them consistent.
virtual Scalar getOrder() const override
virtual Scalar getOrderMax() const override
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
Teuchos::RCP< StepperBackwardEuler< Scalar > > createStepperBackwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel) override
Set the model.
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld)
Stepper interface to support full-space optimization.
Time-derivative interface for Backward Euler.
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.
virtual int stencilLength() const override
Return the number of solution vectors in the time step stencil.