/* ****************************************************************************** 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 #include #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 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); } }