回 帖 发 新 帖 刷新版面

主题:关于多为可变阵使用

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个回复)

沙发

没deallocate?

板凳

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 楼

楼主的关键是在声明动态数组有问题。

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 楼

可能楼主声明变量那里的意思是想先声明一个维度, 再声明剩下的维度.

我来回复

您尚未登录,请登录后再回复。点此登录或注册