Skip to content

Commit a16b192

Browse files
committed
Remove OMP reduction for multidimensional arrays.
Signed-off-by: thfroitzheim <[email protected]>
1 parent 51c98fe commit a16b192

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/multicharge/model.F90

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)