For EXTERNAL procedures it is possible to provide an explicit interface for a procedure. Consider:
SUBROUTINE expsum( n, k, x, sum )! in interface
USE KIND_VALS:ONLY long
IMPLICIT NONE
INTEGER, INTENT(IN) :: n ! in interface
REAL(long), INTENT(IN) :: k,x ! in interface
REAL(long), INTENT(OUT) :: sum ! in interface
REAL(long), SAVE :: cool_time
sum = 0.0
DO i = 1, n
sum = sum + exp(-i*k*x)
END DO
END SUBROUTINE expsum ! in interface
The explicit INTERFACE for this routine is given by the statements which appear in the declarations part of any program unit that calls expsum:
INTERFACE ! for EXTERNAL procedures
SUBROUTINE expsum( n, k, x, sum )
USE KIND_VALS:ONLY long
INTEGER, INTENT(IN) :: n
REAL(long), INTENT(IN) :: k,x
REAL(long), INTENT(OUT) :: sum
END SUBROUTINE expsum
END INTERFACE
Interfaces replace any EXTERNAL statements and are not needed for internal (or module) procedures.
For more information, click here