Buscar

Epanet2.00

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

epanetingles.zip
EPANET/_DEISREG.ISR
[Admin Install]
Admin=1
Error=This installation can only be uninstalled by a user with administrative priviledges. Uninstallation will now exit.
EPANET/_ISREG32.DLL
EPANET/DeIsL1.isu
EPANET/EPANET2.CNT
:Base EPANET2.HLP
:Title EPANET 2 Help
1 Introduction
2 What is EPANET=What_is_EPANET
2 Hydraulic Modeling Capabilities=Hydraulic_Modeling_Capabilities
2 Water Quality Modeling Capabilities=Water_Quality_Modeling_Capabilities
2 Network Components=Network_Components
2 Water Quality Reactions=Water_Quality_Reactions
2 Steps in Using EPANET=Steps_in_Using_EPANET
1 EPANET's Workspace
2 Overview=EPANET_s_Workspace
2 Menu Bar=Menu_Bar
2 Toolbars=Toolbars
2 Status Bar=Status_Bar
2 Network Map=Network_Map
2 Database Browser=Database_Browser
2 Map Browser=Map_Browser
2 Property Editor=Property_Editor
1 Working with Projects
2 Overview=Working_with_Projects
2 Creating a New Project=Creating_a_New_Project
2 Opening an Existing Project=Opening_an_Existing_Project
2 Saving a Project=Saving_a_Project
2 Setting Project Defaults=Setting_Project_Defaults
2 Registering Calibration Data=Registering_Calibration_Data
2 Viewing a Project Summary=Viewing_a_Project_Summary
1 Working with Objects
2 Overview=Working_with_Objects
2 Types of Objects=Types_of_Objects
2 Adding an Object=Adding_an_Object
2 Selecting an Object=Selecting_an_Object
2 Editing an Object=Editing_an_Object
2 Copying and Pasting Object Properties=Copying_and_Pasting_Objects
2 Deleting an Object=Deleting_an_Object
2 Moving an Object=Moving_an_Object
2 Selecting a Group of Objects=Selecting_a_Group_of_Objects
2 Editing a Group of Objects=Editing_a_Group_of_Objects
1 Working with the Map
2 Overview=Working_with_the_Map
2 Selecting a Map View=Selecting_a_Map_View
2 Setting the Map Scale=Setting_the_Map_Scale
2 Zooming the Map=Zooming_the_Map
2 Panning the Map=Panning_the_Map
2 Finding an Object=Finding_an_Object
2 Using the Map Legends=Map_Legends
2 Using the Overview Map=Overview_Map
2 Setting Map Display Options=Map_Display_Options
1 Analyzing a Network
2 Overview=Analyzing_a_Network
2 Setting Analysis Options=Setting_Analysis_Options
2 Running an Analysis=Running_an_Analysis
2 Troubleshooting Results=Troubleshooting_Results
1 Viewing Results
2 Overview=Viewing_Results
2 Viewing Results on the Map=Viewing_Results_on_the_Map
2 Viewing Results with a Graph=Viewing_Results_with_a_Graph
2 Viewing Results with a Table=Viewing_Results_with_a_Table
2 Viewing a Report=Viewing_a_Report
1 Printing
2 Overview=Printing
2 Selecting a Printer=Selecting_a_Printer
2 Setting the Page Format=Setting_the_Page_Format
2 Previewing the page=Print_Preview
2 Printing the Current View=Printing_the_Current_View
1 Importing and Exporting
2 Overview=Importing_and_Exporting
2 Project Scenarios=Project_Scenarios
2 Importing a Scenario=Importing_a_Scenario
2 Exporting a Scenario=Exporting_a_Scenario
2 Importing a Partial Network=Importing_a_Partial_Network
2 Importing a Network Map=Importing_a_Network_Map
2 Exporting the Map=Exporting_the_Map
2 Exporting to Text File=Exporting_to_Text_File
2 Copying to a File or the Clipboard=Copying_To
1 Frequently Asked Questions
2 Frequently Asked Questions=Frequently_Asked_Questions
1 Reference
2 Units of Measure=Units
2 Error Messages=Error_Messages
EPANET/EPANET2.DLL
EPANET/EPANET2.GID
EPANET/EPANET2.HLP
EPANET/Epanet4w.exe
EPANET/Networks/exercicio exemplo.net
EPANET/Networks/Net1.net
EPANET/Networks/NET1.WMF
EPANET/Networks/Net2.net
EPANET/Networks/Net2-FL.dat
;Measured Fluoride for Net2
;Node Hour	MG/L
11	2.50	1.02 
11 	5.38	0.87 
11	8.30	0.70 
11	11.75	1.01 
11	13.02	0.62 
11	14.48	0.26 
11	17.43	0.17 
11	20.30	0.20 
11	23.35	0.90 
11	27.00	0.13 
11	29.67	0.13 
11	33.70	0.54 
11	35.40	0.90 
11	38.30	0.17 
11	41.62	0.10 
11	44.42	0.12 
11	47.25	0.71 
11	51.00	0.13 
11	53.27	0.58 
19	0.25	1.04 
19	2.75	1.04 
19	5.70	1.08 
19	8.60	1.00 
19	12.00	0.81 
19	13.25	0.95 
19	14.73	1.02 
19	17.77	1.01 
19	20.52	0.87 
19	23.53	0.28 
19	27.17	0.98 
19	29.87	0.85 
19	33.92	0.12 
19	35.67	0.17 
19	38.48	0.64 
19	42.08	0.79 
19 	44.68	0.87 
19	47.50	0.16 
19	51.17	0.56 
19	53.45	0.70 
25	0.58	1.04 
	3.00	1.00 
	5.87	1.03 
	8.80	1.00 
	12.25	1.02 
	13.50	0.88 
	14.97	0.36 
	18.15	0.91 
	20.75	0.92 
	23.73	0.94 
	27.42	0.19 
	30.08	0.12 
	34.12	0.83 
	35.87	0.82 
	38.67	0.72 
	42.40	0.76 
	44.92	0.78 
	47.75	0.87 
	51.50	0.42 
	53.75	0.48
 34	2.67	1.03 
	5.50	1.04 
	8.45	0.98 
	11.87	1.01 
	13.15	1.02 
	14.62	1.04 
	17.60	1.02 
	20.42	1.02 
	23.43	1.00 
	27.08	1.02 
	29.75	0.94 
	33.82	0.89 
	35.53	0.75 
	38.40	0.80 
	41.85	0.84 
	44.55	0.92 
	47.42	0.91 
	51.08	0.81 
	53.37	0.47 
EPANET/Networks/Net3.net
EPANET/Networks/PGISB.NET
EPANET/Readme.txt
INSTALLATION NOTES FOR EPANET 2.0 BETA RELEASE
=================================================================
1. This is a beta test release of Version 2.0 of the EPANET
 Water Distribution System Modeling software and is intended
 to be used for evaluation purposes only. 
2. For current users of EPANET 1.1 refer to the What's New
 topic in the Help file (click Help | What's New on the
 main menu) to see how Version 2 differs from 1.1.
3. There is no Users Manual available yet for Version 2, but
 the on-line Help system is fairly extensive and should
 provide sufficient assistance in learning to use the
 program.
4. Several sample distribution system files are provided in
 the Networks folder which is located underneath the folder
 that EPANET is installed into.
5. To un-install the program, use the Add/Remove Programs item
 in the Windows Control Panel.
6. You can provide comments and bug reports to Lew Rossman at
 rossman.lewis@epa.gov.
================================================================= 
This computer program is being made available strictly for 
evaluation purposes only. Therefore the author and the U.S.
Environmental Protection Agency are not responsible and assume
no liability whatsoever for any results or any use made of the
results obtained from this program, nor for any damages or
litigation that result from the use of this program for any
purpose.
EN2Psetup.exe
EN2Psource.zip
Readme.txt
CONTENTS OF EN2SOURCE.ZIP
=========================
This archive contains source code for Version 2 of the EPANET
Pipe Network Analysis system. The code is contained in the
following three archive files:
 epanet2P.zip -- C-code that contains the numerical analysis
 functions used to solve network hydraulics
 and perform water quality routing. Should
 be compiled into a DLL named epanet2.dll
 for use with the EPANET program. Can also
 be compiled as a stand-alone console
 application. Files last updated on 12/6/01.
 epanet2wP.zip -- Inprise (Borland) Delphi code that comprises
 the graphical user interface (GUI) for the
 Windows version of EPANET 2. Should be
 compiled into an executable named epanet2w.exe
 for use with the EPANET program. Files last
 updated on 12/14/01.
 componentes.zip -- Custom Delphi components that must be
 installed into the Delphi IDE's component
 palette before working with the GUI code.
 Files last updated on 12/6/01.
epanet2P.zip
enumstxt.h
/*
***********************************************************************
ENUMSTXT.H -- Text strings for enumerated data types in EPANET 
 
VERSION: 2.00 
DATE: 5/8/00 
AUTHOR: L. Rossman 
 US EPA - NRMRL
 
**********************************************************************
*/
char *NodeTxt[] = {t_JUNCTION,
 t_RESERVOIR,
 t_TANK}; 
char *LinkTxt[] = {w_CV, 
 w_PIPE,
 w_PUMP,
 w_PRV,
 w_PSV,
 w_PBV,
 w_FCV,
 w_TCV,
 w_GPV};
char *StatTxt[] = {t_XHEAD,
 t_TEMPCLOSED,
 t_CLOSED,
 t_OPEN,
 t_ACTIVE,
 t_XFLOW,
 t_XFCV,
 t_XPRESSURE,
 t_FILLING,
 t_EMPTYING};
char *FormTxt[] = {w_HW,
 w_DW,
 w_CM};
char *RptFormTxt[] = {t_HW,
 t_DW,
 t_CM};
char *RptFlowUnitsTxt[] = {u_CFS,
 u_GPM,
 u_MGD,
 u_IMGD,
 u_AFD,
 u_LPS,
 u_LPM,
 u_MLD,
 u_CMH,
 u_CMD};
char *FlowUnitsTxt[] = {w_CFS,
 w_GPM, 
 w_MGD,
 w_IMGD,
 w_AFD,
 w_LPS, 
 w_LPM, 
 w_MLD, 
 w_CMH,
 w_CMD};
char *PressUnitsTxt[] = {w_PSI,
 w_KPA,
 w_METERS};
char *QualTxt[] = {w_NONE,
 w_CHEM,
 w_AGE,
 w_TRACE}; 
char *SourceTxt[] = {w_CONCEN,
 w_MASS,
 w_SETPOINT,
 w_FLOWPACED};
char *ControlTxt[] = {w_BELOW,
 w_ABOVE,
 w_TIME,
 w_CLOCKTIME};
char *TstatTxt[] = {w_NONE,
 w_AVG,
 w_MIN,
 w_MAX,
 w_RANGE};
char *MixTxt[] = {w_MIXED,
 w_2COMP,
 w_FIFO,
 w_LIFO, 
 NULL};
char *RptFlagTxt[] = {w_NO,
 w_YES,
 w_FULL};
char *SectTxt[] = {s_TITLE, s_JUNCTIONS, s_RESERVOIRS,
 s_TANKS, s_PIPES, s_PUMPS,
 s_VALVES, s_CONTROLS, s_RULES,
 s_DEMANDS, s_SOURCES, s_EMITTERS,
 s_PATTERNS, s_CURVES, s_QUALITY,
 s_STATUS, s_ROUGHNESS, s_ENERGY,
 s_REACTIONS, s_MIXING, s_REPORT,
 s_TIMES, s_OPTIONS, s_COORDS,
 s_VERTICES, s_LABELS, s_BACKDROP,
 s_TAGS, s_END,
 NULL};
char *RptSectTxt[] = {NULL, t_JUNCTION, t_RESERVOIR,
 t_TANK, t_PIPE, t_PUMP,
 t_VALVE, t_CONTROL, t_RULE,
 t_DEMANDFOR,t_SOURCE, t_EMITTER,
 t_PATTERN, t_CURVE, t_QUALITY,
 t_STATUS, t_ROUGHNESS,t_ENERGY,
 t_REACTION, t_MIXING, t_REPORT,
 t_TIME, t_OPTION};
char *Fldname[] = {t_ELEV, t_DEMAND, t_HEAD,
 t_PRESSURE, t_QUALITY, t_LENGTH,
 t_DIAM, t_FLOW, t_VELOCITY,
 t_HEADLOSS, t_LINKQUAL, t_LINKSTATUS,
 t_SETTING, t_REACTRATE, t_FRICTION,
 "", "", "", "", "", "", NULL};
char *LogoTxt[] = {LOGO1,LOGO2,LOGO3,LOGO4,LOGO5,LOGO6,NULL};
funcs.h
/*
**************************************************************************
 
FUNCS.H -- Function Prototypes for EPANET Program 
 
VERSION: 2.00
DATE: 5/8/00
 9/25/00
 10/25/00
 12/29/00
 3/1/01
AUTHOR: L. Rossman
 US EPA - NRMRL
 
**************************************************************************
*/
/* ------- EPANET.C --------------------*/
/*
** NOTE: The exportable functions that can be called
** via the DLL are prototyped in TOOLKIT.H.
*/
void initpointers(void); /* Initializes pointers */
int allocdata(void); /* Allocates memory */
void freeTmplist(STmplist *); /* Frees items in linked list */
void freeFloatlist(SFloatlist *); /* Frees list of floats */
void freedata(void); /* Frees allocated memory */
int openfiles(char *,char *,char *); /* Opens input & report files */
int openhydfile(void); /* Opens hydraulics file */
int openoutfile(void); /* Opens binary output file */
int strcomp(char *, char *); /* Compares two strings */
float interp(int, float *, /* Interpolates a data curve */
 float *, float);
int findnode(char *); /* Finds node's index from ID */
int findlink(char *); /* Finds link's index from ID */
char* geterrmsg(int); /* Gets text of error message */
void errmsg(int); /* Reports program error */
void writecon(char *); /* Writes text to console */
void writewin(char *); /* Passes text to calling app */
/* ------- INPUT1.C --------------------*/
int getdata(void); /* Gets network data */
void setdefaults(void); /* Sets default values */
void initreport(void); /* Initializes report options */
void adjustdata(void); /* Adjusts input data */
int inittanks(void); /* Initializes tank levels */
void initunits(void); /* Determines reporting units */
void convertunits(void); /* Converts data to std. units*/
/* -------- INPUT2.C -------------------*/
int netsize(void); /* Determines network size */
int readdata(void); /* Reads in network data */
int newline(int, char *); /* Processes new line of data */
int addnodeID(int, char *); /* Adds node ID to data base */
int addlinkID(int, char *); /* Adds link ID to data base */
int addpattern(char *); /* Adds pattern to data
base */
int addcurve(char *); /* Adds curve to data base */
STmplist *findID(char *, STmplist *); /* Locates ID on linked list */
int unlinked(void); /* Checks for unlinked nodes */
int getpumpparams(void); /* Computes pump curve coeffs.*/
int getpatterns(void); /* Gets pattern data from list*/
int getcurves(void); /* Gets curve data from list */
int findmatch(char *,char *[]); /* Finds keyword in line */
int match(char *, char *); /* Checks for word match */
int gettokens(char *); /* Tokenizes input line */
int getfloat(char *, float *); /* Converts string to float */
float hour(char *, char *); /* Converts time to hours */
int setreport(char *); /* Processes reporting command*/
void inperrmsg(int,int,char *); /* Input error message */
/* ---------- INPUT3.C -----------------*/
int juncdata(void); /* Processes junction data */
int tankdata(void); /* Processes tank data */
int pipedata(void); /* Processes pipe data */
int pumpdata(void); /* Processes pump data */
int valvedata(void); /* Processes valve data */
int patterndata(void); /* Processes pattern data */
int curvedata(void); /* Processes curve data */
int demanddata(void); /* Processes demand data */
int controldata(void); /* Processes simple controls */
int energydata(void); /* Processes energy data */
int sourcedata(void); /* Processes source data */
int emitterdata(void); /* Processes emitter data */
int qualdata(void); /* Processes quality data */
int reactdata(void); /* Processes reaction data */
int mixingdata(void); /* Processes tank mixing data */
int statusdata(void); /* Processes link status data */
int reportdata(void); /* Processes report options */
int timedata(void); /* Processes time options */
int optiondata(void); /* Processes analysis options */
int optionchoice(int); /* Processes option choices */
int optionvalue(int); /* Processes option values */
int getpumpcurve(int); /* Constructs a pump curve */
int powercurve(float, float, float, /* Coeffs. of power pump curve*/
 float, float, float *,
 float *, float *);
int valvecheck(int, int, int); /* Checks valve placement */
void changestatus(int, char, float); /* Changes status of a link */
/* -------------- RULES.C --------------*/
void initrules(void); /* Initializes rule base */
void addrule(char *); /* Adds rule to rule base */
int allocrules(void); /* Allocates memory for rule */
int ruledata(void); /* Processes rule input data */
int checkrules(long); /* Checks all rules */
void freerules(void); /* Frees rule base memory */ 
/* ------------- REPORT.C --------------*/
int writereport(void); /* Writes formatted report */
void writelogo(void); /* Writes program logo */
void writesummary(void); /* Writes network summary */
void writehydstat(int,float); /* Writes hydraulic status */
void writeenergy(void); /* Writes energy usage */
int writeresults(void); /* Writes node/link results */
void writeheader(int,int); /* Writes heading on report */
void writeline(char *); /* Writes line to report file */
void writerelerr(int, float); /* Writes convergence error */
void writestatchange(int,char,char); /* Writes link status change */
void writecontrolaction(int, int); /* Writes control action taken*/
void writeruleaction(int, char *); /* Writes rule action taken */
int writehydwarn(int,float); /* Writes hydraulic warnings */
void writehyderr(int); /* Writes hydraulic error msg.*/
int disconnected(void); /* Checks for disconnections */
void marknodes(int, int *, char *); /* Identifies connected nodes */
void getclosedlink(int, char *); /* Finds a disconnecting link */
void writelimits(int,int); /* Writes reporting limits */
int checklimits(float *,int,int); /* Checks variable limits */
void writetime(char *); /* Writes current clock time */
char *clocktime(char *, long); /* Converts time to hrs:min */
char *fillstr(char *, char, int); /* Fills string with character*/
int getnodetype(int); /* Determines node type */
/* --------- HYDRAUL.C -----------------*/
int openhyd(void); /* Opens hydraulics solver */
/*** Updated 3/1/01 ***/
void inithyd(int); /* Re-sets initial conditions */
int runhyd(long *); /* Solves 1-period hydraulics */
int nexthyd(long *); /* Moves to next time period */
void closehyd(void); /* Closes hydraulics solver */
int allocmatrix(void); /* Allocates matrix coeffs. */
void freematrix(void); /* Frees matrix coeffs. */
void initlinkflow(int, char, float); /* Initializes link flow */
void setlinkflow(int, float); /* Sets link flow via headloss*/
void setlinkstatus(int, char, char *, /* Sets link status */
 float *);
void setlinksetting(int, float, /* Sets pump/valve setting */
 char *, float *);
void resistance(int); /* Computes resistance coeff. */
void demands(void); /* Computes current demands */
int controls(void); /* Controls link settings */
long timestep(void); /* Computes new time step */
void tanktimestep(long *); /* Time till tanks fill/drain */
void controltimestep(long *); /* Time till control action */
void ruletimestep(long *); /* Time till rule action */
void addenergy(long); /* Accumulates energy usage */
void getenergy(int, float *, float *); /* Computes link energy use */
void tanklevels(long); /* Computes new tank levels */
float tankvolume(int,float); /* Finds tank vol. from grade */
float tankgrade(int,float); /* Finds tank grade from vol. */
int netsolve(int *,float *); /* Solves network equations */
int badvalve(int); /* Checks for bad valve */
int valvestatus(void); /* Updates valve status */
int linkstatus(void); /* Updates link status */
char cvstatus(char,float,float); /* Updates CV status */
char pumpstatus(int,float); /* Updates pump status */
char prvstatus(int,char,float, /* Updates PRV status */
 float,float);
char psvstatus(int,char,float, /* Updates PSV status */
 float,float);
char fcvstatus(int,char,float, /* Updates FCV status */
 float);
void tankstatus(int,int,int); /* Checks
if tank full/empty */
int pswitch(void); /* Pressure switch controls */
REAL newflows(void); /* Updates link flows */
void newcoeffs(void); /* Computes matrix coeffs. */
void linkcoeffs(void); /* Computes link coeffs. */
void nodecoeffs(void); /* Computes node coeffs. */
void valvecoeffs(void); /* Computes valve coeffs. */
void pipecoeff(int); /* Computes pipe coeff. */
REAL DWcoeff(int, REAL *); /* Computes D-W coeff. */
void pumpcoeff(int); /* Computes pump coeff. */
/*** Updated 10/25/00 ***/
/*** Updated 12/29/00 ***/
void curvecoeff(int,float,float *, /* Computes curve coeffs. */
 float *);
void gpvcoeff(int); /* Computes GPV coeff. */
void pbvcoeff(int); /* Computes PBV coeff. */
void tcvcoeff(int); /* Computes TCV coeff. */
void prvcoeff(int,int,int); /* Computes PRV coeff. */
void psvcoeff(int,int,int); /* Computes PSV coeff. */
void fcvcoeff(int,int,int); /* Computes FCV coeff. */
void emittercoeffs(void); /* Computes emitter coeffs. */
REAL emitflowchange(int); /* Computes new emitter flow */
/* ----------- SMATRIX.C ---------------*/
int createsparse(void); /* Creates sparse matrix */
int allocsparse(void); /* Allocates matrix memory */
void freesparse(void); /* Frees matrix memory */
int buildlists(int); /* Builds adjacency lists */
int paralink(int, int, int); /* Checks for parallel links */
void xparalinks(void); /* Removes parallel links */
void freelists(void); /* Frees adjacency lists */
void countdegree(void); /* Counts links at each node */
int reordernodes(void); /* Finds a node re-ordering */
int mindegree(int, int); /* Finds min. degree node */
int growlist(int); /* Augments adjacency list */
int newlink(Padjlist); /* Adds fill-ins for a node */
int linked(int, int); /* Checks if 2 nodes linked */
int addlink(int, int, int); /* Creates new fill-in */
int storesparse(int); /* Stores sparse matrix */
int ordersparse(int); /* Orders matrix storage */
void transpose(int,int *,int *, /* Transposes sparse matrix */
 int *,int *,int *,int *,int *);
int linsolve(int, REAL *, REAL *, /* Solution of linear eqns. */
 REAL *); /* via Cholesky factorization */
/* ----------- QUALITY.C ---------------*/
int openqual(void); /* Opens WQ solver system */
void initqual(void); /* Initializes WQ solver */
int runqual(long *); /* Gets current WQ results */
int nextqual(long *); /* Updates WQ by hyd.timestep */
int stepqual(long *); /* Updates WQ by WQ time step */
int closequal(void); /* Closes WQ solver system */
int gethyd(long *, long *); /* Gets next hyd. results */
char setReactflag(void); /* Checks for reactive chem. */
void transport(long); /* Transports mass in network */
void initsegs(void); /* Initializes WQ segments */
void reorientsegs(void); /* Re-orients WQ segments */
void updatesegs(long); /* Updates quality in segments*/
void removesegs(int); /* Removes a WQ segment */
void addseg(int,float,float); /* Adds a WQ segment to pipe */
void accumulate(long); /* Sums mass flow into node */
void updatenodes(long); /* Updates WQ at nodes */
void sourceinput(long); /* Computes source inputs */
void release(long); /* Releases mass from nodes */
void updatetanks(long); /* Updates WQ in tanks */
void updatesourcenodes(long); /* Updates WQ at source nodes */
void tankmix1(int, long); /* Complete mix tank model */
void tankmix2(int, long); /* 2-compartment tank model */
void tankmix3(int, long); /* FIFO tank model */
void tankmix4(int, long); /* LIFO tank model */
float sourcequal(Psource); /* Finds WQ input from source */
float avgqual(int); /* Finds avg. quality in pipe */
void ratecoeffs(void); /* Finds wall react. coeffs. */
float piperate(int); /* Finds wall react. coeff. */
float pipereact(int,float,float,long); /* Reacts water in a pipe */
float tankreact(float,float,float,
 long); /* Reacts water in a tank */
float bulkrate(float,float,float); /* Finds bulk reaction rate */
float wallrate(float,float,float,float);/* Finds wall reaction rate */
/* ------------ OUTPUT.C ---------------*/
int savenetdata(void); /* Saves basic data to file */
int savehyd(long *); /* Saves hydraulic solution */
int savehydstep(long *); /* Saves hydraulic timestep */
int saveenergy(void); /* Saves energy usage */
int readhyd(long *); /* Reads hydraulics from file */
int readhydstep(long *); /* Reads time step from file */
int saveoutput(void); /* Saves results to file */
int nodeoutput(int,float *,float); /* Saves node results to file */
int linkoutput(int,float *,float); /* Saves link results to file */
int savefinaloutput(void); /* Finishes saving output */
int savetimestat(float *, char); /* Saves time stats to file */
int savenetreacts(REAL, REAL, REAL,
 REAL); /* Saves react. rates to file */
int saveepilog(void); /* Saves output file epilog */
/* ------------ INPFILE.C ---------------*/
int saveinpfile(char *); /* Saves network to text file */
hash.h
/* HASH.H
**
** Header file for Hash Table module HASH.C
**
*/
#define HTMAXSIZE 1999
#define NOTFOUND 0
struct HTentry
{
	char 	*key;
	int 	data;
	struct	HTentry *next;
};
typedef struct HTentry *HTtable;
HTtable *HTcreate(void);
int	HTinsert(HTtable *, char *, int);
int 	HTfind(HTtable *, char *);
void	HTfree(HTtable *);
	
mempool.h
/*
** mempool.h
**
** Header for mempool.c
**
** The type alloc_handle_t provides an opaque reference to the
** alloc pool - only the alloc routines know its structure.
*/
typedef struct
{
 long dummy;
} alloc_handle_t;
alloc_handle_t *AllocInit(void);
char *Alloc(long);
alloc_handle_t *AllocSetPool(alloc_handle_t *);
void AllocReset(void);
void AllocFreePool(void);
text.h
/*
****************************************************
 String Constants for EPANET Program 
 
VERSION: 2.00 
DATE: 5/8/00
 10/25/00
AUTHOR: L. Rossman
 US EPA - NRMRL
****************************************************
*/
/* ------------ Keyword Dictionary ---------- */
#define w_USE "USE"
#define w_SAVE "SAVE"
#define w_NONE "NONE"
#define w_ALL "ALL"
#define w_CHEM "CHEM"
#define w_AGE "AGE"
#define w_TRACE "TRACE"
#define w_SYSTEM "SYST"
#define w_JUNC "Junc"
#define w_RESERV "Reser"
#define w_TANK "Tank"
#define w_CV "CV"
#define w_PIPE "Pipe"
#define w_PUMP "Pump"
#define w_VALVE "Valve"
#define w_PRV "PRV"
#define w_PSV "PSV"
#define w_PBV "PBV"
#define w_FCV "FCV"
#define w_TCV "TCV"
#define w_GPV "GPV"
#define w_OPEN "OPEN"
#define w_CLOSED "CLOSED"
#define w_ACTIVE "ACTIVE"
#define w_TIME "TIME"
#define w_ABOVE "ABOVE"
#define w_BELOW "BELOW"
#define w_PRECISION "PREC"
#define w_IS "IS"
#define w_NOT "NOT"
#define w_ADD "ADD"
#define w_MULTIPLY "MULT"
#define w_LIMITING "LIMIT"
#define w_ORDER "ORDER"
#define w_GLOBAL "GLOB"
#define w_BULK "BULK"
#define w_WALL "WALL"
#define w_PAGE "PAGE"
#define w_STATUS "STATUS"
#define w_SUMMARY "SUMM"
#define w_MESSAGES "MESS"
#define w_ENERGY "ENER"
#define w_NODE "NODE"
#define w_LINK "LINK"
#define w_FILE "FILE"
#define w_YES "YES"
#define w_NO "NO"
#define w_FULL "FULL"
#define w_HW "H-W"
#define w_DW "D-W"
#define w_CM "C-M"
#define w_CFS "CFS"
#define w_GPM "GPM"
#define w_MGD "MGD"
#define w_IMGD "IMGD"
#define w_AFD "AFD"
#define w_LPS "LPS"
#define w_LPM "LPM"
#define w_MLD "MLD"
#define w_CMH "CMH"
#define w_CMD "CMD"
#define w_SI "SI"
#define w_PSI "PSI"
#define w_KPA "KPA"
#define w_METERS "METERS"
#define w_ELEV "ELEV"
#define w_DEMAND "DEMA"
#define w_HEAD "HEAD"
#define w_PRESSURE "PRES"
#define w_QUALITY "QUAL"
#define w_DIAM "DIAM"
#define w_FLOW "FLOW"
#define w_ROUGHNESS "ROUG"
#define w_VELOCITY "VELO"
#define w_HEADLOSS "HEADL"
#define w_SETTING "SETT"
#define w_POWER "POWE"
#define w_VOLUME "VOLU"
#define w_CLOCKTIME "CLOCKTIME"
#define w_FILLTIME "FILL"
#define w_DRAINTIME "DRAI"
#define w_GRADE "GRADE"
#define w_LEVEL "LEVEL"
#define w_DURATION "DURA"
#define w_HYDRAULIC "HYDR"
#define w_MINIMUM "MINI"
#define w_PATTERN "PATT"
#define w_REPORT "REPO"
#define w_START "STAR"
#define w_UNITS "UNIT"
#define w_MAP "MAP"
#define w_VERIFY "VERI"
#define w_VISCOSITY "VISC"
#define w_DIFFUSIVITY "DIFF"
#define w_SPECGRAV "SPEC"
#define w_TRIALS "TRIAL"
#define w_ACCURACY "ACCU"
#define w_SEGMENTS "SEGM"
#define w_TOLERANCE "TOLER"
#define w_EMITTER "EMIT"
#define w_PRICE "PRICE"
#define w_DMNDCHARGE "DEMAN"
#define w_HTOL "HTOL"
#define w_QTOL "QTOL"
#define w_RQTOL "RQTOL"
#define w_CHECKFREQ "CHECKFREQ"
#define w_MAXCHECK "MAXCHECK"
#define w_SECONDS "SEC"
#define w_MINUTES "MIN"
#define w_HOURS "HOU"
#define w_DAYS "DAY"
#define w_AM "AM"
#define w_PM "PM"
#define w_CONCEN "CONCEN"
#define w_MASS "MASS"
#define w_SETPOINT "SETPOINT"
#define w_FLOWPACED "FLOWPACED"
#define w_PATTERN "PATT"
#define w_CURVE "CURV"
#define w_EFFIC "EFFI"
#define w_HEAD "HEAD"
#define w_POWER "POWE"
#define w_SPEED "SPEE"
#define w_MIXED "MIXED"
#define w_2COMP "2COMP"
#define w_FIFO "FIFO"
#define w_LIFO "LIFO"
#define w_STATISTIC "STAT"
#define w_AVG "AVERAGE"
#define w_MIN "MINIMUM"
#define w_MAX "MAXIMUM"
#define w_RANGE "RANGE"
#define w_UNBALANCED "UNBA"
#define w_STOP "STOP"
#define w_CONTINUE "CONT"
#define w_RULE "RULE"
#define w_IF "IF"
#define w_AND "AND"
#define w_OR "OR"
#define w_THEN "THEN"
#define w_ELSE "ELSE"
#define w_PRIORITY "PRIO"
/* ---------Input Section Names ---------- */
#define s_TITLE "[TITL"
#define s_JUNCTIONS "[JUNC"
#define s_RESERVOIRS "[RESE"
#define s_TANKS "[TANK"
#define s_PIPES "[PIPE"
#define s_PUMPS "[PUMP"
#define s_VALVES "[VALV"
#define s_CONTROLS "[CONT"
#define s_RULES "[RULE"
#define s_DEMANDS "[DEMA"
#define s_SOURCES "[SOUR"
#define s_EMITTERS "[EMIT"
#define s_PATTERNS "[PATT"
#define s_CURVES "[CURV"
#define s_QUALITY "[QUAL"
#define s_STATUS "[STAT"
#define s_ROUGHNESS "[ROUG"
#define s_ENERGY "[ENER"
#define s_REACTIONS "[REAC"
#define s_MIXING "[MIXI"
#define s_REPORT "[REPO"
#define s_TIMES "[TIME"
#define s_OPTIONS "[OPTI"
#define s_COORDS "[COOR"
#define s_VERTICES "[VERT"
#define s_LABELS "[LABE"
#define s_BACKDROP "[BACK"
#define s_TAGS "[TAGS"
#define s_END "[END"
/* ---------------- Units ---------------- */
/*** Limit units to MAXID or less characters ***/
#define u_CFS "cfs"
#define u_GPM "gpm"
#define u_AFD "a-f/d"
#define u_MGD "mgd"
#define u_IMGD "Imgd"
#define u_LPS "L/s"
#define u_LPM "Lpm"
#define u_CMH "m3/h"
#define u_CMD "m3/d"
#define u_MLD "ML/d"
#define u_MGperL "mg/L"
#define u_UGperL "ug/L"
#define u_HOURS "hrs"
#define u_MINUTES "min"
#define u_PERCENT "% from"
#define u_METERS "m"
#define u_MMETERS "mm"
#define u_MperSEC "m/s"
#define u_SQMperSEC "sq m/sec"
#define u_per1000M "/1000m"
#define u_KW "kw"
#define u_FEET "ft"
#define u_INCHES "in"
#define u_PSI "psi"
#define u_KPA "kPa"
#define u_FTperSEC "fps"
#define u_SQFTperSEC "sq ft/sec"
#define u_per1000FT "/1000ft"
#define u_HP "hp"
/* -------------- Curve Types ----------------- */
#define c_HEADLOSS "HEADLOSS"
#define c_PUMP "PUMP"
#define c_EFFIC "EFFIC"
#define c_VOLUME "VOLUME"
/* ------------------ Text Phrases ------------------- */
#define t_ABOVE "acima"
#define t_BELOW "abaixo"
#define t_HW "Hazen-Williams"
#define t_DW "Darcy-Weisbach"
#define t_CM "Chezy-Manning"
#define t_CHEMICAL "Químico"
#define t_XHEAD "fechado porque não é possível fornecer a altura de elevação necessária"
#define t_TEMPCLOSED "temporariamente fechado"
#define t_CLOSED "fechado"
#define t_OPEN "aberto"
#define t_ACTIVE "activo"
#define t_XFLOW "aberto mas excede o caudal máximo"
#define t_XFCV "aberto mas não é possível fornecer o caudal necessário"
#define t_XPRESSURE "aberto mas não é possível fornecer a pressão necessária"
#define t_FILLING "a encher"
#define t_EMPTYING "a esvaziar"
#define t_ELEV "Cota"
#define t_DEMAND "Consumo"
#define t_HEAD "Altura de Elevação"
#define t_PRESSURE "Pressão"
#define t_QUALITY "Qualidade"
#define t_LENGTH "Comprimento"
#define t_DIAM "Diâmetro"
#define t_FLOW
"Caudal"
#define t_VELOCITY "Velocidade"
#define t_HEADLOSS "Perda de Carga"
#define t_LINKQUAL "Qualidade"
#define t_LINKSTATUS "Estado"
#define t_SETTING "Parâmetro de Controlo"
#define t_REACTRATE "Reacção"
#define t_FRICTION "Factor-F"
#define t_NODEID "Nó"
#define t_LINKID "Troço"
#define t_PERDAY "/dia"
#define t_JUNCTION "Nó"
#define t_RESERVOIR "RNF"
#define t_TANK "RNV"
#define t_PIPE "Tubagem"
#define t_PUMP "Bomba"
#define t_VALVE "Válvula"
#define t_CONTROL "Controlo"
#define t_RULE "Condição Múltipla"
#define t_DEMANDFOR "Consumo para o Nó"
#define t_SOURCE "Origem"
#define t_EMITTER "Dispositivo Emissor"
#define t_PATTERN "Padrão"
#define t_CURVE "Curva"
#define t_STATUS "Estado"
#define t_ROUGHNESS "Rugosidade"
#define t_ENERGY "Energia"
#define t_REACTION "Reacção"
#define t_MIXING "Mistura"
#define t_REPORT "Relatório"
#define t_TIME "Tempos"
#define t_OPTION "Opções"
#define t_RULES_SECT "secção [RULES]"
#define t_HALTED " SIMULAÇÂO INTERROMPIDA."
#define t_FUNCCALL "chamada de função"
#define t_CONTINUED " (continuação)"
#define t_perM3 " /m3"
#define t_perMGAL "/Mgal"
#define t_DIFFER "DIFERENCIAL"
/* ------------------ Format Messages ------------------*/
#define LOGO1 \
"******************************************************************"
#define LOGO2 \
"* E P A N E T *"
#define LOGO3 \
"* Hidráulica e Qualidade da Água *"
#define LOGO4 \
"* Simulação de Redes de Distribuição *"
#define LOGO5 \
"* Versão 2.0 *"
#define LOGO6 \
"******************************************************************"
#define FMT01 "\n... EPANET Versão 2.0 \n"
#define FMT02 "\n o A procurar os dados da rede"
#define FMT03 "\n A sintaxe correcta é:\n epanet2d <input file> <output file>\n"
#define FMT04 "\n Não é possível utilizar nomes de ficheiros em duplicado."
#define FMT05 "\n Não é possível abrir o ficheiro de dados "
#define FMT06 "\n Não é possível abrir o ficheiro de relatório "
#define FMT07 "\n Não é possível abrir o ficheiro binário de resultados "
#define FMT08 "\n Não é possível abrir o ficheiro binário de resultados temporário"
#define FMT09 "\n\n... Simulação finalizada.\n"
#define FMT10 "\n\n... Simulação finalizada. Existem mensagens de aviso.\n"
#define FMT11 "\n\n... Simulação finalizada. Existem mensagens de erro.\n"
#define FMT14 "\n o a obter solução hidráulica no instante "
#define FMT15 "\n o a obter solução de qualidade da água no instante "
#define FMT16 "\n o a transferir os resultados para ficheiro"
#define FMT17 "\n o a escrever o relatório de resultados para "
#define FMT18 " Página 1 "
#define FMT19 " Ficheiro de Dados.................. %s"
#define FMT20 " Número de Nós...................... %-d"
#define FMT21a " Número de RNF...................... %-d"
#define FMT21b " Número de RNV...................... %-d"
#define FMT22 " Número de Tubagens................. %-d"
#define FMT23 " Número de Bombas................... %-d"
#define FMT24 " Número de Válvulas................. %-d"
#define FMT25 " Fórmula de Perda de Carga.......... %s"
#define FMT26 " Passo de Cálculo Hidráulico........ %-.2f %s"
#define FMT27 " Exactidão da Simulação Hidráulica.. %-.6f"
#define FMT28 " Máximo de Iterações................ %-d"
#define FMT29 " Simulação de Qualidade............. None"
#define FMT30 " Simulação de Qualidade............. %s"
#define FMT31 " Simulação de Qualidade............. Trace From Node %s"
#define FMT32 " Simulação de Qualidade............. Age"
#define FMT33 " Passo de Cálculo de Qualidade...... %-.2f min"
#define FMT34 " Tolerância de Qualidade ........... %-.2f %s"
#define FMT36 " Densidade Relativa................. %-.2f"
#define FMT37a " Viscosidade Cinemática Relativa.... %-.2f"
#define FMT37b " Difusão Relativa................... %-.2f"
#define FMT38 " Factor de Consumo.................. %-.2f"
#define FMT39 " Duração Total...................... %-.2f %s"
#define FMT40 " Opções de Relatório:"
#define FMT41 " Sem Nós "
#define FMT42 " Todos os Nós"
#define FMT43 " Nós Seleccionados"
#define FMT44 " Sem Troços"
#define FMT45 " Todos os Troços"
#define FMT46 " Troços Seleccionados"
#define FMT47 " com %s abaixo %-.2f %s"
#define FMT48 " com %s acima %-.2f %s"
/* ---------- Status Report Format Strings ------------ */
#define FMT49 "Simulação Hidráulica:"
#define FMT50 "%7s: O RNV %s está %s até %-.2f %s"
#define FMT51 "%7s: O RNF %s está %s"
#define FMT52 "%7s: %s %s %s"
#define FMT53 "%7s: %s %s alterado de %s para %s"
#define FMT54 "%7s: %s %s alterado pelo controlo %s %s "
#define FMT55 "%7s: %s %s alterado por um controlo de tempo"
#define FMT56 " %s %s parâmetro de controlo alterado para %-.2f"
#define FMT57 " %s %s alterado de %s para %s"
#define FMT58 "%7s: Equilíbrio atingido após %-d iterações"
#define FMT59 "%7s: Equilíbrio não atingido após %-d iterações (variação de caudal = %-.6f)"
#define FMT61 "%7s: a válvula %s conduziu a um sistema instável"
#define FMT62 "%7s: Sistema instável no nó %s"
#define FMT63 "%7s: %s %s alterado pela regra %s"
#define FMT64 "%7s: A calcular o equilíbrio na rede:"
#define FMT65 " Iteração %2d: variação relativa de caudal = %-.6f"
/* -------------------- Energy Report Table ------------------- */
#define FMT71 "Utilização de Energia:"
#define FMT72 \
 " Factor Efic. kWh kW kW Custo"
#define FMT73 \
 "Bomba Utiliz. Med. %s Med. Max. /dia"
#define FMT74 "%38s Carga de Consumo: %9.2f"
#define FMT75 "%38s Custo Total: %9.2f"
/* -------------------- Node Report Table --------------------- */
#define FMT76 "%s Resultados nos Nós:"
#define FMT77 "Resultados nos Nós:"
#define FMT78 "Resultados nos Nós às %s horas:"
/* -------------------- Link Report Table --------------------- */
#define FMT79 "%s Resultados nos Troços:"
#define FMT80 "Resultados nos Troços:"
#define FMT81 "Resultados nos Troços às %s horas:"
#define FMT82 "\n\f\n Página %-d %60.60s\n"
/* ------------------- Progress Messages ---------------------- */
#define FMT100 "A procurar os dados da rede..."
#define FMT101 "A obter a solução de hidráulica no instante %s"
#define FMT102 "A obter a solução de qualidade da água no instante %s"
#define FMT103 "A guardar os resultados para ficheiro..."
#define FMT104 "Simulação iniciada %s"
#define FMT105 "Simulação finalizada %s"
/*------------------- Error Messages --------------------*/
#define ERR101 "Erro no Sistema 101: memória disponível insuficiente."
#define ERR102 "Erro no Sistema 102: não existem dados de rede disponíveis."
#define ERR103 "Erro no Sistema 103: as condições de hidráulica não foram inicializadas."
#define ERR104 "Erro no Sistema 104: não existem dados de hidráulica para a simulação de qualidade da água."
#define ERR105 "Erro no Sistema 105: as condicões de qualidade da água não foram inicializadas."
#define ERR106 "Erro no Sistema 106: os resultados não foram guardados para o relatório."
#define ERR107 "Erro no Sistema 107: os dados de hidráulica foram fornecidos a partir de um ficheiro externo."
#define ERR108 "Erro no Sistema 108: não é possível utilizar o ficheiro externo enquanto a simulação hidráulica estiver activa."
#define ERR109 "Erro no Sistema 109: não é possível alterar o parâmetro tempo
enquanto a simulação estiver activa."
#define ERR110 "Erro no Sistema 110: não é possível resolver as equações de hidráulica na rede."
#define ERR120 "Erro no Sistema 120: não é possível resolver as equações de qualidade da água."
#define ERR200 "Erro na Entrada de Dados 200: existem erros no ficheiro de dados."
#define ERR201 \
 "Erro na Entrada de Dados 201: erro de sintaxe na linha seguinte da secção [%s]:"
#define ERR202 "Erro na Entrada de Dados 202: %s %s contém um valor numérico inválido."
#define ERR203 "Erro na Entrada de Dados 203: %s %s refere-se a um nó não definido."
#define ERR204 "Erro na Entrada de Dados 204: %s %s refere-se a um troço não definido."
#define ERR205 "Erro na Entrada de Dados 205: %s %s refere-se a um padrão temporal não definido."
#define ERR206 "Erro na Entrada de Dados 206: %s %s refere-se a uma curva não definida."
#define ERR207 "Erro na Entrada de Dados 207: %s %s dificuldades na utilização do controlo."
#define ERR208 "Erro na Entrada de Dados 208: %s especificado para um Nó não definido %s."
#define ERR209 "Erro na Entrada de Dados 209: valor %s inválido para o Nó %s."
#define ERR210 "Erro na Entrada de Dados 210: %s especificado para o Troço não definido %s."
#define ERR211 "Erro na Entrada de Dados 211: valor %s inválido para o Troço %s."
#define ERR212 "Erro na Entrada de Dados 212: o nó de rastreio %.0s %s não está definido."
#define ERR213 "Erro na Entrada de Dados 213: valor de opção inválido na secção:[%s] "
#define ERR214 \
 "Erro na Entrada de Dados 214: a linha seguinte da secção [%s] contém demasiados caracteres:"
#define ERR215 "Erro na Entrada de Dados 215: %s %s é um ID em duplicado."
#define ERR216 "Erro na Entrada de Dados 216: %s dados especificados para uma Bomba %s não definida."
#define ERR217 "Erro na Entrada de Dados 217: dados inválidos de %s para a Bomba %s."
#define ERR219 "Erro na Entrada de Dados 219: %s %s incorrectamente ligado a um RNV."
#define ERR220 "Erro na Entrada de Dados 220: %s %s incorrectamente ligado a outra válvula."
/*** Updated on 10/25/00 ***/
#define ERR222 "Erro na Entrada de Dados 222: %s %s possui os mesmos nós inicial e final."
#define ERR223 "Erro na Entrada de Dados 223: não existem nós suficientes na rede"
#define ERR224 "Erro na Entrada de Dados 224: não existem RNVs ou RNFs na rede."
#define ERR225 "Erro na Entrada de Dados 225: alturas de água mínima/máxima inválidas para o RNV %s."
#define ERR226 "Erro na Entrada de Dados 226: não foi fornecida uma curva para a Bomba %s."
#define ERR227 "Erro na Entrada de Dados 227: curva inválida para a Bomba %s."
#define ERR230 "Erro na Entrada de Dados 230: a Curva %s apresenta valores de x não crescentes."
#define ERR233 "Erro na Entrada de Dados 233: o Nó %s está desligado."
#define ERR240 "Erro na Entrada de Dados 240: %s %s refere-se a uma origem não definida."
#define ERR241 "Erro na Entrada de Dados 241: %s %s refere-se a um controlo não definido."
#define ERR250 "Erro na Entrada de Dados 250: a função chamada apresenta um formato inválido."
#define ERR251 "Erro na Entrada de Dados 251: a função chamada contém um parâmetro de código inválido."
#define ERR301 "Erro no Ficheiro 301: ficheiros com nomes idênticos."
#define ERR302 "Erro no Ficheiro 302: não é possível abrir o ficheiro de dados."
#define ERR303 "Erro no Ficheiro 303: não é possível abrir o ficheiro de relatório."
#define ERR304 "Erro no Ficheiro 304: não é possível abrir o ficheiro binário de resultados."
#define ERR305 "Erro no Ficheiro 305: não é possível abrir o ficheiro de hidráulica."
#define ERR306 "Erro no Ficheiro 306: o ficheiro de hidráulica não corresponde aos dados da rede."
#define ERR307 "Erro no Ficheiro 307: não é possível ler o ficheiro de hidráulica."
#define ERR308 "Erro no Ficheiro 308: não é possível guardar os resultados para o ficheiro."
#define ERR309 "Erro no Ficheiro 309: não é possível guardar os resultados para o ficheiro de relatório."
#define R_ERR201 "Erro na Entrada de Dados 201: erro de sintaxe na linha seguinte de "
#define R_ERR202 "Erro na Entrada de Dados 202: valor numérico inválido na linha seguinte de "
#define R_ERR203 "Erro na Entrada de Dados 203: nó não definido na linha seguinte de "
#define R_ERR204 "Erro na Entrada de Dados 204: troço não definido na linha seguinte de "
#define R_ERR207 "Erro na Entrada de Dados 207: a tentar controlar uma VR na linha seguinte de "
#define R_ERR221 "Erro na Entrada de Dados 221: instrução incorrecta na linha seguinte de "
/*-------------------- Specific Warning Messages -------------------------*/
#define WARN01 "AVISO: Equilíbrio não atingido às %s hrs."
#define WARN02 \
"AVISO: O número máximo de iterações foi excedido às %s horas. O sistema pode estar instável."
#define WARN03a "AVISO: Nó %s desligado às %s horas"
#define WARN03b "AVISO: %d nós adicionais desligados às %s horas"
#define WARN03c "AVISO: Sistema desligado devido ao Troço %s" 
#define WARN04 "AVISO: Bomba %s %s às %s horas."
#define WARN05 "AVISO: %s %s %s at %s horas."
#define WARN06 "AVISO: Pressões negativas às %s horas."
/*-------------------- General Warning Messages -------------------------*/
#define WARN1 "AVISO: Equilibrio hidráulico não atingido."
#define WARN2 "AVISO: O sistema pode estar hidraulicamente instável."
#define WARN3 "AVISO: Sistema desligado."
#define WARN4 "AVISO: As bombas não fornecem caudal ou altura de elevação suficiente."
#define WARN5 "AVISO: As valvulas não permitem a passagem de um caudal suficiente."
#define WARN6 "AVISO: O sistema apresenta nós com pressão negativa."
toolkit.h
/*
*******************************************************************
TOOLKIT.H - Prototypes for EPANET Functions Exported to DLL Toolkit
VERSION: 2.00
DATE: 5/8/00
 10/25/00
 3/1/01
AUTHOR: L. Rossman
 US EPA - NRMRL
*******************************************************************
*/
#ifdef DLL
 #ifdef __cplusplus
 #define DLLEXPORT extern "C" __declspec(dllexport) __stdcall
 #else
 #define DLLEXPORT __declspec(dllexport) __stdcall
 #endif
#else
#define DLLEXPORT
#endif
/* These are codes used by the DLL functions */
#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_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_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_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_NOSAVE 0 /* Save-results-to-file flag */
#define EN_SAVE 1
/*** Updated 3/1/01 ***/
#define EN_INITFLOW 10 /* Re-initialize flows flag */
/* These are the external functions that comprise the DLL */
/*** Updated 3/1/01 ***/
 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 ENgetnodeindex(char *, int *);
 int DLLEXPORT ENgetnodeid(int, char *);
 int DLLEXPORT ENgetnodetype(int, int *);
 int DLLEXPORT ENgetnodevalue(int, int, float *);
 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 *);
/*** Updated 10/25/00 ***/
 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 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 *);
types.h
/*
***********************************************************************
 
TYPES.H -- Global constants and data types for EPANET program 
 
VERSION: 2.00 
DATE: 5/8/00
 9/7/00
 10/25/00
 3/1/01
 12/6/01
AUTHOR: L. Rossman 
 US EPA - NRMRL
 
**********************************************************************
*/
/*
-----------------------------
 Global Constants
-----------------------------
*/
/*** Updated 12/6/01 ***/
#define CODEVERSION 20009
#define MAGICNUMBER 516114521
#define VERSION 200
#define EOFMARK 0x1A /* Use 0x04 for UNIX systems */
#define MAXTITLE 3 /* Max. # title lines */
#define MAXID 15 /* Max. # characters in ID name */
#define MAXMSG 79 /* Max. # characters in message text */
#define MAXLINE 255 /* Max. # characters read from input line */
#define MAXFNAME 259 /* Max. # characters in file name */
#define MAXTOKS 40 /* Max. items per line of input */
#define TZERO 1.E-4 /* Zero time tolerance */
#define TRUE 1
#define FALSE 0
#define FULL 2
#define BIG 1.E10
#define TINY 1.E-6
#define MISSING -1.E10
#define PI 3.141592654
/*** Updated 9/7/00 ***/
/* Various conversion factors */
#define GPMperCFS 448.831 
#define AFDperCFS 1.9837
#define MGDperCFS 0.64632
#define IMGDperCFS 0.5382
#define LPSperCFS 28.317
#define LPMperCFS 1699.0
#define CMHperCFS 101.94
#define CMDperCFS 2446.6
#define MLDperCFS 2.4466
#define M3perFT3 0.028317
#define LperFT3 28.317
#define MperFT 0.3048
#define PSIperFT 0.4333
#define KPAperPSI 6.895
#define KWperHP 0.7457
#define SECperDAY 86400
#define DIFFUS 1.3E-8 /* Diffusivity of chlorine */
 /* @ 20 deg C (sq ft/sec) */
#define VISCOS 1.1E-5 /* Kinematic viscosity of water */
 /* @ 20 deg C (sq ft/sec) */
#define SEPSTR " \t\n\r" /* Token separator characters */
/*
---------------------------------------------------------------------
 Macro to test for successful allocation of memory 
---------------------------------------------------------------------
*/
#define MEMCHECK(x) (((x) == NULL) ? 101 : 0 )
#define FREE(x) (free((x)))
/*
---------------------------------------------------------------------
 Conversion macros to be used in place of functions 
---------------------------------------------------------------------
*/ 
#define INT(x) ((int)(x)) /* integer portion of x */
#define FRAC(x) ((x)-(int)(x)) /* fractional part of x */
#define ABS(x) (((x)<0) ? -(x) : (x)) /* absolute value of x */
#define MIN(x,y) (((x)<=(y)) ? (x) : (y)) /* minimum of x and y */
#define MAX(x,y) (((x)>=(y)) ? (x) : (y)) /* maximum of x and y */
#define ROUND(x) (((x)>=0) ? (int)((x)+.5) : (int)((x)-.5))
 /* round-off of x */
#define MOD(x,y) ((x)%(y)) /* x modulus y */
#define SQR(x) ((x)*(x)) /* x-squared */
#define SGN(x) (((x)<0) ? (-1) : (1)) /* sign of x */
#define UCHAR(x) (((x) >= 'a' && (x) <= 'z') ? ((x)&~32) : (x))
 /* uppercase char of x */
/*
------------------------------------------------------
 Macro to evaluate function x with error checking
 (Fatal errors are numbered higher
than 100) 
------------------------------------------------------
*/
#define ERRCODE(x) (errcode = ((errcode>100) ? (errcode) : (x))) 
/*
------------------------------------------------------
 Macro to find Pump index of Link[x]
 (Diameter = pump index for pump links)
------------------------------------------------------
*/
#define PUMPINDEX(x) (ROUND(Link[(x)].Diam))
/*
------------------------------------------------------
 Global Data Structures 
------------------------------------------------------
*/
typedef double REAL;
typedef long INT4;
struct IDstring /* Holds component ID labels */
{
 char ID[MAXID+1];
};
struct Floatlist /* Element of list of floats */
{
 float value;
 struct Floatlist *next;
};
typedef struct Floatlist SFloatlist;
struct Tmplist /* Element of temp list for Pattern & Curve data */
{
 int i;
 char ID[MAXID+1];
 SFloatlist *x;
 SFloatlist *y;
 struct Tmplist *next;
};
typedef struct Tmplist STmplist;
typedef struct /* TIME PATTERN OBJECT */
{
 char ID[MAXID+1]; /* Pattern ID */
 int Length; /* Pattern length */
 float *F; /* Pattern factors */
} Spattern;
typedef struct /* CURVE OBJECT */
{
 char ID[MAXID+1]; /* Curve ID */
 int Type; /* Curve type */
 int Npts; /* Number of points */
 float *X; /* X-values */
 float *Y; /* Y-values */
} Scurve;
struct Sdemand /* DEMAND CATEGORY OBJECT */
{
 float Base; /* Baseline demand */
 int Pat; /* Pattern index */
 struct Sdemand *next; /* Next record */
};
typedef struct Sdemand *Pdemand; /* Pointer to demand object */
struct Ssource /* WQ SOURCE OBJECT */
{
 /*int Node;*/ /* Node index of source */
 float C0; /* Base concentration/mass */
 int Pat; /* Pattern index */
 float Smass; /* Actual mass flow rate */
 char Type; /* SourceType (see below) */
};
typedef struct Ssource *Psource; /* Pointer to WQ source object */
typedef struct /* NODE OBJECT */
{
 char ID[MAXID+1]; /* Node ID */
 float El; /* Elevation */
 Pdemand D; /* Demand pointer */
 Psource S; /* Source pointer */
 float C0; /* Initial quality */
 float Ke; /* Emitter coeff. */
 char Rpt; /* Reporting flag */
} Snode;
typedef struct /* LINK OBJECT */
{
 char ID[MAXID+1]; /* Link ID */
 int N1; /* Start node index */
 int N2; /* End node index */
 float Diam; /* Diameter */
 float Len; /* Length */
 float Kc; /* Roughness */
 float Km; /* Minor loss coeff. */
 float Kb; /* Bulk react. coeff */
 float Kw; /* Wall react. coeff */
 float R; /* Flow resistance */
 char Type; /* Link type */
 char Stat; /* Initial status */
 char Rpt; /* Reporting flag */
} Slink;
typedef struct /* TANK OBJECT */
{
 int Node; /* Node index of tank */
 float A; /* Tank area */
 float Hmin; /* Minimum water elev */
 float Hmax; /* Maximum water elev */
 float H0; /* Initial water elev */
 float Vmin; /* Minimum volume */
 float Vmax; /* Maximum volume */
 float V0; /* Initial volume */
 float Kb; /* Reaction coeff. (1/days) */
 float V; /* Tank volume */
 float C; /* Concentration */
 int Pat; /* Fixed grade time pattern */
 int Vcurve; /* Vol.- elev. curve index */
 char MixModel; /* Type of mixing model */
 /* (see MixType below) */
 float V1max; /* Mixing compartment size */
} Stank;
typedef struct /* PUMP OBJECT */
{
 int Link; /* Link index of pump */
 int Ptype; /* Pump curve type */
 /* (see PumpType below) */
 float Q0; /* Initial flow */
 float Qmax; /* Maximum flow */
 float Hmax; /* Maximum head */
 float H0; /* Shutoff head */
 float R; /* Flow coeffic. */
 float N; /* Flow exponent */
 int Hcurve; /* Head v. flow curve index */
 int Ecurve; /* Effic. v. flow curve index */
 int Upat; /* Utilization pattern index */
 int Epat; /* Energy cost pattern index */
 float Ecost; /* Unit energy cost */
 float Energy[6]; /* Energy usage statistics: */
 /* 0 = pump utilization */
 /* 1 = avg. efficiency */
 /* 2 = avg. kW/flow */
 /* 3 = avg. kwatts */
 /* 4 = peak kwatts */
 /* 5 = cost/day */
} Spump;
typedef struct /* VALVE OBJECT */
{
 int Link; /* Link index of valve */
} Svalve;
typedef struct /* CONTROL STATEMENT */
{
 int Link; /* Link index */
 int Node; /* Control node index */
 long Time; /* Control time */
 float Grade; /* Control grade */
 float Setting; /* New link setting */
 char Status; /* New link status */
 char Type; /* Control type */
 /* (see ControlType below) */
} Scontrol;
struct Sadjlist /* NODE ADJACENCY LIST ITEM */
{
 int node; /* Index of connecting node */
 int link; /* Index of connecting link */
 struct Sadjlist *next; /* Next item in list */
};
/* Pointer to adjacency list item */
typedef struct Sadjlist *Padjlist; 
struct Sseg /* PIPE SEGMENT record used */
{ /* for WQ routing */
 float v; /* Segment volume */
 float c; /* Water quality value */
 struct Sseg *prev; /* Record for previous segment */
};
typedef struct Sseg *Pseg; /* Pointer to pipe segment */
typedef struct /* FIELD OBJECT of report table */
{
 char Name[MAXID+1]; /* Name of reported variable */
 char Units[MAXID+1]; /* Units of reported variable */
 char Enabled; /* Enabled if in table */
 int Precision; /* Number of decimal places */
 float RptLim[2]; /* Lower/upper report limits */
} SField;
/*
----------------------------------------------
 Global Enumeration Variables
----------------------------------------------
*/
 enum Hydtype /* Hydraulics solution option: */
 {USE, /* use from previous run */
 SAVE, /* save after current run */
 SCRATCH}; /* use temporary file */
 enum QualType /* Water quality analysis option: */
 {NONE, /* no quality analysis */
 CHEM, /* analyze a chemical */
 AGE, /* analyze water age */
 TRACE}; /* trace % of flow from a source */
 enum NodeType /* Type of node: */
 {JUNC, /* junction */
 RESERV, /* reservoir
*/
 TANK}; /* tank */
 enum LinkType /* Type of link: */
 {CV, /* pipe with check valve */
 PIPE, /* regular pipe */
 PUMP, /* pump */
 PRV, /* pressure reducing valve */
 PSV, /* pressure sustaining valve */
 PBV, /* pressure breaker valve */
 FCV, /* flow control valve */
 TCV, /* throttle control valve */
 GPV}; /* general purpose valve */
 enum CurveType /* Type of curve: */
 {V_CURVE, /* volume curve */
 P_CURVE, /* pump curve */
 E_CURVE, /* efficiency curve */
 H_CURVE}; /* head loss curve */
 enum PumpType /* Type of pump curve: */
 {CONST_HP, /* constant horsepower */
 POWER_FUNC, /* power function */
 CUSTOM, /* user-defined custom curve */
 NOCURVE};
 enum SourceType /* Type of source quality input */
 {CONCEN, /* inflow concentration */
 MASS, /* mass inflow booster */
 SETPOINT, /* setpoint booster */
 FLOWPACED}; /* flow paced booster */
 enum ControlType /* Control condition type: */
 {LOWLEVEL, /* act when grade below set level */
 HILEVEL, /* act when grade above set level */
 TIMER, /* act when set time reached */
 TIMEOFDAY}; /* act when time of day occurs */
 enum StatType /* Link/Tank status: */
 {XHEAD, /* pump cannot deliver head (closed) */
 TEMPCLOSED, /* temporarily closed */
 CLOSED, /* closed */
 OPEN, /* open */
 ACTIVE, /* valve active (partially open) */
 XFLOW, /* pump exceeds maximum flow */
 XFCV, /* FCV cannot supply flow */
 XPRESSURE, /* valve cannot supply pressure */
 FILLING, /* tank filling */
 EMPTYING}; /* tank emptying */
 enum FormType /* Head loss formula: */
 {HW, /* Hazen-Williams */
 DW, /* Darcy-Weisbach */
 CM}; /* Chezy-Manning */
 enum UnitsType /* Unit system: */
 {US, /* US */
 SI}; /* SI (metric) */
 enum FlowUnitsType /* Flow units: */
 {CFS, /* cubic feet per second */
 GPM, /* gallons per minute */
 MGD, /* million gallons per day */
 IMGD, /* imperial million gal. per day */
 AFD, /* acre-feet per day */
 LPS, /* liters per second */
 LPM, /* liters per minute */
 MLD, /* megaliters per day */
 CMH, /* cubic meters per hour */
 CMD}; /* cubic meters per day */
 enum PressUnitsType /* Pressure units: */
 {PSI, /* pounds per square inch */
 KPA, /* kiloPascals */
 METERS}; /* meters */
 enum RangeType /* Range limits: */
 {LOW, /* lower limit */
 HI, /* upper limit */
 PREC}; /* precision */
 enum MixType /* Tank mixing regimes */
 {MIX1, /* 1-compartment model */
 MIX2, /* 2-compartment model */
 FIFO, /* First in, first out model */
 LIFO}; /* Last in, first out model */ 
 enum TstatType /* Time series statistics */
 {SERIES, /* none */
 AVG, /* time-averages */
 MIN, /* minimum values */
 MAX, /* maximum values */
 RANGE}; /* max - min values */
#define MAXVAR 21 /* Max. # types of network variables */
 /* (equals # items enumed below) */
 enum FieldType /* Network variables: */
 {ELEV, /* nodal elevation */
 DEMAND, /* nodal demand flow */
 HEAD, /* nodal hydraulic head */
 PRESSURE, /* nodal pressure */
 QUALITY, /* nodal water quality */
 LENGTH, /* link length */
 DIAM, /* link diameter */
 FLOW, /* link flow rate */
 VELOCITY, /* link flow velocity */
 HEADLOSS, /* link head loss */
 LINKQUAL, /* avg. water quality in link */
 STATUS, /* link status */
 SETTING, /* pump/valve setting */
 REACTRATE, /* avg. reaction rate in link */
 FRICTION, /* link friction factor */
 POWER, /* pump power output */
 TIME, /* simulation time */
 VOLUME, /* tank volume */
 CLOCKTIME, /* simulation time of day */
 FILLTIME, /* time to fill a tank */
 DRAINTIME}; /* time to drain a tank */
enum SectType {_TITLE,_JUNCTIONS,_RESERVOIRS,_TANKS,_PIPES,_PUMPS,
 _VALVES,_CONTROLS,_RULES,_DEMANDS,_SOURCES,_EMITTERS,
 _PATTERNS,_CURVES,_QUALITY,_STATUS,_ROUGHNESS,_ENERGY,
 _REACTIONS,_MIXING,_REPORT,_TIMES,_OPTIONS,
 _COORDS,_VERTICES,_LABELS,_BACKDROP,_TAGS,_END};

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais