Pump - Curves Similarity Law Model¶
Model description¶
The PumpCurveSimilarity component models a pump using manufacturer
performance curves together with the classical pump affinity (similarity) laws.
It allows computing the pump operating point in three possible modes:
P_N: Given suction and discharge pressures and rotational speed, compute flow rate and shaft power.P_M: Given suction and discharge pressures and mass flow rate, compute the rotational speed required to reach this operating point.M_N: Given suction conditions, mass flow rate and speed, compute the discharge pressure and power.
The model uses four characteristic curves at rated speed:
Head rise \(\Delta H(Q)\)
Isentropic efficiency \(\varepsilon_{\text{is}}(Q)\)
Required NPSH \(\text{NPSH}_r(Q)\)
(Power curve is derived from head and efficiency)
These curves are supplied at a rated speed \(N_\text{rated}\) and are scaled to other rotational speeds using similarity laws. The model description is available in the pdf document linked in the references.
Class description¶
- class component.pump.pump_curve_similarity.PumpCurveSimilarity[source]¶
Component: Pump with a characteristic curve associated
Model: Model using characteristic curves for head and power and similarity laws to calculate the pump performance at different speeds.
Description:
Simulates a pump using head, efficiency and NPSHr performance curves (vs flow and speed). Uses the similarity laws to calculate the pump performance at different speeds.
Assumptions:
Steady-state
Incompressible fluid approximation for head calculation
Connectors:
su (MassConnector): Supply (inlet) side of the turbine.
ex (MassConnector): Exhaust (outlet) side of the turbine.
W (WorkConnector): Shaft power output from the turbine.
Parameters:
V_dot_curve: Array of volumetric flowrate curve [m³/h]
Delta_H_curve: Corresponding array from head rise curve [m]
eta_is_curve: Corresponding array from isentropic efficiency curve [-]
NPSH_r_curve: Corresponding array from NPSH required curve [m]
N_rot_rated: Rated pump speed [rpm]
- modeOperation mode (“P_N”, “P_M”, or “M_N”)
‘P_N’: Given suction and exhaust pressures and rotational speed, calculates flow and power
‘M_N’: Given suction pressure, temperature, rotational speed, and mass flow rate, calculates exhaust pressure and power
‘P_M’: Given suction and exhaust pressures and mass flow rate, calculates rotational speed
Inputs:
mode = P_N:
P_su: Suction pressure [Pa]
T_su: Suction temperature [K]
P_ex: Exhaust pressure [Pa]
N_rot: Rotational speed [RPM]
fluid: Actual working fluid
mode = P_M:
P_su: Suction pressure [Pa]
T_su: Suction temperature [K]
P_ex: Exhaust pressure [Pa]
m_dot: Mass flow rate [kg/s]
fluid: Actual working fluid
mode = M_N:
P_su: Suction pressure [Pa]
T_su: Suction temperature [K]
N_rot: Rotational speed [RPM]
m_dot: Mass flow rate [kg/s]
fluid: Actual working fluid
Outputs:
V_dot: Volumetric flow rate [m³/h]
W_dot: Shaft power required by the pump [W]
m_dot: Mass flow rate [kg/s] or P_ex: Exhaust pressure [Pa] or N_rot: Rotational speed [RPM], depending on the mode
Example of use¶
from labothappy.component.pump.pump_curve_similarity import PumpCurveSimilarity
import CoolProp.CoolProp as CP
import numpy as np
# Example characteristic curves and parameters
V_dot_curve = np.array([20, 30, 40, 50, 60, 70, 80]) # m3/h
Delta_H_curve = np.array([57, 55, 52, 49, 45, 42, 36]) # m (head falls with flow)
eta_is_curve = np.array([0.45, 0.59, 0.69, 0.75, 0.79, 0.79, 0.75]) # eff peaks near mid-flow
NPSH_r_curve = np.array([1.1, 1.1, 1.4, 1.8, 2, 3, 4.7]) # m, increases again near max flow
N_rated = 2900 # RPM
# Reference point: water at 20°C and 1 atm for a rated speed of 2900 RPM
# If you have eta_curve -> you can find back W_dot_curve or vice versa
PUMP = PumpCurveSimilarity()
# Set Parameters
PUMP.set_parameters(
V_dot_curve = V_dot_curve,
Delta_H_curve = Delta_H_curve,
eta_is_curve = eta_is_curve,
NPSH_r_curve = NPSH_r_curve,
N_rot_rated = N_rated,
mode = "P_M", # Mode can be "M_N", "P_M", or "P_N"
)
# Set Inputs
PUMP.set_inputs(
P_su=1.3e5, # Suction pressure in Pascals
T_su=275.15+15, # Suction temperature in Kelvin
P_ex=2.4e5, # Exhaust pressure in Pascals
# N_rot=1589, # Rotational speed in RPM
m_dot = 0.36, # Mass flow rate in kg/s
fluid="R1233zd(E)", # Actual fluid type
)
PUMP.solve()
PUMP.print_results()
rho_curve = CP.PropsSI("D", "T", 293.15, "P", 101325, "Water") # Density of water at 20°C and 1 atm
PUMP.plot_characteristic_curves(
speeds_to_plot=[1450, 1750, 2900, 3500], rho_curve=rho_curve
)