最初のサブルーチン (CALCONE) 内に配列を作成するプログラムを以下に示します。それを次のサブルーチン (CALCTWO) に渡し、メイン プログラムのファイルに出力します。配列を IN サブルーチン CALCONE に割り当てる必要があるため、INTENT(IN)、INTENT(OUT) ステートメントをどこに配置すればよいかわかりません (私のプログラムでは、長さは CALCONE で決定されるため) - 回避する試みを省略しました錯乱。誰かがそれらを正しい場所に置くのを手伝ってくれませんか。テンプレートができたら、それが将来どのように機能するかを理解します。ありがとう。
私はプログラムを単純化し、変数は移動できない他のものを表しています。サブルーチン間で配列を移動し、メイン プログラムの最後に書き出す方法が必要なだけです。
program TEST
implicit none
integer a,b,c,d,reclen
a = 1
b = 2
c = 3
d = 4
call CALCONE(a,b,c,d,array)
call CALCTWO(e,f,g,h,array)
inquire(iolength=reclen)array
open(unit=8,file='array_output.dat', &
form="unformatted",access="stream")
write(unit=8)array
close(unit=8)
END PROGRAM TEST
SUBROUTINE CALCONE(adummy,bdummy,cdummy,ddummy,arraydummy)
IMPLICIT NONE
integer i,j,k
integer e,f,g,h,N
!ALLOCATE ARRAY HERE OR IN MAIN PROGRAM?
real*8, allocatable :: arraydummy(:,:)
e = a + 1
f = b + 1
g = c + 1
h = d + 1
! N can only be is calculated here
allocate(arraydummy(1:N,1:3))
!POPULATE 'arraydummy'
!PASS ARRAY BACK OUT TO NEXT SUBROUTINE FOR FURTHER PROCESSING IN CALCTWO
END SUBROUTINE CALCTWO
SUBROUTINE CALCTWO(edummy,fdummy,gdummy,hdummy,arraydummy)
IMPLICIT NONE
integer e,f,g,h
!DEFINE HERE ALSO? i.e.
!real*8, allocatable :: arraydummy(:,:)
e = a + 1
f = b + 1
g = c + 1
h = d + 1
arraydummy = arraydummy*e*f*g*h
END SUBROUTINE CALCTWO