BTCS Methods

It is also possible to solve ordinary differential equations by calculating the derivatives at a future time point. This inverse Euler method turns out to be often much stabler than conventional, forward Euler methods, especially for so-called `stiff' differential systems, which have a large range of eigenvalues. Partial differential equations or often `stiff' equations in this sense, and therefore the inverse Euler method can be useful--although it is clearly more complicated to calculate. In these `implicit' methods, the propagation is calculated by using future values of the fields in the algorithm. That is, the discretisation includes fields that are presently unknown, and must therefore be solved for numerically as part of the algorithm. While more complex, these techniques are more stable than the explicit schemes.

Thus, in the BTCS or inverse Euler method, we evaluate the right-hand side of Eq.(2.1), at the final time $ t_{n+1}$ on a discretised lattice. This gives the derivative $ \mbf{A}'$ of the vector field $ \mbf{A}$. Next, a step is taken in time, by adding $ \Delta t \mbf{A}'$ to $ \mbf{A}$ as usual.

The overall process can be summarized, as:

$\displaystyle A^i_l(t_{n+1}) - A^i_l(t_n) = \Delta t \Bigl( \sum_{j,m} \mathcal{D}^{i,j}_{l,m} A^j_m(t_{n+1}) + U^i_l [\mbf{A}_l(t_{n+1})] \Bigr),$ (A.13)

Here the matrix $ \mathcal{D}^{i,j}_{l,m}$ is a discretised version of the spatial differential operator, as before. We can write this schematically for the general case as follows:

$\displaystyle \mbf{A}(t_{n+1}) = [1 - \Delta t \mbf{D}]^{-1} \left( \mbf{A}(t_n) + \Delta t \mbf{U}[\mbf{A}(t_{n+1})] \right)$ (A.14)

A practical way to solve this equation is by iteration, since the RHS is not known initially. We can start by estimating $ A^{[1]}$, using:

$\displaystyle \mbf{A}^{[1]}(t_{n+1}) = [1 - \Delta t \mbf{D}]^{-1} \left( \mbf{A}(t_n) + \Delta t \mbf{U}[\mbf{A}(t_n)] \right)$ (A.15)

Then the estimate can be improved by iterating the process at each time-step, as follows:

$\displaystyle \mbf{A}^{[I+1]}(t_{n+1}) = [1 - \Delta t \mbf{D}]^{-1} \left( \mbf{A}(t_n) + \Delta t \mbf{U}[\mbf{A}^{[I]}(t_{n+1})] \right)$ (A.16)

Alternatively, in the case with just differential terms and scalar fields, we must solve the following matrix equation:

$\displaystyle A_{l}(t_{n+1}) = [1 - \Delta t \mathcal{D}_{l,m}]^{-1} A_m(t_n)$ (A.17)

This is more stable, but with similar discretisation errors to the previous algorithms.

Paul Cochrane 2002-04-18