From 6a4b95f4d517942ce750bb5abaa07dadb6ff5c9f Mon Sep 17 00:00:00 2001 From: Lew Rossman Date: Tue, 2 Apr 2019 22:21:05 -0400 Subject: [PATCH] Bug fixes --- src/epanet.c | 19 +++++++++++++------ src/inpfile.c | 7 +++---- src/input2.c | 8 +++++++- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/epanet.c b/src/epanet.c index 29462bc..8eb1ecf 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -7,7 +7,7 @@ Authors: see AUTHORS Copyright: see AUTHORS License: see LICENSE - Last Updated: 03/17/2019 + Last Updated: 04/02/2019 ****************************************************************************** */ @@ -1589,13 +1589,20 @@ int DLLEXPORT EN_setqualtype(EN_Project p, int qualType, char *chemName, Quality *qual = &p->quality; double *Ucf = p->Ucf; - int i; + int i, oldQualFlag, traceNodeIndex; double ccf = 1.0; if (!p->Openflag) return 102; if (qual->OpenQflag) return 262; - if (qualType < EN_NONE || qualType > EN_TRACE) return 251; - qual->Qualflag = (char)qualType; + if (qualType < NONE || qualType > TRACE) return 251; + if (qualType == TRACE) + { + traceNodeIndex = findnode(net, traceNode); + if (traceNodeIndex == 0) return 212; + } + + oldQualFlag = qual->Qualflag; + qual->Qualflag = qualType; qual->Ctol *= Ucf[QUALITY]; if (qual->Qualflag == CHEM) // Chemical analysis { @@ -1623,14 +1630,14 @@ int DLLEXPORT EN_setqualtype(EN_Project p, int qualType, char *chemName, // When changing from CHEM to AGE or TRACE, nodes initial quality // values must be returned to their original ones - if ((qual->Qualflag == AGE || qual->Qualflag == TRACE) & (Ucf[QUALITY] != 1)) + if ((qual->Qualflag == AGE || qual->Qualflag == TRACE) && oldQualFlag == CHEM) { for (i = 1; i <= p->network.Nnodes; i++) { p->network.Node[i].C0 *= Ucf[QUALITY]; } } - + Ucf[QUALITY] = ccf; Ucf[LINKQUAL] = ccf; Ucf[REACTRATE] = ccf; diff --git a/src/inpfile.c b/src/inpfile.c index 45b5aab..8aa3c52 100644 --- a/src/inpfile.c +++ b/src/inpfile.c @@ -7,7 +7,7 @@ Description: saves network data to an EPANET formatted text file Authors: see AUTHORS Copyright: see AUTHORS License: see LICENSE -Last Updated: 03/17/2019 +Last Updated: 04/02/2019 ****************************************************************************** */ @@ -542,7 +542,7 @@ int saveinpfile(Project *pr, const char *fname) if (qual->Climit > 0.0) { - fprintf(f, "\n LIMITING POTENTIAL %-.6f", qual->Climit); + fprintf(f, "\n LIMITING POTENTIAL %-.6f", qual->Climit * pr->Ucf[QUALITY]); } if (qual->Rfactor != MISSING && qual->Rfactor != 0.0) { @@ -797,8 +797,7 @@ int saveinpfile(Project *pr, const char *fname) saveauxdata(pr, f); // Close the new input file - fprintf(f, "\n"); - fprintf(f, s_END); + fprintf(f, "\n%s\n", s_END); fclose(f); return 0; } diff --git a/src/input2.c b/src/input2.c index 2820e35..f1d0c9f 100644 --- a/src/input2.c +++ b/src/input2.c @@ -7,7 +7,7 @@ Description: reads and interprets network data from an EPANET input file Authors: see AUTHORS Copyright: see AUTHORS License: see LICENSE -Last Updated: 03/17/2019 +Last Updated: 04/02/2019 ****************************************************************************** */ @@ -860,6 +860,12 @@ int gettokens(char *s, char** Tok, int maxToks, char *comment) while (len > 0 && n < MAXTOKS) { m = (int)strcspn(s,SEPSTR); // Find token length + if (m == len) // s is last token + { + Tok[n] = s; + n++; + break; + } len -= m+1; // Update length of s if (m == 0) s++; // No token found else