我在 Fortran 90 中有一个问题。
我有一个用户定义的类型,当我调用其中一个 MPI 子例程时,数据看起来是按值传递的(不是地址,我认为它应该)。输出参数未修改。它似乎特定于 MPI 调用。我在一个简单的测试中尝试了同样的事情,我可以在调用范围内更改传入的值。我不确定为什么会这样,因为我认为 Fortran 总是通过地址传递。知道会发生什么吗?
为了清楚起见,注释片段显示了调用是如何进行的。在第一次调用中,c%NSubDomains
是一个输出参数,应该在调用范围内修改,但不是。当我使用数组而不是用户定义类型的成员调用时,它在未注释的代码段中起作用。
! ! This doesn't work output values aren't modified ??
! call MPI_Dims_create(c%NProcs,c%NDims,c%NSubDomains,iErr)
nsubs(:)=0
call MPI_Dims_create(c%NProcs,c%NDims,nsubs,iErr)
c%NSubDomains=nsubs