remove old files
This commit is contained in:
@@ -1,332 +0,0 @@
|
|||||||
#include <map>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "testLemonTiger.h"
|
|
||||||
#include "toolkit.h"
|
|
||||||
|
|
||||||
#define COLW 15
|
|
||||||
#define OUTPRECISION 6
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
double head;
|
|
||||||
double demand;
|
|
||||||
double quality;
|
|
||||||
} nodeState_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
double flow;
|
|
||||||
} linkState_t;
|
|
||||||
|
|
||||||
typedef map<int, nodeState_t> networkNodeState_t; // nodeIndex, state
|
|
||||||
typedef map<int, linkState_t> networkLinkState_t; // linkIndex, state
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
networkNodeState_t nodeState;
|
|
||||||
networkLinkState_t linkState;
|
|
||||||
} networkState_t;
|
|
||||||
typedef map<long, networkState_t> result_t; // time, networkState
|
|
||||||
// access results by, for instance, resultsContainer[time][nodeIndex].head
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void checkErr(int err, std::string function);
|
|
||||||
void saveHydResults(networkState_t* networkState);
|
|
||||||
void saveQualResults(networkState_t* networkState);
|
|
||||||
void printResults(result_t* state1, result_t* state2, std::ostream& out);
|
|
||||||
void compare(result_t* results1, result_t* results2, std::ostream &out);
|
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
|
||||||
|
|
||||||
// create storage structures for results.
|
|
||||||
result_t epanetResults, lemonTigerResults;
|
|
||||||
|
|
||||||
cout << "Lemon Tiger TEST" << endl
|
|
||||||
<< "________________" << endl;
|
|
||||||
|
|
||||||
|
|
||||||
long simulationTime = 0;
|
|
||||||
long nextEventH = 0, nextEventQ = 0;
|
|
||||||
long simTimeRemaining = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
/* Batch solver (old epanet) */
|
|
||||||
cout << "*****Original EPANET results******" << endl;
|
|
||||||
checkErr( ENopen(argv[1], argv[2], (char*)""), "ENopen" );
|
|
||||||
|
|
||||||
checkErr( ENopenH(), "ENopenH" );
|
|
||||||
checkErr( ENinitH(EN_SAVE), "ENinitH" );
|
|
||||||
|
|
||||||
cout << "Running hydraulics..." << endl;
|
|
||||||
do {
|
|
||||||
|
|
||||||
/* Solve for hydraulics & advance to next time period */
|
|
||||||
checkErr( ENrunH(&simulationTime), "ENrunH" );
|
|
||||||
checkErr( ENnextH(&nextEventH), "ENnextH" );
|
|
||||||
|
|
||||||
// gather hydraulic results
|
|
||||||
saveHydResults(&epanetResults[simulationTime]);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} while (nextEventH > 0);
|
|
||||||
// hydraulics are done
|
|
||||||
checkErr( ENcloseH(), "ENcloseH" );
|
|
||||||
cout << "\t\t\tdone." << endl;
|
|
||||||
cout << "Running WQ..." << endl;
|
|
||||||
|
|
||||||
checkErr( ENopenQ(), "ENopenQ" );
|
|
||||||
checkErr( ENinitQ(EN_NOSAVE), "ENinitQ" );
|
|
||||||
|
|
||||||
do {
|
|
||||||
|
|
||||||
checkErr( ENrunQ(&simulationTime), "ENrunQ" );
|
|
||||||
checkErr( ENnextQ(&nextEventH), "ENstepQ" );
|
|
||||||
|
|
||||||
// gather quality results
|
|
||||||
saveQualResults(&epanetResults[simulationTime]);
|
|
||||||
|
|
||||||
} while (nextEventH > 0);
|
|
||||||
// water quality is done
|
|
||||||
checkErr( ENcloseQ(), "ENcloseQ" );
|
|
||||||
cout << "\t\t\tdone." << endl;
|
|
||||||
|
|
||||||
// everything is done
|
|
||||||
checkErr( ENclose(), "ENclose" );
|
|
||||||
|
|
||||||
|
|
||||||
nextEventH = 0;
|
|
||||||
simTimeRemaining = 0;
|
|
||||||
simulationTime = 0;
|
|
||||||
|
|
||||||
/* stepwise solver (LemonTiger) */
|
|
||||||
cout << "*****LemonTiger results******" << endl;
|
|
||||||
|
|
||||||
checkErr( ENopen(argv[1], argv[2], (char*)""), "ENopen" );
|
|
||||||
|
|
||||||
checkErr( ENopenH(), "ENopenH" );
|
|
||||||
checkErr( ENinitH(EN_NOSAVE), "ENinitH" );
|
|
||||||
checkErr( ENopenQ(), "ENopenQ" );
|
|
||||||
checkErr( ENinitQ(EN_NOSAVE), "ENinitQ" );
|
|
||||||
|
|
||||||
cout << "Running stepwise hydraulics and water quality..." << endl;
|
|
||||||
do {
|
|
||||||
/* Solve for hydraulics & advance to next time period */
|
|
||||||
checkErr( ENrunH(&simulationTime), "ENrunH" );
|
|
||||||
checkErr( ENrunQ(&simulationTime), "ENrunQ" );
|
|
||||||
|
|
||||||
checkErr( ENnextH(&nextEventH), "ENnextH" );
|
|
||||||
checkErr( ENnextQ(&nextEventQ), "ENstepQ" );
|
|
||||||
|
|
||||||
|
|
||||||
saveHydResults(&lemonTigerResults[simulationTime]);
|
|
||||||
saveQualResults(&lemonTigerResults[simulationTime]);
|
|
||||||
|
|
||||||
|
|
||||||
} while (nextEventH > 0);
|
|
||||||
cout << "\t\t\tdone." << endl;
|
|
||||||
|
|
||||||
// all done
|
|
||||||
checkErr( ENcloseH(), "ENcloseH" );
|
|
||||||
checkErr( ENcloseQ(), "ENcloseQ" );
|
|
||||||
checkErr( ENclose(), "ENclose" );
|
|
||||||
|
|
||||||
|
|
||||||
// summarize the results
|
|
||||||
printResults(&epanetResults, &lemonTigerResults, cout);
|
|
||||||
compare(&epanetResults, &lemonTigerResults, cout);
|
|
||||||
|
|
||||||
} catch (int err) {
|
|
||||||
cerr << "exiting with error " << err << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void saveHydResults(networkState_t* networkState) {
|
|
||||||
int nNodes, nLinks;
|
|
||||||
float head, demand, flow;
|
|
||||||
ENgetcount(EN_NODECOUNT, &nNodes);
|
|
||||||
ENgetcount(EN_LINKCOUNT, &nLinks);
|
|
||||||
for (int iNode = 1; iNode <= nNodes; ++iNode) {
|
|
||||||
ENgetnodevalue(iNode, EN_HEAD, &head);
|
|
||||||
ENgetnodevalue(iNode, EN_DEMAND, &demand);
|
|
||||||
(*networkState).nodeState[iNode].head = head;
|
|
||||||
(*networkState).nodeState[iNode].demand = demand;
|
|
||||||
}
|
|
||||||
for (int iLink = 1; iLink <= nLinks; ++iLink) {
|
|
||||||
ENgetlinkvalue(iLink, EN_FLOW, &flow);
|
|
||||||
(*networkState).linkState[iLink].flow = flow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void saveQualResults(networkState_t* networkState) {
|
|
||||||
int nNodes;
|
|
||||||
float quality;
|
|
||||||
ENgetcount(EN_NODECOUNT, &nNodes);
|
|
||||||
|
|
||||||
for (int iNode = 1; iNode <= nNodes; iNode++) {
|
|
||||||
ENgetnodevalue(iNode, EN_QUALITY, &quality);
|
|
||||||
(*networkState).nodeState[iNode].quality = quality;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void printResults(result_t* results1, result_t* results2, std::ostream &out) {
|
|
||||||
|
|
||||||
result_t::const_iterator resultIterator;
|
|
||||||
|
|
||||||
for (resultIterator = (*results1).begin(); resultIterator != (*results1).end(); ++resultIterator) {
|
|
||||||
// get the current frame
|
|
||||||
const long time = resultIterator->first;
|
|
||||||
const networkNodeState_t networkNodeState1= resultIterator->second.nodeState;
|
|
||||||
//nodeState1 = resultIterator->second.nodeState;
|
|
||||||
const networkLinkState_t networkLinkState1 = resultIterator->second.linkState;
|
|
||||||
//linkState1 = resultIterator->second.linkState;
|
|
||||||
|
|
||||||
// see if this time is indexed in the second state container
|
|
||||||
if ((*results2).find(time) == (*results2).end()) {
|
|
||||||
// nope.
|
|
||||||
out << "time " << time << " not found in second result set" << endl;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// get the second result set's state
|
|
||||||
const networkNodeState_t networkNodeState2 = (*results2)[time].nodeState;
|
|
||||||
const networkLinkState_t networkLinkState2 = (*results2)[time].linkState;
|
|
||||||
// print the current simulation time
|
|
||||||
out << left;
|
|
||||||
out << setfill('*') << setw(100) << "*" << endl;
|
|
||||||
out << setfill(' ');
|
|
||||||
out << setw(4) << "T = " << setw(6) << time;
|
|
||||||
out << "|" << setw(3*COLW) << "EPANET";
|
|
||||||
out << "|" << setw(3*COLW) << "LemonTiger" << endl;
|
|
||||||
out << setw(10) << "Index" << "|";
|
|
||||||
out << setw(COLW) << "Demand" << setw(COLW) << "Head" << setw(COLW) << "Quality" << "|";
|
|
||||||
out << setw(COLW) << "Demand" << setw(COLW) << "Head" << setw(COLW) << "Quality" << endl;
|
|
||||||
out << setprecision(OUTPRECISION);
|
|
||||||
|
|
||||||
// loop through the nodes in the networkState objs, and print out the results for this time period
|
|
||||||
networkNodeState_t::const_iterator networkNodeIterator;
|
|
||||||
for (networkNodeIterator = networkNodeState1.begin(); networkNodeIterator != networkNodeState1.end(); ++networkNodeIterator) {
|
|
||||||
int nodeIndex = networkNodeIterator->first;
|
|
||||||
// trusting that all nodes are present...
|
|
||||||
const nodeState_t nodeState1 = networkNodeIterator->second;
|
|
||||||
const nodeState_t nodeState2 = networkNodeState2.at(nodeIndex);
|
|
||||||
|
|
||||||
if (nodeState1.quality != nodeState2.quality ) {
|
|
||||||
// epanet
|
|
||||||
out << setw(10) << nodeIndex << "|";
|
|
||||||
out << setw(COLW) << nodeState1.demand;
|
|
||||||
out << setw(COLW) << nodeState1.head;
|
|
||||||
out << setw(COLW) << nodeState1.quality;
|
|
||||||
|
|
||||||
// lemontiger
|
|
||||||
out << "|";
|
|
||||||
out << setw(COLW) << nodeState2.demand;
|
|
||||||
out << setw(COLW) << nodeState2.head;
|
|
||||||
out << setw(COLW) << nodeState2.quality;
|
|
||||||
out << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
networkLinkState_t::const_iterator networkLinkIterator;
|
|
||||||
for (networkLinkIterator = networkLinkState1.begin(); networkLinkIterator != networkLinkState1.end(); ++networkLinkIterator) {
|
|
||||||
int linkIndex = networkLinkIterator->first;
|
|
||||||
// trusting that all nodes are present...
|
|
||||||
const linkState_t linkState1 = networkLinkIterator->second;
|
|
||||||
const linkState_t linkState2 = networkLinkState2.at(linkIndex);
|
|
||||||
|
|
||||||
if ( linkState1.flow != linkState2.flow ) {
|
|
||||||
// epanet
|
|
||||||
out << setw(10) << linkIndex << "|";
|
|
||||||
out << setw(COLW) << linkState1.flow;
|
|
||||||
|
|
||||||
// lemontiger
|
|
||||||
out << "|";
|
|
||||||
out << setw(COLW) << linkState2.flow;
|
|
||||||
out << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void compare(result_t* results1, result_t* results2, std::ostream &out) {
|
|
||||||
|
|
||||||
double sumHeadDiff=0, sumDemandDiff=0, sumQualDiff=0, sumFlowDiff=0;
|
|
||||||
|
|
||||||
result_t::const_iterator resultIterator;
|
|
||||||
|
|
||||||
for (resultIterator = (*results1).begin(); resultIterator != (*results1).end(); ++resultIterator) {
|
|
||||||
// get the current frame
|
|
||||||
const long time = resultIterator->first;
|
|
||||||
const networkNodeState_t nodeState1 = resultIterator->second.nodeState;
|
|
||||||
const networkLinkState_t linkState1 = resultIterator->second.linkState;
|
|
||||||
|
|
||||||
// see if this time is indexed in the second state container
|
|
||||||
if ((*results2).find(time) == (*results2).end()) {
|
|
||||||
// nope.
|
|
||||||
out << "time " << time << " not found in second result set" << endl;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// get the second result set's state
|
|
||||||
const networkNodeState_t networkNodeState2 = (*results2)[time].nodeState;
|
|
||||||
const networkLinkState_t networkLinkState2 = (*results2)[time].linkState;
|
|
||||||
double qualD=0;
|
|
||||||
|
|
||||||
networkNodeState_t::const_iterator networkNodeIterator;
|
|
||||||
for (networkNodeIterator = nodeState1.begin(); networkNodeIterator != nodeState1.end(); ++networkNodeIterator) {
|
|
||||||
int nodeIndex = networkNodeIterator->first;
|
|
||||||
// trusting that all nodes are present...
|
|
||||||
const nodeState_t nodeState1 = networkNodeIterator->second;
|
|
||||||
const nodeState_t nodeState2 = networkNodeState2.at(nodeIndex);
|
|
||||||
|
|
||||||
sumHeadDiff += fabs(nodeState1.head - nodeState2.head);
|
|
||||||
sumDemandDiff += fabs(nodeState1.demand - nodeState2.demand);
|
|
||||||
|
|
||||||
qualD += fabs(nodeState1.quality - nodeState2.quality);
|
|
||||||
}
|
|
||||||
//out << "T: " << time << " dq: " << setprecision(20) << qualD << endl;
|
|
||||||
sumQualDiff += qualD;
|
|
||||||
|
|
||||||
networkLinkState_t::const_iterator networkLinkIterator;
|
|
||||||
for (networkLinkIterator = linkState1.begin(); networkLinkIterator != linkState1.end(); ++networkLinkIterator) {
|
|
||||||
int linkIndex = networkLinkIterator->first;
|
|
||||||
// trusting that all nodes are present...
|
|
||||||
const linkState_t linkState1 = networkLinkIterator->second;
|
|
||||||
const linkState_t linkState2 = networkLinkState2.at(linkIndex);
|
|
||||||
|
|
||||||
sumFlowDiff += fabs(linkState1.flow - linkState2.flow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int c1 = 18;
|
|
||||||
int p = 20;
|
|
||||||
out << setw(c1) << "Head Diff:" << setprecision(p) << sumHeadDiff << endl;
|
|
||||||
out << setw(c1) << "Demand Diff:" << setprecision(p) << sumDemandDiff << endl;
|
|
||||||
out << setw(c1) << "Quality Diff:" << setprecision(p) << sumQualDiff << endl;
|
|
||||||
out << setw(c1) << "Flow Diff:" << setprecision(p) << sumFlowDiff << endl;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void checkErr(int err, std::string function) {
|
|
||||||
if (err > 0) {
|
|
||||||
cerr << "Error in " << function << ": " << err << endl;
|
|
||||||
char errmsg[1024];
|
|
||||||
ENgeterror(err, errmsg, 1024);
|
|
||||||
cerr << errmsg << endl;
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// testLemonTiger.h
|
|
||||||
// epanet
|
|
||||||
//
|
|
||||||
// Created by Sam Hatchett on 2/1/13.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef __epanet__testLemonTiger__
|
|
||||||
#define __epanet__testLemonTiger__
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#endif /* defined(__epanet__testLemonTiger__) */
|
|
||||||
255
src/toolkit.h
255
src/toolkit.h
@@ -1,255 +0,0 @@
|
|||||||
/*
|
|
||||||
*******************************************************************
|
|
||||||
|
|
||||||
TOOLKIT.H - Prototypes for EPANET Functions Exported to DLL Toolkit
|
|
||||||
|
|
||||||
VERSION: 2.00
|
|
||||||
DATE: 5/8/00
|
|
||||||
10/25/00
|
|
||||||
3/1/01
|
|
||||||
8/15/07 (2.00.11)
|
|
||||||
2/14/08 (2.00.12)
|
|
||||||
AUTHOR: L. Rossman
|
|
||||||
US EPA - NRMRL
|
|
||||||
|
|
||||||
*******************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef DLLEXPORT
|
|
||||||
#ifdef DLL
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define DLLEXPORT extern "C" __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define DLLEXPORT __declspec(dllexport) __stdcall
|
|
||||||
#endif
|
|
||||||
#elif defined(CYGWIN)
|
|
||||||
#define DLLEXPORT __stdcall
|
|
||||||
#else
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define DLLEXPORT
|
|
||||||
#else
|
|
||||||
#define DLLEXPORT
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// --- Define the EPANET toolkit constants
|
|
||||||
|
|
||||||
#define EN_ELEVATION 0 /* Node parameters */
|
|
||||||
#define EN_BASEDEMAND 1
|
|
||||||
#define EN_PATTERN 2
|
|
||||||
#define EN_EMITTER 3
|
|
||||||
#define EN_INITQUAL 4
|
|
||||||
#define EN_SOURCEQUAL 5
|
|
||||||
#define EN_SOURCEPAT 6
|
|
||||||
#define EN_SOURCETYPE 7
|
|
||||||
#define EN_TANKLEVEL 8
|
|
||||||
#define EN_DEMAND 9
|
|
||||||
#define EN_HEAD 10
|
|
||||||
#define EN_PRESSURE 11
|
|
||||||
#define EN_QUALITY 12
|
|
||||||
#define EN_SOURCEMASS 13
|
|
||||||
#define EN_INITVOLUME 14
|
|
||||||
#define EN_MIXMODEL 15
|
|
||||||
#define EN_MIXZONEVOL 16
|
|
||||||
|
|
||||||
#define EN_TANKDIAM 17
|
|
||||||
#define EN_MINVOLUME 18
|
|
||||||
#define EN_VOLCURVE 19
|
|
||||||
#define EN_MINLEVEL 20
|
|
||||||
#define EN_MAXLEVEL 21
|
|
||||||
#define EN_MIXFRACTION 22
|
|
||||||
#define EN_TANK_KBULK 23
|
|
||||||
#define EN_TANKVOLUME 24
|
|
||||||
#define EN_MAXVOLUME 25
|
|
||||||
|
|
||||||
#define EN_DIAMETER 0 /* Link parameters */
|
|
||||||
#define EN_LENGTH 1
|
|
||||||
#define EN_ROUGHNESS 2
|
|
||||||
#define EN_MINORLOSS 3
|
|
||||||
#define EN_INITSTATUS 4
|
|
||||||
#define EN_INITSETTING 5
|
|
||||||
#define EN_KBULK 6
|
|
||||||
#define EN_KWALL 7
|
|
||||||
#define EN_FLOW 8
|
|
||||||
#define EN_VELOCITY 9
|
|
||||||
#define EN_HEADLOSS 10
|
|
||||||
#define EN_STATUS 11
|
|
||||||
#define EN_SETTING 12
|
|
||||||
#define EN_ENERGY 13
|
|
||||||
#define EN_LINKQUAL 14 /* TNT */
|
|
||||||
#define EN_LINKPATTERN 15
|
|
||||||
|
|
||||||
#define EN_DURATION 0 /* Time parameters */
|
|
||||||
#define EN_HYDSTEP 1
|
|
||||||
#define EN_QUALSTEP 2
|
|
||||||
#define EN_PATTERNSTEP 3
|
|
||||||
#define EN_PATTERNSTART 4
|
|
||||||
#define EN_REPORTSTEP 5
|
|
||||||
#define EN_REPORTSTART 6
|
|
||||||
#define EN_RULESTEP 7
|
|
||||||
#define EN_STATISTIC 8
|
|
||||||
#define EN_PERIODS 9
|
|
||||||
#define EN_STARTTIME 10 /* Added TNT 10/2/2009 */
|
|
||||||
#define EN_HTIME 11
|
|
||||||
#define EN_HALTFLAG 12
|
|
||||||
#define EN_NEXTEVENT 13
|
|
||||||
|
|
||||||
#define EN_ITERATIONS 0
|
|
||||||
#define EN_RELATIVEERROR 1
|
|
||||||
|
|
||||||
#define EN_NODECOUNT 0 /* Component counts */
|
|
||||||
#define EN_TANKCOUNT 1
|
|
||||||
#define EN_LINKCOUNT 2
|
|
||||||
#define EN_PATCOUNT 3
|
|
||||||
#define EN_CURVECOUNT 4
|
|
||||||
#define EN_CONTROLCOUNT 5
|
|
||||||
|
|
||||||
#define EN_JUNCTION 0 /* Node types */
|
|
||||||
#define EN_RESERVOIR 1
|
|
||||||
#define EN_TANK 2
|
|
||||||
|
|
||||||
#define EN_CVPIPE 0 /* Link types. */
|
|
||||||
#define EN_PIPE 1 /* See LinkType in TYPES.H */
|
|
||||||
#define EN_PUMP 2
|
|
||||||
#define EN_PRV 3
|
|
||||||
#define EN_PSV 4
|
|
||||||
#define EN_PBV 5
|
|
||||||
#define EN_FCV 6
|
|
||||||
#define EN_TCV 7
|
|
||||||
#define EN_GPV 8
|
|
||||||
|
|
||||||
#define EN_NONE 0 /* Quality analysis types. */
|
|
||||||
#define EN_CHEM 1 /* See QualType in TYPES.H */
|
|
||||||
#define EN_AGE 2
|
|
||||||
#define EN_TRACE 3
|
|
||||||
|
|
||||||
#define EN_CONCEN 0 /* Source quality types. */
|
|
||||||
#define EN_MASS 1 /* See SourceType in TYPES.H. */
|
|
||||||
#define EN_SETPOINT 2
|
|
||||||
#define EN_FLOWPACED 3
|
|
||||||
|
|
||||||
#define EN_CFS 0 /* Flow units types. */
|
|
||||||
#define EN_GPM 1 /* See FlowUnitsType */
|
|
||||||
#define EN_MGD 2 /* in TYPES.H. */
|
|
||||||
#define EN_IMGD 3
|
|
||||||
#define EN_AFD 4
|
|
||||||
#define EN_LPS 5
|
|
||||||
#define EN_LPM 6
|
|
||||||
#define EN_MLD 7
|
|
||||||
#define EN_CMH 8
|
|
||||||
#define EN_CMD 9
|
|
||||||
|
|
||||||
#define EN_TRIALS 0 /* Misc. options */
|
|
||||||
#define EN_ACCURACY 1
|
|
||||||
#define EN_TOLERANCE 2
|
|
||||||
#define EN_EMITEXPON 3
|
|
||||||
#define EN_DEMANDMULT 4
|
|
||||||
|
|
||||||
#define EN_LOWLEVEL 0 /* Control types. */
|
|
||||||
#define EN_HILEVEL 1 /* See ControlType */
|
|
||||||
#define EN_TIMER 2 /* in TYPES.H. */
|
|
||||||
#define EN_TIMEOFDAY 3
|
|
||||||
|
|
||||||
#define EN_AVERAGE 1 /* Time statistic types. */
|
|
||||||
#define EN_MINIMUM 2 /* See TstatType in TYPES.H */
|
|
||||||
#define EN_MAXIMUM 3
|
|
||||||
#define EN_RANGE 4
|
|
||||||
|
|
||||||
#define EN_MIX1 0 /* Tank mixing models */
|
|
||||||
#define EN_MIX2 1
|
|
||||||
#define EN_FIFO 2
|
|
||||||
#define EN_LIFO 3
|
|
||||||
|
|
||||||
#define EN_NOSAVE 0 /* Save-results-to-file flag */
|
|
||||||
#define EN_SAVE 1
|
|
||||||
|
|
||||||
#define EN_INITFLOW 10 /* Re-initialize flows flag */
|
|
||||||
|
|
||||||
#define EN_CONST_HP 0 /* constant horsepower */
|
|
||||||
#define EN_POWER_FUNC 1 /* power function */
|
|
||||||
#define EN_CUSTOM 2 /* user-defined custom curve */
|
|
||||||
|
|
||||||
// --- Declare the EPANET toolkit functions
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
int DLLEXPORT ENepanet(char *, char *, char *, void (*) (char *));
|
|
||||||
|
|
||||||
int DLLEXPORT ENopen(char *, char *, char *);
|
|
||||||
int DLLEXPORT ENsaveinpfile(char *);
|
|
||||||
int DLLEXPORT ENclose(void);
|
|
||||||
|
|
||||||
int DLLEXPORT ENsolveH(void);
|
|
||||||
int DLLEXPORT ENsaveH(void);
|
|
||||||
int DLLEXPORT ENopenH(void);
|
|
||||||
int DLLEXPORT ENinitH(int);
|
|
||||||
int DLLEXPORT ENrunH(long *);
|
|
||||||
int DLLEXPORT ENnextH(long *);
|
|
||||||
int DLLEXPORT ENcloseH(void);
|
|
||||||
int DLLEXPORT ENsavehydfile(char *);
|
|
||||||
int DLLEXPORT ENusehydfile(char *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENsolveQ(void);
|
|
||||||
int DLLEXPORT ENopenQ(void);
|
|
||||||
int DLLEXPORT ENinitQ(int);
|
|
||||||
int DLLEXPORT ENrunQ(long *);
|
|
||||||
int DLLEXPORT ENnextQ(long *);
|
|
||||||
int DLLEXPORT ENstepQ(long *);
|
|
||||||
int DLLEXPORT ENcloseQ(void);
|
|
||||||
|
|
||||||
int DLLEXPORT ENwriteline(char *);
|
|
||||||
int DLLEXPORT ENreport(void);
|
|
||||||
int DLLEXPORT ENresetreport(void);
|
|
||||||
int DLLEXPORT ENsetreport(char *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENgetcontrol(int, int *, int *, float *,
|
|
||||||
int *, float *);
|
|
||||||
int DLLEXPORT ENgetcount(int, int *);
|
|
||||||
int DLLEXPORT ENgetoption(int, float *);
|
|
||||||
int DLLEXPORT ENgettimeparam(int, long *);
|
|
||||||
int DLLEXPORT ENgetflowunits(int *);
|
|
||||||
int DLLEXPORT ENgetpatternindex(char *, int *);
|
|
||||||
int DLLEXPORT ENgetpatternid(int, char *);
|
|
||||||
int DLLEXPORT ENgetpatternlen(int, int *);
|
|
||||||
int DLLEXPORT ENgetpatternvalue(int, int, float *);
|
|
||||||
int DLLEXPORT ENgetqualtype(int *, int *);
|
|
||||||
int DLLEXPORT ENgeterror(int, char *, int);
|
|
||||||
int DLLEXPORT ENgetstatistic(int code, int* value);
|
|
||||||
|
|
||||||
int DLLEXPORT ENgetnodeindex(char *, int *);
|
|
||||||
int DLLEXPORT ENgetnodeid(int, char *);
|
|
||||||
int DLLEXPORT ENgetnodetype(int, int *);
|
|
||||||
int DLLEXPORT ENgetnodevalue(int, int, float *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENgetnumdemands(int, int *);
|
|
||||||
int DLLEXPORT ENgetbasedemand(int, int, float *);
|
|
||||||
int DLLEXPORT ENgetdemandpattern(int, int, int *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENgetlinkindex(char *, int *);
|
|
||||||
int DLLEXPORT ENgetlinkid(int, char *);
|
|
||||||
int DLLEXPORT ENgetlinktype(int, int *);
|
|
||||||
int DLLEXPORT ENgetlinknodes(int, int *, int *);
|
|
||||||
int DLLEXPORT ENgetlinkvalue(int, int, float *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENgetcurve(int curveIndex, int *nValues, float **xValues, float **yValues);
|
|
||||||
int DLLEXPORT ENgetheadcurve(int, char *);
|
|
||||||
int DLLEXPORT ENgetpumptype(int, int *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENgetversion(int *);
|
|
||||||
|
|
||||||
int DLLEXPORT ENsetcontrol(int, int, int, float, int, float);
|
|
||||||
int DLLEXPORT ENsetnodevalue(int, int, float);
|
|
||||||
int DLLEXPORT ENsetlinkvalue(int, int, float);
|
|
||||||
int DLLEXPORT ENaddpattern(char *);
|
|
||||||
int DLLEXPORT ENsetpattern(int, float *, int);
|
|
||||||
int DLLEXPORT ENsetpatternvalue(int, int, float);
|
|
||||||
int DLLEXPORT ENsettimeparam(int, long);
|
|
||||||
int DLLEXPORT ENsetoption(int, float);
|
|
||||||
int DLLEXPORT ENsetstatusreport(int);
|
|
||||||
int DLLEXPORT ENsetqualtype(int, char *, char *, char *);
|
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Reference in New Issue
Block a user