|
本帖最后由 石子 于 2024-6-13 22:58 编辑
如题。MPI并行,但我感觉这个的问题可能和并行关系不大。我在程序里首先针对不同的rank设定了二维数组的上下界,并要求输出,然后让所有的rank均分配了数组e。
[Fortran] 纯文本查看 复制代码 call set_blockbc(rank,bl_xmin,bl_xmax,bl_ymin,bl_ymax)
print*,rank,bl_xmin,bl_xmax,bl_ymin,bl_ymax
allocate(e(bl_xmin-1:bl_xmax+1,bl_ymin-1:bl_ymax+1),STAT=status0)
其中关于rank 1的输出结果如下:
2 30 31 230[/mw_shl_code]
设定值是我预设的,且其他rank均正常。
然后,我让rank 1调用了另一个子程序,形式为:call launch_gauss(rank,e,an,1)
subroutine里面我通过lbound和ubound检测rank 1所对应e的上下界,发现和在main程序里面设定的有所不同,输出如下:
1 31 1 202
subroutine 中对e的定义与相应的语句为:
[Fortran] 纯文本查看 复制代码 type(efield),dimension(:,:),intent(inout)::e
xl = lbound(e, dim=1)
xu = ubound(e, dim=1)
yl = lbound(e, dim=2)
yu = ubound(e, dim=2)
print*,xl,xu,lbound(e,dim=2),ubound(e,dim=2)
在输出上下边界之前,我并未对e进行其他操作。按照预设,e的边界值应该是:1 31 30 231.但似乎数组的边界发生了变化?这是什么原因呢
|
|