From 02510ec3217cd4674a44cae95a9aee4177612c24 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer <akohlmey@gmail.com> Date: Wed, 2 Nov 2016 22:32:30 -0400 Subject: [PATCH] add temporary force accumulation to local variables for vashishta styles --- src/MANYBODY/pair_vashishta.cpp | 30 +++++++++++++++++-------- src/MANYBODY/pair_vashishta_table.cpp | 32 ++++++++++++++++++--------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/MANYBODY/pair_vashishta.cpp b/src/MANYBODY/pair_vashishta.cpp index 87517a9a4b..6c5cc25335 100644 --- a/src/MANYBODY/pair_vashishta.cpp +++ b/src/MANYBODY/pair_vashishta.cpp @@ -107,6 +107,8 @@ void PairVashishta::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + double fxtmp,fytmp,fztmp; + // loop over full neighbor list of my atoms for (ii = 0; ii < inum; ii++) { @@ -116,6 +118,7 @@ void PairVashishta::compute(int eflag, int vflag) xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; + fxtmp = fytmp = fztmp = 0.0; // two-body interactions, skip half of them @@ -157,9 +160,9 @@ void PairVashishta::compute(int eflag, int vflag) twobody(¶ms[ijparam],rsq,fpair,eflag,evdwl); - f[i][0] += delx*fpair; - f[i][1] += dely*fpair; - f[i][2] += delz*fpair; + fxtmp += delx*fpair; + fytmp += dely*fpair; + fztmp += delz*fpair; f[j][0] -= delx*fpair; f[j][1] -= dely*fpair; f[j][2] -= delz*fpair; @@ -180,6 +183,9 @@ void PairVashishta::compute(int eflag, int vflag) rsq1 = delr1[0]*delr1[0] + delr1[1]*delr1[1] + delr1[2]*delr1[2]; if (rsq1 >= params[ijparam].cutsq2) continue; + double fjxtmp,fjytmp,fjztmp; + fjxtmp = fjytmp = fjztmp = 0.0; + for (kk = jj+1; kk < numshort; kk++) { k = neighshort[kk]; ktype = map[type[k]]; @@ -195,19 +201,25 @@ void PairVashishta::compute(int eflag, int vflag) threebody(¶ms[ijparam],¶ms[ikparam],¶ms[ijkparam], rsq1,rsq2,delr1,delr2,fj,fk,eflag,evdwl); - f[i][0] -= fj[0] + fk[0]; - f[i][1] -= fj[1] + fk[1]; - f[i][2] -= fj[2] + fk[2]; - f[j][0] += fj[0]; - f[j][1] += fj[1]; - f[j][2] += fj[2]; + fxtmp -= fj[0] + fk[0]; + fytmp -= fj[1] + fk[1]; + fztmp -= fj[2] + fk[2]; + fjxtmp += fj[0]; + fjytmp += fj[1]; + fjztmp += fj[2]; f[k][0] += fk[0]; f[k][1] += fk[1]; f[k][2] += fk[2]; if (evflag) ev_tally3(i,j,k,evdwl,0.0,fj,fk,delr1,delr2); } + f[j][0] += fjxtmp; + f[j][1] += fjytmp; + f[j][2] += fjztmp; } + f[i][0] += fxtmp; + f[i][1] += fytmp; + f[i][2] += fztmp; } if (vflag_fdotr) virial_fdotr_compute(); diff --git a/src/MANYBODY/pair_vashishta_table.cpp b/src/MANYBODY/pair_vashishta_table.cpp index f242cf2b74..c58f1286d8 100644 --- a/src/MANYBODY/pair_vashishta_table.cpp +++ b/src/MANYBODY/pair_vashishta_table.cpp @@ -80,6 +80,8 @@ void PairVashishtaTable::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + double fxtmp,fytmp,fztmp; + // loop over full neighbor list of my atoms for (ii = 0; ii < inum; ii++) { @@ -89,6 +91,7 @@ void PairVashishtaTable::compute(int eflag, int vflag) xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; + fxtmp = fytmp = fztmp = 0.0; // two-body interactions, skip half of them @@ -126,13 +129,13 @@ void PairVashishtaTable::compute(int eflag, int vflag) jtype = map[type[j]]; ijparam = elem2param[itype][jtype][jtype]; - if (rsq > params[ijparam].cutsq) continue; + if (rsq >= params[ijparam].cutsq) continue; twobody_table(params[ijparam],rsq,fpair,eflag,evdwl); - f[i][0] += delx*fpair; - f[i][1] += dely*fpair; - f[i][2] += delz*fpair; + fxtmp += delx*fpair; + fytmp += dely*fpair; + fztmp += delz*fpair; f[j][0] -= delx*fpair; f[j][1] -= dely*fpair; f[j][2] -= delz*fpair; @@ -153,6 +156,9 @@ void PairVashishtaTable::compute(int eflag, int vflag) rsq1 = delr1[0]*delr1[0] + delr1[1]*delr1[1] + delr1[2]*delr1[2]; if (rsq1 >= params[ijparam].cutsq2) continue; + double fjxtmp,fjytmp,fjztmp; + fjxtmp = fjytmp = fjztmp = 0.0; + for (kk = jj+1; kk < numshort; kk++) { k = neighshort[kk]; ktype = map[type[k]]; @@ -168,19 +174,25 @@ void PairVashishtaTable::compute(int eflag, int vflag) threebody(¶ms[ijparam],¶ms[ikparam],¶ms[ijkparam], rsq1,rsq2,delr1,delr2,fj,fk,eflag,evdwl); - f[i][0] -= fj[0] + fk[0]; - f[i][1] -= fj[1] + fk[1]; - f[i][2] -= fj[2] + fk[2]; - f[j][0] += fj[0]; - f[j][1] += fj[1]; - f[j][2] += fj[2]; + fxtmp -= fj[0] + fk[0]; + fytmp -= fj[1] + fk[1]; + fztmp -= fj[2] + fk[2]; + fjxtmp += fj[0]; + fjytmp += fj[1]; + fjztmp += fj[2]; f[k][0] += fk[0]; f[k][1] += fk[1]; f[k][2] += fk[2]; if (evflag) ev_tally3(i,j,k,evdwl,0.0,fj,fk,delr1,delr2); } + f[j][0] += fjxtmp; + f[j][1] += fjytmp; + f[j][2] += fjztmp; } + f[i][0] += fxtmp; + f[i][1] += fytmp; + f[i][2] += fztmp; } if (vflag_fdotr) virial_fdotr_compute(); -- GitLab