/*
|
******************************************************************************
|
Project: OWA HYDRAULIC
|
Version: 2.2
|
Module: epanet2.c
|
Description: implementation of the legacy HYDRAULIC API functions
|
Authors: see AUTHORS
|
Copyright: see AUTHORS
|
License: see LICENSE
|
Last Updated: 11/02/2019
|
******************************************************************************
|
*/
|
|
#include <stdlib.h>
|
#include <string.h>
|
|
#include "types.h"
|
#include "funcs.h"
|
|
#include "epanet2.h"
|
#include "epanet2_2.h"
|
|
|
|
// This single global variable is used only when the library is called
|
// in "legacy mode" with the 2.1-style API.
|
Project __defaultProject;
|
Project *_defaultProject = &__defaultProject;
|
Project *projects[32];
|
// Functions for creating and removing default temporary files
|
void createtmpfiles()
|
{
|
|
getTmpName(_defaultProject->TmpHydFname);
|
getTmpName(_defaultProject->TmpOutFname);
|
getTmpName(_defaultProject->TmpStatFname);
|
}
|
|
void removetmpfiles()
|
{
|
remove(_defaultProject->TmpHydFname);
|
remove(_defaultProject->TmpOutFname);
|
remove(_defaultProject->TmpStatFname);
|
}
|
|
|
|
|
void createtmpfiles(int projectID)
|
{
|
projects[projectID] =new Project();
|
projects[projectID]->isReport = 1;
|
getTmpName(projects[projectID]->TmpHydFname);
|
getTmpName(projects[projectID]->TmpOutFname);
|
getTmpName(projects[projectID]->TmpStatFname);
|
|
}
|
|
void removetmpfiles(int projectID)
|
{
|
remove(projects[projectID]->TmpHydFname);
|
remove(projects[projectID]->TmpOutFname);
|
remove(projects[projectID]->TmpStatFname);
|
}
|
|
|
|
|
|
int DLLEXPORT ENepanet(const char *inpFile, const char *rptFile,
|
const char *outFile, void (*pviewprog)(char *))
|
{
|
/*------------------------------------------------------------------------
|
** Input: inpFile = name of HYDRAULIC formatted input file
|
** rptFile = name of report file
|
** outFile = name of binary output file
|
** pviewprog = see note below
|
** Output: none
|
** Returns: error code
|
** Purpose: runs a complete HYDRAULIC simulation
|
**
|
** The pviewprog() argument is a pointer to a callback function
|
** that takes a character string (char *) as its only parameter.
|
** The function would reside in and be used by the calling
|
** program to display the progress messages that HYDRAULIC generates
|
** as it carries out its computations. If this feature is not
|
** needed then the argument should be NULL.
|
**-------------------------------------------------------------------------
|
*/
|
int errcode = 0;
|
int warncode = 0;
|
|
// Run the project and record any warning
|
createtmpfiles();
|
errcode = EN_runproject(_defaultProject, inpFile, rptFile, outFile, pviewprog);
|
if (errcode < 100) warncode = errcode;
|
removetmpfiles();
|
|
// Return the warning code if the run had no errors
|
if (warncode) errcode = MAX(errcode, warncode);
|
return errcode;
|
}
|
|
int DLLEXPORT ENinit(const char *rptFile, const char *outFile, int unitsType,
|
int headlossType)
|
{
|
int errcode = 0;
|
createtmpfiles();
|
errcode = EN_init(_defaultProject, rptFile, outFile, unitsType, headlossType);
|
return errcode;
|
}
|
|
|
int DLLEXPORT ENopen(const char *inpFile, const char *rptFile, const char *outFile)
|
{
|
int errcode = 0;
|
createtmpfiles();
|
errcode = EN_open(_defaultProject, inpFile, rptFile, outFile);
|
return errcode;
|
}
|
|
int DLLEXPORT ENgettitle(char *line1, char *line2, char *line3)
|
{
|
return EN_gettitle(_defaultProject, line1, line2, line3) ;
|
}
|
|
int DLLEXPORT ENsettitle(char *line1, char *line2, char *line3)
|
{
|
return EN_settitle(_defaultProject, line1, line2, line3) ;
|
}
|
|
|
int DLLEXPORT ENsetprojectreport(int report)
|
{
|
return EN_setprojectreport(_defaultProject, report);
|
|
}
|
|
int DLLEXPORT ENgetcomment(int object, int index, char *comment)
|
{
|
return EN_getcomment(_defaultProject, object, index, comment);
|
}
|
|
int DLLEXPORT ENsetcomment(int object, int index, char *comment)
|
{
|
return EN_setcomment(_defaultProject, object, index, comment);
|
}
|
|
int DLLEXPORT ENgetcount(int object, int *count)
|
{
|
return EN_getcount(_defaultProject, object, count);
|
}
|
|
int DLLEXPORT ENsaveinpfile(const char *filename)
|
{
|
return EN_saveinpfile(_defaultProject, filename);
|
}
|
|
int DLLEXPORT ENclose()
|
{
|
EN_close(_defaultProject);
|
removetmpfiles();
|
return 0;
|
}
|
|
/********************************************************************
|
|
Hydraulic Analysis Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENsolveH() { return EN_solveH(_defaultProject); }
|
|
int DLLEXPORT ENsaveH() { return EN_saveH(_defaultProject); }
|
|
int DLLEXPORT ENopenH() { return EN_openH(_defaultProject); }
|
|
int DLLEXPORT ENinitH(int initFlag) { return EN_initH(_defaultProject, initFlag); }
|
|
int DLLEXPORT ENrunH(long *currentTime) { return EN_runH(_defaultProject, currentTime); }
|
|
int DLLEXPORT ENnextH(long *tStep) { return EN_nextH(_defaultProject, tStep); }
|
|
int DLLEXPORT ENcloseH() { return EN_closeH(_defaultProject); }
|
|
int DLLEXPORT ENsavehydfile(char *filename)
|
{
|
return EN_savehydfile(_defaultProject, filename);
|
}
|
|
int DLLEXPORT ENusehydfile(char *filename)
|
{
|
return EN_usehydfile(_defaultProject, filename);
|
}
|
|
/********************************************************************
|
|
Water Quality Analysis Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENsolveQ() { return EN_solveQ(_defaultProject); }
|
|
int DLLEXPORT ENopenQ() { return EN_openQ(_defaultProject); }
|
|
int DLLEXPORT ENinitQ(int saveFlag) { return EN_initQ(_defaultProject, saveFlag); }
|
|
int DLLEXPORT ENrunQ(long *currentTime) { return EN_runQ(_defaultProject, currentTime); }
|
|
int DLLEXPORT ENnextQ(long *tStep) { return EN_nextQ(_defaultProject, tStep); }
|
|
int DLLEXPORT ENstepQ(long *timeLeft) { return EN_stepQ(_defaultProject, timeLeft); }
|
|
int DLLEXPORT ENcloseQ() { return EN_closeQ(_defaultProject); }
|
|
/********************************************************************
|
|
Reporting Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENwriteline(char *line) { return EN_writeline(_defaultProject, line); }
|
|
int DLLEXPORT ENreport() { return EN_report(_defaultProject); }
|
|
int DLLEXPORT ENcopyreport(char *filename)
|
{
|
return EN_copyreport(_defaultProject, filename);
|
}
|
|
int DLLEXPORT ENclearreport() { return EN_clearreport(_defaultProject); }
|
|
int DLLEXPORT ENresetreport() { return EN_resetreport(_defaultProject); }
|
|
int DLLEXPORT ENsetreport(char *format) { return EN_setreport(_defaultProject, format); }
|
|
int DLLEXPORT ENsetstatusreport(int level)
|
{
|
return EN_setstatusreport(_defaultProject, level);
|
}
|
|
int DLLEXPORT ENgetversion(int *version) { return EN_getversion(version); }
|
|
int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen)
|
{
|
return EN_geterror(errcode, errmsg, maxLen);
|
}
|
|
int DLLEXPORT ENgetstatistic(int type, EN_API_FLOAT_TYPE *value)
|
{
|
double v = 0.0;
|
int errcode = EN_getstatistic(_defaultProject, type, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENgetresultindex(int type, int index, int *value)
|
{
|
return EN_getresultindex(_defaultProject, type, index, value);
|
}
|
|
|
/********************************************************************
|
|
Analysis Options Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENgetoption(int option, EN_API_FLOAT_TYPE *value)
|
{
|
double v = 0.0;
|
int errcode = EN_getoption(_defaultProject, option, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetoption(int option, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setoption(_defaultProject, option, value);
|
}
|
|
int DLLEXPORT ENgetflowunits(int *units)
|
{
|
return EN_getflowunits(_defaultProject, units);
|
}
|
|
int DLLEXPORT ENsetflowunits(int units)
|
{
|
return EN_setflowunits(_defaultProject, units);
|
}
|
|
int DLLEXPORT ENgettimeparam(int param, long *value)
|
{
|
return EN_gettimeparam(_defaultProject, param, value);
|
}
|
|
int DLLEXPORT ENsettimeparam(int param, long value)
|
{
|
return EN_settimeparam(_defaultProject, param, value);
|
}
|
|
int DLLEXPORT ENgetqualinfo(int *qualType, char *chemName, char *chemUnits,
|
int *traceNode)
|
{
|
return EN_getqualinfo(_defaultProject, qualType, chemName, chemUnits, traceNode);
|
}
|
|
int DLLEXPORT ENgetqualtype(int *qualType, int *traceNode)
|
{
|
return EN_getqualtype(_defaultProject, qualType, traceNode);
|
}
|
|
int DLLEXPORT ENsetqualtype(int qualType, char *chemName, char *chemUnits,
|
char *traceNode)
|
{
|
return EN_setqualtype(_defaultProject, qualType, chemName, chemUnits, traceNode);
|
}
|
|
/********************************************************************
|
|
Node Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddnode(char *id, int nodeType, int *index)
|
{
|
return EN_addnode(_defaultProject, id, nodeType, index);
|
}
|
|
int DLLEXPORT ENdeletenode(int index, int actionCode)
|
{
|
return EN_deletenode(_defaultProject, index, actionCode);
|
}
|
|
int DLLEXPORT ENgetnodeindex(char *id, int *index)
|
{
|
return EN_getnodeindex(_defaultProject, id, index);
|
}
|
|
int DLLEXPORT ENgetnodeid(int index, char *id)
|
{
|
return EN_getnodeid(_defaultProject, index, id);
|
}
|
int DLLEXPORT ENgetnodecomment(int index, char* id)
|
{
|
return EN_getnodecomment(_defaultProject, index, id);
|
}
|
int DLLEXPORT ENsetnodeid(int index, char *newid)
|
{
|
return EN_setnodeid(_defaultProject, index, newid);
|
}
|
|
int DLLEXPORT ENgetnodetype(int index, int *nodeType)
|
{
|
return EN_getnodetype(_defaultProject, index, nodeType);
|
}
|
|
int DLLEXPORT ENgetnodevalue(int index, int property, EN_API_FLOAT_TYPE *value)
|
{
|
double v = 0.0;
|
int errcode = EN_getnodevalue(_defaultProject, index, property, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setnodevalue(_defaultProject, index, property, value);
|
}
|
|
int DLLEXPORT ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev, EN_API_FLOAT_TYPE dmnd,
|
char *dmndpat)
|
{
|
return EN_setjuncdata(_defaultProject, index, elev, dmnd, dmndpat);
|
}
|
|
int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev,
|
EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl,
|
EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam,
|
EN_API_FLOAT_TYPE minvol, char *volcurve)
|
{
|
return EN_settankdata(_defaultProject, index, elev, initlvl, minlvl, maxlvl,
|
diam, minvol, volcurve);
|
}
|
|
int DLLEXPORT ENgetcoord(int index, double *x, double *y)
|
{
|
return EN_getcoord(_defaultProject, index, x, y);
|
}
|
|
int DLLEXPORT ENsetcoord(int index, double x, double y)
|
{
|
return EN_setcoord(_defaultProject, index, x, y);
|
}
|
|
|
|
|
|
/********************************************************************
|
|
Nodal Demand Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin,
|
EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp)
|
{
|
double pmin2 = 0.0, preq2 = 0.0, pexp2 = 0.0;
|
int errcode = EN_getdemandmodel(_defaultProject, model, &pmin2, &preq2, &pexp2);
|
*pmin = (EN_API_FLOAT_TYPE)pmin2;
|
*preq = (EN_API_FLOAT_TYPE)preq2;
|
*pexp = (EN_API_FLOAT_TYPE)pexp2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin,
|
EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp)
|
{
|
return EN_setdemandmodel(_defaultProject, model, pmin, preq, pexp);
|
}
|
|
int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand,
|
char *demandPattern, char *demandName)
|
{
|
return EN_adddemand(_defaultProject, nodeIndex, baseDemand, demandPattern, demandName);
|
}
|
|
int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex)
|
{
|
return EN_deletedemand(_defaultProject, nodeIndex, demandIndex);
|
}
|
|
int DLLEXPORT ENgetdemandindex(int nodeIndex, char *demandName, int *demandIndex)
|
{
|
return EN_getdemandindex(_defaultProject, nodeIndex, demandName, demandIndex);
|
}
|
|
int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands)
|
{
|
return EN_getnumdemands(_defaultProject, nodeIndex, numDemands);
|
}
|
|
int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex,
|
EN_API_FLOAT_TYPE *baseDemand)
|
{
|
double bd2 = 0.0;
|
int errcode = EN_getbasedemand(_defaultProject, nodeIndex, demandIndex, &bd2);
|
*baseDemand = (EN_API_FLOAT_TYPE)bd2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex,
|
EN_API_FLOAT_TYPE baseDemand)
|
{
|
return EN_setbasedemand(_defaultProject, nodeIndex, demandIndex, baseDemand);
|
}
|
|
int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex)
|
{
|
return EN_setdemandpattern(_defaultProject, nodeIndex, demandIndex, patIndex);
|
}
|
|
int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *pattIdx)
|
{
|
return EN_getdemandpattern(_defaultProject, nodeIndex, demandIndex, pattIdx);
|
}
|
|
int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName)
|
{
|
return EN_getdemandname(_defaultProject, nodeIndex, demandIndex, demandName);
|
}
|
|
int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, char *demandName)
|
{
|
return EN_setdemandname(_defaultProject, nodeIndex, demandIndex, demandName);
|
}
|
|
|
int DLLEXPORT ENgetTotalDemand(int nodeIndex, int demandIndex, double *demandName)
|
{
|
return EN_getTotalDemand(_defaultProject, nodeIndex, demandName);
|
}
|
|
|
/********************************************************************
|
|
Link Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddlink(char *id, int linkType, char *fromNode, char *toNode, int *index)
|
{
|
return EN_addlink(_defaultProject, id, linkType, fromNode, toNode, index);
|
}
|
|
int DLLEXPORT ENdeletelink(int index, int actionCode)
|
{
|
return EN_deletelink(_defaultProject, index, actionCode);
|
}
|
|
int DLLEXPORT ENgetlinkindex(char *id, int *index)
|
{
|
return EN_getlinkindex(_defaultProject, id, index);
|
}
|
|
int DLLEXPORT ENgetlinkid(int index, char *id)
|
{
|
return EN_getlinkid(_defaultProject, index, id);
|
}
|
int DLLEXPORT ENgetlinkcomment(int index, char* id)
|
{
|
return EN_getlinkcomment(_defaultProject, index, id);
|
}
|
int DLLEXPORT ENsetlinkid(int index, char *newid)
|
{
|
return EN_setlinkid(_defaultProject, index, newid);
|
}
|
|
int DLLEXPORT ENgetlinktype(int index, int *linkType)
|
{
|
return EN_getlinktype(_defaultProject, index, linkType);
|
}
|
|
int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode)
|
{
|
return EN_setlinktype(_defaultProject, index, linkType, actionCode);
|
}
|
|
int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2)
|
{
|
return EN_getlinknodes(_defaultProject, index, node1, node2);
|
}
|
|
int DLLEXPORT ENsetlinknodes(int index, int node1, int node2)
|
{
|
return EN_setlinknodes(_defaultProject, index, node1, node2);
|
}
|
|
int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value)
|
{
|
double v = 0.0;
|
int errcode = EN_getlinkvalue(_defaultProject, index, property, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setlinkvalue(_defaultProject, index, property, value);
|
}
|
|
int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length,
|
EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough, EN_API_FLOAT_TYPE mloss)
|
{
|
return EN_setpipedata(_defaultProject, index, length, diam, rough, mloss);
|
}
|
|
int DLLEXPORT ENgetvertexcount(int index, int *count)
|
{
|
return EN_getvertexcount(_defaultProject, index, count);
|
}
|
|
int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y)
|
{
|
return EN_getvertex(_defaultProject, index, vertex, x, y);
|
}
|
|
int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count)
|
{
|
return EN_setvertices(_defaultProject, index, x, y, count);
|
}
|
|
/********************************************************************
|
|
Pump Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType)
|
{
|
return EN_getpumptype(_defaultProject, linkIndex, pumpType);
|
}
|
|
int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex)
|
{
|
return EN_getheadcurveindex(_defaultProject, linkIndex, curveIndex);
|
}
|
|
int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex)
|
{
|
return EN_setheadcurveindex(_defaultProject, linkIndex, curveIndex);
|
}
|
|
/********************************************************************
|
|
Time Pattern Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddpattern(char *id)
|
{
|
return EN_addpattern(_defaultProject, id);
|
}
|
|
int DLLEXPORT ENdeletepattern(int index)
|
{
|
return EN_deletepattern(_defaultProject, index);
|
}
|
|
int DLLEXPORT ENgetpatternindex(char *id, int *index)
|
{
|
return EN_getpatternindex(_defaultProject, id, index);
|
}
|
|
int DLLEXPORT ENgetpatternid(int index, char *id)
|
{
|
return EN_getpatternid(_defaultProject, index, id);
|
}
|
|
int DLLEXPORT ENsetpatternid(int index, char *id)
|
{
|
return EN_setpatternid(_defaultProject, index, id);
|
}
|
|
int DLLEXPORT ENgetpatternlen(int index, int *len)
|
{
|
return EN_getpatternlen(_defaultProject, index, len);
|
}
|
|
int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value)
|
{
|
double v = 0.0;
|
int errcode = EN_getpatternvalue(_defaultProject, index, period, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setpatternvalue(_defaultProject, index, period, value);
|
}
|
|
int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value)
|
{
|
double v;
|
int errcode = EN_getaveragepatternvalue(_defaultProject, index, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len)
|
{
|
double *v = NULL;
|
int i, errcode;
|
if (values == NULL) return 206;
|
v = (double *)calloc(len, sizeof(double));
|
if (v)
|
{
|
for (i = 0; i < len; i++) v[i] = values[i];
|
errcode = EN_setpattern(_defaultProject, index, v, len);
|
}
|
else errcode = 101;
|
free(v);
|
return errcode;
|
}
|
|
/********************************************************************
|
|
Data Curve Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddcurve(char *id)
|
{
|
return EN_addcurve(_defaultProject, id);
|
}
|
|
int DLLEXPORT ENdeletecurve(int index)
|
{
|
return EN_deletecurve(_defaultProject, index);
|
}
|
|
int DLLEXPORT ENgetcurveindex(char *id, int *index)
|
{
|
return EN_getcurveindex(_defaultProject, id, index);
|
}
|
|
int DLLEXPORT ENgetcurveid(int index, char *id)
|
{
|
return EN_getcurveid(_defaultProject, index, id);
|
}
|
|
int DLLEXPORT ENsetcurveid(int index, char *id)
|
{
|
return EN_setcurveid(_defaultProject, index, id);
|
}
|
|
int DLLEXPORT ENgetcurvelen(int index, int *len)
|
{
|
return EN_getcurvelen(_defaultProject, index, len);
|
}
|
|
int DLLEXPORT ENgetcurvetype(int index, int *type)
|
{
|
return EN_getcurvetype(_defaultProject, index, type);
|
}
|
|
int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE *x,
|
EN_API_FLOAT_TYPE *y)
|
{
|
double xx = 0.0, yy = 0.0;
|
int errcode = EN_getcurvevalue(_defaultProject, curveIndex, pointIndex, &xx, &yy);
|
*x = (EN_API_FLOAT_TYPE)xx;
|
*y = (EN_API_FLOAT_TYPE)yy;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE x,
|
EN_API_FLOAT_TYPE y)
|
{
|
return EN_setcurvevalue(_defaultProject, curveIndex, pointIndex, x, y);
|
}
|
|
int DLLEXPORT ENgetcurve(int index, char *id, int *nPoints,
|
EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues)
|
{
|
int i;
|
Network *net = &_defaultProject->network;
|
Scurve *curve;
|
|
if (index <= 0 || index > net->Ncurves) return 206;
|
if (xValues == NULL || yValues == NULL) return 206;
|
curve = &net->Curve[index];
|
strncpy(id, curve->ID, MAXID);
|
*nPoints = curve->Npts;
|
for (i = 0; i < curve->Npts; i++)
|
{
|
xValues[i] = (EN_API_FLOAT_TYPE)curve->X[i];
|
yValues[i] = (EN_API_FLOAT_TYPE)curve->Y[i];
|
}
|
return 0;
|
}
|
|
int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues,
|
EN_API_FLOAT_TYPE *yValues, int nPoints)
|
{
|
double *xx = NULL;
|
double *yy = NULL;
|
int i, errcode = 0;
|
|
if (xValues == NULL || yValues == NULL) return 206;
|
if (nPoints < 1) return 202;
|
|
xx = (double *)calloc(nPoints, sizeof(double));
|
yy = (double *)calloc(nPoints, sizeof(double));
|
if (xx && yy)
|
{
|
for (i = 0; i < nPoints; i++)
|
{
|
xx[i] = xValues[i];
|
yy[i] = yValues[i];
|
}
|
errcode = EN_setcurve(_defaultProject, index, xx, yy, nPoints);
|
}
|
else errcode = 101;
|
free(xx);
|
free(yy);
|
return errcode;
|
}
|
|
/********************************************************************
|
|
Simple Controls Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting,
|
int nodeIndex, EN_API_FLOAT_TYPE level, int *index)
|
{
|
return EN_addcontrol(_defaultProject, type, linkIndex, setting, nodeIndex,
|
level, index);
|
}
|
|
int DLLEXPORT ENdeletecontrol(int index)
|
{
|
return EN_deletecontrol(_defaultProject, index);
|
}
|
|
int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex,
|
EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level)
|
{
|
double setting2 = 0.0, level2 = 0.0;
|
int errcode = EN_getcontrol(_defaultProject, index, type, linkIndex, &setting2,
|
nodeIndex, &level2);
|
*setting = (EN_API_FLOAT_TYPE)setting2;
|
*level = (EN_API_FLOAT_TYPE)level2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex,
|
EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level)
|
{
|
return EN_setcontrol(_defaultProject, index, type, linkIndex, setting,
|
nodeIndex, level);
|
}
|
|
/********************************************************************
|
|
Rule-Based Controls Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddrule(char *rule)
|
{
|
return EN_addrule(_defaultProject, rule);
|
}
|
|
int DLLEXPORT ENdeleterule(int index)
|
{
|
return EN_deleterule(_defaultProject, index);
|
}
|
|
int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions,
|
int *nElseActions, EN_API_FLOAT_TYPE *priority)
|
{
|
double priority2 = 0.0;
|
int errcode = EN_getrule(_defaultProject, index, nPremises, nThenActions,
|
nElseActions, &priority2);
|
*priority = (EN_API_FLOAT_TYPE)priority2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENgetruleID(int index, char* id)
|
{
|
return EN_getruleID(_defaultProject, index, id);
|
}
|
|
int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop, int *object,
|
int *objIndex, int *variable, int *relop, int *status,
|
EN_API_FLOAT_TYPE *value)
|
{
|
double v = 0.0;
|
int errcode = EN_getpremise(_defaultProject, ruleIndex, premiseIndex, logop,
|
object, objIndex, variable, relop, status, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop, int object,
|
int objIndex, int variable, int relop, int status, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setpremise(_defaultProject, ruleIndex, premiseIndex, logop, object,
|
objIndex, variable, relop, status, value);
|
}
|
|
int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex)
|
{
|
return EN_setpremiseindex(_defaultProject, ruleIndex, premiseIndex, objIndex);
|
}
|
|
int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status)
|
{
|
return EN_setpremisestatus(_defaultProject, ruleIndex, premiseIndex, status);
|
}
|
|
int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setpremisevalue(_defaultProject, ruleIndex, premiseIndex, value);
|
}
|
|
int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex,
|
int *status, EN_API_FLOAT_TYPE *setting)
|
{
|
double setting2 = 0.0;
|
int errcode = EN_getthenaction(_defaultProject, ruleIndex, actionIndex, linkIndex,
|
status, &setting2);
|
*setting = (EN_API_FLOAT_TYPE)setting2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex,
|
int status, EN_API_FLOAT_TYPE setting)
|
{
|
return EN_setthenaction(_defaultProject, ruleIndex, actionIndex, linkIndex,
|
status, setting);
|
}
|
|
int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex,
|
int *status, EN_API_FLOAT_TYPE *setting)
|
{
|
double setting2 = 0.0;
|
int errcode = EN_getelseaction(_defaultProject, ruleIndex, actionIndex, linkIndex,
|
status, &setting2);
|
*setting = (EN_API_FLOAT_TYPE)setting2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex,
|
int status, EN_API_FLOAT_TYPE setting)
|
{
|
return EN_setelseaction(_defaultProject, ruleIndex, actionIndex, linkIndex,
|
status, setting);
|
}
|
|
int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority)
|
{
|
return EN_setrulepriority(_defaultProject, index, priority);
|
}
|
|
/*************************** END OF HYDRAULIC.C ***************************/
|
|
|
int DLLEXPORT ENsetinistatus(char* id, char* value)
|
{
|
{ return EN_setinistatus(_defaultProject, id,value); }
|
}
|
|
|
|
|
|
|
|
|
|
|
/********************************MultiThread****************************************/
|
|
|
/********************************************************************
|
|
Project Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENepanet22(int projectID, const char* inpFile, const char* rptFile,
|
const char* outFile, void (*pviewprog)(char*))
|
{
|
/*------------------------------------------------------------------------
|
** Input: inpFile = name of HYDRAULIC formatted input file
|
** rptFile = name of report file
|
** outFile = name of binary output file
|
** pviewprog = see note below
|
** Output: none
|
** Returns: error code
|
** Purpose: runs a complete HYDRAULIC simulation
|
**
|
** The pviewprog() argument is a pointer to a callback function
|
** that takes a character string (char *) as its only parameter.
|
** The function would reside in and be used by the calling
|
** program to display the progress messages that HYDRAULIC generates
|
** as it carries out its computations. If this feature is not
|
** needed then the argument should be NULL.
|
**-------------------------------------------------------------------------
|
*/
|
int errcode = 0;
|
int warncode = 0;
|
|
// Run the project and record any warning
|
createtmpfiles();
|
errcode = EN_runproject(projects[projectID], inpFile, rptFile, outFile, pviewprog);
|
if (errcode < 100) warncode = errcode;
|
removetmpfiles();
|
|
// Return the warning code if the run had no errors
|
if (warncode) errcode = MAX(errcode, warncode);
|
return errcode;
|
}
|
|
|
int DLLEXPORT ENinit22(int projectID, const char* rptFile, const char* outFile, int unitsType,
|
int headlossType)
|
{
|
int errcode = 0;
|
createtmpfiles(projectID);
|
errcode = EN_init(projects[projectID], rptFile, outFile, unitsType, headlossType);
|
return errcode;
|
}
|
|
int DLLEXPORT ENopen22(int projectID, const char* inpFile, const char* rptFile, const char* outFile)
|
{
|
int errcode = 0;
|
createtmpfiles(projectID);
|
errcode = EN_open(projects[projectID], inpFile, rptFile, outFile);
|
return errcode;
|
}
|
|
int DLLEXPORT ENgettitle22(int projectID, char* line1, char* line2, char* line3)
|
{
|
return EN_gettitle(projects[projectID], line1, line2, line3);
|
}
|
|
int DLLEXPORT ENsettitle22(int projectID, char* line1, char* line2, char* line3)
|
{
|
return EN_settitle(projects[projectID], line1, line2, line3);
|
}
|
int DLLEXPORT ENsetprojectreport22(int projectID, int report)
|
{
|
return EN_setprojectreport(projects[projectID], report);
|
}
|
|
int DLLEXPORT ENgetcomment22(int projectID, int object, int index, char* comment)
|
{
|
return EN_getcomment(projects[projectID], object, index, comment);
|
}
|
|
int DLLEXPORT ENsetcomment22(int projectID, int object, int index, char* comment)
|
{
|
return EN_setcomment(projects[projectID], object, index, comment);
|
}
|
|
int DLLEXPORT ENgetcount22(int projectID, int object, int* count)
|
{
|
return EN_getcount(projects[projectID], object, count);
|
}
|
|
int DLLEXPORT ENsaveinpfile22(int projectID, const char* filename)
|
{
|
return EN_saveinpfile(projects[projectID], filename);
|
}
|
|
int DLLEXPORT ENclose22(int projectID)
|
{
|
EN_close(projects[projectID]);
|
removetmpfiles();
|
return 0;
|
}
|
|
/********************************************************************
|
|
Hydraulic Analysis Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENsolveH22(int projectID) { return EN_solveH(projects[projectID]); }
|
|
int DLLEXPORT ENsaveH22(int projectID) { return EN_saveH(projects[projectID]); }
|
|
int DLLEXPORT ENopenH22(int projectID) { return EN_openH(projects[projectID]); }
|
|
int DLLEXPORT ENinitH22(int projectID, int initFlag) { return EN_initH(projects[projectID], initFlag); }
|
|
int DLLEXPORT ENrunH22(int projectID, long* currentTime) { return EN_runH(projects[projectID], currentTime); }
|
|
int DLLEXPORT ENnextH22(int projectID, long* tStep) { return EN_nextH(projects[projectID], tStep); }
|
|
int DLLEXPORT ENcloseH22(int projectID) { return EN_closeH(projects[projectID]); }
|
|
int DLLEXPORT ENsavehydfile22(int projectID, char* filename)
|
{
|
return EN_savehydfile(projects[projectID], filename);
|
}
|
|
int DLLEXPORT ENusehydfile22(int projectID, char* filename)
|
{
|
return EN_usehydfile(projects[projectID], filename);
|
}
|
|
/********************************************************************
|
|
Water Quality Analysis Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENsolveQ22(int projectID) { return EN_solveQ(projects[projectID]); }
|
|
int DLLEXPORT ENopenQ22(int projectID) { return EN_openQ(projects[projectID]); }
|
|
int DLLEXPORT ENinitQ22(int projectID, int saveFlag) { return EN_initQ(projects[projectID], saveFlag); }
|
|
int DLLEXPORT ENrunQ22(int projectID, long* currentTime) { return EN_runQ(projects[projectID], currentTime); }
|
|
int DLLEXPORT ENnextQ22(int projectID, long* tStep) { return EN_nextQ(projects[projectID], tStep); }
|
|
int DLLEXPORT ENstepQ22(int projectID, long* timeLeft) { return EN_stepQ(projects[projectID], timeLeft); }
|
|
int DLLEXPORT ENcloseQ22(int projectID) { return EN_closeQ(projects[projectID]); }
|
|
/********************************************************************
|
|
Reporting Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENwriteline22(int projectID, char* line) { return EN_writeline(projects[projectID], line); }
|
|
int DLLEXPORT ENreport22(int projectID) { return EN_report(projects[projectID]); }
|
|
int DLLEXPORT ENcopyreport22(int projectID, char* filename)
|
{
|
return EN_copyreport(projects[projectID], filename);
|
}
|
|
int DLLEXPORT ENclearreport22(int projectID) { return EN_clearreport(projects[projectID]); }
|
|
int DLLEXPORT ENresetreport22(int projectID) { return EN_resetreport(projects[projectID]); }
|
|
int DLLEXPORT ENsetreport22(int projectID, char* format) { return EN_setreport(projects[projectID], format); }
|
|
int DLLEXPORT ENsetstatusreport22(int projectID, int level)
|
{
|
return EN_setstatusreport(projects[projectID], level);
|
}
|
|
int DLLEXPORT ENgetversion22(int projectID, int* version) { return EN_getversion(version); }
|
|
int DLLEXPORT ENgeterror22(int projectID, int errcode, char* errmsg, int maxLen)
|
{
|
return EN_geterror(errcode, errmsg, maxLen);
|
}
|
|
int DLLEXPORT ENgetErrorMsg22(int projectID, char* errmsg, int maxLen)
|
{
|
return EN_geterrormsg(projects[projectID],errmsg, maxLen);
|
}
|
|
int DLLEXPORT ENgetstatistic22(int projectID, int type, EN_API_FLOAT_TYPE* value)
|
{
|
double v = 0.0;
|
int errcode = EN_getstatistic(projects[projectID], type, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENgetresultindex22(int projectID, int type, int index, int* value)
|
{
|
return EN_getresultindex(projects[projectID], type, index, value);
|
}
|
|
|
/********************************************************************
|
|
Analysis Options Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENgetoption22(int projectID, int option, EN_API_FLOAT_TYPE* value)
|
{
|
double v = 0.0;
|
int errcode = EN_getoption(projects[projectID], option, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetoption22(int projectID, int option, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setoption(projects[projectID], option, value);
|
}
|
|
int DLLEXPORT ENgetflowunits22(int projectID, int* units)
|
{
|
return EN_getflowunits(projects[projectID], units);
|
}
|
|
int DLLEXPORT ENsetflowunits22(int projectID, int units)
|
{
|
return EN_setflowunits(projects[projectID], units);
|
}
|
|
int DLLEXPORT ENgettimeparam22(int projectID, int param, long* value)
|
{
|
return EN_gettimeparam(projects[projectID], param, value);
|
}
|
|
int DLLEXPORT ENsettimeparam22(int projectID, int param, long value)
|
{
|
return EN_settimeparam(projects[projectID], param, value);
|
}
|
|
int DLLEXPORT ENgetqualinfo22(int projectID, int* qualType, char* chemName, char* chemUnits,
|
int* traceNode)
|
{
|
return EN_getqualinfo(projects[projectID], qualType, chemName, chemUnits, traceNode);
|
}
|
|
int DLLEXPORT ENgetqualtype22(int projectID, int* qualType, int* traceNode)
|
{
|
return EN_getqualtype(projects[projectID], qualType, traceNode);
|
}
|
|
int DLLEXPORT ENsetqualtype22(int projectID, int qualType, char* chemName, char* chemUnits,
|
char* traceNode)
|
{
|
return EN_setqualtype(projects[projectID], qualType, chemName, chemUnits, traceNode);
|
}
|
|
/********************************************************************
|
|
Node Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddnode22(int projectID, char* id, int nodeType, int* index)
|
{
|
return EN_addnode(projects[projectID], id, nodeType, index);
|
}
|
|
int DLLEXPORT ENdeletenode22(int projectID, int index, int actionCode)
|
{
|
return EN_deletenode(projects[projectID], index, actionCode);
|
}
|
|
int DLLEXPORT ENgetnodeindex22(int projectID, char* id, int* index)
|
{
|
return EN_getnodeindex(projects[projectID], id, index);
|
}
|
|
int DLLEXPORT ENgetnodeid22(int projectID, int index, char* id)
|
{
|
return EN_getnodeid(projects[projectID], index, id);
|
}
|
|
|
int DLLEXPORT ENgetnodecomment22(int projectID, int index, char* id)
|
{
|
return EN_getnodecomment(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENsetnodeid22(int projectID, int index, char* newid)
|
{
|
return EN_setnodeid(projects[projectID], index, newid);
|
}
|
|
int DLLEXPORT ENgetnodetype22(int projectID, int index, int* nodeType)
|
{
|
return EN_getnodetype(projects[projectID], index, nodeType);
|
}
|
|
int DLLEXPORT ENgetnodevalue22(int projectID, int index, int property, EN_API_FLOAT_TYPE* value)
|
{
|
double v = 0.0;
|
int errcode = EN_getnodevalue(projects[projectID], index, property, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetnodevalue22(int projectID, int index, int property, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setnodevalue(projects[projectID], index, property, value);
|
}
|
|
int DLLEXPORT ENsetjuncdata22(int projectID, int index, EN_API_FLOAT_TYPE elev, EN_API_FLOAT_TYPE dmnd,
|
char* dmndpat)
|
{
|
return EN_setjuncdata(projects[projectID], index, elev, dmnd, dmndpat);
|
}
|
|
int DLLEXPORT ENsettankdata22(int projectID, int index, EN_API_FLOAT_TYPE elev,
|
EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl,
|
EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam,
|
EN_API_FLOAT_TYPE minvol, char* volcurve)
|
{
|
return EN_settankdata(projects[projectID], index, elev, initlvl, minlvl, maxlvl,
|
diam, minvol, volcurve);
|
}
|
|
int DLLEXPORT ENgetcoord22(int projectID, int index, double* x, double* y)
|
{
|
return EN_getcoord(projects[projectID], index, x, y);
|
}
|
|
int DLLEXPORT ENsetcoord22(int projectID, int index, double x, double y)
|
{
|
return EN_setcoord(projects[projectID], index, x, y);
|
}
|
|
|
int DLLEXPORT ENgetTotalDemand22(int projectID, int p, double *value)
|
{
|
return EN_getTotalDemand(projects[projectID], p, value);
|
}
|
/********************************************************************
|
|
Nodal Demand Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENgetdemandmodel22(int projectID, int* model, EN_API_FLOAT_TYPE* pmin,
|
EN_API_FLOAT_TYPE* preq, EN_API_FLOAT_TYPE* pexp)
|
{
|
double pmin2 = 0.0, preq2 = 0.0, pexp2 = 0.0;
|
int errcode = EN_getdemandmodel(projects[projectID], model, &pmin2, &preq2, &pexp2);
|
*pmin = (EN_API_FLOAT_TYPE)pmin2;
|
*preq = (EN_API_FLOAT_TYPE)preq2;
|
*pexp = (EN_API_FLOAT_TYPE)pexp2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetdemandmodel22(int projectID, int model, EN_API_FLOAT_TYPE pmin,
|
EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp)
|
{
|
return EN_setdemandmodel(projects[projectID], model, pmin, preq, pexp);
|
}
|
|
int DLLEXPORT ENadddemand22(int projectID, int nodeIndex, EN_API_FLOAT_TYPE baseDemand,
|
char* demandPattern, char* demandName)
|
{
|
return EN_adddemand(projects[projectID], nodeIndex, baseDemand, demandPattern, demandName);
|
}
|
|
int DLLEXPORT ENdeletedemand22(int projectID, int nodeIndex, int demandIndex)
|
{
|
return EN_deletedemand(projects[projectID], nodeIndex, demandIndex);
|
}
|
|
int DLLEXPORT ENgetdemandindex22(int projectID, int nodeIndex, char* demandName, int* demandIndex)
|
{
|
return EN_getdemandindex(projects[projectID], nodeIndex, demandName, demandIndex);
|
}
|
|
int DLLEXPORT ENgetnumdemands22(int projectID, int nodeIndex, int* numDemands)
|
{
|
return EN_getnumdemands(projects[projectID], nodeIndex, numDemands);
|
}
|
|
int DLLEXPORT ENgetbasedemand22(int projectID, int nodeIndex, int demandIndex,
|
EN_API_FLOAT_TYPE* baseDemand)
|
{
|
double bd2 = 0.0;
|
int errcode = EN_getbasedemand(projects[projectID], nodeIndex, demandIndex, &bd2);
|
*baseDemand = (EN_API_FLOAT_TYPE)bd2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetbasedemand22(int projectID, int nodeIndex, int demandIndex,
|
EN_API_FLOAT_TYPE baseDemand)
|
{
|
return EN_setbasedemand(projects[projectID], nodeIndex, demandIndex, baseDemand);
|
}
|
|
int DLLEXPORT ENsetdemandpattern22(int projectID, int nodeIndex, int demandIndex, int patIndex)
|
{
|
return EN_setdemandpattern(projects[projectID], nodeIndex, demandIndex, patIndex);
|
}
|
|
int DLLEXPORT ENgetdemandpattern22(int projectID, int nodeIndex, int demandIndex, int* pattIdx)
|
{
|
return EN_getdemandpattern(projects[projectID], nodeIndex, demandIndex, pattIdx);
|
}
|
|
int DLLEXPORT ENgetdemandname22(int projectID, int nodeIndex, int demandIndex, char* demandName)
|
{
|
return EN_getdemandname(projects[projectID], nodeIndex, demandIndex, demandName);
|
}
|
|
int DLLEXPORT ENsetdemandname22(int projectID, int nodeIndex, int demandIndex, char* demandName)
|
{
|
return EN_setdemandname(projects[projectID], nodeIndex, demandIndex, demandName);
|
}
|
|
/********************************************************************
|
|
Link Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddlink22(int projectID, char* id, int linkType, char* fromNode, char* toNode, int* index)
|
{
|
return EN_addlink(projects[projectID], id, linkType, fromNode, toNode, index);
|
}
|
|
int DLLEXPORT ENdeletelink22(int projectID, int index, int actionCode)
|
{
|
return EN_deletelink(projects[projectID], index, actionCode);
|
}
|
|
int DLLEXPORT ENgetlinkindex22(int projectID, char* id, int* index)
|
{
|
return EN_getlinkindex(projects[projectID], id, index);
|
}
|
|
int DLLEXPORT ENgetlinkid22(int projectID, int index, char* id)
|
{
|
return EN_getlinkid(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENgetlinkcomment22(int projectID, int index, char* id)
|
{
|
return EN_getlinkcomment(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENsetlinkid22(int projectID, int index, char* newid)
|
{
|
return EN_setlinkid(projects[projectID], index, newid);
|
}
|
|
int DLLEXPORT ENgetlinktype22(int projectID, int index, int* linkType)
|
{
|
return EN_getlinktype(projects[projectID], index, linkType);
|
}
|
|
int DLLEXPORT ENsetlinktype22(int projectID, int* index, int linkType, int actionCode)
|
{
|
return EN_setlinktype(projects[projectID], index, linkType, actionCode);
|
}
|
|
int DLLEXPORT ENgetlinknodes22(int projectID, int index, int* node1, int* node2)
|
{
|
return EN_getlinknodes(projects[projectID], index, node1, node2);
|
}
|
|
int DLLEXPORT ENsetlinknodes22(int projectID, int index, int node1, int node2)
|
{
|
return EN_setlinknodes(projects[projectID], index, node1, node2);
|
}
|
|
int DLLEXPORT ENgetlinkvalue22(int projectID, int index, int property, EN_API_FLOAT_TYPE* value)
|
{
|
double v = 0.0;
|
int errcode = EN_getlinkvalue(projects[projectID], index, property, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetlinkvalue22(int projectID, int index, int property, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setlinkvalue(projects[projectID], index, property, value);
|
}
|
|
int DLLEXPORT ENsetpipedata22(int projectID, int index, EN_API_FLOAT_TYPE length,
|
EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough, EN_API_FLOAT_TYPE mloss)
|
{
|
return EN_setpipedata(projects[projectID], index, length, diam, rough, mloss);
|
}
|
|
int DLLEXPORT ENgetvertexcount22(int projectID, int index, int* count)
|
{
|
return EN_getvertexcount(projects[projectID], index, count);
|
}
|
|
int DLLEXPORT ENgetvertex22(int projectID, int index, int vertex, double* x, double* y)
|
{
|
return EN_getvertex(projects[projectID], index, vertex, x, y);
|
}
|
|
int DLLEXPORT ENsetvertices22(int projectID, int index, double* x, double* y, int count)
|
{
|
return EN_setvertices(projects[projectID], index, x, y, count);
|
}
|
|
/********************************************************************
|
|
Pump Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENgetpumptype22(int projectID, int linkIndex, int* pumpType)
|
{
|
return EN_getpumptype(projects[projectID], linkIndex, pumpType);
|
}
|
|
int DLLEXPORT ENgetheadcurveindex22(int projectID, int linkIndex, int* curveIndex)
|
{
|
return EN_getheadcurveindex(projects[projectID], linkIndex, curveIndex);
|
}
|
|
int DLLEXPORT ENsetheadcurveindex22(int projectID, int linkIndex, int curveIndex)
|
{
|
return EN_setheadcurveindex(projects[projectID], linkIndex, curveIndex);
|
}
|
|
/********************************************************************
|
|
Time Pattern Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddpattern22(int projectID, char* id)
|
{
|
return EN_addpattern(projects[projectID], id);
|
}
|
|
int DLLEXPORT ENdeletepattern22(int projectID, int index)
|
{
|
return EN_deletepattern(projects[projectID], index);
|
}
|
|
int DLLEXPORT ENgetpatternindex22(int projectID, char* id, int* index)
|
{
|
return EN_getpatternindex(projects[projectID], id, index);
|
}
|
|
int DLLEXPORT ENgetpatternid22(int projectID, int index, char* id)
|
{
|
return EN_getpatternid(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENsetpatternid22(int projectID, int index, char* id)
|
{
|
return EN_setpatternid(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENgetpatternlen22(int projectID, int index, int* len)
|
{
|
return EN_getpatternlen(projects[projectID], index, len);
|
}
|
|
int DLLEXPORT ENgetpatternvalue22(int projectID, int index, int period, EN_API_FLOAT_TYPE* value)
|
{
|
double v = 0.0;
|
int errcode = EN_getpatternvalue(projects[projectID], index, period, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetpatternvalue22(int projectID, int index, int period, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setpatternvalue(projects[projectID], index, period, value);
|
}
|
|
int DLLEXPORT ENgetaveragepatternvalue22(int projectID, int index, EN_API_FLOAT_TYPE* value)
|
{
|
double v;
|
int errcode = EN_getaveragepatternvalue(projects[projectID], index, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetpattern22(int projectID, int index, EN_API_FLOAT_TYPE* values, int len)
|
{
|
double* v = NULL;
|
int i, errcode;
|
if (values == NULL) return 206;
|
v = (double*)calloc(len, sizeof(double));
|
if (v)
|
{
|
for (i = 0; i < len; i++) v[i] = values[i];
|
errcode = EN_setpattern(projects[projectID], index, v, len);
|
}
|
else errcode = 101;
|
free(v);
|
return errcode;
|
}
|
|
/********************************************************************
|
|
Data Curve Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddcurve22(int projectID, char* id)
|
{
|
return EN_addcurve(projects[projectID], id);
|
}
|
|
int DLLEXPORT ENdeletecurve22(int projectID, int index)
|
{
|
return EN_deletecurve(projects[projectID], index);
|
}
|
|
int DLLEXPORT ENgetcurveindex22(int projectID, char* id, int* index)
|
{
|
return EN_getcurveindex(projects[projectID], id, index);
|
}
|
|
int DLLEXPORT ENgetcurveid22(int projectID, int index, char* id)
|
{
|
return EN_getcurveid(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENsetcurveid22(int projectID, int index, char* id)
|
{
|
return EN_setcurveid(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENgetcurvelen22(int projectID, int index, int* len)
|
{
|
return EN_getcurvelen(projects[projectID], index, len);
|
}
|
|
int DLLEXPORT ENgetcurvetype22(int projectID, int index, int* type)
|
{
|
return EN_getcurvetype(projects[projectID], index, type);
|
}
|
|
int DLLEXPORT ENgetcurvevalue22(int projectID, int curveIndex, int pointIndex, EN_API_FLOAT_TYPE* x,
|
EN_API_FLOAT_TYPE* y)
|
{
|
double xx = 0.0, yy = 0.0;
|
int errcode = EN_getcurvevalue(projects[projectID], curveIndex, pointIndex, &xx, &yy);
|
*x = (EN_API_FLOAT_TYPE)xx;
|
*y = (EN_API_FLOAT_TYPE)yy;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetcurvevalue22(int projectID, int curveIndex, int pointIndex, EN_API_FLOAT_TYPE x,
|
EN_API_FLOAT_TYPE y)
|
{
|
return EN_setcurvevalue(projects[projectID], curveIndex, pointIndex, x, y);
|
}
|
|
int DLLEXPORT ENgetcurve22(int projectID, int index, char* id, int* nPoints,
|
EN_API_FLOAT_TYPE* xValues, EN_API_FLOAT_TYPE* yValues)
|
{
|
int i;
|
Network* net = &_defaultProject->network;
|
Scurve* curve;
|
|
if (index <= 0 || index > net->Ncurves) return 206;
|
if (xValues == NULL || yValues == NULL) return 206;
|
curve = &net->Curve[index];
|
strncpy(id, curve->ID, MAXID);
|
*nPoints = curve->Npts;
|
for (i = 0; i < curve->Npts; i++)
|
{
|
xValues[i] = (EN_API_FLOAT_TYPE)curve->X[i];
|
yValues[i] = (EN_API_FLOAT_TYPE)curve->Y[i];
|
}
|
return 0;
|
}
|
|
int DLLEXPORT ENsetcurve22(int projectID, int index, EN_API_FLOAT_TYPE* xValues,
|
EN_API_FLOAT_TYPE* yValues, int nPoints)
|
{
|
double* xx = NULL;
|
double* yy = NULL;
|
int i, errcode = 0;
|
|
if (xValues == NULL || yValues == NULL) return 206;
|
if (nPoints < 1) return 202;
|
|
xx = (double*)calloc(nPoints, sizeof(double));
|
yy = (double*)calloc(nPoints, sizeof(double));
|
if (xx && yy)
|
{
|
for (i = 0; i < nPoints; i++)
|
{
|
xx[i] = xValues[i];
|
yy[i] = yValues[i];
|
}
|
errcode = EN_setcurve(projects[projectID], index, xx, yy, nPoints);
|
}
|
else errcode = 101;
|
free(xx);
|
free(yy);
|
return errcode;
|
}
|
|
/********************************************************************
|
|
Simple Controls Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddcontrol22(int projectID, int type, int linkIndex, EN_API_FLOAT_TYPE setting,
|
int nodeIndex, EN_API_FLOAT_TYPE level, int* index)
|
{
|
return EN_addcontrol(projects[projectID], type, linkIndex, setting, nodeIndex,
|
level, index);
|
}
|
|
int DLLEXPORT ENdeletecontrol22(int projectID, int index)
|
{
|
return EN_deletecontrol(projects[projectID], index);
|
}
|
|
int DLLEXPORT ENgetcontrol22(int projectID, int index, int* type, int* linkIndex,
|
EN_API_FLOAT_TYPE* setting, int* nodeIndex, EN_API_FLOAT_TYPE* level)
|
{
|
double setting2 = 0.0, level2 = 0.0;
|
int errcode = EN_getcontrol(projects[projectID], index, type, linkIndex, &setting2,
|
nodeIndex, &level2);
|
*setting = (EN_API_FLOAT_TYPE)setting2;
|
*level = (EN_API_FLOAT_TYPE)level2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetcontrol22(int projectID, int index, int type, int linkIndex,
|
EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level)
|
{
|
return EN_setcontrol(projects[projectID], index, type, linkIndex, setting,
|
nodeIndex, level);
|
}
|
|
/********************************************************************
|
|
Rule-Based Controls Functions
|
|
********************************************************************/
|
|
int DLLEXPORT ENaddrule22(int projectID, char* rule)
|
{
|
return EN_addrule(projects[projectID], rule);
|
}
|
|
int DLLEXPORT ENdeleterule22(int projectID, int index)
|
{
|
return EN_deleterule(projects[projectID], index);
|
}
|
|
int DLLEXPORT ENgetrule22(int projectID, int index, int* nPremises, int* nThenActions,
|
int* nElseActions, EN_API_FLOAT_TYPE* priority)
|
{
|
double priority2 = 0.0;
|
int errcode = EN_getrule(projects[projectID], index, nPremises, nThenActions,
|
nElseActions, &priority2);
|
*priority = (EN_API_FLOAT_TYPE)priority2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENgetruleID22(int projectID, int index, char* id)
|
{
|
return EN_getruleID(projects[projectID], index, id);
|
}
|
|
int DLLEXPORT ENgetpremise22(int projectID, int ruleIndex, int premiseIndex, int* logop, int* object,
|
int* objIndex, int* variable, int* relop, int* status,
|
EN_API_FLOAT_TYPE* value)
|
{
|
double v = 0.0;
|
int errcode = EN_getpremise(projects[projectID], ruleIndex, premiseIndex, logop,
|
object, objIndex, variable, relop, status, &v);
|
*value = (EN_API_FLOAT_TYPE)v;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetpremise22(int projectID, int ruleIndex, int premiseIndex, int logop, int object,
|
int objIndex, int variable, int relop, int status, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setpremise(projects[projectID], ruleIndex, premiseIndex, logop, object,
|
objIndex, variable, relop, status, value);
|
}
|
|
int DLLEXPORT ENsetpremiseindex22(int projectID, int ruleIndex, int premiseIndex, int objIndex)
|
{
|
return EN_setpremiseindex(projects[projectID], ruleIndex, premiseIndex, objIndex);
|
}
|
|
int DLLEXPORT ENsetpremisestatus22(int projectID, int ruleIndex, int premiseIndex, int status)
|
{
|
return EN_setpremisestatus(projects[projectID], ruleIndex, premiseIndex, status);
|
}
|
|
int DLLEXPORT ENsetpremisevalue22(int projectID, int ruleIndex, int premiseIndex, EN_API_FLOAT_TYPE value)
|
{
|
return EN_setpremisevalue(projects[projectID], ruleIndex, premiseIndex, value);
|
}
|
|
int DLLEXPORT ENgetthenaction22(int projectID, int ruleIndex, int actionIndex, int* linkIndex,
|
int* status, EN_API_FLOAT_TYPE* setting)
|
{
|
double setting2 = 0.0;
|
int errcode = EN_getthenaction(projects[projectID], ruleIndex, actionIndex, linkIndex,
|
status, &setting2);
|
*setting = (EN_API_FLOAT_TYPE)setting2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetthenaction22(int projectID, int ruleIndex, int actionIndex, int linkIndex,
|
int status, EN_API_FLOAT_TYPE setting)
|
{
|
return EN_setthenaction(projects[projectID], ruleIndex, actionIndex, linkIndex,
|
status, setting);
|
}
|
|
int DLLEXPORT ENgetelseaction22(int projectID, int ruleIndex, int actionIndex, int* linkIndex,
|
int* status, EN_API_FLOAT_TYPE* setting)
|
{
|
double setting2 = 0.0;
|
int errcode = EN_getelseaction(projects[projectID], ruleIndex, actionIndex, linkIndex,
|
status, &setting2);
|
*setting = (EN_API_FLOAT_TYPE)setting2;
|
return errcode;
|
}
|
|
int DLLEXPORT ENsetelseaction22(int projectID, int ruleIndex, int actionIndex, int linkIndex,
|
int status, EN_API_FLOAT_TYPE setting)
|
{
|
return EN_setelseaction(projects[projectID], ruleIndex, actionIndex, linkIndex,
|
status, setting);
|
}
|
|
int DLLEXPORT ENsetrulepriority22(int projectID, int index, EN_API_FLOAT_TYPE priority)
|
{
|
return EN_setrulepriority(projects[projectID], index, priority);
|
}
|
|
/*************************** END OF HYDRAULIC.C ***************************/
|
|
|
int DLLEXPORT ENsetinistatus22(int projectID, char* id, char* value)
|
{
|
{ return EN_setinistatus(projects[projectID], id, value); }
|
}
|