1 SUBROUTINE rkqs(y, dydx, n, x, htry, eps, yscal, hdid, hnext)
7 INTEGER,
INTENT(in) :: N
9 DOUBLE PRECISION :: y(n), dydx(n), yscal(n)
10 DOUBLE PRECISION x, hTry, EPs, hDid, hNext
16 DOUBLE PRECISION :: errmax, h, htemp, xnew
17 DOUBLE PRECISION :: yerr(n), ytemp(n)
19 DOUBLE PRECISION,
parameter :: SAFETY = 0.9
20 DOUBLE PRECISION,
parameter :: PGROW = -0.2
21 DOUBLE PRECISION,
parameter :: PSHRNK = -0.25
22 DOUBLE PRECISION,
parameter :: ERRCON = 1.89e-4
27 call rkck(y,dydx,n,x,h,ytemp,yerr)
30 errmax=max(errmax,abs(yerr(i)/yscal(i)))
34 htemp=safety*h*(errmax**pshrnk)
35 h=sign(max(abs(htemp),0.1*abs(h)),h)
37 if(xnew==x)
write(*,*)
'WARNING: stepsize underflow in rkqs' 40 hnext = merge(safety*h*(errmax**pgrow), 5.0*h, errmax>errcon)
subroutine rkck(y, dydx, n, x, h, yout, yerr)
subroutine rkqs(y, dydx, n, x, htry, eps, yscal, hdid, hnext)