Calculate parameters of a centrifugal pump

Calculate pump parameters total head across the pump and difference from Best Efficiency Point (BEP) to current operating flowrate and power output of a centrifugal pump.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from import percent_BEP_flowrate, pump_hydraulic_power, pump_shaft_power, total_head

# base_path = "" if __name__ == "__main__" else os.path.dirname(__file__)
df = pd.read_pickle("../../datasets/data/pump_data.pkl")
df_pump_curve = pd.read_csv("../../datasets/data/pump_curve.csv")

First we need to define a few pump and fluid parameters: density of the fluid, Best Efficiency Point (BEP), efficiency parameters (polynomial coefficients of a 2nd order polynomial representing the pump efficiency curve), and discharge and suction pressure.

den = pd.Series(np.repeat(1100, len(df)))
BEP = pd.Series(np.repeat(100, len(df)))
eff_parameter_1 = pd.Series(np.repeat(-8.00781603e-06, len(df)))
eff_parameter_2 = pd.Series(np.repeat(5.19564490e-02, len(df)))
eff_intercept = pd.Series(np.repeat(3.89930657e00, len(df)))
df["discharge"] *= 100000
df["suction"] *= 100000

The coeffients of the pump efficiency curve can be obtained by fitting a second order polynomial through the efficiency vs liquid flowrate datapoints as shown below.

poly = np.polyfit(df_pump_curve.iloc[:, 0], df_pump_curve.iloc[:, 1], deg=2)
plt.scatter(df_pump_curve.iloc[:, 0], df_pump_curve.iloc[:, 1])
plt.xlabel("Liquid flowrate [m3/h]")
plt.ylabel("Pump efficiency [%]")
plt.plot(df_pump_curve.iloc[:, 0], np.polyval(poly, df_pump_curve.iloc[:, 0]), label="fit", color="orange")
plt.text(2000, 10, f"{poly[0]:.6f}x^2 + {poly[1]:.2f}x + {poly[2]:.2f}")
plot pump parameters


Text(2000, 10, '-0.000005x^2 + 0.03x + 3.51')

Plug the above values to the pump parameter functions and display the results.

df["total_head"] = total_head(df["discharge"], df["suction"], den, align_timesteps=True)
df["BEP_flowrate"] = percent_BEP_flowrate(df["flowrate"], BEP, align_timesteps=True)
df["pump_hydraulic_power"] = pump_hydraulic_power(df["flowrate"] / 3600, df["total_head"], den, align_timesteps=True)
df["pump_shaft_power"] = pump_shaft_power(
    df["pump_hydraulic_power"], df["flowrate"], eff_parameter_1, eff_parameter_2, eff_intercept, align_timesteps=True

fig, ax = plt.subplots(nrows=7, ncols=1, figsize=(10, 10))
ax[0].set_title("Liquid flowrate")
ax[1].set_title("Suction pressure")
ax[2].set_title("Discharge pressure")
ax[3].plot(df["total_head"], color="green")
ax[3].set_title("Total head across the pump")
ax[4].plot(df["BEP_flowrate"], color="green")
ax[4].set_title("Difference between BEP and current liquid flowrate")
ax[5].plot(df["pump_hydraulic_power"], color="green")
ax[5].set_title("Pump hydraulic horsepower")
ax[6].plot(df["pump_shaft_power"], color="green")
ax[6].set_title("Pump shaft power")

Liquid flowrate, Suction pressure, Discharge pressure, Total head across the pump, Difference between BEP and current liquid flowrate, Pump hydraulic horsepower, Pump shaft power

Total running time of the script: ( 0 minutes 0.589 seconds)

Gallery generated by Sphinx-Gallery