@@ -162,7 +162,7 @@ subroutine get_amat_0d(self, mol, amat)
162162 amat(:, :) = 0.0_wp
163163
164164 ! $omp parallel do default(none) schedule(runtime) &
165- ! $omp reduction(+: amat) shared( mol, self) &
165+ ! $omp shared( amat, mol, self) &
166166 ! $omp private(iat, izp, jat, jzp, gam, vec, r2, tmp)
167167 do iat = 1 , mol% nat
168168 izp = mol% id(iat)
@@ -172,10 +172,13 @@ subroutine get_amat_0d(self, mol, amat)
172172 r2 = vec(1 )** 2 + vec(2 )** 2 + vec(3 )** 2
173173 gam = 1.0_wp / (self% rad(izp)** 2 + self% rad(jzp)** 2 )
174174 tmp = erf(sqrt (r2* gam))/ sqrt (r2)
175+ ! $omp atomic
175176 amat(jat, iat) = amat(jat, iat) + tmp
177+ ! $omp atomic
176178 amat(iat, jat) = amat(iat, jat) + tmp
177179 end do
178180 tmp = self% eta(izp) + sqrt2pi / self% rad(izp)
181+ ! $omp atomic
179182 amat(iat, iat) = amat(iat, iat) + tmp
180183 end do
181184
@@ -203,7 +206,7 @@ subroutine get_amat_3d(self, mol, wsc, alpha, amat)
203206 call get_rec_trans(mol% lattice, rtrans)
204207
205208 ! $omp parallel do default(none) schedule(runtime) &
206- ! $omp reduction(+: amat) shared( mol, self, wsc, dtrans, rtrans, alpha, vol) &
209+ ! $omp shared( amat, mol, self, wsc, dtrans, rtrans, alpha, vol) &
207210 ! $omp private(iat, izp, jat, jzp, gam, wsw, vec, dtmp, rtmp)
208211 do iat = 1 , mol% nat
209212 izp = mol% id(iat)
@@ -215,7 +218,9 @@ subroutine get_amat_3d(self, mol, wsc, alpha, amat)
215218 vec = mol% xyz(:, iat) - mol% xyz(:, jat) - wsc% trans(:, wsc% tridx(img, jat, iat))
216219 call get_amat_dir_3d(vec, gam, alpha, dtrans, dtmp)
217220 call get_amat_rec_3d(vec, vol, alpha, rtrans, rtmp)
221+ ! $omp atomic
218222 amat(jat, iat) = amat(jat, iat) + (dtmp + rtmp) * wsw
223+ ! $omp atomic
219224 amat(iat, jat) = amat(iat, jat) + (dtmp + rtmp) * wsw
220225 end do
221226 end do
@@ -226,10 +231,12 @@ subroutine get_amat_3d(self, mol, wsc, alpha, amat)
226231 vec = wsc% trans(:, wsc% tridx(img, iat, iat))
227232 call get_amat_dir_3d(vec, gam, alpha, dtrans, dtmp)
228233 call get_amat_rec_3d(vec, vol, alpha, rtrans, rtmp)
234+ ! $omp atomic
229235 amat(iat, iat) = amat(iat, iat) + (dtmp + rtmp) * wsw
230236 end do
231237
232238 dtmp = self% eta(izp) + sqrt2pi / self% rad(izp) - 2 * alpha / sqrtpi
239+ ! $omp atomic
233240 amat(iat, iat) = amat(iat, iat) + dtmp
234241 end do
235242
0 commit comments