Decision about the new integrators and transfer to the new API - poliastro/poliastro GitHub Wiki

The SciPy has recently released the new solve_ivp integrators API, in a more pythonic manner, supporting dense output, convenient events handler, evaluating function at predefined points. The idea was to switch between the old API .ode to the new solve_ivp.

The problem raised immediately: in the new API there was no Dormand–Prince 8(3)5 method implemented, popular in astrodynamics and being used in poliastro.

With Juan, we had a long discussion on how to deal with the situation, the following statements from the discussion should be emphasized:

  1. As the contributors to SciPy say, the new API is rather slow (as it's purely pythonic), see here
  2. The DOP835 method can not inherit from the RKSolver class provided by the new SciPy API, because the algorithm for step size selection and error estimation in DOP835 is much more sophisticated.
  3. There are methods of the same precision order, say, Fehlberg 7/8, that could inherit from RKSolver. However, their performance is considered to be much worse than the DOP835.

As the output of the discussion, we decided to use the Fortran-90 code. The code is easily readable, and it is possible to implement our own DOP835OdeSolver (inherits from OdeSolver) and DOP835DenseOutput (inherits from DenseOutput).