The DifferentialEquations.jl 3.0 release had most of the big features and was featured in a separate blog post. Now in this release we had a few big incremental developments. We expanded the capabilities of our wrapped libraries and completed one of the most requested features: passing Jacobians into the IDA and DASKR DAE solvers. Let’s just get started there:
Jacobian interface for DAEs
First of all, we needed a common Jacobian interface for
DAEProblems are different than ODEs because the solver needs to know how
to handle the
du terms, since
G(t,u,du)=0 may have nonlinear usage of the
derivatives. However, all of the nonlinear solvers use the form
dG/du + gamma*dG/d(du)
gamma is dependent on
dt, and so we can use that form for DAEs.
This matches the definition used by older packages, so in a sec we’ll mention
that! Defines the interface.
Improved bindings and jacobian passing for Sundials.jl and DASKR.jl
Now Sundials accepts the Jacobians into its
daskr also makes use of the jacobians. By passing these
functions you can thus speed up the algorithms. In addition, the linear solver
daskr have been made available in the common interface. This gives
us access to another banded and Krylov method for DAEs.
New callbacks in the callback library
There are many new callbacks in the callback library. These include the
IterativeCallback where you give it a method for how to choose the next
timepoint for an event, and an effect to do at the event. This allows you
to easily cause discontinuous changes at time series t1, t2, t3, … where the
next timepoints require knowing the previous. The
PeriodicCallback makes it
easy to have an event every
SavingCallback makes it easy to save
some function of the solution at each step, or via
saveat and other similar
Complex support in stiff solvers
The stiff solvers all can now make use of DiffEqDiffTools by making
DiffEqDiffTools.jl is compatible with complex numbers, and thus all of these stiff
solvers can solve problems where analytical Jacobians are not given via numerical
Non-diagonal additive noise and high order scalar noise SDE support
The high order SDE solvers used to only support diagonal noise. However, there
are additional cases where they work as well, and this support has been added.
The strong order 1.5 method for additive noise,
SRA1, can now handle non-diagonal
additive noise. Additionally,
SRIW1 all support
scalar noise as well (i.e. single random variable for multiple SDEs).
Integrator reinit interface
Many times you have to re-solve the same equation repeatedly. In these cases,
you may want to re-use the same integration cache, and then modify parameters
or just re-run with a new initial condition. We have now added a function
reinit to the integrator interface that allows one to reset the integrator
to a new initial condition, along with options for wiping the current state.
Note that some projects have been sectioned off as possible GSoC projects. These would also do well as new contributor projects if anyone’s interested, and so these are not considered in the “in development” list as we are leaving these open for newcomers/students.
Putting those aside, this is the main current “in development” list:
- IMEX Methods
- Native Julia Radau
- Anderson acceleration of unconstrained DDE steps
- Improved jump methods (tau-leaping)