Buildings.Fluid.Movers.Data

Package containing data for real pumps/fans

Information

This package contains data for fans and pumps.

See the User's Guide for more information.

Extends from Modelica.Icons.MaterialPropertiesPackage (Icon for package containing property classes).

Package Content

Name Description
Buildings.Fluid.Movers.Data.Generic Generic Generic data record for movers
Buildings.Fluid.Movers.Data.Fans Fans Package of fan performance data
Buildings.Fluid.Movers.Data.Pumps Pumps Package containing data for pumps

Buildings.Fluid.Movers.Data.Generic Buildings.Fluid.Movers.Data.Generic

Generic data record for movers

Information

Record containing parameters for pumps or fans.

Typical use

This record may be used to assign for example fan performance data using declaration such as

  Buildings.Fluid.Movers.SpeedControlled_y fan(
    redeclare package Medium = Medium,
      per(pressure(V_flow={0,m_flow_nominal,2*m_flow_nominal}/1.2,
                   dp={2*dp_nominal,dp_nominal,0}))) "Fan";

This data record can be used with Buildings.Fluid.Movers.SpeedControlled_y, Buildings.Fluid.Movers.FlowControlled_dp, Buildings.Fluid.Movers.FlowControlled_m_flow.

An example that uses manufacturer data can be found in Buildings.Fluid.Movers.Validation.Pump_y_stratos.

Declaration of the peak condition

The variable peak is intentionally declared in a way that each of its element is declared individually. If it was delcared the same way as does peak_internal, Modelica would prevent the modification of its specific elements with the following error message:
Record has a value, and attempt to modify specific elements.
The element modification of e.g. V_flow will be ignored.
The other variable peak_internal uses a function call to compute its default values. By passing them to peak one by one, the model can both have default values and also allow the user to override them easily. See Modelica Specification issue #791.

Extends from Modelica.Icons.Record (Icon for records).

Parameters

TypeNameDefaultDescription
Pressure curve
flowParameterspressurepressure(V_flow={0,0}, dp={0...Volume flow rate vs. total pressure rise
Power computation
HydraulicEfficiencyMethodetaHydMetBuildings.Fluid.Movers.BaseC...Efficiency computation method for the hydraulic efficiency etaHyd
MotorEfficiencyMethodetaMotMetif powerOrEfficiencyIsHydrau...Efficiency computation method for the motor efficiency etaMot
BooleanpowerOrEfficiencyIsHydraulictrue=true if hydraulic power or efficiency is provided, instead of total
efficiencyParametersefficiencyefficiency(V_flow={0}, eta={...Total or hydraulic efficiency vs. volumetric flow rate
efficiencyParametersmotorEfficiencymotorEfficiency(V_flow={0}, ...Motor efficiency vs. volumetric flow rate
efficiencyParameters_yMotmotorEfficiency_yMotmotorEfficiency_yMot(y={0}, ...Motor efficiency vs. part load ratio yMot, where yMot = WHyd/WMot_nominal
powerParameterspowerpower(V_flow={0}, P={0})Power (either consumed or hydraulic) vs. volumetric flow rate
peakpeakpeak(V_flow=peak_internal.V_...Volume flow rate, pressure rise, and efficiency (either total or hydraulic) at peak condition
PowerWMot_nominalif max(power.P) > Modelica.C...Rated motor power [W]
EfficiencyetaMot_max0.7Maximum motor efficiency [1]
Motor heat rejection
BooleanmotorCooledByFluidtrueIf true, then motor heat is added to fluid stream
Normalized speeds
Realspeed_nominal1Nominal rotational speed for flow characteristic [1]
RealconstantSpeed1Normalized speed set point, used if inputType = Buildings.Fluid.Types.InputType.Constant [1]
Realspeeds[:]{1}Vector of normalized speed set points, used if inputType = Buildings.Fluid.Types.InputType.Stages [1]

Modelica definition

record Generic "Generic data record for movers" extends Modelica.Icons.Record; // Pressure requires default values to avoid in Dymola the message // Failed to expand the variable pressure.V_flow. parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters pressure( V_flow = {0, 0}, dp = {0, 0}) "Volume flow rate vs. total pressure rise"; final parameter Modelica.Units.SI.VolumeFlowRate V_flow_max= if havePressureCurve then (pressure.V_flow[end] -(pressure.V_flow[end] - pressure.V_flow[end - 1]) /(pressure.dp[end] - pressure.dp[end - 1]) * pressure.dp[end]) else 0 "Volume flow rate on the curve when pressure rise is zero"; final parameter Modelica.Units.SI.PressureDifference dpMax( displayUnit="Pa")= if havePressureCurve then (pressure.dp[1] -(pressure.dp[1] - pressure.dp[2]) /(pressure.V_flow[1] - pressure.V_flow[2]) * pressure.V_flow[1]) else 0 "Pressure rise on the curve when flow rate is zero"; // Efficiency computation choices parameter Buildings.Fluid.Movers.BaseClasses.Types.HydraulicEfficiencyMethod etaHydMet= Buildings.Fluid.Movers.BaseClasses.Types.HydraulicEfficiencyMethod.EulerNumber "Efficiency computation method for the hydraulic efficiency etaHyd"; parameter Buildings.Fluid.Movers.BaseClasses.Types.MotorEfficiencyMethod etaMotMet= if powerOrEfficiencyIsHydraulic then Buildings.Fluid.Movers.BaseClasses.Types.MotorEfficiencyMethod.GenericCurve else Buildings.Fluid.Movers.BaseClasses.Types.MotorEfficiencyMethod.NotProvided "Efficiency computation method for the motor efficiency etaMot"; parameter Boolean powerOrEfficiencyIsHydraulic=true "=true if hydraulic power or efficiency is provided, instead of total"; // Arrays for efficiency values parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters efficiency( V_flow={0}, eta={0.7}) "Total or hydraulic efficiency vs. volumetric flow rate"; parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters motorEfficiency( V_flow={0}, eta={0.7}) "Motor efficiency vs. volumetric flow rate"; parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters_yMot motorEfficiency_yMot(y={0}, eta={0.7}) "Motor efficiency vs. part load ratio yMot, where yMot = WHyd/WMot_nominal"; // Power curve // It requires default values to suppress Dymola message // "Failed to expand the variable Power.V_flow" parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.powerParameters power( V_flow={0}, P={0}) "Power (either consumed or hydraulic) vs. volumetric flow rate"; // Peak condition parameter Buildings.Fluid.Movers.BaseClasses.Euler.peak peak( V_flow=peak_internal.V_flow, dp=peak_internal.dp, eta=peak_internal.eta) "Volume flow rate, pressure rise, and efficiency (either total or hydraulic) at peak condition"; final parameter Buildings.Fluid.Movers.BaseClasses.Euler.peak peak_internal= Buildings.Fluid.Movers.BaseClasses.Euler.getPeak(pressure=pressure,power=power) "Internal peak variable"; // The getPeak() function automatically handles the estimation of peak point // when insufficient information is provided from the pressure curve. // Motor parameter Boolean motorCooledByFluid=true "If true, then motor heat is added to fluid stream"; parameter Modelica.Units.SI.Power WMot_nominal(final displayUnit="W")= if max(power.P)>Modelica.Constants.eps then if powerOrEfficiencyIsHydraulic then max(power.P)*1.2 else max(power.P) else if havePressureCurve then V_flow_max/2 * dpMax/2 /0.7*1.2 else 0 "Rated motor power"; parameter Modelica.Units.SI.Efficiency etaMot_max(max=1)= 0.7 "Maximum motor efficiency"; final parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters_yMot motorEfficiency_yMot_generic= Buildings.Fluid.Movers.BaseClasses.Characteristics.motorEfficiencyCurve( P_nominal=WMot_nominal, eta_max=etaMot_max) "Motor efficiency vs. part load ratio"; final parameter Boolean haveWMot_nominal=WMot_nominal > Modelica.Constants.eps "= true, if the rated motor power is provided"; // Speed parameter Real speed_nominal( final min=0, final unit="1") = 1 "Nominal rotational speed for flow characteristic"; parameter Real constantSpeed(final min=0, final unit="1") = 1 "Normalized speed set point, used if inputType = Buildings.Fluid.Types.InputType.Constant"; parameter Real[:] speeds(each final min = 0, each final unit="1") = {1} "Vector of normalized speed set points, used if inputType = Buildings.Fluid.Types.InputType.Stages"; // Set a parameter in order for // (a) FlowControlled_m_flow and FlowControlled_dp to be able to set a reasonable // default pressure curve if it is not specified here, and // (b) SpeedControlled_y to be able to issue an assert // if no pressure curve is specified. final parameter Boolean havePressureCurve= sum(pressure.V_flow) > Modelica.Constants.eps and sum(pressure.dp) > Modelica.Constants.eps "= true, if default record values are being used"; end Generic;