Merge remote-tracking branch 'upstream/dev' into dev

This commit is contained in:
Michael Tryby
2019-03-07 15:52:43 -05:00
11 changed files with 98 additions and 92 deletions

View File

@@ -5,7 +5,7 @@ Attribute VB_Name = "Module1"
'Declarations of functions in the EPANET PROGRAMMERs TOOLKIT
'(EPANET2.DLL)
'Last updated on 02/08/2019
'Last updated on 02/28/2019
' These are codes used by the DLL functions
Public Const EN_ELEVATION = 0 ' Node parameters
@@ -284,8 +284,8 @@ Public Const EN_R_IS_ACTIVE = 3
Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal index As Long, ByVal property As Long, ByVal value As Single) As Long
Declare Function ENsetjuncdata Lib "epanet2.dll" (ByVal index As Long, ByVal elev As Single, ByVal dmnd As Single, ByVal dmndpat As String) As Long
Declare Function ENsettankdata Lib "epanet2.dll" (ByVal index As Long, ByVal elev As Single, ByVal initlvl As Single, ByVal minlvl As Single, ByVal maxlvl As Single, ByVal diam As Single, ByVal minvol As Single, ByVal volcurve As String) As Long
Declare Function ENgetcoord Lib "epanet2.dll" (ByVal index As Long, x As Single, y As Single) As Long
Declare Function ENsetcoord Lib "epanet2.dll" (ByVal index As Long, ByVal x As Single, ByVal y As Single) As Long
Declare Function ENgetcoord Lib "epanet2.dll" (ByVal index As Long, x As Double, y As Double) As Long
Declare Function ENsetcoord Lib "epanet2.dll" (ByVal index As Long, ByVal x As Double, ByVal y As Double) As Long
'Nodal Demand Functions
Declare Function ENgetdemandmodel Lib "epanet2.dll" (type_ As Long, pmin As Single, preq As Single, pexp As Single) As Long

View File

@@ -81,7 +81,7 @@ EXPORTS
ENsaveinpfile = _ENsaveinpfile@4
ENsetbasedemand = _ENsetbasedemand@12
ENsetcontrol = _ENsetcontrol@24
ENsetcoord = _ENsetcoord@12
ENsetcoord = _ENsetcoord@20
ENsetcurve = _ENsetcurve@16
ENsetcurveid = _ENsetcurveid@8
ENsetcurvevalue = _ENsetcurvevalue@16

View File

@@ -7,7 +7,7 @@
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 02/08/2019
Last Updated: 02/28/2019
******************************************************************************
*/
@@ -210,9 +210,9 @@ extern "C" {
EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam,
EN_API_FLOAT_TYPE minvol, char *volcurve);
int DLLEXPORT ENgetcoord(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y);
int DLLEXPORT ENgetcoord(int index, double *x, double *y);
int DLLEXPORT ENsetcoord(int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
int DLLEXPORT ENsetcoord(int index, double x, double y);
/********************************************************************
@@ -406,7 +406,6 @@ extern "C" {
int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority);
#if defined(__cplusplus)
}
#endif

View File

@@ -4,7 +4,7 @@
'Declarations of functions in the EPANET PROGRAMMERs TOOLKIT
'(EPANET2.DLL) for use with VB.Net.
'Last updated on 02/08/2019
'Last updated on 02/28/2019
Imports System.Runtime.InteropServices
Imports System.Text
@@ -289,8 +289,8 @@ Public Const EN_R_IS_ACTIVE = 3
Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal index As Int32, ByVal property As Int32, ByVal value As Single) As Int32
Declare Function ENsetjuncdata Lib "epanet2.dll" (ByVal index As Int32, ByVal elev As Single, ByVal dmnd As Single, ByVal dmndpat As String) As Int32
Declare Function ENsettankdata Lib "epanet2.dll" (ByVal index As Int32, ByVal elev As Single, ByVal initlvl As Single, ByVal minlvl As Single, ByVal maxlvl As Single, ByVal diam As Single, ByVal minvol As Single, ByVal volcurve As String) As Int32
Declare Function ENgetcoord Lib "epanet2.dll" (ByVal index As Int32, x As Single, y As Single) As Int32
Declare Function ENsetcoord Lib "epanet2.dll" (ByVal index As Int32, ByVal x As Single, ByVal y As Single) As Int32
Declare Function ENgetcoord Lib "epanet2.dll" (ByVal index As Int32, x As Double, y As Double) As Int32
Declare Function ENsetcoord Lib "epanet2.dll" (ByVal index As Int32, ByVal x As Double, ByVal y As Double) As Int32
'Nodal Demand Functions
Declare Function ENgetdemandmodel Lib "epanet2.dll" (type_ As Int32, pmin As Single, preq As Single, pexp As Single) As Int32

View File

@@ -7,7 +7,7 @@
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 02/08/2019
Last Updated: 03/05/2019
******************************************************************************
*/
@@ -332,24 +332,12 @@ int DLLEXPORT EN_close(EN_Project p)
**----------------------------------------------------------------
*/
{
Outfile *out;
// Free all project data
if (p->Openflag) writetime(p, FMT105);
freedata(p);
// Close output file
out = &p->outfile;
if (out->TmpOutFile != out->OutFile)
{
if (out->TmpOutFile != NULL) fclose(out->TmpOutFile);
out->TmpOutFile = NULL;
}
if (out->OutFile != NULL)
{
fclose(out->OutFile);
out->OutFile = NULL;
}
closeoutfile(p);
// Close input file
if (p->parser.InFile != NULL)
@@ -366,10 +354,10 @@ int DLLEXPORT EN_close(EN_Project p)
}
// Close hydraulics file
if (out->HydFile != NULL)
if (p->outfile.HydFile != NULL)
{
fclose(out->HydFile);
out->HydFile = NULL;
fclose(p->outfile.HydFile);
p->outfile.HydFile = NULL;
}
// Reset system flags
@@ -819,6 +807,7 @@ int DLLEXPORT EN_closeQ(EN_Project p)
if (!p->Openflag) return 102;
closequal(p);
p->quality.OpenQflag = FALSE;
closeoutfile(p);
return 0;
}
@@ -1571,6 +1560,7 @@ int DLLEXPORT EN_setqualtype(EN_Project p, int qualType, char *chemName,
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;
qual->Ctol *= Ucf[QUALITY];

View File

@@ -340,16 +340,12 @@ int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev,
diam, minvol, volcurve);
}
int DLLEXPORT ENgetcoord(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y)
int DLLEXPORT ENgetcoord(int index, double *x, double *y)
{
double xx = 0.0, yy = 0.0;
int errcode = EN_getcoord(_defaultProject, index, &xx, &yy);
*x = (EN_API_FLOAT_TYPE)xx;
*y = (EN_API_FLOAT_TYPE)yy;
return errcode;
return EN_getcoord(_defaultProject, index, x, y);
}
int DLLEXPORT ENsetcoord(int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y)
int DLLEXPORT ENsetcoord(int index, double x, double y)
{
return EN_setcoord(_defaultProject, index, x, y);
}

View File

@@ -24,6 +24,7 @@ void freedata(Project *);
int openfiles(Project *, const char *, const char *,const char *);
int openhydfile(Project *);
int openoutfile(Project *);
void closeoutfile(Project *);
int buildadjlists(Network *);
void freeadjlists(Network *);

View File

@@ -7,7 +7,7 @@
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 01/01/2019
Last Updated: 03/05/2019
******************************************************************************
*/
@@ -43,13 +43,18 @@ int openfiles(Project *pr, const char *f1, const char *f2, const char *f3)
pr->report.RptFile = NULL;
pr->outfile.OutFile = NULL;
pr->outfile.HydFile = NULL;
pr->outfile.TmpOutFile = NULL;
// Save file names
strncpy(pr->parser.InpFname, f1, MAXFNAME);
strncpy(pr->report.Rpt1Fname, f2, MAXFNAME);
strncpy(pr->outfile.OutFname, f3, MAXFNAME);
if (strlen(f3) > 0) pr->outfile.Outflag = SAVE;
else pr->outfile.Outflag = SCRATCH;
else
{
pr->outfile.Outflag = SCRATCH;
strcpy(pr->outfile.OutFname, pr->TmpOutFname);
}
// Check that file names are not identical
if (strlen(f1) > 0 && (strcomp(f1, f2) || strcomp(f1, f3))) return 301;
@@ -95,6 +100,7 @@ int openhydfile(Project *pr)
{
if (pr->outfile.Hydflag == SCRATCH) return 0;
fclose(pr->outfile.HydFile);
pr->outfile.HydFile = NULL;
}
// Use Hydflag to determine the type of hydraulics file to use.
@@ -167,30 +173,12 @@ int openoutfile(Project *pr)
int errcode = 0;
// Close output file if already opened
if (pr->outfile.OutFile != NULL)
{
fclose(pr->outfile.OutFile);
pr->outfile.OutFile = NULL;
}
if (pr->outfile.TmpOutFile != NULL)
{
fclose(pr->outfile.TmpOutFile);
pr->outfile.TmpOutFile = NULL;
}
closeoutfile(pr);
// If output file name was supplied, then attempt to
// open it. Otherwise open a temporary output file.
if (pr->outfile.Outflag == SAVE)
{
pr->outfile.OutFile = fopen(pr->outfile.OutFname, "w+b");
if (pr->outfile.OutFile == NULL) errcode = 304;
}
else
{
strcpy(pr->outfile.OutFname, pr->TmpOutFname);
pr->outfile.OutFile = fopen(pr->outfile.OutFname, "w+b");
if (pr->outfile.OutFile == NULL) errcode = 304;
}
pr->outfile.OutFile = fopen(pr->outfile.OutFname, "w+b");
if (pr->outfile.OutFile == NULL) errcode = 304;
// Save basic network data & energy usage results
ERRCODE(savenetdata(pr));
@@ -211,6 +199,33 @@ int openoutfile(Project *pr)
return errcode;
}
void closeoutfile(Project *pr)
/*----------------------------------------------------------------
** Input: none
** Output: none
** Purpose: closes binary output file.
**----------------------------------------------------------------
*/
{
if (pr->outfile.TmpOutFile != pr->outfile.OutFile)
{
if (pr->outfile.TmpOutFile != NULL)
{
fclose(pr->outfile.TmpOutFile);
pr->outfile.TmpOutFile = NULL;
}
}
if (pr->outfile.OutFile != NULL)
{
if (pr->outfile.OutFile == pr->outfile.TmpOutFile)
{
pr->outfile.TmpOutFile = NULL;
}
fclose(pr->outfile.OutFile);
pr->outfile.OutFile = NULL;
}
}
void initpointers(Project *pr)
/*----------------------------------------------------------------
** Input: none

View File

@@ -27,14 +27,7 @@ Last Updated: 11/27/2018
// Stagnant flow tolerance
const double Q_STAGNANT = 0.005 / GPMperCFS; // 0.005 gpm = 1.114e-5 cfs
// Exported functions (declared in FUNCS.H)
//int openqual(Project *);
//void initqual(Project *);
//int runqual(Project *, long *);
//int nextqual(Project *, long *);
//int stepqual(Project *, long *);
//int closequal(Project *);
//double avgqual(Project *, int);
// Exported functions
double findsourcequal(Project *, int, double, long);
// Imported functions
@@ -68,6 +61,9 @@ int openqual(Project *pr)
int errcode = 0;
int n;
// Return if no quality analysis requested
if (qual->Qualflag == NONE) return errcode;
// Build nodal adjacency lists if they don't already exist
if (net->Adjlist == NULL)
{
@@ -401,12 +397,15 @@ int closequal(Project *pr)
Quality *qual = &pr->quality;
int errcode = 0;
if (qual->SegPool) mempool_delete(qual->SegPool);
FREE(qual->FirstSeg);
FREE(qual->LastSeg);
FREE(qual->PipeRateCoeff);
FREE(qual->FlowDir);
FREE(qual->SortedNodes);
if (qual->Qualflag != NONE)
{
if (qual->SegPool) mempool_delete(qual->SegPool);
FREE(qual->FirstSeg);
FREE(qual->LastSeg);
FREE(qual->PipeRateCoeff);
FREE(qual->FlowDir);
FREE(qual->SortedNodes);
}
return errcode;
}

View File

@@ -7,7 +7,7 @@
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 11/27/2018
Last Updated: 03/05/2019
******************************************************************************
*/
@@ -98,12 +98,7 @@ int copyreport(Project* pr, char *filename)
// Copy contents of project's report file
if (rpt->RptFile)
{
c = fgetc(rpt->RptFile);
while (c != EOF)
{
fputc(c, tfile);
c = fgetc(rpt->RptFile);
}
while ((c = fgetc(rpt->RptFile)) != EOF) fputc(c, tfile);
fclose(rpt->RptFile);
}
@@ -539,9 +534,6 @@ int writeresults(Project *pr)
// at each reporting time.
//-----------------------------------------------------------
// Return if no output file
if (outFile == NULL) return 106;
// Return if no nodes or links selected for reporting
// or if no node or link report variables enabled
if (!rpt->Nodeflag && !rpt->Linkflag) return errcode;
@@ -552,6 +544,10 @@ int writeresults(Project *pr)
for (j = LENGTH; j <= FRICTION; j++) nlv += rpt->Field[j].Enabled;
if (nnv == 0 && nlv == 0) return errcode;
// Return if no output file
if (outFile == NULL) outFile = fopen(pr->outfile.OutFname, "rb");
if (outFile == NULL) return 106;
// Allocate memory for output variables:
// m = larger of # node variables & # link variables
// n = larger of # nodes & # links
@@ -592,6 +588,13 @@ int writeresults(Project *pr)
}
}
// Free output file
if (outFile != NULL)
{
fclose(outFile);
outFile = NULL;
}
// Free allocated memory
for (j = 0; j < m; j++) free(x[j]);
free(x);

View File

@@ -11,9 +11,12 @@ EXPORTS
ENclose = _ENclose@0
ENcloseH = _ENcloseH@0
ENcloseQ = _ENcloseQ@0
ENcopyreport = _ENcopyreport@4
ENdeletecontrol = _ENdeletecontrol@4
ENdeletecurve = _ENdeletecurve@4
ENdeletelink = _ENdeletelink@8
ENdeletenode = _ENdeletenode@8
ENdeletepattern = _ENdeletepattern@4
ENdeleterule = _ENdeleterule@4
ENepanet = _ENepanet@16
ENgetaveragepatternvalue = _ENgetaveragepatternvalue@8
@@ -78,8 +81,9 @@ EXPORTS
ENsaveinpfile = _ENsaveinpfile@4
ENsetbasedemand = _ENsetbasedemand@12
ENsetcontrol = _ENsetcontrol@24
ENsetcoord = _ENsetcoord@12
ENsetcoord = _ENsetcoord@20
ENsetcurve = _ENsetcurve@16
ENsetcurveid = _ENsetcurveid@8
ENsetcurvevalue = _ENsetcurvevalue@16
ENsetdemandmodel = _ENsetdemandmodel@16
ENsetdemandname = _ENsetdemandname@12
@@ -96,6 +100,7 @@ EXPORTS
ENsetnodevalue = _ENsetnodevalue@12
ENsetoption = _ENsetoption@8
ENsetpattern = _ENsetpattern@12
ENsetpatternid = _ENsetpatternid@8
ENsetpatternvalue = _ENsetpatternvalue@12
ENsetpipedata = _ENsetpipedata@20
ENsetpremise = _ENsetpremise@36
@@ -115,5 +120,3 @@ EXPORTS
ENstepQ = _ENstepQ@4
ENusehydfile = _ENusehydfile@4
ENwriteline = _ENwriteline@4
ENgettitle = _ENgettitle@12
ENsettitle = _ENsettitle@12