If your subprogram is not in a module you should provide an INTERFACE. The INTERFACE is equivalent to the prototype of some other languages. Interfaces enable the compiler to check that the number and type of the argument list in invocations agrees with the declared parameter list. Interfaces are nonexecutable and should be placed with (or immediately following) variable declarations.
INTERFACE FUNCTION myfunc(x,y,z) implicit none real ::myfunc real ::x,y complex :: z END FUNCTION END INTERFACE
INTERFACE SUBROUTINE mysub(x,y,z) use precisions use mymod implicit none real :: x real(dp) ::y,z END SUBROUTINE mysub END INTERFACE
The simplest way to set up an interface is to copy the first lines of the subprogram. All statements that may affect the ability of the compiler to check number and type of the arguments must be included. This encompasses USE (for modules), IMPLICIT, and all declarations of the arguments. Declarations for local variables are not needed and should not be included. The END statements must include the FUNCTION or SUBROUTINE keyword as appropriate.
The interface terminates with END INTERFACE.
Only one interface block is required per program unit.
INTERFACE function mysub declarations end function subroutine mysub1 declarations end subroutine subroutine mysub2 declarations end subroutine END INTERFACE