私は次のようにネストされたforループを呼び出しています:
do ir = 1,Nr
do iom = iom1, iom2
xyz(1) = xo(1) + xom(iom)*r
xyz(2) = xo(2) + yom(iom)*r
xyz(3) = xo(3) + zom(iom)*r
call FUNSUB(xyz,Nprop,PropXYZ)
enddo
enddo
ここFUNSUB
で、次の方法でプロパティを評価します。
id = 1
do l=0,lmax
do m=-l,l
id = id + 1
Prop(id) = RHO * Ylm(l,m,xl(1),xl(2),xl(3))
enddo
enddo
今、私はこれを何かの形で並列化しようとしています
!$OMP parallel do reduction(+:Prop) private(ir, l, m, j, iom, r, wrad, xyz, PropOm, PropOm1, PropXYZ)
ここで見られる他のプライベート変数のいくつかは、簡潔にするために私のサンプルコードから除外されています。ループ内でプロパティが独立して評価されるように、意図的にプライベートにしようとしてl
います。ただし、スレッド間で共有されていることがわかりました。私はいくつかのデバッグオプションを入力し、継続的にの範囲を超えていることを発見し、それもまた、の範囲外にあることを発見しました。m
FUNSUB
id
Prop
l
lmax
m
(-l,l)
私の質問は、どうすればそれを確認しl
、m
プライベートに保ち、メインルーチンから共有しないようにするのですか?問題は、これらの値を保持するのはまったく異なるサブルーチンであり、どういうわけか、これらの変数のプライベート宣言が引き継がれないことです。