more stepwise mods
This commit is contained in:
@@ -1049,14 +1049,23 @@ void tanklevels(long tstep)
|
||||
|
||||
/* Update the tank's volume & water elevation */
|
||||
n = Tank[i].Node;
|
||||
dv = D[n]*tstep;
|
||||
Tank[i].V += dv;
|
||||
|
||||
// only adjust tank volume if we're in sequential mode.
|
||||
// otherwise, the tankmixing function will do it for us.
|
||||
if (!OpenQflag) {
|
||||
dv = D[n]*tstep;
|
||||
Tank[i].V += dv;
|
||||
}
|
||||
|
||||
/*** Updated 6/24/02 ***/
|
||||
/* Check if tank full/empty within next second */
|
||||
if (Tank[i].V + D[n] >= Tank[i].Vmax) Tank[i].V = Tank[i].Vmax;
|
||||
if (Tank[i].V - D[n] <= Tank[i].Vmin) Tank[i].V = Tank[i].Vmin;
|
||||
|
||||
if (Tank[i].V + D[n] >= Tank[i].Vmax) {
|
||||
Tank[i].V = Tank[i].Vmax;
|
||||
}
|
||||
else if (Tank[i].V - D[n] <= Tank[i].Vmin) {
|
||||
Tank[i].V = Tank[i].Vmin;
|
||||
}
|
||||
|
||||
H[n] = tankgrade(i,Tank[i].V);
|
||||
}
|
||||
} /* End of tanklevels */
|
||||
|
||||
@@ -1005,21 +1005,28 @@ void updatetanks(long dt)
|
||||
/* Examine each reservoir & tank */
|
||||
for (i=1; i<=Ntanks; i++)
|
||||
{
|
||||
|
||||
n = Tank[i].Node;
|
||||
|
||||
/* Use initial quality for reservoirs */
|
||||
if (Tank[i].A == 0.0)
|
||||
{
|
||||
n = Tank[i].Node;
|
||||
C[n] = Node[n].C0;
|
||||
}
|
||||
|
||||
/* Update tank WQ based on mixing model */
|
||||
else switch(Tank[i].MixModel)
|
||||
{
|
||||
case MIX2: tankmix2(i,dt); break;
|
||||
case FIFO: tankmix3(i,dt); break;
|
||||
case LIFO: tankmix4(i,dt); break;
|
||||
default: tankmix1(i,dt); break;
|
||||
else {
|
||||
switch(Tank[i].MixModel)
|
||||
{
|
||||
case MIX2: tankmix2(i,dt); break;
|
||||
case FIFO: tankmix3(i,dt); break;
|
||||
case LIFO: tankmix4(i,dt); break;
|
||||
default: tankmix1(i,dt); break;
|
||||
}
|
||||
|
||||
// if we're operating in stepwise mode, we'll need to update tank head conditions
|
||||
if (OpenHflag) {
|
||||
H[n] = tankgrade(i,Tank[i].V);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1076,10 +1083,7 @@ void tankmix1(int i, long dt)
|
||||
/* Determine tank & volumes */
|
||||
vold = Tank[i].V;
|
||||
n = Tank[i].Node;
|
||||
if (!OpenHflag) {
|
||||
Tank[i].V += D[n]*dt;
|
||||
}
|
||||
|
||||
Tank[i].V += D[n]*dt;
|
||||
vin = VolIn[n];
|
||||
|
||||
/* Compute inflow concen. */
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
using namespace std;
|
||||
|
||||
void checkErr(int err, std::string function);
|
||||
void stats();
|
||||
void hydStats();
|
||||
void qualStats();
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
|
||||
@@ -37,7 +38,7 @@ int main(int argc, char * argv[]) {
|
||||
checkErr( ENrunH(&simulationTime), "ENrunH" );
|
||||
checkErr( ENnextH(&nextEventH), "ENnextH" );
|
||||
|
||||
stats();
|
||||
hydStats();
|
||||
|
||||
// gather hydraulic results
|
||||
|
||||
@@ -51,23 +52,11 @@ int main(int argc, char * argv[]) {
|
||||
checkErr( ENinitQ(EN_SAVE), "ENinitQ" );
|
||||
|
||||
do {
|
||||
//long htime;
|
||||
|
||||
//ENgettimeparam(EN_HTIME, &htime);
|
||||
//cout << "Htime = " << htime << endl;
|
||||
|
||||
checkErr( ENrunQ(&simulationTime), "ENrunQ" );
|
||||
|
||||
//ENgettimeparam(EN_HTIME, &htime);
|
||||
//cout << "Htime = " << htime << endl;
|
||||
|
||||
checkErr( ENnextQ(&nextEventH), "ENstepQ" );
|
||||
|
||||
//ENgettimeparam(EN_HTIME, &htime);
|
||||
//cout << "Htime = " << htime << endl;
|
||||
|
||||
// wq results
|
||||
//cout << simulationTime << "\t\t" << nextEventH << endl;
|
||||
qualStats();
|
||||
|
||||
} while (nextEventH > 0);
|
||||
// water quality is done
|
||||
@@ -85,7 +74,7 @@ int main(int argc, char * argv[]) {
|
||||
/* stepwise solver (LemonTiger) */
|
||||
cout << "*****LemonTiger results******" << endl;
|
||||
|
||||
checkErr( ENopen(argv[1], argv[2], "out2.bin"), "ENopen" );
|
||||
checkErr( ENopen(argv[1], argv[2], (char*)"out2.bin"), "ENopen" );
|
||||
|
||||
checkErr( ENopenH(), "ENopenH" );
|
||||
checkErr( ENinitH(EN_NOSAVE), "ENinitH" );
|
||||
@@ -105,7 +94,8 @@ int main(int argc, char * argv[]) {
|
||||
checkErr( ENnextH(&nextEventH), "ENnextH" );
|
||||
checkErr( ENnextQ(&nextEventQ), "ENstepQ" );
|
||||
|
||||
stats();
|
||||
//hydStats();
|
||||
qualStats();
|
||||
|
||||
// wq results
|
||||
//cout << simulationTime << "\t\t" << nextEventH << endl;
|
||||
@@ -126,14 +116,24 @@ int main(int argc, char * argv[]) {
|
||||
|
||||
|
||||
|
||||
void stats() {
|
||||
void hydStats() {
|
||||
long htime;
|
||||
int nodeIndex;
|
||||
float head, volume;
|
||||
float head;
|
||||
ENgettimeparam(EN_HTIME, &htime);
|
||||
ENgetnodeindex((char*)"1", &nodeIndex);
|
||||
ENgetnodevalue(nodeIndex, EN_HEAD, &head);
|
||||
cout << htime << "\t\t" << head << endl;
|
||||
cout << htime << "\t\th = " << head << endl;
|
||||
}
|
||||
|
||||
void qualStats() {
|
||||
long htime;
|
||||
int nodeIndex;
|
||||
float quality;
|
||||
ENgettimeparam(EN_HTIME, &htime);
|
||||
ENgetnodeindex((char*)"1", &nodeIndex);
|
||||
ENgetnodevalue(nodeIndex, EN_QUALITY, &quality);
|
||||
cout << htime << "\t\tc = " << quality << endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user