This model is the chilled water plant with discrete time control and
trim and respond logic for a data center. The model is described at
Buildings.Examples.ChillerPlant.
partial model DataCenter
  
  
replaceable package MediumA = 
Buildings.Media.Air ;
  
replaceable package MediumW = 
Buildings.Media.Water ;
  
parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=roo.QRoo_flow/(
      1005*15) ;
  
parameter Modelica.Units.SI.Power P_nominal=80E3
    ;
  
parameter Modelica.Units.SI.TemperatureDifference dTEva_nominal=10
    ;
  
parameter Modelica.Units.SI.TemperatureDifference dTCon_nominal=10
    ;
  
parameter Real COPc_nominal=3 ;
  
parameter Modelica.Units.SI.MassFlowRate mCHW_flow_nominal=2*roo.QRoo_flow/(
      4200*20) ;
  
parameter Modelica.Units.SI.MassFlowRate mCW_flow_nominal=2*roo.QRoo_flow/(
      4200*6) ;
  
parameter Modelica.Units.SI.PressureDifference dp_nominal=500
    ;
  
Buildings.Fluid.Movers.FlowControlled_m_flow fan(
    
redeclare package Medium = 
MediumA,
    m_flow_nominal=mAir_flow_nominal,
    dp(start=249),
    m_flow(start=mAir_flow_nominal),
    nominalValuesDefineDefaultPressureCurve=true,
    use_riseTime=false,
    energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
    T_start=293.15,
    dp_nominal=750) ;
  
Buildings.Fluid.HeatExchangers.DryCoilCounterFlow cooCoi(
    
redeclare package Medium1 = 
MediumW,
    
redeclare package Medium2 = 
MediumA,
    m2_flow_nominal=mAir_flow_nominal,
    m1_flow_nominal=mCHW_flow_nominal,
    m1_flow(start=mCHW_flow_nominal),
    m2_flow(start=mAir_flow_nominal),
    dp2_nominal=249*3,
    UA_nominal=mAir_flow_nominal*1006*5,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    dp1_nominal(displayUnit="Pa") = 1000 + 89580)
    ;
  
Modelica.Blocks.Sources.Constant mFanFlo(k=mAir_flow_nominal)
    ;
  
BaseClasses.SimplifiedRoom roo(
    
redeclare package Medium = 
MediumA,
    nPorts=2,
    rooLen=50,
    rooWid=30,
    rooHei=3,
    m_flow_nominal=mAir_flow_nominal,
    QRoo_flow=500000) ;
  
Buildings.Fluid.Movers.FlowControlled_dp pumCHW(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCHW_flow_nominal,
    m_flow(start=mCHW_flow_nominal),
    dp(start=325474),
    nominalValuesDefineDefaultPressureCurve=true,
    use_riseTime=false,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    dp_nominal=130000) ;
  
Buildings.Fluid.Storage.ExpansionVessel expVesCHW(
redeclare package Medium =
        
MediumW, V_start=1) ;
  
Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc cooTow(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCW_flow_nominal,
    PFan_nominal=6000,
    TAirInWB_nominal(displayUnit="degC") = 283.15,
    TApp_nominal=6,
    dp_nominal=14930 + 14930 + 74650,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
    ;
  
Buildings.Fluid.Movers.FlowControlled_m_flow pumCW(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCW_flow_nominal,
    dp(start=214992),
    nominalValuesDefineDefaultPressureCurve=true,
    use_riseTime=false,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    dp_nominal=130000) ;
  
Buildings.Fluid.HeatExchangers.ConstantEffectiveness wse(
    
redeclare package Medium1 = 
MediumW,
    
redeclare package Medium2 = 
MediumW,
    m1_flow_nominal=mCW_flow_nominal,
    m2_flow_nominal=mCHW_flow_nominal,
    eps=0.8,
    dp2_nominal=0,
    dp1_nominal=0) ;
  
Buildings.Fluid.Actuators.Valves.TwoWayLinear val5(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCW_flow_nominal,
    dpValve_nominal=20902,
    dpFixed_nominal=89580,
    y_start=1,
    use_strokeTime=false) ;
  
Buildings.Fluid.Actuators.Valves.TwoWayLinear val1(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCHW_flow_nominal,
    dpValve_nominal=20902,
    use_strokeTime=false)
    ;
  
Buildings.Fluid.Storage.ExpansionVessel expVesChi(
redeclare package Medium =
        
MediumW, V_start=1);
  
Buildings.Examples.ChillerPlant.BaseClasses.Controls.WSEControl wseCon;
  
Modelica.Blocks.Sources.RealExpression expTowTApp(y=cooTow.TApp_nominal)
    ;
  
Buildings.Fluid.Chillers.ElectricEIR chi(
    
redeclare package Medium1 = 
MediumW,
    
redeclare package Medium2 = 
MediumW,
    m1_flow_nominal=mCW_flow_nominal,
    m2_flow_nominal=mCHW_flow_nominal,
    dp2_nominal=0,
    dp1_nominal=0,
    per=
Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Carrier_19XR_742kW_5_42COP_VSD(),
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial);
  
Buildings.Fluid.Actuators.Valves.TwoWayLinear val6(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCHW_flow_nominal,
    dpValve_nominal=20902,
    dpFixed_nominal=14930 + 89580,
    y_start=1,
    use_strokeTime=false,
    from_dp=true)
    ;
  
Buildings.Examples.ChillerPlant.BaseClasses.Controls.ChillerSwitch chiSwi(
      deaBan(displayUnit="K") = 2.2)
    ;
  
Buildings.Examples.ChillerPlant.BaseClasses.Controls.LinearPiecewiseTwo
    linPieTwo(
    x0=0,
    x2=1,
    x1=0.5,
    y11=1,
    y21=273.15 + 5.56,
    y10=0.2,
    y20=273.15 + 22) ;
  
Modelica.Blocks.Sources.Constant TAirSet(k=273.15 + 27)
    ;
  
Modelica.Blocks.Math.BooleanToReal chiCon ;
  
Buildings.Fluid.Actuators.Valves.TwoWayLinear val4(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCW_flow_nominal,
    dpValve_nominal=20902,
    dpFixed_nominal=59720,
    y_start=0,
    use_strokeTime=false)
    ;
  
Buildings.Fluid.Sensors.TemperatureTwoPort TAirSup(
redeclare package Medium =
        
MediumA, m_flow_nominal=mAir_flow_nominal)
    ;
  
Buildings.Fluid.Sensors.TemperatureTwoPort TCHWEntChi(
redeclare package
      Medium = 
MediumW, m_flow_nominal=mCHW_flow_nominal)
    ;
  
Buildings.Fluid.Sensors.TemperatureTwoPort TCWLeaTow(
redeclare package Medium =
        
MediumW, m_flow_nominal=mCW_flow_nominal)
    ;
  
Modelica.Blocks.Sources.Constant cooTowFanCon(k=1)
    ;
  
Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage valByp(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCHW_flow_nominal,
    dpValve_nominal=20902,
    dpFixed_nominal=14930,
    y_start=0,
    use_strokeTime=false,
    from_dp=true) ;
  
Buildings.Examples.ChillerPlant.BaseClasses.Controls.KMinusU KMinusU(k=1);
  
Buildings.Fluid.Actuators.Valves.TwoWayLinear val3(
    
redeclare package Medium = 
MediumW,
    m_flow_nominal=mCHW_flow_nominal,
    dpValve_nominal=20902,
    dpFixed_nominal=59720 + 1000,
    use_strokeTime=false)
    ;
  
Buildings.Fluid.Sensors.TemperatureTwoPort TCHWLeaCoi(
redeclare package
      Medium = 
MediumW, m_flow_nominal=mCHW_flow_nominal)
    ;
  
Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaData(filNam=
        
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"));
  
BoundaryConditions.WeatherData.Bus weaBus;
  
Modelica.Blocks.Math.Gain gain(k=20*6485);
  
Modelica.Blocks.Math.Feedback feedback;
  
Modelica.Blocks.Logical.GreaterThreshold greaterThreshold;
  
Modelica.Blocks.Logical.Or or1;
  
Modelica.Blocks.Math.BooleanToReal mCWFlo(realTrue=mCW_flow_nominal)
    ;
  
Modelica.Blocks.Sources.RealExpression PHVAC(y=fan.P + pumCHW.P + pumCW.P +
        cooTow.PFan + chi.P) ;
  
Modelica.Blocks.Sources.RealExpression PIT(y=roo.QSou.Q_flow)
    ;
  
Modelica.Blocks.Continuous.Integrator EHVAC(initType=Modelica.Blocks.Types.Init.InitialState,
      y_start=0) ;
  
Modelica.Blocks.Continuous.Integrator EIT(initType=Modelica.Blocks.Types.Init.InitialState,
      y_start=0) ;
equation 
  connect(expVesCHW.port_a, cooCoi.port_b1);
  
connect(expTowTApp.y, wseCon.towTApp);
  
connect(chiSwi.y, chiCon.u);
  
connect(cooTow.port_b, pumCW.port_a);
  
connect(val5.port_a, chi.port_b1);
  
connect(expVesChi.port_a, chi.port_b1);
  
connect(val4.port_a, wse.port_b1);
  
connect(chiSwi.y, chi.on);
  
connect(linPieTwo.y[2], chi.TSet);
  
connect(chiCon.y, val5.y);
  
connect(linPieTwo.y[2], chiSwi.TSet);
  
connect(cooTowFanCon.y, cooTow.y);
  
connect(cooCoi.port_b2, fan.port_a);
  
connect(mFanFlo.y, fan.m_flow_in);
  
connect(wse.port_a2, val3.port_b);
  
connect(wseCon.y2, val1.y);
  
connect(wseCon.y1, val3.y);
  
connect(wseCon.y1, val4.y);
  
connect(TAirSup.port_a, fan.port_b);
  
connect(roo.airPorts[1],TAirSup. port_b);
  
connect(roo.airPorts[2], cooCoi.port_a2);
  
connect(TCHWLeaCoi.port_a, pumCHW.port_b);
  
connect(TCHWEntChi.port_b, valByp.port_a);
  
connect(TCHWEntChi.port_a, val1.port_b);
  
connect(val1.port_a, TCHWLeaCoi.port_b);
  
connect(val3.port_a, TCHWLeaCoi.port_b);
  
connect(TCWLeaTow.port_b, chi.port_a1);
  
connect(TCWLeaTow.port_b, wse.port_a1);
  
connect(TCHWEntChi.T, chiSwi.chiCHWST);
  
connect(wseCon.wseCWST, TCWLeaTow.T);
  
connect(wseCon.wseCHWST, TCHWLeaCoi.T);
  
connect(weaData.weaBus, weaBus);
  
connect(wseCon.TWetBul, weaBus.TWetBul);
  
connect(cooTow.TAir, weaBus.TWetBul);
  
connect(TCHWEntChi.port_a, wse.port_b2);
  
connect(valByp.port_b, val6.port_b);
  
connect(TCHWEntChi.port_b, chi.port_a2);
  
connect(val5.port_b, cooTow.port_a);
  
connect(val4.port_b, cooTow.port_a);
  
connect(pumCW.port_b, TCWLeaTow.port_a);
  
connect(chiCon.y, KMinusU.u);
  
connect(KMinusU.y, valByp.y);
  
connect(chiCon.y, val6.y);
  
connect(linPieTwo.y[1], gain.u);
  
connect(gain.y, pumCHW.dp_in);
  
connect(TAirSet.y, feedback.u2);
  
connect(TAirSup.T, feedback.u1);
  
connect(chi.port_b2, val6.port_a);
  
connect(pumCHW.port_a, cooCoi.port_b1);
  
connect(greaterThreshold.u, wseCon.y1);
  
connect(or1.u1, greaterThreshold.y);
  
connect(or1.u2, chiSwi.y);
  
connect(or1.y, mCWFlo.u);
  
connect(mCWFlo.y, pumCW.m_flow_in);
  
connect(PHVAC.y, EHVAC.u);
  
connect(PIT.y, EIT.u);
  
connect(cooCoi.port_a1, val6.port_b);
end DataCenter;
 
This is a simplified room model for a data center. There is no heat exchange between the room and ambient environment through the building envelope since it is negligible compared to the heat released by the servers.