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:
Sam Hatchett
2013-01-08 12:41:48 -05:00
parent ad97233410
commit f8e843d584
4 changed files with 56 additions and 6 deletions

View File

@@ -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;
}
/*
----------------------------------------------------------------
@@ -1443,6 +1469,11 @@ int DLLEXPORT ENgetnodevalue(int index, int code, float *value)
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);

View File

@@ -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. */

View File

@@ -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 *);

View File

@@ -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