Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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_config.hpp"
13 #include "Tempus_StepperImplicit.hpp"
17 
18 namespace Tempus {
19 
81 template <class Scalar>
82 class StepperTrapezoidal : virtual public Tempus::StepperImplicit<Scalar> {
83  public:
90 
93  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
95  bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck,
96  bool zeroInitialGuess,
98  stepperTrapAppAction);
99 
101 
102  virtual void setAppAction(
104 
106  const
107  {
108  return stepperTrapAppAction_;
109  }
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 2.0; }
122  virtual Scalar getOrderMin() const { return 2.0; }
123  virtual Scalar getOrderMax() const { return 2.0; }
124 
125  virtual bool isExplicit() const { return false; }
126  virtual bool isImplicit() const { return true; }
127  virtual bool isExplicitImplicit() const
128  {
129  return isExplicit() && isImplicit();
130  }
131  virtual bool isOneStepMethod() const { return true; }
132  virtual bool isMultiStepMethod() const { return !isOneStepMethod(); }
133  virtual void setUseFSAL(bool a) { this->setUseFSALTrueOnly(a); }
134  virtual OrderODE getOrderODE() const { return FIRST_ORDER_ODE; }
136 
138  virtual Scalar getAlpha(const Scalar dt) const { return Scalar(2.0) / dt; }
140  virtual Scalar getBeta(const Scalar) const { return Scalar(1.0); }
141 
143 
144  virtual void describe(Teuchos::FancyOStream& out,
145  const Teuchos::EVerbosityLevel verbLevel) const;
147 
148  virtual bool isValidSetup(Teuchos::FancyOStream& out) const;
149 
150  private:
152 };
153 
162 template <typename Scalar>
164  : virtual public Tempus::TimeDerivative<Scalar> {
165  public:
168  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld,
169  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xDotOld)
170  {
171  initialize(s, xOld, xDotOld);
172  }
173 
176 
178  virtual void compute(
181  Teuchos::RCP<Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
182  {
183  xDotDot = Teuchos::null;
184  // Calculate the Trapezoidal method x dot vector
185  Thyra::V_StVpStV(xDot.ptr(), s_, *x, -s_, *xOld_);
186  Thyra::V_VpStV(xDot.ptr(), *xDot, Scalar(-1.0), *xDotOld_);
187  }
188 
189  virtual void initialize(
190  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xOld,
191  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xDotOld)
192  {
193  s_ = s;
194  xOld_ = xOld;
195  xDotOld_ = xDotOld;
196  }
197 
198  private:
199  Scalar s_; // = 1.0/(dt/2)
202 };
203 
205 // ------------------------------------------------------------------------
206 template <class Scalar>
208  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
210 
211 } // namespace Tempus
212 
213 #endif // Tempus_StepperTrapezoidal_decl_hpp
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Trapezoidal method time stepper.
StepperTrapezoidalTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xDotOld)
Constructor.
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xDotOld)
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xDotOld_
Teuchos::RCP< StepperTrapezoidalAppAction< Scalar > > stepperTrapAppAction_
Teuchos::RCP< StepperTrapezoidal< Scalar > > createStepperTrapezoidal(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Set the initial conditions and make them consistent.
Thyra Base interface for implicit time steppers.
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.
void setUseFSALTrueOnly(bool a)
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xOld_
Application Action for StepperTrapezoidal.
virtual void setAppAction(Teuchos::RCP< StepperTrapezoidalAppAction< Scalar > > appAction)
Time-derivative interface for Trapezoidal method.
virtual Scalar getAlpha(const Scalar dt) const
Return alpha = d(xDot)/dx.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual Scalar getBeta(const Scalar) const
Return beta = d(x)/dx.
Stepper integrates first-order ODEs.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual Teuchos::RCP< StepperTrapezoidalAppAction< Scalar > > getAppAction() const