Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses

Base classes for examples

Information

This package contains base models for the examples in Buildings.Applications.DataCenters.ChillerCooled.Examples.

Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).

Package Content

Name Description
Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PartialDataCenter PartialDataCenter Partial model that impliments cooling system for data centers
Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PostProcess PostProcess Post-processing

Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PartialDataCenter Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PartialDataCenter

Partial model that impliments cooling system for data centers

Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PartialDataCenter

Information

This is a partial model that describes the chilled water cooling system in a data center. The sizing data are collected from the reference.

Reference

Parameters

TypeNameDefaultDescription
replaceable package MediumABuildings.Media.AirMedium model
replaceable package MediumWBuildings.Media.WaterMedium model
IntegernumChi2Number of chillers
MassFlowRatem1_flow_chi_nominal34.7Nominal mass flow rate at condenser water in the chillers [kg/s]
MassFlowRatem2_flow_chi_nominal18.3Nominal mass flow rate at evaporator water in the chillers [kg/s]
PressureDifferencedp1_chi_nominal46.2*1000Nominal pressure [Pa]
PressureDifferencedp2_chi_nominal44.8*1000Nominal pressure [Pa]
PowerQEva_nominalm2_flow_chi_nominal*4200*(6....Nominal cooling capaciaty(Negative means cooling) [W]
MassFlowRatem1_flow_wse_nominal34.7Nominal mass flow rate at condenser water in the chillers [kg/s]
MassFlowRatem2_flow_wse_nominal35.3Nominal mass flow rate at condenser water in the chillers [kg/s]
PressureDifferencedp1_wse_nominal33.1*1000Nominal pressure [Pa]
PressureDifferencedp2_wse_nominal34.5*1000Nominal pressure [Pa]
GenericperPumCW[numChi]perPumCW(each pressure=Build...Performance data for condenser water pumps
TimetWai1200Waiting time [s]
ThermalConductanceUA_nominalnumChi*QEva_nominal/Building...Thermal conductance at nominal flow for sensible heat, used to compute time constant [W/K]
MassFlowRatemAir_flow_nominal161.35Nominal air mass flowrate [kg/s]
RealyValMinAHU0.1Minimum valve openning position [1]
TemperatureTCHWSet273.15 + 8Chilled water temperature setpoint [K]
TemperatureTSupAirSetTCHWSet + 10Supply air temperature setpoint [K]
TemperatureTRetAirSet273.15 + 25Supply air temperature setpoint [K]
PressuredpSetPoi80000Differential pressure setpoint [Pa]
PartialChillerWSEchiWSEchiWSE(redeclare replaceable...Chillers and waterside economizer

Connectors

TypeNameDescription
replaceable package MediumAMedium model
replaceable package MediumWMedium model
BusweaBusWeather data bus

Modelica definition

partial model PartialDataCenter "Partial model that impliments cooling system for data centers" replaceable package MediumA = Buildings.Media.Air "Medium model"; replaceable package MediumW = Buildings.Media.Water "Medium model"; // Chiller parameters parameter Integer numChi=2 "Number of chillers"; parameter Modelica.Units.SI.MassFlowRate m1_flow_chi_nominal=34.7 "Nominal mass flow rate at condenser water in the chillers"; parameter Modelica.Units.SI.MassFlowRate m2_flow_chi_nominal=18.3 "Nominal mass flow rate at evaporator water in the chillers"; parameter Modelica.Units.SI.PressureDifference dp1_chi_nominal=46.2*1000 "Nominal pressure"; parameter Modelica.Units.SI.PressureDifference dp2_chi_nominal=44.8*1000 "Nominal pressure"; parameter Modelica.Units.SI.Power QEva_nominal=m2_flow_chi_nominal*4200*(6.67 - 18.56) "Nominal cooling capaciaty(Negative means cooling)"; // WSE parameters parameter Modelica.Units.SI.MassFlowRate m1_flow_wse_nominal=34.7 "Nominal mass flow rate at condenser water in the chillers"; parameter Modelica.Units.SI.MassFlowRate m2_flow_wse_nominal=35.3 "Nominal mass flow rate at condenser water in the chillers"; parameter Modelica.Units.SI.PressureDifference dp1_wse_nominal=33.1*1000 "Nominal pressure"; parameter Modelica.Units.SI.PressureDifference dp2_wse_nominal=34.5*1000 "Nominal pressure"; parameter Buildings.Fluid.Movers.Data.Generic[numChi] perPumCW( each pressure= Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters( V_flow=m1_flow_chi_nominal/1000*{0.2,0.6,1.0,1.2}, dp=(dp1_chi_nominal+60000+6000)*{1.2,1.1,1.0,0.6})) "Performance data for condenser water pumps"; parameter Modelica.Units.SI.Time tWai=1200 "Waiting time"; // AHU parameter Modelica.Units.SI.ThermalConductance UA_nominal=numChi*QEva_nominal /Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( 6.67, 11.56, 12, 25) "Thermal conductance at nominal flow for sensible heat, used to compute time constant"; parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=161.35 "Nominal air mass flowrate"; parameter Real yValMinAHU(min=0,max=1,unit="1")=0.1 "Minimum valve openning position"; // Set point parameter Modelica.Units.SI.Temperature TCHWSet=273.15 + 8 "Chilled water temperature setpoint"; parameter Modelica.Units.SI.Temperature TSupAirSet=TCHWSet + 10 "Supply air temperature setpoint"; parameter Modelica.Units.SI.Temperature TRetAirSet=273.15 + 25 "Supply air temperature setpoint"; parameter Modelica.Units.SI.Pressure dpSetPoi=80000 "Differential pressure setpoint"; replaceable Buildings.Applications.DataCenters.ChillerCooled.Equipment.BaseClasses.PartialChillerWSE chiWSE( redeclare replaceable package Medium1 = MediumW, redeclare replaceable package Medium2 = MediumW, numChi=numChi, m1_flow_chi_nominal=m1_flow_chi_nominal, m2_flow_chi_nominal=m2_flow_chi_nominal, m1_flow_wse_nominal=m1_flow_wse_nominal, m2_flow_wse_nominal=m2_flow_wse_nominal, dp1_chi_nominal=dp1_chi_nominal, dp1_wse_nominal=dp1_wse_nominal, dp2_chi_nominal=dp2_chi_nominal, dp2_wse_nominal=dp2_wse_nominal, redeclare each Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_York_YT_1055kW_5_96COP_Vanes perChi, use_inputFilter=false, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, use_controller=false) "Chillers and waterside economizer"; Buildings.Fluid.Sources.Boundary_pT expVesCW( redeclare replaceable package Medium = MediumW, nPorts=1) "Expansion tank"; Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc cooTow[numChi]( redeclare each replaceable package Medium = MediumW, each TAirInWB_nominal(displayUnit="degC") = 283.15, each TApp_nominal=6, each energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial, each dp_nominal=30000, each m_flow_nominal=0.785*m1_flow_chi_nominal, each PFan_nominal=18000) "Cooling tower"; Buildings.Fluid.Sensors.TemperatureTwoPort TCHWSup( redeclare replaceable package Medium = MediumW, m_flow_nominal=numChi*m2_flow_chi_nominal) "Chilled water supply temperature"; Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaData(filNam= Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")); Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus"; Buildings.Fluid.Sensors.TemperatureTwoPort TCWSup( redeclare replaceable package Medium = MediumW, m_flow_nominal=numChi*m1_flow_chi_nominal) "Condenser water supply temperature"; Buildings.Fluid.Sensors.TemperatureTwoPort TCWRet( redeclare replaceable package Medium = MediumW, m_flow_nominal=numChi*m1_flow_chi_nominal) "Condenser water return temperature"; Buildings.Fluid.Movers.FlowControlled_m_flow pumCW[numChi]( redeclare each replaceable package Medium = MediumW, each m_flow_nominal=m1_flow_chi_nominal, each addPowerToMedium=false, per=perPumCW, each energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, each use_inputFilter=false) "Condenser water pump"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating ahu( redeclare replaceable package Medium1 = MediumW, redeclare replaceable package Medium2 = MediumA, m1_flow_nominal=numChi*m2_flow_chi_nominal, m2_flow_nominal=mAir_flow_nominal, dpValve_nominal=6000, dp2_nominal=600, mWatMax_flow=0.01, UA_nominal=UA_nominal, addPowerToMedium=false, perFan( pressure(dp=800*{1.2,1.12,1}, V_flow=mAir_flow_nominal/1.29*{0,0.5,1}), motorCooledByFluid=false), yValSwi=yValMinAHU + 0.1, yValDeaBan=0.05, QHeaMax_flow=30000, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, dp1_nominal=30000) "Air handling unit"; Buildings.Fluid.Sensors.TemperatureTwoPort TCHWRet( redeclare replaceable package Medium = MediumW, m_flow_nominal=numChi*m2_flow_chi_nominal) "Chilled water return temperature"; Buildings.Fluid.Sources.Boundary_pT expVesChi( redeclare replaceable package Medium = MediumW, nPorts=1) "Expansion tank"; Buildings.Fluid.Sensors.RelativePressure senRelPre( redeclare replaceable package Medium =MediumW) "Differential pressure"; Buildings.Fluid.Sensors.TemperatureTwoPort TAirSup( redeclare replaceable package Medium = MediumA, m_flow_nominal=mAir_flow_nominal) "Supply air temperature"; Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom roo( redeclare replaceable package Medium = MediumA, rooLen=50, rooWid=30, rooHei=3, m_flow_nominal=mAir_flow_nominal, QRoo_flow=500000, nPorts=2) "Room model"; Buildings.Fluid.Actuators.Valves.TwoWayLinear val[numChi]( redeclare each package Medium = MediumW, each m_flow_nominal=m1_flow_chi_nominal, each dpValve_nominal=6000, each use_inputFilter=false) "Shutoff valves"; Modelica.Blocks.Sources.Constant TCHWSupSet(k=TCHWSet) "Chilled water supply temperature setpoint"; Buildings.Applications.DataCenters.ChillerCooled.Controls.ChillerStage chiStaCon( QEva_nominal=QEva_nominal, tWai=0, criPoiTem=TCHWSet + 1.5) "Chiller staging control"; Modelica.Blocks.Math.RealToBoolean chiOn[numChi] "Real value to boolean value"; Modelica.Blocks.Math.IntegerToBoolean intToBoo( threshold=Integer(Buildings.Applications.DataCenters.Types.CoolingModes.FullMechanical)) "Inverse on/off signal for the WSE"; Modelica.Blocks.Logical.Not wseOn "True: WSE is on; False: WSE is off "; Buildings.Applications.DataCenters.ChillerCooled.Controls.ConstantSpeedPumpStage CWPumCon( tWai=0) "Condenser water pump controller"; Modelica.Blocks.Sources.IntegerExpression chiNumOn( y=integer(sum(chiStaCon.y))) "The number of running chillers"; Modelica.Blocks.Math.Gain gai[numChi]( each k=m1_flow_chi_nominal) "Gain effect"; Buildings.Applications.DataCenters.ChillerCooled.Controls.CoolingTowerSpeed cooTowSpeCon( yMin=0, Ti=60, k=0.1) "Cooling tower speed control"; Modelica.Blocks.Sources.RealExpression TCWSupSet( y=min(29.44 + 273.15, max(273.15 + 15.56, cooTow[1].TAir + 3))) "Condenser water supply temperature setpoint"; Modelica.Blocks.Sources.Constant TAirSupSet(k=TSupAirSet) "Supply air temperature setpoint"; Buildings.Applications.BaseClasses.Controls.VariableSpeedPumpStage varSpeCon( tWai=tWai, m_flow_nominal=m2_flow_chi_nominal, deaBanSpe=0.45) "Speed controller"; Modelica.Blocks.Sources.RealExpression mPum_flow( y=chiWSE.port_b2.m_flow) "Mass flowrate of variable speed pumps"; Buildings.Controls.Continuous.LimPID pumSpe( Ti=40, yMin=0.2, k=0.1) "Pump speed controller"; Modelica.Blocks.Sources.Constant dpSetSca(k=1) "Scaled differential pressure setpoint"; Modelica.Blocks.Math.Product pumSpeSig[numChi] "Pump speed signal"; Buildings.Controls.Continuous.LimPID ahuValSig( Ti=40, reverseActing=false, yMin=yValMinAHU, k=0.01) "Valve position signal for the AHU"; Modelica.Blocks.Math.Product cooTowSpe[numChi] "Cooling tower speed"; Buildings.Controls.Continuous.LimPID ahuFanSpeCon( k=0.1, reverseActing=false, yMin=0.2, Ti=240) "Fan speed controller "; Modelica.Blocks.Sources.Constant TAirRetSet(k=TRetAirSet) "Return air temperature setpoint"; Utilities.Psychrometrics.X_pTphi XAirSupSet(use_p_in=false) "Mass fraction setpoint of supply air "; Modelica.Blocks.Sources.Constant phiAirRetSet(k=0.5) "Return air relative humidity setpoint"; Modelica.Blocks.Math.Gain gai1(k=1/dpSetPoi) "Gain effect"; Buildings.Controls.OBC.CDL.Reals.Switch swi[numChi] "Switch to assign pump signal if plant is on"; Buildings.Controls.OBC.CDL.Logical.Or plaOn "Output true if plant is on"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[numChi](each final k=0) "Outputs zero"; Modelica.Blocks.MathBoolean.Or chiOnSta(nu=numChi) "Output true if at least one chiller is on"; equation connect(chiWSE.port_b2, TCHWSup.port_a); connect(chiWSE.port_b1, TCWRet.port_a); for i in 1:numChi loop connect(TCWSup.port_a, cooTow[i].port_b); connect(pumCW[i].port_a, TCWSup.port_b); connect(TCWRet.port_b, val[i].port_a); connect(weaBus.TWetBul, cooTow[i].TAir); end for; connect(senRelPre.port_b, ahu.port_b1); connect(cooTow.port_a, val.port_b); connect(TCWRet.port_b, expVesCW.ports[1]); connect(ahu.port_b1, expVesChi.ports[1]); connect(chiWSE.port_b2, TCHWSup.port_a); connect(chiWSE.port_b1, TCWRet.port_a); for i in 1:numChi loop connect(TCWSup.port_a, cooTow[i].port_b); connect(pumCW[i].port_b, chiWSE.port_a1); connect(chiOn[i].y, chiWSE.on[i]); connect(cooTowSpeCon.y, cooTowSpe[i].u1); end for; connect(chiStaCon.y, chiOn.u); connect(intToBoo.y, wseOn.u); connect(wseOn.y, chiWSE.on[numChi + 1]); connect(CWPumCon.y, gai.u); connect(TCWSupSet.y, cooTowSpeCon.TCWSupSet); connect(TCHWSupSet.y, cooTowSpeCon.TCHWSupSet); connect(TCWSup.T, cooTowSpeCon.TCWSup); connect(TCHWSup.T, cooTowSpeCon.TCHWSup); connect(chiWSE.TSet, TCHWSupSet.y); connect(mPum_flow.y, varSpeCon.masFloPum); connect(senRelPre.port_a, ahu.port_a1); connect(pumSpe.y, varSpeCon.speSig); connect(dpSetSca.y, pumSpe.u_s); connect(pumSpe.y, pumSpeSig[1].u2); connect(pumSpe.y, pumSpeSig[2].u2); connect(varSpeCon.y, pumSpeSig.u1); connect(TAirSupSet.y, ahuValSig.u_s); connect(TAirSup.port_a, ahu.port_b2); connect(TAirSup.T, ahuValSig.u_m); connect(ahuValSig.y, ahu.uVal); connect(TAirSupSet.y, ahu.TSet); connect(CWPumCon.y, val.y); connect(CWPumCon.y, cooTowSpe.u2); connect(cooTowSpe.y, cooTow.y); connect(TCHWRet.port_a, ahu.port_b1); connect(chiNumOn.y, CWPumCon.numOnChi); connect(ahu.port_a2, roo.airPorts[1]); connect(roo.airPorts[2], TAirSup.port_b); connect(roo.TRooAir, ahuFanSpeCon.u_m); connect(TAirRetSet.y, ahuFanSpeCon.u_s); connect(phiAirRetSet.y, XAirSupSet.phi); connect(XAirSupSet.X[1], ahu.XSet_w); connect(TAirRetSet.y, XAirSupSet.T); connect(ahuFanSpeCon.y, ahu.uFan); connect(gai1.y, pumSpe.u_m); connect(gai1.u, senRelPre.p_rel); connect(weaData.weaBus, weaBus); connect(chiOnSta.u, chiOn.y); connect(chiOnSta.y, plaOn.u1); connect(wseOn.y, plaOn.u2); connect(zer.y, swi.u3); for i in 1:numChi loop connect(plaOn.y, swi[i].u2); end for; connect(swi.y, pumCW.m_flow_in); connect(gai.y, swi.u1); connect(plaOn.y, varSpeCon.on); end PartialDataCenter;

Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PostProcess

Post-processing

Buildings.Applications.DataCenters.ChillerCooled.Examples.BaseClasses.PostProcess

Information

This partial model calculate performance metrics for a data center system. The performance metrics include cooling mode signal switch times, economizing hours, and total energy consumption.

Modelica definition

partial model PostProcess "Post-processing" Buildings.Utilities.Math.IntegratorWithReset FCTim "Free cooling time"; Modelica.Blocks.Sources.RealExpression freCooSig "Free cooling signal"; Modelica.Blocks.Sources.RealExpression parMecCooSig "Partial mechanic cooling signal"; Buildings.Utilities.Math.IntegratorWithReset PMCTim "Partial mechanic cooling time"; Buildings.Utilities.Math.IntegratorWithReset FMCHou "Full mechanic cooling time"; Modelica.Blocks.Sources.RealExpression fulMecCooSig "Full mechanic cooling signal"; Modelica.Blocks.Sources.RealExpression PHVAC "Power consumed by HVAC system"; Modelica.Blocks.Sources.RealExpression PIT "Power consumed by IT"; Modelica.Blocks.Continuous.Integrator EHVAC( initType=Modelica.Blocks.Types.Init.InitialState, y_start=0) "Energy consumed by HVAC"; Modelica.Blocks.Continuous.Integrator EIT( initType=Modelica.Blocks.Types.Init.InitialState, y_start=0) "Energy consumed by IT"; Modelica.Blocks.Math.IntegerChange sigCha( u(start=0, fixed=true)) "Signal changes"; Modelica.Blocks.MathInteger.TriggeredAdd swiTim "Triggered addition"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(k=1) "Unit signal"; equation connect(freCooSig.y,FCTim. u); connect(parMecCooSig.y,PMCTim. u); connect(fulMecCooSig.y, FMCHou.u); connect(PHVAC.y,EHVAC. u); connect(PIT.y,EIT. u); connect(sigCha.y, swiTim.trigger); connect(conInt.y, swiTim.u); end PostProcess;