better map file error handling

This commit is contained in:
jrgissing
2023-02-12 15:08:46 -05:00
parent f2713aad94
commit eab3c4d382

View File

@ -2850,7 +2850,7 @@ void FixBondReact::glove_ghostcheck()
ghostly = 1;
}
#endif
if (ghostly == 1) {
ghostly_mega_glove[0][ghostly_num_mega] = rxnID;
for (int j = 0; j < onemol->natoms+1; j++) {
@ -3908,6 +3908,7 @@ read map file
void FixBondReact::read_map_file(int myrxn)
{
int rv;
char line[MAXLINE],keyword[MAXLINE];
char *eof,*ptr;
@ -3932,16 +3933,24 @@ void FixBondReact::read_map_file(int myrxn)
if (strstr(line,"edgeIDs")) sscanf(line,"%d",&nedge);
else if (strstr(line,"equivalences")) {
sscanf(line,"%d",&nequivalent);
rv = sscanf(line,"%d",&nequivalent);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
if (nequivalent != onemol->natoms)
error->one(FLERR,"Fix bond/react: Number of equivalences in map file must "
"equal number of atoms in reaction templates");
}
else if (strstr(line,"deleteIDs")) sscanf(line,"%d",&ndelete);
else if (strstr(line,"createIDs")) sscanf(line,"%d",&ncreate);
else if (strstr(line,"chiralIDs")) sscanf(line,"%d",&nchiral);
else if (strstr(line,"constraints")) {
sscanf(line,"%d",&nconstraints[myrxn]);
else if (strstr(line,"deleteIDs")) {
rv = sscanf(line,"%d",&ndelete);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
} else if (strstr(line,"createIDs")) {
rv = sscanf(line,"%d",&ncreate);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
} else if (strstr(line,"chiralIDs")) {
rv = sscanf(line,"%d",&nchiral);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
} else if (strstr(line,"constraints")) {
rv = sscanf(line,"%d",&nconstraints[myrxn]);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
if (maxnconstraints < nconstraints[myrxn]) maxnconstraints = nconstraints[myrxn];
constraints.resize(maxnconstraints, std::vector<Constraint>(nreacts));
} else break;
@ -3961,11 +3970,13 @@ void FixBondReact::read_map_file(int myrxn)
if (comm->me == 0) error->warning(FLERR,"Fix bond/react: The BondingIDs section title has been deprecated. Please use InitiatorIDs instead.");
bondflag = 1;
readline(line);
sscanf(line,"%d",&ibonding[myrxn]);
rv = sscanf(line,"%d",&ibonding[myrxn]);
if (rv != 1) error->one(FLERR, "InitiatorIDs section is incorrectly formatted");
if (ibonding[myrxn] > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
readline(line);
sscanf(line,"%d",&jbonding[myrxn]);
rv = sscanf(line,"%d",&jbonding[myrxn]);
if (rv != 1) error->one(FLERR, "InitiatorIDs section is incorrectly formatted");
if (jbonding[myrxn] > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
} else if (strcmp(keyword,"EdgeIDs") == 0) {
@ -3996,10 +4007,11 @@ void FixBondReact::EdgeIDs(char *line, int myrxn)
{
// puts a 1 at edge(edgeID)
int tmp;
int tmp,rv;
for (int i = 0; i < nedge; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "EdgeIDs section is incorrectly formatted");
if (tmp > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
edge[tmp-1][myrxn] = 1;
@ -4008,11 +4020,11 @@ void FixBondReact::EdgeIDs(char *line, int myrxn)
void FixBondReact::Equivalences(char *line, int myrxn)
{
int tmp1;
int tmp2;
int tmp1,tmp2,rv;
for (int i = 0; i < nequivalent; i++) {
readline(line);
sscanf(line,"%d %d",&tmp1,&tmp2);
rv = sscanf(line,"%d %d",&tmp1,&tmp2);
if (rv != 2) error->one(FLERR, "Equivalences section is incorrectly formatted");
if (tmp1 > onemol->natoms || tmp2 > twomol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
//equivalences is-> clmn 1: post-reacted, clmn 2: pre-reacted
@ -4026,10 +4038,11 @@ void FixBondReact::Equivalences(char *line, int myrxn)
void FixBondReact::DeleteAtoms(char *line, int myrxn)
{
int tmp;
int tmp,rv;
for (int i = 0; i < ndelete; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "DeleteIDs section is incorrectly formatted");
if (tmp > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
delete_atoms[tmp-1][myrxn] = 1;
@ -4039,10 +4052,11 @@ void FixBondReact::DeleteAtoms(char *line, int myrxn)
void FixBondReact::CreateAtoms(char *line, int myrxn)
{
create_atoms_flag[myrxn] = 1;
int tmp;
int tmp,rv;
for (int i = 0; i < ncreate; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "CreateIDs section is incorrectly formatted");
create_atoms[tmp-1][myrxn] = 1;
}
if (twomol->xflag == 0)
@ -4060,10 +4074,11 @@ void FixBondReact::CustomCharges(int ifragment, int myrxn)
void FixBondReact::ChiralCenters(char *line, int myrxn)
{
int tmp;
int tmp,rv;
for (int i = 0; i < nchiral; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "ChiralIDs section is incorrectly formatted");
if (tmp > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
chiral_atoms[tmp-1][0][myrxn] = 1;
@ -4093,6 +4108,7 @@ void FixBondReact::ChiralCenters(char *line, int myrxn)
void FixBondReact::ReadConstraints(char *line, int myrxn)
{
int rv;
double tmp[MAXCONARGS];
char **strargs,*ptr,*lptr;
memory->create(strargs,MAXCONARGS,MAXLINE,"bond/react:strargs");
@ -4134,10 +4150,12 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
}
if ((ptr = strchr(lptr,')')))
*ptr = '\0';
sscanf(line,"%s",constraint_type);
rv = sscanf(line,"%s",constraint_type);
if (rv != 1) error->one(FLERR, "Constraints section is incorrectly formatted");
if (strcmp(constraint_type,"distance") == 0) {
constraints[i][myrxn].type = DISTANCE;
sscanf(line,"%*s %s %s %lg %lg",strargs[0],strargs[1],&tmp[0],&tmp[1]);
rv = sscanf(line,"%*s %s %s %lg %lg",strargs[0],strargs[1],&tmp[0],&tmp[1]);
if (rv != 4) error->one(FLERR, "Distance constraint is incorrectly formatted");
readID(strargs[0], i, myrxn, 0);
readID(strargs[1], i, myrxn, 1);
// cutoffs
@ -4145,7 +4163,8 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
constraints[i][myrxn].par[1] = tmp[1]*tmp[1];
} else if (strcmp(constraint_type,"angle") == 0) {
constraints[i][myrxn].type = ANGLE;
sscanf(line,"%*s %s %s %s %lg %lg",strargs[0],strargs[1],strargs[2],&tmp[0],&tmp[1]);
rv = sscanf(line,"%*s %s %s %s %lg %lg",strargs[0],strargs[1],strargs[2],&tmp[0],&tmp[1]);
if (rv != 5) error->one(FLERR, "Angle constraint is incorrectly formatted");
readID(strargs[0], i, myrxn, 0);
readID(strargs[1], i, myrxn, 1);
readID(strargs[2], i, myrxn, 2);
@ -4155,8 +4174,9 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
constraints[i][myrxn].type = DIHEDRAL;
tmp[2] = 181.0; // impossible range
tmp[3] = 182.0;
sscanf(line,"%*s %s %s %s %s %lg %lg %lg %lg",strargs[0],strargs[1],
rv = sscanf(line,"%*s %s %s %s %s %lg %lg %lg %lg",strargs[0],strargs[1],
strargs[2],strargs[3],&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
if (!(rv == 6 || rv == 8)) error->one(FLERR, "Dihedral constraint is incorrectly formatted");
readID(strargs[0], i, myrxn, 0);
readID(strargs[1], i, myrxn, 1);
readID(strargs[2], i, myrxn, 2);
@ -4168,7 +4188,8 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
} else if (strcmp(constraint_type,"arrhenius") == 0) {
constraints[i][myrxn].type = ARRHENIUS;
constraints[i][myrxn].par[0] = narrhenius++;
sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
rv = sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
if (rv != 4) error->one(FLERR, "Arrhenius constraint is incorrectly formatted");
constraints[i][myrxn].par[1] = tmp[0];
constraints[i][myrxn].par[2] = tmp[1];
constraints[i][myrxn].par[3] = tmp[2];
@ -4176,7 +4197,8 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
} else if (strcmp(constraint_type,"rmsd") == 0) {
constraints[i][myrxn].type = RMSD;
strcpy(strargs[0],"0");
sscanf(line,"%*s %lg %s",&tmp[0],strargs[0]);
rv = sscanf(line,"%*s %lg %s",&tmp[0],strargs[0]);
if (!(rv == 1 || rv == 2)) error->one(FLERR, "RMSD constraint is incorrectly formatted");
constraints[i][myrxn].par[0] = tmp[0]; // RMSDmax
constraints[i][myrxn].id[0] = -1; // optional molecule fragment
if (isalpha(strargs[0][0])) {