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不需要这些陈述了。也许这是不可能的,但感谢所有帮助。
声明该数组为三阶数组。如果需要较低等级的数组,请将相关的尾随维度分配为大小 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与您所需的排名一致的连续切片。或者,编写对数组进行操作的相关过程以采用三级参数,并使它们了解更高维度的大小一级的含义。