Split ODE Solvers
The solvers which are available for a
SplitODEProblem depend on the input linearity and number of components. Each solver has functional form (or many) that it allows.
Implicit-Explicit (IMEX) ODE
The Implicit-Explicit (IMEX) ODE is a
SplitODEProblem with two functions:
where the first function is the stiff part and the second function is the non-stiff part (implicit integration on
f1, explicit integration on
The recommended method in most cases is
KenCarp4. In cases of extreme stiffness or for high tolerances,
KenCarp3 can be a good choice. The
ARKODE methods are generally inefficient and diverge unless the options are tweaked to match the problem, though for large enough PDEs the
ARKODE method with
linear_solver=:GMRES is a good choice.
SplitEuler: 1st order fully explicit method. Used for testing accuracy of splits.
KenCarp3: An A-L stable stiffly-accurate 3rd order ESDIRK method
KenCarp4: An A-L stable stiffly-accurate 4rd order ESDIRK method
KenCarp5: An A-L stable stiffly-accurate 5rd order ESDIRK method
ARKODE: An additive Runge-Kutta method. Order between 3rd and 5th. For a list of available options, please see its ODE solver page
The Semilinear ODE is a
SplitODEProblem with one linear operator and one nonlinear function:
See the documentation page for DiffEqOperator for details about how to define linear operators from a matrix or finite difference discretization of derivative operators.
The appropriate algorithms for this form are:
GenericIIF1- First order Implicit Integrating Factor method. Fixed timestepping only.
GenericIIF2- Second order Implicit Integrating Factor method. Fixed timestepping only.
LawsonEuler- First order exponential Euler scheme. Fixed timestepping only.
NorsettEuler- First order exponential-RK scheme. Fixed timestepping only. Alias:
ETD2- Second order Exponential Time Differencing method. Fixed timestepping only.
ETDRK4- 4th order exponential-RK scheme. Fixed timestepping only.
Note that the generic algorithms allow for a choice of
By default, the exponential methods cache matrix functions such as
exmp(dt*A) to accelerate the time stepping for small systems. For large systems, using Krylov-based versions of the methods can allow for lazy calculation of
expm(dt*A)*v and similar entities, and thus improve performance. To tell a solver to use Krylov methods, pass
krylov=true to its constructor. You can also manually set the size of the Krylov subspace by setting the
m parameter, which defaults to 30. For example
constructs a Lawson-Euler method which uses a size-50 Krylov subspace. Note that
m only sets an upper bound to the Krylov subspace size. If a convergence criterion is met (determined by the
reltol of the integrator), "happy breakdown" will occur and the Krylov subspace will only be constructed partially.
Currently only the
NorsettEuler methods support Krylov methods.