From d9df710e02232f26900a6c4d39e82e1c38ce0eee Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 17 Aug 2022 00:54:56 -0400 Subject: [PATCH] revert prod_force OMP in #1360 Sometimes when box is quite small (i.e. box size < 2 * rcut), the same atom may repeat to appear in the neighbor list. This cause inaccurate results when using OMP. --- source/lib/src/prod_force.cc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/lib/src/prod_force.cc b/source/lib/src/prod_force.cc index 626b572b00..7da5cc11e1 100644 --- a/source/lib/src/prod_force.cc +++ b/source/lib/src/prod_force.cc @@ -37,17 +37,14 @@ prod_force_a_cpu( memset(force, 0, sizeof(FPTYPE) * nall * 3); // compute force of a frame - #pragma omp parallel for (int i_idx = start_index; i_idx < start_index + nloc; ++i_idx) { // deriv wrt center atom - #pragma omp single for (int aa = 0; aa < ndescrpt; ++aa) { force[i_idx * 3 + 0] -= net_deriv[i_idx * ndescrpt + aa] * env_deriv[i_idx * ndescrpt * 3 + aa * 3 + 0]; force[i_idx * 3 + 1] -= net_deriv[i_idx * ndescrpt + aa] * env_deriv[i_idx * ndescrpt * 3 + aa * 3 + 1]; force[i_idx * 3 + 2] -= net_deriv[i_idx * ndescrpt + aa] * env_deriv[i_idx * ndescrpt * 3 + aa * 3 + 2]; } // deriv wrt neighbors - #pragma omp for for (int jj = 0; jj < nnei; ++jj) { int j_idx = nlist[i_idx * nnei + jj]; if (j_idx < 0) continue; @@ -111,18 +108,15 @@ prod_force_r_cpu( } // compute force of a frame - #pragma omp parallel for (int ii = 0; ii < nloc; ++ii){ int i_idx = ii; // deriv wrt center atom - #pragma omp single for (int aa = 0; aa < ndescrpt; ++aa){ force[i_idx * 3 + 0] -= net_deriv[i_idx * ndescrpt + aa] * env_deriv[i_idx * ndescrpt * 3 + aa * 3 + 0]; force[i_idx * 3 + 1] -= net_deriv[i_idx * ndescrpt + aa] * env_deriv[i_idx * ndescrpt * 3 + aa * 3 + 1]; force[i_idx * 3 + 2] -= net_deriv[i_idx * ndescrpt + aa] * env_deriv[i_idx * ndescrpt * 3 + aa * 3 + 2]; } // deriv wrt neighbors - #pragma omp for for (int jj = 0; jj < nnei; ++jj){ int j_idx = nlist[i_idx * nnei + jj]; // if (j_idx > nloc) j_idx = j_idx % nloc;