Fortran 90 に問題があります。
私はユーザー定義型を持っており、MPI サブルーチンの 1 つを呼び出すと、データは値で渡されるように見えます (私が思っていたように、アドレスではありません)。出力引数は変更されません。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