Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1

Package of sequences specifying outdoor airflow setpoint by complying with ASHRAE 62.1

Information

This package contains sequences to set the minimum outdoor airflow setpoint for compliance with the ventilation rate procedure of ASHRAE 62.1. It is implemented according to Section 5.16.3.1 of ASHRAE Guideline G36, May 2020.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.AHU AHU Outdoor airflow related calculations at the AHU level
Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone SumZone Calculate the sum of zone level setpoints
Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.AHU Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.AHU

Outdoor airflow related calculations at the AHU level

Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.AHU

Information

This sequence outputs AHU level uncorrected minimum outdoor airflow rate VUncOutAir_flow and effective minimum outdoor airflow rate VEffOutAir_flow when complying with ASHRAE Standard 62.1 ventilation requirements. It is implemented according to Section 5.16.3.1 of ASHRAE Guideline G36, May 2020.

It requires following inputs which are sum or maximum of the outputs from the zone level calculation. See Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone for these inputs.

  1. Sum of the adjusted population component breathing zone flow rate for all zones that are in all zone groups in occupied mode, VSumAdjPopBreZon_flow.
  2. Sum of the adjusted area component breathing zone flow rate for all zones that are in all zone groups in occupied mode, VSumAdjAreBreZon_flow.
  3. Sum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode,VSumZonPri_flow.
  4. Maximum zone outdoor air fraction for all zones in all zone groups that are in occupied mode, uOutAirFra_max.

The calculation is done using the steps below.

  1. See Section 3.1.4.2.a of Guideline 36 for setpoints VUncDesOutAir_flow and VDesTotOutAir_flow.
  2. The uncorrected outdoor airflow rate setpoint VUncOutAir_flow is recalculated continuously based on the adjusted population and area component breathing zone flow rate of the zones being served determined in accordance with Section 5.2.1.3. See Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.ASHRAE62_1.Setpoints.
        VUncOutAir_flow = min(VUncDesOutAir_flow, (VSumAdjPopBreZon_flow + VSumAdjAreBreZon_flow))
    
  3. Calculate the current system ventilation efficiency as
        sysVenEff = 1 + (VUncOutAir_flow/VSumZonPri_flow) - uOutAirFra_max
    
  4. Calculate the effective minimum outdoor air setpoint VEffOutAir_flow as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor airflow rate VDesTotOutAir_flow:
        VEffOutAir_flow = min(VUncOutAir_flow/sysVenEff, VDesTotOutAir_flow)
    

Parameters

TypeNameDefaultDescription
Economizer design
OutdoorAirSectionminOADes Type of outdoor air section
Nominal condition
RealVUncDesOutAir_flow Uncorrected design outdoor airflow rate, including diversity where applicable. It can be determined using the 62MZCalc spreadsheet from ASHRAE 62.1 User's Manual [m3/s]
RealVDesTotOutAir_flow Design total outdoor airflow rate. It can be determined using the 62MZCalc spreadsheet from ASHRAE 62.1 User's Manual [m3/s]

Connectors

TypeNameDescription
input RealInputVSumAdjPopBreZon_flowSum of the adjusted population component breathing zone flow rate [m3/s]
input RealInputVSumAdjAreBreZon_flowSum of the adjusted area component breathing zone flow rate [m3/s]
input RealInputVSumZonPri_flowSum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode [m3/s]
input RealInputuOutAirFra_maxMaximum zone outdoor air fraction [1]
input RealInputVAirOut_flowMeasured outdoor air volumetric flow rate [m3/s]
output RealOutputVUncOutAir_flowUncorrected minimum outdoor airflow rate [m3/s]
output RealOutputVEffAirOut_flow_minEffective minimum outdoor airflow setpoint [m3/s]
output RealOutputeffOutAir_normalizedEffective minimum outdoor airflow setpoint, normalized by the design total outdoor airflow rate [1]
output RealOutputoutAir_normalizedNormalized outdoor airflow rate [1]

Modelica definition

block AHU "Outdoor airflow related calculations at the AHU level" parameter Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection minOADes "Type of outdoor air section"; parameter Real VUncDesOutAir_flow(unit="m3/s") "Uncorrected design outdoor airflow rate, including diversity where applicable. It can be determined using the 62MZCalc spreadsheet from ASHRAE 62.1 User's Manual"; parameter Real VDesTotOutAir_flow(unit="m3/s") "Design total outdoor airflow rate. It can be determined using the 62MZCalc spreadsheet from ASHRAE 62.1 User's Manual"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumAdjPopBreZon_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the adjusted population component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumAdjAreBreZon_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the adjusted area component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VSumZonPri_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutAirFra_max( final min=0, final unit="1") "Maximum zone outdoor air fraction"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VAirOut_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") if (minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow or minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper) "Measured outdoor air volumetric flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VUncOutAir_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Uncorrected minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VEffAirOut_flow_min( 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 the design total outdoor airflow rate "; Buildings.Controls.OBC.CDL.Interfaces.RealOutput outAir_normalized( final unit="1") if (minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow or minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper) "Normalized outdoor airflow rate"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant uncDesOutAir( final k=VUncDesOutAir_flow) "Uncorrected design outdoor airflow rate, including diversity where applicable"; Buildings.Controls.OBC.CDL.Reals.Add add2 "Sum of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Reals.Min min1 "Uncorrected minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Reals.Divide div1 "First input divided by second input"; Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=1) "Add parameter"; Buildings.Controls.OBC.CDL.Reals.Subtract sysVenEff "Current system ventilation efficiency"; Buildings.Controls.OBC.CDL.Reals.Max max1 "Avoid devide by zero"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant desOutAir( final k=VDesTotOutAir_flow) "Design total outdoor airflow rate "; Buildings.Controls.OBC.CDL.Reals.Divide div2 "Division"; Buildings.Controls.OBC.CDL.Reals.Min min2 "Uncorrected minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter 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.Reals.Divide norVOutMin "Normalization for minimum outdoor air flow rate"; Buildings.Controls.OBC.CDL.Reals.Divide norVOut if (minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow or minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper) "Normalization for outdoor air flow rate"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant neaZer( final k=1E-4) "Near zero value"; Buildings.Controls.OBC.CDL.Reals.Max max2 "Avoid devide by zero"; equation connect(VSumAdjPopBreZon_flow, add2.u1); connect(VSumAdjAreBreZon_flow, add2.u2); connect(add2.y, min1.u1); connect(uncDesOutAir.y, min1.u2); connect(min1.y, VUncOutAir_flow); connect(min1.y, div1.u1); connect(div1.y, addPar.u); connect(uOutAirFra_max, sysVenEff.u2); connect(addPar.y, sysVenEff.u1); connect(uncDesOutAir.y, gaiDivZer.u); connect(gaiDivZer.y, max1.u1); connect(VSumZonPri_flow, max1.u2); connect(max1.y, div1.u2); connect(min1.y, div2.u1); connect(desOutAir.y, min2.u1); connect(div2.y, min2.u2); connect(min2.y, VEffAirOut_flow_min); connect(min2.y, norVOutMin.u1); connect(desOutAir.y, norVOutMin.u2); connect(norVOutMin.y, effOutAir_normalized); connect(norVOut.y, outAir_normalized); connect(VAirOut_flow, norVOut.u1); connect(desOutAir.y, norVOut.u2); connect(sysVenEff.y, max2.u1); connect(neaZer.y, max2.u2); connect(max2.y, div2.u2); end AHU;

Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone

Calculate the sum of zone level setpoints

Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone

Information

This sequence sums up zone level minimum outdoor airflow setpoints and find the maximum outdoor air fraction. It is implemented according to Section 5.16.3.1 of ASHRAE Guideline G36, May 2020.

It calculates following values:

  1. Sum of the adjusted population component breathing zone flow rate VAdjPopBreZon_flow for all zones that are in all zone groups in occupied mode, VSumAdjPopBreZon_flow.
  2. Sum of the adjusted area component breathing zone flow rate VAdjAreBreZon_flow for all zones that are in all zone groups in occupied mode, VSumAdjAreBreZon_flow.
  3. Sum of the zone primary airflow rates VZonPri_flow for all zones in all zone groups that are in occupied mode,VSumZonPri_flow.
  4. Maximum zone outdoor air fraction for all zones in all zone groups that are in occupied mode, uOutAirFra_max.

See Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.ASHRAE62_1.Setpoints for the detailed description of the inputs VAdjPopBreZon_flow, VAdjAreBreZon_flow and VMinOA_flow.

Parameters

TypeNameDefaultDescription
IntegernZon Total number of serving zones
IntegernGro Total number of groups
IntegerzonGroMat[nGro, nZon] Zone matrix with zone group as row index and zone as column index. It uses index 1 to flag which zone is in which group
IntegerzonGroMatTra[nZon, nGro] Transpose of the zone matrix

Connectors

TypeNameDescription
input IntegerInputuOpeMod[nGro]Groups operation mode
input RealInputVAdjPopBreZon_flow[nZon]Adjusted population component breathing zone flow rate [m3/s]
input RealInputVAdjAreBreZon_flow[nZon]Adjusted area component breathing zone flow rate [m3/s]
input RealInputVZonPri_flow[nZon]Measured zone primary airflow rates [m3/s]
input RealInputVMinOA_flow[nZon]Minimum outdoor airflow setpoint [m3/s]
output RealOutputVSumAdjPopBreZon_flowSum of the adjusted population component breathing zone flow rate [m3/s]
output RealOutputVSumAdjAreBreZon_flowSum of the adjusted area component breathing zone flow rate [m3/s]
output RealOutputVSumZonPri_flowSum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode [m3/s]
output RealOutputuOutAirFra_maxMaximum zone outdoor air fraction [1]

Modelica definition

block SumZone "Calculate the sum of zone level setpoints" parameter Integer nZon "Total number of serving zones"; parameter Integer nGro "Total number of groups"; parameter Integer zonGroMat[nGro, nZon] "Zone matrix with zone group as row index and zone as column index. It uses index 1 to flag which zone is in which group"; parameter Integer zonGroMatTra[nZon, nGro] "Transpose of the zone matrix"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod[nGro] "Groups operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VAdjPopBreZon_flow[nZon]( final min=fill(0,nZon), final unit=fill("m3/s",nZon), final quantity=fill("VolumeFlowRate", nZon)) "Adjusted population component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VAdjAreBreZon_flow[nZon]( final min=fill(0,nZon), final unit=fill("m3/s",nZon), final quantity=fill("VolumeFlowRate", nZon)) "Adjusted area component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VZonPri_flow[nZon]( final min=fill(0,nZon), final unit=fill("m3/s",nZon), final quantity=fill("VolumeFlowRate", nZon)) "Measured zone primary airflow rates"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VMinOA_flow[nZon]( final min=fill(0,nZon), final unit=fill("m3/s",nZon), final quantity=fill("VolumeFlowRate", nZon)) "Minimum outdoor airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumAdjPopBreZon_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the adjusted population component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumAdjAreBreZon_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the adjusted area component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSumZonPri_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Sum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput uOutAirFra_max( final min=0, final unit="1") "Maximum zone outdoor air fraction"; Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo( final K=zonGroMat) "Vector of total zone flow of each group"; Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo1( final K=zonGroMat) "Vector of total zone flow of each group"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nGro] "Convert boolean to real"; Buildings.Controls.OBC.CDL.Reals.Multiply mul[nGro] "Find the total flow of zone group"; Buildings.Controls.OBC.CDL.Reals.Multiply mul1[nGro] "Find the total flow of zone group"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( final nin=nGro) "Sum of the adjusted population component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum1( final nin=nGro) "Sum of the adjusted area component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo2( final K=zonGroMat) "Vector of total zone flow of each group"; Buildings.Controls.OBC.CDL.Reals.Multiply mul2[nGro] "Find the total flow of zone group"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum2( final nin=nGro) "Sum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode"; Buildings.Controls.OBC.CDL.Reals.Divide div1[nZon] "Zone outdoor air fraction"; Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo3( final K=zonGroMatTra) "Vector of zones in occupied mode"; Buildings.Controls.OBC.CDL.Reals.Multiply mul3[nZon] "Vector of zone outdoor air fraction"; Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax( final nin=nZon) "Maximum zone outdoor air fraction"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod[nGro]( final k=fill(Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied,nGro)) "Occupied mode index"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nGro] "Check if operation mode is occupied"; Buildings.Controls.OBC.CDL.Reals.Max max2[nZon] "Avoid devide by zero"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant neaZer[nZon]( final k=fill(1E-4, nZon)) "Near zero value"; Buildings.Controls.OBC.CDL.Reals.Min min1[nZon] "Use smaller value"; equation connect(uOpeMod, intEqu1.u1); connect(occMod.y, intEqu1.u2); connect(VAdjPopBreZon_flow, groFlo.u); connect(VAdjAreBreZon_flow, groFlo1.u); connect(intEqu1.y, booToRea.u); connect(groFlo.y, mul.u2); connect(booToRea.y, mul.u1); connect(booToRea.y, mul1.u1); connect(groFlo1.y, mul1.u2); connect(mul.y, mulSum.u); connect(mul1.y, mulSum1.u); connect(mulSum1.y, VSumAdjAreBreZon_flow); connect(mulSum.y, VSumAdjPopBreZon_flow); connect(VZonPri_flow, groFlo2.u); connect(groFlo2.y, mul2.u2); connect(booToRea.y, mul2.u1); connect(mul2.y, mulSum2.u); connect(mulSum2.y, VSumZonPri_flow); connect(booToRea.y, groFlo3.u); connect(div1.y, mul3.u2); connect(groFlo3.y, mul3.u1); connect(mul3.y, mulMax.u); connect(mulMax.y, uOutAirFra_max); connect(neaZer.y, max2.u2); connect(VZonPri_flow, max2.u1); connect(max2.y, div1.u2); connect(min1.y, div1.u1); connect(VMinOA_flow, min1.u2); connect(VZonPri_flow, min1.u1); end SumZone;