modelCentrifugalPump

Model of a centrifugal pump (under development; subject to change; see documentation)

Extends from ThermofluidStream.Processes.Internal.SISOFlowAdvanced.

Information

Remark: This model is scheduled for release in v1.3.0 due to its advantages. However, it currently combines multiple features that are likely to be separated into dedicated models in future revisions. Please take this into account.

  • The capability to prescribe the mass flow rate (flowControlled) is intended to be moved to a simplified model (ideal flow source, incompressible fluid, fixed isentropic efficiency).
  • The capability to prescribe the pressure (pressureControlled) is intended to be moved to a simplified model (ideal pressure source, incompressible fluid, fixed isentropic efficiency).

Model of a centrifugal pump based on similarity laws: volume flow rate V_flow ∼ w, head/pressure difference head ∼ w^2, power P ∼ rho*w^3, where rho is the density and w is the pump speed.
The model assumes incompressible fluid rho = constant, which implies that the hydraulic work P_hyd = dp*V_flow.

Additionally quadratic polynomials are used to approximate head/pressure difference and power/torque depending on volume flow rate V_flow:

head_n =  c_head[1]*w_n^2 + c_head[2]*w_n*V_n + c_head[3]*V_n^2
P_n/w_n = tau_n = rho_n*(c_power[1]*w_n^2 + c_power[2]*w_n*V_n + c_power[3]*V_n^2)

where:

  • head_n = head/head_ref, w_n = w/w_ref, V_n = V_flow/V_flow_ref, P_n = P/P_ref tau_n = tau/tau_ref and rho_n = rho/rho_ref are normalized head, speed, volume flow rate, power, torque and density
  • head_ref, w_ref, V_flow_ref, P_ref, tau_ref and rho_ref are reference head, speed, volume flow rate, power, torque and density
  • c_head[1:3] and c_power[1:3] are coefficients

The centrifugal pump can be parameterized either with a measurement record or with a coefficient record. There are already measurements records and coefficient records for some exemplary centrifugal pumps.
User specific pumps can be added by creating a new measurement record or by calculating the coefficient record using the example CalculateCoefficientsFromMeasurements.
Furthermore coefficient records are designed to enable the user to generate a reasonable pump curve by scaling, e.g. by applying similarity laws.

The centrifugal pump can be used in different modes:

  • flange enables a mechanical connector
  • flowControlled enables to set mass or volume flow rate by parameter or by input signal
  • pressureControlled enables to set outlet pressure, pressure ratio or pressure difference by parameter or by input signal.
  • speedControlled enables to set angular velocity by parameter or by input signal.

The pump mode is displayed on icon level in terms of ṁ for mass flow rate, V for volume flow rate, dp for pressure difference, pr for pressure ratio, p for outlet pressure and w for speed.

The parameter setpointFromInput enables switching between setpoint by parameter or from input signal.

Further assumptions:

  • stationary, i.e. dEsys/dt = 0, dmsys/dt = 0
  • no heat transfer, i.e. q=0
  • no external force or momentum acting on the pump as a rigid body, i.e. Wdot_external = 0
  • ridig boundary, i.e. Wdot_v = 0 (no work due to change of volume)
  • difference of kinetic and potential energy of the fluid are negleted, i.e. g*z + 1/2*c^2 = const.
  • no change in mass fractions X_in = X_out

The model is supposed to be used for non negative speed w >= 0 and non negative volume flow rate V_flow >= 0, but the implemented modification:

head_n =  c_head[1]*w_n^2 + c_head[2]*w_n*V_n + c_head[3]*V_n*abs(V_n)
P_n/w_n = tau_n = if noEvent(V_n > 0) then rho_n*(c_power[1]*w_n^2 + c_power[2]*w_n*V_n + c_power[3]*V_n^2) else rho_n*c_power[1]*w_n^2

yields at least qualitative reasonable results for head at negative volume flow rates V_flow < 0. For quantitative results or for negative speeds w < 0 further modifications are necessary.

Parameters

TypeNameDefaultDescription
ThermofluidStream.Processes.Internal.CentrifugalPump.Auxiliaries.InternalCoefficientscoeffif dataFromMeasurements then ThermofluidStream.Processes.Internal.CentrifugalPump.Auxiliaries.internalCoefficientsFromMeasurements(measurements) else ThermofluidStream.Processes.Internal.CentrifugalPump.Auxiliaries.internalCoefficientsFromCoefficients(coefficients)
StringsetpointModeStringif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.flowControlled then if setpointFlow == ThermofluidStream.Processes.Internal.Types.SetpointModeFlow.m_flow then "ṁ" elseif setpointFlow == ThermofluidStream.Processes.Internal.Types.SetpointModeFlow.V_flow then "V" else "error" elseif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.pressureControlled then if setpointPressure == ThermofluidStream.Processes.Internal.Types.SetpointModePressure.dp then "Δp" elseif setpointPressure == ThermofluidStream.Processes.Internal.Types.SetpointModePressure.pr then "pr" elseif setpointPressure == ThermofluidStream.Processes.Internal.Types.SetpointModePressure.p_out then "p" else "error" elseif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.speedControlled then "w" elseif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.flange then "" else "error"
StringsetpointValueStringif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.flowControlled then if setpointFlow == ThermofluidStream.Processes.Internal.Types.SetpointModeFlow.m_flow then "m_flow = %m_flow_par" elseif setpointFlow == ThermofluidStream.Processes.Internal.Types.SetpointModeFlow.V_flow then "V_flow = %V_flow_par" else "error" elseif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.pressureControlled then if setpointPressure == ThermofluidStream.Processes.Internal.Types.SetpointModePressure.dp then "dp = %dp_par" elseif setpointPressure == ThermofluidStream.Processes.Internal.Types.SetpointModePressure.pr then "pr = %pr_par" elseif setpointPressure == ThermofluidStream.Processes.Internal.Types.SetpointModePressure.p_out then "p_out = %p_out_par" else "error" elseif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.speedControlled then "w = %w_par" elseif pumpMode == ThermofluidStream.Processes.Internal.Types.PumpMode.flange then "" else "error"
StringdisplayPos1if displaySetpoint then setpointValueString else ""
Data
BooleandataFromMeasurementstrue= true, if measurement data shall be given, (=false, if coefficients shall be set)
ThermofluidStream.Processes.Internal.CentrifugalPump.Coefficients.GenericPumpcoefficientsPump coefficients
ThermofluidStream.Processes.Internal.CentrifugalPump.Measurements.GenericPumpmeasurementsPump measurement data
Mode
PumpModepumpModeThermofluidStream.Processes.Internal.Types.PumpMode.flowControlledPump mode
BooleansetpointFromInputfalse= true, if setpoint input connector is enabled
Flow setpoint
SetpointModeFlowsetpointFlowThermofluidStream.Processes.Internal.Types.SetpointModeFlow.m_flowFlow setpoint (m_flow or V_flow)
SI.MassFlowRatem_flow_par0Constant mass flow rate
SI.VolumeFlowRateV_flow_par0Constant volume flow rate
Pressure setpoint
SetpointModePressuresetpointPressureThermofluidStream.Processes.Internal.Types.SetpointModePressure.dpPressure setpoint (dp, pr or p_out)
SI.PressureDifferencedp_par0Constant pressure difference p_out - p_in
Realpr_par1Constant pressure ratio p_out/p_in
SI.PressureDifferencep_out_par1e5Constant outlet pressure
Speed setpoint
SI.AngularVelocityw_parmeasurements.w_refConstant speed
Advanced
SI.MassFlowRatem_flow_regdropOfCommons.m_flow_regMass flow rate for regularization
SI.PowerP_reg1Power for regularization (eta = 0 for P < P_reg)
Layout › Display parameters
BooleandisplaySetpointtrue= true, if setpoint value is displayed

Components

TypeNameDefaultDescription
Modelica.Blocks.Interfaces.RealInputsetpoint_varSetpoint input connector [SI-units]
Modelica.Mechanics.Rotational.Interfaces.Flange_aflange
SI.AnglephiAngle
SI.VolumeFlowRateV_flowm_flow/rhoVolume flow rate
SI.AngularVelocitywSpeed
SI.TorquetauTorque
SI.HeightheadHead
Medium.SpecificEnthalpyw_tSpecific technical work
SI.PowerPPower (technichal work flow rate)
Realeta_isIsentropic efficiency

Revisions

  • May 2025, by Raphael Gebhart (raphael.gebhart@dlr.de):
    Initial version.