@@ -133,7 +133,7 @@ subroutine get_amat_0d(self, mol, amat)
133133 amat(:, :) = 0.0_wp
134134
135135 ! $omp parallel do default(none) schedule(runtime) &
136- ! $omp reduction(+: amat) shared( mol, self) &
136+ ! $omp shared( amat, mol, self) &
137137 ! $omp private(iat, izp, jat, jzp, gam, vec, r2, tmp)
138138 do iat = 1 , mol% nat
139139 izp = mol% id(iat)
@@ -143,10 +143,13 @@ subroutine get_amat_0d(self, mol, amat)
143143 r2 = vec(1 )** 2 + vec(2 )** 2 + vec(3 )** 2
144144 gam = 1.0_wp / (self% rad(izp)** 2 + self% rad(jzp)** 2 )
145145 tmp = erf(sqrt (r2* gam))/ sqrt (r2)
146+ ! $omp atomic
146147 amat(jat, iat) = amat(jat, iat) + tmp
148+ ! $omp atomic
147149 amat(iat, jat) = amat(iat, jat) + tmp
148150 end do
149151 tmp = self% eta(izp) + sqrt2pi / self% rad(izp)
152+ ! $omp atomic
150153 amat(iat, iat) = amat(iat, iat) + tmp
151154 end do
152155
@@ -174,7 +177,7 @@ subroutine get_amat_3d(self, mol, wsc, alpha, amat)
174177 call get_rec_trans(mol% lattice, rtrans)
175178
176179 ! $omp parallel do default(none) schedule(runtime) &
177- ! $omp reduction(+: amat) shared( mol, self, wsc, dtrans, rtrans, alpha, vol) &
180+ ! $omp shared( amat, mol, self, wsc, dtrans, rtrans, alpha, vol) &
178181 ! $omp private(iat, izp, jat, jzp, gam, wsw, vec, dtmp, rtmp)
179182 do iat = 1 , mol% nat
180183 izp = mol% id(iat)
@@ -186,7 +189,9 @@ subroutine get_amat_3d(self, mol, wsc, alpha, amat)
186189 vec = mol% xyz(:, iat) - mol% xyz(:, jat) - wsc% trans(:, wsc% tridx(img, jat, iat))
187190 call get_amat_dir_3d(vec, gam, alpha, dtrans, dtmp)
188191 call get_amat_rec_3d(vec, vol, alpha, rtrans, rtmp)
192+ ! $omp atomic
189193 amat(jat, iat) = amat(jat, iat) + (dtmp + rtmp) * wsw
194+ ! $omp atomic
190195 amat(iat, jat) = amat(iat, jat) + (dtmp + rtmp) * wsw
191196 end do
192197 end do
@@ -197,10 +202,12 @@ subroutine get_amat_3d(self, mol, wsc, alpha, amat)
197202 vec = wsc% trans(:, wsc% tridx(img, iat, iat))
198203 call get_amat_dir_3d(vec, gam, alpha, dtrans, dtmp)
199204 call get_amat_rec_3d(vec, vol, alpha, rtrans, rtmp)
205+ ! $omp atomic
200206 amat(iat, iat) = amat(iat, iat) + (dtmp + rtmp) * wsw
201207 end do
202208
203209 dtmp = self% eta(izp) + sqrt2pi / self% rad(izp) - 2 * alpha / sqrtpi
210+ ! $omp atomic
204211 amat(iat, iat) = amat(iat, iat) + dtmp
205212 end do
206213
0 commit comments