ensuring cutusermulti always created

This commit is contained in:
Joel Clemmer
2021-05-12 08:59:12 -06:00
parent 7f94712839
commit cac634076d

View File

@ -59,6 +59,7 @@ Comm::Comm(LAMMPS *lmp) : Pointers(lmp)
cutusermulti = nullptr; cutusermulti = nullptr;
cutusermultiold = nullptr; cutusermultiold = nullptr;
ncollections = 0; ncollections = 0;
ncollections_cutoff = 0;
ghost_velocity = 0; ghost_velocity = 0;
user_procgrid[0] = user_procgrid[1] = user_procgrid[2] = 0; user_procgrid[0] = user_procgrid[1] = user_procgrid[2] = 0;
@ -148,9 +149,10 @@ void Comm::copy_arrays(Comm *oldcomm)
} }
ncollections = oldcomm->ncollections; ncollections = oldcomm->ncollections;
ncollections_cutoff = oldcomm->ncollections_cutoff;
if (oldcomm->cutusermulti) { if (oldcomm->cutusermulti) {
memory->create(cutusermulti,ncollections,"comm:cutusermulti"); memory->create(cutusermulti,ncollections_cutoff,"comm:cutusermulti");
memcpy(cutusermulti,oldcomm->cutusermulti,ncollections); memcpy(cutusermulti,oldcomm->cutusermulti,ncollections_cutoff);
} }
if (oldcomm->cutusermultiold) { if (oldcomm->cutusermultiold) {
@ -303,7 +305,6 @@ void Comm::modify_params(int narg, char **arg)
if (mode == Comm::MULTIOLD) cutghostuser = 0.0; if (mode == Comm::MULTIOLD) cutghostuser = 0.0;
memory->destroy(cutusermultiold); memory->destroy(cutusermultiold);
mode = Comm::MULTI; mode = Comm::MULTI;
ncollections_cutoff = 0;
} else if (strcmp(arg[iarg+1],"multi/old") == 0) { } else if (strcmp(arg[iarg+1],"multi/old") == 0) {
if (neighbor->style == Neighbor::MULTI) if (neighbor->style == Neighbor::MULTI)
error->all(FLERR,"Cannot use comm mode 'multi/old' with 'multi' style neighbor lists"); error->all(FLERR,"Cannot use comm mode 'multi/old' with 'multi' style neighbor lists");
@ -345,14 +346,14 @@ void Comm::modify_params(int narg, char **arg)
// Check if # of collections has changed, if so erase any previously defined cutoffs // Check if # of collections has changed, if so erase any previously defined cutoffs
// Neighbor will reset ncollections if collections are redefined // Neighbor will reset ncollections if collections are redefined
if (ncollections_cutoff != neighbor->ncollections) { if (! cutusermulti || ncollections_cutoff != neighbor->ncollections) {
ncollections_cutoff = neighbor->ncollections; ncollections_cutoff = neighbor->ncollections;
memory->destroy(cutusermulti); memory->destroy(cutusermulti);
memory->create(cutusermulti,ncollections_cutoff,"comm:cutusermulti"); memory->create(cutusermulti,ncollections_cutoff,"comm:cutusermulti");
for (i=0; i < ncollections_cutoff; ++i) for (i=0; i < ncollections_cutoff; ++i)
cutusermulti[i] = -1.0; cutusermulti[i] = -1.0;
} }
utils::bounds(FLERR,arg[iarg+1],1,ncollections_cutoff+1,nlo,nhi,error); utils::bounds(FLERR,arg[iarg+1],1,ncollections_cutoff,nlo,nhi,error);
cut = utils::numeric(FLERR,arg[iarg+2],false,lmp); cut = utils::numeric(FLERR,arg[iarg+2],false,lmp);
cutghostuser = MAX(cutghostuser,cut); cutghostuser = MAX(cutghostuser,cut);
if (cut < 0.0) if (cut < 0.0)