Routinen

INTENT: Parameter als Ein- oder Ausgabe gekennzeichnet

INTEGER FUNCTION foo(a, b, c)
   IMPLICIT NONE
   REAL, INTENT(IN)    :: a       ! a darf nicht geaendert werden
   REAL, INTENT(INOUT) :: b       ! b ist frei
   REAL, INTENT(OUT)   :: c       ! c wird nicht gelesen
   ...

optionale Argumente, Schlüsselwort-Argumente

SUBROUTINE bla(x, y, upper, lower)
   IMPLICIT NONE
   REAL, INTENT(IN)              :: x, y
   INTEGER, INTENT(IN), OPTIONAL :: upper, lower 
   ...

CALL bla(2.8,3.1)
CALL bla(a,b,-1)
CALL bla(x,y,upper = 28)

Rekursive Routinen

RECURSIVE FUNCTION FACTORIAL(N) RESULT(RES)
   IMPLICIT NONE
   INTEGER   :: N, RES
   IF (N == 1) THEN
      RES = 1
   ELSE
      RES = N*FACTORIAL(N-1)
   ENDIF
END FUNCTION FACTORIAL

explizite Routinen-Schnittstelle mit INTERFACE-Block

INTERFACE 
   INTEGER FUNCTION foo(a, b, c)
      REAL, INTENT(IN)    :: a
      REAL, INTENT(INOUT) :: b
      REAL, INTENT(OUT)   :: c
   END FUNCTION foo
END INTERFACE

nötig bei

  • optionalen und Schlüsselwort-Argumenten
  • Pointer- und Target-Argumenten (s.u.)
  • neuartigen Array-Argumenten (s.u.)