Added retrieval of emitter flow to the API

This commit is contained in:
Lew Rossman
2023-07-06 15:35:30 -04:00
parent 789d42f248
commit 3acfb6dae3
7 changed files with 31 additions and 20 deletions

679
include/epanet2.cs Normal file
View File

@@ -0,0 +1,679 @@
//using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
//epanet2.cs[By Oscar Vegas]
//Last updated on 05/13/2023
//Declarations of functions in the EPANET PROGRAMMERs TOOLKIT
//(EPANET2.DLL) for use with C#
namespace EpanetCSharpLibrary
{
public static class Epanet
{
public const string EPANETDLL = "epanet2.dll";
//These are codes used by the DLL functions
public const int EN_ELEVATION = 0; // Node parameters
public const int EN_BASEDEMAND = 1;
public const int EN_PATTERN = 2;
public const int EN_EMITTER = 3;
public const int EN_INITQUAL = 4;
public const int EN_SOURCEQUAL = 5;
public const int EN_SOURCEPAT = 6;
public const int EN_SOURCETYPE = 7;
public const int EN_TANKLEVEL = 8;
public const int EN_DEMAND = 9;
public const int EN_HEAD = 10;
public const int EN_PRESSURE = 11;
public const int EN_QUALITY = 12;
public const int EN_SOURCEMASS = 13;
public const int EN_INITVOLUME = 14;
public const int EN_MIXMODEL = 15;
public const int EN_MIXZONEVOL = 16;
public const int EN_TANKDIAM = 17;
public const int EN_MINVOLUME = 18;
public const int EN_VOLCURVE = 19;
public const int EN_MINLEVEL = 20;
public const int EN_MAXLEVEL = 21;
public const int EN_MIXFRACTION = 22;
public const int EN_TANK_KBULK = 23;
public const int EN_TANKVOLUME = 24;
public const int EN_MAXVOLUME = 25;
public const int EN_CANOVERFLOW = 26;
public const int EN_DEMANDDEFICIT = 27;
public const int EN_NODE_INCONTROL = 28;
public const int EN_EMITTERFLOW = 29;
public const int EN_DIAMETER = 0; //Link parameters
public const int EN_LENGTH = 1;
public const int EN_ROUGHNESS = 2;
public const int EN_MINORLOSS = 3;
public const int EN_INITSTATUS = 4;
public const int EN_INITSETTING = 5;
public const int EN_KBULK = 6;
public const int EN_KWALL = 7;
public const int EN_FLOW = 8;
public const int EN_VELOCITY = 9;
public const int EN_HEADLOSS = 10;
public const int EN_STATUS = 11;
public const int EN_SETTING = 12;
public const int EN_ENERGY = 13;
public const int EN_LINKQUAL = 14;
public const int EN_LINKPATTERN = 15;
public const int EN_PUMP_STATE = 16;
public const int EN_PUMP_EFFIC = 17;
public const int EN_PUMP_POWER = 18;
public const int EN_PUMP_HCURVE = 19;
public const int EN_PUMP_ECURVE = 20;
public const int EN_PUMP_ECOST = 21;
public const int EN_PUMP_EPAT = 22;
public const int EN_LINK_INCONTROL = 23;
public const int EN_GPV_CURVE = 24;
public const int EN_PCV_CURVE = 25;
public const int EN_DURATION = 0; //Time parameters
public const int EN_HYDSTEP = 1;
public const int EN_QUALSTEP = 2;
public const int EN_PATTERNSTEP = 3;
public const int EN_PATTERNSTART = 4;
public const int EN_REPORTSTEP = 5;
public const int EN_REPORTSTART = 6;
public const int EN_RULESTEP = 7;
public const int EN_STATISTIC = 8;
public const int EN_PERIODS = 9;
public const int EN_STARTTIME = 10;
public const int EN_HTIME = 11;
public const int EN_QTIME = 12;
public const int EN_HALTFLAG = 13;
public const int EN_NEXTEVENT = 14;
public const int EN_ITERATIONS = 0;
public const int EN_RELATIVEERROR = 1;
public const int EN_MAXHEADERROR = 2;
public const int EN_MAXFLOWCHANGE = 3;
public const int EN_MASSBALANCE = 4;
public const int EN_DEFICIENTNODES = 5;
public const int EN_DEMANDREDUCTION = 6;
public const int EN_NODE = 0; //Component types
public const int EN_LINK = 1;
public const int EN_TIMEPAT = 2;
public const int EN_CURVE = 3;
public const int EN_CONTROL = 4;
public const int EN_RULE = 5;
public const int EN_NODECOUNT = 0; //Component counts
public const int EN_TANKCOUNT = 1;
public const int EN_LINKCOUNT = 2;
public const int EN_PATCOUNT = 3;
public const int EN_CURVECOUNT = 4;
public const int EN_CONTROLCOUNT = 5;
public const int EN_RULECOUNT = 6;
public const int EN_JUNCTION = 0; //Node types
public const int EN_RESERVOIR = 1;
public const int EN_TANK = 2;
public const int EN_CVPIPE = 0; //Link types
public const int EN_PIPE = 1;
public const int EN_PUMP = 2;
public const int EN_PRV = 3;
public const int EN_PSV = 4;
public const int EN_PBV = 5;
public const int EN_FCV = 6;
public const int EN_TCV = 7;
public const int EN_GPV = 8;
public const int EN_PCV = 9;
public const int EN_NONE = 0; //Quality analysis types
public const int EN_CHEM = 1;
public const int EN_AGE = 2;
public const int EN_TRACE = 3;
public const int EN_CONCEN = 0; //Source quality types
public const int EN_MASS = 1;
public const int EN_SETPOINT = 2;
public const int EN_FLOWPACED = 3;
public const int EN_HW = 0; //Head loss formulas
public const int EN_DW = 1;
public const int EN_CM = 2;
public const int EN_CFS = 0; //Flow units types
public const int EN_GPM = 1;
public const int EN_MGD = 2;
public const int EN_IMGD = 3;
public const int EN_AFD = 4;
public const int EN_LPS = 5;
public const int EN_LPM = 6;
public const int EN_MLD = 7;
public const int EN_CMH = 8;
public const int EN_CMD = 9;
public const int EN_CMS = 10;
public const int EN_PSI = 0; //Pressure units types
public const int EN_KPA = 1;
public const int EN_METERS = 2;
public const int EN_DDA = 0; //Demand driven analysis
public const int EN_PDA = 1; //Pressure driven analysis
public const int EN_TRIALS = 0; //Simulation options
public const int EN_ACCURACY = 1;
public const int EN_TOLERANCE = 2;
public const int EN_EMITEXPON = 3;
public const int EN_DEMANDMULT = 4;
public const int EN_HEADERROR = 5;
public const int EN_FLOWCHANGE = 6;
public const int EN_HEADLOSSFORM = 7;
public const int EN_GLOBALEFFIC = 8;
public const int EN_GLOBALPRICE = 9;
public const int EN_GLOBALPATTERN = 10;
public const int EN_DEMANDCHARGE = 11;
public const int EN_SP_GRAVITY = 12;
public const int EN_SP_VISCOS = 13;
public const int EN_UNBALANCED = 14;
public const int EN_CHECKFREQ = 15;
public const int EN_MAXCHECK = 16;
public const int EN_DAMPLIMIT = 17;
public const int EN_SP_DIFFUS = 18;
public const int EN_BULKORDER = 19;
public const int EN_WALLORDER = 20;
public const int EN_TANKORDER = 21;
public const int EN_CONCENLIMIT = 22;
public const int EN_DEMANDPATTERN = 23;
public const int EN_EMITBACKFLOW = 24;
public const int EN_PRESS_UNITS = 25;
public const int EN_LOWLEVEL = 0; //Control types
public const int EN_HILEVEL = 1;
public const int EN_TIMER = 2;
public const int EN_TIMEOFDAY = 3;
public const int EN_AVERAGE = 1; //Time statistic types
public const int EN_MINIMUM = 2;
public const int EN_MAXIMUM = 3;
public const int EN_RANGE = 4;
public const int EN_MIX1 = 0; //Tank mixing models
public const int EN_MIX2 = 1;
public const int EN_FIFO = 2;
public const int EN_LIFO = 3;
public const int EN_NOSAVE = 0; //Save-results-to-file flag
public const int EN_SAVE = 1;
public const int EN_INITFLOW = 10; //Re-initialize flow flag
public const int EN_SAVE_AND_INIT = 11;
public const int EN_CONST_HP = 0; //Constant horsepower pump curve
public const int EN_POWER_FUNC = 1; //Power function pump curve
public const int EN_CUSTOM = 2; //User-defined custom pump curve
public const int EN_NOCURVE = 3; //No pump curve
public const int EN_VOLUME_CURVE = 0; //Volume curve
public const int EN_PUMP_CURVE = 1; //Pump curve
public const int EN_EFFIC_CURVE = 2; //Efficiency curve
public const int EN_HLOSS_CURVE = 3; //Head loss curve
public const int EN_GENERIC_CURVE = 4; //Generic curve
public const int EN_VALVE_CURVE = 5; //Valve position curve
public const int EN_UNCONDITIONAL = 0; //Unconditional object deletion
public const int EN_CONDITIONAL = 1; //Conditional object deletion
public const int EN_NO_REPORT = 0; //No status report
public const int EN_NORMAL_REPORT = 1; //Normal status report
public const int EN_FULL_REPORT = 2; //Full status report
public const int EN_R_NODE = 6; //Rule objects
public const int EN_R_LINK = 7;
public const int EN_R_SYSTEM = 8;
public const int EN_R_DEMAND = 0; //Rule variables
public const int EN_R_HEAD = 1;
public const int EN_R_GRADE = 2;
public const int EN_R_LEVEL = 3;
public const int EN_R_PRESSURE = 4;
public const int EN_R_FLOW = 5;
public const int EN_R_STATUS = 6;
public const int EN_R_SETTING = 7;
public const int EN_R_POWER = 8;
public const int EN_R_TIME = 9;
public const int EN_R_CLOCKTIME = 10;
public const int EN_R_FILLTIME = 11;
public const int EN_R_DRAINTIME = 12;
public const int EN_R_EQ = 0; //Rule operators
public const int EN_R_NE = 1;
public const int EN_R_LE = 2;
public const int EN_R_GE = 3;
public const int EN_R_LT = 4;
public const int EN_R_GT = 5;
public const int EN_R_IS = 6;
public const int EN_R_NOT = 7;
public const int EN_R_BELOW = 8;
public const int EN_R_ABOVE = 9;
public const int EN_R_IS_OPEN = 1; //Rule status types
public const int EN_R_IS_CLOSED = 2;
public const int EN_R_IS_ACTIVE = 3;
public const double EN_MISSING = -1.0E10;
public const double EN_SET_CLOSED = -1.0E10
public const double EN_SET_OPEN = 1.0E10
#region Epanet Imports
public delegate void UserSuppliedFunction(string param0);
//Project Functions
[DllImport(EPANETDLL, EntryPoint = "ENgetversion")]
public static extern int ENgetversion(ref int version);
[DllImport(EPANETDLL, EntryPoint = "ENepanet")]
public static extern int ENepanet(string inpFile, string rptFile, string outFile, UserSuppliedFunction vfunc);
[DllImport(EPANETDLL, EntryPoint = "ENopen")]
public static extern int ENopen(string inpFile, string rptFile, string outFile);
[DllImport(EPANETDLL, EntryPoint = "ENgettitle")]
public static extern int ENgettitle(string titleline1, string titleline2, string titleline3);
[DllImport(EPANETDLL, EntryPoint = "ENsettitle")]
public static extern int ENsettitle(string titleline1, string titleline2, string titleline3);
[DllImport(EPANETDLL, EntryPoint = "ENsaveinpfile")]
public static extern int ENsaveinpfile(string filename);
[DllImport(EPANETDLL, EntryPoint = "ENclose")]
public static extern int ENclose();
//Hydraulic Analysis Functions
[DllImport(EPANETDLL, EntryPoint = "ENsolveH")]
public static extern int ENsolveH();
[DllImport(EPANETDLL, EntryPoint = "ENsaveH")]
public static extern int ENsaveH();
[DllImport(EPANETDLL, EntryPoint = "ENopenH")]
public static extern int ENopenH();
[DllImport(EPANETDLL, EntryPoint = "ENinitH")]
public static extern int ENinitH(int initFlag);
[DllImport(EPANETDLL, EntryPoint = "ENrunH")]
public static extern int ENrunH(ref long currentTime);
[DllImport(EPANETDLL, EntryPoint = "ENnextH")]
public static extern int ENnextH(ref long tStep);
[DllImport(EPANETDLL, EntryPoint = "ENcloseH")]
public static extern int ENcloseH();
[DllImport(EPANETDLL, EntryPoint = "ENsavehydfile")]
public static extern int ENsavehydfile(string filename);
[DllImport(EPANETDLL, EntryPoint = "ENusehydfile")]
public static extern int ENusehydfile(string filename);
//Water Quality Analysis Functions
[DllImport(EPANETDLL, EntryPoint = "ENsolveQ")]
public static extern int ENsolveQ();
[DllImport(EPANETDLL, EntryPoint = "ENopenQ")]
public static extern int ENopenQ();
[DllImport(EPANETDLL, EntryPoint = "ENinitQ")]
public static extern int ENinitQ(int saveFlag);
[DllImport(EPANETDLL, EntryPoint = "ENrunQ")]
public static extern int ENrunQ(ref long currentTime);
[DllImport(EPANETDLL, EntryPoint = "ENnextQ")]
public static extern int ENnextQ(ref long tStep);
[DllImport(EPANETDLL, EntryPoint = "ENstepQ")]
public static extern int ENstepQ(ref long timeLeft);
[DllImport(EPANETDLL, EntryPoint = "ENcloseQ")]
public static extern int ENcloseQ();
//Reporting Functions
[DllImport(EPANETDLL, EntryPoint = "ENwriteline")]
public static extern int ENwriteline(string line);
[DllImport(EPANETDLL, EntryPoint = "ENreport")]
public static extern int ENreport();
[DllImport(EPANETDLL, EntryPoint = "ENcopyreport")]
public static extern int ENcopyreport(string filename);
[DllImport(EPANETDLL, EntryPoint = "ENclearreport")]
public static extern int ENclearreport();
[DllImport(EPANETDLL, EntryPoint = "ENresetreport")]
public static extern int ENresetreport();
[DllImport(EPANETDLL, EntryPoint = "ENsetreport")]
public static extern int ENsetreport(string format);
[DllImport(EPANETDLL, EntryPoint = "ENsetstatusreport")]
public static extern int ENsetstatusreport(int level);
[DllImport(EPANETDLL, EntryPoint = "ENgetcount")]
public static extern int ENgetcount(int code, ref int count);
[DllImport(EPANETDLL, EntryPoint = "ENgeterror")]
public static extern int ENgeterror(int errcode, string errmsg, int maxLen);
[DllImport(EPANETDLL, EntryPoint = "ENgetstatistic")]
public static extern int ENgetstatistic(int type, ref int value);
[DllImport(EPANETDLL, EntryPoint = "ENgetresultindex")]
public static extern int ENgetresultindex(int type, int index, ref int value);
//Analysis Options Functions
[DllImport(EPANETDLL, EntryPoint = "ENgetoption")]
public static extern int ENgetoption(int option, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetoption")]
public static extern int ENsetoption(int option, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENgetflowunits")]
public static extern int ENgetflowunits(ref int units);
[DllImport(EPANETDLL, EntryPoint = "ENsetflowunits")]
public static extern int ENsetflowunits(int units);
[DllImport(EPANETDLL, EntryPoint = "ENgettimeparam")]
public static extern int ENgettimeparam(int param, ref int value);
[DllImport(EPANETDLL, EntryPoint = "ENsettimeparam")]
public static extern int ENsettimeparam(int optioncode, long value);
[DllImport(EPANETDLL, EntryPoint = "ENgetqualinfo")]
public static extern int ENgetqualinfo(ref int qualType, string chemName, string chemUnits, ref int traceNode);
[DllImport(EPANETDLL, EntryPoint = "ENgetqualtype")]
public static extern int ENgetqualtype(ref int qualType, ref int traceNode);
[DllImport(EPANETDLL, EntryPoint = "ENsetqualtype")]
public static extern int ENsetqualtype(int qualType, string chemName, string chemUnits, string traceNode);
//Node Functions
[DllImport(EPANETDLL, EntryPoint = "ENaddnode")]
public static extern int ENaddnode(string id, int nodeType, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENdeletenode")]
public static extern int ENdeletenode(int index, int actionCode);
[DllImport(EPANETDLL, EntryPoint = "ENgetnodeindex")]
public static extern int ENgetnodeindex(string id, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetnodeid")]
public static extern int ENgetnodeid(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENsetnodeid")]
public static extern int ENsetnodeid(int index, string newid);
[DllImport(EPANETDLL, EntryPoint = "ENgetnodetype")]
public static extern int ENgetnodetype(int index, ref int nodeType);
[DllImport(EPANETDLL, EntryPoint = "ENgetnodevalue")]
public static extern int ENgetnodevalue(int index, int paramcode, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetnodevalue")]
public static extern int ENsetnodevalue(int index, int code, float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetjuncdata")]
public static extern int ENsetjuncdata(int index, float elev, float dmnd, string dmndpat);
[DllImport(EPANETDLL, EntryPoint = "ENsettankdata")]
public static extern int ENsettankdata(int index, float elev, float initlvl, float minlvl, float maxlvl, float diam, float minvol, string volcurve);
[DllImport(EPANETDLL, EntryPoint = "ENgetcoord")]
public static extern int ENgetcoord(int index, ref double x, ref double y);
[DllImport(EPANETDLL, EntryPoint = "ENsetcoord")]
public static extern int ENsetcoord(int index, double x, double y);
//Nodal Demand Functions
[DllImport(EPANETDLL, EntryPoint = "ENgetdemandmodel")]
public static extern int ENgetdemandmodel(ref int model, ref float pmin, ref float preq, ref float pexp);
[DllImport(EPANETDLL, EntryPoint = "ENsetdemandmodel")]
public static extern int ENsetdemandmodel(int model, float pmin, float preq, float pexp);
[DllImport(EPANETDLL, EntryPoint = "ENadddemand")]
public static extern int ENadddemand(int nodeIndex, float baseDemand, string demandPattern, string demandName);
[DllImport(EPANETDLL, EntryPoint = "ENdeletedemand")]
public static extern int ENdeletedemand(int nodeIndex, int demandIndex);
[DllImport(EPANETDLL, EntryPoint = "ENgetdemandindex")]
public static extern int ENgetdemandindex(int nodeIndex, string demandName, ref int demandIndex);
[DllImport(EPANETDLL, EntryPoint = "ENgetnumdemands")]
public static extern int ENgetnumdemands(int nodeIndex, ref int numDemands);
[DllImport(EPANETDLL, EntryPoint = "ENgetbasedemand")]
public static extern int ENgetbasedemand(int nodeIndex, int demandIndex, ref float baseDemand);
[DllImport(EPANETDLL, EntryPoint = "ENsetbasedemand")]
public static extern int ENsetbasedemand(int nodeIndex, int demandIndex, float baseDemand);
[DllImport(EPANETDLL, EntryPoint = "ENgetdemandpattern")]
public static extern int ENgetdemandpattern(int nodeIndex, int demandIndex, ref int patIndex);
[DllImport(EPANETDLL, EntryPoint = "ENsetdemandpattern")]
public static extern int ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex);
[DllImport(EPANETDLL, EntryPoint = "ENgetdemandname")]
public static extern int ENgetdemandname(int nodeIndex, int demandIndex, string demandName);
[DllImport(EPANETDLL, EntryPoint = "ENsetdemandname")]
public static extern int ENsetdemandname(int nodeIndex, int demandIndex, string demandName);
//Link Functions
[DllImport(EPANETDLL, EntryPoint = "ENaddlink")]
public static extern int ENaddlink(string id, int linkType, string fromNode, string toNode, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENdeletelink")]
public static extern int ENdeletelink(int index, int actionCode);
[DllImport(EPANETDLL, EntryPoint = "ENgetlinkindex")]
public static extern int ENgetlinkindex(string id, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetlinkid")]
public static extern int ENgetlinkid(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENsetlinkid")]
public static extern int ENsetlinkid(int index, string newid);
[DllImport(EPANETDLL, EntryPoint = "ENgetlinktype")]
public static extern int ENgetlinktype(int index, ref int linkType);
[DllImport(EPANETDLL, EntryPoint = "ENsetlinktype")]
public static extern int ENsetlinktype(ref int index, int linkType, int actionCode);
[DllImport(EPANETDLL, EntryPoint = "ENgetlinknodes")]
public static extern int ENgetlinknodes(int index, ref int node1, ref int node2);
[DllImport(EPANETDLL, EntryPoint = "ENsetlinknodes")]
public static extern int ENsetlinknodes(int index, int node1, int node2);
[DllImport(EPANETDLL, EntryPoint = "ENgetlinkvalue")]
public static extern int ENgetlinkvalue(int index, int code, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetlinkvalue")]
public static extern int ENsetlinkvalue(int index, int code, float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetpipedata")]
public static extern int ENsetpipedata(int index, float length, float diam, float rough, float mloss);
[DllImport(EPANETDLL, EntryPoint = "ENgetvertexcount")]
public static extern int ENgetvertexcount(int index, ref int count);
[DllImport(EPANETDLL, EntryPoint = "ENgetvertex")]
public static extern int ENgetvertex(int index, int vertex, ref double x, ref double y);
[DllImport(EPANETDLL, EntryPoint = "ENsetvertices")]
public static extern int ENsetvertices(int index, ref double[] x, ref double[] y, int count);
//Pump Functions
[DllImport(EPANETDLL, EntryPoint = "ENgetheadcurveindex")]
public static extern int ENgetheadcurveindex(int linkIndex, ref int curveIndex);
[DllImport(EPANETDLL, EntryPoint = "ENsetheadcurveindex")]
public static extern int ENsetheadcurveindex(int linkIndex, int curveIndex);
[DllImport(EPANETDLL, EntryPoint = "ENgetpumptype")]
public static extern int ENgetpumptype(int linkIndex, ref int pumpType);
//Time Pattern Functions
[DllImport(EPANETDLL, EntryPoint = "ENaddpattern")]
public static extern int ENaddpattern(string id);
[DllImport(EPANETDLL, EntryPoint = "ENdeletepattern")]
public static extern int ENdeletepattern(int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetpatternindex")]
public static extern int ENgetpatternindex(string id, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetpatternid")]
public static extern int ENgetpatternid(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENsetpatternid")]
public static extern int ENsetpatternid(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENgetpatternlen")]
public static extern int ENgetpatternlen(int index, ref int len);
[DllImport(EPANETDLL, EntryPoint = "ENgetpatternvalue")]
public static extern int ENgetpatternvalue(int index, int period, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetpatternvalue")]
public static extern int ENsetpatternvalue(int index, int period, float value);
[DllImport(EPANETDLL, EntryPoint = "ENgetaveragepatternvalue")]
public static extern int ENgetaveragepatternvalue(int index, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetpattern")]
public static extern int ENsetpattern(int index, ref float[] values, int len);
//Data Curve Functions
[DllImport(EPANETDLL, EntryPoint = "ENaddcurve")]
public static extern int ENaddcurve(string id);
[DllImport(EPANETDLL, EntryPoint = "ENdeletecurve")]
public static extern int ENdeletecurve(int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetcurveindex")]
public static extern int ENgetcurveindex(string id, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetcurveid")]
public static extern int ENgetcurveid(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENsetcurveid")]
public static extern int ENsetcurveid(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENgetcurvelen")]
public static extern int ENgetcurvelen(int index, ref int len);
[DllImport(EPANETDLL, EntryPoint = "ENgetcurvetype")]
public static extern int ENgetcurvetype(int index, ref int type);
[DllImport(EPANETDLL, EntryPoint = "ENgetcurvevalue")]
public static extern int ENgetcurvevalue(int curveIndex, int pointIndex, ref float x, ref float y);
[DllImport(EPANETDLL, EntryPoint = "ENsetcurvevalue")]
public static extern int ENsetcurvevalue(int curveIndex, int pointIndex, float x, float y);
[DllImport(EPANETDLL, EntryPoint = "ENgetcurve")]
public static extern int ENgetcurve(int index, string id, ref int nPoints, ref float xValues, ref float yValues);
[DllImport(EPANETDLL, EntryPoint = "ENsetcurve")]
public static extern int ENsetcurve(int index, ref float[] xValues, ref float[] yValues, int nPoints);
//Simple Control Functions
[DllImport(EPANETDLL, EntryPoint = "ENaddcontrol")]
public static extern int ENaddcontrol(int type, int linkIndex, float setting, int nodeIndex, float level, ref int index);
[DllImport(EPANETDLL, EntryPoint = "ENdeletecontrol")]
public static extern int ENdeletecontrol(int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetcontrol")]
public static extern int ENgetcontrol(int index, ref int type, ref int linkIndex, ref float setting, ref int nodeIndex, ref float level);
[DllImport(EPANETDLL, EntryPoint = "ENsetcontrol")]
public static extern int ENsetcontrol(int index, int type, int linkIndex, float setting, int nodeIndex, float level);
//Rule-Based Control Functions
[DllImport(EPANETDLL, EntryPoint = "ENaddrule")]
public static extern int ENaddrule(string rule);
[DllImport(EPANETDLL, EntryPoint = "ENdeleterule")]
public static extern int ENdeleterule(int index);
[DllImport(EPANETDLL, EntryPoint = "ENgetrule")]
public static extern int ENgetrule(int index, ref int nPremises, ref int nThenActions, ref int nElseActions, ref float priority);
[DllImport(EPANETDLL, EntryPoint = "ENgetruleID")]
public static extern int ENgetruleID(int index, string id);
[DllImport(EPANETDLL, EntryPoint = "ENsetrulepriority")]
public static extern int ENsetcurvENsetrulepriorityeid(int index, float priority);
[DllImport(EPANETDLL, EntryPoint = "ENgetpremise")]
public static extern int ENgetpremise(int ruleIndex, int premiseIndex, ref int logop, ref int objectt, ref int objIndex, ref int variable, ref int relop, ref int status, ref float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetpremise")]
public static extern int ENsetpremise(int ruleIndex, int premiseIndex, int logop, int objectt, int objIndex, int variable, int relop, int status, float value);
[DllImport(EPANETDLL, EntryPoint = "ENsetpremiseindex")]
public static extern int ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex);
[DllImport(EPANETDLL, EntryPoint = "ENsetpremisestatus")]
public static extern int ENsetpremisestatus(int ruleIndex, int premiseIndex, int status);
[DllImport(EPANETDLL, EntryPoint = "ENsetpremisevalue")]
public static extern int ENsetpremisevalue(int ruleIndex, int premiseIndex, float value);
[DllImport(EPANETDLL, EntryPoint = "ENgetthenaction")]
public static extern int ENgetthenaction(int ruleIndex, int actionIndex, ref int linkIndex, ref int status, ref float setting);
[DllImport(EPANETDLL, EntryPoint = "ENsetthenaction")]
public static extern int ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex, int status, float setting);
[DllImport(EPANETDLL, EntryPoint = "ENgetelseaction")]
public static extern int ENgetelseaction(int ruleIndex, int actionIndex, ref int linkIndex, ref int status, ref float setting);
[DllImport(EPANETDLL, EntryPoint = "ENsetelseaction")]
public static extern int ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex, int status, float setting);
#endregion
}
}