The SciML Common Interface for Julia Equation Solvers
The SciML common interface ties together the numerical solvers of the Julia package ecosystem into a single unified interface. It is designed for maximal efficiency and parallelism, while incorporating essential features for large-scale scientific machine learning such as differentiability, composability, and sparsity.
This documentation is made to pool together the docs of the various SciML libraries to paint the overarching picture, establish development norms, and document the shared/common functionality.
Domains of SciML
The SciML common interface covers the following domains:
Linear systems (
LinearProblem
)- Direct methods for dense and sparse
- Iterative solvers with preconditioning
Nonlinear Systems (
NonlinearProblem
)- Rootfinding for systems of nonlinear equations
Interval Nonlinear Systems
- Bracketing rootfinders for nonlinear equations with interval bounds
Integrals (quadrature) (
IntegralProblem
)Differential Equations
- Discrete equations (function maps, discrete stochastic (Gillespie/Markov) simulations) (
DiscreteProblem
) - Ordinary differential equations (ODEs) (
ODEProblem
) - Split and Partitioned ODEs (Symplectic integrators, IMEX Methods) (
SplitODEProblem
) - Stochastic ordinary differential equations (SODEs or SDEs) (
SDEProblem
) - Stochastic differential-algebraic equations (SDAEs) (
SDEProblem
with mass matrices) - Random differential equations (RODEs or RDEs) (
RODEProblem
) - Differential algebraic equations (DAEs) (
DAEProblem
andODEProblem
with mass matrices) - Delay differential equations (DDEs) (
DDEProblem
) - Neutral, retarded, and algebraic delay differential equations (NDDEs, RDDEs, and DDAEs)
- Stochastic delay differential equations (SDDEs) (
SDDEProblem
) - Experimental support for stochastic neutral, retarded, and algebraic delay differential equations (SNDDEs, SRDDEs, and SDDAEs)
- Mixed discrete and continuous equations (Hybrid Equations, Jump Diffusions) (
AbstractDEProblem
s with callbacks)
- Discrete equations (function maps, discrete stochastic (Gillespie/Markov) simulations) (
Optimization (
OptimizationProblem
)- Nonlinear (constrained) optimization
(Stochastic/Delay/Differential-Algebraic) Partial Differential Equations (
PDESystem
)- Finite difference and finite volume methods
- Interfaces to finite element methods
- Physics-Informed Neural Networks (PINNs)
- Integro-Differential Equations
- Fractional Differential Equations
The SciML common interface also includes ModelingToolkit.jl for defining such systems symbolically, allowing for optimizations like automated generation of parallel code, symbolic simplification, and generation of sparsity patterns.
Extended SciML Domain
In addition to the purely numerical representations of mathematical objects, there are also sets of problem types associated with common mathematical algorithms. These are:
Data-driven modeling
- Discrete-time data-driven dynamical systems (
DiscreteDataDrivenProblem
) - Continuous-time data-driven dynamical systems (
ContinuousDataDrivenProblem
) - Symbolic regression (
DirectDataDrivenProblem
)
- Discrete-time data-driven dynamical systems (
Uncertainty quantification and expected values (
ExpectationProblem
)
Inverse Problems, Parameter Estimation, and Structural Identification
We note that parameter estimation and inverse problems are solved directly on their constituent problem types using tools like DiffEqFlux.jl. Thus for example, there is no ODEInverseProblem
, and instead ODEProblem
is used to find the parameters p
that solve the inverse problem.
Common Interface High Level
The SciML interface is common as the usage of arguments is standardized across all of the problem domains. Underlying high level ideas include:
- All domains use the same interface of defining a
AbstractSciMLProblem
which is then solved viasolve(prob,alg;kwargs)
, wherealg
is aAbstractSciMLAlgorithm
. The keyword argument namings are standardized across the organization. AbstractSciMLProblem
s are generally defined by aSciMLFunction
which can define extra details about a model function, such as its analytical Jacobian, its sparsity patterns and so on.- There is an organization-wide method for defining linear and nonlinear solvers used within other solvers, giving maximum control of performance to the user.
- Types used within the packages are defined by the input types. For example, packages attempt to internally use the type of the initial condition as the type for the state within differential equation solvers.
solve
calls should be thread-safe and parallel-safe.init(prob,alg;kwargs)
returns an iterator which allows for directly iterating over the solution process- High performance is key. Any performance that is not at the top level is considered a bug and should be reported as such.
- All functions have an in-place and out-of-place form, where the in-place form is made to utilize mutation for high performance on large-scale problems and the out-of-place form is for compatibility with tooling like static arrays and some reverse-mode automatic differentiation systems.
User-Facing Solver Libraries
- Multi-package interface of high performance numerical solvers of differential equations
- The symbolic modeling package which implements the SciML symbolic common interface.
- Multi-package interface for specifying linear solvers (direct, sparse, and iterative), along with tools for caching and preconditioners for use in large-scale modeling.
- High performance numerical solving of nonlinear systems.
- Multi-package interface for high performance, batched, and parallelized numerical quadrature.
- Multi-package interface for numerical solving of optimization problems.
- Physics-Informed Neural Network (PINN) package for transforming partial differential equations into optimization problems.
- Automated finite difference method (FDM) package for transforming partial differential equations into nonlinear problems and ordinary differential equations.
- High level package for scientific machine learning applications, such as neural and universal differential equations, solving of inverse problems, parameter estimation, nonlinear optimal control, and more.
- Multi-package interface for data-driven modeling, Koopman dynamic mode decomposition, symbolic regression/sparsification, and automated model discovery.
- Extension to the dynamical modeling tools for calculating expectations.
Interface Implementation Libraries
- The core package defining the interface which is consumed by the modeling and solver packages.
- The core package defining the extended interface which is consumed by the differential equation solver packages.
- A package which pools together the definition of derivative overloads to define the common
sensealg
automatic differentiation interface.
- A package which pools together the definition of derivative overloads to define the common
- A package which defines the stochastic
AbstractNoiseProcess
interface for the SciML ecosystem.
- A package which defines the stochastic
- A package which defines the underlying
AbstractVectorOfArray
structure used as the output for all time series results.
- A package which defines the underlying
- The package which defines the extended
AbstractArray
interface employed throughout the SciML ecosystem.
- The package which defines the extended
Using-Facing Modeling Libraries
There are too many to name here and this will be populated when there is time!
Flowchart Example for PDE-Constrained Optimal Control
The following example showcases how the pieces of the common interface connect to solve a problem that mixes inference, symbolics, and numerics.
External Binding Libraries
- Solving differential equations in R using DifferentialEquations.jl with ModelingToolkit for JIT compilation and GPU-acceleration
- Solving differential equations in Python using DifferentialEquations.jl
Solver Libraries
There are too many to name here. Check out the SciML Organization Github Page for details.
Contributing
Please refer to the SciML ColPrac: Contributor's Guide on Collaborative Practices for Community Packages for guidance on PRs, issues, and other matters relating to contributing to SciML.
See the SciML Style Guide for common coding practices and other style decisions.
There are a few community forums:
- The #diffeq-bridged and #sciml-bridged channels in the Julia Slack
- The #diffeq-bridged and #sciml-bridged channels in the Julia Zulip
- On the Julia Discourse forums
- See also SciML Community page
Reproducibility
The documentation of this SciML package was built using these direct dependencies,
Status `~/work/SciMLBase.jl/SciMLBase.jl/docs/Project.toml`
[e30172f5] Documenter v1.10.1
[961ee093] ModelingToolkit v9.70.0
[0bca4576] SciMLBase v2.82.0 `~/work/SciMLBase.jl/SciMLBase.jl`
and using this machine and Julia version.
Julia Version 1.11.4
Commit 8561cc3d68d (2025-03-10 11:36 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 4 × AMD EPYC 7763 64-Core Processor
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
A more complete overview of all dependencies and their versions is also provided.
Status `~/work/SciMLBase.jl/SciMLBase.jl/docs/Manifest.toml`
[47edcb42] ADTypes v1.14.0
[a4c015fc] ANSIColoredPrinters v0.0.1
[1520ce14] AbstractTrees v0.4.5
[7d9f7c33] Accessors v0.1.42
[79e6a3ab] Adapt v4.3.0
[66dad0bd] AliasTables v1.1.3
[ec485272] ArnoldiMethod v0.4.0
[4fba245c] ArrayInterface v7.18.0
[4c555306] ArrayLayouts v1.11.1
[e2ed5e7c] Bijections v0.1.9
[62783981] BitTwiddlingConvenienceFunctions v0.1.6
[8e7c35d0] BlockArrays v1.5.0
[70df07ce] BracketingNonlinearSolve v1.1.2
[2a0fbf3d] CPUSummary v0.2.6
[00ebfdb7] CSTParser v3.4.3
[d360d2e6] ChainRulesCore v1.25.1
[fb6a15b2] CloseOpenIntervals v0.1.13
[944b1d66] CodecZlib v0.7.8
[861a8166] Combinatorics v1.0.2
⌅ [a80b9123] CommonMark v0.8.16
[38540f10] CommonSolve v0.2.4
[bbf7d656] CommonSubexpressions v0.3.1
[f70d9fcc] CommonWorldInvalidations v1.0.0
[34da2185] Compat v4.16.0
[b152e2b5] CompositeTypes v0.1.4
[a33af91c] CompositionsBase v0.1.2
[2569d6c7] ConcreteStructs v0.2.3
[187b0558] ConstructionBase v1.5.8
[adafc99b] CpuId v0.3.1
[a8cc5b0e] Crayons v4.1.1
[9a962f9c] DataAPI v1.16.0
[864edb3b] DataStructures v0.18.22
[e2d170a0] DataValueInterfaces v1.0.0
[2b5f629d] DiffEqBase v6.167.2
[459566f4] DiffEqCallbacks v4.3.0
[77a26b50] DiffEqNoiseProcess v5.24.1
[163ba53b] DiffResults v1.1.0
[b552c78f] DiffRules v1.15.1
[a0c0ee7d] DifferentiationInterface v0.6.50
[8d63f2c5] DispatchDoctor v0.4.19
[31c24e10] Distributions v0.25.118
[ffbed154] DocStringExtensions v0.9.4
[e30172f5] Documenter v1.10.1
[5b8099bc] DomainSets v0.7.15
[7c1d4256] DynamicPolynomials v0.6.1
[06fc5a27] DynamicQuantities v1.8.0
[4e289a0a] EnumX v1.0.5
[f151be2c] EnzymeCore v0.8.8
[e2ba6199] ExprTools v0.1.10
[55351af7] ExproniconLite v0.10.14
[7034ab61] FastBroadcast v0.3.5
[9aa1b823] FastClosures v0.3.2
[a4df4552] FastPower v1.1.2
[1a297f60] FillArrays v1.13.0
[64ca27bc] FindFirstFunctions v1.4.1
[6a86dc24] FiniteDiff v2.27.0
[1fa38f19] Format v1.3.7
⌅ [f6369f11] ForwardDiff v0.10.38
[069b7b12] FunctionWrappers v1.1.3
[77dc65aa] FunctionWrappersWrappers v0.1.3
[d9f16b24] Functors v0.5.2
[46192b85] GPUArraysCore v0.2.0
[d7ba0133] Git v1.3.1
[c27321d9] Glob v1.3.1
[86223c79] Graphs v1.12.1
[34004b35] HypergeometricFunctions v0.3.28
[b5f81e59] IOCapture v0.2.5
[615f187c] IfElse v0.1.1
[d25df0c9] Inflate v0.1.5
[18e54dd8] IntegerMathUtils v0.1.2
[8197267c] IntervalSets v0.7.10
[3587e190] InverseFunctions v0.1.17
[92d709cd] IrrationalConstants v0.2.4
[82899510] IteratorInterfaceExtensions v1.0.0
[692b3bcd] JLLWrappers v1.7.0
[682c06a0] JSON v0.21.4
[ae98c720] Jieko v0.2.1
[98e50ef6] JuliaFormatter v1.0.62
[ccbc3e58] JumpProcesses v9.14.2
[ba0b0d4f] Krylov v0.9.10
[b964fa9f] LaTeXStrings v1.4.0
[23fbe1c1] Latexify v0.16.6
[10f19ff3] LayoutPointers v0.1.17
[0e77f7df] LazilyInitializedFields v1.3.0
[5078a376] LazyArrays v2.6.1
[87fe0de2] LineSearch v0.1.4
[d3d80556] LineSearches v7.3.0
[7ed4a6bd] LinearSolve v3.7.2
[2ab3a3ac] LogExpFunctions v0.3.29
[d8e11817] MLStyle v0.4.17
[1914dd2f] MacroTools v0.5.15
[d125e4d3] ManualMemory v0.1.8
[d0879d2d] MarkdownAST v0.1.2
[bb5d69b7] MaybeInplace v0.1.4
[e1d29d7a] Missings v1.2.0
[961ee093] ModelingToolkit v9.70.0
[2e0e35c7] Moshi v0.3.5
[46d2c3a1] MuladdMacro v0.2.4
[102ac46a] MultivariatePolynomials v0.5.7
[d8a4904e] MutableArithmetics v1.6.4
[d41bc354] NLSolversBase v7.9.0
[77ba4419] NaNMath v1.1.2
[8913a72c] NonlinearSolve v4.5.0
[be0214bd] NonlinearSolveBase v1.5.1
[5959db7a] NonlinearSolveFirstOrder v1.3.0
[9a2c21bd] NonlinearSolveQuasiNewton v1.2.0
[26075421] NonlinearSolveSpectralMethods v1.1.0
[6fe1bfb0] OffsetArrays v1.16.0
[429524aa] Optim v1.12.0
[bac558e1] OrderedCollections v1.8.0
[90014a1f] PDMats v0.11.33
[d96e819e] Parameters v0.12.3
[69de0a69] Parsers v2.8.1
[e409e4f3] PoissonRandom v0.4.4
[f517fe37] Polyester v0.7.16
[1d0040c9] PolyesterWeave v0.2.2
[85a6dd25] PositiveFactorizations v0.2.4
⌅ [aea7be01] PrecompileTools v1.2.1
[21216c6a] Preferences v1.4.3
[27ebfcd6] Primes v0.5.7
[43287f4e] PtrArrays v1.3.0
[1fd47b50] QuadGK v2.11.2
[74087812] Random123 v1.7.0
[e6cf234a] RandomNumbers v1.6.0
[3cdcf5f2] RecipesBase v1.3.4
[731186ca] RecursiveArrayTools v3.31.2
[189a3867] Reexport v1.2.2
[2792f1a3] RegistryInstances v0.1.0
[ae029012] Requires v1.3.1
[ae5879a3] ResettableStacks v1.1.1
[79098fc4] Rmath v0.8.0
[7e49a35a] RuntimeGeneratedFunctions v0.5.13
[9dfe8606] SCCNonlinearSolve v1.0.0
[94e857df] SIMDTypes v0.1.0
[0bca4576] SciMLBase v2.82.0 `~/work/SciMLBase.jl/SciMLBase.jl`
[19f34311] SciMLJacobianOperators v0.1.1
[c0aeaf25] SciMLOperators v0.3.13
[53ae85a6] SciMLStructures v1.7.0
[efcf1570] Setfield v1.1.2
[727e6d20] SimpleNonlinearSolve v2.2.0
[699a6c99] SimpleTraits v0.9.4
[a2af1166] SortingAlgorithms v1.2.1
[0a514795] SparseMatrixColorings v0.4.14
[276daf66] SpecialFunctions v2.5.0
[aedffcd0] Static v1.2.0
[0d7ed370] StaticArrayInterface v1.8.0
[90137ffa] StaticArrays v1.9.13
[1e83bf80] StaticArraysCore v1.4.3
[10745b16] Statistics v1.11.1
[82ae8749] StatsAPI v1.7.0
[2913bbd2] StatsBase v0.34.4
[4c63d2b9] StatsFuns v1.4.0
[7792a7ef] StrideArraysCore v0.5.7
[2efcf032] SymbolicIndexingInterface v0.3.38
[19f23fe9] SymbolicLimits v0.2.2
[d1185830] SymbolicUtils v3.25.0
[0c5d862f] Symbolics v6.36.0
[3783bdb8] TableTraits v1.0.1
[bd369af6] Tables v1.12.0
[ed4db957] TaskLocalValues v0.1.2
[8ea1fca8] TermInterface v2.0.0
[1c621080] TestItems v1.0.0
[8290d209] ThreadingUtilities v0.5.2
[a759f4b9] TimerOutputs v0.5.28
[0796e94c] Tokenize v0.5.29
[3bb67fe8] TranscodingStreams v0.11.3
[410a4b4d] Tricks v0.1.10
[781d530d] TruncatedStacktraces v1.4.0
[5c2747f8] URIs v1.5.2
[3a884ed6] UnPack v1.0.2
[1986cc42] Unitful v1.22.0
[a7c27f48] Unityper v0.1.6
[897b6980] WeakValueDicts v0.1.0
[2e619515] Expat_jll v2.6.5+0
[f8c6e375] Git_jll v2.49.0+0
[1d5cc7b8] IntelOpenMP_jll v2025.0.4+0
[94ce4f54] Libiconv_jll v1.18.0+0
[856f044c] MKL_jll v2025.0.1+1
[458c3c95] OpenSSL_jll v3.0.16+0
[efe28fd5] OpenSpecFun_jll v0.5.6+0
[f50d1b31] Rmath_jll v0.5.1+0
[1317d2d5] oneTBB_jll v2022.0.0+0
[0dad84c5] ArgTools v1.1.2
[56f22d72] Artifacts v1.11.0
[2a0f44e3] Base64 v1.11.0
[ade2ca70] Dates v1.11.0
[8ba89e20] Distributed v1.11.0
[f43a241f] Downloads v1.6.0
[7b1f6079] FileWatching v1.11.0
[9fa8497b] Future v1.11.0
[b77e0a4c] InteractiveUtils v1.11.0
[4af54fe1] LazyArtifacts v1.11.0
[b27032c2] LibCURL v0.6.4
[76f85450] LibGit2 v1.11.0
[8f399da3] Libdl v1.11.0
[37e2e46d] LinearAlgebra v1.11.0
[56ddb016] Logging v1.11.0
[d6f4376e] Markdown v1.11.0
[a63ad114] Mmap v1.11.0
[ca575930] NetworkOptions v1.2.0
[44cfe95a] Pkg v1.11.0
[de0858da] Printf v1.11.0
[3fa0cd96] REPL v1.11.0
[9a3f8284] Random v1.11.0
[ea8e919c] SHA v0.7.0
[9e88b42a] Serialization v1.11.0
[1a1011a3] SharedArrays v1.11.0
[6462fe0b] Sockets v1.11.0
[2f01184e] SparseArrays v1.11.0
[f489334b] StyledStrings v1.11.0
[4607b0f0] SuiteSparse
[fa267f1f] TOML v1.0.3
[a4e569a6] Tar v1.10.0
[8dfed614] Test v1.11.0
[cf7118a7] UUIDs v1.11.0
[4ec0a83e] Unicode v1.11.0
[e66e0078] CompilerSupportLibraries_jll v1.1.1+0
[deac9b47] LibCURL_jll v8.6.0+0
[e37daf67] LibGit2_jll v1.7.2+0
[29816b5a] LibSSH2_jll v1.11.0+1
[c8ffd9c3] MbedTLS_jll v2.28.6+0
[14a3606d] MozillaCACerts_jll v2023.12.12
[4536629a] OpenBLAS_jll v0.3.27+1
[05823500] OpenLibm_jll v0.8.1+4
[efcefdf7] PCRE2_jll v10.42.0+1
[bea87d4a] SuiteSparse_jll v7.7.0+0
[83775a58] Zlib_jll v1.2.13+1
[8e850b90] libblastrampoline_jll v5.11.0+0
[8e850ede] nghttp2_jll v1.59.0+0
[3f19e933] p7zip_jll v17.4.0+2
Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`
You can also download the manifest file and the project file.