bond/react: better template validity check
now always throws error if a bond type changes, but both of of the involved atoms are too close to edge of template
This commit is contained in:
@ -1063,8 +1063,8 @@ void FixBondReact::superimpose_algorithm()
|
||||
hang_catch++;
|
||||
// let's go ahead and catch the simplest of hangs
|
||||
//if (hang_catch > onemol->natoms*4)
|
||||
if (hang_catch > atom->nlocal*3) {
|
||||
error->all(FLERR,"Excessive iteration of superimpose algorithm");
|
||||
if (hang_catch > atom->nlocal*30) {
|
||||
error->one(FLERR,"Excessive iteration of superimpose algorithm");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1554,6 +1554,42 @@ void FixBondReact::find_landlocked_atoms(int myrxn)
|
||||
error->one(FLERR,"Atom affected by reaction too close to template edge");
|
||||
}
|
||||
|
||||
// additionally, if a bond changes type, but neither involved atom is landlocked, bad
|
||||
// would someone want to change an angle type but not bond or atom types? (etc.) ...hopefully not yet
|
||||
for (int i = 0; i < twomol->natoms; i++) {
|
||||
if (landlocked_atoms[i][myrxn] == 0) {
|
||||
int twomol_atomi = i+1;
|
||||
for (int j = 0; j < twomol->num_bond[i]; j++) {
|
||||
int twomol_atomj = twomol->bond_atom[i][j];
|
||||
if (landlocked_atoms[twomol_atomj-1][myrxn] == 0) {
|
||||
int onemol_atomi = equivalences[i][1][myrxn];
|
||||
int onemol_batom;
|
||||
for (int m = 0; m < onemol->num_bond[onemol_atomi-1]; m++) {
|
||||
onemol_batom = onemol->bond_atom[onemol_atomi-1][m];
|
||||
if (onemol_batom == equivalences[twomol_atomj-1][1][myrxn]) {
|
||||
if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomi-1][m]) {
|
||||
printf("%d and %d for rxn %d\n",twomol_atomi,twomol_atomj,myrxn);
|
||||
error->one(FLERR,"Bond type affected by reaction too close to template edge");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (newton_bond) {
|
||||
int onemol_atomj = equivalences[twomol_atomj-1][1][myrxn];
|
||||
for (int m = 0; m < onemol->num_bond[onemol_atomj-1]; m++) {
|
||||
onemol_batom = onemol->bond_atom[onemol_atomj-1][m];
|
||||
if (onemol_batom == equivalences[i][1][myrxn]) {
|
||||
if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomj-1][m]) {
|
||||
printf("%d and %d for rxn %d\n",twomol_atomi,twomol_atomj,myrxn);
|
||||
error->one(FLERR,"Bond type affected by reaction too close to template edge");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// also, if atoms change number of bonds, but aren't landlocked, that could be bad
|
||||
if (me == 0)
|
||||
for (int i = 0; i < twomol->natoms; i++) {
|
||||
|
||||
Reference in New Issue
Block a user