Skip to content

Commit 1cd6c79

Browse files
committed
Merge branch 'update-epanet-src' into dev
2 parents 1d05ad6 + a7c1351 commit 1cd6c79

24 files changed

Lines changed: 153 additions & 86 deletions

epanet-msx-src/msxdispersion.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ void solve_nodequal(int m, double tstep)
272272
double coelastseg, coefirstseg;
273273

274274
int njuncs = MSX.Nobjects[NODE] - MSX.Nobjects[TANK];
275-
int found = 0;
276275

277276

278277
//let's take a look of the matrix
@@ -306,13 +305,11 @@ void solve_nodequal(int m, double tstep)
306305
coelastseg = ldispersion * asquare / lastseg->v; //dispersion should be pipe by pipe
307306
MSX.Dispersion.Aij[MSX.Dispersion.Ndx[k]] -= coefirstseg * firstseg->uresponse; //coefirstseg*firstseg->greenu = coelastseg*lastseg->greend
308307

309-
found = 0;
310308
source = MSX.Node[n2].sources;
311309
while(source != NULL)
312310
{
313311
if (source->species == m)
314312
{
315-
found = 1;
316313
break;
317314
}
318315
else
@@ -338,14 +335,11 @@ void solve_nodequal(int m, double tstep)
338335
MSX.Dispersion.F[MSX.Dispersion.Row[n1]] += coelastseg * MSX.LastSeg[k]->dresponse * MSX.Node[n2].c[m];
339336
}
340337

341-
342-
found = 0;
343338
source = MSX.Node[n1].sources;
344339
while (source != NULL)
345340
{
346341
if (source->species == m)
347342
{
348-
found = 1;
349343
break;
350344
}
351345
else
@@ -382,7 +376,7 @@ void solve_nodequal(int m, double tstep)
382376
}
383377
}
384378

385-
int errcode = msx_linsolve(njuncs, MSX.Dispersion.Aii, MSX.Dispersion.Aij, MSX.Dispersion.F);
379+
msx_linsolve(njuncs, MSX.Dispersion.Aii, MSX.Dispersion.Aij, MSX.Dispersion.F);
386380

387381
for (int i = 1; i <= njuncs; i++)
388382
{

epanet-msx-src/msxrpt.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,12 @@ static char *Logo[] =
3737
"* Version 2.0.0 *", //2.0.00
3838
"******************************************************************"};
3939

40-
static char PageHdr[] = " Page %d ";
4140
static char *StatsHdrs[] =
4241
{"", "Average Values ", "Minimum Values ",
4342
"Maximum Values ", "Range of Values "};
4443
static char Line[MAXLINE+1];
4544
static long LineNum;
4645
static long PageNum;
47-
static int *RptdSpecies;
4846
static struct TableHdrStruct
4947
{
5048
char Line1[MAXLINE+1];
@@ -327,7 +325,7 @@ void newPage()
327325
char s[MAXLINE+1];
328326
LineNum = 1;
329327
sprintf(s,
330-
"\nPage %-3d EPANET-MSX 2.0.0", //2.0.0
328+
"\nPage %lu EPANET-MSX 2.0.0", //2.0.0
331329
PageNum);
332330
writeLine(s);
333331
writeLine("");
@@ -359,7 +357,6 @@ void writemassbalance()
359357
{
360358

361359
char s1[MAXMSG + 1];
362-
int kunits = 0;
363360

364361
for (int m = 1; m <= MSX.Nobjects[SPECIES]; m++)
365362
{

epanet-msx-src/msxtank.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,13 @@ void MSXtank_mix1(int i, double vin, double *massin, double vnet)
5050
** vnet = inflow - outflow
5151
*/
5252
{
53-
int k, m, n;
53+
int k, m;
5454
double c;
5555
double vnew;
5656
Pseg seg;
5757

5858
// --- blend inflow with contents
5959

60-
n = MSX.Tank[i].node;
6160
k = MSX.Nobjects[LINK] + i;
6261
seg = MSX.FirstSeg[k];
6362
if (seg)
@@ -95,16 +94,14 @@ void MSXtank_mix2(int i, double vin, double *massin, double vnet)
9594
** vnet = inflow - outflow
9695
*/
9796
{
98-
int k, m, n;
97+
int k, m;
9998
double vt, //transferred volume
10099
vmz; //full mixing zone volume
101100
Pseg mixzone, // Mixing zone segment
102101
stagzone; // Stagnant zone segment
103102

104103
// --- find inflows & outflows
105104

106-
n = MSX.Tank[i].node;
107-
108105
// --- get segments for each zone
109106

110107
k = MSX.Nobjects[LINK] + i;
@@ -204,14 +201,13 @@ void MSXtank_mix3(int i, double vin, double *massin, double vnet)
204201
** vnet = inflow - outflow
205202
*/
206203
{
207-
int k, m, n;
204+
int k, m;
208205
double vout, vseg, vsum;
209206
Pseg seg;
210207

211208
// --- find inflows & outflows
212209

213210
k = MSX.Nobjects[LINK] + i;
214-
n = MSX.Tank[i].node;
215211
vout = vin - vnet;
216212

217213
if (MSX.LastSeg[k] == NULL || MSX.FirstSeg[k] == NULL) return;
@@ -309,14 +305,13 @@ void MSXtank_mix4(int i, double vin, double *massin, double vnet)
309305
**----------------------------------------------------------
310306
*/
311307
{
312-
int k, m, n;
308+
int k, m;
313309
double vsum, vseg;
314310
Pseg seg;
315311

316312
// --- find inflows & outflows
317313

318314
k = MSX.Nobjects[LINK] + i;
319-
n = MSX.Tank[i].node;
320315

321316
if (MSX.LastSeg[k] == NULL || MSX.FirstSeg[k] == NULL) return;
322317

epanet-msx-src/msxutils.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <float.h>
1818

1919
#include "msxutils.h"
20+
#include "funcs.h"
2021
// --- define WINDOWS
2122

2223
#undef WINDOWS
@@ -252,10 +253,17 @@ int MSXutils_getDouble(char *s, double *y)
252253
** 1 if conversion successful, 0 if not.
253254
*/
254255
{
255-
char *endptr;
256-
*y = strtod(s, &endptr);
257-
if (*endptr > 0) return(0);
258-
return(1);
256+
int r = getfloat(s, y);
257+
258+
if (r==0) {
259+
char *endptr;
260+
*y = strtod(s, &endptr);
261+
if (*endptr > 0) return(0);
262+
return(1);
263+
}
264+
else {
265+
return r;
266+
}
259267
}
260268

261269
//=============================================================================

epanet-msx-src/ros2.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ int ros2_integrate(double y[], int n, double t, double tnext,
136136
{
137137
double UROUND = 2.3e-16;
138138
double g, ghinv, ghinv1, dghinv, ytol;
139-
double h, hold, hmin, hmax, tplus;
139+
double h, hmin, hmax, tplus;
140140
double ej, err, factor, facmax;
141141
int nfcn, njac, naccept, nreject, j;
142142
int isReject;
@@ -241,7 +241,6 @@ int ros2_integrate(double y[], int n, double t, double tnext,
241241

242242
// --- Error estimation
243243

244-
hold = h;
245244
err = 0.0;
246245
if ( adjust )
247246
{

epanet-src/epanet.c

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
Authors: see AUTHORS
88
Copyright: see AUTHORS
99
License: see LICENSE
10-
Last Updated: 03/19/2026
10+
Last Updated: 05/11/2026
1111
******************************************************************************
1212
*/
1313

@@ -16,6 +16,7 @@
1616
#include <string.h>
1717
#include <float.h>
1818
#include <math.h>
19+
#include <locale.h>
1920

2021
#include "epanet2_2.h"
2122
#include "types.h"
@@ -48,6 +49,10 @@ int DLLEXPORT EN_createproject(EN_Project *p)
4849
getTmpName(project->TmpOutFname);
4950
getTmpName(project->TmpStatFname);
5051
*p = project;
52+
53+
// Use system's decimal point (will be changed locally to dot
54+
// when reading/writing EPANET input files)
55+
setlocale(LC_NUMERIC, "");
5156
return 0;
5257
}
5358

@@ -2768,7 +2773,7 @@ int DLLEXPORT EN_setnodevalues(EN_Project p, int property, double *values, int *
27682773
**----------------------------------------------------------------
27692774
*/
27702775
{
2771-
int i, j, errcode = 0;
2776+
int i, j, k, errcode = 0;
27722777
int n = p->network.Nnodes;
27732778
double *old = NULL;
27742779

@@ -2796,7 +2801,7 @@ int DLLEXPORT EN_setnodevalues(EN_Project p, int property, double *values, int *
27962801
}
27972802
if (errcode != 0)
27982803
{
2799-
for (int k = 1; k <= j; k++)
2804+
for (k = 1; k <= j; k++)
28002805
{
28012806
EN_setnodevalue(p, k, property, old[k - 1]);
28022807
}
@@ -4331,20 +4336,30 @@ int DLLEXPORT EN_setlinkvalue(EN_Project p, int index, int property, double valu
43314336

43324337
case EN_LEAK_AREA: // leak area per 100 pipe lengths units
43334338
if (value < 0.0) return 211;
4334-
Link[index].LeakArea = value * Ucf[LENGTH];
4339+
value = value * Ucf[LENGTH];
4340+
if (fabs(value - Link[index].LeakArea) > TINY)
4341+
{
4342+
Link[index].LeakArea = value;
4343+
if (hyd->OpenHflag) hyd->LeakageChanged = TRUE;
4344+
}
43354345
break;
43364346

43374347
case EN_LEAK_EXPAN: // leak area expansion slope per 100 pipe length units
43384348
if (value < 0.0) return 211;
4339-
Link[index].LeakExpan = value * Ucf[LENGTH];
4349+
value = value * Ucf[LENGTH];
4350+
if (fabs(value - Link[index].LeakExpan) > TINY)
4351+
{
4352+
Link[index].LeakExpan = value;
4353+
if (hyd->OpenHflag) hyd->LeakageChanged = TRUE;
4354+
}
43404355
break;
43414356

43424357
case EN_VALVE_TYPE:
43434358
if (hyd->OpenHflag || qual->OpenQflag) return 262; //Solver is running
43444359
if (Link[index].Type <= PUMP) return 264; //Link not a valve
43454360
valveType = ROUND(value);
43464361
if (valveType < PRV || valveType > PCV) return 213; //Invalid valve type
4347-
if (valveType == Link[index].Type) return 0; //No type change
4362+
if (valveType == (int)Link[index].Type) return 0; //No type change
43484363
return changevalvetype(p, index, valveType); //See project.c
43494364

43504365
default:
@@ -4363,7 +4378,7 @@ int DLLEXPORT EN_setlinkvalues(EN_Project p, int property, double *values, int *
43634378
**----------------------------------------------------------------
43644379
*/
43654380
{
4366-
int i, j, errcode = 0;
4381+
int i, j, k, errcode = 0;
43674382
int n = p->network.Nlinks;
43684383
double *old = NULL;
43694384

@@ -4391,7 +4406,7 @@ int DLLEXPORT EN_setlinkvalues(EN_Project p, int property, double *values, int *
43914406
}
43924407
if (errcode != 0)
43934408
{
4394-
for (int k = 1; k <= j; k++)
4409+
for (k = 1; k <= j; k++)
43954410
{
43964411
EN_setlinkvalue(p, k, property, old[k - 1]);
43974412
}
@@ -4632,7 +4647,6 @@ int DLLEXPORT EN_setheadcurveindex(EN_Project p, int linkIndex, int curveIndex)
46324647
Network *net = &p->network;
46334648

46344649
int pumpIndex;
4635-
int err = 0;
46364650
Spump *pump;
46374651

46384652
// Check for valid parameters

epanet-src/epanet2.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
Authors: see AUTHORS
88
Copyright: see AUTHORS
99
License: see LICENSE
10-
Last Updated: 03/19/2026
10+
Last Updated: 05/11/2026
1111
******************************************************************************
1212
*/
1313

1414
#include <stdlib.h>
1515
#include <string.h>
16+
#include <locale.h>
1617

1718
#include "types.h"
1819
#include "funcs.h"
@@ -32,6 +33,10 @@ void createtmpfiles()
3233
getTmpName(_defaultProject->TmpHydFname);
3334
getTmpName(_defaultProject->TmpOutFname);
3435
getTmpName(_defaultProject->TmpStatFname);
36+
37+
// Use system's decimal point (will be changed locally to dot
38+
// when reading/writing EPANET input files)
39+
setlocale(LC_NUMERIC, "");
3540
}
3641

3742
void removetmpfiles()
@@ -385,7 +390,7 @@ int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value)
385390

386391
int DLLEXPORT ENsetnodevalues(int property, EN_API_FLOAT_TYPE *values, int *badIndex)
387392
{
388-
int i, j, errcode = 0;
393+
int i, j, k, errcode = 0;
389394
int n = _defaultProject->network.Nnodes;
390395
EN_API_FLOAT_TYPE *old = NULL;
391396

@@ -413,7 +418,7 @@ int DLLEXPORT ENsetnodevalues(int property, EN_API_FLOAT_TYPE *values, int *badI
413418
}
414419
if (errcode != 0)
415420
{
416-
for (int k = 1; k <= j; k++)
421+
for (k = 1; k <= j; k++)
417422
{
418423
ENsetnodevalue(k, property, old[k - 1]);
419424
}
@@ -608,7 +613,7 @@ int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value)
608613

609614
int DLLEXPORT ENsetlinkvalues(int property, EN_API_FLOAT_TYPE *values, int *badIndex)
610615
{
611-
int i, j, errcode = 0;
616+
int i, j, k, errcode = 0;
612617
int n = _defaultProject->network.Nlinks;
613618
EN_API_FLOAT_TYPE *old = NULL;
614619

@@ -636,7 +641,7 @@ int DLLEXPORT ENsetlinkvalues(int property, EN_API_FLOAT_TYPE *values, int *badI
636641
}
637642
if (errcode != 0)
638643
{
639-
for (int k = 1; k <= j; k++)
644+
for (k = 1; k <= j; k++)
640645
{
641646
ENsetlinkvalue(k, property, old[k - 1]);
642647
}

epanet-src/flowbalance.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void updateflowbalance(Project *pr, long hstep)
5252
Times *time = &pr->times;
5353

5454
int i, j;
55-
double v, dt, deficit, fullDemand;
55+
double v, dt, deficit;
5656
SflowBalance flowBalance;
5757

5858
// Determine current time interval in seconds
@@ -71,7 +71,6 @@ void updateflowbalance(Project *pr, long hstep)
7171
flowBalance.leakageDemand = 0.0;
7272
flowBalance.deficitDemand = 0.0;
7373
flowBalance.storageDemand = 0.0;
74-
fullDemand = 0.0;
7574

7675
// Initialize leakage loss
7776
hyd->LeakageLoss = 0.0;
@@ -85,7 +84,6 @@ void updateflowbalance(Project *pr, long hstep)
8584
flowBalance.totalInflow += (-v);
8685
else
8786
{
88-
fullDemand += hyd->FullDemand[i];
8987
flowBalance.consumerDemand += v;
9088
flowBalance.totalOutflow += v;
9189
}

epanet-src/funcs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#ifndef FUNCS_H
1414
#define FUNCS_H
1515

16+
#include "types.h"
17+
1618
// ------- PROJECT.C ------------
1719

1820
void initpointers(Project *);

0 commit comments

Comments
 (0)