Sundials.jl is a Julia package that interfaces to the Sundials library. Sundials (the C library and this package) provides the following:
y' = f(t,y,p), y(t0) = y0(p), where
pis a set of parameters.
F(t,y,y',p) = 0, y(t0) = y0(p), y'(t0) = y0'(p)
F(u) = 0
Note that CVODES and IDAS contain all functions provided by CVODE and IDA (for integration
without sensitivity analysis). If you need to use the latter, you can set
deps/build.jl and (re)build the package.
Within Julia, use the package manager:
This should download and install the Sundials libraries and register the package. On Windows precompiled binaries are used, while on Unix and OSX Sundials is built from its sources (provided the necessary tools are available). If you have Sundials already installed, make sure that Julia can find it, e.g., via
before you install the package. Downloading and/or re-building of the library can be triggered by
if anything goes wrong.
To test the installation use
which currently runs some of the examples in the
This package closely follows the Sundials C API. At a slightly higher
level, many (but not all) Sundials.jl functions support passing Julia
Arrays) instead of Sundials objects (like
for examples of how the higher-level interfacing works.
The Julia package Clang.jl was used to wrap Sundials. This directly uses Sundials' headers sort-of like SWIG. This is great work by Isaiah--it didn't take me much work to package a pretty complete interface to Sundials. For the wrapping code, see src/wrap_sundials.jl.
Because of Clang.jl, Sundials.jl provides good coverage of the Sundials library (the serial version).
This package is part of the JuliaDiffEq common interface. This is documented in the DifferentialEquaitons.jl documentation. Thus the ODE tutorial applies. For example, the Lorenz attractor can be solved with
CVODE_Adams as follows:
using Sundials function lorenz(t,u,du) du = 10.0(u-u) du = u*(28.0-u) - u du = u*u - (8/3)*u end u0 = [1.0;0.0;0.0] tspan = (0.0,100.0) prob = ODEProblem(lorenz,u0,tspan) sol = solve(prob,CVODE_Adams()) using Plots; plot(sol,vars=(1,2,3))
idasol are provided as high-level,
very simple functions. Note that the latter two functions were previously
ida. Here is an example for
using Sundials function f(t, y, ydot) ydot = -0.04*y + 1.0e4*y*y ydot = 3.0e7*y*y ydot = -ydot - ydot end t = [0.0; 4 * logspace(-1., 7., 9)] res = Sundials.cvode(f, [1.0, 0.0, 0.0], t)
cvode, there is an optional positional argument
integrator to choose
between the two provided integration options:
:BDF for a Backwards Differentiation
Formula method and
:Adams for an Adams-Moulton method. There are two supported
idasol. For more
details, please see the docstrings.
See the examples directory.
Three-Body Problem is a notebook with a more thoroughly explained example.
Please note that this is a developer preview. There could be bugs, and everything is subject to change. Of note are:
DENSE_ELEMare not available.
Sundials.in front of everything.
2 days ago