| Name |
Description |
CDU_epsNTU
|
Example model of a CDU with varying load on the IT side |
Example model of a CDU that serves liquid cooled racks.
The IT load is specified using a periodic pulse input.
This load is cooled by a propylene glycol loop, which exchanges
heat through the CDU with a chilled water supply.
The chilled water is assumed to be delivered at constant temperature.
A PI controller regulates the chilled water flow rate through the control
valve in the CDU in order to track the propylene glycol temperature that is sent
to the IT rack.
model CDU_epsNTU
extends Modelica.Icons.Example;
package MediumChi =
Buildings.Media.Water ;
package MediumRac =
Buildings.Media.Antifreeze.PropyleneGlycolWater(
T_default=303.15,
property_T=303.15,
X_a=
Buildings.Media.Antifreeze.Functions.PropyleneGlycolWater.volumeToMassFraction(
phi=0.25,
T=293.15))
;
parameter Modelica.Units.SI.Power PRac = 48*132000
;
parameter Modelica.Units.SI.Temperature TRac_a = 273.15+42
;
parameter Modelica.Units.SI.Temperature TRac_b = 273.15+47
;
parameter Modelica.Units.SI.Temperature TChi_a = 273.15+36
;
parameter Modelica.Units.SI.Temperature TChi_b = 273.15+41
;
parameter Modelica.Units.SI.MassFlowRate mRac_flow_nominal =
PRac/(TRac_b-TRac_a)/MediumRac.cp_const
;
parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal =
PRac/(TChi_b-TChi_a)/MediumChi.cp_const
;
parameter Modelica.Units.SI.PressureDifference dpRac_nominal(
displayUnit="Pa") = 60000
;
parameter Modelica.Units.SI.PressureDifference dpHexChi_nominal(
displayUnit="Pa")=80000
;
parameter Buildings.Fluid.DataCenters.CDUs.LiquidToLiquid.Data.Generic_epsNTU
datCDU(
Q_flow_nominal=-PRac,
TRacOut_nominal=TRac_a,
mPla_flow_nominal=mChi_flow_nominal,
mRac_flow_nominal=mRac_flow_nominal,
dpHexPla_nominal=dpHexChi_nominal,
medPla=Buildings.Fluid.DataCenters.CDUs.Types.Media.Water,
phiGlyPla=0,
medRac=Buildings.Fluid.DataCenters.CDUs.Types.Media.PropyleneGlycol,
phiGlyRac=0.25,
TApp_nominal=6,
dpPumpExt_nominal(displayUnit="Pa") = dpRac_nominal,
pumpExtHead(
V_flow=mRac_flow_nominal/1010*{0.000, 0.250, 0.500, 0.750, 1.000},
dp=dpRac_nominal*({11.90, 11.61, 9.810, 6.202, 1.0})))
;
parameter Buildings.Fluid.DataCenters.Racks.Liquid.Data.OCP_1kW_OAM_PG25
datRac(
PIT_nominal=PRac,
m_flow_nominal=mRac_flow_nominal,
dp_nominal=dpRac_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uti(
amplitude=0.4,
width=0.5,
period=3600,
shift=900,
offset=0.6)
;
Buildings.Fluid.DataCenters.Racks.Liquid.ColdPlateR_P
rac(
redeclare package Medium = MediumRac,
allowFlowReversal=false,
dat=datRac,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.Sources.Boundary_pT bou(
redeclare package Medium = MediumChi,
p(displayUnit="Pa") = 300000,
T=TChi_b,
nPorts=1) ;
Buildings.Fluid.Sensors.TemperatureTwoPort senTCDU_a(
redeclare package Medium = MediumChi,
allowFlowReversal=false,
m_flow_nominal=mChi_flow_nominal,
tau=0) ;
Buildings.Fluid.DataCenters.CDUs.LiquidToLiquid.CDU_epsNTU cdu(
redeclare package MediumPla = MediumChi,
redeclare package MediumRac = MediumRac,
allowFlowReversalRac=false,
final dat=datCDU,
allowFlowReversalPla=false,
yPum_start=1) ;
Fluid.Sources.Boundary_pT sou(
redeclare package Medium = MediumChi,
p=300000 + 2*dpHexChi_nominal,
T=TChi_a,
nPorts=1)
;
Fluid.Sensors.TemperatureTwoPort senTCDU_b(
redeclare package Medium = MediumChi,
allowFlowReversal=false,
m_flow_nominal=mChi_flow_nominal,
tau=0) ;
Fluid.Sensors.TemperatureTwoPort senTRac_a(
redeclare package Medium = MediumRac,
allowFlowReversal=false,
m_flow_nominal=mRac_flow_nominal,
tau=0) ;
Fluid.Sensors.TemperatureTwoPort senTRac_b(
redeclare package Medium = MediumRac,
allowFlowReversal=false,
m_flow_nominal=mRac_flow_nominal,
tau=0) ;
Controls.OBC.CDL.Reals.Sources.Constant dpSet(k=50000) ;
Controls.OBC.CDL.Reals.Sources.Constant TSetRacIn(k=TRac_a)
;
Modelica.Blocks.Math.Gain PITAir(
k(
final unit="W",
min=0) = datRac.PIT_nominal,
u(
final unit="1"),
y(
final unit="W"))
;
equation
connect(sou.ports[1], senTCDU_a.port_a);
connect(senTCDU_a.port_b, cdu.port_aPla);
connect(cdu.port_bPla, senTCDU_b.port_a);
connect(senTCDU_b.port_b, bou.ports[1]);
connect(cdu.port_bRac, senTRac_a.port_a);
connect(senTRac_a.port_b, rac.port_a);
connect(rac.port_b, senTRac_b.port_a);
connect(senTRac_b.port_b, cdu.port_aRac);
connect(dpSet.y, cdu.dpSet);
connect(cdu.TSet, TSetRacIn.y);
connect(uti.y, PITAir.u);
connect(PITAir.y, rac.P);
end CDU_epsNTU;