Files
2016-02-03 18:52:05 +00:00

30 lines
735 B
Fortran

SUBROUTINE mmid(y,dydx,nvar,xs,htot,nstep,yout,derivs)
INTEGER nstep,nvar,NMAX
REAL htot,xs,dydx(nvar),y(nvar),yout(nvar)
EXTERNAL derivs
PARAMETER (NMAX=50)
INTEGER i,n
REAL h,h2,swap,x,ym(NMAX),yn(NMAX)
h=htot/nstep
do 11 i=1,nvar
ym(i)=y(i)
yn(i)=y(i)+h*dydx(i)
11 continue
x=xs+h
call derivs(x,yn,yout)
h2=2.*h
do 13 n=2,nstep
do 12 i=1,nvar
swap=ym(i)+h2*yout(i)
ym(i)=yn(i)
yn(i)=swap
12 continue
x=x+h
call derivs(x,yn,yout)
13 continue
do 14 i=1,nvar
yout(i)=0.5*(ym(i)+yn(i)+h*yout(i))
14 continue
return
END