Fortran:选择可分配数组的等级

Lun*_*Lun 4 arrays fortran rank allocatable-array

我正在尝试编写一个程序,其中我希望可分配数组的A等级为 1、2 或 3,具体取决于我在运行时的输入。我想这样做,因为后续操作A是相似的,并且我在模块中定义了一个work带有模块过程的接口,当执行该模块过程时A,会给出所需的结果。

我目前正在做的是这样的:

program main
implicit none
integer :: rank,n=10
real*8, allocatable :: A1(:)
real*8, allocatable :: A2(:,:)
read (*,*) rank

if (rank.eq.1) then
    allocate (A1(n))
else if (rank.eq.2) then
    allocate (A2(n,n))
end if

! operate on the array
if (rank.eq.1) then
    call work(A1)
else if (rank.eq.2) then
    call work(A2)
end if

end program
Run Code Online (Sandbox Code Playgroud)

如果我可以选择 的等级A,事情会容易得多,因为这样就if不需要这些陈述了。也许这是不可能的,但感谢所有帮助。

Ian*_*anH 5

声明该数组为三阶数组。如果需要较低等级的数组,请将相关的尾随维度分配为大小 1。

real, allocatable :: array(:,:,:)
...
select case (desired_rank)
case (1) ; allocate(array(n,1,1))
case (2) ; allocate(array(n,n,1))
case (3) ; allocate(array(n,n,n))
case default ; error stop 'bad desired rank'
end select
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用数组部分来获取array与您所需的排名一致的连续切片。或者,编写对数组进行操作的相关过程以采用三级参数,并使它们了解更高维度的大小一级的含义。