Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_StepperDIRK_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_StepperDIRK_decl_hpp
10 #define Tempus_StepperDIRK_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_StepperRKBase.hpp"
14 #include "Tempus_StepperImplicit.hpp"
16 
17 
18 namespace Tempus {
19 
155 template<class Scalar>
156 class StepperDIRK : virtual public Tempus::StepperImplicit<Scalar>,
157  virtual public Tempus::StepperRKBase<Scalar>
158 {
159 public:
160 
162 
163  virtual void initialize();
165 
167  virtual void setInitialConditions (
168  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
169 
171  virtual void setResetInitialGuess(bool reset_guess)
172  { resetGuess_ = reset_guess; }
173  virtual bool getResetInitialGuess() const
174  { return resetGuess_; }
175 
177  virtual void takeStep(
178  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
179 
182 
183  virtual bool isExplicit() const
184  {
185  const int numStages = this->tableau_->numStages();
187  bool isExplicit = false;
188  for (int i=0; i<numStages; ++i) if (A(i,i) == 0.0) isExplicit = true;
189  return isExplicit;
190  }
191  virtual bool isImplicit() const {return true;}
192  virtual bool isExplicitImplicit() const
193  {return isExplicit() && isImplicit();}
194  virtual bool isOneStepMethod() const {return true;}
195  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
196 
197  virtual OrderODE getOrderODE() const {return FIRST_ORDER_ODE;}
198 
199  virtual std::string getDescription() const = 0;
201 
202  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > >& getStageXDot() {return stageXDot_;}
204 
206  virtual Scalar getAlpha(const Scalar dt) const
207  {
209  return Scalar(1.0)/(dt*A(0,0)); // Getting the first diagonal coeff!
210  }
212  virtual Scalar getBeta (const Scalar ) const { return Scalar(1.0); }
213 
215 
217 
219 
220  virtual void describe(Teuchos::FancyOStream & out,
221  const Teuchos::EVerbosityLevel verbLevel) const;
223 
224  virtual bool isValidSetup(Teuchos::FancyOStream & out) const;
225 
228  {
229  if (pl != Teuchos::null) {
230  // Can not validate because of optional Parameters, e.g., 'Solver Name'.
231  //pl->validateParametersAndSetDefaults(*this->getValidParameters());
232  this->setStepperValues(pl);
233  if ( pl->isParameter("Use Embedded") )
234  this->setUseEmbedded(pl->get<bool>("Use Embedded"));
235  if ( pl->isParameter("Zero Initial Guess") )
236  this->setZeroInitialGuess(pl->get<bool>("Zero Initial Guess"));
237  if (pl->isParameter("Solver Name") )
238  this->setStepperSolverValues(pl);
239  }
240  }
241 
242 
243 protected:
244 
246  virtual void setupDefault();
247 
249  virtual void setup(
250  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& wrapperModel,
252  bool useFSAL,
253  std::string ICConsistency,
254  bool ICConsistencyCheck,
255  bool useEmbedded,
256  bool zeroInitialGuess,
257  const Teuchos::RCP<StepperRKAppAction<Scalar> >& stepperRKAppAction);
258 
259  virtual void setupTableau() = 0;
260 
261  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > > stageXDot_;
263 
264  bool resetGuess_ = true;
265 };
266 
267 
280 template <typename Scalar>
282  : virtual public Tempus::TimeDerivative<Scalar>
283 {
284 public:
285 
288  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde)
289  { initialize(s, xTilde); }
290 
293 
295  virtual void compute(
298  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
299  {
300  xDotDot = Teuchos::null;
301  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xTilde_);
302  }
303 
304  virtual void initialize(Scalar s,
306  { s_ = s; xTilde_ = xTilde; }
307 
308 private:
309 
311  Scalar s_; // = 1/(dt*a_ii)
312 };
313 
314 
315 } // namespace Tempus
316 
317 #endif // Tempus_StepperDIRK_decl_hpp
virtual Scalar getBeta(const Scalar) const
Return beta = d(x)/dx.
Teuchos::RCP< Thyra::VectorBase< Scalar > > xTilde_
virtual bool isMultiStepMethod() const
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde_
Teuchos::RCP< Teuchos::ParameterList > getValidParametersBasicDIRK() const
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Teuchos::RCP< RKButcherTableau< Scalar > > tableau_
T & get(const std::string &name, T def_value)
virtual void setUseEmbedded(bool a)
virtual void setupTableau()=0
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 setResetInitialGuess(bool reset_guess)
Set parameter so that the initial guess is reset at the beginning of each timestep.
Base class for Runge-Kutta methods, ExplicitRK, DIRK and IMEX.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
bool isParameter(const std::string &name) const
Diagonally Implicit Runge-Kutta (DIRK) time stepper.
virtual bool isExplicitImplicit() const
Thyra Base interface for implicit time steppers.
Application Action for StepperRKBase.
virtual bool isExplicit() const
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Set the initial conditions and make them consistent.
virtual void initialize()
Initialize after construction and changing input parameters.
virtual bool isImplicit() const
Time-derivative interface for DIRK.
virtual void setupDefault()
Default setup for constructor.
virtual void setStepperDIRKValues(Teuchos::RCP< Teuchos::ParameterList > pl)
Set StepperDIRK member data from the ParameterList.
void setStepperSolverValues(Teuchos::RCP< Teuchos::ParameterList > pl)
Set solver from ParameterList.
virtual void setZeroInitialGuess(bool zIG)
Set parameter so that the initial guess is set to zero (=True) or use last timestep (=False)...
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
void setStepperValues(const Teuchos::RCP< Teuchos::ParameterList > pl)
Set Stepper member data from ParameterList.
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > & getStageXDot()
Stepper integrates first-order ODEs.
virtual bool isOneStepMethod() const
virtual std::string getDescription() const =0
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual Scalar getAlpha(const Scalar dt) const
Return alpha = d(xDot)/dx.
virtual OrderODE getOrderODE() 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 setup(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &wrapperModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Setup for constructor.
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageXDot_
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
virtual bool getResetInitialGuess() const
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Teuchos::RCP< Thyra::VectorBase< Scalar > > & getXTilde()
StepperDIRKTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
Constructor.