adding rtx modifications
- get volume curves - get relative error / n iterations from last solution - get more tank characteristics - modify sim duration during active simulation
This commit is contained in:
46
src/epanet.c
46
src/epanet.c
@@ -1095,7 +1095,7 @@ int DLLEXPORT ENgettimeparam(int code, long *value)
|
||||
{
|
||||
*value = 0;
|
||||
if (!Openflag) return(102);
|
||||
if (code < EN_DURATION || code > EN_STARTTIME) return(251);
|
||||
if (code < EN_DURATION || code > EN_NEXTEVENT) return(251);
|
||||
switch (code)
|
||||
{
|
||||
case EN_DURATION: *value = Dur; break;
|
||||
@@ -1108,6 +1108,11 @@ int DLLEXPORT ENgettimeparam(int code, long *value)
|
||||
case EN_STATISTIC: *value = Tstatflag; break;
|
||||
case EN_PERIODS: *value = Nperiods; break;
|
||||
case EN_STARTTIME: *value = Tstart; break; /* Added TNT 10/2/2009 */
|
||||
case EN_HTIME: *value = Htime; break;
|
||||
case EN_NEXTEVENT:
|
||||
*value = Hstep; // find the lesser of the hydraulic time step length, or the time to next fill/empty
|
||||
tanktimestep(value);
|
||||
break;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
@@ -1252,6 +1257,27 @@ int DLLEXPORT ENgeterror(int errcode, char *errmsg, int n)
|
||||
else return(0);
|
||||
}
|
||||
|
||||
int DLLEXPORT ENgetstatistic(int code, int* value)
|
||||
/*----------------------------------------------------------------
|
||||
** Input: code = type of simulation statistic to retrieve
|
||||
** Output: value = value of requested statistic
|
||||
** Returns: error code
|
||||
** Purpose: retrieves hydraulic simulation statistic
|
||||
**----------------------------------------------------------------
|
||||
*/
|
||||
{
|
||||
switch (code) {
|
||||
case EN_ITERATIONS:
|
||||
*value = _iterations;
|
||||
break;
|
||||
case EN_RELATIVEERROR:
|
||||
*value = _relativeError;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
----------------------------------------------------------------
|
||||
@@ -1442,7 +1468,12 @@ int DLLEXPORT ENgetnodevalue(int index, int code, float *value)
|
||||
v = 0.0;
|
||||
if ( index > Njuncs ) v = Tank[index-Njuncs].Vmin * Ucf[VOLUME];
|
||||
break;
|
||||
|
||||
|
||||
case EN_MAXVOLUME: // !sph
|
||||
v = 0.0;
|
||||
if ( index > Njuncs ) v = Tank[index-Njuncs].Vmax * Ucf[VOLUME];
|
||||
break;
|
||||
|
||||
case EN_VOLCURVE:
|
||||
v = 0.0;
|
||||
if ( index > Njuncs ) v = Tank[index-Njuncs].Vcurve;
|
||||
@@ -2298,7 +2329,12 @@ int DLLEXPORT ENsettimeparam(int code, long value)
|
||||
*/
|
||||
{
|
||||
if (!Openflag) return(102);
|
||||
if (OpenHflag || OpenQflag) return(109);
|
||||
if (OpenHflag || OpenQflag) {
|
||||
// --> there's nothing wrong with changing certain time parameters during a simulation run
|
||||
if (code != EN_DURATION) {
|
||||
return(109);
|
||||
}
|
||||
}
|
||||
if (value < 0) return(202);
|
||||
switch(code)
|
||||
{
|
||||
@@ -2335,6 +2371,8 @@ int DLLEXPORT ENsettimeparam(int code, long value)
|
||||
case EN_STATISTIC: if (value > RANGE) return(202);
|
||||
Tstatflag = (char)value;
|
||||
break;
|
||||
case EN_HTIME: Htime = value;
|
||||
break;
|
||||
default: return(251);
|
||||
}
|
||||
return(0);
|
||||
@@ -2567,7 +2605,7 @@ int openhydfile()
|
||||
nsize[2] = Ntanks;
|
||||
nsize[3] = Npumps;
|
||||
nsize[4] = Nvalves;
|
||||
nsize[5] = Dur;
|
||||
nsize[5] = (int)Dur;
|
||||
fwrite(&magic,sizeof(INT4),1,HydFile);
|
||||
fwrite(&version,sizeof(INT4),1,HydFile);
|
||||
fwrite(nsize,sizeof(INT4),6,HydFile);
|
||||
|
||||
@@ -204,6 +204,10 @@ int runhyd(long *t)
|
||||
/* Report new status & save results */
|
||||
if (Statflag) writehydstat(iter,relerr);
|
||||
|
||||
/* solution info */
|
||||
_relativeError = relerr;
|
||||
_iterations = iter;
|
||||
|
||||
/*** Updated 3/1/01 ***/
|
||||
/* If system unbalanced and no extra trials */
|
||||
/* allowed, then activate the Haltflag. */
|
||||
|
||||
@@ -61,8 +61,8 @@ AUTHOR: L. Rossman
|
||||
#define EN_MAXLEVEL 21
|
||||
#define EN_MIXFRACTION 22
|
||||
#define EN_TANK_KBULK 23
|
||||
|
||||
#define EN_TANKVOLUME 24 /* TNT */
|
||||
#define EN_TANKVOLUME 24
|
||||
#define EN_MAXVOLUME 25
|
||||
|
||||
#define EN_DIAMETER 0 /* Link parameters */
|
||||
#define EN_LENGTH 1
|
||||
@@ -91,6 +91,12 @@ AUTHOR: L. Rossman
|
||||
#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
|
||||
@@ -206,6 +212,7 @@ extern "C" {
|
||||
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 *);
|
||||
|
||||
@@ -158,6 +158,7 @@ EXTERN Svalve *Valve; /* Valve data */
|
||||
EXTERN Scontrol *Control; /* Control data */
|
||||
EXTERN HTtable *Nht, *Lht; /* Hash tables for ID labels */
|
||||
EXTERN Padjlist *Adjlist; /* Node adjacency lists */
|
||||
EXTERN int _relativeError, _iterations; /* Info about hydraulic solution */
|
||||
|
||||
/*
|
||||
** NOTE: Hydraulic analysis of the pipe network at a given point in time
|
||||
|
||||
Reference in New Issue
Block a user