honor atom-ids in Special Bonds section
This commit is contained in:
@ -3166,6 +3166,7 @@ void Molecule::nspecial_read(int flag, char *line)
|
|||||||
|
|
||||||
void Molecule::special_read(char *line)
|
void Molecule::special_read(char *line)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < natoms; ++i) count[i] = 0;
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < natoms; i++) {
|
for (int i = 0; i < natoms; i++) {
|
||||||
readline(line);
|
readline(line);
|
||||||
@ -3176,17 +3177,26 @@ void Molecule::special_read(char *line)
|
|||||||
if (nwords != nspecial[i][2] + 1)
|
if (nwords != nspecial[i][2] + 1)
|
||||||
error->all(FLERR, fileiarg, "Molecule file special list does not match special count");
|
error->all(FLERR, fileiarg, "Molecule file special list does not match special count");
|
||||||
|
|
||||||
values.next_int(); // ignore
|
int iatom = values.next_int() - 1;
|
||||||
|
if (iatom < 0 || iatom >= natoms)
|
||||||
|
error->all(FLERR, fileiarg, "Invalid atom index in Special Bonds section of molecule file");
|
||||||
|
|
||||||
for (int m = 1; m < nwords; m++) {
|
for (int m = 1; m < nwords; m++) {
|
||||||
special[i][m - 1] = values.next_tagint();
|
tagint ival = values.next_tagint();
|
||||||
if (special[i][m - 1] <= 0 || special[i][m - 1] > natoms || special[i][m - 1] == i + 1)
|
if ((ival <= 0) || (ival > natoms) || (ival == iatom + 1))
|
||||||
error->all(FLERR, fileiarg, "Invalid atom index in Special Bonds section of molecule file");
|
error->all(FLERR, fileiarg, "Invalid atom index {} in Special Bonds section of "
|
||||||
|
"molecule file", ival);
|
||||||
|
special[iatom][m - 1] = ival;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (TokenizerException &e) {
|
} catch (TokenizerException &e) {
|
||||||
error->all(FLERR, fileiarg, "Invalid line in Special Bonds section of molecule file: {}\n{}", e.what(),
|
error->all(FLERR, fileiarg, "Invalid line in Special Bonds section of molecule file: {}\n{}",
|
||||||
line);
|
e.what(), line);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < natoms; i++) {
|
||||||
|
if (count[i] == 0)
|
||||||
|
error->all(FLERR, fileiarg, "Atom {} missing in Special Bonds section of molecule file",
|
||||||
|
i + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user