include the bond length in communication cutoff considerations

This commit is contained in:
Axel Kohlmeyer
2019-07-24 14:27:29 -04:00
parent f4df51763d
commit 985c959a91

View File

@ -35,6 +35,7 @@
#include "comm.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "domain.h"
#include "group.h"
#include "modify.h"
@ -276,6 +277,28 @@ void Neighbor::init()
// cutneigh = force cutoff + skin if cutforce > 0, else cutneigh = 0
// cutneighghost = pair cutghost if it requests it, else same as cutneigh
// also consider bonded interactions for estimating the the neighborlist
// and communication cutoff. we use the bond equilibrium distance as
// cutoff, if only a bond style exists. if also an angle style exists we
// multiply by 2, for dihedral or improper we multiply by 3.
// this plus "skin" will become the default communication cutoff, if no
// pair style is defined. otherwise the maximum of the largest pairwise
// cutoff of this is used.
double maxbondcutoff = 0.0;
if (force->bond) {
n = atom->nbondtypes;
for (i = 1; i <= n; ++i) {
double bondcutoff = force->bond->equilibrium_distance(i);
maxbondcutoff = MAX(bondcutoff,maxbondcutoff);
}
if (force->dihedral || force->improper) {
maxbondcutoff *= 3.0;
} else if (force->angle) {
maxbondcutoff *=2.0;
}
}
triggersq = 0.25*skin*skin;
boxcheck = 0;
if (domain->box_change && (domain->xperiodic || domain->yperiodic ||
@ -293,7 +316,7 @@ void Neighbor::init()
double cutoff,delta,cut;
cutneighmin = BIG;
cutneighmax = 0.0;
cutneighmax = maxbondcutoff;
for (i = 1; i <= n; i++) {
cuttype[i] = cuttypesq[i] = 0.0;