在我正在编写的并行程序中,我定义了许多多维数组(实际上只是 1D、2D 或 3D),它们在执行期间allocatable
分配有负下限。我这样做的原因是,在2D示例中,每个进程处理14 x 14矩阵并与 四个相邻进程共享2层A
的重叠,因此矩阵分配有 bounds ,其中“内部”部分该矩阵对应于从 1 到10的索引。(斜体代表选择/输入依赖)。(-1:12,-1:12)
问题是在这样做时我没有意识到不可能依赖这个 Fortran2003 功能,因此不可能call mysub(A(:,i),...)
在调用者单元A
中使用实际边界(-1和12 ),因为A(:,i)
它是一个表达式,而不仅仅是一个变量。
如果我将整个数组传递A
给子程序,问题就解决了,正如前面链接的答案中所解释的那样,但这将迫使我编写一个“更大”且不那么通用的子程序,相反,它意味着对一个维子数组。
是否可以通过子程序知道实际变量边界的方式将数组的子allocatable
数组(例如)传递给子程序?A(:,1)