From a9aa752d3a611cb51ee15c2a6b94ca8c6a78e194 Mon Sep 17 00:00:00 2001 From: lbutler Date: Wed, 9 Jul 2025 23:36:56 -0400 Subject: [PATCH] Fix Incorrect Conversion of Feet of Pressure to Meters #864 --- src/epanet.c | 11 ++++++++--- src/input1.c | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/epanet.c b/src/epanet.c index e4f3683..1569305 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -1355,7 +1355,12 @@ int DLLEXPORT EN_setoption(EN_Project p, int option, double value) case EN_SP_GRAVITY: if (value <= 0.0) return 213; - Ucf[PRESSURE] *= (value / hyd->SpGrav); + if (p->parser.Pressflag == PSI || + p->parser.Pressflag == KPA || + p->parser.Pressflag == BAR) + { + Ucf[PRESSURE] *= (value / hyd->SpGrav); + } hyd->SpGrav = value; break; @@ -2285,7 +2290,7 @@ int DLLEXPORT EN_getnodevalue(EN_Project p, int index, int property, double *val v = 0.0; if (Node[index].Ke > 0.0) { - ecfTmp = (parser->Unitsflag == US) ? (PSIperFT * hyd->SpGrav) : (MperFT * hyd->SpGrav); + ecfTmp = (parser->Unitsflag == US) ? (PSIperFT * hyd->SpGrav) : MperFT; v = Ucf[FLOW] / pow((ecfTmp * Node[index].Ke), (1.0 / hyd->Qexp)); } break; @@ -2533,7 +2538,7 @@ int DLLEXPORT EN_setnodevalue(EN_Project p, int index, int property, double valu if (value < 0.0) return 209; if (value > 0.0) { - ecfTmp = (parser->Unitsflag == US) ? (PSIperFT * hyd->SpGrav) : (MperFT * hyd->SpGrav); + ecfTmp = (parser->Unitsflag == US) ? (PSIperFT * hyd->SpGrav) : MperFT; value = pow((Ucf[FLOW] / value), hyd->Qexp) / ecfTmp; } Node[index].Ke = value; diff --git a/src/input1.c b/src/input1.c index 94a7a3e..0773e23 100644 --- a/src/input1.c +++ b/src/input1.c @@ -453,10 +453,10 @@ void initunits(Project *pr) strcpy(rpt->Field[PRESSURE].Units, PressUnitsTxt[parser->Pressflag]); pcf = PSIperFT * hyd->SpGrav; // Default to PSI - if (parser->Pressflag == METERS) pcf = MperFT * hyd->SpGrav; + if (parser->Pressflag == METERS) pcf = MperFT; if (parser->Pressflag == KPA) pcf = KPAperPSI * PSIperFT * hyd->SpGrav; if (parser->Pressflag == BAR) pcf = BARperPSI * PSIperFT * hyd->SpGrav; - if (parser->Pressflag == FEET) pcf = 1.0 * hyd->SpGrav; + if (parser->Pressflag == FEET) pcf = 1.0; strcpy(rpt->Field[QUALITY].Units, ""); ccf = 1.0;