From d73d70fa1fdd46bcd30e67b5df1fd2a8c161255f Mon Sep 17 00:00:00 2001
From: Stan Moore <stamoor@sandia.gov>
Date: Wed, 26 Apr 2017 08:15:42 -0600
Subject: [PATCH] Adding ubuf union to Kokkos atom_vec styles

---
 src/KOKKOS/atom_vec_angle_kokkos.cpp     | 122 +++++++--------
 src/KOKKOS/atom_vec_atomic_kokkos.cpp    |  34 ++--
 src/KOKKOS/atom_vec_bond_kokkos.cpp      |  72 ++++-----
 src/KOKKOS/atom_vec_charge_kokkos.cpp    |  36 ++---
 src/KOKKOS/atom_vec_full_kokkos.cpp      | 190 +++++++++--------------
 src/KOKKOS/atom_vec_kokkos.h             |  11 ++
 src/KOKKOS/atom_vec_molecular_kokkos.cpp | 146 ++++++++---------
 7 files changed, 288 insertions(+), 323 deletions(-)

diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp
index 48fc3a352c..34b868aadc 100644
--- a/src/KOKKOS/atom_vec_angle_kokkos.cpp
+++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp
@@ -80,22 +80,22 @@ void AtomVecAngleKokkos::grow(int n)
   memory->grow_kokkos(atomKK->k_molecule,atomKK->molecule,nmax,"atom:molecule");
   memory->grow_kokkos(atomKK->k_nspecial,atomKK->nspecial,nmax,3,"atom:nspecial");
   memory->grow_kokkos(atomKK->k_special,atomKK->special,nmax,atomKK->maxspecial,
-		      "atom:special");
+                      "atom:special");
   memory->grow_kokkos(atomKK->k_num_bond,atomKK->num_bond,nmax,"atom:num_bond");
   memory->grow_kokkos(atomKK->k_bond_type,atomKK->bond_type,nmax,atomKK->bond_per_atom,
-		      "atom:bond_type");
+                      "atom:bond_type");
   memory->grow_kokkos(atomKK->k_bond_atom,atomKK->bond_atom,nmax,atomKK->bond_per_atom,
-		      "atom:bond_atom");
+                      "atom:bond_atom");
 
   memory->grow_kokkos(atomKK->k_num_angle,atomKK->num_angle,nmax,"atom:num_angle");
   memory->grow_kokkos(atomKK->k_angle_type,atomKK->angle_type,nmax,atomKK->angle_per_atom,
-		      "atom:angle_type");
+                      "atom:angle_type");
   memory->grow_kokkos(atomKK->k_angle_atom1,atomKK->angle_atom1,nmax,atomKK->angle_per_atom,
-		      "atom:angle_atom1");
+                      "atom:angle_atom1");
   memory->grow_kokkos(atomKK->k_angle_atom2,atomKK->angle_atom2,nmax,atomKK->angle_per_atom,
-		      "atom:angle_atom2");
+                      "atom:angle_atom2");
   memory->grow_kokkos(atomKK->k_angle_atom3,atomKK->angle_atom3,nmax,atomKK->angle_per_atom,
-		      "atom:angle_atom3");
+                      "atom:angle_atom3");
 
   grow_reset();
   sync(Host,ALL_MASK);
@@ -241,7 +241,7 @@ struct AtomVecAngleKokkos_PackComm {
       _xprd(xprd),_yprd(yprd),_zprd(zprd),
       _xy(xy),_xz(xz),_yz(yz) {
         const size_t maxsend = (buf.view<DeviceType>().dimension_0()
-				*buf.view<DeviceType>().dimension_1())/3;
+                                *buf.view<DeviceType>().dimension_1())/3;
         const size_t elements = 3;
         buffer_view<DeviceType>(_buf,buf,maxsend,elements);
         _pbc[0] = pbc[0]; _pbc[1] = pbc[1]; _pbc[2] = pbc[2];
@@ -272,11 +272,11 @@ struct AtomVecAngleKokkos_PackComm {
 /* ---------------------------------------------------------------------- */
 
 int AtomVecAngleKokkos::pack_comm_kokkos(const int &n,
-					 const DAT::tdual_int_2d &list,
-					 const int & iswap,
-					 const DAT::tdual_xfloat_2d &buf,
-					 const int &pbc_flag,
-					 const int* const pbc)
+                                         const DAT::tdual_int_2d &list,
+                                         const int & iswap,
+                                         const DAT::tdual_xfloat_2d &buf,
+                                         const int &pbc_flag,
+                                         const int* const pbc)
 {
   // Check whether to always run forward communication on the host
   // Choose correct forward PackComm kernel
@@ -339,7 +339,7 @@ int AtomVecAngleKokkos::pack_comm_kokkos(const int &n,
     LMPDeviceType::fence();
   }
 
-	return n*size_forward;
+  return n*size_forward;
 }
 
 /* ---------------------------------------------------------------------- */
@@ -714,18 +714,18 @@ struct AtomVecAngleKokkos_PackBorder {
           _buf(i,0) = _x(j,0);
           _buf(i,1) = _x(j,1);
           _buf(i,2) = _x(j,2);
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
-          _buf(i,6) = _molecule(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
+          _buf(i,6) = d_ubuf(_molecule(j)).d;
       } else {
           _buf(i,0) = _x(j,0) + _dx;
           _buf(i,1) = _x(j,1) + _dy;
           _buf(i,2) = _x(j,2) + _dz;
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
-          _buf(i,6) = _molecule(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
+          _buf(i,6) = d_ubuf(_molecule(j)).d;
       }
   }
 };
@@ -957,10 +957,10 @@ struct AtomVecAngleKokkos_UnpackBorder {
       _x(i+_first,0) = _buf(i,0);
       _x(i+_first,1) = _buf(i,1);
       _x(i+_first,2) = _buf(i,2);
-      _tag(i+_first) = static_cast<tagint> (_buf(i,3));
-      _type(i+_first) = static_cast<int>  (_buf(i,4));
-      _mask(i+_first) = static_cast<int>  (_buf(i,5));
-      _molecule(i+_first) = static_cast<tagint> (_buf(i,6));
+      _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i;
+      _type(i+_first) = (int) d_ubuf(_buf(i,4)).i;
+      _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i;
+      _molecule(i+_first) = (tagint) d_ubuf(_buf(i,6)).i;
 
   }
 };
@@ -1165,28 +1165,28 @@ struct AtomVecAngleKokkos_PackExchangeFunctor {
     _buf(mysend,m++) = _v(i,0);
     _buf(mysend,m++) = _v(i,1);
     _buf(mysend,m++) = _v(i,2);
-    _buf(mysend,m++) = _tag(i);
-    _buf(mysend,m++) = _type(i);
-    _buf(mysend,m++) = _mask(i);
-    _buf(mysend,m++) = _image(i);
-    _buf(mysend,m++) = _molecule(i);
-    _buf(mysend,m++) = _num_bond(i);
+    _buf(mysend,m++) = d_ubuf(_tag(i)).d;
+    _buf(mysend,m++) = d_ubuf(_type(i)).d;
+    _buf(mysend,m++) = d_ubuf(_mask(i)).d;
+    _buf(mysend,m++) = d_ubuf(_image(i)).d;
+    _buf(mysend,m++) = d_ubuf(_molecule(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_bond(i)).d;
     for (k = 0; k < _num_bond(i); k++) {
-      _buf(mysend,m++) = _bond_type(i,k);
-      _buf(mysend,m++) = _bond_atom(i,k);
+      _buf(mysend,m++) = d_ubuf(_bond_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_bond_atom(i,k)).d;
     }
-    _buf(mysend,m++) = _num_angle(i);
+    _buf(mysend,m++) = d_ubuf(_num_angle(i)).d;
     for (k = 0; k < _num_angle(i); k++) {
-      _buf(mysend,m++) = _angle_type(i,k);
-      _buf(mysend,m++) = _angle_atom1(i,k);
-      _buf(mysend,m++) = _angle_atom2(i,k);
-      _buf(mysend,m++) = _angle_atom3(i,k);
+      _buf(mysend,m++) = d_ubuf(_angle_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom3(i,k)).d;
     }
-    _buf(mysend,m++) = _nspecial(i,0);
-    _buf(mysend,m++) = _nspecial(i,1);
-    _buf(mysend,m++) = _nspecial(i,2);
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,0)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,1)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,2)).d;
     for (k = 0; k < _nspecial(i,2); k++)
-      _buf(mysend,m++) = _special(i,k);
+      _buf(mysend,m++) = d_ubuf(_special(i,k)).d;
 
     const int j = _copylist(mysend);
 
@@ -1350,7 +1350,7 @@ struct AtomVecAngleKokkos_UnpackExchangeFunctor {
     _lo(lo),_hi(hi){
     elements =17+atom->maxspecial+2*atom->bond_per_atom+4*atom->angle_per_atom;
     const int maxsendlist = (buf.template view<DeviceType>().dimension_0()*
-			     buf.template view<DeviceType>().dimension_1())/elements;
+                             buf.template view<DeviceType>().dimension_1())/elements;
     buffer_view<DeviceType>(_buf,buf,maxsendlist,elements);
   }
 
@@ -1366,30 +1366,30 @@ struct AtomVecAngleKokkos_UnpackExchangeFunctor {
       _v(i,0) = _buf(myrecv,m++);
       _v(i,1) = _buf(myrecv,m++);
       _v(i,2) = _buf(myrecv,m++);
-      _tag(i) = _buf(myrecv,m++);
-      _type(i) = _buf(myrecv,m++);
-      _mask(i) = _buf(myrecv,m++);
-      _image(i) = _buf(myrecv,m++);
+      _tag(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _type(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _mask(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _image(i) = (imageint) d_ubuf(_buf(myrecv,m++)).i;
 
-      _molecule(i) = _buf(myrecv,m++);
-      _num_bond(i) = _buf(myrecv,m++);
+      _molecule(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _num_bond(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       int k;
       for (k = 0; k < _num_bond(i); k++) {
-        _bond_type(i,k) = _buf(myrecv,m++);
-        _bond_atom(i,k) = _buf(myrecv,m++);
+        _bond_type(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _bond_atom(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_angle(i) =  _buf(myrecv,m++);
+      _num_angle(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _num_angle(i); k++) {
-	_angle_type(i,k) = _buf(myrecv,m++);
-	_angle_atom1(i,k) = _buf(myrecv,m++);
-	_angle_atom2(i,k) = _buf(myrecv,m++);
-	_angle_atom3(i,k) = _buf(myrecv,m++);
+        _angle_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _nspecial(i,0) = _buf(myrecv,m++);
-      _nspecial(i,1) = _buf(myrecv,m++);
-      _nspecial(i,2) = _buf(myrecv,m++);
+      _nspecial(i,0) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,1) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,2) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _nspecial(i,2); k++)
-        _special(i,k) = _buf(myrecv,m++);
+        _special(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
     }
   }
 };
diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp
index dc254e6a7e..d040bd3553 100644
--- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp
+++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp
@@ -619,16 +619,16 @@ struct AtomVecAtomicKokkos_PackBorder {
           _buf(i,0) = _x(j,0);
           _buf(i,1) = _x(j,1);
           _buf(i,2) = _x(j,2);
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
       } else {
           _buf(i,0) = _x(j,0) + _dx;
           _buf(i,1) = _x(j,1) + _dy;
           _buf(i,2) = _x(j,2) + _dz;
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
       }
   }
 };
@@ -836,9 +836,9 @@ struct AtomVecAtomicKokkos_UnpackBorder {
       _x(i+_first,0) = _buf(i,0);
       _x(i+_first,1) = _buf(i,1);
       _x(i+_first,2) = _buf(i,2);
-      _tag(i+_first) = static_cast<tagint> (_buf(i,3));
-      _type(i+_first) = static_cast<int>  (_buf(i,4));
-      _mask(i+_first) = static_cast<int>  (_buf(i,5));
+      _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i;
+      _type(i+_first) = (int) d_ubuf(_buf(i,4)).i;
+      _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i;
 //      printf("%i %i %lf %lf %lf %i BORDER\n",_tag(i+_first),i+_first,_x(i+_first,0),_x(i+_first,1),_x(i+_first,2),_type(i+_first));
   }
 };
@@ -977,10 +977,10 @@ struct AtomVecAtomicKokkos_PackExchangeFunctor {
     _buf(mysend,4) = _v(i,0);
     _buf(mysend,5) = _v(i,1);
     _buf(mysend,6) = _v(i,2);
-    _buf(mysend,7) = _tag[i];
-    _buf(mysend,8) = _type[i];
-    _buf(mysend,9) = _mask[i];
-    _buf(mysend,10) = _image[i];
+    _buf(mysend,7) = d_ubuf(_tag[i]).d;
+    _buf(mysend,8) = d_ubuf(_type[i]).d;
+    _buf(mysend,9) = d_ubuf(_mask[i]).d;
+    _buf(mysend,10) = d_ubuf(_image[i]).d;
     const int j = _copylist(mysend);
 
     if(j>-1) {
@@ -1091,10 +1091,10 @@ struct AtomVecAtomicKokkos_UnpackExchangeFunctor {
       _v(i,0) = _buf(myrecv,4);
       _v(i,1) = _buf(myrecv,5);
       _v(i,2) = _buf(myrecv,6);
-      _tag[i] = _buf(myrecv,7);
-      _type[i] = _buf(myrecv,8);
-      _mask[i] = _buf(myrecv,9);
-      _image[i] = _buf(myrecv,10);
+      _tag[i] = (tagint) d_ubuf(_buf(myrecv,7)).i;
+      _type[i] = (int) d_ubuf(_buf(myrecv,8)).i;
+      _mask[i] = (int) d_ubuf(_buf(myrecv,9)).i;
+      _image[i] = (imageint) d_ubuf(_buf(myrecv,10)).i;
     }
   }
 };
diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp
index f10decac28..c46c49cb29 100644
--- a/src/KOKKOS/atom_vec_bond_kokkos.cpp
+++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp
@@ -662,18 +662,18 @@ struct AtomVecBondKokkos_PackBorder {
           _buf(i,0) = _x(j,0);
           _buf(i,1) = _x(j,1);
           _buf(i,2) = _x(j,2);
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
-          _buf(i,6) = _molecule(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
+          _buf(i,6) = d_ubuf(_molecule(j)).d;
       } else {
           _buf(i,0) = _x(j,0) + _dx;
           _buf(i,1) = _x(j,1) + _dy;
           _buf(i,2) = _x(j,2) + _dz;
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
-          _buf(i,6) = _molecule(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
+          _buf(i,6) = d_ubuf(_molecule(j)).d;
       }
   }
 };
@@ -905,10 +905,10 @@ struct AtomVecBondKokkos_UnpackBorder {
       _x(i+_first,0) = _buf(i,0);
       _x(i+_first,1) = _buf(i,1);
       _x(i+_first,2) = _buf(i,2);
-      _tag(i+_first) = static_cast<tagint> (_buf(i,3));
-      _type(i+_first) = static_cast<int>  (_buf(i,4));
-      _mask(i+_first) = static_cast<int>  (_buf(i,5));
-      _molecule(i+_first) = static_cast<tagint> (_buf(i,6));
+      _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i;
+      _type(i+_first) = (int) d_ubuf(_buf(i,4)).i;
+      _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i;
+      _molecule(i+_first) = (tagint) d_ubuf(_buf(i,6)).i;
 
   }
 };
@@ -1095,21 +1095,21 @@ struct AtomVecBondKokkos_PackExchangeFunctor {
     _buf(mysend,m++) = _v(i,0);
     _buf(mysend,m++) = _v(i,1);
     _buf(mysend,m++) = _v(i,2);
-    _buf(mysend,m++) = _tag(i);
-    _buf(mysend,m++) = _type(i);
-    _buf(mysend,m++) = _mask(i);
-    _buf(mysend,m++) = _image(i);
-    _buf(mysend,m++) = _molecule(i);
-    _buf(mysend,m++) = _num_bond(i);
+    _buf(mysend,m++) = d_ubuf(_tag(i)).d;
+    _buf(mysend,m++) = d_ubuf(_type(i)).d;
+    _buf(mysend,m++) = d_ubuf(_mask(i)).d;
+    _buf(mysend,m++) = d_ubuf(_image(i)).d;
+    _buf(mysend,m++) = d_ubuf(_molecule(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_bond(i)).d;
     for (k = 0; k < _num_bond(i); k++) {
-      _buf(mysend,m++) = _bond_type(i,k);
-      _buf(mysend,m++) = _bond_atom(i,k);
+      _buf(mysend,m++) = d_ubuf(_bond_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_bond_atom(i,k)).d;
     }
-    _buf(mysend,m++) = _nspecial(i,0);
-    _buf(mysend,m++) = _nspecial(i,1);
-    _buf(mysend,m++) = _nspecial(i,2);
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,0)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,1)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,2)).d;
     for (k = 0; k < _nspecial(i,2); k++)
-      _buf(mysend,m++) = _special(i,k);
+      _buf(mysend,m++) = d_ubuf(_special(i,k)).d;
 
     const int j = _copylist(mysend);
 
@@ -1267,23 +1267,23 @@ struct AtomVecBondKokkos_UnpackExchangeFunctor {
       _v(i,0) = _buf(myrecv,m++);
       _v(i,1) = _buf(myrecv,m++);
       _v(i,2) = _buf(myrecv,m++);
-      _tag(i) = _buf(myrecv,m++);
-      _type(i) = _buf(myrecv,m++);
-      _mask(i) = _buf(myrecv,m++);
-      _image(i) = _buf(myrecv,m++);
+      _tag(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _type(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _mask(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _image(i) = (imageint) d_ubuf(_buf(myrecv,m++)).i;
 
-      _molecule(i) = _buf(myrecv,m++);
-      _num_bond(i) = _buf(myrecv,m++);
+      _molecule(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _num_bond(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       int k;
       for (k = 0; k < _num_bond(i); k++) {
-        _bond_type(i,k) = _buf(myrecv,m++);
-        _bond_atom(i,k) = _buf(myrecv,m++);
+        _bond_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _bond_atom(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _nspecial(i,0) = _buf(myrecv,m++);
-      _nspecial(i,1) = _buf(myrecv,m++);
-      _nspecial(i,2) = _buf(myrecv,m++);
+      _nspecial(i,0) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,1) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,2) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _nspecial(i,2); k++)
-        _special(i,k) = _buf(myrecv,m++);
+        _special(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
     }
   }
 };
diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp
index f6952f127c..856660d1e9 100644
--- a/src/KOKKOS/atom_vec_charge_kokkos.cpp
+++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp
@@ -323,7 +323,7 @@ struct AtomVecChargeKokkos_PackCommSelf {
 /* ---------------------------------------------------------------------- */
 
 int AtomVecChargeKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &list, const int & iswap,
-										const int nfirst, const int &pbc_flag, const int* const pbc) {
+                                        const int nfirst, const int &pbc_flag, const int* const pbc) {
   if(commKK->forward_comm_on_host) {
     sync(Host,X_MASK);
     modified(Host,X_MASK);
@@ -631,17 +631,17 @@ struct AtomVecChargeKokkos_PackBorder {
           _buf(i,0) = _x(j,0);
           _buf(i,1) = _x(j,1);
           _buf(i,2) = _x(j,2);
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
           _buf(i,6) = _q(j);
       } else {
           _buf(i,0) = _x(j,0) + _dx;
           _buf(i,1) = _x(j,1) + _dy;
           _buf(i,2) = _x(j,2) + _dz;
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
           _buf(i,6) = _q(j);
       }
   }
@@ -872,9 +872,9 @@ struct AtomVecChargeKokkos_UnpackBorder {
       _x(i+_first,0) = _buf(i,0);
       _x(i+_first,1) = _buf(i,1);
       _x(i+_first,2) = _buf(i,2);
-      _tag(i+_first) = static_cast<tagint> (_buf(i,3));
-      _type(i+_first) = static_cast<int>  (_buf(i,4));
-      _mask(i+_first) = static_cast<int>  (_buf(i,5));
+      _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i;
+      _type(i+_first) = (int) d_ubuf(_buf(i,4)).i;
+      _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i;
       _q(i+_first) = _buf(i,6);
   }
 };
@@ -1039,10 +1039,10 @@ struct AtomVecChargeKokkos_PackExchangeFunctor {
     _buf(mysend,4) = _v(i,0);
     _buf(mysend,5) = _v(i,1);
     _buf(mysend,6) = _v(i,2);
-    _buf(mysend,7) = _tag[i];
-    _buf(mysend,8) = _type[i];
-    _buf(mysend,9) = _mask[i];
-    _buf(mysend,10) = _image[i];
+    _buf(mysend,7) = d_ubuf(_tag[i]).d;
+    _buf(mysend,8) = d_ubuf(_type[i]).d;
+    _buf(mysend,9) = d_ubuf(_mask[i]).d;
+    _buf(mysend,10) = d_ubuf(_image[i]).d;
     _buf(mysend,11) = _q[i];
     const int j = _copylist(mysend);
 
@@ -1163,10 +1163,10 @@ struct AtomVecChargeKokkos_UnpackExchangeFunctor {
       _v(i,0) = _buf(myrecv,4);
       _v(i,1) = _buf(myrecv,5);
       _v(i,2) = _buf(myrecv,6);
-      _tag[i] = _buf(myrecv,7);
-      _type[i] = _buf(myrecv,8);
-      _mask[i] = _buf(myrecv,9);
-      _image[i] = _buf(myrecv,10);
+      _tag[i] = (tagint) d_ubuf(_buf(myrecv,7)).i;
+      _type[i] = (int) d_ubuf(_buf(myrecv,8)).i;
+      _mask[i] = (int) d_ubuf(_buf(myrecv,9)).i;
+      _image[i] = (imageint) d_ubuf(_buf(myrecv,10)).i;
       _q[i] = _buf(myrecv,11);
     }
   }
diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp
index 731168b6ea..fa4cf18ae3 100644
--- a/src/KOKKOS/atom_vec_full_kokkos.cpp
+++ b/src/KOKKOS/atom_vec_full_kokkos.cpp
@@ -761,17 +761,6 @@ void AtomVecFullKokkos::unpack_reverse(int n, int *list, double *buf)
 
 template<class DeviceType,int PBC_FLAG>
 struct AtomVecFullKokkos_PackBorder {
-  union ubuf {
-    double d;
-    int64_t i;
-    KOKKOS_INLINE_FUNCTION
-    ubuf(double arg) : d(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int64_t arg) : i(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int arg) : i(arg) {}
-  };
-
   typedef DeviceType device_type;
   typedef ArrayTypes<DeviceType> AT;
 
@@ -808,20 +797,20 @@ struct AtomVecFullKokkos_PackBorder {
           _buf(i,0) = _x(j,0);
           _buf(i,1) = _x(j,1);
           _buf(i,2) = _x(j,2);
-          _buf(i,3) = ubuf(_tag(j)).d;
-          _buf(i,4) = ubuf(_type(j)).d;
-          _buf(i,5) = ubuf(_mask(j)).d;
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
           _buf(i,6) = _q(j);
-          _buf(i,7) = ubuf(_molecule(j)).d;
+          _buf(i,7) = d_ubuf(_molecule(j)).d;
       } else {
           _buf(i,0) = _x(j,0) + _dx;
           _buf(i,1) = _x(j,1) + _dy;
           _buf(i,2) = _x(j,2) + _dz;
-          _buf(i,3) = ubuf(_tag(j)).d;
-          _buf(i,4) = ubuf(_type(j)).d;
-          _buf(i,5) = ubuf(_mask(j)).d;
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
           _buf(i,6) = _q(j);
-          _buf(i,7) = ubuf(_molecule(j)).d;
+          _buf(i,7) = d_ubuf(_molecule(j)).d;
       }
   }
 };
@@ -1030,17 +1019,6 @@ int AtomVecFullKokkos::pack_border_hybrid(int n, int *list, double *buf)
 
 template<class DeviceType>
 struct AtomVecFullKokkos_UnpackBorder {
-  union ubuf {
-    double d;
-    int64_t i;
-    KOKKOS_INLINE_FUNCTION
-    ubuf(double arg) : d(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int64_t arg) : i(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int arg) : i(arg) {}
-  };
-
   typedef DeviceType device_type;
   typedef ArrayTypes<DeviceType> AT;
 
@@ -1072,11 +1050,11 @@ struct AtomVecFullKokkos_UnpackBorder {
       _x(i+_first,0) = _buf(i,0);
       _x(i+_first,1) = _buf(i,1);
       _x(i+_first,2) = _buf(i,2);
-      _tag(i+_first) = (tagint) ubuf(_buf(i,3)).i;
-      _type(i+_first) = (int) ubuf(_buf(i,4)).i;
-      _mask(i+_first) = (int) ubuf(_buf(i,5)).i;
+      _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i;
+      _type(i+_first) = (int) d_ubuf(_buf(i,4)).i;
+      _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i;
       _q(i+_first) = _buf(i,6);
-      _molecule(i+_first) = (tagint) ubuf(_buf(i,7)).i;
+      _molecule(i+_first) = (tagint) d_ubuf(_buf(i,7)).i;
 
   }
 };
@@ -1178,18 +1156,6 @@ int AtomVecFullKokkos::unpack_border_hybrid(int n, int first, double *buf)
 
 template<class DeviceType>
 struct AtomVecFullKokkos_PackExchangeFunctor {
-
-  union ubuf {
-    double d;
-    int64_t i;
-    KOKKOS_INLINE_FUNCTION
-    ubuf(double arg) : d(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int64_t arg) : i(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int arg) : i(arg) {}
-  };
-
   typedef DeviceType device_type;
   typedef ArrayTypes<DeviceType> AT;
   typename AT::t_x_array_randomread _x;
@@ -1328,7 +1294,7 @@ struct AtomVecFullKokkos_PackExchangeFunctor {
     elements = 20+atom->maxspecial+2*atom->bond_per_atom+4*atom->angle_per_atom+
       5*atom->dihedral_per_atom + 5*atom->improper_per_atom;
     const int maxsendlist = (buf.template view<DeviceType>().dimension_0()*
-			     buf.template view<DeviceType>().dimension_1())/elements;
+                             buf.template view<DeviceType>().dimension_1())/elements;
     buffer_view<DeviceType>(_buf,buf,maxsendlist,elements);
   }
 
@@ -1344,46 +1310,46 @@ struct AtomVecFullKokkos_PackExchangeFunctor {
     _buf(mysend,m++) = _v(i,0);
     _buf(mysend,m++) = _v(i,1);
     _buf(mysend,m++) = _v(i,2);
-    _buf(mysend,m++) = ubuf(_tag(i)).d;
-    _buf(mysend,m++) = ubuf(_type(i)).d;
-    _buf(mysend,m++) = ubuf(_mask(i)).d;
-    _buf(mysend,m++) = ubuf(_image(i)).d;
+    _buf(mysend,m++) = d_ubuf(_tag(i)).d;
+    _buf(mysend,m++) = d_ubuf(_type(i)).d;
+    _buf(mysend,m++) = d_ubuf(_mask(i)).d;
+    _buf(mysend,m++) = d_ubuf(_image(i)).d;
     _buf(mysend,m++) = _q(i);
-    _buf(mysend,m++) = ubuf(_molecule(i)).d;
-    _buf(mysend,m++) = ubuf(_num_bond(i)).d;
+    _buf(mysend,m++) = d_ubuf(_molecule(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_bond(i)).d;
     for (k = 0; k < _num_bond(i); k++) {
-      _buf(mysend,m++) = ubuf(_bond_type(i,k)).d;
-      _buf(mysend,m++) = ubuf(_bond_atom(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_bond_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_bond_atom(i,k)).d;
     }
-    _buf(mysend,m++) = ubuf(_num_angle(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_angle(i)).d;
     for (k = 0; k < _num_angle(i); k++) {
-      _buf(mysend,m++) = ubuf(_angle_type(i,k)).d;
-      _buf(mysend,m++) = ubuf(_angle_atom1(i,k)).d;
-      _buf(mysend,m++) = ubuf(_angle_atom2(i,k)).d;
-      _buf(mysend,m++) = ubuf(_angle_atom3(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom3(i,k)).d;
     }
-    _buf(mysend,m++) = ubuf(_num_dihedral(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_dihedral(i)).d;
     for (k = 0; k < _num_dihedral(i); k++) {
-      _buf(mysend,m++) = ubuf(_dihedral_type(i,k)).d;
-      _buf(mysend,m++) = ubuf(_dihedral_atom1(i,k)).d;
-      _buf(mysend,m++) = ubuf(_dihedral_atom2(i,k)).d;
-      _buf(mysend,m++) = ubuf(_dihedral_atom3(i,k)).d;
-      _buf(mysend,m++) = ubuf(_dihedral_atom4(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom3(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom4(i,k)).d;
     }
-    _buf(mysend,m++) = ubuf(_num_improper(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_improper(i)).d;
     for (k = 0; k < _num_improper(i); k++) {
-      _buf(mysend,m++) = ubuf(_improper_type(i,k)).d;
-      _buf(mysend,m++) = ubuf(_improper_atom1(i,k)).d;
-      _buf(mysend,m++) = ubuf(_improper_atom2(i,k)).d;
-      _buf(mysend,m++) = ubuf(_improper_atom3(i,k)).d;
-      _buf(mysend,m++) = ubuf(_improper_atom4(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom3(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom4(i,k)).d;
     }
 
-    _buf(mysend,m++) = ubuf(_nspecial(i,0)).d;
-    _buf(mysend,m++) = ubuf(_nspecial(i,1)).d;
-    _buf(mysend,m++) = ubuf(_nspecial(i,2)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,0)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,1)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,2)).d;
     for (k = 0; k < _nspecial(i,2); k++)
-      _buf(mysend,m++) = ubuf(_special(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_special(i,k)).d;
 
     const int j = _copylist(mysend);
 
@@ -1531,18 +1497,6 @@ int AtomVecFullKokkos::pack_exchange(int i, double *buf)
 
 template<class DeviceType>
 struct AtomVecFullKokkos_UnpackExchangeFunctor {
-
-  union ubuf {
-    double d;
-    int64_t i;
-    KOKKOS_INLINE_FUNCTION
-    ubuf(double arg) : d(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int64_t arg) : i(arg) {}
-    KOKKOS_INLINE_FUNCTION
-    ubuf(int arg) : i(arg) {}
-  };
-
   typedef DeviceType device_type;
   typedef ArrayTypes<DeviceType> AT;
   typename AT::t_x_array _x;
@@ -1617,7 +1571,7 @@ struct AtomVecFullKokkos_UnpackExchangeFunctor {
     elements = 20+atom->maxspecial+2*atom->bond_per_atom+4*atom->angle_per_atom+
       5*atom->dihedral_per_atom + 5*atom->improper_per_atom;
     const int maxsendlist = (buf.template view<DeviceType>().dimension_0()*
-			     buf.template view<DeviceType>().dimension_1())/elements;
+                             buf.template view<DeviceType>().dimension_1())/elements;
     buffer_view<DeviceType>(_buf,buf,maxsendlist,elements);
   }
 
@@ -1633,46 +1587,46 @@ struct AtomVecFullKokkos_UnpackExchangeFunctor {
       _v(i,0) = _buf(myrecv,m++);
       _v(i,1) = _buf(myrecv,m++);
       _v(i,2) = _buf(myrecv,m++);
-      _tag(i) = (tagint) ubuf(_buf(myrecv,m++)).i;
-      _type(i) = (int) ubuf(_buf(myrecv,m++)).i;
-      _mask(i) = (int) ubuf(_buf(myrecv,m++)).i;
-      _image(i) = (imageint) ubuf(_buf(myrecv,m++)).i;
+      _tag(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _type(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _mask(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _image(i) = (imageint) d_ubuf(_buf(myrecv,m++)).i;
       _q(i) = _buf(myrecv,m++);
-      _molecule(i) = (tagint) ubuf(_buf(myrecv,m++)).i;
-      _num_bond(i) = (int) ubuf(_buf(myrecv,m++)).i;
+      _molecule(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _num_bond(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       int k;
       for (k = 0; k < _num_bond(i); k++) {
-        _bond_type(i,k) = (int) ubuf(_buf(myrecv,m++)).i;
-        _bond_atom(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
+        _bond_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _bond_atom(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_angle(i) = (int) ubuf(_buf(myrecv,m++)).i;
+      _num_angle(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _num_angle(i); k++) {
-        _angle_type(i,k) = (int) ubuf(_buf(myrecv,m++)).i;
-        _angle_atom1(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _angle_atom2(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _angle_atom3(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
+        _angle_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_dihedral(i) = (int) ubuf(_buf(myrecv,m++)).i;
+      _num_dihedral(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _num_dihedral(i); k++) {
-        _dihedral_type(i,k) = (int) ubuf(_buf(myrecv,m++)).i;
-        _dihedral_atom1(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _dihedral_atom2(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _dihedral_atom3(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _dihedral_atom4(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
+        _dihedral_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom4(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_improper(i) = (int) ubuf(_buf(myrecv,m++)).i;
+      _num_improper(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _num_improper(i); k++) {
-        _improper_type(i,k) = (int) ubuf(_buf(myrecv,m++)).i;
-        _improper_atom1(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _improper_atom2(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _improper_atom3(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
-        _improper_atom4(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
+        _improper_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom4(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _nspecial(i,0) = (int) ubuf(_buf(myrecv,m++)).i;
-      _nspecial(i,1) = (int) ubuf(_buf(myrecv,m++)).i;
-      _nspecial(i,2) = (int) ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,0) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,1) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,2) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _nspecial(i,2); k++)
-        _special(i,k) = (tagint) ubuf(_buf(myrecv,m++)).i;
+        _special(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
     }
   }
 };
diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h
index 7ac66f1626..7f593f235f 100644
--- a/src/KOKKOS/atom_vec_kokkos.h
+++ b/src/KOKKOS/atom_vec_kokkos.h
@@ -20,6 +20,17 @@
 
 namespace LAMMPS_NS {
 
+union d_ubuf {
+  double d;
+  int64_t i;
+  KOKKOS_INLINE_FUNCTION
+  d_ubuf(double arg) : d(arg) {}
+  KOKKOS_INLINE_FUNCTION
+  d_ubuf(int64_t arg) : i(arg) {}
+  KOKKOS_INLINE_FUNCTION
+  d_ubuf(int arg) : i(arg) {}
+};
+
 class AtomVecKokkos : public AtomVec {
  public:
   AtomVecKokkos(class LAMMPS *);
diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.cpp b/src/KOKKOS/atom_vec_molecular_kokkos.cpp
index 4fd8114376..5c16ac1513 100644
--- a/src/KOKKOS/atom_vec_molecular_kokkos.cpp
+++ b/src/KOKKOS/atom_vec_molecular_kokkos.cpp
@@ -786,18 +786,18 @@ struct AtomVecMolecularKokkos_PackBorder {
           _buf(i,0) = _x(j,0);
           _buf(i,1) = _x(j,1);
           _buf(i,2) = _x(j,2);
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
-          _buf(i,6) = _molecule(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
+          _buf(i,6) = d_ubuf(_molecule(j)).d;
       } else {
           _buf(i,0) = _x(j,0) + _dx;
           _buf(i,1) = _x(j,1) + _dy;
           _buf(i,2) = _x(j,2) + _dz;
-          _buf(i,3) = _tag(j);
-          _buf(i,4) = _type(j);
-          _buf(i,5) = _mask(j);
-          _buf(i,6) = _molecule(j);
+          _buf(i,3) = d_ubuf(_tag(j)).d;
+          _buf(i,4) = d_ubuf(_type(j)).d;
+          _buf(i,5) = d_ubuf(_mask(j)).d;
+          _buf(i,6) = d_ubuf(_molecule(j)).d;
       }
   }
 };
@@ -1029,10 +1029,10 @@ struct AtomVecMolecularKokkos_UnpackBorder {
       _x(i+_first,0) = _buf(i,0);
       _x(i+_first,1) = _buf(i,1);
       _x(i+_first,2) = _buf(i,2);
-      _tag(i+_first) = static_cast<tagint> (_buf(i,3));
-      _type(i+_first) = static_cast<int>  (_buf(i,4));
-      _mask(i+_first) = static_cast<int>  (_buf(i,5));
-      _molecule(i+_first) = static_cast<tagint> (_buf(i,6));
+      _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i;
+      _type(i+_first) = (int) d_ubuf(_buf(i,4)).i;
+      _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i;
+      _molecule(i+_first) = (tagint) d_ubuf(_buf(i,6)).i;
 
   }
 };
@@ -1263,7 +1263,7 @@ struct AtomVecMolecularKokkos_PackExchangeFunctor {
     elements = 19+atom->maxspecial+2*atom->bond_per_atom+4*atom->angle_per_atom+
       5*atom->dihedral_per_atom + 5*atom->improper_per_atom;
     const int maxsendlist = (buf.template view<DeviceType>().dimension_0()*
-			     buf.template view<DeviceType>().dimension_1())/elements;
+                             buf.template view<DeviceType>().dimension_1())/elements;
     buffer_view<DeviceType>(_buf,buf,maxsendlist,elements);
   }
 
@@ -1279,45 +1279,45 @@ struct AtomVecMolecularKokkos_PackExchangeFunctor {
     _buf(mysend,m++) = _v(i,0);
     _buf(mysend,m++) = _v(i,1);
     _buf(mysend,m++) = _v(i,2);
-    _buf(mysend,m++) = _tag(i);
-    _buf(mysend,m++) = _type(i);
-    _buf(mysend,m++) = _mask(i);
-    _buf(mysend,m++) = _image(i);
-    _buf(mysend,m++) = _molecule(i);
-    _buf(mysend,m++) = _num_bond(i);
+    _buf(mysend,m++) = d_ubuf(_tag(i)).d;
+    _buf(mysend,m++) = d_ubuf(_type(i)).d;
+    _buf(mysend,m++) = d_ubuf(_mask(i)).d;
+    _buf(mysend,m++) = d_ubuf(_image(i)).d;
+    _buf(mysend,m++) = d_ubuf(_molecule(i)).d;
+    _buf(mysend,m++) = d_ubuf(_num_bond(i)).d;
     for (k = 0; k < _num_bond(i); k++) {
-      _buf(mysend,m++) = _bond_type(i,k);
-      _buf(mysend,m++) = _bond_atom(i,k);
+      _buf(mysend,m++) = d_ubuf(_bond_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_bond_atom(i,k)).d;
     }
-    _buf(mysend,m++) = _num_angle(i);
+    _buf(mysend,m++) = d_ubuf(_num_angle(i)).d;
     for (k = 0; k < _num_angle(i); k++) {
-      _buf(mysend,m++) = _angle_type(i,k);
-      _buf(mysend,m++) = _angle_atom1(i,k);
-      _buf(mysend,m++) = _angle_atom2(i,k);
-      _buf(mysend,m++) = _angle_atom3(i,k);
+      _buf(mysend,m++) = d_ubuf(_angle_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_angle_atom3(i,k)).d;
     }
-    _buf(mysend,m++) = _num_dihedral(i);
+    _buf(mysend,m++) = d_ubuf(_num_dihedral(i)).d;
     for (k = 0; k < _num_dihedral(i); k++) {
-      _buf(mysend,m++) = _dihedral_type(i,k);
-      _buf(mysend,m++) = _dihedral_atom1(i,k);
-      _buf(mysend,m++) = _dihedral_atom2(i,k);
-      _buf(mysend,m++) = _dihedral_atom3(i,k);
-      _buf(mysend,m++) = _dihedral_atom4(i,k);
+      _buf(mysend,m++) = d_ubuf(_dihedral_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom3(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_dihedral_atom4(i,k)).d;
     }
-    _buf(mysend,m++) = _num_improper(i);
+    _buf(mysend,m++) = d_ubuf(_num_improper(i)).d;
     for (k = 0; k < _num_improper(i); k++) {
-      _buf(mysend,m++) = _improper_type(i,k);
-      _buf(mysend,m++) = _improper_atom1(i,k);
-      _buf(mysend,m++) = _improper_atom2(i,k);
-      _buf(mysend,m++) = _improper_atom3(i,k);
-      _buf(mysend,m++) = _improper_atom4(i,k);
+      _buf(mysend,m++) = d_ubuf(_improper_type(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom1(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom2(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom3(i,k)).d;
+      _buf(mysend,m++) = d_ubuf(_improper_atom4(i,k)).d;
     }
 
-    _buf(mysend,m++) = _nspecial(i,0);
-    _buf(mysend,m++) = _nspecial(i,1);
-    _buf(mysend,m++) = _nspecial(i,2);
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,0)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,1)).d;
+    _buf(mysend,m++) = d_ubuf(_nspecial(i,2)).d;
     for (k = 0; k < _nspecial(i,2); k++)
-      _buf(mysend,m++) = _special(i,k);
+      _buf(mysend,m++) = d_ubuf(_special(i,k)).d;
 
     const int j = _copylist(mysend);
 
@@ -1536,7 +1536,7 @@ struct AtomVecMolecularKokkos_UnpackExchangeFunctor {
     elements = 19+atom->maxspecial+2*atom->bond_per_atom+4*atom->angle_per_atom+
       5*atom->dihedral_per_atom + 5*atom->improper_per_atom;
     const int maxsendlist = (buf.template view<DeviceType>().dimension_0()*
-			     buf.template view<DeviceType>().dimension_1())/elements;
+                             buf.template view<DeviceType>().dimension_1())/elements;
     buffer_view<DeviceType>(_buf,buf,maxsendlist,elements);
   }
 
@@ -1552,46 +1552,46 @@ struct AtomVecMolecularKokkos_UnpackExchangeFunctor {
       _v(i,0) = _buf(myrecv,m++);
       _v(i,1) = _buf(myrecv,m++);
       _v(i,2) = _buf(myrecv,m++);
-      _tag(i) = _buf(myrecv,m++);
-      _type(i) = _buf(myrecv,m++);
-      _mask(i) = _buf(myrecv,m++);
-      _image(i) = _buf(myrecv,m++);
+      _tag(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _type(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _mask(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _image(i) = (imageint) d_ubuf(_buf(myrecv,m++)).i;
 
-      _molecule(i) = _buf(myrecv,m++);
-      _num_bond(i) = _buf(myrecv,m++);
+      _molecule(i) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+      _num_bond(i) = (int) d_ubuf(_buf(myrecv,m++)).i;
       int k;
       for (k = 0; k < _num_bond(i); k++) {
-        _bond_type(i,k) = _buf(myrecv,m++);
-        _bond_atom(i,k) = _buf(myrecv,m++);
+        _bond_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _bond_atom(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_angle(i) =  _buf(myrecv,m++);
+      _num_angle(i) =  (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _num_angle(i); k++) {
-        _angle_type(i,k) = _buf(myrecv,m++);
-        _angle_atom1(i,k) = _buf(myrecv,m++);
-        _angle_atom2(i,k) = _buf(myrecv,m++);
-        _angle_atom3(i,k) = _buf(myrecv,m++);
+        _angle_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _angle_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_dihedral(i) =  _buf(myrecv,m++);
+      _num_dihedral(i) = d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _num_dihedral(i); k++) {
-        _dihedral_type(i,k) = _buf(myrecv,m++);
-        _dihedral_atom1(i,k) = _buf(myrecv,m++);
-        _dihedral_atom2(i,k) = _buf(myrecv,m++);
-        _dihedral_atom3(i,k) = _buf(myrecv,m++);
-        _dihedral_atom4(i,k) = _buf(myrecv,m++);
+        _dihedral_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _dihedral_atom4(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _num_improper(i) =  _buf(myrecv,m++);
-      for (k = 0; k < _num_improper(i); k++) {
-        _improper_type(i,k) = _buf(myrecv,m++);
-        _improper_atom1(i,k) = _buf(myrecv,m++);
-        _improper_atom2(i,k) = _buf(myrecv,m++);
-        _improper_atom3(i,k) = _buf(myrecv,m++);
-        _improper_atom4(i,k) = _buf(myrecv,m++);
+      _num_improper(i) =  (int) d_ubuf(_buf(myrecv,m++)).i;
+      for (k = 0; k < (int) _num_improper(i); k++) {
+        _improper_type(i,k) = (int) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom1(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom2(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom3(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
+        _improper_atom4(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
       }
-      _nspecial(i,0) = _buf(myrecv,m++);
-      _nspecial(i,1) = _buf(myrecv,m++);
-      _nspecial(i,2) = _buf(myrecv,m++);
+      _nspecial(i,0) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,1) = (int) d_ubuf(_buf(myrecv,m++)).i;
+      _nspecial(i,2) = (int) d_ubuf(_buf(myrecv,m++)).i;
       for (k = 0; k < _nspecial(i,2); k++)
-        _special(i,k) = _buf(myrecv,m++);
+        _special(i,k) = (tagint) d_ubuf(_buf(myrecv,m++)).i;
     }
   }
 };
-- 
GitLab