Skip to content

Commit

Permalink
Merge pull request #6103 from NREL/ProportionalDCVEnhancements
Browse files Browse the repository at this point in the history
Enhance Proportional Demand Control Ventilation (DCV)
  • Loading branch information
Myoldmopar authored Jul 31, 2017
2 parents c4b6da1 + 2e62509 commit 13dbf43
Show file tree
Hide file tree
Showing 21 changed files with 3,234 additions and 25 deletions.
1,144 changes: 1,144 additions & 0 deletions design/FY2017/NFP-ProportionalDCVEnhancements.md

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ \subsection{Indoor Air Quality Procedure}\label{indoor-air-quality-procedure}

\subsection{Proportional Control}\label{proportional-control}

The control has two choices: ProportionalControlBasedonOccupancySchedule and ProportionalControlBasedonDesignOccupancy. The difference is occupancy level. The former uses real time occupancy, while the latter uses design occupancy level. Like Ventilation Rate Procedure and the Indoor Air Quality Procedure, the following three objects must be included in the input data file in order to model CO\(_{2}\)-based DCV with Proportional Control:
The control has three choices: ProportionalControlBasedonOccupancySchedule, ProportionalControlBasedonDesignOccupancy, and ProportionalControlBasedOnDesignOARate. The difference is occupancy level in the first two choices. The former uses real time occupancy, while the latter uses design occupancy level. The third choice is used to calculate the outdoor airflow rate based on design outdoor air flow rate, specified in the DesignSpecification:OutdoorAir object. Like Ventilation Rate Procedure and the Indoor Air Quality Procedure, the following three objects must be included in the input data file in order to model CO\(_{2}\)-based DCV with Proportional Control:

\begin{itemize}
\item \textbf{AirLoopHVAC:OutdoorAirSystem} to simulate the mixed air box of the air loop
Expand All @@ -290,18 +290,31 @@ \subsection{Proportional Control}\label{proportional-control}
{V_{ot - design,i}} = \frac{{\left( {{R_{p,i}}.{P_{z,i}} \times {SchedFrac_i}} \right) + ({R_{a,i}}.{A_{z,i}} \times {SchedFrac_i})}}{{{E_i}}}
\end{equation}

if ProportionalControlBasedOnDesignOARate is specified, the required intake flow rate will be revised as:

\begin{equation} {V_{ot - design,i}} = \frac{Design Outdoor Air Flow Rate_i} {E_i} \end{equation}

The Design Outdoor Air Flow Rate is determined in the DesignSpecification:OutdoorAir object.

2)~~~The required intake flow of outdoor air when the zone is unoccupied i.e.~ \emph{P\(_{z,i}\)} = 0

\begin{equation}
{V_{ot - min,i}} = \frac{{({R_{a,i}}.{A_{z,i}} \times {SchedFrac_i})}}{{{E_i}}}
\end{equation}

if ProportionalControlBasedOnDesignOARate is specified, the required intake flow rate will be revised as:

\begin{equation} {V_{ot - min,i}} = \frac{ {Design Outdoor Air Flow Rate_i} \times {SchedPropMin_i} } {E_i} \end{equation}


3)~~~The target indoor CO\(_{2}\) concentration at \({V_{ot - design,i}}\)

\begin{equation}
{C_{s - design,i}} = {C_o} + \frac{N}{{\left( {{V_{ot - design,i}}/{P_{z,i}}} \right)}}
\end{equation}

When the field of Maximum Carbon Dioxide Concentration Schedule Name is entered, the schedule value is used for {C_{s - design,i}} instead of the calculated value.

4)~~~The target indoor CO\(_{2}\) concentration at \({V_{ot - min}}\) ~is either a user input in the object ZoneControl:ContaminantController or equal to the outdoor CO\(_{2}\) concentration. The default is outdoor CO\(_{2}\) concentration.

\begin{equation}
Expand All @@ -324,6 +337,8 @@ \subsection{Proportional Control}\label{proportional-control}

\({SchedFrac_i}\) ~ = the Outdoor Air Schedule value for the zone, if specified in the corresponding DesignSpecification:OutdoorAir object (defaults to 1.0)

\({SchedPropMin_i}\) ~ = the Proportional Control Minimum Outdoor Air Flow Rate Schedule value for the zone, if specified in the corresponding DesignSpecification:OutdoorAir object (defaults to 1.0)

When ProportionalControlBasedonDesignOccupancy is specified, number of people = design occupancy * current schedule value. When ProportionalControlBasedonDesignOccupancy is specified, number of people = design occupancy.

\({A_{z,i}}\) ~ = Zone floor area, m\(^{2}\)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ \subsubsection{Inputs}\label{inputs-2-007}

\paragraph{Field: System Outdoor Air Method}\label{field-system-outdoor-air-method}

The method used to calculate the system minimum outdoor air flow. Several choices are allowed: \textbf{ZoneSum}, \textbf{VentilationRateProcedure,} \textbf{IndoorAirQualityProcedure, ProportionalControlBasedonOccupancySchedule,} \textbf{ProportionalControlBasedonDesignOccupancy,} and \textbf{IndoorAirQualityProcedureGenericContaminant}. ZoneSum sums the outdoor air flows across all zones served by the system. VentilationRateProcedure (VRP) uses the multi-zone equations defined in 62.1-2007 to calculate the system outdoor air flow. VRP considers zone air distribution effectiveness and zone diversification of outdoor air fractions. IndoorAirQualityProcedure (IAQP) is the other procedure defined in ASHRAE Standard 62.1-2007 for calculate the amount of outdoor air necessary to maintain the levels of indoor air carbon dioxide at or below the setpoint defined in the ZoneControl:ContaminantController object. Appendix A of the ASHRAE 62.1-2010 user's manual discusses another method for implementing CO\(_{2}\)-based DCV in a single zone system. This method (Proportional Control) calculates the required outdoor air flow rate which varies in proportion to the percentage of the CO\(_{2}\) signal range and has two choices to calculate occupancy-based outdoor air rate. The ProportionalControlBasedonOccupancySchedule choice uses the real occupancy at the current time step to calculate outdoor air rate, while the ProportionalControlBasedonDesignOccupancy uses the design occupancy level to calculate outdoor air rate. The former choice is a good approach to estimate outdoor air rate. However, for practical applications, the zone controller usually does not have the real time occupancy information, and the design occupancy level is assumed. The latter choice is used in the design stage. The IndoorAirQualityProcedure-GenericContaminant method calculates the amount of outdoor air necessary to maintain the levels of indoor air generic contaminant at or below the setpoint defined in the ZoneControl:ContaminantController object.
The method used to calculate the system minimum outdoor air flow. Several choices are allowed: \textbf{ZoneSum}, \textbf{VentilationRateProcedure,} \textbf{IndoorAirQualityProcedure, ProportionalControlBasedonOccupancySchedule,} \textbf{ProportionalControlBasedonDesignOccupancy,} \textbf{ProportionalControlBasedOnDesignOARate,} and \textbf{IndoorAirQualityProcedureGenericContaminant}. ZoneSum sums the outdoor air flows across all zones served by the system. VentilationRateProcedure (VRP) uses the multi-zone equations defined in 62.1-2007 to calculate the system outdoor air flow. VRP considers zone air distribution effectiveness and zone diversification of outdoor air fractions. IndoorAirQualityProcedure (IAQP) is the other procedure defined in ASHRAE Standard 62.1-2007 for calculate the amount of outdoor air necessary to maintain the levels of indoor air carbon dioxide at or below the setpoint defined in the ZoneControl:ContaminantController object. Appendix A of the ASHRAE 62.1-2010 user's manual discusses another method for implementing CO\(_{2}\)-based DCV in a single zone system. This method (Proportional Control) calculates the required outdoor air flow rate which varies in proportion to the percentage of the CO\(_{2}\) signal range and has two choices to calculate occupancy-based outdoor air rate. The ProportionalControlBasedonOccupancySchedule choice uses the real occupancy at the current time step to calculate outdoor air rate, while the ProportionalControlBasedonDesignOccupancy uses the design occupancy level to calculate outdoor air rate. The former choice is a good approach to estimate outdoor air rate. However, for practical applications, the zone controller usually does not have the real time occupancy information, and the design occupancy level is assumed. The latter choice is used in the design stage. The ProportionalControlBasedOnDesignOARate uses design outdoor air flow rate to calculate demand outdoor air flow rate. The IndoorAirQualityProcedure-GenericContaminant method calculates the amount of outdoor air necessary to maintain the levels of indoor air generic contaminant at or below the setpoint defined in the ZoneControl:ContaminantController object.

Note: When System Outdoor Air Method = IndoorAirQualityProcedure or IndoorAirQualityProcedureGenericContaminant is specified, only the Zone \textless{}x\textgreater{} Name fields are used. The other field inputs described below are not used.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -893,6 +893,10 @@ \subsubsection{Inputs}\label{inputs-012}

If this DesignSpecification:OutdoorAir object is referenced by a Controller:MechanicalVentilation object (either directly or indirectly through Sizing:Zone), the schedule will be applied to all types of outdoor air calculations for the corresponding zone, regardless of the System Outdoor Air Method selected. If the schedule value is zero, then the zone will be completely removed from the system outdoor air calcaulations.

\paragraph{Field: Proportional Control Minimum Outdoor Air Flow Rate Schedule Name }\label{field-proportional-control-minimum-outdoor-air-flow-rate-schedule-name}

This field is the name of schedule that defines how minimum outdoor air requirements change over time. The field is optional. If left blank, the schedule defaults to 1.0. If used when the field System Outdoor Air Method = ProportionalControlBasedOnDesignOARate in Controller:MechanicalVentilation, then the schedule values are multiplied by the outdoor air flow rate.

An IDF example:

\begin{lstlisting}
Expand All @@ -915,6 +919,7 @@ \subsubsection{Inputs}\label{inputs-012}
Until: 24:00, 1.0, !- Field 4
For: AllOtherDays, !- Field 5
Until: 24:00, 0.5; !- Field 7

\end{lstlisting}

\subsection{DesignSpecification:ZoneAirDistribution}\label{designspecificationzoneairdistribution}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1047,7 +1047,7 @@ \subsection{ZoneControl:ContaminantController}\label{zonecontrolcontaminantcontr
\item
To control a zone to a specified indoor level of contaminants. When this zone is served by an AirLoopHVAC, the other zones served by the same AirLoopHVAC will have the same specified indoor level, if no objects in the other zones served by the same AirLoop are specified. Currently, the available contaminant controls are carbon dioxide and generic contaminant controls. The specified carbon dioxide setpoint is used to calculate the required outdoor airflow rate through the HVAC system to reach the setpoint. The AirLoopHVAC system outdoor flow rate is realized by the Controller:MechanicalVentilation object with System Outdoor Air Method = IndoorAirQualityProcedure.The specified generic contaminant setpoint is used to calculate the required outdoor airflow rate through the HVAC system to reach the setpoint. The AirLoopHVAC system outdoor flow rate is realized by the Controller:MechanicalVentilation object with System Outdoor Air Method = IndoorAirQualityProcedure-GenericContaminant.
\item
To specify minimum CO2 concentration schedule name for a zone. The AirLoopHVAC system outdoor flow rate is realized by the Controller:MechanicalVentilation object with System Outdoor Air Method = ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy. Carbon Dioxide Control Availability Schedule Name determines the availability of ProportionalControl .
To specify minimum or maximum CO2 concentration schedule name for a zone. The AirLoopHVAC system outdoor flow rate is realized by the Controller:MechanicalVentilation object with System Outdoor Air Method = ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy or ProportionalControlBasedOnDesignOARate. Carbon Dioxide Control Availability Schedule Name determines the availability of ProportionalControl .
\end{enumerate}

For the first purpose above, when multiple zones are served by an AirLoop, those zones that do not have a contaminant controller object specified in the input data file are automatically assigned a carbon dioxide setpoint. Zone objects entered in the input data file are internally assigned an index number from 1 to n (first defined Zone object = 1, next Zone object defined in the input file = 2, etc.). For zones served by an AirLoop that do not have a contaminant controller specified, the zone s carbon dioxide setpoint will be the same as the zone with the next highest zone index number that has a contaminant controller specified. If a zone with a higher index number and contaminant controller specified does not exist, then the zone with the next lowest zone index number that has a contaminant controller specified will be used. For example, assume an AirLoop serves zones 1 through 5, but one ZoneControl:ContaminantController object is specified for zone 2, a second ZoneControl:ContaminantController object is specified for zone 4, and no ZoneControl:ContaminantController objects are specified for zones 1, 3 and 5. In this case, zone 1 will be assigned the carbon dioxide setpoint schedule that was specified for zone 2, and zones 3 and 5 will be assigned the carbon dioxide setpoint schedule that was specified for zone 4.
Expand All @@ -1072,7 +1072,11 @@ \subsubsection{Inputs}\label{inputs-14-017}

\paragraph{Field:Minimum Carbon Dioxide Concentration Schedule Name}\label{fieldminimum-carbon-dioxide-concentration-schedule-name}

This field contains the name of a schedule that contains the minimum zone carbon dioxide concentration setpoint as a function of time. The units for carbon dioxide setpoint are ppm. This field is used when the field System Outdoor Air Method = ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy in the Controller:MechanicalVentilation object.
This field contains the name of a schedule that contains the minimum zone carbon dioxide concentration setpoint as a function of time. The units for carbon dioxide setpoint are ppm. This field is used when the field System Outdoor Air Method = ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy, or ProportionalControlBasedOnDesignOARate in the Controller:MechanicalVentilation object.

\paragraph{Field:Maximum Carbon Dioxide Concentration Schedule Name}\label{fieldmaximum-carbon-dioxide-concentration-schedule-name}

This field contains the name of a schedule that contains the maximum zone carbon dioxide concentration as a function of time and is used to calculate design CO2 concentration level in the proportional ventilation control. The units for carbon dioxide setpoint are ppm. This field is used when the field System Outdoor Air Method = ProportionalControlBasedonOccupancySchedule, or ProportionalControlBasedOnDesignOccupancy, or ProportionalControlBasedOnDesignOARate in the Controller:MechanicalVentilation object.

\paragraph{Field: Generic Contaminant Control Availability Schedule Name}\label{field-generic-contaminant-control-availability-schedule-name}

Expand All @@ -1092,6 +1096,7 @@ \subsubsection{Inputs}\label{inputs-14-017}
CO2AvailSchedule, !- Carbon Dioxide Control Availability Schedule Name
CO2SetpointSchedule, !- Carbon Dioxide Setpoint Schedule Name
, !- Minimum Carbon Dioxide Concentration Schedule Name
, !- Maximum Carbon Dioxide Concentration Schedule Name
GCAvailSchedule, !- Generic Contaminant Control Availability Schedule Name
GCSetpointSchedule; !- Generic Contaminant Setpoint Schedule Name
\end{lstlisting}
Expand Down
24 changes: 19 additions & 5 deletions idd/Energy+.idd.in
Original file line number Diff line number Diff line change
Expand Up @@ -31757,7 +31757,7 @@ DesignSpecification:OutdoorAir,
\default 0.0
\minimum 0
\note This input is only used if the field Outdoor Air Method is AirChanges/Hour, Sum, or Maximum
A3; \field Outdoor Air Schedule Name
A3, \field Outdoor Air Schedule Name
\type object-list
\object-list ScheduleNames
\note Schedule values are multiplied by the Outdoor Air Flow rate calculated using
Expand All @@ -31767,6 +31767,11 @@ DesignSpecification:OutdoorAir,
\note AirTerminal:SingleDuct:VAV:NoReheat, AirTerminal:SingleDuct:VAV:Reheat, AirTerminal:DualDuct:VAV:OutdoorAir,
\note ZoneHVAC:FourPipeFanCoil, and ZoneHVAC:IdealLoadsAirSystem.
\note This schedule will also be applied by Controller:MechanicalVentilation for all System Outdoor Air Methods.
A4; \field Proportional Control Minimum Outdoor Air Flow Rate Schedule Name
\type object-list
\object-list ScheduleNames
\note This input is only used to calculate the minimum outdoor air flow rate when the field
\note System Outdoor Air Method = ProportionalControlBasedOnDesignOARate in Controller:MechanicalVentilation.

DesignSpecification:ZoneAirDistribution,
\min-fields 1
Expand Down Expand Up @@ -33029,15 +33034,23 @@ ZoneControl:ContaminantController,
\note Schedule values should be carbon dioxide concentration in parts per
\note million (ppm)
\note This field is used when the field System Outdoor Air Method =
\note ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy
\note in Controller:MechanicalVentilation
A6 , \field Generic Contaminant Control Availability Schedule Name
\note ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy,
\note or ProportionalControlBasedOnDesignOARate in Controller:MechanicalVentilation
A6 , \field Maximum Carbon Dioxide Concentration Schedule Name
\type object-list
\object-list ScheduleNames
\note Schedule values should be carbon dioxide concentration in parts per
\note million (ppm)
\note This field is used when the field System Outdoor Air Method =
\note ProportionalControlBasedonOccupancySchedule or ProportionalControlBasedOnDesignOccupancy
\note or ProportionalControlBasedOnDesignOARate.
A7 , \field Generic Contaminant Control Availability Schedule Name
\note Availability schedule name for generic contaminant controller. Schedule value > 0 means
\note the generic contaminant controller is enabled. If this field is blank, then generic
\note contaminant controller is always enabled.
\type object-list
\object-list ScheduleNames
A7 ; \field Generic Contaminant Setpoint Schedule Name
A8 ; \field Generic Contaminant Setpoint Schedule Name
\type object-list
\object-list ScheduleNames
\note Schedule values should be generic contaminant concentration in parts per
Expand Down Expand Up @@ -57677,6 +57690,7 @@ Controller:MechanicalVentilation,
\key ProportionalControlBasedonOccupancySchedule
\key IndoorAirQualityProcedureGenericContaminant
\key IndoorAirQualityProcedureCombined
\key ProportionalControlBasedOnDesignOARate
\default VentilationRateProcedure
N1, \field Zone Maximum Outdoor Air Fraction
\type real
Expand Down
3 changes: 3 additions & 0 deletions src/EnergyPlus/DataContaminantBalance.hh
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,8 @@ namespace DataContaminantBalance {
Array1D_int ControlZoneNum; // Controlled zone number
std::string ZoneMinCO2SchedName; // Name of the schedule which determines minimum CO2 concentration
int ZoneMinCO2SchedIndex; // Index for this schedule
std::string ZoneMaxCO2SchedName; // Name of the schedule which determines maximum CO2 concentration
int ZoneMaxCO2SchedIndex; // Index for this schedule
int ZoneContamControllerSchedIndex; // Index for this schedule
std::string GCAvaiSchedule; // Availability Schedule name for generic contamiant
int GCAvaiSchedPtr; // Pointer to the correct generic contaminant availability schedule
Expand All @@ -206,6 +208,7 @@ namespace DataContaminantBalance {
EMSOverrideCO2SetPointValue( 0.0 ),
NumOfZones( 0 ),
ZoneMinCO2SchedIndex( 0 ),
ZoneMaxCO2SchedIndex( 0 ),
ZoneContamControllerSchedIndex( 0 ),
GCAvaiSchedPtr( 0 ),
GCSPSchedIndex( 0 ),
Expand Down
Loading

7 comments on commit 13dbf43

@nrel-bot-3
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-MacOS-10.9-clang: OK (1968 of 1968 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-14.04-gcc-4.8: OK (1988 of 1988 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-14.04-cppcheck-1.61: OK (0 of 0 tests passed, 0 test warnings)

Build Badge

@nrel-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - i386-Windows-7-VisualStudio-14: OK (1971 of 1971 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-14.04-gcc-4.8-UnitTestsCoverage-Debug: OK (1366 of 1366 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

@nrel-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - Win64-Windows-7-VisualStudio-14: OK (1971 of 1971 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-14.04-gcc-4.8-IntegrationCoverage-Debug: OK (1971 of 1971 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

Please # to comment.