Adding ubuf union to Kokkos atom_vec styles
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -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 *);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user