The name LIMEX originates from L inearly IM plicit EX trapolation method. LIMEX is a one-step extrapolation method with linearly implicit Euler as base method for differential-algebraic equations (DAE) combined with an advanced order and stepsize control. LIMEX is also suitable for use in parallel programming. It is used for numerically solving linearly-implicit differential systems of the form with initial conditions. The matrix may be singular or non-constant. Extrapolation methods allow the construction of higher order approximations.
The algorithm for one basic integration step is depicted in the following pseudocode from EhrigNowakDeuflhard1996:
With basic stepsize and definition of stepsizes for the harmonic sequence we obtain different numerical solutions at points by applying steps of the linearly implicit Euler method . The monotonically increasing sequence of positive integers can be chosen alternatively as Romberg sequence, Bulirsch sequence, etc.
After the approximations for are calculated, the Aitken-Neville formula defines the higher order approximations for recursively by Parameter occurs in the asymptotic expansion of the error of one basic approximation step as exponent of stepsize h. The extrapolation method is designed in a way to cancel those terms out, thus yielding a higher order approximation scheme.
Afterwards, the integration proceeds with a new basic stepsize. Such a numerical approach with a base method (here: linearly implicit Euler) is called extrapolation method in general. A representation as extrapolation tableau for this approach for the linearly implicit Euler method of order p is given by where correspond to order p from our base method and is the desired final value. The value, from the algorithmic pseudocode defines us the maximum number of rows and is called the extrapolation order. For each , a linearly implicit Euler solution is computed on an equidistant time grid with shorter and shorter time sub-steps. At the joint final time, the value is extrapolated. Setting the extrapolation order to 0, only one step will be performed. Then, the algorithm corresponds simply to the base method which is the linearly implicit Euler.
In each step of the time integration, a new basic stepsize has to be chosen. The temporal discretization error for the diagonal entries in a suitable norm is estimated by taking the difference of the diagonal and subdiagonal extrapolation values of maximal order. This error criterion with as a user defined relative accuracy is then also called subdiagonal error criterion and used as basis for joint order and stepsize control after each time integration step.
To define an appropriate accuracy criterion, two important parameters for controlling the adaptive process of the stepsizes are the absolute tolerance atolT
and the relative tolerance rTolT
. Besides the subdiagonal error criterion, the local temporal error of the current approximate solution satisfies , where the accuracy is chosen as . Here, the relative tolerance becomes more important for large solutions and the absolute tolerance becomes more important for small solutions. (Rule of thumb: If m is the number of digits required for solution , set relative tolerance rTol to and set absolute tolerance aTol to a value at which is insignificant. In many well scaled problems a reasonable setting is aTol = rTol.)
For fixed index and current basic stepsize , a new stepsize estimate based on the accuracy will be chosen by with and a constant safety factor, describing how much the error can be underestimated. To prevent the stepsize factor from growing or shrinking too much, the factor may be bounded to a value in from below and a value in from above, depending on how much the factor should be allowed to grow.
Have a look at the time stepping tutorial and the limex header files in Kaskade’s timestepping/
folder for implementation and usage of the Limex method. The best choice is to use limexWithoutJens.hh
for calculations. It works as well for non-constant matrix and is based on the ParabolicEquation
interface and the class SemiImplicitEulerStep
. In addition to limex.hh
, it contains a mesh adaption loop for the first iteration and allows the choice of a direct or iterative solver as well as solver type and preconditioner type.
The procedure is as follows:
First, the LIMEX integrator has to be constructed. Then, the time integration steps are performed. The limexWithoutJens.hh
method for executing one step of the time integration consists of a loop for the solution of and a nested propagation loop , followed by the insertion of the intermediate results and the current step sizes into the extrapolation tableau. It also provides a method for error estimation to adapt the basic stepsize after each step of the LIMEX.
The method limexWithoutJensHierarchicEst.hh
is used with an hierarchic error estimator for mesh adaption, since the embedded error estimator cannot be used for linear finite elements.