Buildings.Fluid.DataCenters.Racks.Liquid

Package with models for single-phase liquid-cooled IT racks

Information

This package contains models for single-phase liquid-cooled IT racks.

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

Package Content

Name Description
Buildings.Fluid.DataCenters.Racks.Liquid.ColdPlateR_P ColdPlateR_P Model of a cold plate in which heat transfer is characterized by R for different flow rates, and utilization is input
Buildings.Fluid.DataCenters.Racks.Liquid.Data Data Package with data records for racks
Buildings.Fluid.DataCenters.Racks.Liquid.Examples Examples Collection of models that illustrate model use and test models
Buildings.Fluid.DataCenters.Racks.Liquid.BaseClasses BaseClasses Package with base classes for racks

Buildings.Fluid.DataCenters.Racks.Liquid.ColdPlateR_P Buildings.Fluid.DataCenters.Racks.Liquid.ColdPlateR_P

Model of a cold plate in which heat transfer is characterized by R for different flow rates, and utilization is input

Buildings.Fluid.DataCenters.Racks.Liquid.ColdPlateR_P

Information

Model of IT racks with cold plate heat exchangers based on the characterization of the Open Compute Project.

Electrical and fluid characterization

The model takes as an input the electrical power consumption P and adds it as heat added to the coolant fluid

Q_flow = P.

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. Based on a data fit using the data in Chen et al. (2023), the default value is m=1.85. The model assumes a default pressure drop dp_nominal of dp_nominal=50 kPa, which is the pressure drop of the OCP specified cold plate with a 8x1 loop at 10 l/min flow rate with 25% PGW.

Case temperature

The model also computes the case temperature, which is the external surface temperature of the component's packaging, typically the top-center point where a thermal interface material or heat sink is attached.

The case temperature is computed based on the coolant inlet temperature and the heat dissipated by the chip, using the case-to-inlet thermal resistance of a cold plate. Therefore, the model assumes sufficient mass flow rate, i.e., this model simplifies the case temperature as being independent of the coolant mass flow rate, other than through the variation of the thermal resistance with the coolant mass flow rate. This follows the convention used in the Open Compute Project report by Chen et al. (2023), which uses for the case-to-inlet thermal resistance the definition

R = (T_cas - T_inlet) ⁄ Q_flow,

where T_cas is the case temperature, T_inlet is the coolant inlet temperature and Q_flow is the heat emitted by the cold plate. Use of this equation requires knowledge of the heat flow rate of one cold plate Q_flow, but the component model takes as a parameter the total design heat flow rate PIT_nominal. The model approximates the number of cold plates using

n_col = PIT_nominal / (VColPla_flow_nominal * rho * c_p * dT_nominal),

where VColPla_flow_nominal is the design flow rate of a cold plate, approximated by default as the average value of the data record's volume flow rate, VColPla_flow_nominal = average(datRes.V_flow), rho is the fluid density, c_p is the fluid specific heat capacity, and dT_nominal is the design temperature difference.

This thermal resistance is computed using the data from the data record Buildings.Fluid.DataCenters.Racks.Liquid.Data.Generic_R_m_flow. The computation is done in the block casTem, which does a data fit for R. The relative error of this data fit is shown in casTem.relErrR.

References

Cheng Chen, Dennis Trieu, Tejas Shah, Allen Guo, Jaylen Cheng, Christopher Chapman, Sukhvinder Kang, Eran Dagan, Assaf Dinstag,Jane Yao. OCP OAI SYSTEM LIQUID COOLING GUIDELINES. 2023.

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
Case temperature
VolumeFlowRateVColPla_flow_nominalsum(dat.theRes.V_flow)/size(...Design flow rate of one cold plate, used to compute the case temperature [m3/s]
RealnColPladat.PIT_nominal/(VColPla_flo...Number of cold plates, used to compute the case temperature
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]
Advanced
Booleanlinearizedfalse= true, use linear relation between m_flow and dp for any flow rate

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]

Modelica definition

model ColdPlateR_P "Model of a cold plate in which heat transfer is characterized by R for different flow rates, and utilization is input" extends Buildings.Fluid.DataCenters.Racks.BaseClasses.PartialRack( redeclare replaceable Buildings.Fluid.DataCenters.Racks.Liquid.Data.Generic dat constrainedby Buildings.Fluid.DataCenters.Racks.Liquid.Data.Generic, vol(nPorts=2)); final parameter Modelica.Units.SI.TemperatureDifference dT_nominal=dat.PIT_nominal/ (dat.m_flow_nominal*cp_default) "Design temperature differences, used to compute cold plate temperature"; parameter Modelica.Units.SI.VolumeFlowRate VColPla_flow_nominal=sum(dat.theRes.V_flow) /size(dat.theRes.V_flow, 1) "Design flow rate of one cold plate, used to compute the case temperature"; // For number of rack, we use a Real to simplify solving optimizations that involves this parameter parameter Real nColPla=dat.PIT_nominal/ (VColPla_flow_nominal*d_default*cp_default*dT_nominal) "Number of cold plates, used to compute the case temperature"; parameter Boolean linearized = false "= true, use linear relation between m_flow and dp for any flow rate"; Modelica.Units.SI.PressureDifference dp(displayUnit="Pa") = preDro.dp "Pressure difference between port_a and port_b"; Buildings.Fluid.DataCenters.Racks.Liquid.BaseClasses.CaseTemperature casTem( final dat=dat.theRes, final V_flow_nominal=dat.m_flow_nominal/d_default/nColPla) "Case temperature"; protected parameter Medium.ThermodynamicState state_default = Medium.setState_pTX( T=Medium.T_default, p=Medium.p_default, X=Medium.X_default[1:Medium.nXi]) "Medium state at default values"; parameter Modelica.Units.SI.SpecificHeatCapacity cp_default= Medium.specificHeatCapacityCp(state=state_default) "Specific heat capacity"; parameter Modelica.Units.SI.Density d_default= Medium.density(state=state_default) "Specific heat capacity"; Modelica.Blocks.Sources.RealExpression VColPla_flow(y(final unit="m3/s") = port_a.m_flow/d_default/nColPla) "Volume flow rate per cold plate"; Modelica.Blocks.Sources.RealExpression TIn( y(final unit="K", displayUnit="degC") = Medium.temperature_phX( p=port_a.p, h=inStream(port_a.h_outflow), X=cat(1, inStream(port_a.Xi_outflow), {1 - sum(inStream(port_a.Xi_outflow))}))) "Inlet temperature"; Fluid.FixedResistances.PressureDrop preDro( redeclare package Medium = Medium, final allowFlowReversal=allowFlowReversal, final m_flow_nominal=dat.m_flow_nominal, final dp_nominal=dat.dp_nominal, final n=dat.n) "Flow resistance"; protected Modelica.Blocks.Math.Gain QCas_flow(final k=1/nColPla) "Gain to compute heat flow rate per case"; equation connect(casTem.V_flow, VColPla_flow.y); connect(casTem.TIn, TIn.y); connect(QCas_flow.y, casTem.Q_flow); connect(preDro.port_b, vol.ports[1]); connect(preDro.port_a, port_a); connect(vol.ports[2], port_b); connect(QCas_flow.u, P); connect(P, preHea.Q_flow); end ColdPlateR_P;