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