ALLOCATABLE 型の変数を、未ALLOCATE のままサブルーチンへ送り、そちらで ALLOCATE して戻してやることができるようになりました。
ソースコード
MODULE m_mrc12_2 ! Fortran95/2003 Explained 12-2 IMPLICIT NONE CONTAINS !--------------------------------------- SUBROUTINE load(array, iunit) REAL, ALLOCATABLE, INTENT(OUT) :: array(:, :, :) INTEGER, INTENT(IN) :: iunit INTEGER :: n1, n2, n3 READ(iunit) n1, n2, n3 ALLOCATE( array(n1, n2, n3) ) READ(iunit) array RETURN END SUBROUTINE load !--------------------------------------- END MODULE m_mrc12_2 !========================================= PROGRAM mrc12_2 USE m_mrc12_2 IMPLICIT NONE REAL :: x(2, 2, 3) REAL, ALLOCATABLE :: y(:, :, :) INTEGER :: i CALL RANDOM_SEED() CALL RANDOM_NUMBER(x) WRITE(9) (SIZE(x, i), i = 1, 3) WRITE(9) x CLOSE(9) CALL load(y, 9) PRINT *, x PRINT *, y PRINT *, x - y STOP END PROGRAM mrc12_2