The routine readNewIfaceValues reads a line interface flows in SWMM5. It is a string parser, finds tokens and creates dates, times and flows from the tokens. It is important to have the correct format for your line else the tokens will not be correctly converted to integers and doubles. Further, it is important to have more than one date/time for each node as the SWMM5 engine interpolates the flow values for each node during the simulation. One time value or time values out of the simulation date/times will result in no flows.
void readNewIfaceValues()
//
// Input: none
// Output: none
// Purpose: reads data from inflows interface file for next date.
//
{
int i, j;
char* s;
int yr = 0, mon = 0, day = 0,
hr = 0, min = 0, sec = 0; // year, month, day, hour, minute, second
char line[MAXLINE+1]; // line from interface file
// --- read a line for each interface node
NewIfaceDate = NO_DATE;
for (i=0; i<NumIfaceNodes; i++)
{
if ( feof(Finflows.file) ) return;
fgets(line, MAXLINE, Finflows.file);
// --- parse date & time from line
if ( strtok(line, SEPSTR) == NULL ) return;
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
yr = atoi(s);
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
mon = atoi(s);
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
day = atoi(s);
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
hr = atoi(s);
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
min = atoi(s);
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
sec = atoi(s);
// --- parse flow value
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
NewIfaceValues[i][0] = atof(s) / Qcf[IfaceFlowUnits];
// --- parse pollutant values
for (j=1; j<=NumIfacePolluts; j++)
{
s = strtok(NULL, SEPSTR);
if ( s == NULL ) return;
NewIfaceValues[i][j] = atof(s);
}
}
No comments:
Post a Comment