Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation

Collection of models that validate the Buildings.Applications.DataCenters.ChillerCooled package

Information

This package contains validation models for the classes in Buildings.Applications.DataCenters.ChillerCooled.Equipment.

Note that most validation models contain simple input data which may not be realistic, but for which the correct output can be obtained through an analytic solution. The examples plot various outputs, which have been verified against these solutions. These model outputs are stored as reference data and used for continuous validation whenever models in the library change.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop CoolingCoilHumidifyingHeating_ClosedLoop Model of a air handling unit that tests temperature and humidity control
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_OpenLoop CoolingCoilHumidifyingHeating_OpenLoop Model of a air handling unit that tests variable mass flow rates
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricChillerParallel ElectricChillerParallel Model that test electric chiller parallel
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricHeater ElectricHeater Test model for ElectricHeater
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger HeatExchanger Model that demonstrates use of a waterside economizer with outlet temperature control
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger_ResetController HeatExchanger_ResetController Model that demonstrates use of a waterside economizer with outlet temperature control and temperature controller is reset after a predefined time period
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryLoadSide IntegratedPrimaryLoadSide Integrated WSE on the load side in a primary-only chilled water system
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryPlantSide IntegratedPrimaryPlantSide Integrated WSE on the plant side in a primary-only chilled water system
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimarySecondary IntegratedPrimarySecondary Integrated WSE on the load side in a primary-secondary chilled water system
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.NonIntegrated NonIntegrated Non-integrated WSE in a chilled water system
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.PumpParallel PumpParallel Example that tests the model pump parallels
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.WatersideEconomizer WatersideEconomizer Validate model Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer
Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses BaseClasses Package with base classes for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop

Model of a air handling unit that tests temperature and humidity control

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop

Information

This model demonstrates the use of Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating. The valve on the water-side and the electric heater on the air-side is regulated to track a setpoint temperature for the air outlet based on the step changes in the inlet temperature on the waterside. The humidifier on the air-side is manipulated to control the humidity of the air outlet.

To avoid simultenous cooling (by opening the valve on the water side) and heating (by turning on the heater), a built-in controller is used to turn the reheater on and off. The detailed control logic can be found in Buildings.Applications.DataCenters.ChillerCooled.Controls.Reheat. A setting for this example is shown as following:

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerControl (Partial model for testing air hanlders with temperature and humidity control).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal2.9Nominal mass flow rate [kg/s]
MassFlowRatem2_flow_nominal3.3Nominal mass flow rate [kg/s]
TemperatureT_a1_nominal6 + 273.15Nominal water inlet temperature [K]
TemperatureT_b1_nominal11 + 273.15Nominal water outlet temperature [K]
TemperatureT_a2_nominal26 + 273.15Nominal air inlet temperature [K]
TemperatureT_b2_nominal12 + 273.15Nominal air outlet temperature [K]
ThermalConductanceUA_nominalm2_flow_nominal*1006*(T_b2_n...Thermal conductance at nominal flow for sensible heat, used to compute time constant [W/K]
RealyValMin0.4Minimum position of water-side valves

Modelica definition

model CoolingCoilHumidifyingHeating_ClosedLoop "Model of a air handling unit that tests temperature and humidity control" extends Modelica.Icons.Example; extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerControl ( relHum(k=0.5), sou_1(p=500000), sou_2(nPorts = 1), masFra(redeclare package Medium = Medium2), TWat( startTime=1200, offset=273.15 + 13, height=-6)); parameter Modelica.SIunits.ThermalConductance UA_nominal=m2_flow_nominal*1006*(T_b2_nominal-T_a2_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal) "Thermal conductance at nominal flow for sensible heat, used to compute time constant"; parameter Real yValMin = 0.4 "Minimum position of water-side valves"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating ahu( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, allowFlowReversal1=true, allowFlowReversal2=true, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, tauEleHea=1, tauHum=1, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, UA_nominal=UA_nominal, dpValve_nominal=6000, mWatMax_flow=0.01, perFan(pressure(V_flow=m2_flow_nominal*{0,0.5,1}, dp=300*{1.2,1.12,1})), yValve_start=1, dp1_nominal=3000, dp2_nominal=200, use_inputFilterValve=false, QHeaMax_flow=10000, yValSwi=yValMin + 0.1, yValDeaBan=0.05) "Air handling unit"; Modelica.Blocks.Sources.Constant uFan(k=1) "Control input for fan"; Modelica.Blocks.Sources.Constant masFraSet(k=0.011) "Setpoint mass fraction"; Buildings.Controls.Continuous.LimPID PID( yMax=1, reverseActing=false, Td=120, yMin=yValMin, k=0.5, Ti=60) "PID controller for the water-side valve in air handling units"; equation connect(ahu.port_a2, sou_2.ports[1]); connect(uFan.y, ahu.uFan); connect(ahu.port_b2, temSenAir2.port_a); connect(temSenWat1.port_b, ahu.port_a1); connect(TSet.y, PID.u_s); connect(temSenAir2.T, PID.u_m); connect(PID.y, ahu.uVal); connect(masFraSet.y, ahu.XSet_w); connect(TSet.y, ahu.TSet); connect(ahu.port_b1, temSenWat2.port_a); end CoolingCoilHumidifyingHeating_ClosedLoop;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_OpenLoop Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_OpenLoop

Model of a air handling unit that tests variable mass flow rates

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_OpenLoop

Information

This model demonstrates the use of Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating for different inlet conditions.

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerMassFlow (Partial model for testing air handler at variable mass flowrate).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal2.9Nominal mass flow rate [kg/s]
MassFlowRatem2_flow_nominal3.3Nominal mass flow rate [kg/s]
TemperatureT_a1_nominal6 + 273.15Nominal water inlet temperature [K]
TemperatureT_b1_nominal11 + 273.15Nominal water outlet temperature [K]
TemperatureT_a2_nominal26 + 273.15Nominal air inlet temperature [K]
TemperatureT_b2_nominal12 + 273.15Nominal air outlet temperature [K]
ThermalConductanceUA_nominalm2_flow_nominal*1006*(12 - 2...Thermal conductance at nominal flow for sensible heat, used to compute time constant [W/K]
RealyValMin0.4Minimum position of water-side valves

Modelica definition

model CoolingCoilHumidifyingHeating_OpenLoop "Model of a air handling unit that tests variable mass flow rates" extends Modelica.Icons.Example; extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerMassFlow ( sou_2(nPorts=1), relHum(k=0.5)); parameter Modelica.SIunits.ThermalConductance UA_nominal=m2_flow_nominal*1006*(12-26)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal) "Thermal conductance at nominal flow for sensible heat, used to compute time constant"; parameter Real yValMin = 0.4 "Minimum position of water-side valves"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating ahu( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, allowFlowReversal1=true, allowFlowReversal2=true, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, yValve_start=0.2, tauEleHea=1, tauHum=1, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, UA_nominal=UA_nominal, dpValve_nominal=6000, QHeaMax_flow=10000, mWatMax_flow=0.01, perFan(pressure(V_flow=m2_flow_nominal*{0,0.5,1}, dp=300*{1.2,1.12,1})), dp1_nominal=3000, dp2_nominal=200, yValSwi=yValMin+0.05) "Air handling unit"; Buildings.Fluid.Sensors.RelativeHumidityTwoPort senRelHum( redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal) "Sensor for relative humidity"; Modelica.Blocks.Sources.Constant uVal(k=0.2) "Control signal for water valve"; Modelica.Blocks.Sources.Constant temSet(k=15 + 273.15) "Temperature setpoint "; Modelica.Blocks.Sources.Constant XSet(k=0.01) "Mass fraction set point"; Modelica.Blocks.Sources.Constant uFan(k=1) "Control input for fan"; equation connect(ahu.port_a2, sou_2.ports[1]); connect(ahu.port_b2, senRelHum.port_a); connect(uVal.y, ahu.uVal); connect(uFan.y, ahu.uFan); connect(temSet.y, ahu.TSet); connect(XSet.y, ahu.XSet_w); connect(temSenAir2.port_a, senRelHum.port_b); connect(temSenWat1.port_b, ahu.port_a1); connect(temSenWat2.port_a, ahu.port_b1); end CoolingCoilHumidifyingHeating_OpenLoop;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricChillerParallel Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricChillerParallel

Model that test electric chiller parallel

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricChillerParallel

Information

This example demonstrates how the chiller parallel can operate under different performance curves.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
PowerP_nominal-per1.QEva_flow_nominal/per1...Nominal compressor power (at y=1) [W]
TemperatureDifferencedTEva_nominal10Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
RealCOPc_nominal3Chiller COP
MassFlowRatemEva_flow_nominalper1.mEva_flow_nominalNominal mass flow rate at evaporator [kg/s]
MassFlowRatemCon_flow_nominalper1.mCon_flow_nominalNominal mass flow rate at condenser [kg/s]
ElectricEIRChiller_McQuay_WSC_471kW_5_89COP_Vanesper1 Chiller performance data
ElectricEIRChiller_York_YT_563kW_10_61COP_Vanesper2 Chiller performance data

Modelica definition

model ElectricChillerParallel "Model that test electric chiller parallel" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.Power P_nominal = -per1.QEva_flow_nominal/per1.COP_nominal "Nominal compressor power (at y=1)"; parameter Modelica.SIunits.TemperatureDifference dTEva_nominal=10 "Temperature difference evaporator inlet-outlet"; parameter Modelica.SIunits.TemperatureDifference dTCon_nominal=10 "Temperature difference condenser outlet-inlet"; parameter Real COPc_nominal = 3 "Chiller COP"; parameter Modelica.SIunits.MassFlowRate mEva_flow_nominal = per1.mEva_flow_nominal "Nominal mass flow rate at evaporator"; parameter Modelica.SIunits.MassFlowRate mCon_flow_nominal = per1.mCon_flow_nominal "Nominal mass flow rate at condenser"; parameter Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_McQuay_WSC_471kW_5_89COP_Vanes per1 "Chiller performance data"; parameter Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_York_YT_563kW_10_61COP_Vanes per2 "Chiller performance data"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.ElectricChillerParallel chiPar( num=2, redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=mEva_flow_nominal, m2_flow_nominal=mCon_flow_nominal, dp1_nominal=6000, dp2_nominal=6000, dpValve_nominal={6000,6000}, per={per1,per2}) "Chillers with identical nominal parameters but different performance curves"; Fluid.Sources.Boundary_pT sou1( redeclare package Medium = Medium1, p=Medium1.p_default + 18E3, use_T_in=true, T=298.15, nPorts=1) "Pressure boundary condition"; Fluid.Sources.Boundary_pT sou2( redeclare package Medium = Medium2, p=Medium2.p_default + 18E3, use_T_in=true, T=291.15, nPorts=1) "Pressure boundary condition"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1) "Pressure boundary condition"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=1) "Pressure boundary condition"; Modelica.Blocks.Sources.Ramp TSet( duration=3600, startTime=3*3600, offset=273.15 + 10, height=8) "Set point for leaving chilled water temperature"; Modelica.Blocks.Sources.Ramp TCon_in( height=10, offset=273.15 + 20, duration=3600, startTime=2*3600) "Condenser inlet temperature"; Modelica.Blocks.Sources.Ramp TEva_in( offset=273.15 + 15, height=5, startTime=3600, duration=3600) "Evaporator inlet temperature"; Modelica.Blocks.Sources.Pulse pulse(period=3600/2) "Pulse input signal"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold(threshold=0.5) "Switch to switch chiller on or off"; Buildings.Fluid.FixedResistances.PressureDrop res1( redeclare package Medium = Medium1, m_flow_nominal=mCon_flow_nominal, dp_nominal=6000) "Flow resistance"; Buildings.Fluid.FixedResistances.PressureDrop res2( dp_nominal=6000, redeclare package Medium = Medium2, m_flow_nominal=mEva_flow_nominal) "Flow resistance"; equation connect(chiPar.port_b1, res1.port_a); connect(res2.port_a, chiPar.port_b2); connect(greaterThreshold.y, chiPar.on[1]); connect(greaterThreshold.y, chiPar.on[2]); connect(TSet.y, chiPar.TSet); connect(TCon_in.y, sou1.T_in); connect(TEva_in.y, sou2.T_in); connect(greaterThreshold.u, pulse.y); connect(res1.port_b, sin1.ports[1]); connect(sou1.ports[1], chiPar.port_a1); connect(res2.port_b, sin2.ports[1]); connect(chiPar.port_a2, sou2.ports[1]); end ElectricChillerParallel;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricHeater Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricHeater

Test model for ElectricHeater

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.ElectricHeater

Information

This model test the electric heater model: Buildings.Applications.DataCenters.ChillerCooled.Equipment.ElectricHeater.

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.HeatExchangers.Examples.BaseClasses.Heater (Base class for example model for the heater and cooler).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium model
VolumeV6*6*2.7Volume [m3]
MassFlowRatem_flow_nominalV*1.2*6/3600Nominal mass flow rate [kg/s]
HeatFlowRateQ_flow_nominal30*6*6Nominal heat loss of the room [W]

Connectors

TypeNameDescription
replaceable package MediumMedium model

Modelica definition

model ElectricHeater "Test model for ElectricHeater" extends Modelica.Icons.Example; extends Buildings.Fluid.HeatExchangers.Examples.BaseClasses.Heater( redeclare package Medium = Buildings.Media.Air, m_flow_nominal=V*1.2*6/3600, Q_flow_nominal=30*6*6, mov(nominalValuesDefineDefaultPressureCurve=true, dp_nominal=1200)); Buildings.Applications.DataCenters.ChillerCooled.Equipment.ElectricHeater eleHea( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal, QMax_flow=Q_flow_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, dp_nominal=1000, eta=0.95) "Electric heater"; Buildings.Controls.SetPoints.Table tab(table=[0,273.15 + 15; 1,273.15 + 30]) "Temperature set point"; Modelica.Blocks.Sources.BooleanStep uHea(startTime(displayUnit="min") = 60000) "On/off signal"; equation connect(mov.port_b, eleHea.port_a); connect(eleHea.port_b, THeaOut.port_a); connect(conPI.y, tab.u); connect(tab.y, eleHea.TSet); connect(uHea.y, eleHea.on); end ElectricHeater;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger

Model that demonstrates use of a waterside economizer with outlet temperature control

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger

Information

This example demonstrates how the parameter use_controller influences the temperautre at port_b2. The temperature at port_b2 can be controlled in hex1 where the controller is activated.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal1000*0.01035Nominal mass flow rate at evaporator [kg/s]
MassFlowRatem2_flow_nominal1000*0.01035Nominal mass flow rate at condenser [kg/s]
Pressuredp1_nominal60000Nominal pressure difference on medium 1 side [Pa]
Pressuredp2_nominal60000Nominal pressure difference on medium 2 side [Pa]

Modelica definition

model HeatExchanger "Model that demonstrates use of a waterside economizer with outlet temperature control" extends Modelica.Icons.Example; package MediumW = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal=1000 * 0.01035 "Nominal mass flow rate at evaporator"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal=1000 * 0.01035 "Nominal mass flow rate at condenser"; parameter Modelica.SIunits.Pressure dp1_nominal=60000 "Nominal pressure difference on medium 1 side"; parameter Modelica.SIunits.Pressure dp2_nominal=60000 "Nominal pressure difference on medium 2 side"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet hex1( m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, eta=0.8, dp1_nominal=dp1_nominal, dp2_nominal=dp2_nominal, T_start=273.15 + 10, use_controller=true, redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, Ti=40, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Water-to-water heat exchanger with built-in PID controller to control the temperature at port_b2"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet hex2( m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, eta=0.8, dp1_nominal=dp1_nominal, dp2_nominal=dp2_nominal, T_start=273.15 + 10, redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, use_controller=false) "Water-to-water heat exchanger without built-in controllers to control the temperature at port_b2"; Buildings.Fluid.Sources.Boundary_pT sin1( nPorts=2, redeclare package Medium = MediumW) "Sink on medium 1 side"; Buildings.Fluid.Sources.MassFlowSource_T sou1( use_T_in=true, nPorts=2, redeclare package Medium = MediumW, m_flow=2*m1_flow_nominal, T=298.15) "Source on medium 1 side"; Modelica.Blocks.Sources.TimeTable TCon_in( table=[0,273.15 + 12.78; 7200,273.15 + 12.78; 7200,273.15 + 18.33; 14400,273.15 + 18.33; 14400,273.15 + 26.67], offset=0, startTime=0) "Condenser inlet temperature"; Buildings.Fluid.Sources.Boundary_pT sin2( nPorts=2, redeclare package Medium = MediumW) "Sink on medium 2 side"; Buildings.Fluid.Sources.MassFlowSource_T sou2_2( nPorts=1, redeclare package Medium = MediumW, m_flow=m2_flow_nominal, use_T_in=true) "Source on medium 2 side"; Modelica.Blocks.Sources.Constant TEva_in(k=273.15 + 25.28) "Evaporator inlet temperature"; Buildings.Fluid.Sensors.TemperatureTwoPort TSen1( m_flow_nominal=m2_flow_nominal, redeclare package Medium = MediumW) "Temperature sensor"; Buildings.Fluid.Sensors.TemperatureTwoPort TSen2( redeclare package Medium = MediumW, m_flow_nominal=m2_flow_nominal) "Temperature sensor"; Modelica.Blocks.Sources.Constant TSet( k(unit="K",displayUnit="degC")=273.15+16.56) "Leaving chilled water temperature setpoint"; Buildings.Fluid.Sources.MassFlowSource_T sou2_1( nPorts=1, redeclare package Medium = MediumW, m_flow=m2_flow_nominal, use_T_in=true) "Source on medium 2 side"; Modelica.Blocks.Sources.Constant TEva_in1( k=273.15 + 25.28) "Evaporator inlet temperature"; equation connect(TSet.y, hex1.TSet); connect(sou1.ports[1], hex1.port_a1); connect(hex1.port_b1, sin1.ports[1]); connect(TCon_in.y,sou1. T_in); connect(sou2_2.T_in, TEva_in.y); connect(hex1.port_b2, TSen1.port_a); connect(TSen1.port_b, sin2.ports[1]); connect(sou1.ports[2], hex2.port_a1); connect(hex2.port_b2, TSen2.port_a); connect(TSen2.port_b, sin2.ports[2]); connect(hex2.port_b1, sin1.ports[2]); connect(hex2.port_a2, sou2_2.ports[1]); connect(hex1.port_a2, sou2_1.ports[1]); connect(TEva_in1.y, sou2_1.T_in); end HeatExchanger;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger_ResetController Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger_ResetController

Model that demonstrates use of a waterside economizer with outlet temperature control and temperature controller is reset after a predefined time period

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.HeatExchanger_ResetController

Information

This example demonstrates how the PID controller in the heat exchanger model can be reset. We compared three options: (1) reset with a paramter value; (2) reset with an input signal; (3) without reset.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal1000*0.01035Nominal mass flow rate at evaporator [kg/s]
MassFlowRatem2_flow_nominal1000*0.01035Nominal mass flow rate at condenser [kg/s]
Pressuredp1_nominal60000Nominal pressure difference on medium 1 side [Pa]
Pressuredp2_nominal60000Nominal pressure difference on medium 2 side [Pa]

Modelica definition

model HeatExchanger_ResetController "Model that demonstrates use of a waterside economizer with outlet temperature control and temperature controller is reset after a predefined time period" extends Modelica.Icons.Example; package MediumW = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal=1000 * 0.01035 "Nominal mass flow rate at evaporator"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal=1000 * 0.01035 "Nominal mass flow rate at condenser"; parameter Modelica.SIunits.Pressure dp1_nominal=60000 "Nominal pressure difference on medium 1 side"; parameter Modelica.SIunits.Pressure dp2_nominal=60000 "Nominal pressure difference on medium 2 side"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet hex1( m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, eta=0.8, dp1_nominal=dp1_nominal, dp2_nominal=dp2_nominal, T_start=273.15 + 10, use_controller=true, redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, Ti=40, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, reset=Buildings.Types.Reset.Parameter, y_reset=0) "Water-to-water heat exchanger with built-in PID controller to control the temperature at port_b2"; Buildings.Fluid.Sources.Boundary_pT sin1( nPorts=3, redeclare package Medium = MediumW) "Sink on medium 1 side"; Fluid.Sources.Boundary_pT sou1( p=MediumW.p_default + 60E3, use_T_in=true, nPorts=3, redeclare package Medium = MediumW, T=298.15) "Source on medium 1 side"; Modelica.Blocks.Sources.TimeTable TCon_in( table=[0,273.15 + 12.78; 7200,273.15 + 12.78; 7200,273.15 + 18.33; 14400,273.15 + 18.33; 14400,273.15 + 26.67], offset=0, startTime=0) "Condenser inlet temperature"; Buildings.Fluid.Sources.Boundary_pT sin2( nPorts=3, redeclare package Medium = MediumW) "Sink on medium 2 side"; Buildings.Fluid.Sensors.TemperatureTwoPort TSen1( m_flow_nominal=m2_flow_nominal, redeclare package Medium = MediumW) "Temperature sensor"; Buildings.Fluid.Sensors.TemperatureTwoPort TSen2( redeclare package Medium = MediumW, m_flow_nominal=m2_flow_nominal) "Temperature sensor"; Modelica.Blocks.Sources.Constant TSet( k(unit="K",displayUnit="degC")=273.15+16.56) "Leaving chilled water temperature setpoint"; Fluid.Sources.Boundary_pT sou2_1( p=MediumW.p_default + 50E3, nPorts=3, redeclare package Medium = MediumW, use_T_in=true) "Source on medium 2 side"; Modelica.Blocks.Sources.Constant TEva_in(k=273.15 + 25.28) "Evaporator inlet temperature"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet hex2( m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, eta=0.8, dp1_nominal=dp1_nominal, dp2_nominal=dp2_nominal, T_start=273.15 + 10, use_controller=true, redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, Ti=40, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, reset=Buildings.Types.Reset.Input) "Water-to-water heat exchanger with built-in PID controller to control the temperature at port_b2"; Modelica.Blocks.Sources.BooleanPulse tri(period=900) "Trigger controller reset"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet hex3( m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, eta=0.8, dp1_nominal=dp1_nominal, dp2_nominal=dp2_nominal, T_start=273.15 + 10, use_controller=true, redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, Ti=40, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Water-to-water heat exchanger with built-in PID controller to control the temperature at port_b2"; Buildings.Fluid.Sensors.TemperatureTwoPort TSen3(redeclare package Medium = MediumW, m_flow_nominal=m2_flow_nominal) "Temperature sensor"; Modelica.Blocks.Sources.Constant yRes(k=0) "Reset integrator signal"; equation connect(TSet.y, hex1.TSet); connect(sou1.ports[1], hex1.port_a1); connect(hex1.port_b1, sin1.ports[1]); connect(TCon_in.y,sou1. T_in); connect(hex1.port_b2, TSen1.port_a); connect(TSen1.port_b, sin2.ports[1]); connect(TSen2.port_b, sin2.ports[2]); connect(hex1.port_a2, sou2_1.ports[1]); connect(TEva_in.y, sou2_1.T_in); connect(TSen2.port_a, hex2.port_b2); connect(sou1.ports[2], hex2.port_a1); connect(hex2.port_b1, sin1.ports[2]); connect(TSet.y, hex2.TSet); connect(tri.y, hex1.trigger); connect(sou2_1.ports[2], hex2.port_a2); connect(sin2.ports[3], TSen3.port_b); connect(TSen3.port_a, hex3.port_b2); connect(hex3.port_a1, sou1.ports[3]); connect(hex3.port_b1, sin1.ports[3]); connect(hex3.port_a2, sou2_1.ports[3]); connect(TSet.y, hex3.TSet); connect(tri.y, hex2.trigger); connect(yRes.y, hex2.y_reset_in); end HeatExchanger_ResetController;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryLoadSide Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryLoadSide

Integrated WSE on the load side in a primary-only chilled water system

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryLoadSide

Information

This example demonstrates how the model responses according to different cooling mode signals (free cooling mode, partially mechanical cooling and fully mechanical cooling).

The reponses are also compared with a second case where the PI controller in the WSE is reset every 1800s.

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).

Parameters

TypeNameDefaultDescription
MassFlowRatemCHW_flow_nominal2567.1*1000/(4200*10)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2567.1*1000/(4200*8.5)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedpCHW_nominal40000Nominal pressure [Pa]
PressureDifferencedpCW_nominal40000Nominal pressure [Pa]
IntegernumChi1Number of chillers
GenericperPum[numChi]perPum(each pressure=Buildin...Pump performance data

Modelica definition

model IntegratedPrimaryLoadSide "Integrated WSE on the load side in a primary-only chilled water system" extends Modelica.Icons.Example; extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant ( sou1(nPorts=2), sin1(nPorts=2), TSet(k=273.15 + 5.56), TEva_in(k=273.15 + 15.28), sin2(nPorts=2)); Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryLoadSide intWSEPri1( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, perPum=perPum, numChi=numChi, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Integrated waterside economizer on the load side of the primary-only chilled water system"; Modelica.Blocks.Sources.Constant yPum(k=1) "Conrol signal for pumps"; Modelica.Blocks.Sources.RealExpression yVal5( y=if onChi.y and not onWSE.y then 1 else 0) "On/off signal for valve 5"; Modelica.Blocks.Sources.RealExpression yVal6( y=if not onChi.y and onWSE.y then 1 else 0) "On/off signal for valve 6"; Modelica.Blocks.Sources.BooleanStep onChi(startTime(displayUnit="h") = 7200) "On and off signal for the chiller"; Modelica.Blocks.Sources.BooleanStep onWSE( startTime(displayUnit="h") = 14400, startValue=true) "On and off signal for the WSE"; Buildings.Fluid.Sources.Boundary_pT sou2( redeclare package Medium = MediumCHW, nPorts=2, use_T_in=true) "Source on medium 2 side"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryLoadSide intWSEPri2( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, perPum=perPum, numChi=numChi, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, reset=Buildings.Types.Reset.Parameter, y_reset=0) "Integrated waterside economizer on the load side of the primary-only chilled water system with PI controller reset"; Buildings.Fluid.Sensors.TemperatureTwoPort TSup2( redeclare package Medium = MediumCHW, m_flow_nominal=mCHW_flow_nominal); Modelica.Blocks.Sources.BooleanPulse tri(period=1800) "Trigger controller reset"; parameter Fluid.Movers.Data.Generic[numChi] perPum(each pressure= Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters( V_flow=mCHW_flow_nominal/1000*{0.2,0.6,1.0,1.2}, dp=dpCHW_nominal*{1.2,1.1, 1.0,0.6})) "Pump performance data"; equation connect(onChi.y, intWSEPri1.on[1]); connect(onWSE.y, intWSEPri1.on[2]); connect(TSet.y, intWSEPri1.TSet); connect(yVal5.y, intWSEPri1.yVal5); connect(yVal6.y, intWSEPri1.yVal6); connect(yPum.y, intWSEPri1.yPum[1]); connect(intWSEPri1.port_a1, sou1.ports[1]); connect(intWSEPri1.port_b2, TSup1.port_a); connect(intWSEPri1.port_b1, sin1.ports[1]); connect(intWSEPri1.port_a2, sou2.ports[1]); connect(TEva_in.y, sou2.T_in); connect(TSup2.port_a, intWSEPri2.port_b2); connect(intWSEPri2.port_a2, sou2.ports[2]); connect(intWSEPri2.port_b1, sin1.ports[2]); connect(intWSEPri2.port_a1, sou1.ports[2]); connect(TSup2.port_b, sin2.ports[2]); connect(onChi.y, intWSEPri2.on[1]); connect(onWSE.y, intWSEPri2.on[2]); connect(TSet.y, intWSEPri2.TSet); connect(yVal5.y, intWSEPri2.yVal5); connect(yVal6.y, intWSEPri2.yVal6); connect(yPum.y, intWSEPri2.yPum[1]); connect(tri.y, intWSEPri2.trigger); end IntegratedPrimaryLoadSide;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryPlantSide Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryPlantSide

Integrated WSE on the plant side in a primary-only chilled water system

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimaryPlantSide

Information

This example demonstrates how the model responses according to different cooling mode signals (free cooling mode, partially mechanical cooling and fully mechanical cooling).

The reponses are also compared with a second case where the PI controller in the WSE is reset every 1800s.

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).

Parameters

TypeNameDefaultDescription
MassFlowRatemCHW_flow_nominal2567.1*1000/(4200*10)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2567.1*1000/(4200*8.5)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedpCHW_nominal40000Nominal pressure [Pa]
PressureDifferencedpCW_nominal40000Nominal pressure [Pa]
IntegernumChi1Number of chillers

Modelica definition

model IntegratedPrimaryPlantSide "Integrated WSE on the plant side in a primary-only chilled water system" extends Modelica.Icons.Example; extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant ( sou1(nPorts=2), sin1(nPorts=2), TSet(k=273.15 + 5.56), TEva_in(k=273.15 + 15.28), sin2(nPorts=2)); Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryPlantSide intWSEPri1( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, numChi=numChi, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Integrated waterside economizer in the primary-only chilled water system"; Modelica.Blocks.Sources.RealExpression yVal5( y=if onChi.y and not onWSE.y then 1 else 0) "On/off signal for valve 5"; Modelica.Blocks.Sources.RealExpression yVal6( y=if not onChi.y and onWSE.y then 1 else 0) "On/off signal for valve 6"; Fluid.Sources.Boundary_pT sou2( redeclare package Medium = MediumCHW, p=MediumCHW.p_default + 1E5, nPorts=2, use_T_in=true) "Source on medium 2 side"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryPlantSide intWSEPri2( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, numChi=numChi, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, reset=Buildings.Types.Reset.Parameter, y_reset=0) "Integrated waterside economizer in the primary-only chilled water system"; Modelica.Blocks.Sources.BooleanPulse tri(period=1800) "Trigger controller reset"; Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(redeclare package Medium = MediumCHW, m_flow_nominal=mCHW_flow_nominal) "Temperature sensor"; equation connect(yVal5.y, intWSEPri1.yVal5); connect(yVal6.y, intWSEPri1.yVal6); connect(intWSEPri1.port_a1, sou1.ports[1]); connect(intWSEPri1.port_b2, TSup1.port_a); connect(intWSEPri1.port_b1, sin1.ports[1]); connect(intWSEPri1.port_a2, sou2.ports[1]); connect(TEva_in.y, sou2.T_in); connect(TSet.y, intWSEPri1.TSet); connect(onChi.y, intWSEPri1.on[1]); connect(onWSE.y, intWSEPri1.on[2]); connect(sou1.ports[2], intWSEPri2.port_a1); connect(sou2.ports[2], intWSEPri2.port_a2); connect(intWSEPri2.port_b1, sin1.ports[2]); connect(TSet.y, intWSEPri2.TSet); connect(onChi.y, intWSEPri2.on[1]); connect(onWSE.y, intWSEPri2.on[2]); connect(yVal5.y, intWSEPri2.yVal5); connect(yVal6.y, intWSEPri2.yVal6); connect(tri.y, intWSEPri2.trigger); connect(sin2.ports[2], TSup2.port_b); connect(TSup2.port_a, intWSEPri2.port_b2); end IntegratedPrimaryPlantSide;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimarySecondary Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimarySecondary

Integrated WSE on the load side in a primary-secondary chilled water system

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.IntegratedPrimarySecondary

Information

This example demonstrates how the model responses according to different cooling mode signals (free cooling mode, partially mechanical cooling and fully mechanical cooling).

The reponses are also compared with a second case where the PI controller in the WSE is reset every 1800s.

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).

Parameters

TypeNameDefaultDescription
MassFlowRatemCHW_flow_nominal2567.1*1000/(4200*10)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2567.1*1000/(4200*8.5)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedpCHW_nominal40000Nominal pressure [Pa]
PressureDifferencedpCW_nominal40000Nominal pressure [Pa]
IntegernumChi1Number of chillers
GenericperPum[numChi]perPum(each pressure=Buildin...Pump performance data

Modelica definition

model IntegratedPrimarySecondary "Integrated WSE on the load side in a primary-secondary chilled water system" extends Modelica.Icons.Example; extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant ( sou1(nPorts=2), sin1(nPorts=2), TSet(k=273.15 + 5.56), TEva_in(k=273.15 + 10.28), sin2(nPorts=2)); Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimarySecondary intWSEPriSec1( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, numChi=numChi, addPowerToMedium=false, show_T=true, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Integrated waterside economizer on the load side of a primary-secondary chilled water system"; Modelica.Blocks.Sources.RealExpression yVal5( y=if onChi.y and not onWSE.y then 1 else 0) "On/off signal for valve 5"; Modelica.Blocks.Sources.RealExpression yPum(y=if onChi.y then 1 else 0) "Input signal for primary pump"; Fluid.Sources.Boundary_pT sou2( redeclare package Medium = MediumCHW, p=MediumCHW.p_default + 30E3, nPorts=2, use_T_in=true) "Source on medium 2 side"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimarySecondary intWSEPriSec2( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, numChi=numChi, addPowerToMedium=false, show_T=true, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, reset=Buildings.Types.Reset.Parameter, y_reset=0) "Integrated waterside economizer on the load side of a primary-secondary chilled water system"; Modelica.Blocks.Sources.BooleanPulse tri(period=1800) "Trigger controller reset"; parameter Buildings.Fluid.Movers.Data.Generic[numChi] perPum(each pressure= Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters( V_flow=mCHW_flow_nominal/1000*{0.2,0.6,1.0,1.2}, dp=dpCHW_nominal*{1.2,1.1, 1.0,0.6})) "Pump performance data"; Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(redeclare package Medium = MediumCHW, m_flow_nominal=mCHW_flow_nominal) "Temperature sensor"; equation connect(TSet.y, intWSEPriSec1.TSet); connect(yVal5.y, intWSEPriSec1.yVal5); connect(intWSEPriSec1.port_a1, sou1.ports[1]); connect(intWSEPriSec1.port_b2, TSup1.port_a); connect(intWSEPriSec1.port_b1, sin1.ports[1]); connect(intWSEPriSec1.port_a2, sou2.ports[1]); connect(yPum.y, intWSEPriSec1.yPum[1]); connect(TEva_in.y, sou2.T_in); connect(onChi.y, intWSEPriSec1.on[1]); connect(onWSE.y, intWSEPriSec1.on[2]); connect(TSet.y, intWSEPriSec2.TSet); connect(onChi.y, intWSEPriSec2.on[1]); connect(onWSE.y, intWSEPriSec2.on[2]); connect(yVal5.y, intWSEPriSec2.yVal5); connect(yPum.y, intWSEPriSec2.yPum[1]); connect(sou1.ports[2], intWSEPriSec2.port_a1); connect(sou2.ports[2], intWSEPriSec2.port_a2); connect(intWSEPriSec2.port_b1, sin1.ports[2]); connect(tri.y, intWSEPriSec2.trigger); connect(sin2.ports[2], TSup2.port_b); connect(TSup2.port_a, intWSEPriSec2.port_b2); end IntegratedPrimarySecondary;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.NonIntegrated Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.NonIntegrated

Non-integrated WSE in a chilled water system

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.NonIntegrated

Information

This example demonstrates how the model responses according to different cooling mode signals (free cooling mode, and fully mechanical cooling).

The reponses are also compared with a second case where the PI controller in the WSE is reset every 1800s.

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).

Parameters

TypeNameDefaultDescription
MassFlowRatemCHW_flow_nominal2567.1*1000/(4200*10)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2567.1*1000/(4200*8.5)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedpCHW_nominal40000Nominal pressure [Pa]
PressureDifferencedpCW_nominal40000Nominal pressure [Pa]
IntegernumChi1Number of chillers

Modelica definition

model NonIntegrated "Non-integrated WSE in a chilled water system" extends Modelica.Icons.Example; extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant ( sou1(nPorts=2), sin1(nPorts=2), TSet(k=273.15 + 5.56), TEva_in(k=273.15 + 15.28), onWSE(startTime=7200), sin2(nPorts=2)); Buildings.Applications.DataCenters.ChillerCooled.Equipment.NonIntegrated nonIntWSE1( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, numChi=numChi, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Non-integrated waterside economizer "; Fluid.Sources.Boundary_pT sou2( redeclare package Medium = MediumCHW, p=MediumCHW.p_default + 50E3, nPorts=2, use_T_in=true) "Source on medium 2 side"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.NonIntegrated nonIntWSE2( m1_flow_chi_nominal=mCW_flow_nominal, m2_flow_chi_nominal=mCHW_flow_nominal, m1_flow_wse_nominal=mCW_flow_nominal, m2_flow_wse_nominal=mCHW_flow_nominal, redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, dp1_chi_nominal=dpCW_nominal, dp1_wse_nominal=dpCW_nominal, dp2_chi_nominal=dpCHW_nominal, dp2_wse_nominal=dpCHW_nominal, controllerType=Modelica.Blocks.Types.SimpleController.PI, redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD perChi, k=0.4, Ti=80, numChi=numChi, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, reset=Buildings.Types.Reset.Parameter, y_reset=0) "Non-integrated waterside economizer "; Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(redeclare package Medium = MediumCHW, m_flow_nominal=mCHW_flow_nominal) "Temperature sensor"; Modelica.Blocks.Sources.BooleanPulse tri(period=1800) "Trigger controller reset"; equation connect(TSet.y, nonIntWSE1.TSet); connect(nonIntWSE1.port_a1, sou1.ports[1]); connect(nonIntWSE1.port_b2, TSup1.port_a); connect(nonIntWSE1.port_b1, sin1.ports[1]); connect(nonIntWSE1.port_a2, sou2.ports[1]); connect(TEva_in.y, sou2.T_in); connect(onChi.y, nonIntWSE1.on[1]); connect(onWSE.y, nonIntWSE1.on[2]); connect(TSet.y, nonIntWSE2.TSet); connect(onChi.y, nonIntWSE2.on[1]); connect(onWSE.y, nonIntWSE2.on[2]); connect(sou1.ports[2], nonIntWSE2.port_a1); connect(sin1.ports[2], nonIntWSE2.port_b1); connect(nonIntWSE2.port_a2, sou2.ports[2]); connect(sin2.ports[2], TSup2.port_b); connect(TSup2.port_a, nonIntWSE2.port_b2); connect(tri.y, nonIntWSE2.trigger); end NonIntegrated;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.PumpParallel Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.PumpParallel

Example that tests the model pump parallels

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.PumpParallel

Information

This example demonstrates the use of the flow model with two different configurations. At steady-state, all flow models have the same mass flow rate and pressure difference.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
IntegernumPum2The number of pumps
MassFlowRatem_flow_nominal6000/3600*1.2Nominal mass flow rate [kg/s]
Realthr11E-4Threshold for shutoff valves in parallel 1
Realthr2thr1*m_flow_nominalThreshold for shutoff valves in parallel 2

Modelica definition

model PumpParallel "Example that tests the model pump parallels" extends Modelica.Icons.Example; package MediumW = Buildings.Media.Water "Medium model"; parameter Integer numPum=2 "The number of pumps"; parameter Modelica.SIunits.MassFlowRate m_flow_nominal=6000/3600*1.2 "Nominal mass flow rate"; parameter Real thr1=1E-4 "Threshold for shutoff valves in parallel 1"; parameter Real thr2=thr1*m_flow_nominal "Threshold for shutoff valves in parallel 2"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.FlowMachine_y pumPar1( redeclare package Medium = MediumW, num=numPum, dpValve_nominal=6000, redeclare Buildings.Fluid.Movers.Data.Pumps.Wilo.Stratos32slash1to12 per, m_flow_nominal=m_flow_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, threshold=thr1, tau=1, use_inputFilter=false) "Pumps with speed controlled"; Buildings.Fluid.FixedResistances.PressureDrop dp2( redeclare package Medium = MediumW, dp_nominal=3000, m_flow_nominal=6000/3600*1.2) "Pressure drop"; Buildings.Fluid.FixedResistances.PressureDrop dp1( redeclare package Medium = MediumW, m_flow_nominal=6000/3600*1.2, dp_nominal=300) "Pressure drop"; Buildings.Fluid.Sources.Boundary_pT sou( redeclare package Medium = MediumW, use_p_in=false, nPorts=2, p=101325, T=293.15) "Source"; Buildings.Fluid.Sources.Boundary_pT sin( redeclare package Medium = MediumW, use_p_in=false, nPorts=2, p=101325, T=293.15) "Sink"; Modelica.Blocks.Sources.Pulse y[numPum]( each amplitude=1, each width=50, each period=120, each offset=0, each startTime=0) "Input signal"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.FlowMachine_m pumPar2( redeclare package Medium = MediumW, num=numPum, dpValve_nominal=6000, redeclare Buildings.Fluid.Movers.Data.Pumps.Wilo.Stratos32slash1to12 per, m_flow_nominal=m_flow_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, threshold=thr2, tau=1) "Pumps with m_flow controlled"; Buildings.Fluid.FixedResistances.PressureDrop dp3( redeclare package Medium = MediumW, m_flow_nominal=6000/3600*1.2, dp_nominal=300) "Pressure drop"; Buildings.Fluid.FixedResistances.PressureDrop dp4( redeclare package Medium = MediumW, dp_nominal=3000, m_flow_nominal=6000/3600*1.2) "Pressure drop"; equation connect(dp2.port_a, pumPar1.port_b); connect(dp1.port_b, pumPar1.port_a); connect(sou.ports[1], dp1.port_a); connect(y.y, pumPar1.u); connect(dp3.port_a, sou.ports[2]); connect(dp3.port_b, pumPar2.port_a); connect(pumPar2.port_b, dp4.port_a); connect(dp4.port_b, sin.ports[1]); connect(y.y, pumPar2.u); connect(dp2.port_b, sin.ports[2]); end PumpParallel;

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.WatersideEconomizer Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.WatersideEconomizer

Validate model Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer

Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.WatersideEconomizer

Information

This example demonstrates that the temperature at port_b2 is controlled by setting use_controller=true.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatemCHW_flow_nominal2567.1*1000/(4200*10)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2567.1*1000/(4200*8.5)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedpCHW_nominal40000Nominal pressure [Pa]
PressureDifferencedpCW_nominal40000Nominal pressure [Pa]
IntegernumChi1Number of chillers

Modelica definition

model WatersideEconomizer "Validate model Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer" extends Modelica.Icons.Example; package MediumCHW = Buildings.Media.Water "Medium model"; package MediumCW = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate mCHW_flow_nominal=2567.1*1000/( 4200*10) "Nominal mass flow rate at chilled water"; parameter Modelica.SIunits.MassFlowRate mCW_flow_nominal=2567.1*1000/ ( 4200*8.5) "Nominal mass flow rate at condenser water"; parameter Modelica.SIunits.PressureDifference dpCHW_nominal = 40000 "Nominal pressure"; parameter Modelica.SIunits.PressureDifference dpCW_nominal = 40000 "Nominal pressure"; parameter Integer numChi=1 "Number of chillers"; Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer WSE( redeclare package Medium1 = MediumCW, redeclare package Medium2 = MediumCHW, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.4, Ti=80, m1_flow_nominal=mCW_flow_nominal, m2_flow_nominal=mCHW_flow_nominal, eta=0.8, dp1_nominal=dpCW_nominal, dp2_nominal=dpCHW_nominal, use_controller=true, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Waterside economizer"; Buildings.Fluid.Sources.MassFlowSource_T sou2( redeclare package Medium = MediumCHW, m_flow=mCHW_flow_nominal, nPorts=1, use_T_in=true) "Source on medium 2 side"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = MediumCW, nPorts=1) "Sink on medium 1 side"; Buildings.Fluid.Sources.MassFlowSource_T sou1( use_T_in=true, redeclare package Medium = MediumCW, m_flow=mCW_flow_nominal, T=298.15, nPorts=1) "Source on medium 1 side"; Modelica.Blocks.Sources.TimeTable TCon_in( table=[0,273.15 + 12.78; 7200,273.15 + 12.78; 7200,273.15 + 18.33; 14400,273.15 + 18.33; 14400,273.15 + 26.67], offset=0, startTime=0) "Condenser inlet temperature"; Buildings.Fluid.Sources.Boundary_pT sin2( nPorts=1, redeclare package Medium = MediumCHW) "Sink on medium 2 side"; Modelica.Blocks.Sources.Constant TEva_in( k(unit="K", displayUnit="degC")=273.15 + 25.28) "Evaporator inlet temperature"; Modelica.Blocks.Sources.Constant TSet( k(unit="K", displayUnit="degC") = 273.15 + 13.56) "Leaving chilled water temperature setpoint"; Buildings.Fluid.Sensors.TemperatureTwoPort TSup(redeclare package Medium = MediumCHW, m_flow_nominal=mCHW_flow_nominal) "Temperature sensor"; Modelica.Blocks.Sources.BooleanStep onWSE( startValue=true, startTime=7200) "On and off signal for the WSE"; equation connect(TSet.y, WSE.TSet); connect(WSE.port_b2, TSup.port_a); connect(WSE.port_a2, sou2.ports[1]); connect(TEva_in.y, sou2.T_in); connect(TCon_in.y,sou1. T_in); connect(sin2.ports[1], TSup.port_b); connect(onWSE.y, WSE.on[1]); connect(sou1.ports[1], WSE.port_a1); connect(WSE.port_b1, sin1.ports[1]); end WatersideEconomizer;