Avoid possible divide by zero in hydcoeffs.c
This commit is contained in:
@@ -799,21 +799,32 @@ void pumpcoeff(Project *pr, int k)
|
|||||||
// Adjust head loss coefficients for pump speed
|
// Adjust head loss coefficients for pump speed
|
||||||
h0 = SQR(setting) * pump->H0;
|
h0 = SQR(setting) * pump->H0;
|
||||||
n = pump->N;
|
n = pump->N;
|
||||||
|
if (ABS(n - 1.0) < TINY) n = 1.0;
|
||||||
r = pump->R * pow(setting, 2.0 - n);
|
r = pump->R * pow(setting, 2.0 - n);
|
||||||
|
|
||||||
// Compute head loss and its gradient
|
// Compute head loss and its gradient
|
||||||
// ... use linear approx. to pump curve for small flows
|
// ... pump curve is nonlinear
|
||||||
qa = pow(hyd->RQtol / n / r, 1.0 / (n - 1.0));
|
if (n != 1.0)
|
||||||
if (q <= qa)
|
|
||||||
{
|
{
|
||||||
hgrad = hyd->RQtol;
|
// ... use linear approx. to pump curve for small flows
|
||||||
hloss = h0 + hgrad * hyd->LinkFlow[k];
|
qa = pow(hyd->RQtol / n / r, 1.0 / (n - 1.0));
|
||||||
|
if (q <= qa)
|
||||||
|
{
|
||||||
|
hgrad = hyd->RQtol;
|
||||||
|
hloss = h0 + hgrad * hyd->LinkFlow[k];
|
||||||
|
}
|
||||||
|
// ... use original pump curve for normal flows
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hgrad = n * r * pow(q, n - 1.0);
|
||||||
|
hloss = h0 + hgrad * hyd->LinkFlow[k] / n;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// ... use original pump curve for normal flows
|
// ... pump curve is linear
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hgrad = n * r * pow(q, n - 1.0);
|
hgrad = r;
|
||||||
hloss = h0 + hgrad * hyd->LinkFlow[k] / n;
|
hloss = h0 + hgrad * hyd->LinkFlow[k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user