diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index 35ad7ba55c..2be17a1826 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -7,7 +7,7 @@ set(ALL_PACKAGES ASPHERE CLASS2 COLLOID CORESHELL DIPOLE PYTHON QEQ REPLICA RIGID SHOCK SRD VORONOI USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-FEP USER-MEAMC USER-MESO - USER-MISC USER-MOFFF USER-OMP USER-PLUMED USER-PHONON USER-REAXC + USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REAXC USER-SPH USER-SMD USER-UEF USER-YAFF) foreach(PKG ${ALL_PACKAGES}) diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index f664a0dca3..5a0ced3674 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -500,11 +500,18 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) // since local atoms are in lambda coordinates, but ghosts are not. int *sametag = atom->sametag; - double xo[3],xh1[3],xh2[3]; + double xo[3],xh1[3],xh2[3],xm[3]; + const int nlocal = atom->nlocal; - domain->lamda2x(x[i],xo); - domain->lamda2x(x[iH1],xh1); - domain->lamda2x(x[iH2],xh2); + for (int ii = 0; ii < 3; ++ii) { + xo[ii] = x[i][ii]; + xh1[ii] = x[iH1][ii]; + xh2[ii] = x[iH2][ii]; + } + + if (i < nlocal) domain->lamda2x(x[i],xo); + if (iH1 < nlocal) domain->lamda2x(x[iH1],xh1); + if (iH2 < nlocal) domain->lamda2x(x[iH2],xh2); double delx = xo[0] - xh1[0]; double dely = xo[1] - xh1[1]; @@ -513,6 +520,8 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) double rsq; int closest = iH1; + // no need to run lamda2x() here -> ghost atoms + while (sametag[iH1] >= 0) { iH1 = sametag[iH1]; delx = xo[0] - x[iH1][0]; @@ -561,13 +570,13 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) double dely2 = xh2[1] - xo[1]; double delz2 = xh2[2] - xo[2]; - xM[0] = xo[0] + alpha * 0.5 * (delx1 + delx2); - xM[1] = xo[1] + alpha * 0.5 * (dely1 + dely2); - xM[2] = xo[2] + alpha * 0.5 * (delz1 + delz2); + xm[0] = xo[0] + alpha * 0.5 * (delx1 + delx2); + xm[1] = xo[1] + alpha * 0.5 * (dely1 + dely2); + xm[2] = xo[2] + alpha * 0.5 * (delz1 + delz2); // ... and convert M to lamda space for PPPM - domain->x2lamda(xM,xM); + domain->x2lamda(xm,xM); } else { diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c index f56d3616c8..a5a00f86a5 100644 --- a/src/STUBS/mpi.c +++ b/src/STUBS/mpi.c @@ -12,14 +12,13 @@ ------------------------------------------------------------------------ */ /* Single-processor "stub" versions of MPI routines */ -/* -I. in Makefile insures dummy mpi.h in this dir is included */ #include #include #include #include #include -#include +#include "mpi.h" #include "../version.h" /* data structure for double/int */ diff --git a/src/USER-OMP/pppm_omp.cpp b/src/USER-OMP/pppm_omp.cpp index 3ef3de1ab7..c6aaafaa31 100644 --- a/src/USER-OMP/pppm_omp.cpp +++ b/src/USER-OMP/pppm_omp.cpp @@ -48,7 +48,7 @@ using namespace MathSpecial; PPPMOMP::PPPMOMP(LAMMPS *lmp) : PPPM(lmp), ThrOMP(lmp, THR_KSPACE) { - triclinic_support = 0; + triclinic_support = 1; suffix_flag |= Suffix::OMP; } diff --git a/src/USER-OMP/pppm_tip4p_omp.cpp b/src/USER-OMP/pppm_tip4p_omp.cpp index d7c12613d9..1a2bcfc0a3 100644 --- a/src/USER-OMP/pppm_tip4p_omp.cpp +++ b/src/USER-OMP/pppm_tip4p_omp.cpp @@ -750,11 +750,18 @@ void PPPMTIP4POMP::find_M_thr(int i, int &iH1, int &iH2, dbl3_t &xM) // since local atoms are in lambda coordinates, but ghosts are not. int *sametag = atom->sametag; - double xo[3],xh1[3],xh2[3]; + double xo[3],xh1[3],xh2[3],xm[3]; + const int nlocal = atom->nlocal; - domain->lamda2x(x[i],xo); - domain->lamda2x(x[iH1],xh1); - domain->lamda2x(x[iH2],xh2); + for (int ii = 0; ii < 3; ++ii) { + xo[ii] = x[i][ii]; + xh1[ii] = x[iH1][ii]; + xh2[ii] = x[iH2][ii]; + } + + if (i < nlocal) domain->lamda2x(x[i],xo); + if (iH1 < nlocal) domain->lamda2x(x[iH1],xh1); + if (iH2 < nlocal) domain->lamda2x(x[iH2],xh2); double delx = xo[0] - xh1[0]; double dely = xo[1] - xh1[1]; @@ -763,6 +770,7 @@ void PPPMTIP4POMP::find_M_thr(int i, int &iH1, int &iH2, dbl3_t &xM) double rsq; int closest = iH1; + // no need to run lamda2x here -> ghost atoms while (sametag[iH1] >= 0) { iH1 = sametag[iH1]; delx = xo[0] - x[iH1][0]; @@ -811,13 +819,13 @@ void PPPMTIP4POMP::find_M_thr(int i, int &iH1, int &iH2, dbl3_t &xM) double dely2 = xh2[1] - xo[1]; double delz2 = xh2[2] - xo[2]; - xM.x = xo[0] + alpha * 0.5 * (delx1 + delx2); - xM.y = xo[1] + alpha * 0.5 * (dely1 + dely2); - xM.z = xo[2] + alpha * 0.5 * (delz1 + delz2); + xm[0] = xo[0] + alpha * 0.5 * (delx1 + delx2); + xm[1] = xo[1] + alpha * 0.5 * (dely1 + dely2); + xm[2] = xo[2] + alpha * 0.5 * (delz1 + delz2); // ... and convert M to lamda space for PPPM - domain->x2lamda((double *)&xM,(double *)&xM); + domain->x2lamda(xm,(double *)&xM); } else { diff --git a/src/force.cpp b/src/force.cpp index 1cc6b3e01b..cc121a5f80 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -21,6 +21,7 @@ #include "style_improper.h" #include "style_pair.h" #include "style_kspace.h" +#include "atom.h" #include "comm.h" #include "pair.h" #include "pair_hybrid.h"