我在過去幾天編碼時似乎碰壁了。從我所知,有可能使Fortran數組的數組ALA Fortran array of variable size arraysfortran「陣列陣列」和「包裝」問題
type par
.... !data
integer :: location
end type par
type locations
....! data
type (par), allocatable, dimension(:) :: pars
end type locations
type (par), allocatable, dimension(:) :: all_pars
type (locations), allocatable, dimension(:) :: all_loc
.... !read numpars, numlocs from file etc
allocate(all_pars(numpars))
allocate(all_locs(numlocs))
!initialize all_pars
do n = 1:numpars
....
all_pars(n)%location = some_location
enddo
!get particles in each location
do n = 1:numlocs
allocate(all_locs(n)%pars(count(all_pars(:)%location .ne. n)))
all_locs(n)%pars = pack(all_pars, (all_pars(:)%location .ne. n)) !ERROR: An assignment of different structure types is invalid.
enddo
編譯器不同意我的上面的堆棧溢出示例代碼摺合流水線抱怨,但它確實確實有問題當我嘗試使用該數組來存儲包函數調用的結果時。我懷疑它可能是這樣的情況下,分配功能不符合預期,但由於代碼不編譯,我無法調試它....
包裝使用的squirrely想法來自http://flibs.sourceforge.net/fortran_aspects.html,大約一半在頁面下方。
我是一個Linux系統上運行,用ifort 12.1.3.293
任何的幫助深表感謝
感謝您的迴應。我不打算製作一個真正的完整程序,只是爲了填補問題代碼。謝謝你這麼做,但這對我不起作用。我可以像編譯代碼一樣編譯代碼,但是它會將每個all_locs%pars數組保留爲我的調試器中未定義的值,並且實際上添加一條寫入語句會將變量顯示爲空白。我在Linux上與ifort 12.1.3.293 – walrus
啊,我得到它的工作。您指定粒子位置的方式出了問題,而且確實需要分配語句(也許您可以詳細說明爲什麼我不需要它?)。據我所知,我的錯誤在位置類型定義中,但是當我解決了我的問題時,我修復了它。我有「類型(par),allocatable :: pars(:)」而不是上面指定的尺寸(:)。 – walrus
@walrus您需要-assume realloc_lhs(包含在通過-standard-semantics啓用的選項中)命令行選項啓用自動重新分配ifort中賦值的左側。 – IanH