Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow

Package of sequences for calculating minimum outdoor airflow rate

Information

This package contains sequences to set the minimum outdoor airflow setpoint for compliance with the ventilation rate procedure of ASHRAE 62.1-2013. The implementation is according to ASHRAE Guidline 36 (G36), PART 5.N.3.a, PART 5.B.2.b, PART3.1-D.2.a.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.AHU AHU Output outdoor airflow related calculations at the AHU level
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.SumZone SumZone Output the sum, maximum and minimum from the zone level calculation
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.Zone Zone Output outdoor airflow related calculations at the zone level
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.AHU Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.AHU

Output outdoor airflow related calculations at the AHU level

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.AHU

Information

This sequence outputs AHU level design minimum outdoor airflow rate VDesOutAir_flow and effective minimum outdoor airflow rate VEffOutAir_flow.

It requires following inputs which are sum, maximum or minimum of the outputs from the zone level calculation:

  1. Sum of the design population of the zones in the group, sumDesZonPop.
  2. Sum of the population component design breathing zone flow rate, VSumDesPopBreZon_flow.
  3. Sum of the area component design breathing zone flow rate, VSumDesAreBreZon_flow.
  4. Minimum of all zones ventilation efficiency, uDesSysVenEff.
  5. Sum of all zones required uncorrected outdoor airflow rate, VSumUncOutAir_flow.
  6. Sum of the measured discharged flow rate of all terminal units, VSumSysPriAir_flow.
  7. Maximum of primary outdoor air fraction of all zones, uOutAirFra_max.

The calculation is done using the steps below.

  1. Compute the occupancy diversity fraction occDivFra. During system operation, the system population equals the sum of the zone population, so occDivFra=1. It has no impact on the calculation of the uncorrected outdoor airflow sysUncOutAir. For design purpose, compute for all zones

        occDivFra = peaSysPop/sumDesZonPop
    

    where peaSysPop is the peak system population and sumDesZonPop is the sum of the design population.

  2. Compute the design uncorrected outdoor airflow rate VDesUncOutAir_flow as

        VDesUncOutAir_flow = occDivFra*VSumDesPopBreZon_flow+VSumDesAreBreZon_flow.
    
  3. Compute the uncorrected outdoor airflow rate sysUncOutAir as

        sysUncOutAir = min(VDesUncOutAir_flow, VSumUncOutAir_flow)
    

    where VSumUncOutAir_flow is sum of all zones required uncorrected outdoor airflow rate

  4. Compute the outdoor air fraction as

        outAirFra = sysUncOutAir/VSumSysPriAir_flow.
    

    For design purpose, use

        aveOutAirFra = sysUncOutAir/VPriSysMax_flow.
    

    where VPriSysMax_flow is the maximum expected system primary airflow at design stage.

  5. Compute the system ventilation efficiency sysVenEff. During system operation, the efficiency is

        sysVenEff = 1 + outAirFra - uOutAirFra_max
    
  6. Compute the minimum required AHU outdoor air intake flow rate. The minimum required system outdoor air intake flow should be the uncorrected outdoor air intake sysUncOutAir divided by the system ventilation efficiency sysVenEff, but it should not be larger than the design outdoor air rate desOutAirInt. Hence,

        effMinOutAirInt = min(sysUncOutAir/sysVenEff, desOutAirInt),
    

    where the design outdoor air rate desOutAirInt is

        desOutAirInt = VDesUncOutAir_flow/uDesSysVenEff.
    

Parameters

TypeNameDefaultDescription
Nominal condition
RealVPriSysMax_flowVPriSysMax_flow(unit="m3/s")Maximum expected system primary airflow at design stage [m3/s]
RealpeaSysPoppeaSysPop(final unit="1")Peak system population [1]

Connectors

TypeNameDescription
input RealInputsumDesZonPopSum of the design population of the zones in the group [1]
input RealInputVSumDesPopBreZon_flowSum of the population component design breathing zone flow rate [m3/s]
input RealInputVSumDesAreBreZon_flowSum of the area component design breathing zone flow rate [m3/s]
input RealInputuDesSysVenEffDesign system ventilation efficiency, equals to the minimum of all zones ventilation efficiency [1]
input RealInputVSumUncOutAir_flowSum of all zones required uncorrected outdoor airflow rate [m3/s]
input RealInputVSumSysPriAir_flowSystem primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units [m3/s]
input RealInputuOutAirFra_maxMaximum zone outdoor air fraction, equals to the maximum of primary outdoor air fraction of all zones [1]
input BooleanInputuSupFanSupply fan status, true if on, false if off
input IntegerInputuOpeModAHU operation mode status signal
output RealOutputVDesUncOutAir_flowDesign uncorrected minimum outdoor airflow rate [m3/s]
output RealOutputyAveOutAirFraPluAverage outdoor air flow fraction plus 1 [1]
output RealOutputVDesOutAir_flowDesign minimum outdoor airflow rate [m3/s]
output RealOutputVEffOutAir_flowEffective minimum outdoor airflow setpoint [m3/s]
output RealOutputeffOutAir_normalizedEffective minimum outdoor airflow setpoint, normalized by VDesOutMin_flow_nominal [1]
output BooleanOutputyReqOutAirTrue if the AHU supply fan is on and the zone is in occupied mode

Modelica definition

block AHU "Output outdoor airflow related calculations at the AHU level" parameter Real VPriSysMax_flow(unit="m3/s") "Maximum expected system primary airflow at design stage"; parameter Real peaSysPop(final unit="1") "Peak system population"; Buildings.Controls.OBC.CDL.Interfaces.RealInput sumDesZonPop( final min=0, final unit="1") "Sum of the design population of the zones in the group"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumDesPopBreZon_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the population component design breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumDesAreBreZon_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the area component design breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uDesSysVenEff( final min=0, final unit="1") "Design system ventilation efficiency, equals to the minimum of all zones ventilation efficiency"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumUncOutAir_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of all zones required uncorrected outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumSysPriAir_flow( final unit="m3/s", final quantity="VolumeFlowRate") "System primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutAirFra_max( final min=0, final unit="1") "Maximum zone outdoor air fraction, equals to the maximum of primary outdoor air fraction of all zones"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status, true if on, false if off"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VDesUncOutAir_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Design uncorrected minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yAveOutAirFraPlu( final min=0, final unit="1") "Average outdoor air flow fraction plus 1"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VDesOutAir_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Design minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VEffOutAir_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Effective minimum outdoor airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput effOutAir_normalized( final unit="1") "Effective minimum outdoor airflow setpoint, normalized by VDesOutMin_flow_nominal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yReqOutAir "True if the AHU supply fan is on and the zone is in occupied mode"; protected Buildings.Controls.OBC.CDL.Continuous.Division outAirFra "System outdoor air fraction"; Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( final p=1, final k=1) "System outdoor air flow fraction plus 1"; Buildings.Controls.OBC.CDL.Continuous.Add sysVenEff( final k2=-1) "Current system ventilation efficiency"; Buildings.Controls.OBC.CDL.Continuous.Division effMinOutAirInt "Effective minimum outdoor air setpoint"; Buildings.Controls.OBC.CDL.Continuous.Division occDivFra "Occupant diversity fraction"; Buildings.Controls.OBC.CDL.Continuous.Add unCorOutAirInk "Uncorrected outdoor air intake"; Buildings.Controls.OBC.CDL.Continuous.Product pro "Product of inputs"; Buildings.Controls.OBC.CDL.Continuous.Gain aveOutAirFra( final k=1/VPriSysMax_flow) "Average outdoor air fraction"; Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( final p=1, final k=1) "Average outdoor air flow fraction plus 1"; Buildings.Controls.OBC.CDL.Continuous.Division desOutAirInt "Design system outdoor air intake"; Buildings.Controls.OBC.CDL.Continuous.Min min "Minimum outdoor airflow rate should not be more than designed outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Min sysUncOutAir "Uncorrected outdoor air rate should not be higher than its design value"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode index"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant peaSysPopulation( final k=peaSysPop) "Peak system population"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if operation mode is occupied"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Switch swi4 "Ensuring the system efficiency will not be negative"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( final k=1) "Set system ventilation efficiency to 1"; Buildings.Controls.OBC.CDL.Continuous.Division norVOutMin "Normalization for minimum outdoor air flow rate"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys1( final uLow=1E-4, final uHigh=1E-3) "Check if system ventilation efficiency is greater than 0 (using 1E-4 tolerance)"; equation connect(peaSysPopulation.y, occDivFra.u1); connect(pro.y, unCorOutAirInk.u1); connect(aveOutAirFra.y, addPar1.u); connect(unCorOutAirInk.y, desOutAirInt.u1); connect(sysUncOutAir.y, effMinOutAirInt.u1); connect(sysUncOutAir.y, outAirFra.u1); connect(unCorOutAirInk.y, sysUncOutAir.u1); connect(desOutAirInt.y, min.u1); connect(unCorOutAirInk.y, VDesUncOutAir_flow); connect(desOutAirInt.y, VDesOutAir_flow); connect(occDivFra.y, pro.u1); connect(uOpeMod, intEqu1.u1); connect(occMod.y, intEqu1.u2); connect(intEqu1.y, and1.u2); connect(sysVenEff.y, swi4.u1); connect(swi4.y, effMinOutAirInt.u2); connect(outAirFra.y, addPar.u); connect(addPar.y, sysVenEff.u1); connect(conOne.y, swi4.u3); connect(VEffOutAir_flow, min.y); connect(effMinOutAirInt.y, min.u2); connect(norVOutMin.u1, min.y); connect(desOutAirInt.y, norVOutMin.u2); connect(norVOutMin.y, effOutAir_normalized); connect(uSupFan, and1.u1); connect(sysVenEff.y, hys1.u); connect(hys1.y, swi4.u2); connect(addPar1.y, yAveOutAirFraPlu); connect(occDivFra.u2, sumDesZonPop); connect(pro.u2, VSumDesPopBreZon_flow); connect(unCorOutAirInk.u2, VSumDesAreBreZon_flow); connect(desOutAirInt.u2, uDesSysVenEff); connect(sysUncOutAir.u2, VSumUncOutAir_flow); connect(outAirFra.u2, VSumSysPriAir_flow); connect(sysVenEff.u2, uOutAirFra_max); connect(and1.y, yReqOutAir); connect(aveOutAirFra.u, unCorOutAirInk.y); end AHU;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.SumZone Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.SumZone

Output the sum, maximum and minimum from the zone level calculation

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.SumZone

Information

This sequence sums up the zone level minimum outdoor airflow setpoints, finds the maximum zone outdoor air fraction and the minimum zone ventilation efficiency. It collects zone level outputs and prepares inputs for specifying AHU level minimum outdoor air setpoint.

It requires following inputs from zone level calculation,

and following input from AHU level calculation,

The sequence gives following outputs for AHU level calculation:

Parameters

TypeNameDefaultDescription
IntegernumZonnumZon(min=2)Total number of zones that the system serves

Connectors

TypeNameDescription
input RealInputuDesZonPeaOcc[numZon]Design zone peak occupancy [1]
input RealInputVDesPopBreZon_flow[numZon]Population component breathing zone design outdoor airflow [m3/s]
input RealInputVDesAreBreZon_flow[numZon]Area component breathing zone design outdoor airflow [m3/s]
input RealInputyAveOutAirFraPluAverage system outdoor air flow fraction plus 1 [1]
input RealInputuDesPriOutAirFra[numZon]Design zone primary outdoor air fraction [1]
input RealInputVUncOutAir_flow[numZon]Uncorrected outdoor airflow rate [m3/s]
input RealInputuPriOutAirFra[numZon]Primary outdoor air fraction [1]
input RealInputVPriAir_flow[numZon]Primary airflow rate [m3/s]
output RealOutputySumDesZonPopSum of the design population of the zones in the group [1]
output RealOutputVSumDesPopBreZon_flowSum of the population component design breathing zone flow rate [m3/s]
output RealOutputVSumDesAreBreZon_flowSum of the area component design breathing zone flow rate [m3/s]
output RealOutputyDesSysVenEffDesign system ventilation efficiency, equals to the minimum of all zones ventilation efficiency [1]
output RealOutputVSumUncOutAir_flowSum of the required uncorrected outdoor airflow rate [m3/s]
output RealOutputuOutAirFra_maxMaximum zone outdoor air fraction, equals to the maximum of primary outdoor air fraction of all zones [1]
output RealOutputVSumSysPriAir_flowAHU level primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units [m3/s]

Modelica definition

block SumZone "Output the sum, maximum and minimum from the zone level calculation" parameter Integer numZon(min=2) "Total number of zones that the system serves"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uDesZonPeaOcc[numZon]( final min = fill(0, numZon), final unit = fill("1", numZon)) "Design zone peak occupancy"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VDesPopBreZon_flow[numZon]( final min = fill(0, numZon), final unit = fill("m3/s", numZon), final quantity=fill("VolumeFlowRate", numZon)) "Population component breathing zone design outdoor airflow"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VDesAreBreZon_flow[numZon]( final min = fill(0, numZon), final unit = fill("m3/s", numZon), final quantity=fill("VolumeFlowRate", numZon)) "Area component breathing zone design outdoor airflow"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yAveOutAirFraPlu( final min = 0, final unit = "1") "Average system outdoor air flow fraction plus 1"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uDesPriOutAirFra[numZon]( final min = fill(0, numZon), final max = fill(1, numZon), final unit = fill("1", numZon)) "Design zone primary outdoor air fraction"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VUncOutAir_flow[numZon]( final min = fill(0, numZon), final unit = fill("m3/s", numZon), final quantity=fill("VolumeFlowRate", numZon)) "Uncorrected outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uPriOutAirFra[numZon]( final min = fill(0, numZon), final max = fill(1, numZon), final unit = fill("1", numZon)) "Primary outdoor air fraction"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VPriAir_flow[numZon]( final min = fill(0, numZon), final unit = fill("m3/s", numZon), final quantity=fill("VolumeFlowRate", numZon)) "Primary airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySumDesZonPop( final min = 0, final unit = "1") "Sum of the design population of the zones in the group"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumDesPopBreZon_flow( final min = 0, final unit = "m3/s", final quantity="VolumeFlowRate") "Sum of the population component design breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumDesAreBreZon_flow( final min = 0, final unit = "m3/s", final quantity="VolumeFlowRate") "Sum of the area component design breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesSysVenEff( final min = 0, final unit = "1") "Design system ventilation efficiency, equals to the minimum of all zones ventilation efficiency"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumUncOutAir_flow( final min = 0, final unit = "m3/s", final quantity="VolumeFlowRate") "Sum of the required uncorrected outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput uOutAirFra_max( final min = 0, final max = 1, final unit = "1") "Maximum zone outdoor air fraction, equals to the maximum of primary outdoor air fraction of all zones"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumSysPriAir_flow( final min = 0, final unit = "m3/s", final quantity="VolumeFlowRate") "AHU level primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units"; protected Buildings.Controls.OBC.CDL.Continuous.MultiSum sysUncOutAir( final nin=numZon) "Uncorrected outdoor airflow"; Buildings.Controls.OBC.CDL.Continuous.MultiSum sysPriAirRate( final nin=numZon) "System primary airflow rate"; Buildings.Controls.OBC.CDL.Continuous.MultiSum sumDesZonPop( final nin=numZon) "Sum of the design zone population for all zones"; Buildings.Controls.OBC.CDL.Continuous.MultiSum sumDesBreZonPop( final nin=numZon) "Sum of the design breathing zone flow rate for population component"; Buildings.Controls.OBC.CDL.Continuous.MultiSum sumDesBreZonAre( final nin=numZon) "Sum of the design breathing zone flow rate for area component"; Buildings.Controls.OBC.CDL.Continuous.Add zonVenEff[numZon]( final k2=fill(-1,numZon)) "Zone ventilation efficiency"; Buildings.Controls.OBC.CDL.Continuous.MultiMin desSysVenEff( final nin=numZon) "Design system ventilation efficiency"; Buildings.Controls.OBC.CDL.Continuous.MultiMax maxPriOutAirFra( final nin=numZon) "Maximum zone outdoor air fraction"; Buildings.Controls.OBC.CDL.Routing.RealReplicator reaRep( final nout=numZon) "Replicate Real input signal"; equation connect(zonVenEff.y, desSysVenEff.u); connect(reaRep.y, zonVenEff.u1); connect(sumDesZonPop.y, ySumDesZonPop); connect(sumDesBreZonPop.y, VSumDesPopBreZon_flow); connect(sumDesBreZonAre.y, VSumDesAreBreZon_flow); connect(desSysVenEff.y, yDesSysVenEff); connect(sysUncOutAir.y, VSumUncOutAir_flow); connect(sysPriAirRate.y, VSumSysPriAir_flow); connect(maxPriOutAirFra.y, uOutAirFra_max); connect(yAveOutAirFraPlu, reaRep.u); connect(uDesZonPeaOcc, sumDesZonPop.u); connect(VDesPopBreZon_flow, sumDesBreZonPop.u); connect(VDesAreBreZon_flow, sumDesBreZonAre.u); connect(uDesPriOutAirFra, zonVenEff.u2); connect(VUncOutAir_flow, sysUncOutAir.u); connect(VPriAir_flow, sysPriAirRate.u); connect(uPriOutAirFra, maxPriOutAirFra.u); end SumZone;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.Zone Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.Zone

Output outdoor airflow related calculations at the zone level

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.Zone

Information

This sequence conducts calculations of the minimum outdoor airflow rate at the zone level. It gives outputs below.

  1. The population component of the breathing zone outdoor airflow, VDesPopBreZon_flow.
  2. The area component of the breathing zone outdoor airflow, VDesAreBreZon_flow.
  3. Design zone primary outdoor air fraction, yDesPriOutAirFra.
  4. Uncorrected outdoor airflow rate, VUncOutAir_flow. This flow rate is calculated based on: occupancy (if there is occupancy sensor) or design occupancy (if there is no occupancy sensor), and air distribution effectiveness (warm or cool air).
  5. Primary outdoor air fraction, yPriOutAirFra.
  6. Primary airflow rate, VPriAir_flow.

The calculation is done using the steps below.

  1. Compute the required breathing zone outdoor airflow using the following components.

    • The area component of the breathing zone outdoor airflow, VDesAreBreZon_flow.
    • The population component of the breathing zone outdoor airflow, VDesPopBreZon_flow.

    The number of occupant in the zone can be retrieved directly from occupancy sensor (nOcc) if the sensor exists, or using the default occupant density (occDen) and multiplying it with zone area (AFlo). The occupant density can be found from Table 6.2.2.1 in ASHRAE Standard 62.1-2013. For design purpose, use the design zone population (desZonPop) to determine the minimum requirement at the ventilation-design condition.

  2. Compute the zone air-distribution effectiveness. Table 6.2.2.2 in ASHRAE 62.1-2013 lists some typical values for setting the effectiveness. Depending on difference between zone space temperature TZon and discharge air temperature (after the reheat coil) TDis, Warm-air effectiveness zonDisEffHea or Cool-air effectiveness zonDisEffCoo should be applied.

  3. Compute the required zone outdoor airflow zonOutAirRate. If the zone is in any mode other than occupied mode (uReqOutAir=false) or if the zone has window switches and the window is open (uWin=true), set zonOutAirRate = 0. Otherwise, the required zone outdoor airflow zonOutAirRate shall be calculated as follows:

    • If the zone is populated (nOcc > 0), or if there is no occupancy sensor (have_occSen = false):
      • If the discharge air temperature at the terminal unit is less than or equal to the zone space temperature, set zonOutAirRate = (breZonAre+breZonPop)/disEffCoo.
      • If the discharge air temperature at the terminal unit is greater than zone space temperature, set zonOutAirRate = (breZonAre+breZonPop)/disEffHea.
    • If the zone has an occupancy sensor and is unpopulated (nOcc=0):
      • If the discharge air temperature at the terminal unit is less than or equal to the zone space temperature, set zonOutAirRate = breZonAre/disEffCoo.
      • If the discharge air temperature at the terminal unit is greater than zone space temperature, set zonOutAirRate = breZonAre/disEffHea.
  4. Compute the outdoor air fraction for the zone yPriOutAirFra as follows. Set the zone outdoor air fraction to

        yPriOutAirFra = zonOutAirRate/VPriAir_flow
    

    where, VPriAir_flow is the maximum between the measured discharge air flow rate from the zone VAV box VDis_flow and 0.1% of AHU level design uncorrected minimum outdoor airflow rate VUncOut_flow_nominal. For design purpose, the design zone outdoor air fraction yDesPriOutAirFra is

        yDesPriOutAirFra = desZonOutAirRate/minZonPriFlo
    

    where minZonPriFlo is the minimum expected zone primary flow rate and desZonOutAirRate is the required design zone outdoor airflow rate.

References

ANSI/ASHRAE Standard 62.1-2013, Ventilation for Acceptable Indoor Air Quality.

Stanke, D., 2010. Dynamic Reset for Multiple-Zone Systems. ASHRAE Journal, March 2010.

Parameters

TypeNameDefaultDescription
Booleanhave_occSentrueSet to true if zones have occupancy sensor
Booleanhave_winSentrueSet to true if zones have window status sensor
RealoccDen0.05Default number of person in unit area [1/m2]
RealzonDisEffHea0.8Zone air distribution effectiveness during heating [1]
RealzonDisEffCoo1.0Zone air distribution effectiveness during cooling [1]
Nominal condition
RealVOutPerAre_flow3e-4Outdoor air rate per unit area [m3/(s.m2)]
RealVOutPerPer_flow2.5e-3Outdoor air rate per person [m3/s]
RealAFloAFlo(unit="m2")Floor area of each zone [m2]
RealdesZonDisEff1.0Design zone air distribution effectiveness [1]
RealdesZonPopdesZonPop(final min=occDen*A...Design zone population during peak occupancy [1]
RealminZonPriFlominZonPriFlo(unit="m3/s")Minimum expected zone primary flow rate [m3/s]
Advanced
RealuLow-0.5If zone space temperature minus supply air temperature is less than uLow, then it should use heating supply air distribution effectiveness [K]
RealuHig0.5If zone space temperature minus supply air temperature is more than uHig, then it should use cooling supply air distribution effectiveness [K]

Connectors

TypeNameDescription
input IntegerInputnOccNumber of occupants
input BooleanInputuWinWindow status, true if open, false if closed
input BooleanInputuReqOutAirTrue if the AHU supply fan is on and the zone is in occupied mode
input RealInputTZonMeasured zone air temperature [K]
input RealInputTDisMeasured discharge air temperature [K]
input RealInputVDis_flowPrimary airflow rate to the ventilation zone from the air handler, including outdoor air and recirculated air [m3/s]
input RealInputVUncOut_flow_nominalAHU level design uncorrected minimum outdoor airflow rate [m3/s]
output RealOutputyDesZonPeaOccDesign zone peak occupancy [1]
output RealOutputVDesPopBreZon_flowPopulation component breathing zone design outdoor airflow [m3/s]
output RealOutputVDesAreBreZon_flowArea component breathing zone outdoor airflow [m3/s]
output RealOutputyDesPriOutAirFraDesign zone primary outdoor air fraction [1]
output RealOutputVUncOutAir_flowUncorrected outdoor airflow rate [m3/s]
output RealOutputyPriOutAirFraPrimary outdoor air fraction [1]
output RealOutputVPriAir_flowPrimary airflow rate [m3/s]

Modelica definition

block Zone "Output outdoor airflow related calculations at the zone level" parameter Real VOutPerAre_flow( final unit = "m3/(s.m2)")=3e-4 "Outdoor air rate per unit area"; parameter Real VOutPerPer_flow(unit="m3/s")=2.5e-3 "Outdoor air rate per person"; parameter Real AFlo(unit="m2") "Floor area of each zone"; parameter Boolean have_occSen=true "Set to true if zones have occupancy sensor"; parameter Boolean have_winSen=true "Set to true if zones have window status sensor"; parameter Real occDen(final unit = "1/m2") = 0.05 "Default number of person in unit area"; parameter Real zonDisEffHea(final unit = "1") = 0.8 "Zone air distribution effectiveness during heating"; parameter Real zonDisEffCoo(final unit = "1") = 1.0 "Zone air distribution effectiveness during cooling"; parameter Real desZonDisEff(final unit = "1") = 1.0 "Design zone air distribution effectiveness"; parameter Real desZonPop( final min=occDen*AFlo, final unit = "1") "Design zone population during peak occupancy"; parameter Real uLow( final unit="K", final displayUnit="K", final quantity="ThermodynamicTemperature") = -0.5 "If zone space temperature minus supply air temperature is less than uLow, then it should use heating supply air distribution effectiveness"; parameter Real uHig( final unit="K", final displayUnit="K", final quantity="ThermodynamicTemperature") = 0.5 "If zone space temperature minus supply air temperature is more than uHig, then it should use cooling supply air distribution effectiveness"; parameter Real minZonPriFlo(unit="m3/s") "Minimum expected zone primary flow rate"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nOcc if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin if have_winSen "Window status, true if open, false if closed"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uReqOutAir "True if the AHU supply fan is on and the zone is in occupied mode"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured zone air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured discharge air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VDis_flow( final unit = "m3/s", final quantity = "VolumeFlowRate") "Primary airflow rate to the ventilation zone from the air handler, including outdoor air and recirculated air"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VUncOut_flow_nominal( final min=0, final unit = "m3/s", final quantity = "VolumeFlowRate") "AHU level design uncorrected minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesZonPeaOcc( final min=0, final unit="1") "Design zone peak occupancy"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VDesPopBreZon_flow( final min=0, final unit = "m3/s", final quantity = "VolumeFlowRate") "Population component breathing zone design outdoor airflow"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VDesAreBreZon_flow( final min=0, final unit = "m3/s", final quantity = "VolumeFlowRate") "Area component breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesPriOutAirFra( final min=0, final unit="1") "Design zone primary outdoor air fraction"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VUncOutAir_flow( final min=0, final unit = "m3/s", final quantity = "VolumeFlowRate") "Uncorrected outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPriOutAirFra( final min=0, final unit="1") "Primary outdoor air fraction"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VPriAir_flow( final min=0, final unit = "m3/s", final quantity = "VolumeFlowRate") "Primary airflow rate"; protected Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea if have_occSen "Type converter"; Buildings.Controls.OBC.CDL.Continuous.Add breZon "Breathing zone airflow"; Buildings.Controls.OBC.CDL.Continuous.Gain gai( final k = VOutPerPer_flow) if have_occSen "Outdoor air per person"; Buildings.Controls.OBC.CDL.Logical.Switch swi "If there is occupancy sensor, then using the real time occupancy; otherwise, using the default occupancy"; Buildings.Controls.OBC.CDL.Logical.Switch swi1 "Switch between cooling or heating distribution effectiveness"; Buildings.Controls.OBC.CDL.Continuous.Division zonOutAirRate "Required zone outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Division priOutAirFra "Primary outdoor air fraction"; Buildings.Controls.OBC.CDL.Continuous.Add desBreZon "Breathing zone design airflow"; Buildings.Controls.OBC.CDL.Continuous.Division desZonOutAirRate "Required design zone outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Division desZonPriOutAirRate "Design zone primary outdoor air fraction"; Buildings.Controls.OBC.CDL.Continuous.Add add2( final k2=-1) "Zone space temperature minus supply air temperature"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( final uLow=uLow, final uHigh=uHig, final pre_y_start=true) "Check if cooling or heating air distribution effectiveness should be applied, with 1 degC deadband"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant occSen( final k=have_occSen) "Boolean constant to indicate if there is occupancy sensor"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desDisEff( final k = desZonDisEff) "Design zone air distribution effectiveness"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minZonFlo( final k = minZonPriFlo) "Minimum expected zone primary flow rate"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffHea( final k = zonDisEffHea) "Zone distribution effectiveness for heating"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffCoo( final k = zonDisEffCoo) "Zone distribution effectiveness fo cooling"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOutAir( final k=0) "Zero required outdoor airflow rate when window is open or when zone is not in occupied mode"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOcc( final k=0) if not have_occSen "Zero occupant when there is no occupancy sensor"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant cloWin( final k=false) if not have_winSen "Closed window status when there is no window sensor"; Buildings.Controls.OBC.CDL.Logical.Switch swi4 "If window is open, the required outdoor airflow rate should be zero"; Buildings.Controls.OBC.CDL.Logical.Switch swi5 "If supply fan is off or it is not in occupied mode, then outdoor airflow rate should be zero"; Buildings.Controls.OBC.CDL.Continuous.Max max "If supply fan is off, giving a small primary airflow rate to avoid division by zero"; Buildings.Controls.OBC.CDL.Continuous.Product breZonAre "Area component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Continuous.Product pro "Product of flow rate per person and floor area"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floPerAre( final k=VOutPerAre_flow) "Flow rate per unit area"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floAre( final k=AFlo) "Floor area"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floPerPer( final k=VOutPerPer_flow) "Flow rate per person"; Buildings.Controls.OBC.CDL.Continuous.Gain breZonPop( final k=occDen) "Default population component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Continuous.Gain gaiDivZer( final k=1E-3) "Gain, used to avoid division by zero if the flow rate is smaller than 0.1%"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desPeaOcc( final k=desZonPop) "Design zone population during peak occupancy"; Buildings.Controls.OBC.CDL.Continuous.Product desBreZonPer "Population component of the breathing zone design outdoor airflow"; equation connect(gai.y, swi.u1); connect(swi.y, breZon.u2); connect(disEffCoo.y, swi1.u1); connect(disEffHea.y, swi1.u3); connect(breZon.y, zonOutAirRate.u1); connect(swi1.y, zonOutAirRate.u2); connect(desDisEff.y, desZonOutAirRate.u2); connect(desBreZon.y, desZonOutAirRate.u1); connect(desZonOutAirRate.y, desZonPriOutAirRate.u1); connect(minZonFlo.y, desZonPriOutAirRate.u2); connect(swi.u2, occSen.y); connect(TDis, add2.u2); connect(TZon, add2.u1); connect(add2.y, hys.u); connect(hys.y, swi1.u2); connect(zerOcc.y, swi.u1); connect(intToRea.y, gai.u); connect(nOcc, intToRea.u); connect(desZonPriOutAirRate.y, yDesPriOutAirFra); connect(priOutAirFra.y, yPriOutAirFra); connect(zerOutAir.y, swi4.u1); connect(zonOutAirRate.y, swi4.u3); connect(swi5.y, VUncOutAir_flow); connect(swi5.y, priOutAirFra.u1); connect(uWin, swi4.u2); connect(cloWin.y, swi4.u2); connect(uReqOutAir, swi5.u2); connect(VDis_flow, max.u1); connect(max.y, priOutAirFra.u2); connect(max.y, VPriAir_flow); connect(floAre.y, breZonAre.u1); connect(floPerAre.y, breZonAre.u2); connect(breZonAre.y, desBreZon.u2); connect(breZonAre.y, breZon.u1); connect(floPerPer.y, pro.u1); connect(floAre.y, pro.u2); connect(breZonPop.y, swi.u3); connect(pro.y, breZonPop.u); connect(VUncOut_flow_nominal, gaiDivZer.u); connect(gaiDivZer.y, max.u2); connect(floPerPer.y, desBreZonPer.u2); connect(desPeaOcc.y, desBreZonPer.u1); connect(desBreZonPer.y, desBreZon.u1); connect(desPeaOcc.y, yDesZonPeaOcc); connect(desBreZonPer.y, VDesPopBreZon_flow); connect(breZonAre.y, VDesAreBreZon_flow); connect(zerOutAir.y, swi5.u3); connect(swi4.y, swi5.u1); end Zone;