currently we use Vern7 or Vern8 method to reach numerical precision (~1e-7, 1e-8) in our ODE solver based emulation (https://github.com/Happy-Diode/ContinuousEmulator.jl/blob/master/src/ContinuousEmulator.jl#L137), however such methods do not guarantee the stability of norm, as a result in long time emulation we may get inaccurate result, e.g in our adiabatic MIS experiment emulation, we get a wrong negative error ratio at large time (~4us).
Temperary solution is to normalize the state every time step which would slow down the emulation and not necessary, better ways of this is to use a midpoint energy-preserving (e.g simpletic methods) in our ODE solver. See also VII and VIII in https://link.springer.com/content/pdf/10.1007%2F3-540-30666-8.pdf
we have some partial support of norm perseving methods now, but as a backlog this results in a ~40x slow down and doesn't work on GPU since the callback is a projection needs scalar index
currently we use Vern7 or Vern8 method to reach numerical precision (~1e-7, 1e-8) in our ODE solver based emulation (https://github.com/Happy-Diode/ContinuousEmulator.jl/blob/master/src/ContinuousEmulator.jl#L137), however such methods do not guarantee the stability of norm, as a result in long time emulation we may get inaccurate result, e.g in our adiabatic MIS experiment emulation, we get a wrong negative error ratio at large time (~4us).
Temperary solution is to normalize the state every time step which would slow down the emulation and not necessary, better ways of this is to use a midpoint energy-preserving (e.g simpletic methods) in our ODE solver. See also VII and VIII in https://link.springer.com/content/pdf/10.1007%2F3-540-30666-8.pdf
There is https://diffeq.sciml.ai/stable/solvers/ode_solve/#GeometricIntegrators.jl but I'm not sure which method performs better at the moment, a benchmark study would be necessary.