Functions can return arrays, for example,
INTERFACE
FUNCTION funnie(ima,scal)
...
END INTERFACE
INTEGER, PARAMETER :: m = 6
INTEGER, DIMENSION(M,M) :: im1, im2
...
IM2 = funnie(IM1,1) ! invoke
END PROGRAM
FUNCTION funnie(ima,scal)
IMPLICIT NONE
INTEGER, INTENT(IN) :: ima(:,:)
INTEGER, INTENT(IN) :: scal
INTEGER, DIMENSION(SIZE(ima,1),SIZE(ima,2)) &
:: funnie
funnie(:,:) = ima(:,:)*scal
END FUNCTION funnie
An explicit interface is mandatory for array-valued external functions.