# Split ODE Problems

## Mathematical Specification of a Split ODE Problem

To define a `SplitODEProblem`

, you simply need to give a two functions functions $f_1$ and $f_2$ along with an initial condition $u₀$ which define an ODE:

`f`

should be specified as `f(u,p,t)`

(or in-place as `f(du,u,p,t)`

), and `u₀`

should be an AbstractArray (or number) whose geometry matches the desired geometry of `u`

. Note that we are not limited to numbers or vectors for `u₀`

; one is allowed to provide `u₀`

as arbitrary matrices / higher dimension tensors as well.

Many splits are at least partially linear. That is the equation:

For how to define a linear function `A`

, see the documentation for the DiffEqOperators.

### Constructors

```
SplitODEProblem(f::SplitFunction,u0,tspan,p=nothing;kwargs...)
SplitODEProblem{isinplace}(f1,f2,u0,tspan,p=nothing;kwargs...)
```

The `isinplace`

parameter can be omitted and will be determined using the signature of `f2`

. Note that both `f1`

and `f2`

should support the in-place style if `isinplace`

is `true`

or they should both support the out-of-place style if `isinplace`

is `false`

. You cannot mix up the two styles.

Under the hood, a `SplitODEProblem`

is just a regular `ODEProblem`

whose `f`

is a `SplitFunction`

. Therefore you can solve a `SplitODEProblem`

using the same solvers for `ODEProblem`

. For solvers dedicated to split problems, see Split ODE Solvers.

For specifying Jacobians and mass matrices, see the DiffEqFunctions page.

### Fields

`f1`

,`f2`

: The functions in the ODE.`u0`

: The initial condition.`tspan`

: The timespan for the problem.`p`

: The parameters for the problem.`callback`

: A callback to be applied to every solver which uses the problem. Defaults to nothing.