modelIntegratedPrimaryLoadSide

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

Extends from Buildings.Applications.DataCenters.ChillerCooled.Equipment.BaseClasses.PartialIntegratedPrimary (Integrated water-side economizer for primary-only chilled water system).

Information

This model implements an integrated water-side economizer (WSE) on the load side of the primary-only chilled water system, as shown in the following figure. In the configuration, users can model multiple chillers with only one integrated WSE.

image

Implementation

The WSE located on the load side can see the warmest return chilled water, and hence can maximize the use time of the heat exchanger. This system have three operation modes: free cooling (FC) mode, partial mechanical cooling (PMC) mode and fully mechanical cooling (FMC) mode.

There are 7 valves for on/off use only, which can be controlled in order to switch among FC, PMC and FMC mode.

  • V1 and V2 are associated with the chiller. When the chiller is commanded to run, V1 and V2 will be open, and vice versa. Note that when the number of chillers are larger than 1, V1 and V2 are vectored models with the same dimension as the chillers.
  • V3 and V4 are associated with the WSE. When the WSE is commanded to run, V3 and V4 will be open, and vice versa.
  • V5 is for FMC only. When FMC is on, V5 is commanded to on. Otherwise, V5 is off.
  • V6 is for FC only. When FC is on, V6 is commanded to on. Otherwise, V6 is off.
  • V7 is controlled to track a minimum flowrate through the chiller. If the cooling load is very small (e.g. when the data center start to be occupied), and the flowrate through the chiller is smaller than the minimum requirement, then V7 is open, and the valve position is controlled to meet the minimum flowrate through the chiller. If the cooling load grows, V7 will eventually be fully closed.

The details about how to switch among different cooling modes are shown as:

For Free Cooling (FC) Mode:

  • V1 and V2 are closed, and V3 and V4 are open;
  • V5 is closed;
  • V6 is open;
  • V7 is closed;

For Partially Mechanical Cooling (PMC) Mode:

  • V1 and V2 are open, and V3 and V4 are open;
  • V5 is closed;
  • V6 is closed;
  • V7 is controlled to track a minumum flowrate through the chiller;

For Fully Mechanical Cooling (FMC) Mode:

  • V1 and V2 are open, and V3 and V4 are closed;
  • V5 is open;
  • V6 is closed;
  • V7 is controlled to track a minumum flowrate through the chiller;

Reference

  • Stein, Jeff. 2009. Waterside Economizing in Data Centers: Design and Control Considerations.ASHRAE Transactions, 115(2).

Parameters

TypeNameDefaultDescription
Integernum (from PartialChillerWSEInterface)2Total number of chillers and waterside economizer
Booleanuse_controller (from PartialControllerInterface)trueSet to ture if the built-in controller is enabled to maintain the outlet temperature on the load side of a heat exchanger
IntegernumVal (from ValvesParameters)Number of valves
IntegernumAct (from SignalFilterParameters)4Number of filters
Booleanactivate_ThrWayVal (from ThreeWayValveParameters)Activate the use of three-way valve: True-use three-way valve; False-not use the three-way valve
BooleanhomotopyInitialization (from PartialChillerWSE)true= true, use homotopy method
Assumptions
BooleanallowFlowReversal1 (from PartialFourPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2 (from PartialFourPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Chiller
Modelica.Units.SI.MassFlowRatem1_flow_chi_nominal (from PartialChillerWSEInterface)Nominal mass flow rate on the medium 1 side in the chiller
Modelica.Units.SI.MassFlowRatem2_flow_chi_nominal (from PartialChillerWSEInterface)Nominal mass flow rate on the medium 2 side in the chiller
Modelica.Units.SI.PressureDifferencedp1_chi_nominal (from FourPortResistanceChillerWSE)Pressure difference on medium 1 side in the chillers
Modelica.Units.SI.PressureDifferencedp2_chi_nominal (from FourPortResistanceChillerWSE)Pressure difference on medium 2 side in the chillers
IntegernumChi (from PartialChillerWSE)Number of chillers
Buildings.Fluid.Chillers.Data.ElectricEIR.Generic[numChi]perChi (from PartialChillerWSE)Performance data for chillers
Waterside economizer
Modelica.Units.SI.MassFlowRatem1_flow_wse_nominal (from PartialChillerWSEInterface)Nominal mass flow rate on the medium 1 side in the waterside economizer
Modelica.Units.SI.MassFlowRatem2_flow_wse_nominal (from PartialChillerWSEInterface)Nominal mass flow rate on the medium 2 side in the waterside economizer
Modelica.Units.SI.PressureDifferencedp1_wse_nominal (from FourPortResistanceChillerWSE)Pressure difference on medium 1 side in the waterside economizer
Modelica.Units.SI.PressureDifferencedp2_wse_nominal (from FourPortResistanceChillerWSE)Pressure difference on medium 2 side in the waterside economizer
Modelica.Units.SI.Efficiencyeta (from PartialChillerWSE)0.8Heat exchange effectiveness
Advanced
Medium1.MassFlowRatem1_flow_small (from PartialChillerWSEInterface)1E-4*abs(m1_flow_chi_nominal)Small mass flow rate for regularization of zero flow
Medium2.MassFlowRatem2_flow_small (from PartialChillerWSEInterface)1E-4*abs(m2_flow_chi_nominal)Small mass flow rate for regularization of zero flow
Modelica.Fluid.Types.PortFlowDirectionportFlowDirection_1 (from ThreeWayValveParameters)Modelica.Fluid.Types.PortFlowDirection.BidirectionalFlow direction for port_1 in the three-way valve
Modelica.Fluid.Types.PortFlowDirectionportFlowDirection_2 (from ThreeWayValveParameters)Modelica.Fluid.Types.PortFlowDirection.BidirectionalFlow direction for port_2 in the three-way valve
Modelica.Fluid.Types.PortFlowDirectionportFlowDirection_3 (from ThreeWayValveParameters)Modelica.Fluid.Types.PortFlowDirection.BidirectionalFlow direction for port_3 in the three-way valve
Advanced › Diagnostics
Booleanshow_T (from PartialChillerWSEInterface)false= true, if actual temperature at port is computed
Flow resistance › Medium 1
BooleancomputeFlowResistance1 (from FourPortResistanceChillerWSE)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp1 (from FourPortResistanceChillerWSE)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn1 (from FourPortResistanceChillerWSE)2Flow exponent, n1=1 for laminar, n1=2 for turbulent
BooleanlinearizeFlowResistance1 (from FourPortResistanceChillerWSE)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM1 (from FourPortResistanceChillerWSE)0.1Fraction of nominal flow rate where flow transitions to laminar
Flow resistance › Medium 2
BooleancomputeFlowResistance2 (from FourPortResistanceChillerWSE)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp2 (from FourPortResistanceChillerWSE)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn2 (from FourPortResistanceChillerWSE)2Flow exponent, n2=1 for laminar, n2=2 for turbulent
BooleanlinearizeFlowResistance2 (from FourPortResistanceChillerWSE)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM2 (from FourPortResistanceChillerWSE)0.1Fraction of nominal flow rate where flow transitions to laminar
Controller
Modelica.Blocks.Types.SimpleControllercontrollerType (from PartialControllerInterface)Modelica.Blocks.Types.SimpleController.PIDType of controller
Realk (from PartialControllerInterface)1Gain of controller
Modelica.Units.SI.TimeTi (from PartialControllerInterface)0.5Time constant of integrator block
Modelica.Units.SI.TimeTd (from PartialControllerInterface)0.1Time constant of derivative block
RealyMax (from PartialControllerInterface)1Upper limit of output
RealyMin (from PartialControllerInterface)0Lower limit of output
Realwp (from PartialControllerInterface)1Set-point weight for Proportional block (0..1)
Realwd (from PartialControllerInterface)0Set-point weight for Derivative block (0..1)
RealNi (from PartialControllerInterface)0.9Ni*Ti is time constant of anti-windup compensation
RealNd (from PartialControllerInterface)10The higher Nd, the more ideal the derivative block
BooleanreverseActing (from PartialControllerInterface)falseSet to true for throttling the water flow rate through a cooling coil controller
Controller › Initialization
Modelica.Blocks.Types.InitinitType (from PartialControllerInterface)Modelica.Blocks.Types.Init.InitialStateType of initialization (1: no init, 2: steady state, 3: initial state, 4: initial output)
Realxi_start (from PartialControllerInterface)0Initial or guess value value for integrator output (= integrator state)
Realxd_start (from PartialControllerInterface)0Initial or guess value for state of derivative block
RealyCon_start (from PartialControllerInterface)0Initial value of output from the controller
Controller › Integrator reset
Buildings.Types.Resetreset (from PartialControllerInterface)Buildings.Types.Reset.DisabledType of controller output reset
Realy_reset (from PartialControllerInterface)xi_startValue to which the controller output is reset if the boolean trigger has a rising edge, used if reset == Buildings.Types.Reset.Parameter
Two-way valve
Buildings.Fluid.Types.CvTypesCvData (from ValvesParameters)Buildings.Fluid.Types.CvTypes.OpPointSelection of flow coefficient
RealKv (from ValvesParameters)Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
RealCv (from ValvesParameters)Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Modelica.Units.SI.AreaAv (from ValvesParameters)Av (metric) flow coefficient
Modelica.Units.SI.MassFlowRatem_flow_nominal (from ValvesParameters)Nominal mass flow rate
Modelica.Units.SI.PressureDifferencedpValve_nominal (from ValvesParameters)fill(6000, numVal)Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint
ReallValChi (from PartialChillerWSE){0.0001, 0.0001}Valve leakage, l=Kv(y=0)/Kv(y=1)
ReallValWSE (from PartialChillerWSE){0.0001, 0.0001}Valve leakage, l=Kv(y=0)/Kv(y=1)
ReallVal5 (from PartialIntegratedPrimary)0.0001Valve leakage, l=Kv(y=0)/Kv(y=1)
ReallVal6 (from PartialIntegratedPrimary)0.0001Valve leakage, l=Kv(y=0)/Kv(y=1)
Pressure-flow linearization
RealdeltaM (from ValvesParameters)0.02Fraction of nominal flow rate where linearization starts, if y=1
Advanced › Two-way valve
Modelica.Units.SI.DensityrhoStd (from ValvesParameters)Inlet density for which valve coefficients are defined
Dynamics › Time needed to open or close valve
Booleanuse_strokeTime (from SignalFilterParameters)false= true, if opening is filtered to avoid a step change in actuator position
Modelica.Units.SI.TimestrokeTime (from SignalFilterParameters)30Time needed to open or close valve
Modelica.Blocks.Types.InitinitValve (from SignalFilterParameters)Modelica.Blocks.Types.Init.InitialOutputType of initialization (no init/steady state/initial state/initial output)
RealyValve_start (from SignalFilterParameters)fill(1, numAct)Initial value of output:0-closed, 1-fully opened
RealyValChi_start (from PartialChillerWSE)fill(0, numChi)Initial value of output from on/off valves in chillers
RealyValWSE_start (from PartialChillerWSE)0Initial value of output from on/off valve in WSE
RealyThrWayValWSE_start (from PartialChillerWSE)0Initial value of output from three-way bypass valve in WSE
RealyVal5_start (from PartialIntegratedPrimary)0Initial value of output:0-closed, 1-fully opened
RealyVal6_start (from PartialIntegratedPrimary)1 - yVal5_startInitial value of output:0-closed, 1-fully opened
RealyValPum_startfill(0, numPum)Initial value of output:0-closed, 1-fully opened
Three-way Valve
Modelica.Units.SI.PressureDifferencedpThrWayVal_nominal (from ThreeWayValveParameters)6000Nominal pressure drop of fully open valve
RealfraK_ThrWayVal (from ThreeWayValveParameters)0.7Fraction Kv(port_3→port_2)/Kv(port_1→port_2)for the three-way valve
Real[2]l_ThrWayVal (from ThreeWayValveParameters){0.0001, 0.0001}Bypass valve leakage, l=Kv(y=0)/Kv(y=1)
RealR (from ThreeWayValveParameters)50Rangeability, R=50...100 typically for the three-way valve
Realdelta0 (from ThreeWayValveParameters)0.01Range of significant deviation from equal percentage law for the three-way valve
Dynamics › Conservation equations
Modelica.Fluid.Types.DynamicsenergyDynamics (from PartialChillerWSE)Modelica.Fluid.Types.Dynamics.DynamicFreeInitialType of energy balance: dynamic (3 initialization options) or steady state
Dynamics › Chiller
Modelica.Units.SI.TimetauChi1 (from PartialChillerWSE)30Time constant at nominal flow in chillers
Modelica.Units.SI.TimetauChi2 (from PartialChillerWSE)30Time constant at nominal flow in chillers
Dynamics › Waterside economizer
Modelica.Units.SI.TimetauWSE (from PartialChillerWSE)10Time constant at nominal flow for dynamic energy and momentum balance of the three-way valve
Initialization › Medium 1
Medium1.AbsolutePressurep1_start (from PartialChillerWSE)Medium1.p_defaultStart value of pressure
Medium1.TemperatureT1_start (from PartialChillerWSE)Medium1.T_defaultStart value of temperature
Medium1.MassFraction[Medium1.nX]X1_start (from PartialChillerWSE)Medium1.X_defaultStart value of mass fractions m_i/m
Medium1.ExtraProperty[Medium1.nC]C1_start (from PartialChillerWSE)fill(0, Medium1.nC)Start value of trace substances
Medium1.ExtraProperty[Medium1.nC]C1_nominal (from PartialChillerWSE)fill(1E-2, Medium1.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Initialization › Medium 2
Medium2.AbsolutePressurep2_start (from PartialChillerWSE)Medium2.p_defaultStart value of pressure
Medium2.TemperatureT2_start (from PartialChillerWSE)Medium2.T_defaultStart value of temperature
Medium2.MassFraction[Medium2.nX]X2_start (from PartialChillerWSE)Medium2.X_defaultStart value of mass fractions m_i/m
Medium2.ExtraProperty[Medium2.nC]C2_start (from PartialChillerWSE)fill(0, Medium2.nC)Start value of trace substances
Medium2.ExtraProperty[Medium2.nC]C2_nominal (from PartialChillerWSE)fill(1E-2, Medium2.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Dynamics › Temperature Sensor
Modelica.Units.SI.TimetauSenT (from PartialChillerWSE)1Time constant at nominal flow rate (use tau=0 for steady-state sensor, but see user guide for potential problems)
Modelica.Blocks.Types.InitinitTSenor (from PartialChillerWSE)Modelica.Blocks.Types.Init.InitialStateType of initialization of the temperature sensor (InitialState and InitialOutput are identical)
Dynamics › Pump
Modelica.Units.SI.TimetauPump1Time constant of fluid volume for nominal flow in pumps, used if energy or mass balance is dynamic
Pump
IntegernumPumnumChiNumber of pumps
Buildings.Fluid.Movers.Data.Generic[numPum]perPumPerformance data for the pumps
BooleanaddPowerToMediumtrueSet to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations)
ReallValPum0.0001Valve leakage, l=Kv(y=0)/Kv(y=1)
Dynamics › Motor speed
Booleanuse_riseTimetrueSet to true to continuously change motor speed
Modelica.Units.SI.TimeriseTime30Time needed to open or close valve
Modelica.Blocks.Types.InitinitPuminitValveType of initialization (no init/steady state/initial state/initial output)
RealyPum_startfill(0, numPum)Initial value of output:0-closed, 1-fully opened

Connectors

TypeNameDefaultDescription
Modelica.Fluid.Interfaces.FluidPort_aport_a1 (from PartialFourPort)Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
Modelica.Fluid.Interfaces.FluidPort_bport_b1 (from PartialFourPort)Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
Modelica.Fluid.Interfaces.FluidPort_aport_a2 (from PartialFourPort)Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
Modelica.Fluid.Interfaces.FluidPort_bport_b2 (from PartialFourPort)Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)
Modelica.Blocks.Interfaces.RealInputTSet (from PartialChillerWSEInterface)Set point for leaving water temperature
Modelica.Blocks.Interfaces.BooleanInput[num]on (from PartialChillerWSEInterface)Set to true to enable equipment, or false to disable equipment
Modelica.Blocks.Interfaces.BooleanInputtrigger (from PartialControllerInterface)Resets the controller output when trigger becomes true
Modelica.Blocks.Interfaces.RealInputy_reset_in (from PartialControllerInterface)Input signal for state to which integrator is reset, enabled if reset = Buildings.Types.Reset.Input
Modelica.Blocks.Interfaces.RealOutputTCHWSupWSE (from PartialChillerWSE)Chilled water supply temperature in the waterside economizer
Modelica.Blocks.Interfaces.RealOutput[numChi]powChi (from PartialChillerWSE)Electric power consumed by chiller compressor
Modelica.Blocks.Interfaces.RealInputyVal6 (from PartialIntegratedPrimary)Actuator position for valve 6 (0: closed, 1: open)
Modelica.Blocks.Interfaces.RealInputyVal5 (from PartialIntegratedPrimary)Actuator position for valve 5(0: closed, 1: open)
Modelica.Blocks.Interfaces.RealInput[numPum]yPumConstant normalized rotational speed
Modelica.Blocks.Interfaces.RealOutput[numPum]powPumElectrical power consumed by the pumps

Components

TypeNameDefaultDescription
Medium1.MassFlowRatem1_flow (from PartialChillerWSEInterface)port_a1.m_flowMass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp1 (from PartialChillerWSEInterface)port_a1.p - port_b1.pPressure difference between port_a1 and port_b1
Medium2.MassFlowRatem2_flow (from PartialChillerWSEInterface)port_a2.m_flowMass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp2 (from PartialChillerWSEInterface)port_a2.p - port_b2.pPressure difference between port_a2 and port_b2
Medium1.ThermodynamicStatesta_a1 (from PartialChillerWSEInterface)Medium1.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow)))Medium properties in port_a1
Medium1.ThermodynamicStatesta_b1 (from PartialChillerWSEInterface)Medium1.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow)))Medium properties in port_b1
Medium2.ThermodynamicStatesta_a2 (from PartialChillerWSEInterface)Medium2.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow)))Medium properties in port_a2
Medium2.ThermodynamicStatesta_b2 (from PartialChillerWSEInterface)Medium2.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow)))Medium properties in port_b2
Buildings.Applications.BaseClasses.Equipment.ElectricChillerParallelchiPar (from PartialChillerWSE)Chillers with identical nominal parameters but different performance curves
Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizerwse (from PartialChillerWSE)Waterside economizer
Buildings.Fluid.Sensors.TemperatureTwoPortsenTem (from PartialChillerWSE)Temperature sensor
Fluid.FixedResistances.Junctionspl1 (from PartialChillerWSE)Splitter
Fluid.FixedResistances.Junctionjun1 (from PartialChillerWSE)Junction
Buildings.Fluid.Actuators.Valves.TwoWayLinearval5 (from PartialIntegratedPrimary)Bypass valve: closed when fully mechanic cooling is activated; open when fully mechanic cooling is activated
Buildings.Fluid.Actuators.Valves.TwoWayLinearval6 (from PartialIntegratedPrimary)Bypass valve: closed when free cooling mode is deactivated; open when free cooling is activated
Fluid.FixedResistances.Junctionspl2 (from PartialIntegratedPrimary)Splitter
Fluid.FixedResistances.Junctionjun2 (from PartialIntegratedPrimary)Junction
Buildings.Applications.BaseClasses.Equipment.FlowMachine_ypumPumps

Revisions

  • April 26, 2021, by Kathryn Hinkelman:
    Added junctions and removed kFixed redundancies.
    See IBPSA, #1472.
  • January 12, 2019, by Michael Wetter:
    Removed wrong use of each.
  • July 1, 2017, by Yangyang Fu:
    First implementation.