AStableDirk4

Fourth-order diagonally implicit Runge Kutta method (Dirk) with three stages plus an update.

This method can be expressed as a Runge-Kutta method with the following Butcher Tableau:

γγ001/21/2γγ01γ2γ14γγ124(1/2γ)1112(1/2γ)2124(1/2γ)2\begin{array}{c|ccc} \gamma & \gamma & 0 & 0 \\ 1/2 & 1/2 - \gamma & \gamma & 0 \\ 1 - \gamma & 2 \gamma & 1 - 4 \gamma & \gamma \\ \hline & \dfrac{1}{24(1/2-\gamma)} & 1 - \dfrac{1}{12(1/2-\gamma)^2} & \dfrac{1}{24(1/2-\gamma)^2} \end{array}

where γ=1/2+33cos(π18)1.06857902130162881\gamma = 1/2 + \dfrac{\sqrt{3}}{3} \cos( \dfrac{\pi}{18}) \approx 1.06857902130162881

The stability function for this method is:

R(z)=0.76921266689461z30.719846311954034z2+2.20573706179581z1.01.22016884572716z33.42558337748497z2+3.20573706551682z1.0R(z) = \dfrac{-0.76921266689461 z^3 - 0.719846311954034 z^2 + 2.20573706179581 z - 1.0}{ 1.22016884572716 z^3 - 3.42558337748497 z^2 + 3.20573706551682 z - 1.0}

The method is not L-stable; it is only A-stable:

limz>R(z)=0.630414937726258\lim_{z->\infty} R(z) = -0.630414937726258

Notes

  • Method is originally due to Crouzeix (1975)

  • Since γ\gamma is slightly larger than 11, the first stage involves evaluation of the non-time residuals for t>tn+Δtt > t_n+\Delta t, while the third stage involves evaluation of the non-time residual for t<tnt < t_n, which may present an issue for the first timestep (if e.g. material properties or forcing functions are not defined for t<0t<0. We could handle this by using an alternate (more expensive) method in the first timestep, or by using a lower-order method for the first timestep and then switching to this method for subsequent timesteps.

Input Parameters

  • safe_startTrueIf true, use LStableDirk4 to bootstrap this method.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:If true, use LStableDirk4 to bootstrap this method.

  • variablesA subset of the variables that this time integrator should be applied to

    C++ Type:std::vector<VariableName>

    Unit:(no unit assumed)

    Controllable:No

    Description:A subset of the variables that this time integrator should be applied to

Optional Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Set the enabled status of the MooseObject.

Advanced Parameters

References

  1. M. Crouzeix. Sur l'approximation des equations differentielles operationelles lineaires par des methodes de Runge Kutta. PhD thesis, Universite Paris VI, Paris, 1975.[BibTeX]