diffrax icon indicating copy to clipboard operation
diffrax copied to clipboard

New solvers

Open patrick-kidger opened this issue 4 years ago • 6 comments

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=True if dconstraint/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 avatar Aug 17 '21 00:08 patrick-kidger

@patrick-kidger are we still interested in Verlet methods (or other methods specifically taylored to Hamiltonian systems)?

trevormccrt avatar Jun 27 '23 20:06 trevormccrt

Absolutely! I just haven't gotten around to implementing them. I'd be happy to take a PR on these.

patrick-kidger avatar Jun 27 '23 20:06 patrick-kidger

@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?

edoardoramalli avatar Jul 25 '23 14:07 edoardoramalli

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, ...)

patrick-kidger avatar Jul 25 '23 15:07 patrick-kidger