9#ifndef Tempus_StepperRKBase_hpp
10#define Tempus_StepperRKBase_hpp
12#include "Thyra_VectorBase.hpp"
14#include "Tempus_config.hpp"
15#include "Tempus_Stepper.hpp"
19#include "Tempus_Stepper_ErrorNorm.hpp"
36 virtual Teuchos::RCP<const RKButcherTableau<Scalar> >
getTableau()
const
58 if (errCalculator != Teuchos::null) {
70 if (appAction == Teuchos::null) {
80 virtual Teuchos::RCP<StepperRKAppAction<Scalar> >
getAppAction()
const
86 if (pl != Teuchos::null) {
89 if (pl->isParameter(
"Use Embedded"))
94 virtual Teuchos::RCP<RKButcherTableau<Scalar> >
97 TEUCHOS_TEST_FOR_EXCEPTION(pl == Teuchos::null,std::runtime_error,
98 "Error parsing general tableau. ParameterList is null.\n");
100 Teuchos::RCP<RKButcherTableau<Scalar> > tableau;
102 Teuchos::RCP<Teuchos::ParameterList> tableauPL = sublist(pl,
"Tableau",
true);
103 std::size_t numStages = 0;
104 int order = tableauPL->get<
int>(
"order");
105 Teuchos::SerialDenseMatrix<int,Scalar> A;
106 Teuchos::SerialDenseVector<int,Scalar> b;
107 Teuchos::SerialDenseVector<int,Scalar> c;
108 Teuchos::SerialDenseVector<int,Scalar> bstar;
112 std::vector<std::string> A_row_tokens;
117 numStages = A_row_tokens.size();
120 A.shape(Teuchos::as<int>(numStages),Teuchos::as<int>(numStages));
123 for(std::size_t row=0;row<numStages;row++) {
125 std::vector<std::string> tokens;
128 std::vector<double> values;
131 TEUCHOS_TEST_FOR_EXCEPTION(values.size()!=numStages,std::runtime_error,
132 "Error parsing A matrix, wrong number of stages in row "
135 for(std::size_t col=0;col<numStages;col++)
136 A(row,col) = values[col];
141 b.size(Teuchos::as<int>(numStages));
142 c.size(Teuchos::as<int>(numStages));
146 std::vector<std::string> tokens;
148 std::vector<double> values;
151 TEUCHOS_TEST_FOR_EXCEPTION(values.size()!=numStages,std::runtime_error,
152 "Error parsing b vector, wrong number of stages.\n");
154 for(std::size_t i=0;i<numStages;i++)
160 std::vector<std::string> tokens;
162 std::vector<double> values;
165 TEUCHOS_TEST_FOR_EXCEPTION(values.size()!=numStages,std::runtime_error,
166 "Error parsing c vector, wrong number of stages.\n");
168 for(std::size_t i=0;i<numStages;i++)
172 if (tableauPL->isParameter(
"bstar") &&
173 tableauPL->get<std::string>(
"bstar") !=
"") {
174 bstar.size(Teuchos::as<int>(numStages));
177 std::vector<std::string> tokens;
179 tokens, tableauPL->get<std::string>(
"bstar"),
" ",
true);
180 std::vector<double> values;
183 TEUCHOS_TEST_FOR_EXCEPTION(values.size()!=numStages,std::runtime_error,
184 "Error parsing bstar vector, wrong number of stages.\n"
185 " Number of RK stages = " << numStages <<
"\n"
186 " Number of bstar values = " << values.size() <<
"\n");
188 for(std::size_t i=0;i<numStages;i++)
189 bstar(i) = values[i];
192 "From ParameterList",A,b,c,order,order,order,bstar));
195 "From ParameterList",A,b,c,order,order,order));
209 Teuchos::RCP<Thyra::VectorBase<Scalar> >
ee_;
210 Teuchos::RCP<Thyra::VectorBase<Scalar> >
abs_u0;
211 Teuchos::RCP<Thyra::VectorBase<Scalar> >
abs_u;
212 Teuchos::RCP<Thyra::VectorBase<Scalar> >
sc;
Application Action for StepperRKBase.
Base class for Runge-Kutta methods, ExplicitRK, DIRK and IMEX.
Teuchos::RCP< Thyra::VectorBase< Scalar > > ee_
virtual void setEmbeddedMemory()
virtual int getStageNumber() const
virtual void setStageNumber(int s)
Teuchos::RCP< Thyra::VectorBase< Scalar > > abs_u0
virtual Scalar getOrderMax() const
Teuchos::RCP< StepperRKAppAction< Scalar > > stepperRKAppAction_
virtual void setUseEmbedded(bool a)
virtual int getNumberOfStages() const
Teuchos::RCP< Thyra::VectorBase< Scalar > > sc
virtual void setStepperRKValues(Teuchos::RCP< Teuchos::ParameterList > pl)
Set StepperRK member data from the ParameterList.
virtual Scalar getOrderMin() const
virtual Teuchos::RCP< RKButcherTableau< Scalar > > createTableau(Teuchos::RCP< Teuchos::ParameterList > pl)
virtual void setErrorNorm(const Teuchos::RCP< Stepper_ErrorNorm< Scalar > > &errCalculator=Teuchos::null)
virtual Scalar getOrder() const
virtual void setAppAction(Teuchos::RCP< StepperRKAppAction< Scalar > > appAction)
virtual Teuchos::RCP< const RKButcherTableau< Scalar > > getTableau() const
virtual bool getUseEmbedded() const
int stageNumber_
The current Runge-Kutta stage number, {0,...,s-1}. -1 indicates outside stage loop.
Teuchos::RCP< Thyra::VectorBase< Scalar > > abs_u
Teuchos::RCP< Stepper_ErrorNorm< Scalar > > stepperErrorNormCalculator_
virtual Teuchos::RCP< StepperRKAppAction< Scalar > > getAppAction() const
Teuchos::RCP< RKButcherTableau< Scalar > > tableau_
Default modifier for StepperRK.
Stepper_ErrorNorm provides error norm calcualtions for variable time stepping.
Thyra Base interface for time steppers.
bool isInitialized_
True if stepper's member data is initialized.
void setStepperValues(const Teuchos::RCP< Teuchos::ParameterList > pl)
Set Stepper member data from ParameterList.
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
void TokensToDoubles(std::vector< double > &values, const std::vector< std::string > &tokens)
Turn a vector of tokens into a vector of doubles.
void StringTokenizer(std::vector< std::string > &tokens, const std::string &str, const std::string delimiters, bool trim)
Tokenize a string, put tokens in a vector.