|
| ARKStep () |
| No memory allocation. More...
|
|
| ARKStep (std::string name, const ContainerType ©able) |
| Construct with given name. More...
|
|
| ARKStep (ConvertsToButcherTableau< value_type > ex_tableau, ConvertsToButcherTableau< value_type > im_tableau, const ContainerType ©able) |
| Construct with two Butcher Tableaus. More...
|
|
template<class ... Params> |
void | construct (Params &&...ps) |
| Perfect forward parameters to one of the constructors. More...
|
|
const ContainerType & | copyable () const |
| Return an object of same size as the object used for construction. More...
|
|
template<class ExplicitRHS , class ImplicitRHS , class Solver > |
void | step (const std::tuple< ExplicitRHS, ImplicitRHS, Solver > &ode, value_type t0, const ContainerType &u0, value_type &t1, ContainerType &u1, value_type dt, ContainerType &delta) |
| Advance one step. More...
|
|
unsigned | order () const |
| global order of the method given by the current Butcher Tableau More...
|
|
unsigned | embedded_order () const |
| global order of the embedding given by the current Butcher Tableau More...
|
|
unsigned | num_stages () const |
| number of stages of the method given by the current Butcher Tableau More...
|
|
template<class ContainerType>
struct dg::ARKStep< ContainerType >
Additive Runge Kutta (semi-implicit) time-step with error estimate following The ARKode library
Currently, the possible Butcher Tableaus for a fully implicit-explicit scheme are the "Cavaglieri-3-1-2", "Cavaglieri-4-2-3", "ARK-4-2-3", "ARK-6-3-4" and "ARK-8-4-5" combinations.
- Note
- All currently possible schemes enjoy the FSAL qualitiy in the sense that only
s-1
implicit solves and 1
evaluation of the implicit part are needed per step; the Cavaglieri methods do not require evaluations of the implicit part at all
- Attention
- When you use the ARKStep in combination with the Adaptive time step algorithm pay attention to solve the implicit part with sufficient accuracy. Else, the error propagates into the time controller, which will then choose the timestep as if the implicit part was explicit i.e. far too small. This might have to do with stiffness-leakage [Kennedy and Carpenter, Appl. num. Math., (2003)]: "An essential requirement for the viability of stiff/nonstiff IMEX schemes is that the stiffness remains
truely separable. If this were not the case then stiffness would leak out of the stiff terms and stiffen the
nonstiff terms. It would manifest itself as a loss in stability or a forced reduction in stepsize of the nonstiff
terms. A more expensive fully implicit approach might then be required, and hence, methods that leak
substantial stiffness might best be avoided".
- Template Parameters
-
ContainerType | Any class for which a specialization of TensorTraits exists and which fulfills the requirements of the there defined data and execution policies derived from AnyVectorTag and AnyPolicyTag . Among others
dg::HVec (serial), dg::DVec (cuda / omp), dg::MHVec (mpi + serial) or dg::MDVec (mpi + cuda / omp)
std::vector<dg::DVec> (vector of shared device vectors), std::array<double, 4> (array of 4 doubles) or std::map < std::string, dg::DVec> ( a map of named vectors)
double (scalar) and other primitive types ...
If there are several ContainerTypes in the argument list, then TensorTraits must exist for all of them |
- See also
- See The dg dispatch system for a detailed explanation of our type dispatch system