PROGRAM aarray INTEGER, PARAMETER :: length = 5 INTEGER :: i REAL :: a(length) ! Add this interface to the routine INTERFACE SUBROUTINE test(b) REAL, DIMENSION(:) :: b END SUBROUTINE END INTERFACE DO i=1,5 a(i) = 2.*i ENDDO WRITE(*,*) ’MAIN PROGRAM’ WRITE(*,*) a CALL test(a) END PROGRAM aarray SUBROUTINE test(b) REAL, DIMENSION(:) :: b WRITE(*,*) ’IN SUBROUTINE’ WRITE(*,*) b END SUBROUTINE test
This code, when run outputs the following
MAIN PROGRAM 2.0000000 4.0000000 6.0000000 8.0000000 10.0000000 IN SUBROUTINE 2.0000000 4.0000000 6.0000000 8.0000000 10.0000000
The use of the CONTAINS statement is no longer needed in the example above, and the END PROGRAM statement is moved.
If the n dimension parameter is passed as well, then the INTERFACE block must be modified to read
INTERFACE SUBROUTINE test(n,b) REAL, DIMENSION(n) :: b END SUBROUTINE END INTERFACE
Here, the size of the array used in the subroutine is dimensioned with n and not : in the INTERFACE block.
There are other methods to pass this information efficiently, and these will be discussed in the MODULE article.
← Previous Page
← Previous Page