Description: "Package with fan and pump models"

- Home > Modelica

## Buildings.Fluid.Movers

Package with fan and pump models

### Information

This package contains components models for fans and pumps.

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

### Package Content

Name | Description
--- | ---
UsersGuide | User's Guide
FlowControlled_dp | Fan or pump with ideally controlled head dp as input signal
FlowControlled_m_flow | Fan or pump with ideally controlled mass flow rate as input signal
SpeedControlled_Nrpm | Fan or pump with ideally controlled speed Nrpm as input signal
SpeedControlled_y | Fan or pump with ideally controlled normalized speed y as input signal
Data | Package containing data for real pumps/fans
Examples | Collection of models that illustrate model use and test models
Validation | Collection of validation models
BaseClasses | Package with base classes for Buildings.Fluid.Movers

## Buildings.Fluid.Movers.FlowControlled_dp

Fan or pump with ideally controlled head dp as input signal

### Information

This model describes a fan or pump with prescribed head. The input connector provides the difference between outlet minus inlet pressure. The efficiency of the device is computed based on the efficiency curves that take as an argument the actual volume flow rate divided by the maximum possible volume flow rate.

If `filteredSpeed=true`, then the parameter `dp_nominal` is used to normalize the filter. This is used to improve the numerics of the transient response. The actual pressure raise of the mover at steady-state is independent of the value of `dp_nominal`. It is recommended to set `dp_nominal` to approximately the pressure raise that the fan has during full speed.

See the User's Guide for more information.

Extends from Buildings.Fluid.Movers.BaseClasses.FlowControlled (Partial model for fan or pump with ideally controlled mass flow rate or head as input signal).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Boolean | addPowerToMedium | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations)
Boolean | control_m_flow | false | = false to control head instead of m_flow
FlowControlled | per | redeclare parameter Data.Flo... | Record with performance data
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Real | r_V.start | 1 | Ratio V_flow/V_flow_max = V_flow/V_flow(dp=0, N=N_nominal)
Characteristics
Boolean | use_powerCharacteristic | false | Use powerCharacteristic (vs. efficiencyCharacteristic)
Boolean | motorCooledByFluid | true | If true (and if addPowerToMedium = true), then motor heat is added to fluid stream
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Boolean | dynamicBalance | true | Set to true to use a dynamic balance, which often leads to smaller systems of equations
Nominal condition
Time | tau | 1 | Time constant of fluid volume for nominal flow, used if dynamicBalance=true [s]
Filtered speed
Boolean | filteredSpeed | true | = true, if speed is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 30 | Rise time of the filter (time to reach 99.6 % of the speed) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Pressure | dp_start | 0 | Initial value of pressure raise [Pa]
Pressure | dp_nominal | 10000 | Nominal pressure raise, used to normalize filter [Pa]
Initialization
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa]
Temperature | T_start | Medium.T_default | Start value of temperature [K]
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg]
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances
ExtraProperty | C_nominal[Medium.nC] | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s]
Boolean | homotopyInitialization | true | = true, use homotopy method
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed

### Connectors

Type | Name | Description
--- | --- | ---
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b)
HeatPort_a | heatPort | Heat dissipation to environment
output RealOutput | P | Electrical power consumed [W]
input RealInput | dp_in | Prescribed pressure rise [Pa]
output RealOutput | dp_actual | [Pa]

### Modelica definition

model FlowControlled_dp "Fan or pump with ideally controlled head dp as input signal" extends Buildings.Fluid.Movers.BaseClasses.FlowControlled( final control_m_flow = false, preSou(dp_start=dp_start)); // Classes used to implement the filtered speed parameter Boolean filteredSpeed=true "= true, if speed is filtered with a 2nd order CriticalDamping filter"; parameter Modelica.SIunits.Time riseTime=30 "Rise time of the filter (time to reach 99.6 % of the speed)"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)"; parameter Modelica.SIunits.Pressure dp_start(min=0, displayUnit="Pa")=0 "Initial value of pressure raise"; parameter Modelica.SIunits.Pressure dp_nominal(min=0, displayUnit="Pa")=10000 "Nominal pressure raise, used to normalize filter"; Modelica.Blocks.Interfaces.RealInput dp_in(min=0, final unit="Pa") "Prescribed pressure rise"; Modelica.Blocks.Interfaces.RealOutput dp_actual(min=0, final unit="Pa"); protected Modelica.Blocks.Math.Gain gain(final k=-1); Modelica.Blocks.Continuous.Filter filter( order=2, f_cut=5/(2*Modelica.Constants.pi*riseTime), final init=init, final y_start=dp_start, u_nominal=abs(dp_nominal), x(each stateSelect=StateSelect.always), u(final unit="Pa"), y(final unit="Pa"), final analogFilter=Modelica.Blocks.Types.AnalogFilter.CriticalDamping, final filterType=Modelica.Blocks.Types.FilterType.LowPass) if filteredSpeed "Second order filter to approximate transient of rotor, and to improve numerics"; Modelica.Blocks.Interfaces.RealOutput dp_filtered(min=0, final unit="Pa") if filteredSpeed "Filtered pressure"; equation assert(dp_in >= -1E-3, "dp_in cannot be negative. Obtained dp_in = " + String(dp_in)); if filteredSpeed then connect(dp_in, filter.u); connect(filter.y, dp_actual); connect(filter.y, dp_filtered); else connect(dp_in, dp_actual); end if; connect(gain.y, preSou.dp_in); connect(gain.u, dp_actual); end FlowControlled_dp;

## Buildings.Fluid.Movers.FlowControlled_m_flow

Fan or pump with ideally controlled mass flow rate as input signal

### Information

This model describes a fan or pump with prescribed mass flow rate. The efficiency of the device is computed based on the efficiency curves that take as an argument the actual volume flow rate divided by the maximum possible volume flow rate.

See the User's Guide for more information.

Extends from Buildings.Fluid.Movers.BaseClasses.FlowControlled (Partial model for fan or pump with ideally controlled mass flow rate or head as input signal).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Boolean | addPowerToMedium | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations)
Boolean | control_m_flow | true | = false to control head instead of m_flow
FlowControlled | per | redeclare parameter Data.Flo... | Record with performance data
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Real | r_V.start | 1 | Ratio V_flow/V_flow_max = V_flow/V_flow(dp=0, N=N_nominal)
Characteristics
Boolean | use_powerCharacteristic | false | Use powerCharacteristic (vs. efficiencyCharacteristic)
Boolean | motorCooledByFluid | true | If true (and if addPowerToMedium = true), then motor heat is added to fluid stream
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Boolean | dynamicBalance | true | Set to true to use a dynamic balance, which often leads to smaller systems of equations
Nominal condition
Time | tau | 1 | Time constant of fluid volume for nominal flow, used if dynamicBalance=true [s]
Filtered speed
Boolean | filteredSpeed | true | = true, if speed is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 30 | Rise time of the filter (time to reach 99.6 % of the speed) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
MassFlowRate | m_flow_start | 0 | Initial value of mass flow rate [kg/s]
Initialization
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa]
Temperature | T_start | Medium.T_default | Start value of temperature [K]
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg]
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances
ExtraProperty | C_nominal[Medium.nC] | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s]
Boolean | homotopyInitialization | true | = true, use homotopy method
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed

### Connectors

Type | Name | Description
--- | --- | ---
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b)
HeatPort_a | heatPort | Heat dissipation to environment
output RealOutput | P | Electrical power consumed [W]
input RealInput | m_flow_in | Prescribed mass flow rate [kg/s]
output RealOutput | m_flow_actual | Actual mass flow rate [kg/s]

### Modelica definition

model FlowControlled_m_flow "Fan or pump with ideally controlled mass flow rate as input signal" extends Buildings.Fluid.Movers.BaseClasses.FlowControlled( final control_m_flow=true, preSou(m_flow_start=m_flow_start)); // Classes used to implement the filtered speed parameter Boolean filteredSpeed=true "= true, if speed is filtered with a 2nd order CriticalDamping filter"; parameter Modelica.SIunits.Time riseTime=30 "Rise time of the filter (time to reach 99.6 % of the speed)"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)"; parameter Modelica.SIunits.MassFlowRate m_flow_start(min=0)=0 "Initial value of mass flow rate"; Modelica.Blocks.Interfaces.RealInput m_flow_in(final unit="kg/s", nominal=m_flow_nominal) "Prescribed mass flow rate"; Modelica.Blocks.Interfaces.RealOutput m_flow_actual(final unit="kg/s", nominal=m_flow_nominal) "Actual mass flow rate"; protected Modelica.Blocks.Continuous.Filter filter( order=2, f_cut=5/(2*Modelica.Constants.pi*riseTime), final init=init, final y_start=m_flow_start, u_nominal=m_flow_nominal, x(each stateSelect=StateSelect.always), u(final unit="kg/s"), y(final unit="kg/s"), final analogFilter=Modelica.Blocks.Types.AnalogFilter.CriticalDamping, final filterType=Modelica.Blocks.Types.FilterType.LowPass) if filteredSpeed "Second order filter to approximate transient of rotor, and to improve numerics"; Modelica.Blocks.Interfaces.RealOutput m_flow_filtered(final unit="kg/s") if filteredSpeed "Filtered mass flow rate"; equation if filteredSpeed then connect(m_flow_in, filter.u); connect(filter.y, m_flow_actual); else connect(m_flow_in, m_flow_actual); end if; connect(filter.y, m_flow_filtered); connect(m_flow_actual, preSou.m_flow_in); end FlowControlled_m_flow;

## Buildings.Fluid.Movers.SpeedControlled_Nrpm

Fan or pump with ideally controlled speed Nrpm as input signal

### Information

This model describes a fan or pump with prescribed speed in revolutions per minute. The head is computed based on the performance curve that take as an argument the actual volume flow rate divided by the maximum flow rate and the relative speed of the fan. The efficiency of the device is computed based on the efficiency curves that take as an argument the actual volume flow rate divided by the maximum possible volume flow rate, or based on the motor performance curves.

See the User's Guide for more information.

Extends from Buildings.Fluid.Movers.BaseClasses.SpeedControlled (Partial model for fan or pump with speed (y or Nrpm) as input signal).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Boolean | addPowerToMedium | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations)
SpeedControlled_Nrpm | per | redeclare parameter Data.Spe... | Record with performance data
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Real | r_V.start | 1 | Ratio V_flow/V_flow_max [1]
Characteristics
Boolean | use_powerCharacteristic | false | Use powerCharacteristic (vs. efficiencyCharacteristic)
Boolean | motorCooledByFluid | true | If true (and if addPowerToMedium = true), then motor heat is added to fluid stream
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Boolean | dynamicBalance | true | Set to true to use a dynamic balance, which often leads to smaller systems of equations
Nominal condition
Time | tau | 1 | Time constant of fluid volume for nominal flow, used if dynamicBalance=true [s]
Filtered speed
Boolean | filteredSpeed | true | = true, if speed is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 30 | Rise time of the filter (time to reach 99.6 % of the speed) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 0 | Initial value of speed [1]
Initialization
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa]
Temperature | T_start | Medium.T_default | Start value of temperature [K]
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg]
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances
ExtraProperty | C_nominal[Medium.nC] | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s]
Boolean | homotopyInitialization | true | = true, use homotopy method
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed

### Connectors

Type | Name | Description
--- | --- | ---
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b)
HeatPort_a | heatPort | Heat dissipation to environment
output RealOutput | P | Electrical power consumed [W]
output RealOutput | y_actual | [1]
input RealInput | Nrpm | Prescribed rotational speed [1/min]

### Modelica definition

model SpeedControlled_Nrpm "Fan or pump with ideally controlled speed Nrpm as input signal" extends Buildings.Fluid.Movers.BaseClasses.SpeedControlled( _per_y(hydraulicEfficiency=per.hydraulicEfficiency, motorEfficiency=per.motorEfficiency, power=per.power, pressure( V_flow = per.pressure.V_flow, dp = per.pressure.dp), motorCooledByFluid=per.motorCooledByFluid, use_powerCharacteristic=per.use_powerCharacteristic)); replaceable parameter Data.SpeedControlled_Nrpm per "Record with performance data"; Modelica.Blocks.Interfaces.RealInput Nrpm(unit="1/min") "Prescribed rotational speed"; protected Modelica.Blocks.Math.Gain gaiSpe( u(min=0, final quantity="AngularVelocity", final unit="1/min", nominal=3000), y(final unit="1", nominal=1), final k=1/per.N_nominal) "Gain for speed input signal"; equation if filteredSpeed then connect(gaiSpe.y, filter.u); connect(filter.y, y_actual); connect(filter.y, y_filtered); else connect(gaiSpe.y, y_actual); end if; connect(gaiSpe.u, Nrpm); end SpeedControlled_Nrpm;

## Buildings.Fluid.Movers.SpeedControlled_y

Fan or pump with ideally controlled normalized speed y as input signal

### Information

This model describes a fan or pump with prescribed normalized speed. The input connector provides the normalized rotational speed (between 0 and 1). The head is computed based on the performance curve that take as an argument the actual volume flow rate divided by the maximum flow rate and the relative speed of the fan. The efficiency of the device is computed based on the efficiency curves that take as an argument the actual volume flow rate divided by the maximum possible volume flow rate, or based on the motor performance curves.

See the User's Guide for more information.

Extends from Buildings.Fluid.Movers.BaseClasses.SpeedControlled (Partial model for fan or pump with speed (y or Nrpm) as input signal).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Boolean | addPowerToMedium | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations)
SpeedControlled_y | per | redeclare parameter Data.Spe... | Record with performance data
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Real | r_V.start | 1 | Ratio V_flow/V_flow_max [1]
Characteristics
Boolean | use_powerCharacteristic | false | Use powerCharacteristic (vs. efficiencyCharacteristic)
Boolean | motorCooledByFluid | true | If true (and if addPowerToMedium = true), then motor heat is added to fluid stream
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Boolean | dynamicBalance | true | Set to true to use a dynamic balance, which often leads to smaller systems of equations
Nominal condition
Time | tau | 1 | Time constant of fluid volume for nominal flow, used if dynamicBalance=true [s]
Filtered speed
Boolean | filteredSpeed | true | = true, if speed is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 30 | Rise time of the filter (time to reach 99.6 % of the speed) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 0 | Initial value of speed [1]
Initialization
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa]
Temperature | T_start | Medium.T_default | Start value of temperature [K]
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg]
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances
ExtraProperty | C_nominal[Medium.nC] | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s]
Boolean | homotopyInitialization | true | = true, use homotopy method
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed

### Connectors

Type | Name | Description
--- | --- | ---
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b)
HeatPort_a | heatPort | Heat dissipation to environment
output RealOutput | P | Electrical power consumed [W]
output RealOutput | y_actual | [1]
input RealInput | y | Constant normalized rotational speed [1]

### Modelica definition

model SpeedControlled_y "Fan or pump with ideally controlled normalized speed y as input signal" extends Buildings.Fluid.Movers.BaseClasses.SpeedControlled( _per_y(hydraulicEfficiency=per.hydraulicEfficiency, motorEfficiency=per.motorEfficiency, power=per.power, pressure( V_flow = per.pressure.V_flow, dp = per.pressure.dp), motorCooledByFluid=per.motorCooledByFluid, use_powerCharacteristic=per.use_powerCharacteristic)); replaceable parameter Data.SpeedControlled_y per "Record with performance data"; Modelica.Blocks.Interfaces.RealInput y(min=0, unit="1") "Constant normalized rotational speed"; // We set the nominal value to 3000 as this is the // right order of magnitude. Using per.N_nominal // would yield to a translation warning // Non-literal value. // In nominal attribute for fan.filter.u. equation connect(filter.y, y_filtered); if filteredSpeed then connect(y, filter.u); connect(filter.y, y_actual); else connect(y, y_actual); end if; end SpeedControlled_y;