From 1fc2eb1e3e4bea2f857f334b485c797e2a0a788e Mon Sep 17 00:00:00 2001
From: Steve Plimpton <sjplimp@sandia.gov>
Date: Wed, 21 Jun 2017 15:12:51 -0600
Subject: [PATCH] fix issue with rRESPA inner/middle neighbor lists

---
 doc/src/compute_pair_local.txt     | 4 +++-
 doc/src/compute_property_local.txt | 3 +++
 doc/src/run_style.txt              | 4 ++--
 src/neighbor.cpp                   | 4 +++-
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/doc/src/compute_pair_local.txt b/doc/src/compute_pair_local.txt
index 0121210994..16aaba4667 100644
--- a/doc/src/compute_pair_local.txt
+++ b/doc/src/compute_pair_local.txt
@@ -76,7 +76,9 @@ command for the types of the two atoms is used.  For the {radius}
 setting, the sum of the radii of the two particles is used as a
 cutoff.  For example, this is appropriate for granular particles which
 only interact when they are overlapping, as computed by "granular pair
-styles"_pair_gran.txt.
+styles"_pair_gran.txt.  Note that if a granular model defines atom
+types such that all particles of a specific type are monodisperse
+(same diameter), then the two settings are effectively identical.
 
 Note that as atoms migrate from processor to processor, there will be
 no consistent ordering of the entries within the local vector or array
diff --git a/doc/src/compute_property_local.txt b/doc/src/compute_property_local.txt
index f7851e864b..39106a39c8 100644
--- a/doc/src/compute_property_local.txt
+++ b/doc/src/compute_property_local.txt
@@ -79,6 +79,9 @@ the two atoms is used.  For the {radius} setting, the sum of the radii
 of the two particles is used as a cutoff.  For example, this is
 appropriate for granular particles which only interact when they are
 overlapping, as computed by "granular pair styles"_pair_gran.html.
+Note that if a granular model defines atom types such that all
+particles of a specific type are monodisperse (same diameter), then
+the two settings are effectively identical.
 
 If the inputs are bond, angle, etc attributes, the local data is
 generated by looping over all the atoms owned on a processor and
diff --git a/doc/src/run_style.txt b/doc/src/run_style.txt
index 0e3c1a939f..a67899420b 100644
--- a/doc/src/run_style.txt
+++ b/doc/src/run_style.txt
@@ -17,7 +17,7 @@ style = {verlet} or {verlet/split} or {respa} or {respa/omp} :ulb,l
   {verlet/split} args = none
   {respa} args = N n1 n2 ... keyword values ...
     N = # of levels of rRESPA
-    n1, n2, ... = loop factor between rRESPA levels (N-1 values)
+    n1, n2, ... = loop factors between rRESPA levels (N-1 values)
     zero or more keyword/value pairings may be appended to the loop factors
     keyword = {bond} or {angle} or {dihedral} or {improper} or
               {pair} or {inner} or {middle} or {outer} or {hybrid} or {kspace}
@@ -55,7 +55,7 @@ style = {verlet} or {verlet/split} or {respa} or {respa/omp} :ulb,l
 
 run_style verlet
 run_style respa 4 2 2 2 bond 1 dihedral 2 pair 3 kspace 4
-run_style respa 4 2 2 2 bond 1 dihedral 2 inner 3 5.0 6.0 outer 4 kspace 4 :pre
+run_style respa 4 2 2 2 bond 1 dihedral 2 inner 3 5.0 6.0 outer 4 kspace 4
 run_style respa 3 4 2 bond 1 hybrid 2 2 1 kspace 3 :pre
 
 [Description:]
diff --git a/src/neighbor.cpp b/src/neighbor.cpp
index 60b1bc7ee0..487b860c92 100644
--- a/src/neighbor.cpp
+++ b/src/neighbor.cpp
@@ -1268,9 +1268,11 @@ void Neighbor::morph_copy()
 
       if (irq->ghost && !jrq->ghost) continue;
 
-      // do not copy from a history list
+      // do not copy from a history list or a respa middle/inner list
 
       if (jrq->history) continue;
+      if (jrq->respamiddle) continue;
+      if (jrq->respainner) continue;
 
       // these flags must be same,
       //   else 2 lists do not store same pairs
-- 
GitLab