Updating examples, updating multi in info, fixing memory issues in comm/neighbor
This commit is contained in:
14
src/comm.cpp
14
src/comm.cpp
@ -298,18 +298,32 @@ void Comm::modify_params(int narg, char **arg)
|
||||
// need to reset cutghostuser when switching comm mode
|
||||
if (mode == Comm::MULTI) cutghostuser = 0.0;
|
||||
if (mode == Comm::MULTIOLD) cutghostuser = 0.0;
|
||||
if(cutusermulti){
|
||||
memory->destroy(cutusermulti);
|
||||
cutusermulti = nullptr;
|
||||
}
|
||||
if(cutusermultiold){
|
||||
memory->destroy(cutusermultiold);
|
||||
cutusermultiold = nullptr;
|
||||
}
|
||||
mode = Comm::SINGLE;
|
||||
} else if (strcmp(arg[iarg+1],"multi") == 0) {
|
||||
// need to reset cutghostuser when switching comm mode
|
||||
if (mode == Comm::SINGLE) cutghostuser = 0.0;
|
||||
if (mode == Comm::MULTIOLD) cutghostuser = 0.0;
|
||||
if(cutusermultiold){
|
||||
memory->destroy(cutusermultiold);
|
||||
cutusermultiold = nullptr;
|
||||
}
|
||||
mode = Comm::MULTI;
|
||||
} else if (strcmp(arg[iarg+1],"multi/old") == 0) {
|
||||
// need to reset cutghostuser when switching comm mode
|
||||
if (mode == Comm::SINGLE) cutghostuser = 0.0;
|
||||
if (mode == Comm::MULTI) cutghostuser = 0.0;
|
||||
if(cutusermulti){
|
||||
memory->destroy(cutusermulti);
|
||||
cutusermulti = nullptr;
|
||||
}
|
||||
mode = Comm::MULTIOLD;
|
||||
} else error->all(FLERR,"Illegal comm_modify command");
|
||||
iarg += 2;
|
||||
|
||||
@ -145,6 +145,12 @@ void CommBrick::init()
|
||||
ncollections = neighbor->ncollections;
|
||||
allocate_multi(maxswap);
|
||||
memory->create(cutghostmulti,ncollections,3,"comm:cutghostmulti");
|
||||
if(cutusermultiflag) {
|
||||
memory->grow(cutusermulti,ncollections,"comm:cutusermulti");
|
||||
for(int i = ncollections_prior; i < ncollections; i++)
|
||||
cutusermulti[i] = -1.0;
|
||||
}
|
||||
|
||||
ncollections_prior = ncollections;
|
||||
}
|
||||
if ((mode == Comm::SINGLE or mode == Comm::MULTIOLD) && multilo) {
|
||||
@ -218,7 +224,7 @@ void CommBrick::setup()
|
||||
// parse any cutoff/multi commands
|
||||
int nhi, nlo;
|
||||
for(auto it = usermultiargs.begin(); it != usermultiargs.end(); it ++) {
|
||||
utils::bounds(FLERR,it->first,1,ncollections,nlo,nhi,error);
|
||||
utils::bounds(FLERR,it->first,0,ncollections,nlo,nhi,error);
|
||||
if(nhi >= ncollections)
|
||||
error->all(FLERR, "Unused collection id in comm_modify cutoff/multi command");
|
||||
for (j=nlo; j<=nhi; ++j)
|
||||
@ -898,6 +904,22 @@ void CommBrick::borders()
|
||||
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
|
||||
sendlist[iswap][nsend++] = i;
|
||||
}
|
||||
} else if (mode == Comm::MULTI) {
|
||||
ngroup = atom->nfirst;
|
||||
for (i = 0; i < ngroup; i++) {
|
||||
icollection = collection[i];
|
||||
if (x[i][dim] >= mlo[icollection] && x[i][dim] <= mhi[icollection]) {
|
||||
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
|
||||
sendlist[iswap][nsend++] = i;
|
||||
}
|
||||
}
|
||||
for (i = atom->nlocal; i < nlast; i++) {
|
||||
icollection = collection[i];
|
||||
if (x[i][dim] >= mlo[icollection] && x[i][dim] <= mhi[icollection]) {
|
||||
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
|
||||
sendlist[iswap][nsend++] = i;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ngroup = atom->nfirst;
|
||||
for (i = 0; i < ngroup; i++) {
|
||||
|
||||
@ -198,7 +198,6 @@ void CommTiled::setup()
|
||||
|
||||
for(i = 0; i < maxswap; i ++)
|
||||
grow_swap_send_multi(i,DELTA_PROCS);
|
||||
|
||||
if(cutusermultiflag){
|
||||
memory->grow(cutusermulti,ncollections,"comm:cutusermulti");
|
||||
for(i = ncollections_prior; i < ncollections; i++)
|
||||
@ -211,7 +210,7 @@ void CommTiled::setup()
|
||||
// parse any cutoff/multi commands
|
||||
int nhi, nlo;
|
||||
for(auto it = usermultiargs.begin(); it != usermultiargs.end(); it ++) {
|
||||
utils::bounds(FLERR,it->first,1,ncollections,nlo,nhi,error);
|
||||
utils::bounds(FLERR,it->first,0,ncollections,nlo,nhi,error);
|
||||
if(nhi >= ncollections)
|
||||
error->all(FLERR, "Unused collection id in comm_modify cutoff/multi command");
|
||||
|
||||
@ -224,6 +223,7 @@ void CommTiled::setup()
|
||||
// If using multi/reduce, communicate particles a distance equal
|
||||
// to the max cutoff with equally sized or smaller collections
|
||||
// If not, communicate the maximum cutoff of the entire collection
|
||||
|
||||
for (i = 0; i < ncollections; i++) {
|
||||
if (cutusermulti) {
|
||||
cutghostmulti[i][0] = cutusermulti[i];
|
||||
|
||||
17
src/info.cpp
17
src/info.cpp
@ -414,9 +414,24 @@ void Info::command(int narg, char **arg)
|
||||
if (comm->mode == 1) {
|
||||
fputs("Communication mode = multi\n",out);
|
||||
double cut;
|
||||
for (int i=0; i < neighbor->ncollections; ++i) {
|
||||
if (comm->cutusermulti) cut = comm->cutusermulti[i];
|
||||
else cut = 0.0;
|
||||
for (int j=0; j < neighbor->ncollections; ++j) {
|
||||
cut = MAX(cut,sqrt(neighbor->cutcollectionsq[i][j]));
|
||||
}
|
||||
|
||||
if (comm->cutusermulti) cut = MAX(cut,comm->cutusermulti[i]);
|
||||
fmt::print(out,"Communication cutoff for collection {} = {:.8}\n", i, cut);
|
||||
}
|
||||
}
|
||||
|
||||
if (comm->mode == 2) {
|
||||
fputs("Communication mode = multi/old\n",out);
|
||||
double cut;
|
||||
for (int i=1; i <= atom->ntypes && neighbor->cuttype; ++i) {
|
||||
cut = neighbor->cuttype[i];
|
||||
if (comm->cutusermulti) cut = MAX(cut,comm->cutusermulti[i]);
|
||||
if (comm->cutusermultiold) cut = MAX(cut,comm->cutusermultiold[i]);
|
||||
fmt::print(out,"Communication cutoff for type {} = {:.8}\n", i, cut);
|
||||
}
|
||||
}
|
||||
|
||||
@ -366,6 +366,7 @@ void Neighbor::init()
|
||||
if(not custom_collection_flag) {
|
||||
ncollections = n;
|
||||
interval_collection_flag = 0;
|
||||
if(not type2collection)
|
||||
memory->create(type2collection,n+1,"neigh:type2collection");
|
||||
for(i = 1; i <= n; i++)
|
||||
type2collection[i] = i-1;
|
||||
|
||||
Reference in New Issue
Block a user