我正在尝试编写一个程序,我希望可分配数组 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
如果以某种方式我可以选择 A
的等级,事情会容易得多,因为那时不需要 if
语句 . 也许这是不可能的,但所有的帮助都表示赞赏 .
2 回答
下一个Fortran标准(2015)的
select rank
结构类似于select case
. 我的示例在假定秩虚拟变量的rank
内在函数上使用select case
构造 .声明数组为三级 . 如果需要较低级别的数组,请将相关的尾随维度分配为大小为1 .
然后,您可以使用数组部分来获得与所需等级一致的连续切片
array
. 或者,编写对数组进行操作的相关过程以获取三级参数,并使它们了解更高维度的大小一个范围的含义 .