From 99e71511726271fffde360a8f526e143e054a23d Mon Sep 17 00:00:00 2001 From: Elad Salomons Date: Fri, 17 Aug 2018 15:43:53 +0300 Subject: [PATCH 1/2] Add option to get link state Add EN_STATE to ENgetlinkvalue. Related to #218 --- include/epanet2.bas | 1 + include/epanet2.h | 3 ++- src/epanet.c | 17 +++++++++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/include/epanet2.bas b/include/epanet2.bas index 615f045..585d556 100644 --- a/include/epanet2.bas +++ b/include/epanet2.bas @@ -56,6 +56,7 @@ Public Const EN_EFFICIENCY = 16 Public Const EN_HEADCURVE = 17 Public Const EN_EFFICIENCYCURVE = 18 Public Const EN_PRICEPATTERN = 19 +Public Const EN_STATE = 20 Public Const EN_DURATION = 0 ' Time parameters Public Const EN_HYDSTEP = 1 diff --git a/include/epanet2.h b/include/epanet2.h index 0470d9e..3b26116 100644 --- a/include/epanet2.h +++ b/include/epanet2.h @@ -115,7 +115,8 @@ typedef enum { EN_EFFICIENCY = 16, EN_HEADCURVE = 17, EN_EFFICIENCYCURVE = 18, - EN_PRICEPATTERN = 19 + EN_PRICEPATTERN = 19, + EN_STATE = 20 } EN_LinkProperty; /// Time parameter codes diff --git a/src/epanet.c b/src/epanet.c index 72f59d8..0fe9b72 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -1994,6 +1994,7 @@ int DLLEXPORT EN_getlinknodes(EN_Project *p, int index, int *node1, int DLLEXPORT EN_getlinkvalue(EN_Project *p, int index, EN_LinkProperty code, EN_API_FLOAT_TYPE *value) { double a, h, q, v = 0.0; int returnValue = 0; + int pmp; EN_Network *net = &p->network; hydraulics_t *hyd = &p->hydraulics; @@ -2007,8 +2008,6 @@ int DLLEXPORT EN_getlinkvalue(EN_Project *p, int index, EN_LinkProperty code, EN double *LinkFlows = hyd->LinkFlows; double *LinkSetting = hyd->LinkSetting; - - /* Check for valid arguments */ *value = 0.0; if (!p->Openflag) @@ -2124,6 +2123,20 @@ int DLLEXPORT EN_getlinkvalue(EN_Project *p, int index, EN_LinkProperty code, EN else v = 1.0; break; + + case EN_STATE: + v = hyd->LinkStatus[index]; + + if (Link[index].Type == EN_PUMP) { + pmp = findpump(net, index); + if (hyd->LinkStatus[index] >= OPEN) { + if (hyd->LinkFlows[index] > hyd->LinkSetting[index] * Pump[pmp].Qmax) + v = XFLOW; + if (hyd->LinkFlows[index] < 0.0) + v = XHEAD; + } + } + break; case EN_SETTING: if (Link[index].Type == EN_PIPE || Link[index].Type == EN_CVPIPE) { From 634651d4e6c79e3ebd556f29447a6235a304a8a4 Mon Sep 17 00:00:00 2001 From: Elad Salomons Date: Sat, 18 Aug 2018 21:54:52 +0300 Subject: [PATCH 2/2] Add option to get pump's constant power and speed Details in #215 --- include/epanet2.bas | 2 ++ include/epanet2.h | 4 +++- src/epanet.c | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/epanet2.bas b/include/epanet2.bas index 585d556..497ca1c 100644 --- a/include/epanet2.bas +++ b/include/epanet2.bas @@ -57,6 +57,8 @@ Public Const EN_HEADCURVE = 17 Public Const EN_EFFICIENCYCURVE = 18 Public Const EN_PRICEPATTERN = 19 Public Const EN_STATE = 20 +Public Const EN_CONST_POWER = 21 +Public Const EN_SPEED = 22 Public Const EN_DURATION = 0 ' Time parameters Public Const EN_HYDSTEP = 1 diff --git a/include/epanet2.h b/include/epanet2.h index 3b26116..feb8a37 100644 --- a/include/epanet2.h +++ b/include/epanet2.h @@ -116,7 +116,9 @@ typedef enum { EN_HEADCURVE = 17, EN_EFFICIENCYCURVE = 18, EN_PRICEPATTERN = 19, - EN_STATE = 20 + EN_STATE = 20, + EN_CONST_POWER = 21, + EN_SPEED = 22 } EN_LinkProperty; /// Time parameter codes diff --git a/src/epanet.c b/src/epanet.c index 0fe9b72..aec91b9 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -2137,6 +2137,24 @@ int DLLEXPORT EN_getlinkvalue(EN_Project *p, int index, EN_LinkProperty code, EN } } break; + + case EN_CONST_POWER: + v = 0; + if (Link[index].Type == EN_PUMP) { + pmp = findpump(net, index); + if (Pump[pmp].Ptype == CONST_HP) { + v = Link[index].Km; // Power in HP + } + } + break; + + case EN_SPEED: + v = 0; + if (Link[index].Type == EN_PUMP) { + pmp = findpump(net, index); + v = Link[index].Kc; + } + break; case EN_SETTING: if (Link[index].Type == EN_PIPE || Link[index].Type == EN_CVPIPE) {