modelFlowMachineInterface

Partial model with performance curves for fans or pumps

Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).

Information

This is an interface that implements the functions to compute the head, power draw and efficiency of fans and pumps.

The nominal hydraulic characteristic (total pressure rise versus volume flow rate) is given by a set of data points using the data record per, which is an instance of Buildings.Fluid.Movers.Data.Generic. A cubic hermite spline with linear extrapolation is used to compute the performance at other operating points.

The model computes the power and efficiency items in the list below.

  • Flow work:
    flo = V̇ ⋅ Δp
  • Total efficiency and consumed electric power:
    η = Ẇflo ⁄ Pele
  • Hydraulic effiency and hydraulic work (shaft work, brake horsepower):
    ηhyd = Ẇflo ⁄ Ẇhyd
  • Motor efficiency:
    ηmot = Ẇhyd ⁄ Pele

See Buildings.Fluid.Movers.UsersGuide for how the user can provide power and efficiency information to the model.

Implementation

For numerical reasons, the user-provided data points for volume flow rate versus pressure rise are modified to add a fan internal flow resistance. Because this flow resistance is subtracted during the simulation when computing the fan pressure rise, the model reproduces the exact points that were provided by the user.

Also for numerical reasons, the pressure rise at zero flow rate and the flow rate at zero pressure rise is added to the user-provided data, unless the user already provides these data points. Since Modelica 3.2 does not allow dynamic memory allocation, this implementation required the use of three different arrays for the situation where no additional point is added, where one additional point is added and where two additional points are added. The parameter curve causes the correct data record to be used during the simulation.

In order to prevent the model from producing negative mover power when either the flow rate or pressure rise is forced to be negative, the flow work flo is constrained to be non-negative. The regularisation starts around 0.01% of the characteristic maximum power max = V̇max Δpmax. See discussions and an example of this situation in IBPSA, #1621.

Parameters

TypeNameDefaultDescription
BooleanhomotopyInitializationtrue= true, use homotopy method
Buildings.Fluid.Movers.Data.GenericperRecord with performance data
Buildings.Fluid.Movers.BaseClasses.Types.PrescribedVariablepreVarBuildings.Fluid.Movers.BaseClasses.Types.PrescribedVariable.SpeedType of prescribed variable
BooleancomputePowerUsingSimilarityLaws= true, compute power exactly, using similarity laws. Otherwise approximate.
Modelica.Units.SI.VolumeFlowRateV_flow_nominalper.pressure.V_flow[nOri]Nominal volume flow rate, used for homotopy
Modelica.Units.SI.Densityrho_defaultFluid density at medium default state
BooleanhaveVMax(abs(per.pressure.dp[nOri]) < Modelica.Constants.eps)Flag, true if user specified data that contain V_flow_max
Modelica.Units.SI.VolumeFlowRateV_flow_maxif per.V_flow_max > Modelica.Constants.eps then per.V_flow_max else V_flow_nominalMaximum volume flow rate, used for smoothing
IntegernOriNumber of data points for pressure curve

Connectors

TypeNameDefaultDescription
Modelica.Blocks.Interfaces.RealInputy_inPrescribed mover speed
Modelica.Blocks.Interfaces.RealOutputy_outMover speed (prescribed or computed)
Modelica.Blocks.Interfaces.RealInputm_flowMass flow rate
Modelica.Blocks.Interfaces.RealInputrhoMedium density
Modelica.Blocks.Interfaces.RealOutputV_flowVolume flow rate
Modelica.Blocks.Interfaces.RealInputdp_inPrescribed pressure increase
Modelica.Blocks.Interfaces.RealOutputdpPressure increase (computed or prescribed)
Modelica.Blocks.Interfaces.RealOutputWFloFlow work
Modelica.Blocks.Interfaces.RealOutputWHydHydraulic work (shaft work, brake horsepower)
Modelica.Blocks.Interfaces.RealOutputPEleElectrical power consumed
Modelica.Blocks.Interfaces.RealOutputetaOverall efficiency
Modelica.Blocks.Interfaces.RealOutputetaHydHydraulic efficiency
Modelica.Blocks.Interfaces.RealOutputetaMotMotor efficiency
Modelica.Blocks.Interfaces.RealOutputr_NRatio N_actual/N_nominal

Components

TypeNameDefaultDescription
Realr_VRatio V_flow/V_flow_max

Contents

NameDescription
getPerformanceDataAsStringprotected
getArrayAsStringprotected

Revisions

  • February 7, 2025, by Jelger Jansen:
    Removed import statement. This is for IBPSA, #1961.
  • May 15, 2024, by Hongxiang Fu:
    Corrected efficiency equations if powerOrEfficiencyIsHydraulic=false and specified the start attribute for etaHyd and etaMot to suppress a warning. This is for IBPSA, #1880.
  • August 8, 2022, by Hongxiang Fu:
    • Modified the power and efficiency computation to allow computing the hydraulic efficiency etaHyd and the motor efficiency etaMot separately;
    • Implemented the option to compute the total efficiency eta or the hydraulic efficiency etaHyd using the Euler number.
    • Implemented the option for the user to provide the motor efficiency etaMot as a function of part load ratio y. Also allowed generic curves to be used.
    • Moved haveVMax here from Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.
    • Now it passes WHyd instead of etaHyd to Buildings.Fluid.Movers.BaseClasses.PowerInterface.
    • Now the flow work WFlo is bounded to be non-negative.
    These are for #2668. June 6, 2022, by Hongxiang Fu:
    Added a constraint that Wflo = V̇ Δp ≥ 0.
    This is for IBPSA, #1621.
  • April 14, 2020, by Michael Wetter:
    Changed homotopyInitialization to a constant.
    This is for IBPSA, #1341.
  • December 2, 2016, by Michael Wetter:
    Removed min attribute as otherwise numerical noise can cause the assertion on the limit to fail.
    This is for #606.
  • February 19, 2016, by Michael Wetter and Filip Jorissen:
    Refactored model to make implementation clearer. This is for #417.
  • January 22, 2016, by Michael Wetter:
    Corrected type declaration of pressure difference and reformatted code. This is for #404.
  • September 2, 2015, by Michael Wetter:
    Corrected computation of etaMot = Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(per=per.motorEfficiency, V_flow=V_flow, d=motDer, r_N=r_N, delta=1E-4) which previously used V_flow_max instead of V_flow.
  • January 6, 2015, by Michael Wetter:
    Revised model for OpenModelica.
  • November 22, 2014, by Michael Wetter:
    Removed in N_actual and N_filtered the max attribute to avoid a translation warning.
  • April 21, 2014, by Filip Jorissen and Michael Wetter:
    Changed model to use Buildings.Fluid.Movers.Data.Generic. April 19, 2014, by Filip Jorissen:
    Passed extra parameters to power() and efficiency() to be able to properly evaluate the scaling law. See #202 for a discussion and validation.
  • September 27, 2013, by Michael Wetter:
    Reformulated per=if (curve == 1) then pCur1 elseif (curve == 2) then pCur2 else pCur3 by moving the computation into the idividual logical branches because OpenModelica generates an error when assign the statement to data as pCur1, pCur2 and pCur3 have different dimensions.
  • September 17, 2013, by Michael Wetter:
    Added missing each keyword in declaration of parameters that are an array.
  • March 20, 2013, by Michael Wetter:
    Removed assignment in declaration of pCur?.V_flow as these parameters have the attribute fixed=false set.
  • October 11, 2012, by Michael Wetter:
    Added implementation of WFlo = eta * P with guard against division by zero. Changed implementation of etaMot=sqrt(eta) to etaHyd = 1 to avoid infinite derivative as eta converges to zero.
  • February 20, 2012, by Michael Wetter:
    Assigned value to nominal attribute of V_flow.
  • February 14, 2012, by Michael Wetter:
    Added filter for start-up and shut-down transient.
  • October 4 2011, by Michael Wetter:
    Revised the implementation of the pressure drop computation as a function of speed and volume flow rate. The new implementation avoids a singularity near zero volume flow rate and zero speed.
  • March 28 2011, by Michael Wetter:
    Added homotopy operator.
  • March 23 2010, by Michael Wetter:
    First implementation.