# 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 `f2`

).

### Recommended Methods

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.

### OrdinaryDiffEq.jl

`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

### Sundials.jl

`ARKODE`

: An additive Runge-Kutta method. Order between 3rd and 5th. For a list of available options, please see its ODE solver page

## Semilinear ODE

The Semilinear ODE is a split `ODEProblem`

with one linear operator and one function:

where the first function is a constant (not time dependent)`AbstractDiffEqOperator`

and the second part is a (nonlinear) function. ../../features/diffeq_operator.html.

The appropriate algorithms for this form are:

### OrdinaryDiffEq.jl

These methods utilize caching of the exponential operators and are thus are faster than Krylov-based methods but are only suited for smaller systems where `expm(dt*A)`

can fit in memory.

`GenericIIF1`

- First order Implicit Integrating Factor method. Fixed timestepping only.`GenericIIF2`

- Second order Implicit Integrating Factor method. Fixed timestepping only.`ETD1`

- First order Exponential Time Differencing method. Not yet implemented.`ETD2`

- Second order Exponential Time Differencing method. Not yet implemented.`LawsonEuler`

- First order exponential Euler scheme. Fixed timestepping only.`NorsettEuler`

- First order exponential-RK scheme. Fixed timestepping only.`ETDRK4`

- 4th order exponential-RK scheme. Fixed timestepping only.

Note that the generic algorithms allow for a choice of `nlsolve`

.

Additional Krylov-based methods which allow for lazy calculation of `expm(dt*A)*v`

are in development.