Commit d73d70fa authored by Stan Moore's avatar Stan Moore
Browse files

Adding ubuf union to Kokkos atom_vec styles

parent 2f32fb7f
Loading
Loading
Loading
Loading
+61 −61
Original line number Diff line number Diff line
@@ -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++) = _nspecial(i,0);
    _buf(mysend,m++) = _nspecial(i,1);
    _buf(mysend,m++) = _nspecial(i,2);
      _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++) = 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);

@@ -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++);
      }
      _nspecial(i,0) = _buf(myrecv,m++);
      _nspecial(i,1) = _buf(myrecv,m++);
      _nspecial(i,2) = _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) = (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;
    }
  }
};
+17 −17
Original line number Diff line number Diff line
@@ -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;
    }
  }
};
+36 −36
Original line number Diff line number Diff line
@@ -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;
    }
  }
};
+18 −18
Original line number Diff line number Diff line
@@ -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);
    }
  }
+72 −118
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
      }
      _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;
        _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) 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;
    }
  }
};
Loading