Buildings.Fluid.DataCenters.Racks.Air

Package with models for air-cooled IT racks

Information

This package contains models for air-cooled IT racks. For air-cooled IT racks with rear door heat exchangers, see the package Buildings.Fluid.DataCenters.Racks.Hybrid.

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

Package Content

Name Description
Buildings.Fluid.DataCenters.Racks.Air.Rack_P Rack_P Model of an air-cooled rack, and utilization is input
Buildings.Fluid.DataCenters.Racks.Air.Data Data Package with data records for racks
Buildings.Fluid.DataCenters.Racks.Air.Examples Examples Collection of models that illustrate model use and test models

Buildings.Fluid.DataCenters.Racks.Air.Rack_P Buildings.Fluid.DataCenters.Racks.Air.Rack_P

Model of an air-cooled rack, and utilization is input

Buildings.Fluid.DataCenters.Racks.Air.Rack_P

Information

Model of an air-cooled IT rack.

Electrical and fluid characterization

The model takes as a parameter the thermal design power (TDB) P_nominal and as an input the utilization u. The heat added to the coolant fluid is then calculated as

Q_flow = u P_nominal.

The fluid outlet temperature is computed using a first order delay to mimic the transient effect. This first order delay is characterized by the user-configurable time constant tau, set by default to tau=2 seconds. For exact transient response, this value should be identified based on measurements.

To compute the pressure drop, the model uses Buildings.Fluid.FixedResistances.PressureDrop. Therefore, the mass flow rate and pressure drop are related as

m_flow ⁄ m_flow_nominal = (dp ⁄ dp_nominal)m,

where m_flow_nominal is a parameter for the design flow rate, dp is the pressure difference between inlet and outlet, dp_nominal is a parameter for the design pressure difference, and m is a parameter for the flow exponent.

Because the pressure drop of the rack is typically no a known design quantity, the model computes it internally based on the fan power consumption and the fan efficiency.

Fan

The model has a built-in fan which uses a constant total efficiency, specified through the parameter dat.eta_nominal. The fan has a PI controller that maintains a temperature difference across the rack equal to the parameter dTSet.

Implementation

The implementation uses a fan model with prescribed speed, and, as explained above, it computes a flow resistance which is then used in the simulations. This implementation is used to allow use of this model with active rear door heat exchangers. As active rear-door heat exchangers also have a fan, in such a configuration there will be two fans in series. Prescribing the mass flow rate instead of the fan may give in this situation an overspecified system of equations. Thefore, rack model and rear-door heat exchangers use the fan model Buildings.Fluid.DataCenters.Racks.BaseClasses.ControlledFan.

Extends from Buildings.Fluid.DataCenters.Racks.BaseClasses.PartialRack (Partial model of an IT rack, with utilization as input).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Fan controller
StrategyfanControlBuildings.Fluid.DataCenters....Type of fan control strategy
RealfanSpeed[:, :][0.0, 0.0; 1.0, 1.0]Load and fan speed matrix (1st column normalized IT load, 2nd fan speed), e.g., fanSpeed=[0, 0; 0.5, 0.7; 1, 1])
TemperatureTAirOut_setdat.TOut_nominalSet point temperature for rack outlet air [K]
Realk1Gain of fan PI controller
TimeTi60Integrator time constant of fan PI controller [s]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Timetau2Time constant of fluid outlet temperature at nominal flow [s]
Initialization
TemperatureT_startMedium.T_defaultStart value of temperature [K]

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input RealInputPElectrical power consumption [W]
output RealOutputPTotElectrical power consumed by IT and fan [W]
output RealOutputPFanElectrical power consumed by fan [W]

Modelica definition

model Rack_P "Model of an air-cooled rack, and utilization is input" extends Buildings.Fluid.DataCenters.Racks.BaseClasses.PartialRack( redeclare replaceable Buildings.Fluid.DataCenters.Racks.Air.Data.Generic dat constrainedby Buildings.Fluid.DataCenters.Racks.Air.Data.Generic, vol(nPorts=2)); parameter Buildings.Fluid.DataCenters.Racks.FanControllers.Types.Strategy fanControl = Buildings.Fluid.DataCenters.Racks.FanControllers.Types.Strategy.Load "Type of fan control strategy"; parameter Real fanSpeed[:,:]=[0.0,0.0; 1.0,1.0] "Load and fan speed matrix (1st column normalized IT load, 2nd fan speed), e.g., fanSpeed=[0, 0; 0.5, 0.7; 1, 1])"; parameter Modelica.Units.SI.Temperature TAirOut_set = dat.TOut_nominal "Set point temperature for rack outlet air"; parameter Real k=1 "Gain of fan PI controller"; parameter Modelica.Units.SI.Time Ti=60 "Integrator time constant of fan PI controller"; Modelica.Blocks.Interfaces.RealOutput PTot(final unit="W") "Electrical power consumed by IT and fan"; Modelica.Blocks.Interfaces.RealOutput PFan(final unit="W") "Electrical power consumed by fan"; Buildings.Fluid.DataCenters.Racks.FanControllers.OutletTemperature conFanTem( final k=k, final Ti=Ti) if fanControl == Buildings.Fluid.DataCenters.Racks.FanControllers.Types.Strategy.OutletTemperature "Controlled fans to cool IT equipment"; Buildings.Fluid.DataCenters.Racks.FanControllers.Load conFanLoa( final P_nominal=dat.PIT_nominal, final fanSpeed=fanSpeed) if fanControl == Buildings.Fluid.DataCenters.Racks.FanControllers.Types.Strategy.Load "Fan controller based on IT load"; DataCenters.Racks.BaseClasses.Fan fan( redeclare package Medium = Medium, final allowFlowReversal=allowFlowReversal, final eta_nominal=dat.eta_nominal, m_flow_nominal=dat.m_flow_nominal, final PFan_nominal=dat.PFan_nominal, energyDynamics=energyDynamics, addPowerToMedium=true) "Fan"; protected parameter Modelica.Units.SI.Density rho_default = Medium.density( state_default) "Density"; parameter Medium.ThermodynamicState state_default= Medium.setState_phX( Medium.p_default, Medium.h_default, Medium.X_default[1:Medium.nXi]) "Default medium state"; parameter Modelica.Units.SI.PressureDifference dp_nominal(displayUnit="Pa") = dat.PFan_nominal * dat.eta_nominal / (dat.m_flow_nominal/rho_default) "Fan pressure rise at nominal conditions, used also to parameterize internal flow resistance"; Buildings.Controls.OBC.CDL.Reals.Add PTotal "Total power consumption"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TAirLvg "Leaving air temperature"; Buildings.Fluid.FixedResistances.PressureDrop res( redeclare package Medium = Medium, allowFlowReversal=allowFlowReversal, m_flow_nominal=dat.m_flow_nominal, from_dp=true, dp_nominal=dp_nominal) "Flow resistance"; protected Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSet( k(final unit="K", displayUnit="degC")=TAirOut_set, y(final unit="K", displayUnit="degC")) "Set point for outlet temperature"; equation connect(PTotal.y, PTot); connect(P, PTotal.u1); connect(P, preHea.Q_flow); connect(TAirLvg.port, vol.heatPort); connect(res.port_b, port_b); connect(TSet.y, conFanTem.TSet); connect(TAirLvg.T, conFanTem.TMea); connect(port_a, fan.port_a); connect(fan.P, PTotal.u2); connect(fan.P, PFan); connect(conFanLoa.P, P); connect(conFanLoa.y, fan.y); connect(conFanTem.y, fan.y); connect(fan.port_b, vol.ports[1]); connect(vol.ports[2], res.port_a); end Rack_P;