fortran 95 で ALLOCATABLE な配列を SUBROUTINE や FUNCTION に渡してメモリアロケートする方法

SUBROUTINE, FUNCTION を MODULE の中で定義するとサブルーチンや関数で動的な割付けが出来る。サンプルコード

      MODULE allocArray
      CONTAINS

        FUNCTION fncAllocReal8 (in,sizeofIn) RESULT (out)
          REAL(8),TARGET,ALLOCATABLE,DIMENSION(:):: in
          INTEGER,INTENT(IN):: sizeofIn
          REAL(8),POINTER,DIMENSION(:):: out
          ALLOCATE(in(sizeofIn))
          out=>in
        END FUNCTION

        SUBROUTINE subAllocReal8 (in,sizeofIn)
          REAL(8),ALLOCATABLE,DIMENSION(:):: in
          INTEGER,INTENT(IN):: sizeofIn
          ALLOCATE(in(sizeofIn))
        END SUBROUTINE

      END MODULE

      PROGRAM main

        USE allocArray
        REAL(8),TARGET,ALLOCATABLE,DIMENSION(:):: in
        REAL(8),POINTER,DIMENSION(:):: a

        a=> fncAllocReal8(in,5) ! 1文ですむ

        in(4)=2.D0/3.D0
        PRINT*,a(4)
        DEALLOCATE(in)

        CALL subAllocReal8(in,5) ! 2文消費する
        a=> in

        in(4)=1.D0/3.D0
        PRINT*,a(4)
        DEALLOCATE(in)

      END PROGRAM

参考:passing allocatable arrays to subroutines - Fortran - Eng-Tips