Add more checks for ENsetnodevalue tank properties

Work in progress for issue #29
This commit is contained in:
Elad Salomons
2015-12-06 13:01:20 +02:00
parent 9ff4afe6cb
commit 3c006d724e

View File

@@ -1972,6 +1972,7 @@ int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v)
int j;
Pdemand demand;
Psource source;
double Htmp;
double value = v;
if (!Openflag) return(102);
@@ -2092,6 +2093,7 @@ int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v)
case EN_TANKDIAM:
if (value <= 0.0) return(202);
if (index <= Njuncs) return(251);
j = index - Njuncs;
if (j > 0 && Tank[j].A > 0.0)
{
@@ -2101,10 +2103,15 @@ int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v)
Tank[j].V0 = tankvolume(j, Tank[j].H0);
Tank[j].Vmax = tankvolume(j, Tank[j].Hmax);
}
else
{
return(251);
}
break;
case EN_MINVOLUME:
if (value < 0.0) return(202);
if (index <= Njuncs) return(251);
j = index - Njuncs;
if (j > 0 && Tank[j].A > 0.0)
{
@@ -2112,41 +2119,65 @@ int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v)
Tank[j].V0 = tankvolume(j, Tank[j].H0);
Tank[j].Vmax = tankvolume(j, Tank[j].Hmax);
}
else
{
return(251);
}
break;
case EN_MINLEVEL:
if (value < 0.0) return(202);
if (index <= Njuncs) return(251); //not a tank or reservoir
j = index - Njuncs;
if (j > 0 && Tank[j].A > 0.0)
if (Tank[j].A == 0.0) return(251); //node is a reservoir
Htmp = value/Ucf[ELEV] + Node[index].El;
if (Htmp < Tank[j].Hmax && Htmp <= Tank[j].H0)
{
if (Tank[j].Vcurve > 0) return(202);
Tank[j].Hmin = value/Ucf[ELEV] + Node[index].El;
Tank[j].Hmin = Htmp;
Tank[j].Vmin = tankvolume(j, Tank[j].Hmin);
}
else
{
return(251);
}
break;
case EN_MAXLEVEL:
if (value < 0.0) return(202);
if (index <= Njuncs) return(251); //not a tank or reservoir
j = index - Njuncs;
if (j > 0 && Tank[j].A > 0.0)
if (Tank[j].A == 0.0) return(251); //node is a reservoir
Htmp = value/Ucf[ELEV] + Node[index].El;
if (Htmp > Tank[j].Hmin && Htmp >= Tank[j].H0)
{
if (Tank[j].Vcurve > 0) return(202);
Tank[j].Hmax = value/Ucf[ELEV] + Node[index].El;
Tank[j].Hmax = Htmp;
Tank[j].Vmax = tankvolume(j, Tank[j].Hmax);
}
else
{
return(251);
}
break;
case EN_MIXMODEL:
j = ROUND(value);
if (index <= Njuncs) return(251);
if (j < MIX1 || j > LIFO) return(202);
if (index > Njuncs && Tank[index-Njuncs].A > 0.0)
{
Tank[index-Njuncs].MixModel = (char)j;
}
else
{
return(251);
}
break;
case EN_MIXFRACTION:
if (value < 0.0 || value > 1.0) return(202);
if (index <= Njuncs) return(251);
j = index - Njuncs;
if (j > 0 && Tank[j].A > 0.0)
{
@@ -2155,12 +2186,17 @@ int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v)
break;
case EN_TANK_KBULK:
if (index <= Njuncs) return(251);
j = index - Njuncs;
if (j > 0 && Tank[j].A > 0.0)
{
Tank[j].Kb = value/SECperDAY;
Reactflag = 1;
}
else
{
return(251);
}
break;
/*** New parameter additions ends here. ***/ //(2.00.12 - LR)
@@ -3264,7 +3300,7 @@ void freedata()
}
/* Free memory for node coordinates */
if (Coordflag == TRUE) free(Coord);
if (Coordflag == TRUE) free(Coord);
/* Free memory for rule base (see RULES.C) */
freerules();