SUBROUTINE RUKU (Z,DZ) DIMENSION Z(6),X(6),DZ(6),DX(6) COMMON T,DT,H,ALFA,IPR,IPO,G1,G2,Z1,Z2,GPL,GMI,EPP,EPM,XK,MO COMMON IC,IT,IG,IP CALL ZERV (DZ) CALL GRAD (Z,DX) CALL AUGV (DZ,DZ,1.0/6.0,DX) CALL AUGV (X,Z,DT/2.0,DX) CALL GRAD (X,DX) CALL AUGV (DZ,DZ,1.0/3.0,DX) CALL AUGV (X,Z,DT/2.0,DX) CALL GRAD (X,DX) CALL AUGV (DZ,DZ,1.0/3.0,DX) CALL AUGV (X,Z,DT,DX) CALL GRAD (X,DX) CALL AUGV (DZ,DZ,1.0/6.0,DX) RETURN ENDEsta subrutina sí la vamos a discutir con todo detalle, tanto por su importancia como por estar formada con llamadas a otras subrutinas. Se comienza propiamente con la instrucción CALL ZERV(DZ) que realiza la operación DZ=O. Luego, con CALL GRAD(Z,DX) se está indicando la operación DX F(Z) que es la tangente a la curva en el punto . No se escribe T en F porque para nuestro caso, la derivada no va a depender de esa variable. De la misma manera, vamos obteniendo CALL AUGV(DZ,DZ,1/6,DX) para obtener DZ=DZ+DX/6=DZ+ CALL AUGV(X,Z,DT/2,DX) que es lo mismo que X=Z+(DT/2)*DX=Z+(DT/2) = Se ha estado tomando Y=Z, además no se está usando H en el cálculo de X. Ahora ya podemos calcular : CALL GRAD(X,DX) o sea DX = F(X) = Así tenemos el siguiente paso: CALL AUGV(X,Z,1/3,DX) es decir X=Z+DX/3. Y ya tenemos dos términos del argumento de . CALL AUGV(X,Z,DT/2,DX) equivalente a X = Z + DT/2(DX) = Z + (DT/2) Con eso ya podemos obtener : CALL GRAD(X,DX) y tendremos así DX = F(X) Para calcular que es la última que nos falta damos los siguientes pasos.
CALL AUGV(DZ,DZ,1/3,DX) para calcular DZ = DZ+DX/3
= DZ+ /3
CALL AUGV(X,Z,DT,DX)
X = Z+DT*DX = Z+DT
CALL GRAD(X,DX) con esto tendremos
DX = F(X) = F
Y por último:
CALL AUGV(DZ,DZ,1/6,DX) para obtener
DZ=DZ+DX/6
Con lo cual queda completo un paso de la integración de
Runge-Kutta en FORTRAN. Hay que observar que este método de
Runge-Kutta a cuarto órden se reduce al de Simpson. Cuando hay
dependencias del tiempo debe incluirse el argumento, calculando en
términos de más múltiplos de DT.