我需要從Fortran程序的文件中讀取大量數據。數據的大小是可變的,所以我想動態分配數組。我的想法是創建一個讀取所有數據並分配內存的子例程。該方案的一個簡化版本是:在Fortran子程序中分配數組
program main
implicit none
real*8, dimension(:,:), allocatable :: v
integer*4 n
!This subroutine will read all the data and allocate the memory
call Memory(v,n)
!From here the program will have other subroutines to make calculations
end
subroutine Memory(v,n)
implicit none
real*8, dimension(:,:), allocatable :: v
integer*4 n,i
n=5
allocate(v(n,2))
do i=1,n
v(i,1)=1.0
v(i,2)=2.0
enddo
return
end subroutine Memory
這個節目給我下面的錯誤:
Error: Dummy argument 'v' of procedure 'memory' at (1) has an attribute that requieres an explicit interface for this procedure
這是結構的這種程序的正確方法嗎?如果是這樣,我該如何解決這個錯誤?
謝謝。
謝謝!在我的真實程序中,我有多個文件,我會嘗試模塊方法。 – Msegade
如果我可以提出另一個建議 - 嘗試「放棄」使用非標準實數* 8和整數* 4語法,它會限制靈活性。一種流行的方法是定義一個模塊KINDS,它使用SELECTED_INT_KIND和SELECTED_REAL_KIND爲您要使用的類型(例如SP和DP)聲明一系列PARAMETER常量,然後將REAL(DP)用於聲明。我同意Mark的觀點,模塊是你最好的選擇。 –