PROGRAM copytst INTEGER, PARAMETER :: M=200, N=300 DOUBLE PRECISION :: A(M,N), C(M,N) EXTERNAL :: matcopy CALL random_number(A) ! init A CALL matcopy(m, n, A, M, C, M) ! set C = A print *, 'maxdiff = ', maxval(abs(A-C)) ! should be zero END PROGRAM copytst SUBROUTINE matcopy(nrows, ncols, A, lda, B, ldb) ! ! Copies nrows x ncols section of A into B ! INTEGER, INTENT(IN) :: nrows, ncols, lda, ldb DOUBLE PRECISION, INTENT(IN) :: A(lda,*) DOUBLE PRECISION, INTENT(OUT) :: B(ldb,*) INTEGER :: i, j DO j = 1, ncols DO i = 1, nrows B(i,j) = A(i,j) END DO END DO END SUBROUTINE matcopy