imex

Definitions of the implicit-explicit (IMEX) time schemes for the scalar transport equation.

class IMEXRKSchemes(mesh, root=None, **default)
class IMEXRK_ARS443(mesh, root=None, **default)

Interface class responsible for configuring an additive 4-stage implicit, 4-stage explicit, 3rd-order implicit-explicit Runge-Kutta scheme that updates the current solution (\(t = t^{n}\)) to the next time step (\(t = t^{n+1}\)), see Section 2.8 in [2]. Note, currently, the splitting assumes that

  • Inviscid/convection terms are handled explicitly.

  • Viscous/diffusion terms are handled implicitly.

At the continuous level, the splitting is done as such

\[\partial_t u + g(u, \nabla u) = -f(u),\]

where \(g\) and \(f\) are the viscous and inviscid fluxes, respectively. Recall, both spatial fluxes, are discretized assuming they are on the left-hand side of the equality – hence the -ve sign in front of \(f(u)\).

Discretly, the formulation can be expressed as

\[\widetilde{\bm{M}} \bm{y}_{i} + \bm{B}_d \bm{y}_{i} = \widetilde{\bm{M}} \bm{u}^{n} -\frac{1}{a_{ii}} \sum_{j=1}^{i-1} a_{ij} \bm{B}_d \bm{y}_{j} -\frac{1}{a_{ii}} \sum_{j=1}^{i} \hat{a}_{i+1,j} \bm{B}_c \bm{y}_{j-1},\]

where

  • \(\bm{y}_{0} = \bm{u}^{n}\).

  • \(\bm{y}_{i}\) is the solution at the ith stage.

  • \(\bm{u}^{n+1} = \bm{y}_{s}\) since this is a stiffly-accurate method.

  • \(\widetilde{\bm{M}} = \frac{1}{a_{ii}\delta t} \int_{D} u v\, d\bm{x}\) is the weighted mass matrix and \(a_{ii}\) is constant (SDIRK).

  • \(\bm{B}_{d}\) and \(\bm{B}_{c}\) are the matrices of the diffusion and convection bilinear forms, respectively. See add_symbolic_spatial_forms().

  • \(a_{ij}\) and \(\hat{a}_{ij}\) are the implicit and explicit coefficients, respectively, based on the below Butcher tableau.

\[\begin{split}\begin{array}{c|cccc} 0 & 0 & \phantom{-}0 & \phantom{-}0 & 0 & 0 \\ \frac{1}{2} & 0 & \phantom{-}\frac{1}{2} & \phantom{-}0 & 0 & 0 \\ \frac{2}{3} & 0 & \phantom{-}\frac{1}{6} & \phantom{-}\frac{1}{2} & 0 & 0 \\ \frac{1}{2} & 0 & -\frac{1}{2} & \phantom{-}\frac{1}{2} & \frac{1}{2} & 0 \\ 1 & 0 & \phantom{-}\frac{3}{2} & -\frac{3}{2} & \frac{1}{2} & \frac{1}{2}\\ \hline \mathbf{SDIRK} & 0 & \phantom{-}\frac{3}{2} & -\frac{3}{2} & \frac{1}{2} & \frac{1}{2} \end{array} \qquad \qquad \begin{array}{c|ccc} 0 & 0 & \phantom{-}0 & 0 & \phantom{-}0\\ \frac{1}{2} & \frac{1}{2} & \phantom{-}0 & 0 & \phantom{-}0\\ \frac{2}{3} & \frac{11}{18} & \phantom{-}\frac{1}{18} & 0 & \phantom{-}0\\ \frac{1}{2} & \frac{5}{6} & -\frac{5}{6} & \frac{1}{2} & \phantom{-}0\\ 1 & \frac{1}{4} & \phantom{-}\frac{7}{4} & \frac{3}{4} & -\frac{7}{4}\\ \hline \mathbf{ERK} & \frac{1}{4} & \phantom{-}\frac{7}{4} & \frac{3}{4} & -\frac{7}{4} \end{array}\end{split}\]
Note:

The SDIRK coefficients are padded (zero on first row/column). In reality their indices ignore the padding, e.g. \(a_{21} = 1/6\), \(a_{22} = 1/2\).