9#ifndef Tempus_StepperDIRK_decl_hpp
10#define Tempus_StepperDIRK_decl_hpp
12#include "Tempus_config.hpp"
14#include "Tempus_StepperImplicit.hpp"
155template<
class Scalar>
189 const int numStages = this->
tableau_->numStages();
190 Teuchos::SerialDenseMatrix<int,Scalar> A = this->
tableau_->A();
192 for (
int i=0; i<numStages; ++i)
if (A(i,i) == 0.0)
isExplicit =
true;
210 virtual Scalar
getAlpha(
const Scalar dt)
const override
212 const int numStages = this->
tableau_->numStages();
213 const Teuchos::SerialDenseMatrix<int,Scalar> & A=this->
tableau_->A();
215 for (
int i=0; i<numStages; ++i) {
216 if (A(i,i) != 0.0) aii = A(i,i);
219 return (aii == 0.0) ? std::numeric_limits<Scalar>::infinity() : Scalar(1.0)/(dt*aii);
222 virtual Scalar
getBeta (
const Scalar )
const override {
return Scalar(1.0); }
225 virtual Scalar
getAlpha(
const Scalar dt,
int i)
const
227 const Teuchos::SerialDenseMatrix<int,Scalar> & A=this->
tableau_->A();
228 return (A(i,i) == 0.0) ? std::numeric_limits<Scalar>::infinity() : Scalar(1.0)/(dt*A(i,i));
231 virtual Teuchos::RCP<const Teuchos::ParameterList>
getValidParameters()
const override;
237 virtual void describe(Teuchos::FancyOStream & out,
238 const Teuchos::EVerbosityLevel verbLevel)
const override;
241 virtual bool isValidSetup(Teuchos::FancyOStream & out)
const override;
246 if (pl != Teuchos::null) {
250 if ( pl->isParameter(
"Use Embedded") )
252 if ( pl->isParameter(
"Zero Initial Guess") )
254 if (pl->isParameter(
"Solver Name") )
268 const Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> >& solver,
270 std::string ICConsistency,
271 bool ICConsistencyCheck,
273 bool zeroInitialGuess,
281 std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > >
stageXDot_;
282 Teuchos::RCP<Thyra::VectorBase<Scalar> >
xTilde_;
300template <
typename Scalar>
320 xDotDot = Teuchos::null;
330 Teuchos::RCP<const Thyra::VectorBase<Scalar> >
xTilde_;
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Time-derivative interface for DIRK.
StepperDIRKTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
Constructor.
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
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 ~StepperDIRKTimeDerivative()
Destructor.
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde_
Diagonally Implicit Runge-Kutta (DIRK) time stepper.
virtual void setStepperDIRKValues(Teuchos::RCP< Teuchos::ParameterList > pl)
Set StepperDIRK member data from the ParameterList.
virtual void initialize() override
Initialize after construction and changing input parameters.
Teuchos::RCP< Thyra::VectorBase< Scalar > > xTilde_
virtual void setupDefault()
Default setup for constructor.
virtual bool isOneStepMethod() const override
virtual Scalar getAlpha(const Scalar dt) const override
Return alpha = d(xDot)/dx.
Teuchos::RCP< Thyra::VectorBase< Scalar > > & getXTilde()
virtual bool isExplicitImplicit() const override
virtual Scalar getAlpha(const Scalar dt, int i) const
Return alpha = d(xDot)/dx for stage i.
virtual bool isMultiStepMethod() const override
virtual bool isValidSetup(Teuchos::FancyOStream &out) const override
virtual bool getResetInitialGuess() const
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) override
Take the specified timestep, dt, and return true if successful.
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > & getStageXDot()
virtual std::string getDescription() const =0
Teuchos::RCP< Teuchos::ParameterList > getValidParametersBasicDIRK() const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) override
Set the initial conditions and make them consistent.
virtual void setResetInitialGuess(bool reset_guess)
Set parameter so that the initial guess is reset at the beginning of each timestep.
virtual OrderODE getOrderODE() const override
virtual Scalar getBeta(const Scalar) const override
Return beta = d(x)/dx.
virtual void setupTableau()=0
virtual bool isImplicit() const override
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
virtual bool isExplicit() const override
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel) override
Set the model.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState() override
Get a default (initial) StepperState.
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.
virtual void setEmbeddedMemory() override
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageXDot_
Thyra Base interface for implicit time steppers.
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).
Application Action for StepperRKBase.
Base class for Runge-Kutta methods, ExplicitRK, DIRK and IMEX.
virtual void setUseEmbedded(bool a)
Teuchos::RCP< RKButcherTableau< Scalar > > tableau_
void setStepperValues(const Teuchos::RCP< Teuchos::ParameterList > pl)
Set Stepper member data from ParameterList.
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
@ FIRST_ORDER_ODE
Stepper integrates first-order ODEs.