/* this is a Runge-Kutta integrator of the differential equation y'=F(t,y) where y is a DIM dimensional vector. */ void runge_kutta_step(t, y, dt) float t, *y, dt; { float F(); float k1[DIM], k2[DIM], k3[DIM], k4[DIM], y1[DIM], y2[DIM], y3[DIM]; int i; for(i = 0; i < DIM; i++) {k1[i] = dt * F(t, y, i); y1[i] = y[i] + k1[i] / 2.; } for(i = 0; i < DIM; i++) {k2[i] = dt * F(t + dt / 2., y1, i); y2[i] = y[i] + k2[i]/2.; } for(i = 0; i < DIM; i++) {k3[i] = dt * F(t + dt / 2., y2, i); y3[i] = y[i] + k3[i]; } for(i = 0; i < DIM; i++) {k4[i] = dt * F(t + dt, y3, i); y[i] += ( k1[i] + 2. * k2[i] + 2. * k3[i] + k4[i]) / 6.; } }