主题:关于多为可变阵使用
sungsong
[专家分:0] 发布于 2010-11-07 10:04:00
num_a=26
NZ(NUM_A)=(/48,48,48,31,31,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,32/)
NR(NUM_A)=(/37,31,38,37,38,37,31,38,104,102,100,94,88,82,76,70,64,58,52,46,40,34,30,28,28,28/)
real,allocatable :: area(num_a,:,:)
do inum_a=1,num_a
allocate(area(num_a,0:nz(inum_a),0:nr(inum_a)))
。。。。。。
end do
这样定义为什么不行,请大家指点 指点,谢谢!
回复列表 (共4个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-11-07 14:05:00
没deallocate?
板凳
baccle [专家分:190] 发布于 2010-11-07 16:25:00
allocate一个数组后,必须deallocate之后才能再次对它allocate,你那个循环是一只在 allocate,这样当然不行。另外,你那个 allocate里面的0:nz(inum_a)是啥意思没看懂,allocate里数组后面的括号里只能是数字,或者是有确定整数值的变量,楼主找本Fortran90的书好好看看。
do inum_a=1,num_a
allocate(area(num_a,0:nz(inum_a),0:nr(inum_a)))
。。。。。。
end do
3 楼
asymptotic [专家分:16630] 发布于 2010-11-07 18:18:00
楼主的关键是在声明动态数组有问题。
program main
implicit none
integer, parameter:: num_a = 26
integer:: NZ(NUM_A) = (/48,48,48,31,31,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,32/)
integer:: NR(NUM_A) = (/37,31,38,37,38,37,31,38,104,102,100,94,88,82,76,70,64,58,52,46,40,34,30,28,28,28/)
integer:: inum_a
real,allocatable :: area(:,:,:)
do inum_a = 1, num_a, 1
allocate(area(num_a,0:nz(inum_a),0:nr(inum_a)))
! 。。。。。。
deallocate( area )
end do
stop
end program main
4 楼
yeg001 [专家分:14390] 发布于 2010-11-08 10:00:00
可能楼主声明变量那里的意思是想先声明一个维度, 再声明剩下的维度.
我来回复