diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index eca3f6f1d7..1bd21884eb 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -486,8 +486,8 @@ void PairKIM::init_style() } - // make sure comm_reverse expects (at most) 3 values when newton is off - if (!lmps_using_newton) comm_reverse_off = 3; + // make sure comm_reverse expects (at most) 9 values when newton is off + if (!lmps_using_newton) comm_reverse_off = 9; // request full neighbor for (int i = 0; i < kim_number_of_neighbor_lists; ++i) @@ -553,7 +553,9 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) m = 0; last = first + n; - if (kim_model_support_for_forces != notSupported) + if ((kim_model_support_for_forces != notSupported) && + ((vflag_atom == 0) || + (kim_model_support_for_particleVirial == notSupported))) { for (i = first; i < last; i++) { @@ -563,6 +565,42 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } + else if ((kim_model_support_for_forces != notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = first; i < last; i++) + { + buf[m++] = fp[3*i+0]; + buf[m++] = fp[3*i+1]; + buf[m++] = fp[3*i+2]; + + buf[m++] = va[6*i+0]; + buf[m++] = va[6*i+1]; + buf[m++] = va[6*i+2]; + buf[m++] = va[6*i+3]; + buf[m++] = va[6*i+4]; + buf[m++] = va[6*i+5]; + } + return m; + } + else if ((kim_model_support_for_forces == notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = first; i < last; i++) + { + buf[m++] = va[6*i+0]; + buf[m++] = va[6*i+1]; + buf[m++] = va[6*i+2]; + buf[m++] = va[6*i+3]; + buf[m++] = va[6*i+4]; + buf[m++] = va[6*i+5]; + } + return m; + } else return 0; } @@ -578,7 +616,9 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp = &(atom->f[0][0]); m = 0; - if (kim_model_support_for_forces != notSupported) + if ((kim_model_support_for_forces != notSupported) && + ((vflag_atom == 0) || + (kim_model_support_for_particleVirial == notSupported))) { for (i = 0; i < n; i++) { @@ -588,6 +628,42 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp[3*j+2]+= buf[m++]; } } + else if ((kim_model_support_for_forces != notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = 0; i < n; i++) + { + j = list[i]; + fp[3*j+0]+= buf[m++]; + fp[3*j+1]+= buf[m++]; + fp[3*j+2]+= buf[m++]; + + va[j*6+0]+=buf[m++]; + va[j*6+1]+=buf[m++]; + va[j*6+2]+=buf[m++]; + va[j*6+3]+=buf[m++]; + va[j*6+4]+=buf[m++]; + va[j*6+5]+=buf[m++]; + } + } + else if ((kim_model_support_for_forces == notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = 0; i < n; i++) + { + j = list[i]; + va[j*6+0]+=buf[m++]; + va[j*6+1]+=buf[m++]; + va[j*6+2]+=buf[m++]; + va[j*6+3]+=buf[m++]; + va[j*6+4]+=buf[m++]; + va[j*6+5]+=buf[m++]; + } + } else ;// do nothing @@ -809,7 +885,7 @@ void PairKIM::set_argument_pointers() } else if (kim_model_support_for_particleVirial != notSupported) { - kimerror = kimerror || pargs->SetArgumentPointer(partialParticleVirial, + kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, &(vatom[0][0])); }