From 759ee1f3e88b16ed78e46d85c24e83e2bc9dec1b Mon Sep 17 00:00:00 2001
From: sjplimp <sjplimp@f3b2605a-c512-4ea7-a41b-209d697bcdaa>
Date: Thu, 14 Apr 2011 17:40:40 +0000
Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@5940
 f3b2605a-c512-4ea7-a41b-209d697bcdaa

---
 src/ASPHERE/atom_vec_ellipsoid.cpp  | 116 ++++++++++++++++++----------
 src/ASPHERE/atom_vec_ellipsoid.h    |  12 +--
 src/DIPOLE/atom_vec_dipole.cpp      |  73 +++++++++++------
 src/DIPOLE/atom_vec_dipole.h        |   8 +-
 src/MOLECULE/atom_vec_angle.cpp     |  23 ++++--
 src/MOLECULE/atom_vec_angle.h       |   4 +-
 src/MOLECULE/atom_vec_bond.cpp      |  23 ++++--
 src/MOLECULE/atom_vec_bond.h        |   4 +-
 src/MOLECULE/atom_vec_full.cpp      |  28 +++++--
 src/MOLECULE/atom_vec_full.h        |   4 +-
 src/MOLECULE/atom_vec_molecular.cpp |  23 ++++--
 src/MOLECULE/atom_vec_molecular.h   |   4 +-
 src/PERI/atom_vec_peri.cpp          |  63 ++++++++++-----
 src/PERI/atom_vec_peri.h            |   8 +-
 src/SRD/fix_srd.cpp                 |   2 -
 src/USER-EFF/atom_vec_electron.cpp  |  86 ++++++++++++++-------
 src/USER-EFF/atom_vec_electron.h    |  12 +--
 src/atom.cpp                        |   4 +-
 src/atom.h                          |   2 +-
 src/atom_vec.h                      |  12 +--
 src/atom_vec_charge.cpp             |  23 ++++--
 src/atom_vec_charge.h               |   4 +-
 src/atom_vec_hybrid.cpp             | 109 ++++++++++++++++----------
 src/atom_vec_sphere.cpp             |  88 ++++++++++++++-------
 src/atom_vec_sphere.h               |  12 +--
 src/pair_dpd_tstat.cpp              |   2 +-
 26 files changed, 490 insertions(+), 259 deletions(-)

diff --git a/src/ASPHERE/atom_vec_ellipsoid.cpp b/src/ASPHERE/atom_vec_ellipsoid.cpp
index e6c7a127e4..50820debe8 100755
--- a/src/ASPHERE/atom_vec_ellipsoid.cpp
+++ b/src/ASPHERE/atom_vec_ellipsoid.cpp
@@ -262,13 +262,19 @@ int AtomVecEllipsoid::pack_comm_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecEllipsoid::pack_comm_one(int i, double *buf)
+int AtomVecEllipsoid::pack_comm_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = quat[i][0];
-  buf[1] = quat[i][1];
-  buf[2] = quat[i][2];
-  buf[3] = quat[i][3];
-  return 4;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = quat[i][0];
+    buf[m++] = quat[i][1];
+    buf[m++] = quat[i][2];
+    buf[m++] = quat[i][3];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -317,13 +323,19 @@ void AtomVecEllipsoid::unpack_comm_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecEllipsoid::unpack_comm_one(int i, double *buf)
+int AtomVecEllipsoid::unpack_comm_hybrid(int n, int first, double *buf)
 {
-  quat[i][0] = buf[0];
-  quat[i][1] = buf[1];
-  quat[i][2] = buf[2];
-  quat[i][3] = buf[3];
-  return 4;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    quat[i][0] = buf[m++];
+    quat[i][1] = buf[m++];
+    quat[i][2] = buf[m++];
+    quat[i][3] = buf[m++];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -347,12 +359,18 @@ int AtomVecEllipsoid::pack_reverse(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecEllipsoid::pack_reverse_one(int i, double *buf)
+int AtomVecEllipsoid::pack_reverse_hybrid(int n, int first, double *buf)
 {
-  buf[0] = torque[i][0];
-  buf[1] = torque[i][1];
-  buf[2] = torque[i][2];
-  return 3;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    buf[m++] = torque[i][0];
+    buf[m++] = torque[i][1];
+    buf[m++] = torque[i][2];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -375,12 +393,18 @@ void AtomVecEllipsoid::unpack_reverse(int n, int *list, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecEllipsoid::unpack_reverse_one(int i, double *buf)
+int AtomVecEllipsoid::unpack_reverse_hybrid(int n, int *list, double *buf)
 {
-  torque[i][0] += buf[0];
-  torque[i][1] += buf[1];
-  torque[i][2] += buf[2];
-  return 3;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    torque[j][0] += buf[m++];
+    torque[j][1] += buf[m++];
+    torque[j][2] += buf[m++];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -543,16 +567,22 @@ int AtomVecEllipsoid::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecEllipsoid::pack_border_one(int i, double *buf)
+int AtomVecEllipsoid::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = shape[i][0];
-  buf[1] = shape[i][1];
-  buf[2] = shape[i][2];
-  buf[3] = quat[i][0];
-  buf[4] = quat[i][1];
-  buf[5] = quat[i][2];
-  buf[6] = quat[i][3];
-  return 7;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = shape[j][0];
+    buf[m++] = shape[j][1];
+    buf[m++] = shape[j][2];
+    buf[m++] = quat[j][0];
+    buf[m++] = quat[j][1];
+    buf[m++] = quat[j][2];
+    buf[m++] = quat[j][3];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -615,16 +645,22 @@ void AtomVecEllipsoid::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecEllipsoid::unpack_border_one(int i, double *buf)
+int AtomVecEllipsoid::unpack_border_hybrid(int n, int first, double *buf)
 {
-  shape[i][0] = buf[0];
-  shape[i][1] = buf[1];
-  shape[i][2] = buf[2];
-  quat[i][0] = buf[3];
-  quat[i][1] = buf[4];
-  quat[i][2] = buf[5];
-  quat[i][3] = buf[6];
-  return 7;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    shape[i][0] = buf[m++];
+    shape[i][1] = buf[m++];
+    shape[i][2] = buf[m++];
+    quat[i][0] = buf[m++];
+    quat[i][1] = buf[m++];
+    quat[i][2] = buf[m++];
+    quat[i][3] = buf[m++];
+  }
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/ASPHERE/atom_vec_ellipsoid.h b/src/ASPHERE/atom_vec_ellipsoid.h
index e3f0938047..b1a4a81341 100755
--- a/src/ASPHERE/atom_vec_ellipsoid.h
+++ b/src/ASPHERE/atom_vec_ellipsoid.h
@@ -33,20 +33,20 @@ class AtomVecEllipsoid : public AtomVec {
   void copy(int, int);
   int pack_comm(int, int *, double *, int, int *);
   int pack_comm_vel(int, int *, double *, int, int *);
-  int pack_comm_one(int, double *);
+  int pack_comm_hybrid(int, int *, double *);
   void unpack_comm(int, int, double *);
   void unpack_comm_vel(int, int, double *);
-  int unpack_comm_one(int, double *);
+  int unpack_comm_hybrid(int, int, double *);
   int pack_reverse(int, int, double *);
-  int pack_reverse_one(int, double *);
+  int pack_reverse_hybrid(int, int, double *);
   void unpack_reverse(int, int *, double *);
-  int unpack_reverse_one(int, double *);
+  int unpack_reverse_hybrid(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/DIPOLE/atom_vec_dipole.cpp b/src/DIPOLE/atom_vec_dipole.cpp
index 7a1bc6be14..71c9d1407b 100644
--- a/src/DIPOLE/atom_vec_dipole.cpp
+++ b/src/DIPOLE/atom_vec_dipole.cpp
@@ -44,7 +44,6 @@ AtomVecDipole::AtomVecDipole(LAMMPS *lmp, int narg, char **arg) :
   size_data_vel = 7;
   xcol_data = 4;
 
-  atom->dipole_flag = 1;
   atom->q_flag = atom->mu_flag = 1;
 }
 
@@ -232,12 +231,18 @@ int AtomVecDipole::pack_comm_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecDipole::pack_comm_one(int i, double *buf)
+int AtomVecDipole::pack_comm_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = mu[i][0];
-  buf[1] = mu[i][1];
-  buf[2] = mu[i][2];
-  return 3;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = mu[j][0];
+    buf[m++] = mu[j][1];
+    buf[m++] = mu[j][2];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -281,12 +286,18 @@ void AtomVecDipole::unpack_comm_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecDipole::unpack_comm_one(int i, double *buf)
+int AtomVecDipole::unpack_comm_hybrid(int n, int first, double *buf)
 {
-  mu[i][0] = buf[0];
-  mu[i][1] = buf[1];
-  mu[i][2] = buf[2];
-  return 3;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    mu[i][0] = buf[m++];
+    mu[i][1] = buf[m++];
+    mu[i][2] = buf[m++];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -461,14 +472,20 @@ int AtomVecDipole::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecDipole::pack_border_one(int i, double *buf)
+int AtomVecDipole::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = q[i];
-  buf[1] = mu[i][0];
-  buf[2] = mu[i][1];
-  buf[3] = mu[i][2];
-  buf[4] = mu[i][3];
-  return 5;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = q[j];
+    buf[m++] = mu[j][0];
+    buf[m++] = mu[j][1];
+    buf[m++] = mu[j][2];
+    buf[m++] = mu[j][3];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -524,14 +541,20 @@ void AtomVecDipole::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecDipole::unpack_border_one(int i, double *buf)
+int AtomVecDipole::unpack_border_hybrid(int n, int first, double *buf)
 {
-  q[i] = buf[0];
-  mu[i][0] = buf[1];
-  mu[i][1] = buf[2];
-  mu[i][2] = buf[3];
-  mu[i][3] = buf[4];
-  return 5;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    q[i] = buf[m++];
+    mu[i][0] = buf[m++];
+    mu[i][1] = buf[m++];
+    mu[i][2] = buf[m++];
+    mu[i][3] = buf[m++];
+  }
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/DIPOLE/atom_vec_dipole.h b/src/DIPOLE/atom_vec_dipole.h
index 5cfd54c3d1..8e8c77bdc8 100644
--- a/src/DIPOLE/atom_vec_dipole.h
+++ b/src/DIPOLE/atom_vec_dipole.h
@@ -32,18 +32,18 @@ class AtomVecDipole : public AtomVec {
   void copy(int, int);
   int pack_comm(int, int *, double *, int, int *);
   int pack_comm_vel(int, int *, double *, int, int *);
-  int pack_comm_one(int, double *);
+  int pack_comm_hybrid(int, int *, double *);
   void unpack_comm(int, int, double *);
   void unpack_comm_vel(int, int, double *);
-  int unpack_comm_one(int, double *);
+  int unpack_comm_hybrid(int, int, double *);
   int pack_reverse(int, int, double *);
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/MOLECULE/atom_vec_angle.cpp b/src/MOLECULE/atom_vec_angle.cpp
index 54c5cc6746..26e3968bcf 100644
--- a/src/MOLECULE/atom_vec_angle.cpp
+++ b/src/MOLECULE/atom_vec_angle.cpp
@@ -428,10 +428,16 @@ int AtomVecAngle::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecAngle::pack_border_one(int i, double *buf)
+int AtomVecAngle::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = molecule[i];
-  return 1;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = molecule[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -479,10 +485,15 @@ void AtomVecAngle::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecAngle::unpack_border_one(int i, double *buf)
+int AtomVecAngle::unpack_border_hybrid(int n, int first, double *buf)
 {
-  molecule[i] = static_cast<int> (buf[0]);
-  return 1;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    molecule[i] = static_cast<int> (buf[m++]);
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h
index bd73a7ef38..009a38d8eb 100644
--- a/src/MOLECULE/atom_vec_angle.h
+++ b/src/MOLECULE/atom_vec_angle.h
@@ -38,10 +38,10 @@ class AtomVecAngle : public AtomVec {
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/MOLECULE/atom_vec_bond.cpp b/src/MOLECULE/atom_vec_bond.cpp
index 5900aa4609..81660e1e2f 100644
--- a/src/MOLECULE/atom_vec_bond.cpp
+++ b/src/MOLECULE/atom_vec_bond.cpp
@@ -421,10 +421,16 @@ int AtomVecBond::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecBond::pack_border_one(int i, double *buf)
+int AtomVecBond::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = molecule[i];
-  return 1;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = molecule[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -472,10 +478,15 @@ void AtomVecBond::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecBond::unpack_border_one(int i, double *buf)
+int AtomVecBond::unpack_border_hybrid(int n, int first, double *buf)
 {
-  molecule[i] = static_cast<int> (buf[0]);
-  return 1;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    molecule[i] = static_cast<int> (buf[m++]);
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h
index 5a6648651c..3274e3a0cf 100644
--- a/src/MOLECULE/atom_vec_bond.h
+++ b/src/MOLECULE/atom_vec_bond.h
@@ -38,10 +38,10 @@ class AtomVecBond : public AtomVec {
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/MOLECULE/atom_vec_full.cpp b/src/MOLECULE/atom_vec_full.cpp
index 8261b4317e..428c8957ca 100644
--- a/src/MOLECULE/atom_vec_full.cpp
+++ b/src/MOLECULE/atom_vec_full.cpp
@@ -506,11 +506,17 @@ int AtomVecFull::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecFull::pack_border_one(int i, double *buf)
+int AtomVecFull::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = q[i];
-  buf[1] = molecule[i];
-  return 2;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = q[j];
+    buf[m++] = molecule[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -560,11 +566,17 @@ void AtomVecFull::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecFull::unpack_border_one(int i, double *buf)
+int AtomVecFull::unpack_border_hybrid(int n, int first, double *buf)
 {
-  q[i] = buf[0];
-  molecule[i] = static_cast<int> (buf[1]);
-  return 2;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    q[i] = buf[m++];
+    molecule[i] = static_cast<int> (buf[m++]);
+  }
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/MOLECULE/atom_vec_full.h b/src/MOLECULE/atom_vec_full.h
index 4fea6a5ea5..c2c23881d7 100644
--- a/src/MOLECULE/atom_vec_full.h
+++ b/src/MOLECULE/atom_vec_full.h
@@ -38,10 +38,10 @@ class AtomVecFull : public AtomVec {
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/MOLECULE/atom_vec_molecular.cpp b/src/MOLECULE/atom_vec_molecular.cpp
index 84bfa9f27a..ac26f00c49 100644
--- a/src/MOLECULE/atom_vec_molecular.cpp
+++ b/src/MOLECULE/atom_vec_molecular.cpp
@@ -499,10 +499,16 @@ int AtomVecMolecular::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecMolecular::pack_border_one(int i, double *buf)
+int AtomVecMolecular::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = molecule[i];
-  return 1;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = molecule[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -550,10 +556,15 @@ void AtomVecMolecular::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecMolecular::unpack_border_one(int i, double *buf)
+int AtomVecMolecular::unpack_border_hybrid(int n, int first, double *buf)
 {
-  molecule[i] = static_cast<int> (buf[0]);
-  return 1;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    molecule[i] = static_cast<int> (buf[m++]);
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h
index 2f1ce1006f..6249b8bf1e 100644
--- a/src/MOLECULE/atom_vec_molecular.h
+++ b/src/MOLECULE/atom_vec_molecular.h
@@ -38,10 +38,10 @@ class AtomVecMolecular : public AtomVec {
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/PERI/atom_vec_peri.cpp b/src/PERI/atom_vec_peri.cpp
index d23fe810f3..b4d94e3fa8 100644
--- a/src/PERI/atom_vec_peri.cpp
+++ b/src/PERI/atom_vec_peri.cpp
@@ -231,10 +231,16 @@ int AtomVecPeri::pack_comm_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecPeri::pack_comm_one(int i, double *buf)
+int AtomVecPeri::pack_comm_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = s0[i];
-  return 1;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = s0[i];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -274,10 +280,15 @@ void AtomVecPeri::unpack_comm_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecPeri::unpack_comm_one(int i, double *buf)
+int AtomVecPeri::unpack_comm_hybrid(int n, int first, double *buf)
 {
-  s0[i] = buf[0];
-  return 1;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    s0[i] = buf[m++];
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -452,14 +463,20 @@ int AtomVecPeri::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecPeri::pack_border_one(int i, double *buf)
+int AtomVecPeri::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = vfrac[i];
-  buf[1] = s0[i];
-  buf[2] = x0[i][0];
-  buf[3] = x0[i][1];
-  buf[4] = x0[i][2];
-  return 5;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = vfrac[j];
+    buf[m++] = s0[j];
+    buf[m++] = x0[j][0];
+    buf[m++] = x0[j][1];
+    buf[m++] = x0[j][2];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -515,14 +532,20 @@ void AtomVecPeri::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
  
-int AtomVecPeri::unpack_border_one(int i, double *buf)
+int AtomVecPeri::unpack_border_hybrid(int n, int first, double *buf)
 {
-  vfrac[i] = buf[0];
-  s0[i] = buf[1];
-  x0[i][0] = buf[2];
-  x0[i][1] = buf[3];
-  x0[i][2] = buf[4];
-  return 5;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    vfrac[i] = buf[m++];
+    s0[i] = buf[m++];
+    x0[i][0] = buf[m++];
+    x0[i][1] = buf[m++];
+    x0[i][2] = buf[m++];
+  }
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/PERI/atom_vec_peri.h b/src/PERI/atom_vec_peri.h
index 333e452b5a..4b14c04b42 100755
--- a/src/PERI/atom_vec_peri.h
+++ b/src/PERI/atom_vec_peri.h
@@ -32,18 +32,18 @@ class AtomVecPeri : public AtomVec {
   void copy(int, int);
   int pack_comm(int, int *, double *, int, int *);
   int pack_comm_vel(int, int *, double *, int, int *);
-  int pack_comm_one(int, double *);
+  int pack_comm_hybrid(int, int *, double *);
   void unpack_comm(int, int, double *);
   void unpack_comm_vel(int, int, double *);
-  int unpack_comm_one(int, double *);
+  int unpack_comm_hybrid(int, int, double *);
   int pack_reverse(int, int, double *);
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/SRD/fix_srd.cpp b/src/SRD/fix_srd.cpp
index 41f9040625..ec8716f403 100644
--- a/src/SRD/fix_srd.cpp
+++ b/src/SRD/fix_srd.cpp
@@ -291,8 +291,6 @@ void FixSRD::init()
 
   if (bigexist && !atom->sphere_flag && !atom->ellipsoid_flag)
     error->all("Fix SRD requires atom style sphere or ellipsoid");
-  if (bigexist && atom->angmom_flag && atom->omega_flag)
-    error->all("Fix SRD cannot have both atom attributes angmom and omega");
   if (bigexist && collidestyle == NOSLIP && !atom->torque_flag)
     error->all("Fix SRD no-slip requires atom attribute torque");
 
diff --git a/src/USER-EFF/atom_vec_electron.cpp b/src/USER-EFF/atom_vec_electron.cpp
index 7ddb37d004..0a13aa1a76 100644
--- a/src/USER-EFF/atom_vec_electron.cpp
+++ b/src/USER-EFF/atom_vec_electron.cpp
@@ -228,6 +228,20 @@ int AtomVecElectron::pack_comm_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
+int AtomVecElectron::pack_comm_hybrid(int n, int *list, double *buf)
+{
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = eradius[i];
+  }
+  return m;
+}
+
+/* ---------------------------------------------------------------------- */
+
 void AtomVecElectron::unpack_comm(int n, int first, double *buf)
 {
   int i,m,last;
@@ -263,18 +277,15 @@ void AtomVecElectron::unpack_comm_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecElectron::pack_comm_one(int i, double *buf)
+int AtomVecElectron::unpack_comm_hybrid(int n, int first, double *buf)
 {
-  buf[0] = eradius[i];
-  return 1;
-}
-
-/* ---------------------------------------------------------------------- */
+  int i,m,last;
 
-int AtomVecElectron::unpack_comm_one(int i, double *buf)
-{
-  eradius[i] = buf[0];
-  return 1;
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    eradius[i] = buf[m++];
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -296,10 +307,15 @@ int AtomVecElectron::pack_reverse(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecElectron::pack_reverse_one(int i, double *buf)
+int AtomVecElectron::pack_reverse_hybrid(int n, int first, double *buf)
 {
-  buf[0] = erforce[i];
-  return 1;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    buf[m++] = erforce[i];
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -320,10 +336,16 @@ void AtomVecElectron::unpack_reverse(int n, int *list, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecElectron::unpack_reverse_one(int i, double *buf)
+int AtomVecElectron::unpack_reverse_hybrid(int n, int *list, double *buf)
 {
-  erforce[i] += buf[0];
-  return 1;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    erforce[j] += buf[m++];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -457,12 +479,18 @@ int AtomVecElectron::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecElectron::pack_border_one(int i, double *buf)
+int AtomVecElectron::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = q[i];
-  buf[1] = spin[i];
-  buf[2] = eradius[i];
-  return 3;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = q[j];
+    buf[m++] = spin[j];
+    buf[m++] = eradius[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -514,12 +542,18 @@ void AtomVecElectron::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecElectron::unpack_border_one(int i, double *buf)
+int AtomVecElectron::unpack_border_hybrid(int n, int first, double *buf)
 {
-  q[i] = buf[0];
-  spin[i] = static_cast<int> (buf[1]);
-  eradius[i] = buf[2];
-  return 3;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    q[i] = buf[m++];
+    spin[i] = static_cast<int> (buf[m++]);
+    eradius[i] = buf[m++];
+  }
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/USER-EFF/atom_vec_electron.h b/src/USER-EFF/atom_vec_electron.h
index 3670958c16..3ae836ae23 100644
--- a/src/USER-EFF/atom_vec_electron.h
+++ b/src/USER-EFF/atom_vec_electron.h
@@ -33,20 +33,20 @@ class AtomVecElectron : public AtomVec {
   void copy(int, int);
   int pack_comm(int, int *, double *, int, int *);
   int pack_comm_vel(int, int *, double *, int, int *);
-  int pack_comm_one(int, double *);
+  int pack_comm_hybrid(int, int *, double *);
   void unpack_comm(int, int, double *);
   void unpack_comm_vel(int, int, double *);
-  int unpack_comm_one(int, double *);
+  int unpack_comm_hybrid(int, int, double *);
   int pack_reverse(int, int, double *);
-  int pack_reverse_one(int, double *);
+  int pack_reverse_hybrid(int, int, double *);
   void unpack_reverse(int, int *, double *);
-  int unpack_reverse_one(int, double *);
+  int unpack_reverse_hybrid(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/atom.cpp b/src/atom.cpp
index d31f20c1e3..81ca000a40 100644
--- a/src/atom.cpp
+++ b/src/atom.cpp
@@ -99,7 +99,7 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
   // initialize atom style and array existence flags
   // customize by adding new flag
 
-  sphere_flag = ellipsoid_flag = peri_flag = dipole_flag = electron_flag = 0;
+  sphere_flag = ellipsoid_flag = peri_flag = electron_flag = 0;
 
   molecule_flag = q_flag = mu_flag = 0;
   rmass_flag = radius_flag = omega_flag = torque_flag = 0;
@@ -253,7 +253,7 @@ void Atom::create_avec(const char *style, int narg, char **arg)
   // may have been set by old avec
   // customize by adding new flag
 
-  sphere_flag = ellipsoid_flag = peri_flag = dipole_flag = electron_flag = 0;
+  sphere_flag = ellipsoid_flag = peri_flag = electron_flag = 0;
 
   molecule_flag = q_flag = mu_flag = 0;
   rmass_flag = radius_flag = omega_flag = torque_flag = 0;
diff --git a/src/atom.h b/src/atom.h
index e05929eaa5..47bad27ffe 100644
--- a/src/atom.h
+++ b/src/atom.h
@@ -78,7 +78,7 @@ class Atom : protected Pointers {
   // atom style and per-atom array existence flags
   // customize by adding new flag
 
-  int sphere_flag,ellipsoid_flag,peri_flag,dipole_flag,electron_flag;
+  int sphere_flag,ellipsoid_flag,peri_flag,electron_flag;
 
   int molecule_flag,q_flag,mu_flag;
   int rmass_flag,radius_flag,omega_flag,torque_flag;
diff --git a/src/atom_vec.h b/src/atom_vec.h
index 7c399bf44b..594931507e 100644
--- a/src/atom_vec.h
+++ b/src/atom_vec.h
@@ -47,22 +47,22 @@ class AtomVec : protected Pointers {
 
   virtual int pack_comm(int, int *, double *, int, int *) = 0;
   virtual int pack_comm_vel(int, int *, double *, int, int *) = 0;
-  virtual int pack_comm_one(int, double *) {return 0;}
+  virtual int pack_comm_hybrid(int, int *, double *) {return 0;}
   virtual void unpack_comm(int, int, double *) = 0;
   virtual void unpack_comm_vel(int, int, double *) = 0;
-  virtual int unpack_comm_one(int, double *) {return 0;}
+  virtual int unpack_comm_hybrid(int, int, double *) {return 0;}
 
   virtual int pack_reverse(int, int, double *) = 0;
-  virtual int pack_reverse_one(int, double *) {return 0;}
+  virtual int pack_reverse_hybrid(int, int, double *) {return 0;}
   virtual void unpack_reverse(int, int *, double *) = 0;
-  virtual int unpack_reverse_one(int, double *) {return 0;}
+  virtual int unpack_reverse_hybrid(int, int *, double *) {return 0;}
 
   virtual int pack_border(int, int *, double *, int, int *) = 0;
   virtual int pack_border_vel(int, int *, double *, int, int *) = 0;
-  virtual int pack_border_one(int, double *) {return 0;}
+  virtual int pack_border_hybrid(int, int *, double *) {return 0;}
   virtual void unpack_border(int, int, double *) = 0;
   virtual void unpack_border_vel(int, int, double *) = 0;
-  virtual int unpack_border_one(int, double *) {return 0;}
+  virtual int unpack_border_hybrid(int, int, double *) {return 0;}
 
   virtual int pack_exchange(int, double *) = 0;
   virtual int unpack_exchange(double *) = 0;
diff --git a/src/atom_vec_charge.cpp b/src/atom_vec_charge.cpp
index e2f6ac4c03..5088361cbd 100644
--- a/src/atom_vec_charge.cpp
+++ b/src/atom_vec_charge.cpp
@@ -392,10 +392,16 @@ int AtomVecCharge::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecCharge::pack_border_one(int i, double *buf)
+int AtomVecCharge::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = q[i];
-  return 1;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = q[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -443,10 +449,15 @@ void AtomVecCharge::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecCharge::unpack_border_one(int i, double *buf)
+int AtomVecCharge::unpack_border_hybrid(int n, int first, double *buf)
 {
-  q[i] = buf[0];
-  return 1;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++)
+    q[i] = buf[m++];
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/atom_vec_charge.h b/src/atom_vec_charge.h
index 80786edc48..a25641f76d 100644
--- a/src/atom_vec_charge.h
+++ b/src/atom_vec_charge.h
@@ -38,10 +38,10 @@ class AtomVecCharge : public AtomVec {
   void unpack_reverse(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/atom_vec_hybrid.cpp b/src/atom_vec_hybrid.cpp
index f630b67557..d4e148245c 100644
--- a/src/atom_vec_hybrid.cpp
+++ b/src/atom_vec_hybrid.cpp
@@ -187,8 +187,6 @@ int AtomVecHybrid::pack_comm(int n, int *list, double *buf,
       buf[m++] = x[j][0];
       buf[m++] = x[j][1];
       buf[m++] = x[j][2];
-      for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_comm_one(j,&buf[m]);
     }
   } else {
     if (domain->triclinic == 0) {
@@ -205,10 +203,14 @@ int AtomVecHybrid::pack_comm(int n, int *list, double *buf,
       buf[m++] = x[j][0] + dx;
       buf[m++] = x[j][1] + dy;
       buf[m++] = x[j][2] + dz;
-      for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_comm_one(j,&buf[m]);
     }
   }
+
+  // pack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->pack_comm_hybrid(n,list,&buf[m]);
+
   return m;
 }
 
@@ -242,8 +244,6 @@ int AtomVecHybrid::pack_comm_vel(int n, int *list, double *buf,
 	buf[m++] = angmom[j][1];
 	buf[m++] = angmom[j][2];
       }
-      for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_comm_one(j,&buf[m]);
     }
   } else {
     if (domain->triclinic == 0) {
@@ -274,8 +274,6 @@ int AtomVecHybrid::pack_comm_vel(int n, int *list, double *buf,
 	  buf[m++] = angmom[j][1];
 	  buf[m++] = angmom[j][2];
 	}
-	for (k = 0; k < nstyles; k++)
-	  m += styles[k]->pack_comm_one(j,&buf[m]);
       }
     } else {
       dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4];
@@ -305,11 +303,15 @@ int AtomVecHybrid::pack_comm_vel(int n, int *list, double *buf,
 	  buf[m++] = angmom[j][1];
 	  buf[m++] = angmom[j][2];
 	}
-	for (k = 0; k < nstyles; k++)
-	  m += styles[k]->pack_comm_one(j,&buf[m]);
       }
     }
   }
+
+  // pack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->pack_comm_hybrid(n,list,&buf[m]);
+
   return m;
 }
 
@@ -317,28 +319,31 @@ int AtomVecHybrid::pack_comm_vel(int n, int *list, double *buf,
 
 void AtomVecHybrid::unpack_comm(int n, int first, double *buf)
 {
-  int i,k,last;
+  int i,k,m,last;
 
-  int m = 0;
+  m = 0;
   last = first + n;
   for (i = first; i < last; i++) {
     x[i][0] = buf[m++];
     x[i][1] = buf[m++];
     x[i][2] = buf[m++];
-    for (k = 0; k < nstyles; k++)
-      m += styles[k]->unpack_comm_one(i,&buf[m]);
   }
+
+  // unpack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]);
 }
 
 /* ---------------------------------------------------------------------- */
 
 void AtomVecHybrid::unpack_comm_vel(int n, int first, double *buf)
 {
-  int i,k,last;
+  int i,k,m,last;
   int omega_flag = atom->omega_flag;
   int angmom_flag = atom->angmom_flag;
 
-  int m = 0;
+  m = 0;
   last = first + n;
   for (i = first; i < last; i++) {
     x[i][0] = buf[m++];
@@ -357,26 +362,33 @@ void AtomVecHybrid::unpack_comm_vel(int n, int first, double *buf)
       angmom[i][1] = buf[m++];
       angmom[i][2] = buf[m++];
     }
-    for (k = 0; k < nstyles; k++)
-      m += styles[k]->unpack_comm_one(i,&buf[m]);
   }
+
+  // unpack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]);
 }
 
 /* ---------------------------------------------------------------------- */
 
 int AtomVecHybrid::pack_reverse(int n, int first, double *buf)
 {
-  int i,k,last;
+  int i,k,m,last;
 
-  int m = 0;
+  m = 0;
   last = first + n;
   for (i = first; i < last; i++) {
     buf[m++] = f[i][0];
     buf[m++] = f[i][1];
     buf[m++] = f[i][2];
-    for (k = 0; k < nstyles; k++)
-      m += styles[k]->pack_reverse_one(i,&buf[m]);
   }
+
+  // pack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->pack_reverse_hybrid(n,first,&buf[m]);
+
   return m;
 }
 
@@ -392,9 +404,12 @@ void AtomVecHybrid::unpack_reverse(int n, int *list, double *buf)
     f[j][0] += buf[m++];
     f[j][1] += buf[m++];
     f[j][2] += buf[m++];
-    for (k = 0; k < nstyles; k++)
-      m += styles[k]->unpack_reverse_one(j,&buf[m]);
   }
+
+  // unpack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->unpack_reverse_hybrid(n,list,&buf[m]);
 }
 
 /* ---------------------------------------------------------------------- */
@@ -415,8 +430,6 @@ int AtomVecHybrid::pack_border(int n, int *list, double *buf,
       buf[m++] = tag[j];
       buf[m++] = type[j];
       buf[m++] = mask[j];
-      for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_border_one(j,&buf[m]);
     }
   } else {
     if (domain->triclinic == 0) {
@@ -436,10 +449,14 @@ int AtomVecHybrid::pack_border(int n, int *list, double *buf,
       buf[m++] = tag[j];
       buf[m++] = type[j];
       buf[m++] = mask[j];
-      for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_border_one(j,&buf[m]);
     }
   }
+
+  // pack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->pack_border_hybrid(n,list,&buf[m]);
+
   return m;
 }
 
@@ -476,8 +493,6 @@ int AtomVecHybrid::pack_border_vel(int n, int *list, double *buf,
 	buf[m++] = angmom[j][1];
 	buf[m++] = angmom[j][2];
       }
-      for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_border_one(j,&buf[m]);
     }
   } else {
     if (domain->triclinic == 0) {
@@ -511,8 +526,6 @@ int AtomVecHybrid::pack_border_vel(int n, int *list, double *buf,
 	  buf[m++] = angmom[j][1];
 	  buf[m++] = angmom[j][2];
 	}
-	for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_border_one(j,&buf[m]);
       }
     } else {
       dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4];
@@ -545,11 +558,15 @@ int AtomVecHybrid::pack_border_vel(int n, int *list, double *buf,
 	  buf[m++] = angmom[j][1];
 	  buf[m++] = angmom[j][2];
 	}
-	for (k = 0; k < nstyles; k++)
-	m += styles[k]->pack_border_one(j,&buf[m]);
       }
     }
   }
+
+  // pack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->pack_border_hybrid(n,list,&buf[m]);
+
   return m;
 }
 
@@ -569,9 +586,12 @@ void AtomVecHybrid::unpack_border(int n, int first, double *buf)
     tag[i] = static_cast<int> (buf[m++]);
     type[i] = static_cast<int> (buf[m++]);
     mask[i] = static_cast<int> (buf[m++]);
-    for (k = 0; k < nstyles; k++)
-      m += styles[k]->unpack_border_one(i,&buf[m]);
   }
+
+  // unpack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->unpack_border_hybrid(n,first,&buf[m]);
 }
 
 /* ---------------------------------------------------------------------- */
@@ -605,9 +625,12 @@ void AtomVecHybrid::unpack_border_vel(int n, int first, double *buf)
       angmom[i][1] = buf[m++];
       angmom[i][2] = buf[m++];
     }
-    for (k = 0; k < nstyles; k++)
-      m += styles[k]->unpack_border_one(i,&buf[m]);
   }
+
+  // unpack sub-style contributions as contiguous chunks
+
+  for (k = 0; k < nstyles; k++)
+    m += styles[k]->unpack_border_hybrid(n,first,&buf[m]);
 }
 
 /* ----------------------------------------------------------------------
@@ -617,12 +640,12 @@ void AtomVecHybrid::unpack_border_vel(int n, int first, double *buf)
 
 int AtomVecHybrid::pack_exchange(int i, double *buf)
 {
-  int k;
+  int k,m;
 
   int tmp = atom->nextra_grow;
   atom->nextra_grow = 0;
 
-  int m = 0;
+  m = 0;
   for (k = 0; k < nstyles; k++) 
     m += styles[k]->pack_exchange(i,&buf[m]);
 
@@ -644,14 +667,16 @@ int AtomVecHybrid::pack_exchange(int i, double *buf)
 
 int AtomVecHybrid::unpack_exchange(double *buf)
 {
+  int k,m;
+
   int nlocal = atom->nlocal;
   if (nlocal == nmax) grow(0);
 
   int tmp = atom->nextra_grow;
   atom->nextra_grow = 0;
 
-  int m = 0;
-  for (int k = 0; k < nstyles; k++) {
+  m = 0;
+  for (k = 0; k < nstyles; k++) {
     m += styles[k]->unpack_exchange(&buf[m]);
     atom->nlocal--;
   }
diff --git a/src/atom_vec_sphere.cpp b/src/atom_vec_sphere.cpp
index 6b7ff6eb18..1aa886c7ed 100644
--- a/src/atom_vec_sphere.cpp
+++ b/src/atom_vec_sphere.cpp
@@ -363,13 +363,19 @@ int AtomVecSphere::pack_comm_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecSphere::pack_comm_one(int i, double *buf)
+int AtomVecSphere::pack_comm_hybrid(int n, int *list, double *buf)
 {
+  int i,j,m;
+
   if (radvary == 0) return 0;
 
-  buf[0] = radius[i];
-  buf[1] = rmass[i];
-  return 2;
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = radius[i];
+    buf[m++] = rmass[i];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -440,13 +446,19 @@ void AtomVecSphere::unpack_comm_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecSphere::unpack_comm_one(int i, double *buf)
+int AtomVecSphere::unpack_comm_hybrid(int n, int first, double *buf)
 {
+  int i,m,last;
+
   if (radvary == 0) return 0;
 
-  radius[i] = buf[0];
-  rmass[i] = buf[1];
-  return 2;
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    radius[i] = buf[m++];
+    rmass[i] = buf[m++];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -470,12 +482,18 @@ int AtomVecSphere::pack_reverse(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecSphere::pack_reverse_one(int i, double *buf)
+int AtomVecSphere::pack_reverse_hybrid(int n, int first, double *buf)
 {
-  buf[0] = torque[i][0];
-  buf[1] = torque[i][1];
-  buf[2] = torque[i][2];
-  return 3;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    buf[m++] = torque[i][0];
+    buf[m++] = torque[i][1];
+    buf[m++] = torque[i][2];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -498,12 +516,18 @@ void AtomVecSphere::unpack_reverse(int n, int *list, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecSphere::unpack_reverse_one(int i, double *buf)
+int AtomVecSphere::unpack_reverse_hybrid(int n, int *list, double *buf)
 {
-  torque[i][0] += buf[0];
-  torque[i][1] += buf[1];
-  torque[i][2] += buf[2];
-  return 3;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    torque[j][0] += buf[m++];
+    torque[j][1] += buf[m++];
+    torque[j][2] += buf[m++];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -641,11 +665,17 @@ int AtomVecSphere::pack_border_vel(int n, int *list, double *buf,
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecSphere::pack_border_one(int i, double *buf)
+int AtomVecSphere::pack_border_hybrid(int n, int *list, double *buf)
 {
-  buf[0] = radius[i];
-  buf[1] = rmass[i];
-  return 2;
+  int i,j,m;
+
+  m = 0;
+  for (i = 0; i < n; i++) {
+    j = list[i];
+    buf[m++] = radius[j];
+    buf[m++] = rmass[j];
+  }
+  return m;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -699,11 +729,17 @@ void AtomVecSphere::unpack_border_vel(int n, int first, double *buf)
 
 /* ---------------------------------------------------------------------- */
 
-int AtomVecSphere::unpack_border_one(int i, double *buf)
+int AtomVecSphere::unpack_border_hybrid(int n, int first, double *buf)
 {
-  radius[i] = buf[0];
-  rmass[i] = buf[1];
-  return 2;
+  int i,m,last;
+
+  m = 0;
+  last = first + n;
+  for (i = first; i < last; i++) {
+    radius[i] = buf[m++];
+    rmass[i] = buf[m++];
+  }
+  return m;
 }
 
 /* ----------------------------------------------------------------------
diff --git a/src/atom_vec_sphere.h b/src/atom_vec_sphere.h
index d1fa9ba42b..566db3ff96 100644
--- a/src/atom_vec_sphere.h
+++ b/src/atom_vec_sphere.h
@@ -34,20 +34,20 @@ class AtomVecSphere : public AtomVec {
   void copy(int, int);
   int pack_comm(int, int *, double *, int, int *);
   int pack_comm_vel(int, int *, double *, int, int *);
-  int pack_comm_one(int, double *);
+  int pack_comm_hybrid(int, int *, double *);
   void unpack_comm(int, int, double *);
   void unpack_comm_vel(int, int, double *);
-  int unpack_comm_one(int, double *);
+  int unpack_comm_hybrid(int, int, double *);
   int pack_reverse(int, int, double *);
-  int pack_reverse_one(int, double *);
+  int pack_reverse_hybrid(int, int, double *);
   void unpack_reverse(int, int *, double *);
-  int unpack_reverse_one(int, double *);
+  int unpack_reverse_hybrid(int, int *, double *);
   int pack_border(int, int *, double *, int, int *);
   int pack_border_vel(int, int *, double *, int, int *);
-  int pack_border_one(int, double *);
+  int pack_border_hybrid(int, int *, double *);
   void unpack_border(int, int, double *);
   void unpack_border_vel(int, int, double *);
-  int unpack_border_one(int, double *);
+  int unpack_border_hybrid(int, int, double *);
   int pack_exchange(int, double *);
   int unpack_exchange(double *);
   int size_restart();
diff --git a/src/pair_dpd_tstat.cpp b/src/pair_dpd_tstat.cpp
index b64ff6b0f2..1546d22340 100644
--- a/src/pair_dpd_tstat.cpp
+++ b/src/pair_dpd_tstat.cpp
@@ -56,7 +56,7 @@ void PairDPDTstat::compute(int eflag, int vflag)
     temperature = t_start + delta * (t_stop-t_start);
     double boltz = force->boltz;
     for (i = 1; i <= atom->ntypes; i++)
-      for (j = i+1; j <= atom->ntypes; j++)
+      for (j = i; j <= atom->ntypes; j++)
 	sigma[i][j] = sigma[j][i] = sqrt(2.0*boltz*temperature*gamma[i][j]);
   }
 
-- 
GitLab