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=NullParameters();kwargs...)
SplitODEProblem{isinplace}(f1,f2,u0,tspan,p=NullParameters();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.
Parameters are optional, and if not given then a NullParameters() singleton will be used which will throw nice errors if you try to index non-existent parameters. Any extra keyword arguments are passed on to the solvers. For example, if you set a callback in the problem, then that callback will be added in every solve call.
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. Defaults toNullParameterskwargs: The keyword arguments passed onto the solves.