RECURSIVE FUNCTION ADAPTIV_KVAD (F, A, B, FA, FB, TOL, ABS_FEL) RESULT (RESULTAT) IMPLICIT NONE INTERFACE FUNCTION F(X) RESULT (FUNKTIONSVAERDE) REAL, INTENT(IN) :: X REAL :: FUNKTIONSVAERDE END FUNCTION F END INTERFACE REAL, INTENT(IN) :: A, B, FA, FB, TOL REAL, INTENT(OUT) :: ABS_FEL REAL :: RESULTAT REAL :: STEG, MITT, FMITT REAL :: EN_TRAPETS_YTA, TVAA_TRAPETS_YTA REAL :: VAENSTER_YTA, HOEGER_YTA REAL :: DIFF, ABS_FEL_V, ABS_FEL_H ! STEG = B - A MITT = 0.5 * (A + B) FMITT = F(MITT) EN_TRAPETS_YTA = STEG * 0.5 * (FA + FB) TVAA_TRAPETS_YTA = STEG * 0.25 * (FA + FMITT + FMITT + FB) DIFF = TVAA_TRAPETS_YTA - EN_TRAPETS_YTA ! IF ( ABS(DIFF) < TOL ) THEN ! RESULTAT = TVAA_TRAPETS_YTA + DIFF/3.0 ! ABS_FEL = ABS(DIFF) ! ELSE VAENSTER_YTA = ADAPTIV_KVAD (F, A, MITT, FA, FMITT, 0.5*TOL, ABS_FEL_V) HOEGER_YTA = ADAPTIV_KVAD (F, MITT, B, FMITT, FB, 0.5*TOL, ABS_FEL_H) RESULTAT = VAENSTER_YTA + HOEGER_YTA ABS_FEL = ABS_FEL_V + ABS_FEL_H END IF END FUNCTION ADAPTIV_KVAD