can*_*nin 2 fortran runtime multidimensional-array rank
我编写了一个程序,它读取包含多维数据的文件(最常见的是 3D,但也可能出现 2D)。为了提高简单性,我想将数据存储在相同等级的数组中(或假装是一个等级的数组),即使用三维数组来存储 3D 数据等;问题是程序只能在读取数据文件时了解维数。
目前,我将所有数据存储在排名一的数组中,并根据元素的坐标计算该数组中每个元素的索引(此处也建议这样做)。然而,我也读过有关指针等级重新映射的内容,这看起来非常优雅,而且正是我一直在寻找的,因为它允许我放弃数组索引确定的过程(这可能比后面的过程效率低得多)场景)。然而,现在看来我面临着与直接声明多维数组相同的问题 - 如何进行声明?同样,它需要有关排名的信息。
我如何使用指针等级重新映射或其他一些更合适的技术来在运行时设置数组的等级 - 如果这可以完成。或者我最好坚持使用我当前使用的排名一数组?
小智 5
您可以像这样使用 EQUIVALENCE 语句:
Program ranks
integer a_1d(12)
integer a_2d(2, 6)
integer a_3d(2, 2, 3)
equivalence (a_1d, a_2d, a_3d)
! fill array 1d
a_1d = (/1,2,3,4,5,6,7,8,9,10,11,12/)
print *, a_1d
print *, a_2d(1,1:6)
print *, a_2d(2,1:6)
print *, a_3d(1,1,1:3)
print *, a_3d(2,1,1:3)
print *, a_3d(1,2,1:3)
print *, a_3d(2,2,1:3)
end program ranks
Run Code Online (Sandbox Code Playgroud)