The cornerstone of the SciML common interface is the problem type definition. These definitions are the encoding of mathematical problems into a numerically computable form.

Note About Symbolics and ModelingToolkit

The symbolic analog to the problem interface is the ModelingToolkit AbstractSystem. For example, ODESystem is the symbolic analog to ODEProblem. Each of these system types have a method for constructing the associated problem and function types.

Definition of the SciMLProblem Interface

The following standard principles should be adhered to across all SciMLProblem instantiations.

In-place Specification

Each SciMLProblem type can be called with an "is inplace" (iip) choice. For example:


which is a boolean for whether the function is in the inplace form (mutating to change the first value). This is automatically determined using the methods table but note that for full type-inferrability of the SciMLProblem this iip-ness should be specified.

Additionally, the functions are fully specialized to reduce the runtimes. If one would instead like to not specialize on the functions to reduce compile time, then one can set recompile to false.

Default Parameters

By default, SciMLProblem types use the SciMLBase.NullParameters() singleton to define the absence of parameters by default. The reason is because this throws an informative error if the parameter is used or accessed within the user's function, for example, p[1] will throw an informative error about forgetting to pass parameters.

Keyword Argument Splatting

All SciMLProblem types allow for passing keyword arguments that would get forwarded to the solver. The reason for this is that in many cases, like in EnsembleProblem usage, a SciMLProblem might be associated with some solver configuration, such as a callback or tolerance. Thus, for flexibility the extra keyword arguments to the SciMLProblem are carried to the solver.


SciMLProblem types include a non-public API definition of problem_type which holds a trait type corresponding to the way the SciMLProblem was constructed. For example, if a SecondOrderODEProblem constructor is used, the returned problem is simply a ODEProblem for interopability with any ODEProblem algorithm. However, in this case the problem_type will be populated with the SecondOrderODEProblem type, indicating the original definition and extra structure.


remake(thing; <keyword arguments>)

Re-construct thing with new field values specified by the keyword arguments.

Problem Traits


Determine whether the function of the given problem operates in place or not.

SciMLProblem API

Abstract SciMLProblems

abstract type DEProblem <: SciMLBase.SciMLProblem

Base type for all DifferentialEquations.jl problems. Concrete subtypes of DEProblem contain the necessary information to fully define a differential equation of the corresponding type.

abstract type AbstractLinearProblem{bType, isinplace} <: SciMLBase.SciMLProblem

Base for types which define linear systems.

abstract type AbstractNonlinearProblem{uType, isinplace} <: SciMLBase.DEProblem

Base for types which define nonlinear solve problems (f(u)=0).

Missing docstring.

Missing docstring for SciMLBase.AbstractQuadratureProblem. Check Documenter's build log for details.

abstract type AbstractODEProblem{uType, tType, isinplace} <: SciMLBase.DEProblem

Base for types which define ODE problems.

abstract type AbstractDiscreteProblem{uType, tType, isinplace} <: SciMLBase.AbstractODEProblem{uType, tType, isinplace}

Base for types which define discrete problems.

abstract type AbstractRODEProblem{uType, tType, isinplace, ND} <: SciMLBase.DEProblem

Base for types which define RODE problems.

abstract type AbstractSDEProblem{uType, tType, isinplace, ND} <: SciMLBase.AbstractRODEProblem{uType, tType, isinplace, ND}

Base for types which define SDE problems.

abstract type AbstractDAEProblem{uType, duType, tType, isinplace} <: SciMLBase.DEProblem

Base for types which define DAE problems.

abstract type AbstractDDEProblem{uType, tType, lType, isinplace} <: SciMLBase.DEProblem

Base for types which define DDE problems.

abstract type AbstractBVProblem{uType, tType, isinplace} <: SciMLBase.AbstractODEProblem{uType, tType, isinplace}

Base for types which define BVP problems.

abstract type AbstractSDDEProblem{uType, tType, lType, isinplace, ND} <: SciMLBase.DEProblem

Base for types which define SDDE problems.