New solvers
SDE:
- [x] Milstein
- [x] Euler-Heun
- [x] SRKs (Additive)
- [ ] Talay (Ito commutative)
Implict:
- [ ] BDF
- [ ] Rosenbrock methods
- [x] IMEX methods, e.g. http://dx.doi.org/10.1175/mwr-d-13-00132.1
DAE:
- Lots of overlap with Rosenbrock methods, get them in at the same time.
- Standard DAE->ODE conversion (+optional nonlinear projections)
- Set
made_jump=Trueifdconstraint/dz=0 - Mass matrices: work with these or work with constraint functions? Former is a little more general; maybe less efficient in some cases? Also think about traced mass matrices, possibly space-varying (e.g. quasilinear problems), possibly rank-varying.
Symplectic:
- Higher-order symplectic methods
- A lot of the lower-order methods (Stormer-Verlet, Leapfrog, Kick-drift-kick, Semi-implicit Euler) are all essentially the same thing. It would be good to write out something making this explicit, plus maybe add some special variants if you really want a particular variant.
Other:
- Higher-order ERK methods (Verner etc.)
- See also a few of the comments made about DifferentialEquations.jl in this (old) blog post: https://www.stochasticlifestyle.com/comparison-differential-equation-solver-suites-matlab-r-julia-python-c-fortran/
@patrick-kidger are we still interested in Verlet methods (or other methods specifically taylored to Hamiltonian systems)?
Absolutely! I just haven't gotten around to implementing them. I'd be happy to take a PR on these.
@patrick-kidger I'm not able to properly initialise a KenCarp solver? Can you help me? Is something like ?
KenCarp4(MultiTerm([Bosh3, Kvaerno3]))
But when I use it to solve an ODE I got:
ValueError: terms must be a PyTree of AbstractTerms (such as ODETerm), with structure diffrax.term.MultiTerm[typing.Tuple[diffrax.term.AbstractTerm, diffrax.term.AbstractTerm]]
Can you please provide an entire example on how use the IMEX solvers?
For example:
explicit_term = ODETerm(lambda t, y, args: -y)
impliict_term = ODETerm(lambda t, y, args: -y)
terms = MultiTerm(explicit_term, implicit_term)
solver = KenCarp4()
diffeqsolve(terms, solver, ...)