Considera el programa bugod.f que integra la ecuación de Burgers (ver práctica 2) usando el método de Godunov (primer orden).
DO I = 0, CELLS+2
S(I) = (U(I) - U(I-1))/DX
END DO
Limitador de pendiente MINMOD:
DO I = 0, CELLS+1
IF ((S(I).EQ.0.0).OR.(S(I+1).EQ.0.0)) THEN
SL(I) = 0.0
ELSE
SL(I) = 0.5*(S(I)/ABS(S(I)) + S(I+1)/ABS(S(I+1)))
& *AMIN1(ABS(S(I)),ABS(S(I+1)))
END IF
UM(I) = U(I) - SL(I)*DX/2.0
UP(I) = U(I) + SL(I)*DX/2.0
END DO
Limitador de pendiente SUPERBEE:
DO I = 0, CELLS+1
IF ((S(I).EQ.0.0).OR.(S(I+1).EQ.0.0)) THEN
SL(I) = 0.0
ELSE IF (ABS(S(I)).GE.ABS(S(I+1))) THEN
SL(I) = 0.5*(S(I)/ABS(S(I)) + S(I+1)/ABS(S(I+1)))
& *AMIN1(ABS(S(I)),ABS(2*S(I+1)))
ELSE
SL(I) = 0.5*(S(I)/ABS(S(I)) + S(I+1)/ABS(S(I+1)))
*AMIN1(ABS(2*S(I)),ABS(S(I+1)))
END IF
UM(I) = U(I) - SL(I)*DX/2.0
UP(I) = U(I) + SL(I)*DX/2.0
END DO
Limitador de pendiente VANLEER:
DO I = 0, CELLS+1
IF ((S(I).EQ.0.0).AND.(S(I+1).EQ.0.0)) THEN
SL(I) = 0.0
ELSE
SL(I) = 2.D0*S(I)*S(I+1)/(S(I) + S(I+1))
END IF
UM(I) = U(I) - SL(I)*DX/2.D0
UP(I) = U(I) + SL(I)*DX/2.D0
END DO
DO 10 I = 0, CELLS
UL = UP(I)
UR = UM(I+1)
...
10 CONTINUE
Implementa el siguiente algoritmo de Runge-Kutta en el avance temporal de bugod.f para conseguir segundo orden de precisión temporal: