modelIntegratedPrimaryLoadSide
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.
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
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | num (from PartialChillerWSEInterface) | 2 | Total number of chillers and waterside economizer |
| Boolean | use_controller (from PartialControllerInterface) | true | Set to ture if the built-in controller is enabled to maintain the outlet temperature on the load side of a heat exchanger |
| Integer | numVal (from ValvesParameters) | Number of valves | |
| Integer | numAct (from SignalFilterParameters) | 4 | Number of filters |
| Boolean | activate_ThrWayVal (from ThreeWayValveParameters) | Activate the use of three-way valve: True-use three-way valve; False-not use the three-way valve | |
| Boolean | homotopyInitialization (from PartialChillerWSE) | true | = true, use homotopy method |
| Assumptions | |||
| Boolean | allowFlowReversal1 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1 |
| Boolean | allowFlowReversal2 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2 |
| Chiller | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_chi_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 1 side in the chiller | |
| Modelica.Units.SI.MassFlowRate | m2_flow_chi_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 2 side in the chiller | |
| Modelica.Units.SI.PressureDifference | dp1_chi_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 1 side in the chillers | |
| Modelica.Units.SI.PressureDifference | dp2_chi_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 2 side in the chillers | |
| Integer | numChi (from PartialChillerWSE) | Number of chillers | |
| Buildings.Fluid.Chillers.Data.ElectricEIR.Generic[numChi] | perChi (from PartialChillerWSE) | Performance data for chillers | |
| Waterside economizer | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_wse_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 1 side in the waterside economizer | |
| Modelica.Units.SI.MassFlowRate | m2_flow_wse_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 2 side in the waterside economizer | |
| Modelica.Units.SI.PressureDifference | dp1_wse_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 1 side in the waterside economizer | |
| Modelica.Units.SI.PressureDifference | dp2_wse_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 2 side in the waterside economizer | |
| Modelica.Units.SI.Efficiency | eta (from PartialChillerWSE) | 0.8 | Heat exchange effectiveness |
| Advanced | |||
| Medium1.MassFlowRate | m1_flow_small (from PartialChillerWSEInterface) | 1E-4*abs(m1_flow_chi_nominal) | Small mass flow rate for regularization of zero flow |
| Medium2.MassFlowRate | m2_flow_small (from PartialChillerWSEInterface) | 1E-4*abs(m2_flow_chi_nominal) | Small mass flow rate for regularization of zero flow |
| Modelica.Fluid.Types.PortFlowDirection | portFlowDirection_1 (from ThreeWayValveParameters) | Modelica.Fluid.Types.PortFlowDirection.Bidirectional | Flow direction for port_1 in the three-way valve |
| Modelica.Fluid.Types.PortFlowDirection | portFlowDirection_2 (from ThreeWayValveParameters) | Modelica.Fluid.Types.PortFlowDirection.Bidirectional | Flow direction for port_2 in the three-way valve |
| Modelica.Fluid.Types.PortFlowDirection | portFlowDirection_3 (from ThreeWayValveParameters) | Modelica.Fluid.Types.PortFlowDirection.Bidirectional | Flow direction for port_3 in the three-way valve |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialChillerWSEInterface) | false | = true, if actual temperature at port is computed |
| Flow resistance › Medium 1 | |||
| Boolean | computeFlowResistance1 (from FourPortResistanceChillerWSE) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp1 (from FourPortResistanceChillerWSE) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n1 (from FourPortResistanceChillerWSE) | 2 | Flow exponent, n1=1 for laminar, n1=2 for turbulent |
| Boolean | linearizeFlowResistance1 (from FourPortResistanceChillerWSE) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM1 (from FourPortResistanceChillerWSE) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Flow resistance › Medium 2 | |||
| Boolean | computeFlowResistance2 (from FourPortResistanceChillerWSE) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp2 (from FourPortResistanceChillerWSE) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n2 (from FourPortResistanceChillerWSE) | 2 | Flow exponent, n2=1 for laminar, n2=2 for turbulent |
| Boolean | linearizeFlowResistance2 (from FourPortResistanceChillerWSE) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM2 (from FourPortResistanceChillerWSE) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Controller | |||
| Modelica.Blocks.Types.SimpleController | controllerType (from PartialControllerInterface) | Modelica.Blocks.Types.SimpleController.PID | Type of controller |
| Real | k (from PartialControllerInterface) | 1 | Gain of controller |
| Modelica.Units.SI.Time | Ti (from PartialControllerInterface) | 0.5 | Time constant of integrator block |
| Modelica.Units.SI.Time | Td (from PartialControllerInterface) | 0.1 | Time constant of derivative block |
| Real | yMax (from PartialControllerInterface) | 1 | Upper limit of output |
| Real | yMin (from PartialControllerInterface) | 0 | Lower limit of output |
| Real | wp (from PartialControllerInterface) | 1 | Set-point weight for Proportional block (0..1) |
| Real | wd (from PartialControllerInterface) | 0 | Set-point weight for Derivative block (0..1) |
| Real | Ni (from PartialControllerInterface) | 0.9 | Ni*Ti is time constant of anti-windup compensation |
| Real | Nd (from PartialControllerInterface) | 10 | The higher Nd, the more ideal the derivative block |
| Boolean | reverseActing (from PartialControllerInterface) | false | Set to true for throttling the water flow rate through a cooling coil controller |
| Controller › Initialization | |||
| Modelica.Blocks.Types.Init | initType (from PartialControllerInterface) | Modelica.Blocks.Types.Init.InitialState | Type of initialization (1: no init, 2: steady state, 3: initial state, 4: initial output) |
| Real | xi_start (from PartialControllerInterface) | 0 | Initial or guess value value for integrator output (= integrator state) |
| Real | xd_start (from PartialControllerInterface) | 0 | Initial or guess value for state of derivative block |
| Real | yCon_start (from PartialControllerInterface) | 0 | Initial value of output from the controller |
| Controller › Integrator reset | |||
| Buildings.Types.Reset | reset (from PartialControllerInterface) | Buildings.Types.Reset.Disabled | Type of controller output reset |
| Real | y_reset (from PartialControllerInterface) | xi_start | Value 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.CvTypes | CvData (from ValvesParameters) | Buildings.Fluid.Types.CvTypes.OpPoint | Selection of flow coefficient |
| Real | Kv (from ValvesParameters) | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)] | |
| Real | Cv (from ValvesParameters) | Cv (US) flow coefficient [USG/min/(psi)^(1/2)] | |
| Modelica.Units.SI.Area | Av (from ValvesParameters) | Av (metric) flow coefficient | |
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from ValvesParameters) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dpValve_nominal (from ValvesParameters) | fill(6000, numVal) | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint |
| Real | lValChi (from PartialChillerWSE) | {0.0001, 0.0001} | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Real | lValWSE (from PartialChillerWSE) | {0.0001, 0.0001} | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Real | lVal5 (from PartialIntegratedPrimary) | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Real | lVal6 (from PartialIntegratedPrimary) | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Pressure-flow linearization | |||
| Real | deltaM (from ValvesParameters) | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1 |
| Advanced › Two-way valve | |||
| Modelica.Units.SI.Density | rhoStd (from ValvesParameters) | Inlet density for which valve coefficients are defined | |
| Dynamics › Time needed to open or close valve | |||
| Boolean | use_strokeTime (from SignalFilterParameters) | false | = true, if opening is filtered to avoid a step change in actuator position |
| Modelica.Units.SI.Time | strokeTime (from SignalFilterParameters) | 30 | Time needed to open or close valve |
| Modelica.Blocks.Types.Init | initValve (from SignalFilterParameters) | Modelica.Blocks.Types.Init.InitialOutput | Type of initialization (no init/steady state/initial state/initial output) |
| Real | yValve_start (from SignalFilterParameters) | fill(1, numAct) | Initial value of output:0-closed, 1-fully opened |
| Real | yValChi_start (from PartialChillerWSE) | fill(0, numChi) | Initial value of output from on/off valves in chillers |
| Real | yValWSE_start (from PartialChillerWSE) | 0 | Initial value of output from on/off valve in WSE |
| Real | yThrWayValWSE_start (from PartialChillerWSE) | 0 | Initial value of output from three-way bypass valve in WSE |
| Real | yVal5_start (from PartialIntegratedPrimary) | 0 | Initial value of output:0-closed, 1-fully opened |
| Real | yVal6_start (from PartialIntegratedPrimary) | 1 - yVal5_start | Initial value of output:0-closed, 1-fully opened |
| Real | yValPum_start | fill(0, numPum) | Initial value of output:0-closed, 1-fully opened |
| Three-way Valve | |||
| Modelica.Units.SI.PressureDifference | dpThrWayVal_nominal (from ThreeWayValveParameters) | 6000 | Nominal pressure drop of fully open valve |
| Real | fraK_ThrWayVal (from ThreeWayValveParameters) | 0.7 | Fraction 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) |
| Real | R (from ThreeWayValveParameters) | 50 | Rangeability, R=50...100 typically for the three-way valve |
| Real | delta0 (from ThreeWayValveParameters) | 0.01 | Range of significant deviation from equal percentage law for the three-way valve |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from PartialChillerWSE) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Dynamics › Chiller | |||
| Modelica.Units.SI.Time | tauChi1 (from PartialChillerWSE) | 30 | Time constant at nominal flow in chillers |
| Modelica.Units.SI.Time | tauChi2 (from PartialChillerWSE) | 30 | Time constant at nominal flow in chillers |
| Dynamics › Waterside economizer | |||
| Modelica.Units.SI.Time | tauWSE (from PartialChillerWSE) | 10 | Time constant at nominal flow for dynamic energy and momentum balance of the three-way valve |
| Initialization › Medium 1 | |||
| Medium1.AbsolutePressure | p1_start (from PartialChillerWSE) | Medium1.p_default | Start value of pressure |
| Medium1.Temperature | T1_start (from PartialChillerWSE) | Medium1.T_default | Start value of temperature |
| Medium1.MassFraction[Medium1.nX] | X1_start (from PartialChillerWSE) | Medium1.X_default | Start 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.AbsolutePressure | p2_start (from PartialChillerWSE) | Medium2.p_default | Start value of pressure |
| Medium2.Temperature | T2_start (from PartialChillerWSE) | Medium2.T_default | Start value of temperature |
| Medium2.MassFraction[Medium2.nX] | X2_start (from PartialChillerWSE) | Medium2.X_default | Start 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.Time | tauSenT (from PartialChillerWSE) | 1 | Time constant at nominal flow rate (use tau=0 for steady-state sensor, but see user guide for potential problems) |
| Modelica.Blocks.Types.Init | initTSenor (from PartialChillerWSE) | Modelica.Blocks.Types.Init.InitialState | Type of initialization of the temperature sensor (InitialState and InitialOutput are identical) |
| Dynamics › Pump | |||
| Modelica.Units.SI.Time | tauPump | 1 | Time constant of fluid volume for nominal flow in pumps, used if energy or mass balance is dynamic |
| Pump | |||
| Integer | numPum | numChi | Number of pumps |
| Buildings.Fluid.Movers.Data.Generic[numPum] | perPum | Performance data for the pumps | |
| Boolean | addPowerToMedium | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations) |
| Real | lValPum | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Dynamics › Motor speed | |||
| Boolean | use_riseTime | true | Set to true to continuously change motor speed |
| Modelica.Units.SI.Time | riseTime | 30 | Time needed to open or close valve |
| Modelica.Blocks.Types.Init | initPum | initValve | Type of initialization (no init/steady state/initial state/initial output) |
| Real | yPum_start | fill(0, numPum) | Initial value of output:0-closed, 1-fully opened |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a1 (from PartialFourPort) | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b1 (from PartialFourPort) | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_a | port_a2 (from PartialFourPort) | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b2 (from PartialFourPort) | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Blocks.Interfaces.RealInput | TSet (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.BooleanInput | trigger (from PartialControllerInterface) | Resets the controller output when trigger becomes true | |
| Modelica.Blocks.Interfaces.RealInput | y_reset_in (from PartialControllerInterface) | Input signal for state to which integrator is reset, enabled if reset = Buildings.Types.Reset.Input | |
| Modelica.Blocks.Interfaces.RealOutput | TCHWSupWSE (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.RealInput | yVal6 (from PartialIntegratedPrimary) | Actuator position for valve 6 (0: closed, 1: open) | |
| Modelica.Blocks.Interfaces.RealInput | yVal5 (from PartialIntegratedPrimary) | Actuator position for valve 5(0: closed, 1: open) | |
| Modelica.Blocks.Interfaces.RealInput[numPum] | yPum | Constant normalized rotational speed | |
| Modelica.Blocks.Interfaces.RealOutput[numPum] | powPum | Electrical power consumed by the pumps |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Medium1.MassFlowRate | m1_flow (from PartialChillerWSEInterface) | port_a1.m_flow | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp1 (from PartialChillerWSEInterface) | port_a1.p - port_b1.p | Pressure difference between port_a1 and port_b1 |
| Medium2.MassFlowRate | m2_flow (from PartialChillerWSEInterface) | port_a2.m_flow | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp2 (from PartialChillerWSEInterface) | port_a2.p - port_b2.p | Pressure difference between port_a2 and port_b2 |
| Medium1.ThermodynamicState | sta_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.ThermodynamicState | sta_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.ThermodynamicState | sta_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.ThermodynamicState | sta_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.ElectricChillerParallel | chiPar (from PartialChillerWSE) | Chillers with identical nominal parameters but different performance curves | |
| Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer | wse (from PartialChillerWSE) | Waterside economizer | |
| Buildings.Fluid.Sensors.TemperatureTwoPort | senTem (from PartialChillerWSE) | Temperature sensor | |
| Fluid.FixedResistances.Junction | spl1 (from PartialChillerWSE) | Splitter | |
| Fluid.FixedResistances.Junction | jun1 (from PartialChillerWSE) | Junction | |
| Buildings.Fluid.Actuators.Valves.TwoWayLinear | val5 (from PartialIntegratedPrimary) | Bypass valve: closed when fully mechanic cooling is activated; open when fully mechanic cooling is activated | |
| Buildings.Fluid.Actuators.Valves.TwoWayLinear | val6 (from PartialIntegratedPrimary) | Bypass valve: closed when free cooling mode is deactivated; open when free cooling is activated | |
| Fluid.FixedResistances.Junction | spl2 (from PartialIntegratedPrimary) | Splitter | |
| Fluid.FixedResistances.Junction | jun2 (from PartialIntegratedPrimary) | Junction | |
| Buildings.Applications.BaseClasses.Equipment.FlowMachine_y | pum | Pumps |
Revisions
-
April 26, 2021, by Kathryn Hinkelman:
Added junctions and removedkFixedredundancies.
See IBPSA, #1472. -
January 12, 2019, by Michael Wetter:
Removed wrong use ofeach. -
July 1, 2017, by Yangyang Fu:
First implementation.