I've been using GSL as the foundation of many of my simulations, but it's a little bit overkill for my purposes and it defines its own complex type for legacy reasons. Rather than code my own Runge-Kutta ODE solver, which would probably not be very efficient, are there any open source ODE solvers that use the native C99 complex type?
You might consider it "overkill", but PETSc's time integration package can be used with C99 complex (configure
--with-scalar-type=complex). Supported methods include
- explicit Runge-Kutta
- low-memory strong stability-preserving Runge-Kutta
- additive Runge-Kutta IMEX
These implementations are most appropriate for high-dimensional problems such as semi-discretized partial differential equations (method of lines).
Another option you have, unless the system is rather complicated, is to just convert from complex notation to a problem with two unknowns that represent the real and imaginary part. You can then use a standard real-valued ODE solver.