this quite sizable commit does several things, but is primarily focussed on building a toolkit that can run simultaneous simulations/analyses within a shared memory space. Versions <=2.1 use a long list of global variables that prevent multiple instantiations on linux systems without resorting to compilation tricks (like duplicate binaries or similar via static linkage). This version uses a single "Project" pointer to encapsulate the network and analysis data. There are no changes to existing algo implementations other than to accomodate dereferencing of the passed-in pointers. A more detailed list of major changes below: - mirrors all “ENxxxx” function calls with “EN_xxxx” versions (note the underscore) that take an extra first parameter: a pointer to an EN_Project struct, which contains all network, hydraulic, quality, and associated data. - tweaks some code formatting to make it more readable - removes some deprecated/commented code that was sufficiently old - fixes implicit type-cast warnings * Added ENaddnode and ENaddlink functions * More memory reallocations * Added ENInit, ENsetheadcurveindex * Added ENdeletelink and ENdeletenode * restored default behavior for float types * fixed type * Added docstrings for ENinit * cleanup change * moves global rule variables to vars.h * migrates rule structs to typedefs for better readability * char types to proper enums fixes #93 * Change some variable declarations for compatibility Changes to keep compatibility with C89 compilers: variables must be declared at the top of the functions. Remove the use of EN_LinkType in function call as it is not compatible with ENgetnodetype. * Moved declaration of idstodelete to top of function * Updated ENinit function and headers Updated header files with new functions Updated def file with new functions For ENinit changes names of parameters #98 Added enum for headloss formula * Missed these files in 1a033fc * migrates char types to enums fixes #93, supports unified link/node type enums, rather than public/private redefinitions * removing links in reverse-index order maintains proper indexing fixes #96 * style * clarifies curve getter units issue (dox) closes #95 * fixes link/node confusion in ENsetlinktype partially reverts a3bce95dc330a5a297634a303d438e2e1bc41cc9 * partial compilation fix * fixes dox issue * fixes allocation issues with enums - updates style in various places - introduces FlowDirection enum - use snprintf to prevent overflow * fixes enum type cast * updated mac project settings * Use of _snprintf on Windows and remove DLLEXPORT from mempool.h snprintf it not compatible on Windows so we use _snprintf mempool gave starnge compilation errors while removing DLLEXPORT worked. Not sure why these functions needed to be exposed in the DLL? * Revert "Use of _snprintf on Windows and remove DLLEXPORT from mempool.h" This reverts commit 6238f77d47fa0feaabe5836043c006937de433a2. * use of _snprintf instead of snprintf on Windows and removed DLLEXPORT from mempool.h Had compilation errors on mempool.h. Removed DLLEXPORT so solve it. Not sure why there was a need to expose these functions? * Shift indices for Links in ENaddnode Need to shift indices for Links not just Pipes since a pump could be connected directly to a reservoir. Also set the defult base demand to zero (was 5). * Set defualts for madatory link properties in ENaddlink and small fix for ENsetheadcurveindex Relates to #102 and closes #103 * wraps globals into structs, duplicates api functions with objective versions * parse and serialize Comment field for network elements related to #47 * adds getter for head/efficiency curve in EN_getlinkvalue * adds getter for event node index … to return the index of the junction (tank) that triggered the event. * fixes edge case in parsing … where inp files without demands in [JUNCTIONS] and without any [DEMAND] categories will fail. * adds freeing function for project pointer * removes redundant string literals, fixes overrun issue in error message getter function * check for hydraulics already closed * moving error definitions to data file * deprecates ENR err message getter (unused) * updates location of errors data file also begins to expose blind structs to curves and patterns, anticipating buildout of APIs for those. * updates CLI output to reflect executable name as invoked relates to #109 * Feature nrtest (#131) * Initial commit EPANET testing tools. * Initial commit for epanet-nrtestsuite * SWIG wrapper for EPANET outputapi (#118) * Removed pervious version of outputapi and wrapper * SWIG wrapper for EPANET outputapi * Patching cmake build script fixed target for outputapi * Build failing on deprecated test script * Minor changes. Responding to review comments. * Feature nrtest (#121) * Configured python setup to automatically build nrtest tools. * Working on build / testing automation * Adding EPANET 2.0.12 benchmark * Updated Travis yml to run nrtest * Fixing InsecurePlatformWarning * Fixing InsecurePlatformWarning again * Fixing InsecurePlatformWarning * Fixing InsecurePlatformWarning * Fixing InsecurePlatformWarning * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Working on configuring python environment and building test tools under Travis CI. * Making gen-config.sh and run-nrtest.sh executable * Debugging .travis.yml * Debugging .travis.yml * Debugging .travis.yml again * Debugging .travis.yml again * debugging travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * debugging Travis setup * Fixing bug with __strncpy_chk destlen < len * nrtesting clean up * re-implements fixes from:5eead5ae403c788567a4* removes extraneous build files, moves cmake and updates travis * mirror of 9b37035560f9683f1514b439f7586a5c17bca5bf * Move some variable declarations * More variable declarations * Fix TmpDir * Allocate _defaultModel * Fix EN_addcurve funcrion * Fix for inpfile * Fix writeRuleinInp call * Set MAXMSG to 79 chars * Fix for flow direction * Refactoring testing related python packages and SWIG wrapper bug fix (#139) * Eliminated epanet-reader package. Removed numpy dependency from epanet-output. Fixed reference counting bug in SWIG wrapper. Added error checking to run_nrtest.sh. Added nrtest package to requirements file. * changing buildhome directory * Fixing bug related to preprocessor definition of PI
135 lines
3.2 KiB
C
135 lines
3.2 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "epanet2.h"
|
|
|
|
#define MAXMSG 255 /* Max. # characters in message text */
|
|
#define MAXWARNCODE 99
|
|
/* text copied here, no more need of include "text.h" */
|
|
#define FMT01 "\nEPANET Version %d.%d.%d\n"
|
|
#define FMT03 "\n Correct syntax is:\n %s <input file> <output file>\n"
|
|
#define FMT09 "\nEPANET completed.\n"
|
|
#define FMT10 "\nEPANET completed. There are warnings."
|
|
#define FMT11 "\nEPANET completed. There are errors."
|
|
|
|
|
|
void writeConsole(char *s);
|
|
|
|
|
|
/*
|
|
----------------------------------------------------------------
|
|
Entry point used to compile a stand-alone executable.
|
|
----------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
/*--------------------------------------------------------------
|
|
** Input: argc = number of command line arguments
|
|
** *argv[] = array of command line arguments
|
|
** Output: none
|
|
** Purpose: main program segment
|
|
**
|
|
** Command line for stand-alone operation is:
|
|
** progname f1 f2 f3
|
|
** where progname = name of executable this code was compiled to,
|
|
** f1 = name of input file,
|
|
** f2 = name of report file (optional, stdout if left blank)
|
|
** f3 = name of binary output file (optional, nullfile if left blank).
|
|
**--------------------------------------------------------------
|
|
*/
|
|
{
|
|
char *f1,*f2,*f3;
|
|
char blank[] = "";
|
|
char errmsg[MAXMSG+1]="";
|
|
int errcode;
|
|
int version;
|
|
char s[256];
|
|
int major;
|
|
int minor;
|
|
int patch;
|
|
|
|
/* get version from DLL and trasform in Major.Minor.Patch format
|
|
instead of hardcoded version */
|
|
ENgetversion(&version);
|
|
major= version/10000;
|
|
minor= (version%10000)/100;
|
|
patch= version%100;
|
|
sprintf(s,FMT01, major , minor, patch);
|
|
writeConsole(s);
|
|
|
|
|
|
/* Check for proper number of command line arguments */
|
|
if (argc < 2) {
|
|
sprintf(s, FMT03, argv[0]);
|
|
writeConsole(s);
|
|
return(1);
|
|
}
|
|
|
|
/* set inputfile name */
|
|
f1 = argv[1];
|
|
if (argc > 2) {
|
|
/* set rptfile name */
|
|
f2 = argv[2];
|
|
}
|
|
else {
|
|
/* use stdout for rptfile */
|
|
f2 = blank;
|
|
}
|
|
if (argc > 3) {
|
|
/* set binary output file name */
|
|
f3 = argv[3];
|
|
}
|
|
else {
|
|
/* NO binary output*/
|
|
f3 = blank;
|
|
}
|
|
|
|
/* Call the main control function */
|
|
if (strlen(f2)> 0) {
|
|
/* use stdout for progress messages */
|
|
errcode = ENepanet(f1,f2,f3,writeConsole);
|
|
}
|
|
else {
|
|
/* use stdout for reporting, no progress messages */
|
|
errcode = ENepanet(f1,f2,f3,NULL);
|
|
}
|
|
|
|
/* Error/Warning check */
|
|
if (errcode == 0) {
|
|
/* no errors */
|
|
writeConsole(FMT09);
|
|
return(0);
|
|
}
|
|
else {
|
|
ENgeterror(errcode, errmsg, MAXMSG);
|
|
writeConsole(errmsg);
|
|
if (errcode > MAXWARNCODE) {
|
|
/* error */
|
|
writeConsole(FMT11);
|
|
return(errcode);
|
|
}
|
|
else {
|
|
/* warning */
|
|
writeConsole(FMT10);
|
|
return(0);
|
|
}
|
|
}
|
|
|
|
|
|
} /* End of main */
|
|
|
|
|
|
void writeConsole(char *s)
|
|
/*----------------------------------------------------------------
|
|
** Input: text string
|
|
** Output: none
|
|
** Purpose: writes string of characters to console
|
|
**----------------------------------------------------------------
|
|
*/
|
|
{
|
|
fprintf(stdout,"%s\n",s);
|
|
fflush(stdout);
|
|
}
|
|
|
|
|