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:
First of all, we needed a common Jacobian interface for DAEProblem
types. DAEProblem
s 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)
where 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.
Now Sundials accepts the Jacobians into its CVODE_Adams
, CVODE_BDF
, and IDA
algorithms. daskr
also makes use of the jacobians. By passing these functions you can thus speed up the algorithms. In addition, the linear solver choices for daskr
have been made available in the common interface. This gives us access to another banded and Krylov method for DAEs.
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 dt
. The SavingCallback
makes it easy to save some function of the solution at each step, or via saveat
and other similar controls.
The stiff solvers all can now make use of DiffEqDiffTools by making autodiff=false
. 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 differentiation.
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, SRA1
, SRA
, SRI
, and SRIW1
all support scalar noise as well (i.e. single random variable for multiple SDEs).
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)