我想對多塊CFD代碼使用動態分配,其中索引(i,j,k)針對不同的塊而變化。我真的不知道,如何爲n個塊分配任意數組索引並將其傳遞給子例程。我給出了一個示例代碼,該代碼在使用gfortran進行編譯時給出錯誤消息「錯誤:(1)處的表達式必須是標量」。多維動態數組分配
common/iteration/nb
integer, dimension (:),allocatable::nib,njb,nkb
real, dimension (:,:,:,:),allocatable::x,y,z
allocate (nib(nb),njb(nb),nkb(nb))
do l=1,nb
ni=nib(l)
nj=njb(l)
nk=nkb(l)
allocate (x(l,ni,nj,nk),y(l,ni,nj,nk),z(l,ni,nj,nk))
enddo
call gridatt (x,y,z,nib,njb,nkb)
deallocate(x,y,z,nib,njb,nkb)
end
subroutine gridatt (x,y,z,nib,njb,nkb)
common/iteration/nb
integer, dimension (nb)::nib,njb,nkb
real, dimension (nb,nib,njb,nkb)::x,y,z
do l=1,nb
read(7,*)nib(l),njb(l),nkb(l)
read(7,*)(((x(l,i,j,k),i=1,nib(l)),j=1,njb(l)),k=1,nkb(l)),
$ (((y(l,i,j,k),i=1,nib(l)),j=1,njb(l)),k=1,nkb(l)),
$ (((z(l,i,j,k),i=1,nib(l)),j=1,njb(l)),k=1,nkb(l))
enddo
return
end
請問你能告訴我們究竟是什麼'(1)'表達式是? –
錯誤消息是在分配語句x,y,z和維度(nb,nib,njb,nkb)的筆尖 –