Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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,
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(
103 
105  { return stepperBEAppAction_; }
106 
108  void setPredictor(std::string predictorType = "None");
109  void setPredictor(Teuchos::RCP<Stepper<Scalar> > predictorStepper);
110 
112  virtual void setInitialConditions (
113  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
114 
116  virtual void takeStep(
117  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
118 
121  virtual Scalar getOrder() const {return 1.0;}
122  virtual Scalar getOrderMin() const {return 1.0;}
123  virtual Scalar getOrderMax() const {return 1.0;}
124 
125  virtual bool isExplicit() const {return false;}
126  virtual bool isImplicit() const {return true;}
127  virtual bool isExplicitImplicit() const
128  {return isExplicit() && isImplicit();}
129  virtual bool isOneStepMethod() const {return true;}
130  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
131  virtual OrderODE getOrderODE() const {return FIRST_ORDER_ODE;}
133 
135  virtual Scalar getAlpha(const Scalar dt) const { return Scalar(1.0)/dt; }
137  virtual Scalar getBeta (const Scalar ) const { return Scalar(1.0); }
138 
140  virtual void computePredictor(
141  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
142 
144 
146 
147  virtual void describe(Teuchos::FancyOStream & out,
148  const Teuchos::EVerbosityLevel verbLevel) const;
150 
151  virtual bool isValidSetup(Teuchos::FancyOStream & out) const;
152 
154 
155  virtual int stencilLength() const;
156  virtual void computeStepResidual(
157  Thyra::VectorBase<Scalar>& residual,
159  const Teuchos::Array<Scalar>& t,
160  const Thyra::VectorBase<Scalar>& p,
161  const int param_index) const;
162  virtual void computeStepJacobian(
163  Thyra::LinearOpBase<Scalar>& jacobian,
165  const Teuchos::Array<Scalar>& t,
166  const Thyra::VectorBase<Scalar>& p,
167  const int param_index,
168  const int deriv_index) const;
169  virtual void computeStepParamDeriv(
172  const Teuchos::Array<Scalar>& t,
173  const Thyra::VectorBase<Scalar>& p,
174  const int param_index) const;
175  virtual void computeStepSolver(
176  Thyra::LinearOpWithSolveBase<Scalar>& jacobian_solver,
178  const Teuchos::Array<Scalar>& t,
179  const Thyra::VectorBase<Scalar>& p,
180  const int param_index) const;
182 
183 private:
184 
189  const Teuchos::Array<Scalar>& t,
190  const Thyra::VectorBase<Scalar>& p,
191  const int param_index,
192  const int deriv_index = 0) const;
193 
194 private:
195 
198 
199 };
200 
209 template <typename Scalar>
211  : virtual public Tempus::TimeDerivative<Scalar>
212 {
213 public:
214 
217  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld)
218  { initialize(s, xOld); }
219 
222 
224  virtual void compute(
227  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
228  {
229  xDotDot = Teuchos::null;
230  // Calculate the Backward Euler x dot vector
231  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xOld_);
232  }
233 
234  virtual void initialize(Scalar s,
236  { s_ = s; xOld_ = xOld; }
237 
238 private:
239 
241  Scalar s_; // = 1.0/dt
242 };
243 
244 
246 // ------------------------------------------------------------------------
247 template<class Scalar>
250  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
252 
253 
254 } // namespace Tempus
255 
256 #endif // Tempus_StepperBackwardEuler_decl_hpp
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld_
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Teuchos::RCP< StepperBackwardEulerAppAction< Scalar > > stepperBEAppAction_
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 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.
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 void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual void computePredictor(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Compute predictor given the supplied stepper.
virtual int stencilLength() const
Return the number of solution vectors in the time step stencil.
virtual Scalar getBeta(const Scalar) const
Return beta = d(x)/dx.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Application Action for StepperBackwardEuler.
Thyra Base interface for time steppers.
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.
Thyra Base interface for implicit time steppers.
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.
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.
void setPredictor(std::string predictorType="None")
Set the predictor.
virtual Scalar getAlpha(const Scalar dt) const
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)
Stepper integrates first-order ODEs.
StepperBackwardEulerTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld)
Constructor.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual Teuchos::RCP< StepperBackwardEulerAppAction< Scalar > > getAppAction() const
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Set the initial conditions and make them consistent.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
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 initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld)
Stepper interface to support full-space optimization.
Time-derivative interface for Backward Euler.