insure compute pair/property local will use a copy of granular neigh list

This commit is contained in:
Steve Plimpton
2017-06-21 12:44:35 -06:00
parent 87c028ed02
commit 7dc380b113
4 changed files with 28 additions and 0 deletions

View File

@ -126,11 +126,15 @@ void ComputePairLocal::init()
" requested by compute pair/local");
// need an occasional half neighbor list
// set size to same value as request made by force->pair
// this should enable it to always be a copy list (e.g. for granular pstyle)
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
NeighRequest *pairrequest = neighbor->find_request((void *) force->pair);
if (pairrequest) neighbor->requests[irequest]->size = pairrequest->size;
}
/* ---------------------------------------------------------------------- */

View File

@ -280,12 +280,16 @@ void ComputePropertyLocal::init()
}
// for NEIGH/PAIR need an occasional half neighbor list
// set size to same value as request made by force->pair
// this should enable it to always be a copy list (e.g. for granular pstyle)
if (kindflag == NEIGH || kindflag == PAIR) {
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
NeighRequest *pairrequest = neighbor->find_request((void *) force->pair);
if (pairrequest) neighbor->requests[irequest]->size = pairrequest->size;
}
// do initial memory allocation so that memory_usage() is correct

View File

@ -1268,6 +1268,10 @@ void Neighbor::morph_copy()
if (irq->ghost && !jrq->ghost) continue;
// do not copy from a history list
if (jrq->history) continue;
// these flags must be same,
// else 2 lists do not store same pairs
// or their data structures are different
@ -1619,6 +1623,21 @@ void Neighbor::requests_new2old()
old_oneatom = oneatom;
}
/* ----------------------------------------------------------------------
find and return request made by classptr
if not found or classpt = NULL, return NULL
------------------------------------------------------------------------- */
NeighRequest *Neighbor::find_request(void *classptr)
{
if (classptr == NULL) return NULL;
for (int i = 0; i < nrequest; i++)
if (requests[i]->requestor == classptr) return requests[i];
return NULL;
}
/* ----------------------------------------------------------------------
assign NBin class to a NeighList
use neigh request settings to build mask

View File

@ -122,6 +122,7 @@ class Neighbor : protected Pointers {
void exclusion_group_group_delete(int, int); // rm a group-group exclusion
int exclude_setting(); // return exclude value to accelerator pkg
class NeighRequest *find_request(void *); // find a neighbor request
bigint memory_usage();