forked from lijiext/lammps
Fixing Kokkos bugs
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@14489 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
parent
9eb8702f2f
commit
92ae19e280
|
@ -512,6 +512,8 @@ void CommKokkos::exchange_device()
|
|||
|
||||
k_exchange_copylist.modify<LMPHostType>();
|
||||
k_exchange_copylist.sync<DeviceType>();
|
||||
nsend = k_count.h_view(0);
|
||||
if (nsend > maxsend) grow_send_kokkos(nsend,1);
|
||||
nsend =
|
||||
avec->pack_exchange_kokkos(k_count.h_view(0),k_buf_send,
|
||||
k_exchange_sendlist,k_exchange_copylist,
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
using namespace LAMMPS_NS;
|
||||
|
||||
#define BONDDELTA 10000
|
||||
#define LB_FACTOR 1.5
|
||||
|
||||
enum{IGNORE,WARN,ERROR}; // same as thermo.cpp
|
||||
|
||||
|
@ -44,6 +45,7 @@ template<class DeviceType>
|
|||
NeighBondKokkos<DeviceType>::NeighBondKokkos(LAMMPS *lmp) : Pointers(lmp)
|
||||
{
|
||||
MPI_Comm_rank(world,&me);
|
||||
MPI_Comm_size(world,&nprocs);
|
||||
|
||||
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
||||
datamask_read = EMPTY_MASK;
|
||||
|
@ -76,28 +78,35 @@ void NeighBondKokkos<DeviceType>::init_topology_kk() {
|
|||
// 1st time allocation of topology lists
|
||||
|
||||
if (atom->molecular && atom->nbonds && maxbond == 0) {
|
||||
memory->destroy(neighbor->bondlist);
|
||||
if (nprocs == 1) maxbond = atom->nbonds;
|
||||
else maxbond = static_cast<int> (LB_FACTOR * atom->nbonds / nprocs);
|
||||
memory->create_kokkos(k_bondlist,neighbor->bondlist,maxbond,3,"neigh:neighbor->bondlist");
|
||||
}
|
||||
|
||||
if (atom->molecular && atom->nangles && maxangle == 0) {
|
||||
memory->destroy(neighbor->anglelist);
|
||||
if (nprocs == 1) maxangle = atom->nangles;
|
||||
else maxangle = static_cast<int> (LB_FACTOR * atom->nangles / nprocs);
|
||||
memory->create_kokkos(k_anglelist,neighbor->anglelist,maxangle,4,"neigh:neighbor->anglelist");
|
||||
}
|
||||
|
||||
if (atom->molecular && atom->ndihedrals && maxdihedral == 0) {
|
||||
memory->destroy(neighbor->dihedrallist);
|
||||
if (nprocs == 1) maxdihedral = atom->ndihedrals;
|
||||
else maxdihedral = static_cast<int>
|
||||
(LB_FACTOR * atom->ndihedrals / nprocs);
|
||||
memory->create_kokkos(k_dihedrallist,neighbor->dihedrallist,maxdihedral,5,"neigh:neighbor->dihedrallist");
|
||||
}
|
||||
|
||||
if (atom->molecular && atom->nimpropers && maximproper == 0) {
|
||||
memory->destroy(neighbor->improperlist);
|
||||
if (nprocs == 1) maximproper = atom->nimpropers;
|
||||
else maximproper = static_cast<int>
|
||||
(LB_FACTOR * atom->nimpropers / nprocs);
|
||||
memory->create_kokkos(k_improperlist,neighbor->improperlist,maximproper,5,"neigh:neighbor->improperlist");
|
||||
}
|
||||
|
||||
// set flags that determine which topology neighboring routines to use
|
||||
// bonds,etc can only be broken for atom->molecular = 1, not 2
|
||||
// SHAKE sets bonds and angles negative
|
||||
// gcmc sets all bonds, angles, etc negative
|
||||
// bond_quartic sets bonds to 0
|
||||
// delete_bonds sets all interactions negative
|
||||
|
||||
|
@ -105,7 +114,8 @@ void NeighBondKokkos<DeviceType>::init_topology_kk() {
|
|||
int bond_off = 0;
|
||||
int angle_off = 0;
|
||||
for (i = 0; i < modify->nfix; i++)
|
||||
if (strcmp(modify->fix[i]->style,"shake") == 0)
|
||||
if ((strcmp(modify->fix[i]->style,"shake") == 0)
|
||||
|| (strcmp(modify->fix[i]->style,"rattle") == 0))
|
||||
bond_off = angle_off = 1;
|
||||
if (force->bond && force->bond_match("quartic")) bond_off = 1;
|
||||
|
||||
|
@ -143,6 +153,10 @@ void NeighBondKokkos<DeviceType>::init_topology_kk() {
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < modify->nfix; i++)
|
||||
if ((strcmp(modify->fix[i]->style,"gcmc") == 0))
|
||||
bond_off = angle_off = dihedral_off = improper_off = 1;
|
||||
|
||||
// sync on/off settings across all procs
|
||||
|
||||
int on_or_off = bond_off;
|
||||
|
@ -353,7 +367,7 @@ void NeighBondKokkos<DeviceType>::bond_partial()
|
|||
k_fail_flag.template modify<LMPHostType>();
|
||||
k_fail_flag.template sync<DeviceType>();
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagNeighBondBondAll>(0,nlocal),*this,nmissing);
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagNeighBondBondPartial>(0,nlocal),*this,nmissing);
|
||||
DeviceType::fence();
|
||||
|
||||
k_nlist.template modify<DeviceType>();
|
||||
|
@ -952,8 +966,6 @@ void NeighBondKokkos<DeviceType>::operator()(TagNeighBondDihedralCheck, const in
|
|||
if (dx != dxstart || dy != dystart || dz != dzstart) flag = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
template<class DeviceType>
|
||||
|
|
Loading…
Reference in New Issue