diff --git a/design/FY2023/NFP-evapCoolerRHcontrol.md b/design/FY2023/NFP-evapCoolerRHcontrol.md new file mode 100644 index 00000000000..d2010d6d0c6 --- /dev/null +++ b/design/FY2023/NFP-evapCoolerRHcontrol.md @@ -0,0 +1,153 @@ + +Enhancement of Evaporative Cooler in EnergyPlus +================ + +**Yujie Xu, Tianzhen Hong** + +**Lawrence Berkeley National Laboratory*** + + - Original Date: Apr 7, 2023 + - Modified Date: Apr 11, 2023 + +## Justification for Feature Update + +As global climate change continues, the frequency, duration and intensity of heatwaves could increase. As an affordable and energy efficient cooling option [1], evaporative cooling could become more prevalent in the future, especially in hot and dry climates. As a result, it is crucial to provide accurate and more user-friendly simulation support for prototyping new evaporative coolers and their applications. With this motivation, this EnergyPlus feature is proposed to provide an additional relative humidity-driven control option. + +![zoneEvapCoolerDiagram](zoneEvapCoolerDiagram.png) +

Figure 1. Conceptual diagram of a direct evaporative cooler [source](https://basc.pnnl.gov/resource-guides/evaporative-cooling-systems#edit-group-description) (left), an example of a zone-level direct evaporative cooler[source](https://www.nytimes.com/wirecutter/blog/do-swamp-coolers-work/) (right).

+ +The enhancement was motivated by discussions with the CBE research group at UC Berkeley: Hui Zhang, Roberto Rugani, and Maria Andre. + +## Overview ## + +The introduction of excessive moisture is one of the potential issues of direct evaporative coolers. A humidity control could become useful in preventing the evaporative cooler from raising indoor humidity to an uncomfortable level. Currently, the direct evaporative cooler can be controlled with the sensor node temperature using AvailabilityManagers (*AvailabilityManager:LowTemperatureTurnOff* or *AvailabilityManager:HighTemperatureTurnOn*). This feature proposes to add a relative humidity (RH) control to shut down the evaporative cooler when the indoor relative humidity is too high. + +We plan to enhance the zone level evaporative cooler object, *ZoneHVAC:EvaporativeCoolerUnit*. This is a compound object that combines a fan and one +Each evaporative cooler in this object can be a direct or indirect. This feature will add some additional fields to this zone-level object, allowing user to specify a relative-humidity threshold above which the unit will be turned off. + +## Approach + +To enable a high-relative-humidity-cutoff control, a field will be added to the *ZoneHVAC:EvaporativeCoolerUnit* object. See Section IDD object change for details. + +## Testing/Validation/Data Source(s) + +This feature will be tested and demonstrated with a test file derived from StripMallZoneEvapCooler.idf. Manual check of the time-step EnergyPlus simulation results will be conducted to confirm the added feature is working correctly. + +## IDD Object changes + +A field (N4) will be added to the ZoneHVAC:EvaporativeCoolerUnit + + ZoneHVAC:EvaporativeCoolerUnit, + \memo Zone evaporative cooler. Forced-convection cooling-only unit with supply fan, + \memo 100% outdoor air supply. Optional relief exhaust node + \min-fields 15 + A1 , \field Name + \required-field + \reference ZoneEquipmentNames + A2 , \field Availability Schedule Name + \note Availability schedule name for this system. Schedule value > 0 means the system is available. + \note If this field is blank, the system is always available. + \type object-list + \object-list ScheduleNames + A3, \field Availability Manager List Name + \note Enter the name of an AvailabilityManagerAssignmentList object. + \type object-list + \object-list SystemAvailabilityManagerLists + A4 , \field Outdoor Air Inlet Node Name + \required-field + \type node + \note this is an outdoor air node + A5 , \field Cooler Outlet Node Name + \required-field + \type node + \note this is a zone inlet node + A6 , \field Zone Relief Air Node Name + \type node + \note this is a zone exhaust node, optional if flow is being balanced elsewhere + A7 , \field Supply Air Fan Object Type + \required-field + \type choice + \key Fan:SystemModel + \key Fan:ComponentModel + \key Fan:ConstantVolume + \key Fan:OnOff + \key Fan:VariableVolume + A8 , \field Supply Air Fan Name + \required-field + \type object-list + \object-list Fans + N1 , \field Design Supply Air Flow Rate + \required-field + \units m3/s + \minimum> 0 + \autosizable + A9 , \field Fan Placement + \required-field + \type choice + \key BlowThrough + \key DrawThrough + A10, \field Cooler Unit Control Method + \required-field + \type choice + \key ZoneTemperatureDeadbandOnOffCycling + \key ZoneCoolingLoadOnOffCycling + \key ZoneCoolingLoadVariableSpeedFan + N2 , \field Throttling Range Temperature Difference + \note used for ZoneTemperatureDeadbandOnOffCycling hystersis range for thermostatic control + \type real + \units deltaC + \default 1.0 + \minimum> 0.0 + N3 , \field Cooling Load Control Threshold Heat Transfer Rate + \type real + \units W + \default 100.0 + \note Sign convention is that positive values indicate a cooling load + \minimum> 0.0 + A11, \field First Evaporative Cooler Object Type + \required-field + \type choice + \key EvaporativeCooler:Direct:CelDekPad + \key EvaporativeCooler:Direct:ResearchSpecial + \key EvaporativeCooler:Indirect:CelDekPad + \key EvaporativeCooler:Indirect:WetCoil + \key EvaporativeCooler:Indirect:ResearchSpecial + A12, \field First Evaporative Cooler Object Name + \required-field + \type object-list + \object-list EvapCoolerNames + A13, \field Second Evaporative Cooler Object Type + \note optional, used for direct/indirect configurations + \note second cooler must be immediately downstream of first cooler, if present + \type choice + \key EvaporativeCooler:Direct:CelDekPad + \key EvaporativeCooler:Direct:ResearchSpecial + \key EvaporativeCooler:Indirect:CelDekPad + \key EvaporativeCooler:Indirect:WetCoil + \key EvaporativeCooler:Indirect:ResearchSpecial + A14, \field Second Evaporative Cooler Name + \note optional, used for direct/indirect configurations + \type object-list + \object-list EvapCoolerNames + A15, \field Design Specification ZoneHVAC Sizing Object Name + \note Enter the name of a DesignSpecificationZoneHVACSizing object. + \type object-list + \object-list DesignSpecificationZoneHVACSizingName + N4; \field Shut Off Relative Humidity + \note Zone relative humidity above which the evap cooler is shut off. + \type real + \minimum 0.00 + \maximum 100.00 + \units percent + +## Proposed additions to Meters: + +N/A + +## Proposed Report Variables: + +N/A + +## References + +[1] https://www.energy.gov/energysaver/evaporative-coolers
diff --git a/design/FY2023/zoneEvapCoolerDiagram.png b/design/FY2023/zoneEvapCoolerDiagram.png new file mode 100644 index 00000000000..7bdf367fba3 Binary files /dev/null and b/design/FY2023/zoneEvapCoolerDiagram.png differ diff --git a/doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-swimming-pool.tex b/doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-swimming-pool.tex index b1471d85893..078b25a70ed 100644 --- a/doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-swimming-pool.tex +++ b/doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-swimming-pool.tex @@ -25,14 +25,14 @@ \section{Indoor Swimming Pool }\label{indoor-swimming-pool} \item The pool is controlled to a particular temperature defined by user input. \item - Evaporation of water from the pool is added to the zone moisture balance and affects the zone humidity ratio. + Water that evaporates from the pool is added to the zone moisture balance and affects the zone humidity ratio. \item The pool depth is small in comparison to its surface area. Thus, heat transfer through the pool walls is neglected. This is in keeping with the standard assumption of one-dimensional heat transfer through surfaces in EnergyPlus. \end{itemize} \subsection{Energy Balance of Indoor Swimming Pool}\label{energy-balance-of-indoor-swimming-pool} -Heat losses from indoor swimming pools occur by a variety of mechanisms. Sensible heat transfer by convection, latent heat loss associated with evaporation, and net radiative heat exchange with the surrounding occur at the pool surface. Conductive heat losses take place through the bottom of the pool. Other heat gains/losses are associated with the pool water heating system, the replacement of evaporated water with makeup water The energy balance of the indoor swimming pool estimates the heat gains/losses occurring due to: +Heat losses from indoor swimming pools occur by a variety of mechanisms. Sensible heat transfer by convection, latent heat loss associated with evaporation, and net radiative sensible heat exchange with the surrounding occur at the pool surface. Conductive heat losses take place through the bottom of the pool. Other heat gains/losses are associated with the pool water heating system and the replacement of evaporated water with makeup water. The energy balance of the indoor swimming pool estimates the heat gains/losses occurring due to: \begin{itemize} \tightlist @@ -76,11 +76,19 @@ \subsection{Convection from the pool water surface}\label{convection-from-the-po \(T_a\) is the air temperature over pool (\(^{\circ}\)C). -When a cover is present, the cover and the cover convection factor reduce the heat transfer coefficient proportionally. For example, if the pool is half covered and the pool cover reduces convection by 50\%, the convective heat transfer coefficient is reduced by 25\% from the value calculated using the above equation. +When a cover is present, the cover fraction and the cover convection factor reduce the heat transfer coefficient proportionally. For example, if the pool is half covered and the pool cover reduces convection by 50\%, the convective heat transfer coefficient is reduced by 25\% from the value calculated using the above equation. \subsection{Evaporation from the pool water surface}\label{evaporation-from-the-pool-water-surface} -There are 5 main variables used to calculate the evaporation rate (\(Q_{evap}\)). Note that the units of the equation below are IP units, but this equation is used with conversion factors internally in the EnergyPlus code. +The latent heat transfer based on the evaporation of water from the pool (\(Q_{evap}\)) is calculated using the following equation: + +\begin{equation} +Q_{evap} = \dot{m}_{evap} \cdot H_{fg}(W,MAT) +\end{equation} + +where \(\dot{m}_{evap}\) is the evaporation rate of the pool water and \(H_{fg}(W,MAT)\) is the heat of vaporation of water as a function of the zone humidity ratio (W) and mean air temperature (MAT). + +The equation used to calculate the evaporation rate (\(dot{m}_{evap}\)) is based on four variables: \begin{itemize} \tightlist @@ -96,13 +104,15 @@ \subsection{Evaporation from the pool water surface}\label{evaporation-from-the- Pool water agitation and Activity Factor \end{itemize} +The equation for the evaporation rate is: + \begin{equation} \dot{m}_{evap} = 0.1 \cdot A \cdot AF \cdot (P_w - P_{dp}) \end{equation} where: -\(\dot{m}_{evap}\) is the evaporation rate of pool water (lb/h) +\(\dot{m}_{evap}\) is the evaporation rate of the pool water (lb/h) \(A\) is the surface area of pool water (ft\(^2\)) @@ -112,7 +122,9 @@ \subsection{Evaporation from the pool water surface}\label{evaporation-from-the- \(P_{dp}\) is the partial vapor pressure at room air dew point (in. Hg). +Note that the units of the equation above are IP units. In the EnergyPlus code, this equation uses conversion factors to maintain SI units internally. +The following table provides some reference activity factors that can aide the user in determining what value(s) should be entered for this parameter in the input file. \begin{longtable}[c]{@{}ll@{}} \caption{Typical Activity Factor (AF) \label{table:typical-activity-factor-af}} \tabularnewline @@ -140,20 +152,22 @@ \subsection{Evaporation from the pool water surface}\label{evaporation-from-the- \bottomrule \end{longtable} -When a cover is present, the cover and the cover evaporation factor reduce the amount of evaporation proportionally. For example, if the pool is half covered and the pool cover reduces convection by 50\%, the convective heat transfer coefficient is reduced by 25\% from the value calculated using the above equation. The value is converted to a latent gain (loss) through multiplication of the evaporation rate by the heat of vaporization of water. +When a cover is present, the cover fraction and the cover evaporation factor reduce the amount of evaporation proportionally. For example, if the pool is half covered and the pool cover reduces convection by 50\%, the convective heat transfer coefficient is reduced by 25\% from the value calculated using the above equation. The value is converted to a latent gain (loss) through multiplication of the evaporation rate by the heat of vaporization of water. The user should be aware of two key assumptions built into the equations for calculating the evaporation from the pool. First, when the activity factor is zero, no evaporation will take place. Thus, activity factor is not the same thing as occupancy and should not be zero when there are no people in the pool as that will completely eliminate evaporation. Second, when the cover evaporation factor is zero, the cover will not reduce evaporation at all. A cover factor of 1.0 means that the cover will completely block evaporation. \subsection{Radiation exchange with the pool water surface}\label{radiation-exchange-with-the-pool-water-surface} -This uses the EnergyPlus internal short- and long-wavelength radiation balances already in place. When a cover is present, it acts to reduce the amount of radiation that arrives at the pool water surface in comparison to the no cover case. Any reduction in either type of radiation is accounted for by adding a convective gain/loss to the zone air. So, in effect, the cover absorbs some radiation and then convects it to the zone air. +The radiation exchange between the pool water surface and other surfaces and sources uses the existing EnergyPlus internal short- and long-wavelength radiation balances that are already in place within the program. When a cover is present, it acts to reduce the amount of radiation that arrives at the pool water surface in comparison to the no cover case. Any reduction in either type of radiation is accounted for by adding a convective gain/loss to the zone air. So, in effect, the cover absorbs some radiation and then convects it to the zone air. \subsection{Conduction through the bottom of the pool}\label{conduction-through-the-bottom-of-the-pool} -The model ignores 2-d effects of pool walls and assume that pool depth is much less than the pool area. Conduction is calculated using the Conduction Transfer Function (CTF) equation with the outside temperature determined by the outside heat balance and the inside surface temperature calculated using the pool water heat balance that is lumped together with the inside surface heat balance. +The model ignores 2-dimensional effects of pool walls and assume that pool depth is much less than the pool area. Conduction is calculated using the Conduction Transfer Function (CTF) equation with the outside temperature determined by the outside heat balance and the inside surface temperature calculated using the pool water heat balance that is lumped together with the inside surface heat balance. \subsection{Makeup pool water supply}\label{makeup-pool-water-supply} +The energy impact of the makeup water (\(Q_{fw}\)) that is added to the pool to replace any water which evaporates is taken into account using the following equation: + \begin{equation} Q_{fw} = \dot{m}_{fw} \cdot cw \cdot (T_p - T_{fw}) \end{equation} @@ -170,23 +184,25 @@ \subsection{Makeup pool water supply}\label{makeup-pool-water-supply} \subsection{Heat Gain from People}\label{heat-gain-from-people} -The input for the swimming pool requires that the user enter the maximum number of people in the pool, a schedule modifying the maximum number of people for different pool occupancies, and a heat gain per person schedule for differing activities. These three parameters allow for the calculation of a total heat gain from people during a given time. It is assumed that all of the heat gain from people is via convection to the pool water. +The input for the swimming pool requires that the user enter the maximum number of people in the pool, a schedule modifying the maximum number of people for different pool occupancies, and a heat gain per person schedule for differing activities. These three parameters allow for the calculation of a total heat gain from people during a given time. It is assumed that all of the heat gain from people is added to the pool water via convection. \subsection{Heat from auxiliary pool heater}\label{heat-from-auxiliary-pool-heater} +The energy impact of the pool heater (\(Q_{hw}\)) on the pool water temperature is taken into account using the following equation: + \begin{equation} -Q_{fw} = \dot{m}_{hw} \cdot c_w \cdot (T_p - T_{hw}) +Q_{hw} = \dot{m}_{hw} \cdot c_w \cdot (T_p - T_{hw}) \end{equation} where: -\(m_{hw}\) = Mass flow rate (kg/s) +\(m_{hw}\) is the mass flow rate (kg/s) -\(c_w\) = Specific heat of water (J/kg-\(^{\circ}\)C) +\(c_w\) is the specific heat of water (J/kg-\(^{\circ}\)C) -\(T_p\) = Pool water temperature (\(^{\circ}\)C) +\(T_p\) is the pool water temperature (\(^{\circ}\)C) -\(T_{hw}\) = Heated water supply temperature (\(^{\circ}\)C). +\(T_{hw}\) is the heated water supply temperature (\(^{\circ}\)C). \subsection{Pool Heating to Control the Pool Water Temperature}\label{pool-heating-to-control-the-pool-water-temperature} @@ -200,7 +216,7 @@ \subsection{Pool Heating to Control the Pool Water Temperature}\label{pool-heati \(m_w\) is the mass of pool water (kg) -\(cp\) is the specific heat of water (J/kg-\(^{\circ}\)C) +\(c_p\) is the specific heat of water (J/kg-\(^{\circ}\)C) \(\Delta t\) is the time step length (s) @@ -208,10 +224,11 @@ \subsection{Pool Heating to Control the Pool Water Temperature}\label{pool-heati \(T_{old}\) is the temperature of water at the last time step (\(^{\circ}\)C) -\(m_p\) is the needed mass flow rate of water from the plant (kg/s) +\(dot{m}_p\) is the needed mass flow rate of water from the plant (kg/s) \(T_{in}\) is the inlet water temperature from the plant (\(^{\circ}\)C). + This equation is rearranged to solve for the needed mass flow rate of water from the plant since all of the other terms are known or given based on user input. This establishes a flow request to the plant and is capped at the maximum value defined in input by the user. \subsection{Pool/Surface Heat Balance Equation Summary}\label{poolsurface-heat-balance-equation-summary} @@ -242,31 +259,32 @@ \subsection{Pool/Surface Heat Balance Equation Summary}\label{poolsurface-heat-b \(Q_{evap}\) is the net heat loss due to evaporation of pool water to the zone air. + Details on each of these terms was either provided in previous parts of this section or in the standard EnergyPlus heat balance discussion elsewhere in the Engineering Reference. \subsection{Other additional information}\label{other-additional-information} -The following subsections are some useful information that those wishing to model a swimming pool in EnergyPlus might find helpful. Further information can be found on-line or in reputable sources such as the ASHRAE Handbooks. +The following subsections contain some useful information that those wishing to model a swimming pool in EnergyPlus might find helpful. Further information can be found on-line or in reputable sources such as the ASHRAE Handbooks. -\subsection{Swimming Pool Flow Rate}\label{swimming-pool-flow-rate} +\subsubsection{Swimming Pool Flow Rate}\label{swimming-pool-flow-rate} The flow rate of the circulating pump is designed to turn over (circulate) the entire volume of water in the pool in 6 to 8 hours, or 3 or 4 times in 24 hours. About 1 or 2 percent of the pumped circulation rate should be provided as continuous makeup water demand to overcome losses from evaporation, bleed-off, and spillage. To fill the pool initially, a separate quick-fill line should be provided to do the job in 8 to 16 hours; however, filling is usually done at off-peak hours. Thus, the demand flow rate need not be considered in the system demand calculations, unless it out-weighs the demand of all other demands even during the off-peak hours. -\subsection{Comfort and Health}\label{comfort-and-health} +\subsubsection{Comfort and Health}\label{comfort-and-health} -Indoor pools are normally maintained between 50 and 60\% RH for two reasons: +Zones with indoor swimming pools are normally maintained between 50 and 60\% RH for two reasons: \begin{itemize} \tightlist \item - Swimmers leaving the water feel chilly at lower relative humidity due to evaporation off the body + Swimmers leaving the water may feel thermally cool at lower relative humidity due to incrased evaporation off of the body at lower relative humidity levels. \item - It is considerably more expensive (and unnecessary) to maintain 40\% RH instead of 50\% RH + It is considerably more expensive (and unnecessary) to maintain 40\% RH instead of 50\% RH. \end{itemize} -\subsection{Air Delivery Rates (Indoor Pool)}\label{air-delivery-rates-indoor-pool} +\subsubsection{Air Delivery Rates (Indoor Pool)}\label{air-delivery-rates-indoor-pool} -Most codes require a minimum of 6 ACH, except where mechanical cooling is used. This rate may prove inadequate for some occupancy and use. Where mechanical dehumidification is provided, air delivery rates should be established to maintain appropriate conditions of temperature and humidity. The following rates are typically desired: +Most codes require a minimum of 6 ACH for air circulation, except where mechanical cooling is used. This rate may prove inadequate for some occupancy and use. Where mechanical dehumidification is provided, air delivery rates should be established to maintain appropriate conditions of temperature and humidity. The following rates are typically desired: \begin{itemize} \tightlist @@ -278,7 +296,9 @@ \subsection{Air Delivery Rates (Indoor Pool)}\label{air-delivery-rates-indoor-po Therapeutic pools, 4 \textasciitilde{} 6 ACH \end{itemize} +\subsubsection{Indoor Pool Recommended Air and Water Temperatures}\label{indoor-pool-recommended-air-and-water-temperatures} +The following table provides a starting point for determining the appropriate zone air and pool water temperatures one might expect in a zone that contains an indoor swimming pool. As with any building parameter, users should determine these based on best practices and their own experience and set the appropriate parameters in their input files accordingly. \begin{longtable}[c]{@{}lll@{}} \caption{Typical Swimming Pool Design Conditions \label{table:typical-swimming-pool-design-conditions}} \tabularnewline diff --git a/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex b/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex index 89c95b180a5..53a5cfa9fe3 100644 --- a/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex +++ b/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex @@ -3212,7 +3212,7 @@ \subsection{SwimmingPool:Indoor}\label{swimmingpoolindoor} \item The pool cannot utilize movable insulation or have a heat source or sink associated with it (something used to model low temperature radiant systems). \end{itemize} -The following information is useful for defining and modeling an indoor pool in EnergyPlus. For more information on the algorithm used for this model or details on some of the input parameters, please reference the indoor pool section of the EnergyPlus Engineering Reference document. +The following information is useful for defining and modeling an indoor pool in EnergyPlus. For more information on the algorithm used for this model or details on some of the input parameters, please reference the Indoor Swimming Pool section of the EnergyPlus Engineering Reference document. \subsubsection{Inputs}\label{inputs-7-012} @@ -3230,11 +3230,11 @@ \subsubsection{Inputs}\label{inputs-7-012} \paragraph{Field: Activity Factor Schedule Name}\label{field-activity-factor-schedule-name} -This field references a schedule that contains values for pool activity. This parameter can be varied using the schedule named here, and it has an impact on the amount of evaporation that will take place from the pool to the surrounding zone air. For example values of the activity factor and what impact it will have on the evaporation of water from the pool, please refer to the Indoor Swimming Pool section of the EnergyPlus Engineering Reference document. If left blank, the activity factor will be assumed to be unity. Note that the activity factor should not be set equal to an occupancy schedule since an activity factor of zero means that no evaporation will take place from the pool. +This field references a schedule that contains values for pool activity. This parameter can be varied using the schedule named here, and it has an impact on the amount of evaporation that will take place from the pool to the surrounding zone air. For example values of the activity factor and what impact it will have on the evaporation of water from the pool, please refer to the Indoor Swimming Pool section of the EnergyPlus Engineering Reference document. If left blank, the activity factor will be assumed to be unity. Note that the activity factor schedule should not be set equal to an occupancy schedule since an activity factor of zero means that no evaporation will take place from the pool. \paragraph{Field: Make-up Water Supply Schedule Name}\label{field-make-up-water-supply-schedule-name} -The scheduled named by this field establishes a cold water temperature {[}C{]} for the water that replaces the water which is lost from the pool due to evaporation. If blank, water temperatures are calculated by the \hyperref[sitewatermainstemperature]{Site:WaterMainsTemperature} object. This field (even if blank) overrides the Cold Water Supply Temperature Schedule in all of the listed \hyperref[wateruseequipment]{WaterUse:Equipment} objects. +The schedule named by this field establishes a cold water temperature {[}C{]} for the water that replaces the water which is lost from the pool due to evaporation. If blank, water temperatures are calculated by the \hyperref[sitewatermainstemperature]{Site:WaterMainsTemperature} object. This field (even if blank) overrides the Cold Water Supply Temperature Schedule in all of the listed \hyperref[wateruseequipment]{WaterUse:Equipment} objects. \paragraph{Field: Cover Schedule Name}\label{field-cover-schedule-name} @@ -3258,19 +3258,19 @@ \subsubsection{Inputs}\label{inputs-7-012} \paragraph{Field: Pool Water Inlet Node}\label{field-pool-water-inlet-node} -This input is the name of the node on the demand side of a plant loop that leads into the pool. From the standpoint of an EnergyPlus input file, the pool sits on a plant demand loop, and the pump and heater reside on the plant supply loop. The pool heater and pump must be defined by other existing EnergyPlus input. +This input is the name of the node on the demand side of a plant loop that leads into the pool. From the standpoint of an EnergyPlus input file, the pool is placed on a plant demand loop, and the pump and heater reside on the plant supply loop. The pool heater and pump must be defined by other existing EnergyPlus input. \paragraph{Field: Pool Water Outlet Node}\label{field-pool-water-outlet-node} -This input is the name of the node on the demand side of a plant loop that leads out of the pool. From the standpoint of an EnergyPlus input file, the pool sits on a plant demand loop, and the pump and heater reside on the plant supply loop. The pool heater and pump must be defined by other existing EnergyPlus input. +This input is the name of the node on the demand side of a plant loop that leads out of the pool. From the standpoint of an EnergyPlus input file, the pool is placed on a plant demand loop, and the pump and heater reside on the plant supply loop. The pool heater and pump must be defined by other existing EnergyPlus input. \paragraph{Field: Pool Water Maximum Flow Rate}\label{field-pool-water-maximum-flow-rate} -This input is the maximum water volumetric flow rate in m3/s going between the pool and the water heating equipment. This along with the pool setpoint temperature and the heating plant equipment outlet temperature will establish the maximum heat addition to the pool. This flow rate to the pool will be varied in an attempt to reach the desired pool water setpoint temperature (see Setpoint Temperature Schedule below). +This input is the maximum water volumetric flow rate in m\(^{3}\)/s going between the pool and the water heating equipment. This along with the pool setpoint temperature and the heating plant equipment outlet temperature will establish the maximum heat addition to the pool. This flow rate to the pool will be varied in an attempt to reach the desired pool water setpoint temperature (see Setpoint Temperature Schedule below). \paragraph{Field: Pool Miscellaneous Equipment Power}\label{field-pool-miscellaneous-equipment-power} -This input defines the power consumption rate of miscellaneous equipment such as the filtering and chlorination technology associated with the pool. The units for this input are in power consumption per flow rate of water through the pool from the heater or W/(m3/s). This field will be multiplied by the flow rate of water through the pool to determine the power consumption of this equipment. Any heat generated by this equipment is assumed to have no effect on the pool water itself. +This input defines the power consumption rate of miscellaneous equipment such as the filtering and chlorination technology associated with the pool. The units for this input are in power consumption per flow rate of water through the pool from the heater or W/(m\(^{3}\)/s). This field will be multiplied by the flow rate of water through the pool to determine the power consumption of this equipment. Any heat generated by this equipment is assumed to have no effect on the pool water itself. \paragraph{Field: Setpoint Temperature Schedule}\label{field-setpoint-temperature-schedule} @@ -3363,11 +3363,11 @@ \subsubsection{Outputs}\label{outputs-4-007} HVAC, Average, Indoor Pool Current Cover LW Radiation Factor {[]} \end{itemize} -\paragraph{Indoor Pool Makeup Water Rate {[}m3/s{]}}\label{indoor-pool-makeup-water-rate-m3s} +\paragraph{Indoor Pool Makeup Water Rate {[}m\(^{3}\)/s{]}}\label{indoor-pool-makeup-water-rate-m3s} The water consumption rate for the makeup water of indoor swimming pool. -\paragraph{Indoor Pool Makeup Water Volume {[}m3{]}}\label{indoor-pool-makeup-water-volume-m3} +\paragraph{Indoor Pool Makeup Water Volume {[}m\(^{3}\){]}}\label{indoor-pool-makeup-water-volume-m3} The water consumption for the makeup water of indoor swimming pool. diff --git a/doc/input-output-reference/src/overview/group-zone-forced-air-units.tex b/doc/input-output-reference/src/overview/group-zone-forced-air-units.tex index b3c92999e46..48a6a7b9458 100644 --- a/doc/input-output-reference/src/overview/group-zone-forced-air-units.tex +++ b/doc/input-output-reference/src/overview/group-zone-forced-air-units.tex @@ -1547,6 +1547,12 @@ \subsubsection{Inputs}\label{inputs-4-040} This optional input field is the name of a \hyperref[designspecificationzonehvacsizing]{DesignSpecification:ZoneHVAC:Sizing} object. The name must correspond to unique name of a \hyperref[designspecificationzonehvacsizing]{DesignSpecification:ZoneHVAC:Sizing} object defined elsewhere. A Design Sepcification Zone HVAC Sizing object defines scalable sizing methods for sizing input field \emph{Design Supply Air Flow Rate} in Evaportaive Cooler zone HVAC object. The scaled design supply air flow rates in turn is used to size capacity of the unit. +\paragraph{Field: Shut Off Relative Humidity}\label{shut-off-relative-humidity} + +This is an optional field. When the relative humidity of the zone is above this +threshold, the evaporative cooler is shut off. This intends to prevent direct +evaporative coolers from adding too much moisture into the zone. + An example input object follows. \begin{lstlisting} diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index 45e4af1b96f..ad974f39a34 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -37014,10 +37014,16 @@ ZoneHVAC:EvaporativeCoolerUnit, \note optional, used for direct/indirect configurations \type object-list \object-list EvapCoolerNames - A15; \field Design Specification ZoneHVAC Sizing Object Name + A15, \field Design Specification ZoneHVAC Sizing Object Name \note Enter the name of a DesignSpecificationZoneHVACSizing object. \type object-list \object-list DesignSpecificationZoneHVACSizingName + N4; \field Shut Off Relative Humidity + \note Zone relative humidity above which the evap cooler is shut off. + \type real + \minimum 0.00 + \maximum 100.00 + \units percent ZoneHVAC:HybridUnitaryHVAC, \memo Hybrid Unitary HVAC. A black box model for multi-mode packaged forced air equipment. Independent variables include outdoor air conditions and indoor air conditions. Controlled inputs include operating mode, supply air flow rate, and outdoor air faction. Emperical lookup tables are required to map supply air temperature supply air humidity, electricity use, fuel uses, water use, fan electricity use, and external static pressure as a function of each indpednent varaible and each controlled input. In each timestep the model will choose one or more combinations of settings for mode, supply air flow rate, outdoor air faction, and part runtime fraction so as to satisfy zone requests for sensible cooling, heating, ventilation, and/or dehumidification with the least resource consumption. Equipment in this class may consume electricity, water, and up to two additional fuel types. diff --git a/src/EnergyPlus/BoilerSteam.cc b/src/EnergyPlus/BoilerSteam.cc index d80e16087aa..61e87b39eb6 100644 --- a/src/EnergyPlus/BoilerSteam.cc +++ b/src/EnergyPlus/BoilerSteam.cc @@ -196,8 +196,7 @@ namespace BoilerSteam { thisBoiler.Name = state.dataIPShortCut->cAlphaArgs(1); // Validate fuel type input - thisBoiler.FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(2))); + thisBoiler.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(2))); // INPUTS from the IDF file thisBoiler.BoilerMaxOperPress = state.dataIPShortCut->rNumericArgs(1); @@ -408,7 +407,7 @@ namespace BoilerSteam { void BoilerSpecs::setupOutputVars(EnergyPlusData &state) { - std::string_view sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, "Boiler Heating Rate", OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/BoilerSteam.hh b/src/EnergyPlus/BoilerSteam.hh index 610e512ff65..830377a81f8 100644 --- a/src/EnergyPlus/BoilerSteam.hh +++ b/src/EnergyPlus/BoilerSteam.hh @@ -72,29 +72,29 @@ namespace BoilerSteam { struct BoilerSpecs : PlantComponent { // Members - std::string Name; // user identifier - Constant::eResource FuelType = Constant::eResource::Invalid; // resource type - bool Available = false; // TRUE if machine available in current time step - bool ON = false; // TRUE: simulate the machine at it's operating part load ratio - bool MissingSetPointErrDone = false; // Missing outlet node setpoint message flag - bool UseLoopSetPoint = false; // Flag to use setpoint from loop - Real64 DesMassFlowRate = 0.0; // kg/s - Boiler water design mass flow rate - Real64 MassFlowRate = 0.0; // kg/s - Boiler water mass flow rate - Real64 NomCap = 0.0; // W - design nominal capacity of Boiler - bool NomCapWasAutoSized = false; // true if Nominal capacity was autosize on input - Real64 NomEffic = 0.0; // boiler efficiency at design conditions - Real64 MinPartLoadRat = 0.0; // Minimum allowed operating part load ratio - Real64 MaxPartLoadRat = 0.0; // Maximum allowed operating part load ratio - Real64 OptPartLoadRat = 0.0; // Optimal operating part load ratio - Real64 OperPartLoadRat = 0.0; // Actual operating part load ratio - Real64 TempUpLimitBoilerOut = 0.0; // C - Boiler outlet maximum temperature limit - Real64 BoilerMaxOperPress = 0.0; // Max Boiler Pressure - Real64 BoilerPressCheck = 0.0; // Boiler Operating Pressure at Saturation Temperature - Real64 SizFac = 0.0; // sizing factor - int BoilerInletNodeNum = 0; // Node number at the boiler inlet - int BoilerOutletNodeNum = 0; // Node number at the boiler outlet - std::array FullLoadCoef = {0.0}; // Coefficients of the fuel consumption/part load ratio curve - int TypeNum = 0; // Plant loop type identifier + std::string Name; // user identifier + Constant::eFuel FuelType = Constant::eFuel::Invalid; // resource type + bool Available = false; // TRUE if machine available in current time step + bool ON = false; // TRUE: simulate the machine at it's operating part load ratio + bool MissingSetPointErrDone = false; // Missing outlet node setpoint message flag + bool UseLoopSetPoint = false; // Flag to use setpoint from loop + Real64 DesMassFlowRate = 0.0; // kg/s - Boiler water design mass flow rate + Real64 MassFlowRate = 0.0; // kg/s - Boiler water mass flow rate + Real64 NomCap = 0.0; // W - design nominal capacity of Boiler + bool NomCapWasAutoSized = false; // true if Nominal capacity was autosize on input + Real64 NomEffic = 0.0; // boiler efficiency at design conditions + Real64 MinPartLoadRat = 0.0; // Minimum allowed operating part load ratio + Real64 MaxPartLoadRat = 0.0; // Maximum allowed operating part load ratio + Real64 OptPartLoadRat = 0.0; // Optimal operating part load ratio + Real64 OperPartLoadRat = 0.0; // Actual operating part load ratio + Real64 TempUpLimitBoilerOut = 0.0; // C - Boiler outlet maximum temperature limit + Real64 BoilerMaxOperPress = 0.0; // Max Boiler Pressure + Real64 BoilerPressCheck = 0.0; // Boiler Operating Pressure at Saturation Temperature + Real64 SizFac = 0.0; // sizing factor + int BoilerInletNodeNum = 0; // Node number at the boiler inlet + int BoilerOutletNodeNum = 0; // Node number at the boiler outlet + std::array FullLoadCoef = {0.0}; // Coefficients of the fuel consumption/part load ratio curve + int TypeNum = 0; // Plant loop type identifier PlantLocation plantLoc; int PressErrIndex = 0; // index pointer for recurring errors int FluidIndex = 0; // Steam index diff --git a/src/EnergyPlus/Boilers.cc b/src/EnergyPlus/Boilers.cc index a0afa8f7819..7f7a12d8dd6 100644 --- a/src/EnergyPlus/Boilers.cc +++ b/src/EnergyPlus/Boilers.cc @@ -206,7 +206,7 @@ void GetBoilerInput(EnergyPlusData &state) thisBoiler.Type = DataPlant::PlantEquipmentType::Boiler_Simple; // Validate fuel type input - thisBoiler.FuelType = static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(2))); + thisBoiler.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(2))); thisBoiler.NomCap = state.dataIPShortCut->rNumericArgs(1); if (state.dataIPShortCut->rNumericArgs(1) == 0.0) { @@ -358,7 +358,7 @@ void GetBoilerInput(EnergyPlusData &state) void BoilerSpecs::SetupOutputVars(EnergyPlusData &state) { - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, "Boiler Heating Rate", OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/Boilers.hh b/src/EnergyPlus/Boilers.hh index 894e9f30517..07e4835a094 100644 --- a/src/EnergyPlus/Boilers.hh +++ b/src/EnergyPlus/Boilers.hh @@ -84,7 +84,7 @@ namespace Boilers { { // Members std::string Name; // user identifier - Constant::eResource FuelType = Constant::eResource::Invalid; // resource type assignment + Constant::eFuel FuelType = Constant::eFuel::Invalid; // resource type assignment DataPlant::PlantEquipmentType Type = DataPlant::PlantEquipmentType::Invalid; // plant loop type identifier PlantLocation plantLoc{}; bool Available = false; // TRUE if machine available in current time step diff --git a/src/EnergyPlus/CTElectricGenerator.cc b/src/EnergyPlus/CTElectricGenerator.cc index 10e8a630645..13bce9b2821 100644 --- a/src/EnergyPlus/CTElectricGenerator.cc +++ b/src/EnergyPlus/CTElectricGenerator.cc @@ -316,8 +316,8 @@ namespace CTElectricGenerator { // Validate fuel type input state.dataCTElectricGenerator->CTGenerator(genNum).FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, AlphArray(11))); - if (state.dataCTElectricGenerator->CTGenerator(genNum).FuelType == Constant::eResource::Invalid) { + static_cast(getEnumerationValue(Constant::eFuelNamesUC, AlphArray(11))); + if (state.dataCTElectricGenerator->CTGenerator(genNum).FuelType == Constant::eFuel::Invalid) { ShowSevereError(state, format("Invalid {}={}", state.dataIPShortCut->cAlphaFieldNames(11), AlphArray(11))); ShowContinueError(state, format("Entered in {}={}", state.dataIPShortCut->cCurrentModuleObject, AlphArray(1))); ErrorsFound = true; @@ -358,7 +358,7 @@ namespace CTElectricGenerator { void CTGeneratorData::setupOutputVars(EnergyPlusData &state) { - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, "Generator Produced AC Electricity Rate", OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/CTElectricGenerator.hh b/src/EnergyPlus/CTElectricGenerator.hh index 277bf514e58..8d259dfd3f0 100644 --- a/src/EnergyPlus/CTElectricGenerator.hh +++ b/src/EnergyPlus/CTElectricGenerator.hh @@ -74,7 +74,7 @@ namespace CTElectricGenerator { std::string Name; // user identifier std::string TypeOf = "Generator:CombustionTurbine"; // Type of Generator GeneratorType CompType_Num = GeneratorType::CombTurbine; - Constant::eResource FuelType; // Type of Fuel - DIESEL, GASOLINE, GAS + Constant::eFuel FuelType; // Type of Fuel - DIESEL, GASOLINE, GAS Real64 RatedPowerOutput = 0.0; // W - design nominal capacity of Generator int ElectricCircuitNode = 0; // Electric Circuit Node Real64 MinPartLoadRat = 0.0; // (CT MIN) min allowed operating frac full load diff --git a/src/EnergyPlus/ChillerGasAbsorption.cc b/src/EnergyPlus/ChillerGasAbsorption.cc index 95abd276805..d686248ff6f 100644 --- a/src/EnergyPlus/ChillerGasAbsorption.cc +++ b/src/EnergyPlus/ChillerGasAbsorption.cc @@ -514,9 +514,8 @@ void GetGasAbsorberInput(EnergyPlusData &state) thisChiller.SizFac = state.dataIPShortCut->rNumericArgs(17); // Validate fuel type input - thisChiller.FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(17))); - if (thisChiller.FuelType == Constant::eResource::Invalid) { + thisChiller.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(17))); + if (thisChiller.FuelType == Constant::eFuel::Invalid) { ShowSevereError(state, format("{}=\"{}\", invalid value", cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); ShowContinueError(state, format("Invalid {}={}", state.dataIPShortCut->cAlphaFieldNames(17), state.dataIPShortCut->cAlphaArgs(17))); ShowContinueError( @@ -532,7 +531,7 @@ void GetGasAbsorberInput(EnergyPlusData &state) void GasAbsorberSpecs::setupOutputVariables(EnergyPlusData &state) { - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, "Chiller Heater Evaporator Cooling Rate", diff --git a/src/EnergyPlus/ChillerGasAbsorption.hh b/src/EnergyPlus/ChillerGasAbsorption.hh index 8b4f5ef8ff6..d7c40f1b12c 100644 --- a/src/EnergyPlus/ChillerGasAbsorption.hh +++ b/src/EnergyPlus/ChillerGasAbsorption.hh @@ -78,7 +78,7 @@ namespace ChillerGasAbsorption { bool InHeatingMode = false; // Part of Type that directly corresponds with IDD definition std::string Name; // user identifier - Constant::eResource FuelType; // Type of Fuel - DIESEL, GASOLINE, GAS + Constant::eFuel FuelType; // Type of Fuel - DIESEL, GASOLINE, GAS Real64 NomCoolingCap = 0.0; // W - design nominal capacity of Absorber bool NomCoolingCapWasAutoSized = false; // true if nominal capacity was autosize on input Real64 NomHeatCoolRatio = 0.0; // ratio of heating to cooling capacity diff --git a/src/EnergyPlus/Coils/CoilCoolingDX.cc b/src/EnergyPlus/Coils/CoilCoolingDX.cc index 381df049e34..e5a33c49930 100644 --- a/src/EnergyPlus/Coils/CoilCoolingDX.cc +++ b/src/EnergyPlus/Coils/CoilCoolingDX.cc @@ -308,8 +308,8 @@ void CoilCoolingDX::oneTimeInit(EnergyPlus::EnergyPlusData &state) {}, "System"); - if (this->performance.compressorFuelType != Constant::eResource::Electricity) { - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->performance.compressorFuelType)]; + if (this->performance.compressorFuelType != Constant::eFuel::Electricity) { + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->performance.compressorFuelType)]; SetupOutputVariable(state, format("Cooling Coil {} Rate", sFuelType), OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.cc b/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.cc index 0fed255d559..19a5670533a 100644 --- a/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.cc +++ b/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.cc @@ -106,9 +106,9 @@ void CoilCoolingDXCurveFitPerformance::instantiateFromInputSpec(EnergyPlus::Ener this->alternateMode.oneTimeInit(state); // oneTimeInit does not need to be delayed in this use case } // Validate fuel type input - this->compressorFuelType = static_cast( - getEnumerationValue(Constant::eResourceNamesUC, UtilityRoutines::MakeUPPERCase(input_data.compressor_fuel_type))); - if (this->compressorFuelType == Constant::eResource::Invalid) { + this->compressorFuelType = + static_cast(getEnumerationValue(Constant::eFuelNamesUC, UtilityRoutines::MakeUPPERCase(input_data.compressor_fuel_type))); + if (this->compressorFuelType == Constant::eFuel::Invalid) { ShowSevereError(state, std::string{routineName} + this->object_name + "=\"" + this->name + "\", invalid"); ShowContinueError(state, "...Compressor Fuel Type=\"" + input_data.compressor_fuel_type + "\"."); errorsFound = true; @@ -390,7 +390,7 @@ void CoilCoolingDXCurveFitPerformance::simulate(EnergyPlus::EnergyPlusData &stat this->basinHeaterPower *= (1.0 - this->RTF); this->electricityConsumption = this->powerUse * reportingConstant; - if (this->compressorFuelType != Constant::eResource::Electricity) { + if (this->compressorFuelType != Constant::eFuel::Electricity) { this->compressorFuelRate = this->powerUse; this->compressorFuelConsumption = this->electricityConsumption; diff --git a/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.hh b/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.hh index 941c2b6708b..03e507e92a6 100644 --- a/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.hh +++ b/src/EnergyPlus/Coils/CoilCoolingDXCurveFitPerformance.hh @@ -124,7 +124,7 @@ struct CoilCoolingDXCurveFitPerformance Real64 minOutdoorDrybulb = 0.0; Real64 maxOutdoorDrybulbForBasin = 0.0; bool mySizeFlag = true; - Constant::eResource compressorFuelType = Constant::eResource::Invalid; + Constant::eFuel compressorFuelType = Constant::eFuel::Invalid; std::string compressorFuelTypeForOutput; Real64 compressorFuelRate = 0.0; Real64 compressorFuelConsumption = 0.0; diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index 7ac31875fcc..141abab76bc 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -4088,7 +4088,7 @@ void GetDXCoils(EnergyPlusData &state) } // A13; \field Fuel type, Validate fuel type input - thisDXCoil.FuelType = static_cast(getEnumerationValue(Constant::eResourceNamesUC, Alphas(13))); + thisDXCoil.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, Alphas(13))); thisDXCoil.NumOfSpeeds = Numbers(6); // Number of speeds if (thisDXCoil.NumOfSpeeds < 2) { @@ -4355,7 +4355,7 @@ void GetDXCoils(EnergyPlusData &state) // Read waste heat modifier curve name thisDXCoil.MSWasteHeat(I) = GetCurveIndex(state, Alphas(19 + (I - 1) * 6)); // convert curve name to number - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { if (thisDXCoil.MSWasteHeat(I) > 0) { // Verify Curve Object, only legal types are BiQuadratic ErrorsFound |= Curve::CheckCurveDims(state, @@ -4603,7 +4603,7 @@ void GetDXCoils(EnergyPlusData &state) } // A10; \field Fuel type, Validate fuel type input - thisDXCoil.FuelType = static_cast(getEnumerationValue(Constant::eResourceNamesUC, Alphas(10))); + thisDXCoil.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, Alphas(10))); thisDXCoil.RegionNum = Numbers(8); // Region Number for HSPF Calc thisDXCoil.NumOfSpeeds = Numbers(9); // Number of speeds @@ -4852,7 +4852,7 @@ void GetDXCoils(EnergyPlusData &state) // Read waste heat modifier curve name thisDXCoil.MSWasteHeat(I) = GetCurveIndex(state, Alphas(16 + (I - 1) * 6)); // convert curve name to number - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { if (thisDXCoil.MSWasteHeat(I) > 0) { // Verify Curve Object, only legal types are BiQuadratic ErrorsFound |= Curve::CheckCurveDims(state, @@ -6111,8 +6111,8 @@ void GetDXCoils(EnergyPlusData &state) {}, "System"); - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { - std::string_view sFuelType = Constant::eResourceNames[static_cast(thisDXCoil.FuelType)]; + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { + std::string_view sFuelType = Constant::eFuelNames[static_cast(thisDXCoil.FuelType)]; SetupOutputVariable(state, format("Cooling Coil {} Rate", sFuelType), OutputProcessor::Unit::W, @@ -6269,8 +6269,8 @@ void GetDXCoils(EnergyPlusData &state) {}, "System"); - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { - std::string_view sFuelType = Constant::eResourceNames[static_cast(thisDXCoil.FuelType)]; + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { + std::string_view sFuelType = Constant::eFuelNames[static_cast(thisDXCoil.FuelType)]; SetupOutputVariable(state, format("Heating Coil {} Rate", sFuelType), OutputProcessor::Unit::W, @@ -6292,9 +6292,8 @@ void GetDXCoils(EnergyPlusData &state) "System"); } - if (thisDXCoil.FuelType != Constant::eResource::Electricity && - thisDXCoil.DefrostStrategy == StandardRatings::DefrostStrat::ReverseCycle) { - std::string_view sFuelType = Constant::eResourceNames[static_cast(thisDXCoil.FuelType)]; + if (thisDXCoil.FuelType != Constant::eFuel::Electricity && thisDXCoil.DefrostStrategy == StandardRatings::DefrostStrat::ReverseCycle) { + std::string_view sFuelType = Constant::eFuelNames[static_cast(thisDXCoil.FuelType)]; SetupOutputVariable(state, format("Heating Coil Defrost {} Rate", sFuelType), OutputProcessor::Unit::W, @@ -6802,7 +6801,7 @@ void InitDXCoil(EnergyPlusData &state, int const DXCoilNum) // number of the cur if ((thisDXCoil.DXCoilType_Num == CoilDX_MultiSpeedCooling || thisDXCoil.DXCoilType_Num == CoilDX_MultiSpeedHeating) && state.dataDXCoils->MyEnvrnFlag(DXCoilNum)) { - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { if (thisDXCoil.MSHPHeatRecActive) { for (SpeedNum = 1; SpeedNum <= thisDXCoil.NumOfSpeeds; ++SpeedNum) { if (thisDXCoil.MSWasteHeat(SpeedNum) == 0) { @@ -13121,7 +13120,7 @@ void CalcMultiSpeedDXCoilCooling(EnergyPlusData &state, // Waste heat calculation // TODO: waste heat not considered even if defined in Cooling:DX:MultiSpeed, N16, \field Speed 1 Rated Waste Heat Fraction of // Power Input - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { if (thisDXCoil.MSWasteHeat(SpeedNumLS) == 0) { WasteHeatLS = thisDXCoil.MSWasteHeatFrac(SpeedNumLS); } else { @@ -13141,7 +13140,7 @@ void CalcMultiSpeedDXCoilCooling(EnergyPlusData &state, } // Energy use for other fuel types - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { thisDXCoil.FuelUsed = thisDXCoil.ElecCoolingPower; thisDXCoil.ElecCoolingPower = 0.0; } @@ -13357,7 +13356,7 @@ void CalcMultiSpeedDXCoilCooling(EnergyPlusData &state, } } // Energy use for other fuel types - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { thisDXCoil.FuelUsed = thisDXCoil.ElecCoolingPower; thisDXCoil.ElecCoolingPower = 0.0; } @@ -13894,7 +13893,7 @@ void CalcMultiSpeedDXCoilHeating(EnergyPlusData &state, } // Waste heat calculation - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { if (thisDXCoil.MSWasteHeat(SpeedNumLS) == 0) { WasteHeatLS = thisDXCoil.MSWasteHeatFrac(SpeedNumLS); } else { @@ -13912,7 +13911,7 @@ void CalcMultiSpeedDXCoilHeating(EnergyPlusData &state, MSHPWasteHeat = thisDXCoil.MSFuelWasteHeat; } } - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { thisDXCoil.FuelUsed = thisDXCoil.ElecHeatingPower; thisDXCoil.ElecHeatingPower = 0.0; @@ -14128,7 +14127,7 @@ void CalcMultiSpeedDXCoilHeating(EnergyPlusData &state, OutletAirEnthalpy = InletAirEnthalpy + thisDXCoil.TotalHeatingEnergyRate / thisDXCoil.InletAirMassFlowRate; OutletAirTemp = PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); } - if (thisDXCoil.MSHPHeatRecActive || thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.MSHPHeatRecActive || thisDXCoil.FuelType != Constant::eFuel::Electricity) { if (thisDXCoil.MSWasteHeat(SpeedNum) == 0) { thisDXCoil.MSFuelWasteHeat = thisDXCoil.MSWasteHeatFrac(SpeedNum) * thisDXCoil.ElecHeatingPower; } else { @@ -14139,7 +14138,7 @@ void CalcMultiSpeedDXCoilHeating(EnergyPlusData &state, MSHPWasteHeat = thisDXCoil.MSFuelWasteHeat; } } - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { thisDXCoil.FuelUsed = thisDXCoil.ElecHeatingPower; thisDXCoil.ElecHeatingPower = 0.0; @@ -14279,7 +14278,7 @@ void ReportDXCoil(EnergyPlusData &state, int const DXCoilNum) // number of the c } break; case CoilDX_MultiSpeedHeating: { thisDXCoil.TotalHeatingEnergy = thisDXCoil.TotalHeatingEnergyRate * ReportingConstant; - if (thisDXCoil.FuelType == Constant::eResource::Electricity) { + if (thisDXCoil.FuelType == Constant::eFuel::Electricity) { thisDXCoil.ElecHeatingConsumption = thisDXCoil.ElecHeatingPower * ReportingConstant; } else { thisDXCoil.FuelConsumed = thisDXCoil.FuelUsed * ReportingConstant; @@ -14297,7 +14296,7 @@ void ReportDXCoil(EnergyPlusData &state, int const DXCoilNum) // number of the c state.dataHVACGlobal->DXElecCoolingPower = thisDXCoil.ElecCoolingPower; thisDXCoil.EvapCondPumpElecConsumption = thisDXCoil.EvapCondPumpElecPower * ReportingConstant; thisDXCoil.EvapWaterConsump = thisDXCoil.EvapWaterConsumpRate * ReportingConstant; - if (thisDXCoil.FuelType == Constant::eResource::Electricity) { + if (thisDXCoil.FuelType == Constant::eFuel::Electricity) { thisDXCoil.ElecCoolingConsumption = thisDXCoil.ElecCoolingPower * ReportingConstant; } else { thisDXCoil.FuelConsumed = thisDXCoil.FuelUsed * ReportingConstant; @@ -17863,7 +17862,7 @@ void SetMSHPDXCoilHeatRecoveryFlag(EnergyPlusData &state, int const DXCoilNum) // PURPOSE OF THIS SUBROUTINE: // Set the heat recovery flag true when the parent object requests heat recovery. - if (state.dataDXCoils->DXCoil(DXCoilNum).FuelType != Constant::eResource::Electricity) { + if (state.dataDXCoils->DXCoil(DXCoilNum).FuelType != Constant::eFuel::Electricity) { state.dataDXCoils->DXCoil(DXCoilNum).MSHPHeatRecActive = true; } } diff --git a/src/EnergyPlus/DXCoils.hh b/src/EnergyPlus/DXCoils.hh index 774ebd1d15f..127137da900 100644 --- a/src/EnergyPlus/DXCoils.hh +++ b/src/EnergyPlus/DXCoils.hh @@ -353,7 +353,7 @@ namespace DXCoils { Real64 CurrentEndTimeLast; // end time of time step for last simulation time step Real64 TimeStepSysLast; // last system time step (used to check for downshifting) // for multispeed DX coil type - Constant::eResource FuelType; // Fuel type number + Constant::eFuel FuelType; // Fuel type number int NumOfSpeeds; // Number of speeds bool PLRImpact; // Part load fraction applied to Speed Number > 1 bool LatentImpact; // Latent degradation applied to Speed Number > 1 @@ -496,8 +496,8 @@ namespace DXCoils { ErrIndex4(0), LowAmbErrIndex(0), HighAmbErrIndex(0), PLFErrIndex(0), PLRErrIndex(0), PrintLowAmbMessage(false), PrintHighAmbMessage(false), EvapWaterSupplyMode(EvapWaterSupply::FromMains), EvapWaterSupTankID(0), EvapWaterTankDemandARRID(0), CondensateCollectMode(CondensateCollectAction::Discard), CondensateTankID(0), CondensateTankSupplyARRID(0), CondensateVdot(0.0), - CondensateVol(0.0), CurrentEndTimeLast(0.0), TimeStepSysLast(0.0), FuelType(Constant::eResource::Invalid), NumOfSpeeds(0), - PLRImpact(false), LatentImpact(false), MSFuelWasteHeat(0.0), MSHPHeatRecActive(false), MSHPDesignSpecIndex(0), CoolingCoilPresent(true), + CondensateVol(0.0), CurrentEndTimeLast(0.0), TimeStepSysLast(0.0), FuelType(Constant::eFuel::Invalid), NumOfSpeeds(0), PLRImpact(false), + LatentImpact(false), MSFuelWasteHeat(0.0), MSHPHeatRecActive(false), MSHPDesignSpecIndex(0), CoolingCoilPresent(true), HeatingCoilPresent(true), ISHundredPercentDOASDXCoil(false), SHRFTemp(MaxModes, 0), SHRFTempErrorIndex(0), SHRFFlow(MaxModes, 0), SHRFFlowErrorIndex(0), SHRFTemp2(0), SHRFFlow2(0), UserSHRCurveExists(false), ASHRAE127StdRprt(false), SecZonePtr(0), SecCoilSHRFT(0), SecCoilSHRFF(0), SecCoilAirFlow(0.0), SecCoilAirFlowScalingFactor(1.0), SecCoilRatedSHR(1.0), SecCoilSHR(1.0), EvapInletWetBulb(0.0), diff --git a/src/EnergyPlus/DataGlobalConstants.hh b/src/EnergyPlus/DataGlobalConstants.hh index 8e1a6beb787..4c6e63f68dc 100644 --- a/src/EnergyPlus/DataGlobalConstants.hh +++ b/src/EnergyPlus/DataGlobalConstants.hh @@ -91,9 +91,9 @@ namespace Constant { OtherFuel2, DistrictCooling, DistrictHeating, + Steam, Water, EnergyTransfer, - Steam, ElectricityProduced, ElectricityPurchased, ElectricitySurplusSold, @@ -144,6 +144,7 @@ namespace Constant { OtherFuel2, DistrictCooling, DistrictHeating, + Steam, Num }; @@ -171,7 +172,7 @@ namespace Constant { constexpr std::array(eResource::Num)> eResource2eFuel = { eFuel::Electricity, eFuel::NaturalGas, eFuel::Gasoline, eFuel::Diesel, eFuel::Coal, eFuel::Propane, eFuel::FuelOilNo1, eFuel::FuelOilNo2, eFuel::OtherFuel1, eFuel::OtherFuel2, - eFuel::DistrictCooling, eFuel::DistrictHeating, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, + eFuel::DistrictCooling, eFuel::DistrictHeating, eFuel::Steam, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, eFuel::Invalid, @@ -191,7 +192,8 @@ namespace Constant { eResource::OtherFuel1, eResource::OtherFuel2, eResource::DistrictCooling, - eResource::DistrictHeating}; + eResource::DistrictHeating, + eResource::Steam}; constexpr std::array(eResource::Num)> eResource2ePollutant = { ePollutant::Invalid, ePollutant::Invalid, ePollutant::Invalid, ePollutant::Invalid, ePollutant::Invalid, ePollutant::Invalid, @@ -231,9 +233,9 @@ namespace Constant { "OTHERFUEL2", "DISTRICTCOOLING", "DISTRICTHEATING", + "STEAM", "WATER", "ENERGYTRANSFER", - "STEAM", "ELECTRICITYPRODUCED", "ELECTRICITYPURCHASED", "ELECTRICITYSURPLUSSOLD", @@ -279,9 +281,9 @@ namespace Constant { "OtherFuel2", "DistrictCooling", "DistrictHeating", + "Steam", "Water", "EnergyTransfer", - "Steam", "ElectricityProduced", "ElectricityPurchased", "ElectricitySurplusSold", @@ -327,7 +329,8 @@ namespace Constant { eResourceNamesUC[static_cast(eFuel2eResource[static_cast(eFuel::OtherFuel1)])], eResourceNamesUC[static_cast(eFuel2eResource[static_cast(eFuel::OtherFuel2)])], eResourceNamesUC[static_cast(eFuel2eResource[static_cast(eFuel::DistrictCooling)])], - eResourceNamesUC[static_cast(eFuel2eResource[static_cast(eFuel::DistrictHeating)])]}; + eResourceNamesUC[static_cast(eFuel2eResource[static_cast(eFuel::DistrictHeating)])], + eResourceNamesUC[static_cast(eFuel2eResource[static_cast(eFuel::Steam)])]}; static constexpr std::array(eFuel::Num)> eFuelNames = { eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::Electricity)])], @@ -341,7 +344,8 @@ namespace Constant { eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::OtherFuel1)])], eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::OtherFuel2)])], eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::DistrictCooling)])], - eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::DistrictHeating)])]}; + eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::DistrictHeating)])], + eResourceNames[static_cast(eFuel2eResource[static_cast(eFuel::Steam)])]}; static constexpr std::array(ePollutant::Num)> ePollutantNamesUC = { eResourceNamesUC[static_cast(ePollutant2eResource[static_cast(ePollutant::SO2)])], diff --git a/src/EnergyPlus/DataZoneEquipment.hh b/src/EnergyPlus/DataZoneEquipment.hh index f78b4de67ed..8e4043f3480 100644 --- a/src/EnergyPlus/DataZoneEquipment.hh +++ b/src/EnergyPlus/DataZoneEquipment.hh @@ -179,7 +179,7 @@ namespace DataZoneEquipment { // Members std::string ReportVarName; OutputProcessor::Unit ReportVarUnits; - Constant::eResource ResourceType; + Constant::eResource ResourceType = Constant::eResource::Invalid; std::string EndUse; SystemReports::EndUseType EndUse_CompMode; std::string Group; @@ -190,9 +190,8 @@ namespace DataZoneEquipment { // Default Constructor EquipMeterData() - : ReportVarUnits(OutputProcessor::Unit::None), ResourceType(Constant::eResource::Invalid), - EndUse_CompMode(SystemReports::EndUseType::NoHeatNoCool), ReportVarIndex(0), ReportVarIndexType(OutputProcessor::TimeStepType::Zone), - ReportVarType(OutputProcessor::VariableType::NotFound), CurMeterReading(0.0) + : ReportVarUnits(OutputProcessor::Unit::None), EndUse_CompMode(SystemReports::EndUseType::NoHeatNoCool), ReportVarIndex(0), + ReportVarIndexType(OutputProcessor::TimeStepType::Zone), ReportVarType(OutputProcessor::VariableType::NotFound), CurMeterReading(0.0) { } }; diff --git a/src/EnergyPlus/EconomicLifeCycleCost.hh b/src/EnergyPlus/EconomicLifeCycleCost.hh index 1d9e3fa0030..895b6875485 100644 --- a/src/EnergyPlus/EconomicLifeCycleCost.hh +++ b/src/EnergyPlus/EconomicLifeCycleCost.hh @@ -356,31 +356,23 @@ namespace EconomicLifeCycleCost { struct UsePriceEscalationType { // Members - std::string name; // Name - Constant::eResource resource; // resource like electricity or natural gas (uses definitions from DataGlobalConstants) - int escalationStartYear; // Escalation Start Year 1900-2100 - int escalationStartMonth; // Escalation Start Month 1 to 12 - Array1D Escalation; // Escalation by year, first year is baseDateYear + std::string name; // Name + Constant::eResource resource = + Constant::eResource::Invalid; // resource like electricity or natural gas (uses definitions from DataGlobalConstants) + int escalationStartYear = 0; // Escalation Start Year 1900-2100 + int escalationStartMonth = 0; // Escalation Start Month 1 to 12 + Array1D Escalation; // Escalation by year, first year is baseDateYear // last year is baseDateYear + lengthStudyYears - 1 - - // Default Constructor - UsePriceEscalationType() : resource(Constant::eResource::Invalid), escalationStartYear(0), escalationStartMonth(0) - { - } }; struct UseAdjustmentType { // Members - std::string name; // Name - Constant::eResource resource; // resource like electricity or natural gas (uses definitions from DataGlobalConstants) - Array1D Adjustment; // Adjustment by year, first year is baseDateYear + std::string name; // Name + Constant::eResource resource = + Constant::eResource::Invalid; // resource like electricity or natural gas (uses definitions from DataGlobalConstants) + Array1D Adjustment; // Adjustment by year, first year is baseDateYear // last year is baseDateYear + lengthStudyYears - 1 - - // Default Constructor - UseAdjustmentType() : resource(Constant::eResource::Invalid) - { - } }; struct CashFlowType diff --git a/src/EnergyPlus/EconomicTariff.cc b/src/EnergyPlus/EconomicTariff.cc index 1e0f085ae9f..c12c086258d 100644 --- a/src/EnergyPlus/EconomicTariff.cc +++ b/src/EnergyPlus/EconomicTariff.cc @@ -664,7 +664,7 @@ void GetInputEconomicsTariff(EnergyPlusData &state, bool &ErrorsFound) // true i } // associate the resource number with each tariff if (tariff(iInObj).reportMeterIndx >= 1) { - tariff(iInObj).resourceNum = static_cast(getEnumerationValue( + tariff(iInObj).resource = static_cast(getEnumerationValue( Constant::eResourceNamesUC, UtilityRoutines::MakeUPPERCase(state.dataOutputProcessor->EnergyMeters(tariff(iInObj).reportMeterIndx).ResourceType))); } @@ -4898,7 +4898,7 @@ void GetMonthlyCostForResource(EnergyPlusData &state, Constant::eResource const for (int iTariff = 1; iTariff <= state.dataEconTariff->numTariff; ++iTariff) { auto const &tariff = state.dataEconTariff->tariff(iTariff); if (tariff.isSelected) { - if (tariff.resourceNum == inResourceNumber) { + if (tariff.resource == inResourceNumber) { auto const &econVar = state.dataEconTariff->econVar(tariff.ptTotal); for (int jMonth = 1; jMonth <= 12; ++jMonth) { // use 12 because LCC assume 12 months outMonthlyCosts(jMonth) += econVar.values(jMonth); diff --git a/src/EnergyPlus/EconomicTariff.hh b/src/EnergyPlus/EconomicTariff.hh index 29dc9795f1a..b55769c3bb5 100644 --- a/src/EnergyPlus/EconomicTariff.hh +++ b/src/EnergyPlus/EconomicTariff.hh @@ -362,26 +362,26 @@ namespace EconomicTariff { struct TariffType { // Members - std::string tariffName; // name of the tariff - std::string reportMeter; // name of the report meter - int reportMeterIndx; // index of the report meter - int kindElectricMtr; // kind of electric meter - see enumerated list above, 0 is not electric - int kindWaterMtr; // kind of water meter - 0 (default) is not water, 1 is water - int kindGasMtr; // kind of gas meter - 0 (default) is not gas, 1 is gas - Constant::eResource resourceNum; // based on list of DataGlobalConstants - EconConv convChoice; // enumerated choice index of the conversion factor - Real64 energyConv; // energy conversion factor - Real64 demandConv; // demand conversion factor - std::string periodSchedule; // name of the period schedule (time of day) - int periodSchIndex; // index to the period schedule - std::string seasonSchedule; // name of the season schedule (winter/summer) - int seasonSchIndex; // index to the season schedule - std::string monthSchedule; // name of month schedule (when months end) - int monthSchIndex; // index to the month schedule - DemandWindow demandWindow; // enumerated list of the kind of demand window - Real64 demWinTime; // length of time for the demand window - Real64 monthChgVal; // monthly charge value - int monthChgPt; // pointer to a variable that contains the monthly charge + std::string tariffName; // name of the tariff + std::string reportMeter; // name of the report meter + int reportMeterIndx; // index of the report meter + int kindElectricMtr; // kind of electric meter - see enumerated list above, 0 is not electric + int kindWaterMtr; // kind of water meter - 0 (default) is not water, 1 is water + int kindGasMtr; // kind of gas meter - 0 (default) is not gas, 1 is gas + Constant::eResource resource = Constant::eResource::Invalid; // based on list of DataGlobalConstants + EconConv convChoice; // enumerated choice index of the conversion factor + Real64 energyConv; // energy conversion factor + Real64 demandConv; // demand conversion factor + std::string periodSchedule; // name of the period schedule (time of day) + int periodSchIndex; // index to the period schedule + std::string seasonSchedule; // name of the season schedule (winter/summer) + int seasonSchIndex; // index to the season schedule + std::string monthSchedule; // name of month schedule (when months end) + int monthSchIndex; // index to the month schedule + DemandWindow demandWindow; // enumerated list of the kind of demand window + Real64 demWinTime; // length of time for the demand window + Real64 monthChgVal; // monthly charge value + int monthChgPt; // pointer to a variable that contains the monthly charge // if 0 then use monthChgVal Real64 minMonthChgVal; // minimum monthly charge value int minMonthChgPt; // pointer to a variable that contains the minimum monthly charge @@ -471,23 +471,23 @@ namespace EconomicTariff { // Default Constructor TariffType() - : reportMeterIndx(0), kindElectricMtr(0), kindWaterMtr(0), kindGasMtr(0), resourceNum(Constant::eResource::Invalid), - convChoice(EconConv::USERDEF), energyConv(0.0), demandConv(0.0), periodSchIndex(0), seasonSchIndex(0), monthSchIndex(0), - demandWindow(DemandWindow::Invalid), demWinTime(0.0), monthChgVal(0.0), monthChgPt(0), minMonthChgVal(0.0), minMonthChgPt(0), - chargeSchIndex(0), baseUseSchIndex(0), buyOrSell(0), firstCategory(0), lastCategory(0), ptEnergyCharges(0), ptDemandCharges(0), - ptServiceCharges(0), ptBasis(0), ptAdjustment(0), ptSurcharge(0), ptSubtotal(0), ptTaxes(0), ptTotal(0), ptNotIncluded(0), - firstNative(0), lastNative(0), nativeTotalEnergy(0), nativeTotalDemand(0), nativePeakEnergy(0), nativePeakDemand(0), - nativeShoulderEnergy(0), nativeShoulderDemand(0), nativeOffPeakEnergy(0), nativeOffPeakDemand(0), nativeMidPeakEnergy(0), - nativeMidPeakDemand(0), nativePeakExceedsOffPeak(0), nativeOffPeakExceedsPeak(0), nativePeakExceedsMidPeak(0), - nativeMidPeakExceedsPeak(0), nativePeakExceedsShoulder(0), nativeShoulderExceedsPeak(0), nativeIsWinter(0), nativeIsNotWinter(0), - nativeIsSpring(0), nativeIsNotSpring(0), nativeIsSummer(0), nativeIsNotSummer(0), nativeIsAutumn(0), nativeIsNotAutumn(0), - nativePeakAndShoulderEnergy(0), nativePeakAndShoulderDemand(0), nativePeakAndMidPeakEnergy(0), nativePeakAndMidPeakDemand(0), - nativeShoulderAndOffPeakEnergy(0), nativeShoulderAndOffPeakDemand(0), nativePeakAndOffPeakEnergy(0), nativePeakAndOffPeakDemand(0), - nativeRealTimePriceCosts(0), nativeAboveCustomerBaseCosts(0), nativeBelowCustomerBaseCosts(0), nativeAboveCustomerBaseEnergy(0), - nativeBelowCustomerBaseEnergy(0), gatherEnergy(MaxNumMonths, countPeriod, 0.0), gatherDemand(MaxNumMonths, countPeriod, 0.0), - collectTime(0.0), collectEnergy(0.0), RTPcost(MaxNumMonths, 0.0), RTPaboveBaseCost(MaxNumMonths, 0.0), - RTPbelowBaseCost(MaxNumMonths, 0.0), RTPaboveBaseEnergy(MaxNumMonths, 0.0), RTPbelowBaseEnergy(MaxNumMonths, 0.0), - seasonForMonth(MaxNumMonths, 0), isQualified(false), ptDisqualifier(0), isSelected(false), totalAnnualCost(0.0), totalAnnualEnergy(0.0) + : reportMeterIndx(0), kindElectricMtr(0), kindWaterMtr(0), kindGasMtr(0), convChoice(EconConv::USERDEF), energyConv(0.0), demandConv(0.0), + periodSchIndex(0), seasonSchIndex(0), monthSchIndex(0), demandWindow(DemandWindow::Invalid), demWinTime(0.0), monthChgVal(0.0), + monthChgPt(0), minMonthChgVal(0.0), minMonthChgPt(0), chargeSchIndex(0), baseUseSchIndex(0), buyOrSell(0), firstCategory(0), + lastCategory(0), ptEnergyCharges(0), ptDemandCharges(0), ptServiceCharges(0), ptBasis(0), ptAdjustment(0), ptSurcharge(0), + ptSubtotal(0), ptTaxes(0), ptTotal(0), ptNotIncluded(0), firstNative(0), lastNative(0), nativeTotalEnergy(0), nativeTotalDemand(0), + nativePeakEnergy(0), nativePeakDemand(0), nativeShoulderEnergy(0), nativeShoulderDemand(0), nativeOffPeakEnergy(0), + nativeOffPeakDemand(0), nativeMidPeakEnergy(0), nativeMidPeakDemand(0), nativePeakExceedsOffPeak(0), nativeOffPeakExceedsPeak(0), + nativePeakExceedsMidPeak(0), nativeMidPeakExceedsPeak(0), nativePeakExceedsShoulder(0), nativeShoulderExceedsPeak(0), nativeIsWinter(0), + nativeIsNotWinter(0), nativeIsSpring(0), nativeIsNotSpring(0), nativeIsSummer(0), nativeIsNotSummer(0), nativeIsAutumn(0), + nativeIsNotAutumn(0), nativePeakAndShoulderEnergy(0), nativePeakAndShoulderDemand(0), nativePeakAndMidPeakEnergy(0), + nativePeakAndMidPeakDemand(0), nativeShoulderAndOffPeakEnergy(0), nativeShoulderAndOffPeakDemand(0), nativePeakAndOffPeakEnergy(0), + nativePeakAndOffPeakDemand(0), nativeRealTimePriceCosts(0), nativeAboveCustomerBaseCosts(0), nativeBelowCustomerBaseCosts(0), + nativeAboveCustomerBaseEnergy(0), nativeBelowCustomerBaseEnergy(0), gatherEnergy(MaxNumMonths, countPeriod, 0.0), + gatherDemand(MaxNumMonths, countPeriod, 0.0), collectTime(0.0), collectEnergy(0.0), RTPcost(MaxNumMonths, 0.0), + RTPaboveBaseCost(MaxNumMonths, 0.0), RTPbelowBaseCost(MaxNumMonths, 0.0), RTPaboveBaseEnergy(MaxNumMonths, 0.0), + RTPbelowBaseEnergy(MaxNumMonths, 0.0), seasonForMonth(MaxNumMonths, 0), isQualified(false), ptDisqualifier(0), isSelected(false), + totalAnnualCost(0.0), totalAnnualEnergy(0.0) { } }; diff --git a/src/EnergyPlus/EvaporativeCoolers.cc b/src/EnergyPlus/EvaporativeCoolers.cc index 11c644c9bda..c2933789aae 100644 --- a/src/EnergyPlus/EvaporativeCoolers.cc +++ b/src/EnergyPlus/EvaporativeCoolers.cc @@ -1360,7 +1360,7 @@ void SizeEvapCooler(EnergyPlusData &state, int const EvapCoolNum) } } else { // zone equipment - // can't do zone equip evap coolers yet + // can't do zone equip evap coolers yet } if (!HardSizeNoDesRun) { if (IsAutoSize) { @@ -2930,7 +2930,8 @@ void CalcIndirectRDDEvapCoolerOutletTemp(EnergyPlusData &state, CapFlowSys = thisEvapCond.InletMassFlowRate * CpAirSys; QHXRate = CapFlowSys * (thisEvapCond.InletTemp - OutletTemp); SecOutletEnthalpy = thisEvapCond.SecInletEnthalpy + QHXRate / AirMassFlowSec; - SecOutletAirHumRat = Psychrometrics::PsyWFnTdbH(state, EDBTSec, SecOutletEnthalpy); // assumes constant temperature moisture addition + SecOutletAirHumRat = Psychrometrics::PsyWFnTdbH(state, EDBTSec, + SecOutletEnthalpy); // assumes constant temperature moisture addition // we may need check based on maximum allowed humidity ratio thisEvapCond.SecOutletTemp = EDBTSec; thisEvapCond.SecOutletHumRat = SecOutletAirHumRat; @@ -2991,7 +2992,8 @@ void CalcSecondaryAirOutletCondition(EnergyPlusData &state, Psychrometrics::PsyTwbFnTdbWPb(state, thisEvapCond.SecOutletTemp, EHumRatSec, state.dataEnvrn->OutBaroPress); } else if ((OperatingMode == OperatingMode::WetModulated || OperatingMode == OperatingMode::WetFull)) { SecOutletEnthalpy = thisEvapCond.SecInletEnthalpy + QHXTotal / AirMassFlowSec; - SecOutletAirHumRat = Psychrometrics::PsyWFnTdbH(state, EDBTSec, SecOutletEnthalpy); // assumes a constant temperature moisture addition + SecOutletAirHumRat = Psychrometrics::PsyWFnTdbH(state, EDBTSec, + SecOutletEnthalpy); // assumes a constant temperature moisture addition thisEvapCond.SecOutletTemp = EDBTSec; thisEvapCond.SecOutletHumRat = SecOutletAirHumRat; thisEvapCond.SecOutletEnthalpy = SecOutletEnthalpy; @@ -3431,8 +3433,8 @@ void GetInputZoneEvaporativeCoolerUnit(EnergyPlusData &state) if (lAlphaBlanks(2)) { thisZoneEvapUnit.AvailSchedIndex = ScheduleManager::ScheduleAlwaysOn; } else { - thisZoneEvapUnit.AvailSchedIndex = - ScheduleManager::GetScheduleIndex(state, Alphas(2)); // convert schedule name to pointer (index number) + thisZoneEvapUnit.AvailSchedIndex = ScheduleManager::GetScheduleIndex(state, + Alphas(2)); // convert schedule name to pointer (index number) if (thisZoneEvapUnit.AvailSchedIndex == 0) { ShowSevereError(state, format("{}=\"{}\" invalid data.", CurrentModuleObject, thisZoneEvapUnit.Name)); ShowContinueError(state, format("invalid-not found {}=\"{}\".", cAlphaFields(2), Alphas(2))); @@ -3602,6 +3604,11 @@ void GetInputZoneEvaporativeCoolerUnit(EnergyPlusData &state) } } + if (!lNumericBlanks(4)) { + // Shut Off Relative Humidity + thisZoneEvapUnit.ShutOffRelativeHumidity = Numbers(4); + } + // Add fan to component sets array BranchNodeConnections::SetUpCompSets(state, CurrentModuleObject, @@ -4041,6 +4048,20 @@ void CalcZoneEvaporativeCoolerUnit(EnergyPlusData &state, { auto &zoneEvapUnit = state.dataEvapCoolers->ZoneEvapUnit(UnitNum); + Real64 relativeHumidity = 100.0 * Psychrometrics::PsyRhFnTdbWPb(state, + state.dataLoopNodes->Node(zoneEvapUnit.ZoneNodeNum).Temp, + state.dataLoopNodes->Node(zoneEvapUnit.ZoneNodeNum).HumRat, + state.dataEnvrn->OutBaroPress, + "CalcZoneEvaporativeCoolerUnit"); + if (relativeHumidity > zoneEvapUnit.ShutOffRelativeHumidity) { + // unit is off when humidity is too high + PartLoadRatio = 0.0; + zoneEvapUnit.UnitPartLoadRatio = PartLoadRatio; + CalcZoneEvapUnitOutput(state, UnitNum, PartLoadRatio, SensibleOutputProvided, LatentOutputProvided); + zoneEvapUnit.IsOnThisTimestep = false; + return; + } + if (zoneEvapUnit.ControlSchemeType == ControlType::ZoneTemperatureDeadBandOnOffCycling) { ZoneTemp = state.dataLoopNodes->Node(zoneEvapUnit.ZoneNodeNum).Temp; CoolSetLowThrottle = state.dataHeatBalFanSys->ZoneThermostatSetPointHi(ZoneNum) - (0.5 * zoneEvapUnit.ThrottlingRange); diff --git a/src/EnergyPlus/EvaporativeCoolers.hh b/src/EnergyPlus/EvaporativeCoolers.hh index d6c3851d8f9..67a90a3d86c 100644 --- a/src/EnergyPlus/EvaporativeCoolers.hh +++ b/src/EnergyPlus/EvaporativeCoolers.hh @@ -307,6 +307,7 @@ namespace EvaporativeCoolers { int UnitLoadControlLimitsErrorIndex; // root solver errors, art load ratio limits exceeded. int ZonePtr; // pointer to a zone served by an evaportive cooler unit int HVACSizingIndex; // index of a HVACSizing object for an evaportive cooler unit + Real64 ShutOffRelativeHumidity; // Zone relative humidity above which the evap cooler is shut off. bool MySize; // sizing logic flag bool MyEnvrn; // sim environmental logic flag bool MyFan; // fan sizing logic flag @@ -326,7 +327,7 @@ namespace EvaporativeCoolers { UnitSensibleCoolingEnergy(0.0), UnitLatentHeatingRate(0.0), UnitLatentHeatingEnergy(0.0), UnitLatentCoolingRate(0.0), UnitLatentCoolingEnergy(0.0), UnitFanSpeedRatio(0.0), UnitPartLoadRatio(0.0), UnitVSControlMaxIterErrorIndex(0), UnitVSControlLimitsErrorIndex(0), UnitLoadControlMaxIterErrorIndex(0), UnitLoadControlLimitsErrorIndex(0), ZonePtr(0), - HVACSizingIndex(0), MySize(true), MyEnvrn(true), MyFan(true), MyZoneEq(true) + HVACSizingIndex(0), ShutOffRelativeHumidity(100.0), MySize(true), MyEnvrn(true), MyFan(true), MyZoneEq(true) { } }; diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 83d695ee492..dfe294ef434 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -2322,8 +2322,8 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) if (!lAlphaFieldBlanks(39)) { // A39; \field Fuel type, Validate fuel type input - thisVrfSys.FuelTypeNum = static_cast(getEnumerationValue(Constant::eResourceNamesUC, cAlphaArgs(39))); - if (thisVrfSys.FuelTypeNum == Constant::eResource::Invalid) { + thisVrfSys.fuel = static_cast(getEnumerationValue(Constant::eFuelNamesUC, cAlphaArgs(39))); + if (thisVrfSys.fuel == Constant::eFuel::Invalid) { ShowSevereError( state, format("{} = \"{}\", {} = \"{}\" was not found.", cCurrentModuleObject, thisVrfSys.Name, cAlphaFieldNames(39), cAlphaArgs(39))); @@ -2466,7 +2466,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) thisVrfFluidCtrl.Name = cAlphaArgs(1); thisVrfFluidCtrl.VRFSystemTypeNum = VRF_HeatPump; thisVrfFluidCtrl.VRFAlgorithmType = AlgorithmType::FluidTCtrl; - thisVrfFluidCtrl.FuelTypeNum = Constant::eResource::Electricity; + thisVrfFluidCtrl.fuel = Constant::eFuel::Electricity; if (lAlphaFieldBlanks(2)) { thisVrfFluidCtrl.SchedPtr = ScheduleManager::ScheduleAlwaysOn; @@ -2867,7 +2867,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) thisVrfFluidCtrlHR.HeatRecoveryUsed = true; thisVrfFluidCtrlHR.VRFSystemTypeNum = VRF_HeatPump; thisVrfFluidCtrlHR.VRFAlgorithmType = AlgorithmType::FluidTCtrl; - thisVrfFluidCtrlHR.FuelTypeNum = Constant::eResource::Electricity; + thisVrfFluidCtrlHR.fuel = Constant::eFuel::Electricity; if (lAlphaFieldBlanks(2)) { thisVrfFluidCtrlHR.SchedPtr = ScheduleManager::ScheduleAlwaysOn; @@ -4859,7 +4859,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) for (int NumCond = 1; NumCond <= state.dataHVACVarRefFlow->NumVRFCond; ++NumCond) { auto &thisVrf = state.dataHVACVarRefFlow->VRF(NumCond); - std::string_view const sFuelType = Constant::eResourceNames[static_cast(thisVrf.FuelTypeNum)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(thisVrf.fuel)]; SetupOutputVariable(state, "VRF Heat Pump Total Cooling Rate", OutputProcessor::Unit::W, @@ -5048,7 +5048,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) } if (thisVrf.DefrostStrategy == StandardRatings::DefrostStrat::Resistive || - (thisVrf.DefrostStrategy == StandardRatings::DefrostStrat::ReverseCycle && thisVrf.FuelTypeNum == Constant::eResource::Electricity)) { + (thisVrf.DefrostStrategy == StandardRatings::DefrostStrat::ReverseCycle && thisVrf.fuel == Constant::eFuel::Electricity)) { SetupOutputVariable(state, "VRF Heat Pump Defrost Electricity Rate", OutputProcessor::Unit::W, @@ -9061,9 +9061,9 @@ void VRFTerminalUnitEquipment::ControlVRFToLoad(EnergyPlusData &state, } } else if (VRFCoolingMode || HRCoolingMode) { // IF the system is in cooling mode and/or the terminal unit requests cooling - if (NoCompOutput <= QZnReq && ((QZnReq <= 0.0) || (QZnReq >= DataHVACGlobals::SmallLoad && !HRCoolingMode))) { + if (NoCompOutput <= QZnReq) { DXCoolingCoilOprCtrl = false; - if (!this->SuppHeatingCoilPresent) { + if (!this->SuppHeatingCoilPresent || HRCoolingMode) { PartLoadRatio = 0.0; return; } @@ -9089,53 +9089,48 @@ void VRFTerminalUnitEquipment::ControlVRFToLoad(EnergyPlusData &state, // set supplemental heating coil calculation if the condition requires if (this->SuppHeatingCoilPresent) { - auto &thisSuppHeatCoilAirInletNode = state.dataLoopNodes->Node(this->SuppHeatCoilAirInletNode); - if (((QZnReq > DataHVACGlobals::SmallLoad && QZnReq > FullOutput) || - (((QZnReq - NoCompOutput) > DataHVACGlobals::SmallLoad) && QZnReq <= 0.0)) || - (this->isSetPointControlled && this->suppTempSetPoint > thisSuppHeatCoilAirInletNode.Temp)) { - Real64 ZoneLoad = 0.0; - Real64 LoadToHeatingSP = 0.0; - Real64 LoadToCoolingSP = 0.0; - if (this->isSetPointControlled) { + if (this->isSetPointControlled) { + auto &thisSuppHeatCoilAirInletNode = state.dataLoopNodes->Node(this->SuppHeatCoilAirInletNode); + if (this->suppTempSetPoint > thisSuppHeatCoilAirInletNode.Temp) { Real64 mDot = thisSuppHeatCoilAirInletNode.MassFlowRate; Real64 Tin = thisSuppHeatCoilAirInletNode.Temp; Real64 Win = thisSuppHeatCoilAirInletNode.HumRat; Real64 CpAirIn = Psychrometrics::PsyCpAirFnW(Win); SuppHeatCoilLoad = mDot * CpAirIn * (this->suppTempSetPoint - Tin); this->SuppHeatingCoilLoad = SuppHeatCoilLoad; - if (this->DesignSuppHeatingCapacity > 0.0) { - this->SuppHeatPartLoadRatio = min(1.0, SuppHeatCoilLoad / this->DesignSuppHeatingCapacity); - } } else { + SuppHeatCoilLoad = 0.0; + } + } else { + // not sure why FirstHVAC has anything to do with this but that was already here + // another branch should test removing FirstHVACIteration to get same answer each iteration + if (!FirstHVACIteration && ((QZnReq > DataHVACGlobals::SmallLoad && QZnReq > FullOutput) || + (((QZnReq - NoCompOutput) > DataHVACGlobals::SmallLoad) && QZnReq <= 0.0))) { + Real64 ZoneLoad = 0.0; + Real64 LoadToHeatingSP = 0.0; + Real64 LoadToCoolingSP = 0.0; getVRFTUZoneLoad(state, VRFTUNum, ZoneLoad, LoadToHeatingSP, LoadToCoolingSP, false); - if (((FullOutput < (LoadToHeatingSP - DataHVACGlobals::SmallLoad) || - ((QZnReq - NoCompOutput) > DataHVACGlobals::SmallLoad && QZnReq <= 0.0))) && - !FirstHVACIteration) { - if ((QZnReq - NoCompOutput) > DataHVACGlobals::SmallLoad && QZnReq <= 0.0) { - if (LoadToHeatingSP < 0.0 && QZnReq == 0.0) { - SuppHeatCoilLoad = max(0.0, LoadToHeatingSP - FullOutput); - } else { - SuppHeatCoilLoad = max(0.0, QZnReq - FullOutput); - } + if ((QZnReq - NoCompOutput) > DataHVACGlobals::SmallLoad && QZnReq <= 0.0) { + if (LoadToHeatingSP < 0.0 && QZnReq == 0.0) { + SuppHeatCoilLoad = max(0.0, LoadToHeatingSP - FullOutput); } else { - if (QZnReq > 0.0 && (NoCompOutput - QZnReq) >= DataHVACGlobals::SmallLoad) { - SuppHeatCoilLoad = 0.0; - } else { - SuppHeatCoilLoad = max(0.0, LoadToHeatingSP - FullOutput); - } + SuppHeatCoilLoad = max(0.0, QZnReq - FullOutput); } - this->SuppHeatingCoilLoad = SuppHeatCoilLoad; - if (this->DesignSuppHeatingCapacity > 0.0) { - this->SuppHeatPartLoadRatio = min(1.0, SuppHeatCoilLoad / this->DesignSuppHeatingCapacity); + } else if (FullOutput < (LoadToHeatingSP - DataHVACGlobals::SmallLoad) && LoadToHeatingSP > 0.0) { + if (QZnReq > 0.0 && (NoCompOutput - QZnReq) >= DataHVACGlobals::SmallLoad) { + SuppHeatCoilLoad = 0.0; + } else { + SuppHeatCoilLoad = max(0.0, LoadToHeatingSP - FullOutput); } } else { SuppHeatCoilLoad = 0.0; - this->SuppHeatPartLoadRatio = 0.0; } + } else { + SuppHeatCoilLoad = 0.0; } - } else { - SuppHeatCoilLoad = 0.0; - this->SuppHeatPartLoadRatio = 0.0; + } + if (this->DesignSuppHeatingCapacity > 0.0) { + this->SuppHeatPartLoadRatio = min(1.0, SuppHeatCoilLoad / this->DesignSuppHeatingCapacity); } } else { // does it matter what these are if there is no supp heater? SuppHeatCoilLoad = 0.0; @@ -9147,7 +9142,7 @@ void VRFTerminalUnitEquipment::ControlVRFToLoad(EnergyPlusData &state, // If the QZnReq <= FullOutput the unit needs to run full out if (QZnReq <= FullOutput) { // if no coil present in terminal unit, no need to reset PLR? - if (thisVRFTU.CoolingCoilPresent) { + if (thisVRFTU.CoolingCoilPresent && DXCoolingCoilOprCtrl) { PartLoadRatio = 1.0; // the zone set point could be exceeded if set point control is used so protect against that if (this->isSetPointControlled) { diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index 4ad2b66eeea..2214f85b28c 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -223,35 +223,35 @@ namespace HVACVariableRefrigerantFlow { Real64 DefrostConsumption; // energy used during defrost (J) Real64 MaxOATDefrost; // maximum outdoor air dry-bulb temp for defrost operation (C) // end variables used for Defrost - DataHeatBalance::RefrigCondenserType CondenserType; // condenser type, evap- or air-cooled - int CondenserNodeNum; // condenser inlet node number - bool SkipCondenserNodeNumCheck; // used to check for duplicate node names - int CondenserOutletNodeNum; // condenser outlet node number - Real64 WaterCondVolFlowRate; // water condenser volume flow rate (m3/s) - Real64 EvapCondEffectiveness; // evaporative condenser effectiveness - Real64 EvapCondAirVolFlowRate; // air volume flow rate through condenser (m3/s) - Real64 EvapCondPumpPower; // evaporative condenser water pump power (W) - int CoolCombRatioPTR; // index to cooling combination ratio curve pointer - int HeatCombRatioPTR; // index to heating combination ratio curve pointer - int OperatingMode; // VRF Condenser operating mode, 0=off, 1=cooling, 2=heating, 3=HR - Real64 ElecPower; // VRF Condenser power (W) - Real64 ElecCoolingPower; // VRF Condenser power in cooling mode (W) - Real64 ElecHeatingPower; // VRF Condenser power in heating mode (W) - Real64 CoolElecConsumption; // VRF Condenser cooling energy (J) - Real64 HeatElecConsumption; // VRF Condenser heating energy (J) - Real64 CrankCaseHeaterPower; // VRF Condenser crankcase heater power (W) - Real64 CrankCaseHeaterElecConsumption; // VRF Condenser crankcase heater energy (J) - Real64 EvapCondPumpElecPower; // VRF Condenser evaporatively cooled condenser pump power (W) - Real64 EvapCondPumpElecConsumption; // VRF Condenser evaporatively cooled condenser pump elec consumption (J) - Real64 EvapWaterConsumpRate; // VRF Condenser evaporatively cooled condenser water consumption (m3/s) - int HRMaxTempLimitIndex = 0; // Warning message recurring error index - int CoolingMaxTempLimitIndex = 0; // Warning message recurring error index - int HeatingMaxTempLimitIndex = 0; // Warning message recurring error index - Constant::eResource FuelTypeNum = Constant::eResource::Invalid; // Fuel type number - Real64 SUMultiplier; // exponential timer for mode changes - Real64 TUCoolingLoad; // total TU cooling load for each VRF system - Real64 TUHeatingLoad; // total TU heating load for each VRF system - bool SwitchedMode; // used to derate capacity/power when system changes operating mode + DataHeatBalance::RefrigCondenserType CondenserType; // condenser type, evap- or air-cooled + int CondenserNodeNum; // condenser inlet node number + bool SkipCondenserNodeNumCheck; // used to check for duplicate node names + int CondenserOutletNodeNum; // condenser outlet node number + Real64 WaterCondVolFlowRate; // water condenser volume flow rate (m3/s) + Real64 EvapCondEffectiveness; // evaporative condenser effectiveness + Real64 EvapCondAirVolFlowRate; // air volume flow rate through condenser (m3/s) + Real64 EvapCondPumpPower; // evaporative condenser water pump power (W) + int CoolCombRatioPTR; // index to cooling combination ratio curve pointer + int HeatCombRatioPTR; // index to heating combination ratio curve pointer + int OperatingMode; // VRF Condenser operating mode, 0=off, 1=cooling, 2=heating, 3=HR + Real64 ElecPower; // VRF Condenser power (W) + Real64 ElecCoolingPower; // VRF Condenser power in cooling mode (W) + Real64 ElecHeatingPower; // VRF Condenser power in heating mode (W) + Real64 CoolElecConsumption; // VRF Condenser cooling energy (J) + Real64 HeatElecConsumption; // VRF Condenser heating energy (J) + Real64 CrankCaseHeaterPower; // VRF Condenser crankcase heater power (W) + Real64 CrankCaseHeaterElecConsumption; // VRF Condenser crankcase heater energy (J) + Real64 EvapCondPumpElecPower; // VRF Condenser evaporatively cooled condenser pump power (W) + Real64 EvapCondPumpElecConsumption; // VRF Condenser evaporatively cooled condenser pump elec consumption (J) + Real64 EvapWaterConsumpRate; // VRF Condenser evaporatively cooled condenser water consumption (m3/s) + int HRMaxTempLimitIndex = 0; // Warning message recurring error index + int CoolingMaxTempLimitIndex = 0; // Warning message recurring error index + int HeatingMaxTempLimitIndex = 0; // Warning message recurring error index + Constant::eFuel fuel = Constant::eFuel::Invalid; // Fuel type number + Real64 SUMultiplier; // exponential timer for mode changes + Real64 TUCoolingLoad; // total TU cooling load for each VRF system + Real64 TUHeatingLoad; // total TU heating load for each VRF system + bool SwitchedMode; // used to derate capacity/power when system changes operating mode // begin variables used for heat recovery mode Real64 OperatingCOP; // Operating VRF heat pump COP (total TU capacity/total power) Real64 MinOATHeatRecovery; // Minimum outdoor air temperature for heat recovery operation (C) @@ -397,25 +397,25 @@ namespace HVACVariableRefrigerantFlow { CondenserOutletNodeNum(0), WaterCondVolFlowRate(0.0), EvapCondEffectiveness(0.0), EvapCondAirVolFlowRate(0.0), EvapCondPumpPower(0.0), CoolCombRatioPTR(0), HeatCombRatioPTR(0), OperatingMode(0), ElecPower(0.0), ElecCoolingPower(0.0), ElecHeatingPower(0.0), CoolElecConsumption(0.0), HeatElecConsumption(0.0), CrankCaseHeaterPower(0.0), CrankCaseHeaterElecConsumption(0.0), - EvapCondPumpElecPower(0.0), EvapCondPumpElecConsumption(0.0), EvapWaterConsumpRate(0.0), FuelTypeNum(Constant::eResource::Invalid), - SUMultiplier(0.0), TUCoolingLoad(0.0), TUHeatingLoad(0.0), SwitchedMode(false), OperatingCOP(0.0), MinOATHeatRecovery(0.0), - MaxOATHeatRecovery(0.0), HRCAPFTCool(0), HRCAPFTCoolConst(0.9), HRInitialCoolCapFrac(0.5), HRCoolCapTC(0.15), HREIRFTCool(0), - HREIRFTCoolConst(1.1), HRInitialCoolEIRFrac(1.0), HRCoolEIRTC(0.0), HRCAPFTHeat(0), HRCAPFTHeatConst(1.1), HRInitialHeatCapFrac(1.0), - HRHeatCapTC(0.0), HREIRFTHeat(0), HREIRFTHeatConst(1.1), HRInitialHeatEIRFrac(1.0), HRHeatEIRTC(0.0), HRCoolingActive(false), - HRHeatingActive(false), ModeChange(false), HRModeChange(false), HRTimer(0.0), HRTime(0.0), - EvapWaterSupplyMode(EvapWaterSupply::FromMains), EvapWaterSupTankID(0), EvapWaterTankDemandARRID(0), CondensateTankID(0), - CondensateTankSupplyARRID(0), CondensateVdot(0.0), CondensateVol(0.0), BasinHeaterPowerFTempDiff(0.0), BasinHeaterSetPointTemp(0.0), - BasinHeaterPower(0.0), BasinHeaterConsumption(0.0), BasinHeaterSchedulePtr(0), EMSOverrideHPOperatingMode(false), - EMSValueForHPOperatingMode(0.0), HPOperatingModeErrorIndex(0), VRFHeatRec(0.0), VRFHeatEnergyRec(0.0), AlgorithmIUCtrl(1), - CondensingTemp(44.0), CondTempFixed(0.0), CoffEvapCap(1.0), CompActSpeed(0.0), CompMaxDeltaP(0.0), C1Te(0.0), C2Te(0.0), C3Te(0.0), - C1Tc(0.0), C2Tc(0.0), C3Tc(0.0), DiffOUTeTo(5), EffCompInverter(0.95), EvaporatingTemp(6.0), EvapTempFixed(0.0), HROUHexRatio(0.0), - IUEvaporatingTemp(6.0), IUCondensingTemp(44.0), IUEvapTempLow(4.0), IUEvapTempHigh(15.0), IUCondTempLow(42.0), IUCondTempHigh(46.0), - IUCondHeatRate(0.0), IUEvapHeatRate(0.0), Ncomp(0.0), NcompCooling(0.0), NcompHeating(0.0), OUEvapTempLow(-30.0), OUEvapTempHigh(20.0), - OUCondTempLow(30.0), OUCondTempHigh(96.0), OUAirFlowRate(0.0), OUAirFlowRatePerCapcity(0.0), OUCondHeatRate(0.0), OUEvapHeatRate(0.0), - OUFanPower(0.0), RatedEvapCapacity(40000.0), RatedHeatCapacity(0.0), RatedCompPower(14000.0), RatedCompPowerPerCapcity(0.35), - RatedOUFanPower(0.0), RatedOUFanPowerPerCapcity(0.0), RateBFOUEvap(0.45581), RateBFOUCond(0.21900), RefPipDiaSuc(0.0), - RefPipDiaDis(0.0), RefPipLen(0.0), RefPipEquLen(0.0), RefPipHei(0.0), RefPipInsThi(0.0), RefPipInsCon(0.0), SH(0.0), SC(0.0), SCHE(0.0), - SHLow(0.0), SCLow(0.0), SHHigh(0.0), SCHigh(0.0), VRFOperationSimPath(0.0), checkPlantCondTypeOneTime(true) + EvapCondPumpElecPower(0.0), EvapCondPumpElecConsumption(0.0), EvapWaterConsumpRate(0.0), SUMultiplier(0.0), TUCoolingLoad(0.0), + TUHeatingLoad(0.0), SwitchedMode(false), OperatingCOP(0.0), MinOATHeatRecovery(0.0), MaxOATHeatRecovery(0.0), HRCAPFTCool(0), + HRCAPFTCoolConst(0.9), HRInitialCoolCapFrac(0.5), HRCoolCapTC(0.15), HREIRFTCool(0), HREIRFTCoolConst(1.1), HRInitialCoolEIRFrac(1.0), + HRCoolEIRTC(0.0), HRCAPFTHeat(0), HRCAPFTHeatConst(1.1), HRInitialHeatCapFrac(1.0), HRHeatCapTC(0.0), HREIRFTHeat(0), + HREIRFTHeatConst(1.1), HRInitialHeatEIRFrac(1.0), HRHeatEIRTC(0.0), HRCoolingActive(false), HRHeatingActive(false), ModeChange(false), + HRModeChange(false), HRTimer(0.0), HRTime(0.0), EvapWaterSupplyMode(EvapWaterSupply::FromMains), EvapWaterSupTankID(0), + EvapWaterTankDemandARRID(0), CondensateTankID(0), CondensateTankSupplyARRID(0), CondensateVdot(0.0), CondensateVol(0.0), + BasinHeaterPowerFTempDiff(0.0), BasinHeaterSetPointTemp(0.0), BasinHeaterPower(0.0), BasinHeaterConsumption(0.0), + BasinHeaterSchedulePtr(0), EMSOverrideHPOperatingMode(false), EMSValueForHPOperatingMode(0.0), HPOperatingModeErrorIndex(0), + VRFHeatRec(0.0), VRFHeatEnergyRec(0.0), AlgorithmIUCtrl(1), CondensingTemp(44.0), CondTempFixed(0.0), CoffEvapCap(1.0), + CompActSpeed(0.0), CompMaxDeltaP(0.0), C1Te(0.0), C2Te(0.0), C3Te(0.0), C1Tc(0.0), C2Tc(0.0), C3Tc(0.0), DiffOUTeTo(5), + EffCompInverter(0.95), EvaporatingTemp(6.0), EvapTempFixed(0.0), HROUHexRatio(0.0), IUEvaporatingTemp(6.0), IUCondensingTemp(44.0), + IUEvapTempLow(4.0), IUEvapTempHigh(15.0), IUCondTempLow(42.0), IUCondTempHigh(46.0), IUCondHeatRate(0.0), IUEvapHeatRate(0.0), + Ncomp(0.0), NcompCooling(0.0), NcompHeating(0.0), OUEvapTempLow(-30.0), OUEvapTempHigh(20.0), OUCondTempLow(30.0), OUCondTempHigh(96.0), + OUAirFlowRate(0.0), OUAirFlowRatePerCapcity(0.0), OUCondHeatRate(0.0), OUEvapHeatRate(0.0), OUFanPower(0.0), RatedEvapCapacity(40000.0), + RatedHeatCapacity(0.0), RatedCompPower(14000.0), RatedCompPowerPerCapcity(0.35), RatedOUFanPower(0.0), RatedOUFanPowerPerCapcity(0.0), + RateBFOUEvap(0.45581), RateBFOUCond(0.21900), RefPipDiaSuc(0.0), RefPipDiaDis(0.0), RefPipLen(0.0), RefPipEquLen(0.0), RefPipHei(0.0), + RefPipInsThi(0.0), RefPipInsCon(0.0), SH(0.0), SC(0.0), SCHE(0.0), SHLow(0.0), SCLow(0.0), SHHigh(0.0), SCHigh(0.0), + VRFOperationSimPath(0.0), checkPlantCondTypeOneTime(true) { } diff --git a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc index 67bb58b60d3..8c499e3cd4c 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc @@ -78,7 +78,6 @@ namespace EnergyPlus::HeatPumpWaterToWaterCOOLING { // L Lawrie: V1.1.1 (5/20/2003) add meters and energy to several reporting variables // L Lawrie: V1.1.1 (5/20/2003) restructure modules to comply with standard templates // B Griffith, Sept 2010, plant upgrades, general fluid properties -// RE-ENGINEERED na // PURPOSE OF THIS MODULE: // This module simulates a water to Water Heat Pump (Cooling) @@ -87,25 +86,21 @@ namespace EnergyPlus::HeatPumpWaterToWaterCOOLING { // This simulation is based on a set of selected parameters, // Which are obtained using Parameter Estimation technique. -// Using/Aliasing -using namespace DataLoopNode; - // MODULE PARAMETER DEFINITIONS std::string const ModuleCompName("HeatPump:WaterToWater:ParameterEstimation:Cooling"); std::string const ModuleCompNameUC("HEATPUMP:WATERTOWATER:PARAMETERESTIMATION:COOLING"); std::string const GSHPRefrigerant("R22"); // refrigerant name and index -PlantComponent *GshpPeCoolingSpecs::factory(EnergyPlusData &state, const std::string &objectName) +GshpPeCoolingSpecs *GshpPeCoolingSpecs::factory(EnergyPlusData &state, const std::string &objectName) { if (state.dataHPWaterToWaterClg->GetWWHPCoolingInput) { GetGshpInput(state); state.dataHPWaterToWaterClg->GetWWHPCoolingInput = false; } - for (auto &wwhp : state.dataHPWaterToWaterClg->GSHP) { - if (wwhp.Name == objectName) { - return &wwhp; - } - } + auto thisObj = std::find_if(state.dataHPWaterToWaterClg->GSHP.begin(), + state.dataHPWaterToWaterClg->GSHP.end(), + [&objectName](const GshpPeCoolingSpecs &myObj) { return myObj.Name == objectName; }); + if (thisObj != state.dataHPWaterToWaterClg->GSHP.end()) return thisObj; // If we didn't find it, fatal ShowFatalError(state, format("WWHPCoolingFactory: Error getting inputs for heat pump named: {}", objectName)); // LCOV_EXCL_LINE // Shut up the compiler @@ -177,7 +172,6 @@ void GshpPeCoolingSpecs::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused]] void GetGshpInput(EnergyPlusData &state) { // SUBROUTINE INFORMATION: - // AUTHOR: // DATE WRITTEN: April 1998 // PURPOSE OF THIS SUBROUTINE: @@ -188,13 +182,6 @@ void GetGshpInput(EnergyPlusData &state) // GSHPs and begin to fill the // arrays associated with the typeGSHP. - // Using/Aliasing - using BranchNodeConnections::TestCompSet; - using FluidProperties::FindRefrigerant; - using NodeInputManager::GetOnlySingleNode; - using PlantUtilities::RegisterPlantCompDesignFlow; - using PlantUtilities::ScanPlantLoopsForObject; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int GSHPNum; // Gshp counter int NumAlphas; // Number of elements in the alpha array @@ -216,168 +203,163 @@ void GetGshpInput(EnergyPlusData &state) state.dataHPWaterToWaterClg->GSHP.allocate(state.dataHPWaterToWaterClg->NumGSHPs); for (GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterClg->NumGSHPs; ++GSHPNum) { + auto &thisGSHP = state.dataHPWaterToWaterClg->GSHP(GSHPNum); state.dataInputProcessing->inputProcessor->getObjectItem(state, ModuleCompNameUC, GSHPNum, AlphArray, NumAlphas, NumArray, NumNums, IOStat); - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name = AlphArray(1); + thisGSHP.Name = AlphArray(1); - state.dataHPWaterToWaterClg->GSHP(GSHPNum).WWHPPlantTypeOfNum = DataPlant::PlantEquipmentType::HPWaterPECooling; + thisGSHP.WWHPPlantTypeOfNum = DataPlant::PlantEquipmentType::HPWaterPECooling; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).COP = NumArray(1); + thisGSHP.COP = NumArray(1); if (NumArray(1) == 0.0) { - ShowSevereError(state, format("{}:COP = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:COP = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - // zero values for NumArray 3 - 6 checked in input - idd + // zero values for NumArray 0 - 6 checked in input - idd - state.dataHPWaterToWaterClg->GSHP(GSHPNum).NomCap = NumArray(2); + thisGSHP.NomCap = NumArray(2); - state.dataHPWaterToWaterClg->GSHP(GSHPNum).MinPartLoadRat = NumArray(3); + thisGSHP.MinPartLoadRat = NumArray(3); - state.dataHPWaterToWaterClg->GSHP(GSHPNum).MaxPartLoadRat = NumArray(4); + thisGSHP.MaxPartLoadRat = NumArray(4); - state.dataHPWaterToWaterClg->GSHP(GSHPNum).OptPartLoadRat = NumArray(5); + thisGSHP.OptPartLoadRat = NumArray(5); - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideVolFlowRate = NumArray(6); + thisGSHP.LoadSideVolFlowRate = NumArray(6); if (NumArray(6) == 0.0) { - ShowSevereError(state, format("{}:Load Side Vol Flow Rate = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Load Side Vol Flow Rate = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideVolFlowRate = NumArray(7); + thisGSHP.SourceSideVolFlowRate = NumArray(7); if (NumArray(7) == 0.0) { - ShowSevereError(state, format("{}:Source Side Vol Flow Rate = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Source Side Vol Flow Rate = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideUACoeff = NumArray(8); + thisGSHP.LoadSideUACoeff = NumArray(8); if (NumArray(9) == 0.0) { - ShowSevereError(state, format("{}:Load Side Heat Transfer Coefficient = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Load Side Heat Transfer Coefficient = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideUACoeff = NumArray(9); + thisGSHP.SourceSideUACoeff = NumArray(9); if (NumArray(8) == 0.0) { - ShowSevereError(state, format("{}:Source Side Heat Transfer Coefficient = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Source Side Heat Transfer Coefficient = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).CompPistonDisp = NumArray(10); + thisGSHP.CompPistonDisp = NumArray(10); if (NumArray(10) == 0.0) { - ShowSevereError(state, format("{}:Compressor Piston displacement/Stroke = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Compressor Piston displacement/Stroke = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).CompClearanceFactor = NumArray(11); + thisGSHP.CompClearanceFactor = NumArray(11); if (NumArray(11) == 0.0) { - ShowSevereError(state, format("{}:Compressor Clearance Factor = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Compressor Clearance Factor = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).CompSucPressDrop = NumArray(12); + thisGSHP.CompSucPressDrop = NumArray(12); if (NumArray(12) == 0.0) { - ShowSevereError(state, format("{}: Pressure Drop = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}: Pressure Drop = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SuperheatTemp = NumArray(13); + thisGSHP.SuperheatTemp = NumArray(13); if (NumArray(13) == 0.0) { - ShowSevereError(state, format("{}:Source Side SuperHeat = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Source Side SuperHeat = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).PowerLosses = NumArray(14); + thisGSHP.PowerLosses = NumArray(14); if (NumArray(14) == 0.0) { - ShowSevereError(state, format("{}:Compressor Power Loss = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Compressor Power Loss = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LossFactor = NumArray(15); + thisGSHP.LossFactor = NumArray(15); if (NumArray(15) == 0.0) { - ShowSevereError(state, format("{}:Efficiency = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Efficiency = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).HighPressCutoff = NumArray(16); + thisGSHP.HighPressCutoff = NumArray(16); if (NumArray(16) == 0.0) { - state.dataHPWaterToWaterClg->GSHP(GSHPNum).HighPressCutoff = 500000000.0; + thisGSHP.HighPressCutoff = 500000000.0; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LowPressCutoff = NumArray(17); + thisGSHP.LowPressCutoff = NumArray(17); if (NumArray(17) == 0.0) { - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LowPressCutoff = 0.0; + thisGSHP.LowPressCutoff = 0.0; } - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideInletNodeNum = - GetOnlySingleNode(state, - AlphArray(2), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideOutletNodeNum = - GetOnlySingleNode(state, - AlphArray(3), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideInletNodeNum = - GetOnlySingleNode(state, - AlphArray(4), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); - - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideOutletNodeNum = - GetOnlySingleNode(state, - AlphArray(5), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); + thisGSHP.SourceSideInletNodeNum = GetOnlySingleNode(state, + AlphArray(2), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.SourceSideOutletNodeNum = GetOnlySingleNode(state, + AlphArray(3), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideInletNodeNum = GetOnlySingleNode(state, + AlphArray(4), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideOutletNodeNum = GetOnlySingleNode(state, + AlphArray(5), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationCooling, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); // Test node sets - TestCompSet(state, ModuleCompNameUC, AlphArray(1), AlphArray(2), AlphArray(3), "Condenser Water Nodes"); - TestCompSet(state, ModuleCompNameUC, AlphArray(1), AlphArray(4), AlphArray(5), "Chilled Water Nodes"); + BranchNodeConnections::TestCompSet(state, ModuleCompNameUC, thisGSHP.Name, AlphArray(2), AlphArray(3), "Condenser Water Nodes"); + BranchNodeConnections::TestCompSet(state, ModuleCompNameUC, thisGSHP.Name, AlphArray(4), AlphArray(5), "Chilled Water Nodes"); // save the design source side flow rate for use by plant loop sizing algorithms - RegisterPlantCompDesignFlow(state, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideInletNodeNum, - 0.5 * state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideVolFlowRate); - - state.dataHPWaterToWaterClg->GSHP(GSHPNum).QLoad = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).QSource = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Power = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideWaterInletTemp = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideWaterInletTemp = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideWaterOutletTemp = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideWaterOutletTemp = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideWaterMassFlowRate = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideWaterMassFlowRate = 0.0; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).IsOn = false; - state.dataHPWaterToWaterClg->GSHP(GSHPNum).MustRun = true; + PlantUtilities::RegisterPlantCompDesignFlow(state, thisGSHP.SourceSideInletNodeNum, 0.5 * thisGSHP.SourceSideVolFlowRate); + + thisGSHP.QLoad = 0.0; + thisGSHP.QSource = 0.0; + thisGSHP.Power = 0.0; + thisGSHP.LoadSideWaterInletTemp = 0.0; + thisGSHP.SourceSideWaterInletTemp = 0.0; + thisGSHP.LoadSideWaterOutletTemp = 0.0; + thisGSHP.SourceSideWaterOutletTemp = 0.0; + thisGSHP.SourceSideWaterMassFlowRate = 0.0; + thisGSHP.LoadSideWaterMassFlowRate = 0.0; + thisGSHP.IsOn = false; + thisGSHP.MustRun = true; } if (ErrorsFound) { ShowFatalError(state, "Errors Found in getting Gshp input"); } - state.dataHPWaterToWaterClg->GSHPRefrigIndex = FindRefrigerant(state, GSHPRefrigerant); + state.dataHPWaterToWaterClg->GSHPRefrigIndex = FluidProperties::FindRefrigerant(state, GSHPRefrigerant); if (state.dataHPWaterToWaterClg->GSHPRefrigIndex == 0) { ShowFatalError(state, format("Refrigerant for {} not found, should have been={}", ModuleCompName, GSHPRefrigerant)); ShowFatalError(state, format("FluidProperties:* objects for {} must be included in the idf file.", GSHPRefrigerant)); @@ -385,20 +367,21 @@ void GetGshpInput(EnergyPlusData &state) // CurrentModuleObject='HeatPump:WaterToWater:ParameterEstimation:Cooling' for (GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterClg->NumGSHPs; ++GSHPNum) { + auto &thisGSHP = state.dataHPWaterToWaterClg->GSHP(GSHPNum); SetupOutputVariable(state, "Heat Pump Electricity Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Power, + thisGSHP.Power, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Electricity Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Energy, + thisGSHP.Energy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name, + thisGSHP.Name, {}, "Electricity", "Cooling", @@ -408,75 +391,75 @@ void GetGshpInput(EnergyPlusData &state) SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).QLoad, + thisGSHP.QLoad, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).QLoadEnergy, + thisGSHP.QLoadEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).QSource, + thisGSHP.QSource, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).QSourceEnergy, + thisGSHP.QSourceEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Outlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideWaterOutletTemp, + thisGSHP.LoadSideWaterOutletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Inlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideWaterInletTemp, + thisGSHP.LoadSideWaterInletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Outlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideWaterOutletTemp, + thisGSHP.SourceSideWaterOutletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Inlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideWaterInletTemp, + thisGSHP.SourceSideWaterInletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Mass Flow Rate", OutputProcessor::Unit::kg_s, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).LoadSideWaterMassFlowRate, + thisGSHP.LoadSideWaterMassFlowRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Mass Flow Rate", OutputProcessor::Unit::kg_s, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).SourceSideWaterMassFlowRate, + thisGSHP.SourceSideWaterMassFlowRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterClg->GSHP(GSHPNum).Name); + thisGSHP.Name); } } @@ -487,9 +470,6 @@ void GshpPeCoolingSpecs::initialize(EnergyPlusData &state) // AUTHOR: Dan Fisher // DATE WRITTEN: July 2007 - // PURPOSE OF THIS SUBROUTINE: - // initialization - // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("InitGshp"); @@ -551,7 +531,6 @@ void GshpPeCoolingSpecs::initialize(EnergyPlusData &state) void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) { // SUBROUTINE INFORMATION: - // AUTHOR // DATE WRITTEN Sept. 1998 // MODIFIED April 1999 // September 2002, SJR @@ -593,22 +572,12 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 CompSuctionEnth; Real64 CompSuctionDensity; Real64 CompSuctionSatTemp; - std::string ErrString; Real64 DutyFactor; int IterationCount; Real64 CpSourceSide; // local temporary for fluid specific heat Real64 CpLoadSide; // local temporary for fluid specific heat - if (state.dataHPWaterToWaterClg->PrevSimTime != state.dataHPWaterToWaterClg->CurrentSimTime) { - state.dataHPWaterToWaterClg->PrevSimTime = state.dataHPWaterToWaterClg->CurrentSimTime; - } - - // CALCULATE THE SIMULATION TIME - state.dataHPWaterToWaterClg->CurrentSimTime = (state.dataGlobal->DayOfSim - 1) * 24 + state.dataGlobal->HourOfDay - 1 + - (state.dataGlobal->TimeStep - 1) * state.dataGlobal->TimeStepZone + - state.dataHVACGlobal->SysTimeElapsed; - if (MyLoad < 0.0) { this->MustRun = true; this->IsOn = true; diff --git a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.hh b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.hh index 49dd8fc696e..d8f995a4f53 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.hh +++ b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.hh @@ -138,7 +138,7 @@ namespace HeatPumpWaterToWaterCOOLING { virtual ~GshpPeCoolingSpecs() = default; - static PlantComponent *factory(EnergyPlusData &state, const std::string &objectName); + static GshpPeCoolingSpecs *factory(EnergyPlusData &state, const std::string &objectName); void simulate([[maybe_unused]] EnergyPlusData &state, const PlantLocation &calledFromLocation, @@ -173,8 +173,6 @@ struct HeatPumpWaterToWaterCOOLINGData : BaseGlobalStruct int GSHPRefrigIndex = 0; bool GetWWHPCoolingInput = true; Array1D GSHP; - Real64 CurrentSimTime = 0.0; - Real64 PrevSimTime = 0.0; void clear_state() override { @@ -182,8 +180,6 @@ struct HeatPumpWaterToWaterCOOLINGData : BaseGlobalStruct this->GSHPRefrigIndex = 0; this->GetWWHPCoolingInput = true; this->GSHP.deallocate(); - this->CurrentSimTime = 0.0; - this->PrevSimTime = 0.0; } }; diff --git a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc index 0d8e9a1f043..8d1273879e3 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc @@ -79,7 +79,6 @@ namespace EnergyPlus::HeatPumpWaterToWaterHEATING { // L Lawrie: V1.1.1 (5/20/2003) add meters and energy to several reporting variables // L Lawrie: V1.1.1 (5/20/2003) restructure modules to comply with standard templates // B. Griffith, Sept 2010, plant upgrades, generalize fluid properties -// RE-ENGINEERED na // PURPOSE OF THIS MODULE: // This module simulates a water to Water Heat Pump (Heating) @@ -88,25 +87,21 @@ namespace EnergyPlus::HeatPumpWaterToWaterHEATING { // This simulation is based on a set of selected parameters, // Which are obtained using Parameter Estimation technique. -// Using/Aliasing -using namespace DataLoopNode; - // MODULE PARAMETER DEFINITIONS std::string const ModuleCompName("HeatPump:WaterToWater:ParameterEstimation:Heating"); std::string const ModuleCompNameUC("HEATPUMP:WATERTOWATER:PARAMETERESTIMATION:HEATING"); std::string const GSHPRefrigerant("R22"); -PlantComponent *GshpPeHeatingSpecs::factory(EnergyPlusData &state, const std::string &objectName) +GshpPeHeatingSpecs *GshpPeHeatingSpecs::factory(EnergyPlusData &state, const std::string &objectName) { if (state.dataHPWaterToWaterHtg->GetWWHPHeatingInput) { GetGshpInput(state); state.dataHPWaterToWaterHtg->GetWWHPHeatingInput = false; } - for (auto &wwhp : state.dataHPWaterToWaterHtg->GSHP) { - if (wwhp.Name == objectName) { - return &wwhp; - } - } + auto thisObj = std::find_if(state.dataHPWaterToWaterHtg->GSHP.begin(), + state.dataHPWaterToWaterHtg->GSHP.end(), + [&objectName](const GshpPeHeatingSpecs &myObj) { return myObj.Name == objectName; }); + if (thisObj != state.dataHPWaterToWaterHtg->GSHP.end()) return thisObj; // If we didn't find it, fatal ShowFatalError(state, format("WWHPHeatingFactory: Error getting inputs for heat pump named: {}", objectName)); // LCOV_EXCL_LINE // Shut up the compiler @@ -181,7 +176,6 @@ void GshpPeHeatingSpecs::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused]] void GetGshpInput(EnergyPlusData &state) { // SUBROUTINE INFORMATION: - // AUTHOR: // DATE WRITTEN: April 1998 // PURPOSE OF THIS SUBROUTINE: @@ -192,15 +186,7 @@ void GetGshpInput(EnergyPlusData &state) // GSHPs and begin to fill the // arrays associated with the type GSHP. - // Using/Aliasing - using BranchNodeConnections::TestCompSet; - using FluidProperties::FindRefrigerant; - using NodeInputManager::GetOnlySingleNode; - using PlantUtilities::RegisterPlantCompDesignFlow; - using PlantUtilities::ScanPlantLoopsForObject; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int GSHPNum; // Gshp counter int NumAlphas; // Number of elements in the alpha array int NumNums; // Number of elements in the numeric array int IOStat; // IO Status when calling get input subroutine @@ -219,176 +205,172 @@ void GetGshpInput(EnergyPlusData &state) // Allocate Arrays state.dataHPWaterToWaterHtg->GSHP.allocate(state.dataHPWaterToWaterHtg->NumGSHPs); - for (GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterHtg->NumGSHPs; ++GSHPNum) { + for (int GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterHtg->NumGSHPs; ++GSHPNum) { + auto &thisGSHP = state.dataHPWaterToWaterHtg->GSHP(GSHPNum); state.dataInputProcessing->inputProcessor->getObjectItem(state, ModuleCompNameUC, GSHPNum, AlphArray, NumAlphas, NumArray, NumNums, IOStat); - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name = AlphArray(1); + thisGSHP.Name = AlphArray(1); - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).WWHPPlantType = DataPlant::PlantEquipmentType::HPWaterPEHeating; + thisGSHP.WWHPPlantType = DataPlant::PlantEquipmentType::HPWaterPEHeating; - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).COP = NumArray(1); + thisGSHP.COP = NumArray(1); if (NumArray(1) == 0.0) { - ShowSevereError(state, format("{}:COP = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:COP = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } // zero values for NumArray 3 - 6 checked in input - idd - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).NomCap = NumArray(2); + thisGSHP.NomCap = NumArray(2); - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).MinPartLoadRat = NumArray(3); + thisGSHP.MinPartLoadRat = NumArray(3); - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).MaxPartLoadRat = NumArray(4); + thisGSHP.MaxPartLoadRat = NumArray(4); - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).OptPartLoadRat = NumArray(5); + thisGSHP.OptPartLoadRat = NumArray(5); - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideVolFlowRate = NumArray(6); + thisGSHP.LoadSideVolFlowRate = NumArray(6); if (NumArray(6) == 0.0) { - ShowSevereError(state, format("{}:Load Side Flow Rate = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Load Side Flow Rate = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideVolFlowRate = NumArray(7); + thisGSHP.SourceSideVolFlowRate = NumArray(7); if (NumArray(7) == 0.0) { - ShowSevereError(state, format("{}:Source Side Flow Rate = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Source Side Flow Rate = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideUACoeff = NumArray(8); + thisGSHP.LoadSideUACoeff = NumArray(8); if (NumArray(8) == 0.0) { - ShowSevereError(state, format("{}:Load Side Heat Transfer Coeffcient = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Load Side Heat Transfer Coeffcient = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideUACoeff = NumArray(9); + thisGSHP.SourceSideUACoeff = NumArray(9); if (NumArray(9) == 0.0) { - ShowSevereError(state, format("{}:Source Side Heat Transfer Coeffcient = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Source Side Heat Transfer Coeffcient = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).CompPistonDisp = NumArray(10); + thisGSHP.CompPistonDisp = NumArray(10); if (NumArray(10) == 0.0) { - ShowSevereError(state, format("{}:Compressor Piston displacement/Storke = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Compressor Piston displacement/Storke = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).CompClearanceFactor = NumArray(11); + thisGSHP.CompClearanceFactor = NumArray(11); if (NumArray(11) == 0.0) { - ShowSevereError(state, format("{}:Compressor Clearance Factor = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Compressor Clearance Factor = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).CompSucPressDrop = NumArray(12); + thisGSHP.CompSucPressDrop = NumArray(12); if (NumArray(12) == 0.0) { - ShowSevereError(state, format("{}: Pressure Drop = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}: Pressure Drop = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SuperheatTemp = NumArray(13); + thisGSHP.SuperheatTemp = NumArray(13); if (NumArray(13) == 0.0) { - ShowSevereError(state, format("{}:Source Side SuperHeat = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Source Side SuperHeat = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).PowerLosses = NumArray(14); + thisGSHP.PowerLosses = NumArray(14); if (NumArray(14) == 0.0) { - ShowSevereError(state, format("{}:Compressor Power Loss = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Compressor Power Loss = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LossFactor = NumArray(15); + thisGSHP.LossFactor = NumArray(15); if (NumArray(15) == 0.0) { - ShowSevereError(state, format("{}:Efficiency = 0.0, Heatpump={}", ModuleCompName, AlphArray(1))); + ShowSevereError(state, format("{}:Efficiency = 0.0, Heatpump={}", ModuleCompName, thisGSHP.Name)); ErrorsFound = true; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).HighPressCutoff = NumArray(16); + thisGSHP.HighPressCutoff = NumArray(16); if (NumArray(16) == 0.0) { - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).HighPressCutoff = 500000000.0; + thisGSHP.HighPressCutoff = 500000000.0; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LowPressCutoff = NumArray(17); + thisGSHP.LowPressCutoff = NumArray(17); if (NumArray(17) == 0.0) { - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LowPressCutoff = 0.0; + thisGSHP.LowPressCutoff = 0.0; } - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideInletNodeNum = - GetOnlySingleNode(state, - AlphArray(2), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideOutletNodeNum = - GetOnlySingleNode(state, - AlphArray(3), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideInletNodeNum = - GetOnlySingleNode(state, - AlphArray(4), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); - - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideOutletNodeNum = - GetOnlySingleNode(state, - AlphArray(5), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, - AlphArray(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); + thisGSHP.SourceSideInletNodeNum = GetOnlySingleNode(state, + AlphArray(2), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.SourceSideOutletNodeNum = GetOnlySingleNode(state, + AlphArray(3), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideInletNodeNum = GetOnlySingleNode(state, + AlphArray(4), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideOutletNodeNum = GetOnlySingleNode(state, + AlphArray(5), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterParameterEstimationHeating, + thisGSHP.Name, + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); // Test node sets - TestCompSet(state, ModuleCompNameUC, AlphArray(1), AlphArray(2), AlphArray(3), "Condenser Water Nodes"); - TestCompSet(state, ModuleCompNameUC, AlphArray(1), AlphArray(4), AlphArray(5), "Hot Water Nodes"); + BranchNodeConnections::TestCompSet(state, ModuleCompNameUC, thisGSHP.Name, AlphArray(2), AlphArray(3), "Condenser Water Nodes"); + BranchNodeConnections::TestCompSet(state, ModuleCompNameUC, thisGSHP.Name, AlphArray(4), AlphArray(5), "Hot Water Nodes"); // save the design source side flow rate for use by plant loop sizing algorithms - RegisterPlantCompDesignFlow(state, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideInletNodeNum, - 0.5 * state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideVolFlowRate); + PlantUtilities::RegisterPlantCompDesignFlow(state, thisGSHP.SourceSideInletNodeNum, 0.5 * thisGSHP.SourceSideVolFlowRate); } if (ErrorsFound) { ShowFatalError(state, format("Errors Found in getting {} Input", ModuleCompNameUC)); } - state.dataHPWaterToWaterHtg->GSHPRefrigIndex = FindRefrigerant(state, GSHPRefrigerant); + state.dataHPWaterToWaterHtg->GSHPRefrigIndex = FluidProperties::FindRefrigerant(state, GSHPRefrigerant); if (state.dataHPWaterToWaterHtg->GSHPRefrigIndex == 0) { ShowFatalError(state, format("Refrigerant for {} not found, should have been={}", ModuleCompName, GSHPRefrigerant)); } // CurrentModuleObject='HeatPump:WaterToWater:ParameterEstimation:Heating' - for (GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterHtg->NumGSHPs; ++GSHPNum) { + for (int GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterHtg->NumGSHPs; ++GSHPNum) { + auto &thisGSHP = state.dataHPWaterToWaterHtg->GSHP(GSHPNum); SetupOutputVariable(state, "Heat Pump Electricity Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Power, + thisGSHP.Power, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Electricity Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Energy, + thisGSHP.Energy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name, + thisGSHP.Name, {}, "Electricity", "Heating", @@ -398,75 +380,75 @@ void GetGshpInput(EnergyPlusData &state) SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).QLoad, + thisGSHP.QLoad, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).QLoadEnergy, + thisGSHP.QLoadEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).QSource, + thisGSHP.QSource, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).QSourceEnergy, + thisGSHP.QSourceEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Outlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideWaterOutletTemp, + thisGSHP.LoadSideWaterOutletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Inlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideWaterInletTemp, + thisGSHP.LoadSideWaterInletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Outlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideWaterOutletTemp, + thisGSHP.SourceSideWaterOutletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Inlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideWaterInletTemp, + thisGSHP.SourceSideWaterInletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Mass Flow Rate", OutputProcessor::Unit::kg_s, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).LoadSideWaterMassFlowRate, + thisGSHP.LoadSideWaterMassFlowRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Mass Flow Rate", OutputProcessor::Unit::kg_s, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).SourceSideWaterMassFlowRate, + thisGSHP.SourceSideWaterMassFlowRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterHtg->GSHP(GSHPNum).Name); + thisGSHP.Name); } } #pragma clang diagnostic pop @@ -478,9 +460,6 @@ void GshpPeHeatingSpecs::initialize(EnergyPlusData &state) // AUTHOR: Dan Fisher // DATE WRITTEN: July 2007 - // PURPOSE OF THIS SUBROUTINE: - // initialization - // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("InitGshp"); @@ -519,7 +498,7 @@ void GshpPeHeatingSpecs::initialize(EnergyPlusData &state) this->SourceSideDesignMassFlow = this->SourceSideVolFlowRate * rho; PlantUtilities::InitComponentNodes(state, 0.0, this->SourceSideDesignMassFlow, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum); - if (state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint == SensedNodeFlagValue) + if (state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint == DataLoopNode::SensedNodeFlagValue) state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint = 0.0; state.dataLoopNodes->Node(this->SourceSideInletNodeNum).Temp = state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint + 30.0; } @@ -545,12 +524,6 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // September 2002, SJR // RE-ENGINEERED Mar2000 - // Using/Aliasing - Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; - using namespace FluidProperties; - - using PlantUtilities::SetComponentFlowRate; - // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 gamma(1.114); // Expansion Coefficient constexpr Real64 HeatBalTol(0.0005); @@ -569,19 +542,8 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 CompSuctionEnth; Real64 CompSuctionDensity; Real64 CompSuctionSatTemp; - std::string ErrString; Real64 DutyFactor; - // Init Module level Variables - if (state.dataHPWaterToWaterHtg->PrevSimTime != state.dataHPWaterToWaterHtg->CurrentSimTime) { - state.dataHPWaterToWaterHtg->PrevSimTime = state.dataHPWaterToWaterHtg->CurrentSimTime; - } - - // CALCULATE THE SIMULATION TIME - Real64 constexpr hoursInDay = 24.0; - state.dataHPWaterToWaterHtg->CurrentSimTime = (state.dataGlobal->DayOfSim - 1) * hoursInDay + state.dataGlobal->HourOfDay - 1 + - (state.dataGlobal->TimeStep - 1) * state.dataGlobal->TimeStepZone + SysTimeElapsed; - if (MyLoad > 0.0) { this->MustRun = true; this->IsOn = true; @@ -596,9 +558,10 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Set flows if the heat pump is not running if (!this->MustRun) { this->LoadSideWaterMassFlowRate = 0.0; - SetComponentFlowRate(state, this->LoadSideWaterMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); + PlantUtilities::SetComponentFlowRate( + state, this->LoadSideWaterMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); this->SourceSideWaterMassFlowRate = 0.0; - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( state, this->SourceSideWaterMassFlowRate, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum, this->SourcePlantLoc); PlantUtilities::PullCompInterconnectTrigger(state, this->LoadPlantLoc, @@ -613,18 +576,20 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) } else { // the heat pump must run, request design flow this->LoadSideWaterMassFlowRate = this->LoadSideDesignMassFlow; - SetComponentFlowRate(state, this->LoadSideWaterMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); + PlantUtilities::SetComponentFlowRate( + state, this->LoadSideWaterMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); this->SourceSideWaterMassFlowRate = this->SourceSideDesignMassFlow; - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( state, this->SourceSideWaterMassFlowRate, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum, this->SourcePlantLoc); // if there's no flow, turn the "heat pump off" if (this->LoadSideWaterMassFlowRate < DataBranchAirLoopPlant::MassFlowTolerance || this->SourceSideWaterMassFlowRate < DataBranchAirLoopPlant::MassFlowTolerance) { this->LoadSideWaterMassFlowRate = 0.0; - SetComponentFlowRate(state, this->LoadSideWaterMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); + PlantUtilities::SetComponentFlowRate( + state, this->LoadSideWaterMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); this->SourceSideWaterMassFlowRate = 0.0; - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( state, this->SourceSideWaterMassFlowRate, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum, this->SourcePlantLoc); PlantUtilities::PullCompInterconnectTrigger(state, this->LoadPlantLoc, @@ -650,17 +615,17 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 initialQLoad = 0.0; int IterationCount = 0; - Real64 CpSourceSide = GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - this->SourceSideWaterInletTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + Real64 CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + this->SourceSideWaterInletTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); - Real64 CpLoadSide = GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - this->LoadSideWaterInletTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); + Real64 CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + this->LoadSideWaterInletTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); // Determine effectiveness of Source Side (the Evaporator in heating mode) Real64 SourceSideEffect = 1.0 - std::exp(-this->SourceSideUACoeff / (CpSourceSide * this->SourceSideWaterMassFlowRate)); @@ -677,10 +642,10 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 LoadSideTemp = this->LoadSideWaterInletTemp + initialQLoad / (LoadSideEffect * CpLoadSide * this->LoadSideWaterMassFlowRate); // Determine the evaporating and condensing pressures - Real64 SourceSidePressure = - GetSatPressureRefrig(state, GSHPRefrigerant, SourceSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); - Real64 LoadSidePressure = - GetSatPressureRefrig(state, GSHPRefrigerant, LoadSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); + Real64 SourceSidePressure = FluidProperties::GetSatPressureRefrig( + state, GSHPRefrigerant, SourceSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); + Real64 LoadSidePressure = FluidProperties::GetSatPressureRefrig( + state, GSHPRefrigerant, LoadSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); // check cutoff pressures if (SourceSidePressure < this->LowPressCutoff) { @@ -719,31 +684,31 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the Source Side Outlet Enthalpy Real64 qualOne = 1.0; - Real64 SourceSideOutletEnth = GetSatEnthalpyRefrig( + Real64 SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, GSHPRefrigerant, SourceSideTemp, qualOne, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); // Determine Load Side Outlet Enthalpy Real64 qualZero = 0.0; - Real64 LoadSideOutletEnth = GetSatEnthalpyRefrig( + Real64 LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, GSHPRefrigerant, LoadSideTemp, qualZero, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); // Determine superheated temperature of the Source Side outlet/compressor inlet Real64 CompressInletTemp = SourceSideTemp + this->SuperheatTemp; // Determine the enathalpy of the super heated fluid at Source Side outlet - Real64 SuperHeatEnth = GetSupHeatEnthalpyRefrig(state, - GSHPRefrigerant, - CompressInletTemp, - SourceSidePressure, - state.dataHPWaterToWaterHtg->GSHPRefrigIndex, - RoutineNameCompressInletTemp); + Real64 SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, + GSHPRefrigerant, + CompressInletTemp, + SourceSidePressure, + state.dataHPWaterToWaterHtg->GSHPRefrigIndex, + RoutineNameCompressInletTemp); // Determining the suction state of the fluid from inlet state involves interation // Method employed... // Determine the saturated temp at suction pressure, shoot out into the superheated region find the enthalpy // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached - CompSuctionSatTemp = - GetSatTemperatureRefrig(state, GSHPRefrigerant, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSuctionPr); + CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( + state, GSHPRefrigerant, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSuctionPr); Real64 T110 = CompSuctionSatTemp; // Shoot into the super heated region @@ -753,10 +718,10 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) while (true) { CompSuctionTemp = 0.5 * (T110 + T111); - CompSuctionEnth = GetSupHeatEnthalpyRefrig( + CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); if (std::abs(CompSuctionEnth - SuperHeatEnth) / SuperHeatEnth < 0.0001) { - goto LOOP_exit; + break; } if (CompSuctionEnth < SuperHeatEnth) { @@ -765,10 +730,9 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) T111 = CompSuctionTemp; } } - LOOP_exit:; // Determine the Mass flow rate of refrigerant - CompSuctionDensity = GetSupHeatDensityRefrig( + CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); Real64 MassRef = this->CompPistonDisp * CompSuctionDensity * (1.0 + this->CompClearanceFactor - this->CompClearanceFactor * std::pow(DischargePr / SuctionPr, 1.0 / gamma)); diff --git a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.hh b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.hh index 144ac7d0d11..31362bb6868 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.hh +++ b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.hh @@ -135,7 +135,7 @@ namespace HeatPumpWaterToWaterHEATING { virtual ~GshpPeHeatingSpecs() = default; - static PlantComponent *factory(EnergyPlusData &state, const std::string &objectName); + static GshpPeHeatingSpecs *factory(EnergyPlusData &state, const std::string &objectName); void simulate([[maybe_unused]] EnergyPlusData &state, const PlantLocation &calledFromLocation, @@ -170,8 +170,6 @@ struct HeatPumpWaterToWaterHEATINGData : BaseGlobalStruct int NumGSHPs = 0; bool GetWWHPHeatingInput = true; Array1D GSHP; - Real64 CurrentSimTime = 0.0; - Real64 PrevSimTime = 0.0; void clear_state() override { @@ -179,8 +177,6 @@ struct HeatPumpWaterToWaterHEATINGData : BaseGlobalStruct this->NumGSHPs = 0; this->GetWWHPHeatingInput = true; this->GSHP.deallocate(); - this->CurrentSimTime = 0.0; - this->PrevSimTime = 0.0; } }; diff --git a/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc b/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc index 1f13bb57997..9da4ed901d8 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc @@ -78,7 +78,6 @@ namespace EnergyPlus::HeatPumpWaterToWaterSimple { // AUTHOR Kenneth Tang // DATE WRITTEN March 2005 // MODIFIED Brent Griffith, plant upgrades, fluid properties -// RE-ENGINEERED na // PURPOSE OF THIS MODULE: // This module simulates a Water-to-Water Heat Pump Simple (Equation-Fit Model) @@ -96,31 +95,24 @@ namespace EnergyPlus::HeatPumpWaterToWaterSimple { // M.S. Thesis, Department of Mechanical and Aerospace Engineering, // Oklahoma State University. (downloadable from http://www.hvac.okstate.edu/) -// OTHER NOTES: none - -// USE STATEMENTS: -// Use statements for data only modules -// Using/Aliasing -using namespace DataLoopNode; - // MODULE PARAMETER DEFINITIONS -std::string const HPEqFitHeating("HeatPump:WatertoWater:EquationFit:Heating"); -std::string const HPEqFitHeatingUC("HEATPUMP:WATERTOWATER:EQUATIONFIT:HEATING"); -std::string const HPEqFitCooling("HeatPump:WatertoWater:EquationFit:Cooling"); -std::string const HPEqFitCoolingUC("HEATPUMP:WATERTOWATER:EQUATIONFIT:COOLING"); +std::string const HPEqFitHeating = "HeatPump:WatertoWater:EquationFit:Heating"; +std::string const HPEqFitHeatingUC = "HEATPUMP:WATERTOWATER:EQUATIONFIT:HEATING"; +std::string const HPEqFitCooling = "HeatPump:WatertoWater:EquationFit:Cooling"; +std::string const HPEqFitCoolingUC = "HEATPUMP:WATERTOWATER:EQUATIONFIT:COOLING"; -PlantComponent *GshpSpecs::factory(EnergyPlusData &state, DataPlant::PlantEquipmentType wwhp_type, std::string eir_wwhp_name) +GshpSpecs *GshpSpecs::factory(EnergyPlusData &state, DataPlant::PlantEquipmentType wwhp_type, std::string_view eir_wwhp_name) { if (state.dataHPWaterToWaterSimple->GetInputFlag) { GshpSpecs::GetWatertoWaterHPInput(state); state.dataHPWaterToWaterSimple->GetInputFlag = false; } - for (auto &wwhp : state.dataHPWaterToWaterSimple->GSHP) { - if (wwhp.Name == eir_wwhp_name && wwhp.WWHPType == wwhp_type) { - return &wwhp; - } - } + auto thisObj = + std::find_if(state.dataHPWaterToWaterSimple->GSHP.begin(), + state.dataHPWaterToWaterSimple->GSHP.end(), + [&eir_wwhp_name, &wwhp_type](const GshpSpecs &myObj) { return (myObj.Name == eir_wwhp_name && myObj.WWHPType == wwhp_type); }); + if (thisObj != state.dataHPWaterToWaterSimple->GSHP.end()) return thisObj; ShowFatalError(state, format("EquationFit_WWHP factory: Error getting inputs for wwhp named: {}", eir_wwhp_name)); return nullptr; @@ -222,31 +214,19 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) // SUBROUTINE INFORMATION: // AUTHOR Kenneth Tang // DATE WRITTEN March 2005 - // MODIFIED - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Obtain input from IDF and store them in data structures - // Using/Aliasing - using BranchNodeConnections::TestCompSet; - using Curve::GetCurveIndex; - using NodeInputManager::GetOnlySingleNode; - using PlantUtilities::RegisterPlantCompDesignFlow; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int GSHPNum; // GSHP number - int HPNum; // Counter - int NumCoolCoil; // Number of Cooling Coils - int NumHeatCoil; // Number of Heating Coils - int NumAlphas; // Number of elements in the alpha array - int NumNums; // Number of elements in the numeric array - int IOStat; // IO Status when calling get input subroutine - - bool ErrorsFound(false); - - NumCoolCoil = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, HPEqFitCoolingUC); - NumHeatCoil = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, HPEqFitHeatingUC); + int NumAlphas; // Number of elements in the alpha array + int NumNums; // Number of elements in the numeric array + int IOStat; // IO Status when calling get input subroutine + + bool ErrorsFound = false; + + int NumCoolCoil = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, HPEqFitCoolingUC); + int NumHeatCoil = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, HPEqFitHeatingUC); state.dataHPWaterToWaterSimple->NumGSHPs = NumCoolCoil + NumHeatCoil; if (state.dataHPWaterToWaterSimple->NumGSHPs <= 0) { @@ -260,9 +240,9 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) } // Load data structure for cooling coil - for (HPNum = 1; HPNum <= NumCoolCoil; ++HPNum) { + for (int HPNum = 1; HPNum <= NumCoolCoil; ++HPNum) { - GSHPNum = HPNum; + auto &thisGSHP = state.dataHPWaterToWaterSimple->GSHP(HPNum); state.dataInputProcessing->inputProcessor->getObjectItem(state, HPEqFitCoolingUC, @@ -276,144 +256,132 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) state.dataIPShortCut->lAlphaFieldBlanks); GlobalNames::VerifyUniqueInterObjectName( state, state.dataHPWaterToWaterSimple->HeatPumpWaterUniqueNames, state.dataIPShortCut->cAlphaArgs(1), HPEqFitCoolingUC, ErrorsFound); - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).WWHPType = DataPlant::PlantEquipmentType::HPWaterEFCooling; - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name = state.dataIPShortCut->cAlphaArgs(1); - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedLoadVolFlowCool = state.dataIPShortCut->rNumericArgs(1); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedLoadVolFlowCool == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedLoadVolFlowCoolWasAutoSized = true; + thisGSHP.WWHPType = DataPlant::PlantEquipmentType::HPWaterEFCooling; + thisGSHP.Name = state.dataIPShortCut->cAlphaArgs(1); + thisGSHP.RatedLoadVolFlowCool = state.dataIPShortCut->rNumericArgs(1); + if (thisGSHP.RatedLoadVolFlowCool == DataSizing::AutoSize) { + thisGSHP.ratedLoadVolFlowCoolWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedSourceVolFlowCool = state.dataIPShortCut->rNumericArgs(2); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedSourceVolFlowCool == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedSourceVolFlowCoolWasAutoSized = true; + thisGSHP.RatedSourceVolFlowCool = state.dataIPShortCut->rNumericArgs(2); + if (thisGSHP.RatedSourceVolFlowCool == DataSizing::AutoSize) { + thisGSHP.ratedSourceVolFlowCoolWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedCapCool = state.dataIPShortCut->rNumericArgs(3); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedCapCool == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedCapCoolWasAutoSized = true; + thisGSHP.RatedCapCool = state.dataIPShortCut->rNumericArgs(3); + if (thisGSHP.RatedCapCool == DataSizing::AutoSize) { + thisGSHP.ratedCapCoolWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerCool = state.dataIPShortCut->rNumericArgs(4); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerCool == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedPowerCoolWasAutoSized = true; + thisGSHP.RatedPowerCool = state.dataIPShortCut->rNumericArgs(4); + if (thisGSHP.RatedPowerCool == DataSizing::AutoSize) { + thisGSHP.ratedPowerCoolWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).CoolCapCurveIndex = GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(6)); - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).CoolPowCurveIndex = GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(7)); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).CoolCapCurveIndex > 0) { - ErrorsFound |= Curve::CheckCurveDims(state, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).CoolCapCurveIndex, - {4}, - "GetWatertoWaterHPInput", - HPEqFitCoolingUC, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name, - "Cooling Capacity Curve Name"); + thisGSHP.CoolCapCurveIndex = Curve::GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(6)); + thisGSHP.CoolPowCurveIndex = Curve::GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(7)); + if (thisGSHP.CoolCapCurveIndex > 0) { + ErrorsFound |= Curve::CheckCurveDims( + state, thisGSHP.CoolCapCurveIndex, {4}, "GetWatertoWaterHPInput", HPEqFitCoolingUC, thisGSHP.Name, "Cooling Capacity Curve Name"); } - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).CoolPowCurveIndex > 0) { + if (thisGSHP.CoolPowCurveIndex > 0) { ErrorsFound |= Curve::CheckCurveDims(state, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).CoolPowCurveIndex, + thisGSHP.CoolPowCurveIndex, {4}, "GetWatertoWaterHPInput", HPEqFitCoolingUC, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name, + thisGSHP.Name, "Cooling Compressor Power Curve Name"); } if (NumNums > 4) { if (!state.dataIPShortCut->lNumericFieldBlanks(5)) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = state.dataIPShortCut->rNumericArgs(5); + thisGSHP.refCOP = state.dataIPShortCut->rNumericArgs(5); } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = 8.0; + thisGSHP.refCOP = 8.0; } } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = 8.0; + thisGSHP.refCOP = 8.0; } // calculate reference COP if hard sized - if (!state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedPowerCoolWasAutoSized && - !state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedCapCoolWasAutoSized && - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerCool > 0.0) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedCapCool / state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerCool; + if (!thisGSHP.ratedPowerCoolWasAutoSized && !thisGSHP.ratedCapCoolWasAutoSized && thisGSHP.RatedPowerCool > 0.0) { + thisGSHP.refCOP = thisGSHP.RatedCapCool / thisGSHP.RatedPowerCool; } if (NumNums > 5) { if (!state.dataIPShortCut->lNumericFieldBlanks(6)) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).sizFac = state.dataIPShortCut->rNumericArgs(6); + thisGSHP.sizFac = state.dataIPShortCut->rNumericArgs(6); } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).sizFac = 1.0; + thisGSHP.sizFac = 1.0; } } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).sizFac = 1.0; + thisGSHP.sizFac = 1.0; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).SourceSideInletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(2), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).SourceSideOutletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(3), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).LoadSideInletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(4), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); - - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).LoadSideOutletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(5), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); + thisGSHP.SourceSideInletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(2), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.SourceSideOutletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(3), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideInletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(4), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideOutletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(5), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitCooling, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); // Test node sets - TestCompSet(state, - HPEqFitCoolingUC, - state.dataIPShortCut->cAlphaArgs(1), - state.dataIPShortCut->cAlphaArgs(2), - state.dataIPShortCut->cAlphaArgs(3), - "Condenser Water Nodes"); - TestCompSet(state, - HPEqFitCoolingUC, - state.dataIPShortCut->cAlphaArgs(1), - state.dataIPShortCut->cAlphaArgs(4), - state.dataIPShortCut->cAlphaArgs(5), - "Chilled Water Nodes"); + BranchNodeConnections::TestCompSet(state, + HPEqFitCoolingUC, + state.dataIPShortCut->cAlphaArgs(1), + state.dataIPShortCut->cAlphaArgs(2), + state.dataIPShortCut->cAlphaArgs(3), + "Condenser Water Nodes"); + BranchNodeConnections::TestCompSet(state, + HPEqFitCoolingUC, + state.dataIPShortCut->cAlphaArgs(1), + state.dataIPShortCut->cAlphaArgs(4), + state.dataIPShortCut->cAlphaArgs(5), + "Chilled Water Nodes"); if (NumAlphas > 7 && !state.dataIPShortCut->lAlphaFieldBlanks(8)) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionName = state.dataIPShortCut->cAlphaArgs(8); + thisGSHP.companionName = state.dataIPShortCut->cAlphaArgs(8); } // CurrentModuleObject='HeatPump:WatertoWater:EquationFit:Cooling' SetupOutputVariable(state, "Heat Pump Electricity Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportEnergy, + thisGSHP.reportEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name, + thisGSHP.Name, {}, "Electricity", "Cooling", @@ -422,23 +390,24 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportQLoadEnergy, + thisGSHP.reportQLoadEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportQSourceEnergy, + thisGSHP.reportQSourceEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); } // Load data structure for heating coil - for (HPNum = 1; HPNum <= NumHeatCoil; ++HPNum) { + for (int HPNum = 1; HPNum <= NumHeatCoil; ++HPNum) { - GSHPNum = NumCoolCoil + HPNum; + int GSHPNum = NumCoolCoil + HPNum; + auto &thisGSHP = state.dataHPWaterToWaterSimple->GSHP(GSHPNum); state.dataInputProcessing->inputProcessor->getObjectItem(state, HPEqFitHeatingUC, @@ -452,144 +421,132 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) state.dataIPShortCut->lAlphaFieldBlanks); GlobalNames::VerifyUniqueInterObjectName( state, state.dataHPWaterToWaterSimple->HeatPumpWaterUniqueNames, state.dataIPShortCut->cAlphaArgs(1), HPEqFitHeatingUC, ErrorsFound); - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).WWHPType = DataPlant::PlantEquipmentType::HPWaterEFHeating; - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name = state.dataIPShortCut->cAlphaArgs(1); - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedLoadVolFlowHeat = state.dataIPShortCut->rNumericArgs(1); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedLoadVolFlowHeat == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedLoadVolFlowHeatWasAutoSized = true; + thisGSHP.WWHPType = DataPlant::PlantEquipmentType::HPWaterEFHeating; + thisGSHP.Name = state.dataIPShortCut->cAlphaArgs(1); + thisGSHP.RatedLoadVolFlowHeat = state.dataIPShortCut->rNumericArgs(1); + if (thisGSHP.RatedLoadVolFlowHeat == DataSizing::AutoSize) { + thisGSHP.ratedLoadVolFlowHeatWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedSourceVolFlowHeat = state.dataIPShortCut->rNumericArgs(2); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedSourceVolFlowHeat == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedSourceVolFlowHeatWasAutoSized = true; + thisGSHP.RatedSourceVolFlowHeat = state.dataIPShortCut->rNumericArgs(2); + if (thisGSHP.RatedSourceVolFlowHeat == DataSizing::AutoSize) { + thisGSHP.ratedSourceVolFlowHeatWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedCapHeat = state.dataIPShortCut->rNumericArgs(3); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedCapHeat == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedCapHeatWasAutoSized = true; + thisGSHP.RatedCapHeat = state.dataIPShortCut->rNumericArgs(3); + if (thisGSHP.RatedCapHeat == DataSizing::AutoSize) { + thisGSHP.ratedCapHeatWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerHeat = state.dataIPShortCut->rNumericArgs(4); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerHeat == DataSizing::AutoSize) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedPowerHeatWasAutoSized = true; + thisGSHP.RatedPowerHeat = state.dataIPShortCut->rNumericArgs(4); + if (thisGSHP.RatedPowerHeat == DataSizing::AutoSize) { + thisGSHP.ratedPowerHeatWasAutoSized = true; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).HeatCapCurveIndex = GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(6)); - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).HeatPowCurveIndex = GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(7)); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).HeatCapCurveIndex > 0) { - ErrorsFound |= Curve::CheckCurveDims(state, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).HeatCapCurveIndex, - {4}, - "GetWatertoWaterHPInput", - HPEqFitHeatingUC, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name, - "Heating Capacity Curve Name"); + thisGSHP.HeatCapCurveIndex = Curve::GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(6)); + thisGSHP.HeatPowCurveIndex = Curve::GetCurveIndex(state, state.dataIPShortCut->cAlphaArgs(7)); + if (thisGSHP.HeatCapCurveIndex > 0) { + ErrorsFound |= Curve::CheckCurveDims( + state, thisGSHP.HeatCapCurveIndex, {4}, "GetWatertoWaterHPInput", HPEqFitHeatingUC, thisGSHP.Name, "Heating Capacity Curve Name"); } - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).HeatPowCurveIndex > 0) { + if (thisGSHP.HeatPowCurveIndex > 0) { ErrorsFound |= Curve::CheckCurveDims(state, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).HeatPowCurveIndex, + thisGSHP.HeatPowCurveIndex, {4}, "GetWatertoWaterHPInput", HPEqFitHeatingUC, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name, + thisGSHP.Name, "Heating Compressor Power Curve Name"); } if (NumNums > 4) { if (!state.dataIPShortCut->lNumericFieldBlanks(5)) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = state.dataIPShortCut->rNumericArgs(5); + thisGSHP.refCOP = state.dataIPShortCut->rNumericArgs(5); } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = 7.5; + thisGSHP.refCOP = 7.5; } } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = 7.5; + thisGSHP.refCOP = 7.5; } // calculate reference COP if hard sized - if (!state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedPowerHeatWasAutoSized && - !state.dataHPWaterToWaterSimple->GSHP(GSHPNum).ratedCapHeatWasAutoSized && - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerHeat > 0.0) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).refCOP = - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedCapHeat / state.dataHPWaterToWaterSimple->GSHP(GSHPNum).RatedPowerHeat; + if (!thisGSHP.ratedPowerHeatWasAutoSized && !thisGSHP.ratedCapHeatWasAutoSized && thisGSHP.RatedPowerHeat > 0.0) { + thisGSHP.refCOP = thisGSHP.RatedCapHeat / thisGSHP.RatedPowerHeat; } if (NumNums > 5) { if (!state.dataIPShortCut->lNumericFieldBlanks(6)) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).sizFac = state.dataIPShortCut->rNumericArgs(6); + thisGSHP.sizFac = state.dataIPShortCut->rNumericArgs(6); } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).sizFac = 1.0; + thisGSHP.sizFac = 1.0; } } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).sizFac = 1.0; + thisGSHP.sizFac = 1.0; } - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).SourceSideInletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(2), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).SourceSideOutletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(3), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); - - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).LoadSideInletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(4), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Inlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); - - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).LoadSideOutletNodeNum = - GetOnlySingleNode(state, - state.dataIPShortCut->cAlphaArgs(5), - ErrorsFound, - DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, - state.dataIPShortCut->cAlphaArgs(1), - DataLoopNode::NodeFluidType::Water, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Secondary, - ObjectIsNotParent); + thisGSHP.SourceSideInletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(2), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.SourceSideOutletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(3), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Primary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideInletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(4), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); + + thisGSHP.LoadSideOutletNodeNum = GetOnlySingleNode(state, + state.dataIPShortCut->cAlphaArgs(5), + ErrorsFound, + DataLoopNode::ConnectionObjectType::HeatPumpWaterToWaterEquationFitHeating, + state.dataIPShortCut->cAlphaArgs(1), + DataLoopNode::NodeFluidType::Water, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Secondary, + DataLoopNode::ObjectIsNotParent); if (NumAlphas > 7 && !state.dataIPShortCut->lAlphaFieldBlanks(8)) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionName = state.dataIPShortCut->cAlphaArgs(8); + thisGSHP.companionName = state.dataIPShortCut->cAlphaArgs(8); } // Test node sets - TestCompSet(state, - HPEqFitHeatingUC, - state.dataIPShortCut->cAlphaArgs(1), - state.dataIPShortCut->cAlphaArgs(2), - state.dataIPShortCut->cAlphaArgs(3), - "Condenser Water Nodes"); - TestCompSet(state, - HPEqFitHeatingUC, - state.dataIPShortCut->cAlphaArgs(1), - state.dataIPShortCut->cAlphaArgs(4), - state.dataIPShortCut->cAlphaArgs(5), - "Hot Water Nodes"); + BranchNodeConnections::TestCompSet(state, + HPEqFitHeatingUC, + state.dataIPShortCut->cAlphaArgs(1), + state.dataIPShortCut->cAlphaArgs(2), + state.dataIPShortCut->cAlphaArgs(3), + "Condenser Water Nodes"); + BranchNodeConnections::TestCompSet(state, + HPEqFitHeatingUC, + state.dataIPShortCut->cAlphaArgs(1), + state.dataIPShortCut->cAlphaArgs(4), + state.dataIPShortCut->cAlphaArgs(5), + "Hot Water Nodes"); // CurrentModuleObject='HeatPump:WatertoWater:EquationFit:Heating' SetupOutputVariable(state, "Heat Pump Electricity Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportEnergy, + thisGSHP.reportEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name, + thisGSHP.Name, {}, "Electricity", "Heating", @@ -598,32 +555,32 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportQLoadEnergy, + thisGSHP.reportQLoadEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Energy", OutputProcessor::Unit::J, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportQSourceEnergy, + thisGSHP.reportQSourceEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); } // now process companion coils, if any - for (GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterSimple->NumGSHPs; ++GSHPNum) { - if (!state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionName.empty()) { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionIndex = - UtilityRoutines::FindItemInList(state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionName, state.dataHPWaterToWaterSimple->GSHP); - if (state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionIndex == 0) { + for (int GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterSimple->NumGSHPs; ++GSHPNum) { + auto &thisGSHP = state.dataHPWaterToWaterSimple->GSHP(GSHPNum); + if (!thisGSHP.companionName.empty()) { + thisGSHP.companionIndex = UtilityRoutines::FindItemInList(thisGSHP.companionName, state.dataHPWaterToWaterSimple->GSHP); + if (thisGSHP.companionIndex == 0) { ShowSevereError(state, format("GetEquationFitWaterToWater Input: did not find companion heat pump named '{}' in heat pump called {}", - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionName, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name)); + thisGSHP.companionName, + thisGSHP.Name)); ErrorsFound = true; } else { - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).companionIdentified = true; + thisGSHP.companionIdentified = true; } } } @@ -632,71 +589,72 @@ void GshpSpecs::GetWatertoWaterHPInput(EnergyPlusData &state) ShowFatalError(state, "Errors found in processing input for Water to Water Heat Pumps"); } - for (GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterSimple->NumGSHPs; ++GSHPNum) { + for (int GSHPNum = 1; GSHPNum <= state.dataHPWaterToWaterSimple->NumGSHPs; ++GSHPNum) { + auto &thisGSHP = state.dataHPWaterToWaterSimple->GSHP(GSHPNum); // setup output variables SetupOutputVariable(state, "Heat Pump Electricity Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportPower, + thisGSHP.reportPower, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Heat Transfer Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportQLoad, + thisGSHP.reportQLoad, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Heat Transfer Rate", OutputProcessor::Unit::W, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportQSource, + thisGSHP.reportQSource, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Outlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportLoadSideOutletTemp, + thisGSHP.reportLoadSideOutletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Inlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportLoadSideInletTemp, + thisGSHP.reportLoadSideInletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Outlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportSourceSideOutletTemp, + thisGSHP.reportSourceSideOutletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Inlet Temperature", OutputProcessor::Unit::C, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportSourceSideInletTemp, + thisGSHP.reportSourceSideInletTemp, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Load Side Mass Flow Rate", OutputProcessor::Unit::kg_s, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportLoadSideMassFlowRate, + thisGSHP.reportLoadSideMassFlowRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); SetupOutputVariable(state, "Heat Pump Source Side Mass Flow Rate", OutputProcessor::Unit::kg_s, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).reportSourceSideMassFlowRate, + thisGSHP.reportSourceSideMassFlowRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataHPWaterToWaterSimple->GSHP(GSHPNum).Name); + thisGSHP.Name); } } @@ -711,8 +669,6 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, // SUBROUTINE INFORMATION: // AUTHOR Kenneth Tang // DATE WRITTEN March 2005 - // MODIFIED - // RE-ENGINEERED // PURPOSE OF THIS SUBROUTINE: // This subroutine is for initializations of the Water-to-Water HP Simple @@ -729,30 +685,17 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, // M.S. Thesis, Department of Mechanical and Aerospace Engineering, // Oklahoma State University. (downloadable from http://www.hvac.okstate.edu/) - // Using/Aliasing - Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; - using FluidProperties::GetDensityGlycol; - using PlantUtilities::InitComponentNodes; - using PlantUtilities::SetComponentFlowRate; - // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("InitGshp"); // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int LoadSideInletNode; // Load Side Inlet Node - int LoadSideOutletNode; // Load Side Outlet Node - int SourceSideInletNode; // Source Side Inlet Node - int SourceSideOutletNode; // Source Side Outlet Node - - int LoopNum; - DataPlant::LoopSideLocation LoopSideNum; - Real64 rho; // local fluid density + int LoadSideInletNode; // Load Side Inlet Node + int SourceSideInletNode; // Source Side Inlet Node + Real64 rho; // local fluid density this->MustRun = true; // Reset MustRun flag to TRUE LoadSideInletNode = this->LoadSideInletNodeNum; - LoadSideOutletNode = this->LoadSideOutletNodeNum; SourceSideInletNode = this->SourceSideInletNodeNum; - SourceSideOutletNode = this->SourceSideOutletNodeNum; if (this->MyPlantScanFlag) { bool errFlag = false; @@ -790,38 +733,38 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, this->MustRun = true; if (this->WWHPType == DataPlant::PlantEquipmentType::HPWaterEFHeating) { - rho = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); + rho = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); this->LoadSideDesignMassFlow = this->RatedLoadVolFlowHeat * rho; - rho = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - Constant::CWInitConvTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + rho = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + Constant::CWInitConvTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); this->SourceSideDesignMassFlow = this->RatedSourceVolFlowHeat * rho; } else if (this->WWHPType == DataPlant::PlantEquipmentType::HPWaterEFCooling) { - rho = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - Constant::CWInitConvTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); + rho = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + Constant::CWInitConvTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); this->LoadSideDesignMassFlow = this->RatedLoadVolFlowCool * rho; - rho = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + rho = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); this->SourceSideDesignMassFlow = this->RatedSourceVolFlowCool * rho; } - InitComponentNodes(state, 0.0, this->LoadSideDesignMassFlow, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum); + PlantUtilities::InitComponentNodes(state, 0.0, this->LoadSideDesignMassFlow, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum); - InitComponentNodes(state, 0.0, this->SourceSideDesignMassFlow, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum); + PlantUtilities::InitComponentNodes(state, 0.0, this->SourceSideDesignMassFlow, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum); - if (state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint == SensedNodeFlagValue) + if (state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint == DataLoopNode::SensedNodeFlagValue) state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint = 0.0; state.dataLoopNodes->Node(this->SourceSideInletNodeNum).Temp = state.dataLoopNodes->Node(this->SourceSideOutletNodeNum).TempSetPoint + 30; @@ -830,17 +773,6 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, // Reset the environment flag if (!state.dataGlobal->BeginEnvrnFlag) this->MyEnvrnFlag = true; - if (state.dataHPWaterToWaterSimple->PrevSimTime != state.dataHPWaterToWaterSimple->CurrentSimTime) { - state.dataHPWaterToWaterSimple->PrevSimTime = state.dataHPWaterToWaterSimple->CurrentSimTime; - } - - // Calculate the simulation time - state.dataHPWaterToWaterSimple->CurrentSimTime = (state.dataGlobal->DayOfSim - 1) * 24 + (state.dataGlobal->HourOfDay - 1) + - (state.dataGlobal->TimeStep - 1) * state.dataGlobal->TimeStepZone + SysTimeElapsed; - - LoopNum = this->LoadPlantLoc.loopNum; - LoopSideNum = this->LoadPlantLoc.loopSideNum; - if (MyLoad > 0.0 && GSHPTypeNum == DataPlant::PlantEquipmentType::HPWaterEFHeating) { this->MustRun = true; this->IsOn = true; @@ -858,8 +790,9 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, this->reportLoadSideMassFlowRate = 0.0; this->reportSourceSideMassFlowRate = 0.0; - SetComponentFlowRate(state, this->reportLoadSideMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( + state, this->reportLoadSideMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); + PlantUtilities::SetComponentFlowRate( state, this->reportSourceSideMassFlowRate, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum, this->SourcePlantLoc); PlantUtilities::PullCompInterconnectTrigger(state, this->LoadPlantLoc, @@ -873,8 +806,9 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, this->reportLoadSideMassFlowRate = this->LoadSideDesignMassFlow; this->reportSourceSideMassFlowRate = this->SourceSideDesignMassFlow; // now check against and request in plant - SetComponentFlowRate(state, this->reportLoadSideMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( + state, this->reportLoadSideMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); + PlantUtilities::SetComponentFlowRate( state, this->reportSourceSideMassFlowRate, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum, this->SourcePlantLoc); // if there's no flowin one, turn the entire "heat pump off" if (this->reportLoadSideMassFlowRate <= 0.0 || this->reportSourceSideMassFlowRate <= 0.0) { @@ -883,9 +817,9 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, this->reportSourceSideMassFlowRate = 0.0; this->MustRun = false; - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( state, this->reportLoadSideMassFlowRate, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum, this->LoadPlantLoc); - SetComponentFlowRate( + PlantUtilities::SetComponentFlowRate( state, this->reportSourceSideMassFlowRate, this->SourceSideInletNodeNum, this->SourceSideOutletNodeNum, this->SourcePlantLoc); PlantUtilities::PullCompInterconnectTrigger(state, this->LoadPlantLoc, @@ -925,7 +859,7 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) bool errorsFound(false); static constexpr std::string_view RoutineName("sizeCoolingWaterToWaterHP"); Real64 tmpLoadSideVolFlowRate = this->RatedLoadVolFlowCool; - Real64 tmpSourceSideVolFlowRate = this->RatedSourceVolFlowCool; + Real64 tmpSourceSideVolFlowRate; Real64 tmpCoolingCap = this->RatedCapCool; Real64 tmpPowerDraw = this->RatedPowerCool; @@ -1280,7 +1214,7 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) bool errorsFound(false); static constexpr std::string_view RoutineName("sizeHeatingWaterToWaterHP"); Real64 tmpLoadSideVolFlowRate = this->RatedLoadVolFlowHeat; - Real64 tmpSourceSideVolFlowRate = this->RatedSourceVolFlowHeat; + Real64 tmpSourceSideVolFlowRate; Real64 tmpHeatingCap = this->RatedCapHeat; Real64 tmpPowerDraw = this->RatedPowerHeat; @@ -1644,9 +1578,6 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My // Using/Aliasing Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Curve::CurveValue; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: Real64 constexpr CelsiustoKelvin(Constant::KelvinConv); // Conversion from Celsius to Kelvin @@ -1695,26 +1626,26 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My return; } - rhoLoadSide = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - LoadSideInletTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); + rhoLoadSide = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + LoadSideInletTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); - rhoSourceSide = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - SourceSideInletTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + rhoSourceSide = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + SourceSideInletTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); func1 = ((LoadSideInletTemp + CelsiustoKelvin) / Tref); func2 = ((SourceSideInletTemp + CelsiustoKelvin) / Tref); func3 = (LoadSideMassFlowRate / (LoadSideVolFlowRateRated * rhoLoadSide)); func4 = (SourceSideMassFlowRate / (SourceSideVolFlowRateRated * rhoSourceSide)); - QLoad = CoolCapRated * CurveValue(state, this->CoolCapCurveIndex, func1, func2, func3, func4); + QLoad = CoolCapRated * Curve::CurveValue(state, this->CoolCapCurveIndex, func1, func2, func3, func4); - Power = CoolPowerRated * CurveValue(state, this->CoolPowCurveIndex, func1, func2, func3, func4); + Power = CoolPowerRated * Curve::CurveValue(state, this->CoolPowCurveIndex, func1, func2, func3, func4); if ((QLoad <= 0.0 || Power <= 0.0) && !state.dataGlobal->WarmupFlag) { if (QLoad <= 0.0) { @@ -1770,17 +1701,17 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My QSource *= PartLoadRatio; } - CpLoadSide = GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - LoadSideInletTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); + CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + LoadSideInletTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); - CpSourceSide = GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - SourceSideInletTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + SourceSideInletTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); LoadSideOutletTemp = LoadSideInletTemp - QLoad / (LoadSideMassFlowRate * CpLoadSide); SourceSideOutletTemp = SourceSideInletTemp + QSource / (SourceSideMassFlowRate * CpSourceSide); @@ -1813,9 +1744,6 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My // Using/Aliasing Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Curve::CurveValue; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: Real64 const CelsiustoKelvin(Constant::KelvinConv); // Conversion from Celsius to Kelvin @@ -1862,25 +1790,25 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My if (!this->MustRun) { return; } - rhoLoadSide = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - LoadSideInletTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); - - rhoSourceSide = GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - SourceSideInletTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + rhoLoadSide = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + LoadSideInletTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); + + rhoSourceSide = FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + SourceSideInletTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); func1 = ((LoadSideInletTemp + CelsiustoKelvin) / Tref); func2 = ((SourceSideInletTemp + CelsiustoKelvin) / Tref); func3 = (LoadSideMassFlowRate / (LoadSideVolFlowRateRated * rhoLoadSide)); func4 = (SourceSideMassFlowRate / (SourceSideVolFlowRateRated * rhoSourceSide)); - QLoad = HeatCapRated * CurveValue(state, this->HeatCapCurveIndex, func1, func2, func3, func4); - Power = HeatPowerRated * CurveValue(state, this->HeatPowCurveIndex, func1, func2, func3, func4); + QLoad = HeatCapRated * Curve::CurveValue(state, this->HeatCapCurveIndex, func1, func2, func3, func4); + Power = HeatPowerRated * Curve::CurveValue(state, this->HeatPowCurveIndex, func1, func2, func3, func4); if ((QLoad <= 0.0 || Power <= 0.0) && !state.dataGlobal->WarmupFlag) { if (QLoad <= 0.0) { @@ -1936,17 +1864,17 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My QSource *= PartLoadRatio; } - CpLoadSide = GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, - LoadSideInletTemp, - state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, - RoutineName); - - CpSourceSide = GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, - SourceSideInletTemp, - state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, + LoadSideInletTemp, + state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, + RoutineName); + + CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, + SourceSideInletTemp, + state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, + RoutineName); LoadSideOutletTemp = LoadSideInletTemp + QLoad / (LoadSideMassFlowRate * CpLoadSide); SourceSideOutletTemp = SourceSideInletTemp - QSource / (SourceSideMassFlowRate * CpSourceSide); diff --git a/src/EnergyPlus/HeatPumpWaterToWaterSimple.hh b/src/EnergyPlus/HeatPumpWaterToWaterSimple.hh index 30b86aa69ec..3fb9424be01 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterSimple.hh +++ b/src/EnergyPlus/HeatPumpWaterToWaterSimple.hh @@ -161,7 +161,7 @@ namespace HeatPumpWaterToWaterSimple { virtual ~GshpSpecs() = default; - static PlantComponent *factory(EnergyPlusData &state, DataPlant::PlantEquipmentType wwhp_type, std::string eir_wwhp_name); + static GshpSpecs *factory(EnergyPlusData &state, DataPlant::PlantEquipmentType wwhp_type, std::string_view eir_wwhp_name); static void GetWatertoWaterHPInput(EnergyPlusData &state); @@ -209,8 +209,6 @@ struct HeatPumpWaterToWaterSimpleData : BaseGlobalStruct bool GetInputFlag = true; Array1D GSHP; std::unordered_map HeatPumpWaterUniqueNames; - Real64 CurrentSimTime = 0.0; - Real64 PrevSimTime = 0.0; void clear_state() override { @@ -218,8 +216,6 @@ struct HeatPumpWaterToWaterSimpleData : BaseGlobalStruct this->GetInputFlag = true; this->GSHP.deallocate(); this->HeatPumpWaterUniqueNames.clear(); - this->CurrentSimTime = 0.0; - this->PrevSimTime = 0.0; } }; diff --git a/src/EnergyPlus/HeatRecovery.cc b/src/EnergyPlus/HeatRecovery.cc index a6a7c876525..40d0c76f286 100644 --- a/src/EnergyPlus/HeatRecovery.cc +++ b/src/EnergyPlus/HeatRecovery.cc @@ -226,11 +226,11 @@ namespace HeatRecovery { // Uses InputProcessor "Get" routines to obtain data. // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int NumAlphas; // Number of Alphas for each GetObjectItem call - int NumNumbers; // Number of Numbers for each GetObjectItem call - int IOStatus; // Used in GetObjectItem - bool ErrorsFound(false); // Set to true if errors in input, fatal at end of routine - constexpr const char *RoutineName("GetHeatRecoveryInput: "); // include trailing blank space + int NumAlphas; // Number of Alphas for each GetObjectItem call + int NumNumbers; // Number of Numbers for each GetObjectItem call + int IOStatus; // Used in GetObjectItem + bool ErrorsFound(false); // Set to true if errors in input, fatal at end of routine + constexpr std::string_view RoutineName = "GetHeatRecoveryInput: "; // include trailing blank space auto &cCurrentModuleObject = state.dataIPShortCut->cCurrentModuleObject; int NumAirToAirPlateExchs = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "HeatExchanger:AirToAir:FlatPlate"); @@ -268,7 +268,6 @@ namespace HeatRecovery { int const ExchNum = ExchIndex; auto &thisExchanger = state.dataHeatRecovery->ExchCond(ExchNum); thisExchanger.NumericFieldNames.allocate(NumNumbers); - thisExchanger.NumericFieldNames = ""; thisExchanger.NumericFieldNames = state.dataIPShortCut->cNumericFieldNames; GlobalNames::VerifyUniqueInterObjectName(state, @@ -386,7 +385,6 @@ namespace HeatRecovery { int const ExchNum = ExchIndex + NumAirToAirPlateExchs; auto &thisExchanger = state.dataHeatRecovery->ExchCond(ExchNum); thisExchanger.NumericFieldNames.allocate(NumNumbers); - thisExchanger.NumericFieldNames = ""; thisExchanger.NumericFieldNames = state.dataIPShortCut->cNumericFieldNames; GlobalNames::VerifyUniqueInterObjectName(state, @@ -560,7 +558,6 @@ namespace HeatRecovery { int const ExchNum = ExchIndex + NumAirToAirPlateExchs + NumAirToAirGenericExchs; auto &thisExchanger = state.dataHeatRecovery->ExchCond(ExchNum); thisExchanger.NumericFieldNames.allocate(NumNumbers); - thisExchanger.NumericFieldNames = ""; thisExchanger.NumericFieldNames = state.dataIPShortCut->cNumericFieldNames; GlobalNames::VerifyUniqueInterObjectName(state, @@ -675,7 +672,6 @@ namespace HeatRecovery { int const PerfDataNum = PerfDataIndex; auto &thisPerfData = state.dataHeatRecovery->BalDesDehumPerfData(PerfDataNum); thisPerfData.NumericFieldNames.allocate(NumNumbers); - thisPerfData.NumericFieldNames = ""; thisPerfData.NumericFieldNames = state.dataIPShortCut->cNumericFieldNames; thisPerfData.Name = state.dataIPShortCut->cAlphaArgs(1); @@ -1244,11 +1240,9 @@ namespace HeatRecovery { this->MySizeFlag = false; } - bool FatalError = false; - bool LocalWarningError = false; - // Do the Begin Environment initializations if (state.dataGlobal->BeginEnvrnFlag && this->myEnvrnFlag) { + bool FatalError = false; // I believe that all of these initializations should be taking place at the SCFM conditions RhoAir = state.dataEnvrn->StdRhoAir; // RhoAir = PsyRhoAirFnPbTdbW(101325.0,20.0,0.0) do we want standard air density at sea level for generic ERVs per ARI 1060? @@ -1474,6 +1468,7 @@ namespace HeatRecovery { "...use a Setpoint Manager to establish a setpoint at the process air outlet node of the " "desiccant Heat Exchanger if control is desired."); } else { + bool LocalWarningError = false; // need call to EMS to check node CheckIfNodeSetPointManagedByEMS( state, this->SecOutletNode, EMSManager::SPControlType::HumidityRatioMaxSetPoint, LocalWarningError); @@ -1560,7 +1555,7 @@ namespace HeatRecovery { // Obtains flow rates from the system or OA system sizing arrays // SUBROUTINE PARAMETER DEFINITIONS: - constexpr const char *RoutineName("SizeHeatRecovery"); + std::string_view RoutineName = "SizeHeatRecovery"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: std::string SizingString; // input field sizing description @@ -1933,10 +1928,9 @@ namespace HeatRecovery { Real64 AirSidePLR; // Initialize local variables - bool UnitOn = true; // unit on flag - bool FrostControlFlag = false; // unit is in frost control mode when TRUE - Real64 QSensTrans = 0.0; // sensible heat transferred by the heat exchanger [W] - Real64 QTotTrans = 0.0; // total heat (sensible + latent) transferred by the heat exchanger [W] + bool UnitOn = true; // unit on flag + Real64 QSensTrans = 0.0; // sensible heat transferred by the heat exchanger [W] + Real64 QTotTrans = 0.0; // total heat (sensible + latent) transferred by the heat exchanger [W] this->DefrostFraction = 0.0; this->SensEffectiveness = 0.0; @@ -1979,6 +1973,7 @@ namespace HeatRecovery { if (this->NomSupAirVolFlow == 0.0) UnitOn = false; if (UnitOn) { + bool FrostControlFlag = false; // unit is in frost control mode when TRUE // Unit is on. if (present(HXPartLoadRatio) && FanOpMode == DataHVACGlobals::CycFanCycCoil) { if (HXPartLoadRatio > 0) { @@ -2148,7 +2143,7 @@ namespace HeatRecovery { // (supply air stream bypass mass flow rate proportional to ControlFraction except when frost control is active) if (this->ControlToTemperatureSetPoint) { if ((this->SupInTemp - this->SupOutTemp) != 0.0) { - if ((this->SupInTemp < HXTempSetPoint && this->SupOutTemp > HXTempSetPoint) || + if ((this->SupOutTemp > HXTempSetPoint && this->SupInTemp < HXTempSetPoint) || (this->SupInTemp > HXTempSetPoint && this->SupOutTemp < HXTempSetPoint)) { ControlFraction = max(0.0, min(1.0, std::abs((this->SupInTemp - HXTempSetPoint) / (this->SupInTemp - this->SupOutTemp)))); } else if ((this->SupInTemp < this->SupOutTemp && this->SupOutTemp < HXTempSetPoint) || @@ -2448,16 +2443,9 @@ namespace HeatRecovery { Real64 MinHumRatNeeded; // minimum humidity ratio setpoint for balanced desiccant HX [kg/kg] Real64 HXPartLoadRatio; // local heat exchanger part-load ratio Real64 TestSaturationEnthalpy; // enthalpy used to test for regeneration outlet condition over saturation curve (J/kg) - constexpr const char *ThisSubTSat("CalcDesiccantBalancedHeatExch: TSat"); - constexpr const char *ThisSubTSatFullLoadOutTemp("CalcDesiccantBalancedHeatExch: TSat-FullLoadOutTemp"); - constexpr const char *ThisSubTSatFullLoadOutHumRat("CalcDesiccantBalancedHeatExch: TSat-FullLoadOutHumRat"); - constexpr const char *ThisSubSecOutHumRat("CalcDesiccantBalancedHeatExch: SecOutHumRat"); - constexpr const char *ThisSubTestSatSec("CalcDesiccantBalancedHeatExch: TestSatSec"); - constexpr const char *ThisSubTSatSecOutHumRat("CalcDesiccantBalancedHeatExch: TSat-SecOutHumRat"); - - Real64 AverageMassFlowRate; // average of supply (regen) and secondary (process) mass flow rates [kg/s] - bool EconomizerActiveFlag; // local representing the economizer status when PRESENT - bool HighHumCtrlActiveFlag; // local representing high humidity control when PRESENT + Real64 AverageMassFlowRate; // average of supply (regen) and secondary (process) mass flow rates [kg/s] + bool EconomizerActiveFlag; // local representing the economizer status when PRESENT + bool HighHumCtrlActiveFlag; // local representing high humidity control when PRESENT // Initialize local variables UnitOn = true; @@ -2498,6 +2486,9 @@ namespace HeatRecovery { if ((EconomizerActiveFlag || HighHumCtrlActiveFlag) && this->EconoLockOut) UnitOn = false; if (UnitOn) { + constexpr std::string_view ThisSubTSat = "CalcDesiccantBalancedHeatExch: TSat"; + constexpr std::string_view ThisSubSecOutHumRat = "CalcDesiccantBalancedHeatExch: SecOutHumRat"; + constexpr std::string_view ThisSubTestSatSec = "CalcDesiccantBalancedHeatExch: TestSatSec"; Real64 local_SupInMassFlow; // Supply side HX mass flow rate Real64 local_SecInMassFlow; // Secondary side HX mass flow rate @@ -2520,7 +2511,7 @@ namespace HeatRecovery { // Check for balanced flow condition this->CheckForBalancedFlow(state, local_SecInMassFlow, local_SupInMassFlow, FirstHVACIteration); - auto &perf = state.dataHeatRecovery->BalDesDehumPerfData(this->PerfDataIndex); + auto const &perf = state.dataHeatRecovery->BalDesDehumPerfData(this->PerfDataIndex); T_ProcInTemp = state.dataHeatRecovery->FullLoadOutAirTemp; T_ProcInHumRat = state.dataHeatRecovery->FullLoadOutAirHumRat; @@ -2582,6 +2573,8 @@ namespace HeatRecovery { // Reset delta T and delta W such that the model does not allow an outlet condition over saturation TestSaturationEnthalpy = Psychrometrics::PsyHFnTdbW(FullLoadSupOutTemp, FullLoadSupOutHumRat); if (Psychrometrics::PsyTsatFnHPb(state, TestSaturationEnthalpy, state.dataEnvrn->OutBaroPress, ThisSubTSat) > FullLoadSupOutTemp) { + constexpr std::string_view ThisSubTSatFullLoadOutTemp = "CalcDesiccantBalancedHeatExch: TSat-FullLoadOutTemp"; + constexpr std::string_view ThisSubTSatFullLoadOutHumRat = "CalcDesiccantBalancedHeatExch: TSat-FullLoadOutHumRat"; FullLoadSupOutTemp = Psychrometrics::PsyTsatFnHPb(state, TestSaturationEnthalpy, state.dataEnvrn->OutBaroPress, ThisSubTSatFullLoadOutTemp); FullLoadSupOutHumRat = Psychrometrics::PsyWFnTdbH(state, FullLoadSupOutTemp, TestSaturationEnthalpy, ThisSubTSatFullLoadOutHumRat); @@ -2663,6 +2656,7 @@ namespace HeatRecovery { // although this may occur during warmup. This check is included here for consistency. TempSecOutSat = Psychrometrics::PsyTsatFnHPb(state, this->SecOutEnth, state.dataEnvrn->OutBaroPress, ThisSubTestSatSec); if (TempSecOutSat > this->SecOutTemp) { + constexpr std::string_view ThisSubTSatSecOutHumRat = "CalcDesiccantBalancedHeatExch: TSat-SecOutHumRat"; this->SecOutTemp = TempSecOutSat; this->SecOutHumRat = Psychrometrics::PsyWFnTdbH(state, this->SecOutTemp, this->SecOutEnth, ThisSubTSatSecOutHumRat); } diff --git a/src/EnergyPlus/HeatingCoils.cc b/src/EnergyPlus/HeatingCoils.cc index 791eaf13262..c199a9bf08b 100644 --- a/src/EnergyPlus/HeatingCoils.cc +++ b/src/EnergyPlus/HeatingCoils.cc @@ -92,22 +92,11 @@ namespace HeatingCoils { // AUTHOR Richard J. Liesen // DATE WRITTEN May 2000 // MODIFIED Therese Stovall June 2008 to add references to refrigeration condensers - // RE-ENGINEERED na // PURPOSE OF THIS MODULE: // To encapsulate the data and algorithms required to // manage the HeatingCoil System Component - // Using/Aliasing - using namespace DataLoopNode; - using namespace DataHVACGlobals; - using Psychrometrics::PsyCpAirFnW; - using Psychrometrics::PsyHFnTdbW; - using Psychrometrics::PsyRhoAirFnPbTdbW; - using namespace ScheduleManager; - using DXCoils::GetDXCoilIndex; - using RefrigeratedCase::GetRefrigeratedRackIndex; - void SimulateHeatingCoilComponents(EnergyPlusData &state, std::string_view CompName, bool const FirstHVACIteration, @@ -125,8 +114,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Richard Liesen // DATE WRITTEN May 2000 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // This subroutine manages HeatingCoil component simulation. @@ -188,7 +175,7 @@ namespace HeatingCoils { if (present(FanOpMode)) { OpMode = FanOpMode; } else { - OpMode = ContFanCycCoil; + OpMode = DataHVACGlobals::ContFanCycCoil; } if (present(PartLoadRatio)) { @@ -200,7 +187,7 @@ namespace HeatingCoils { if (present(QCoilReq)) { QCoilRequired = QCoilReq; } else { - QCoilRequired = SensedLoadFlagValue; + QCoilRequired = DataLoopNode::SensedLoadFlagValue; } // With the correct CoilNum Initialize @@ -208,10 +195,10 @@ namespace HeatingCoils { // Calculate the Correct HeatingCoil Model with the current CoilNum switch (state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num) { - case Coil_HeatingElectric: { + case DataHVACGlobals::Coil_HeatingElectric: { CalcElectricHeatingCoil(state, CoilNum, QCoilRequired, QCoilActual2, OpMode, PartLoadFrac); } break; - case Coil_HeatingElectric_MultiStage: { + case DataHVACGlobals::Coil_HeatingElectric_MultiStage: { CalcMultiStageElectricHeatingCoil( state, CoilNum, @@ -222,10 +209,10 @@ namespace HeatingCoils { QCoilActual2, state.dataHeatingCoils->CoilIsSuppHeater); // Autodesk:OPTIONAL SpeedRatio, PartLoadRatio, StageNum used without PRESENT check } break; - case Coil_HeatingGasOrOtherFuel: { + case DataHVACGlobals::Coil_HeatingGasOrOtherFuel: { CalcFuelHeatingCoil(state, CoilNum, QCoilRequired, QCoilActual2, OpMode, PartLoadFrac); } break; - case Coil_HeatingGas_MultiStage: { + case DataHVACGlobals::Coil_HeatingGas_MultiStage: { CalcMultiStageGasHeatingCoil(state, CoilNum, SpeedRatio, @@ -233,7 +220,7 @@ namespace HeatingCoils { StageNum, OpMode); // Autodesk:OPTIONAL SpeedRatio, PartLoadRatio, StageNum used without PRESENT check } break; - case Coil_HeatingDesuperheater: { + case DataHVACGlobals::Coil_HeatingDesuperheater: { CalcDesuperheaterHeatingCoil(state, CoilNum, QCoilRequired, QCoilActual2); } break; default: @@ -258,8 +245,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Richard Liesen // DATE WRITTEN May 2000 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Obtains input data for coils and stores it in coil data structures @@ -267,22 +252,10 @@ namespace HeatingCoils { // METHODOLOGY EMPLOYED: // Uses "Get" routines to read in data. - // Using/Aliasing - using BranchNodeConnections::TestCompSet; - using Curve::GetCurveIndex; - using GlobalNames::VerifyUniqueCoilName; - using NodeInputManager::GetOnlySingleNode; - // SUBROUTINE PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetHeatingCoilInput: "); // include trailing blank space + static constexpr std::string_view RoutineName = "GetHeatingCoilInput: "; // include trailing blank space // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int CoilNum; // The HeatingCoil that you are currently loading input into - int ElecCoilNum; - int FuelCoilNum; - int DesuperheaterCoilNum; // Index to desuperheater heating coil - std::string SourceTypeString; // character string used in error message for desuperheating coil - std::string SourceNameString; // character string used in error message for desuperheating coil std::string CurrentModuleObject; // for ease in getting objects Array1D_string Alphas; // Alpha input items for object Array1D_string cAlphaFields; // Alpha field names @@ -344,14 +317,13 @@ namespace HeatingCoils { lNumericBlanks.dimension(state.dataHeatingCoils->MaxNums, true); // Get the data for electric heating coils - for (ElecCoilNum = 1; ElecCoilNum <= state.dataHeatingCoils->NumElecCoil; ++ElecCoilNum) { + for (int ElecCoilNum = 1; ElecCoilNum <= state.dataHeatingCoils->NumElecCoil; ++ElecCoilNum) { - CoilNum = ElecCoilNum; - auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); - auto &heatingCoilNumericFields = state.dataHeatingCoils->HeatingCoilNumericFields(CoilNum); + auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(ElecCoilNum); + auto &heatingCoilNumericFields = state.dataHeatingCoils->HeatingCoilNumericFields(ElecCoilNum); CurrentModuleObject = "Coil:Heating:Electric"; - heatingCoil.ResourceType = Constant::eResource::Electricity; + heatingCoil.FuelType = Constant::eFuel::Electricity; state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -367,18 +339,18 @@ namespace HeatingCoils { cNumericFields); heatingCoilNumericFields.FieldNames.allocate(state.dataHeatingCoils->MaxNums); - heatingCoilNumericFields.FieldNames = ""; heatingCoilNumericFields.FieldNames = cNumericFields; // InputErrorsFound will be set to True if problem was found, left untouched otherwise - VerifyUniqueCoilName(state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); + GlobalNames::VerifyUniqueCoilName( + state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); heatingCoil.Name = Alphas(1); heatingCoil.Schedule = Alphas(2); if (lAlphaBlanks(2)) { heatingCoil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; } else { - heatingCoil.SchedPtr = GetScheduleIndex(state, Alphas(2)); + heatingCoil.SchedPtr = ScheduleManager::GetScheduleIndex(state, Alphas(2)); if (heatingCoil.SchedPtr == 0) { ShowSevereError(state, format("{}{}: Invalid {} entered ={} for {}={}", @@ -394,7 +366,7 @@ namespace HeatingCoils { heatingCoil.HeatingCoilType = "Heating"; heatingCoil.HeatingCoilModel = "Electric"; - heatingCoil.HCoilType_Num = Coil_HeatingElectric; + heatingCoil.HCoilType_Num = DataHVACGlobals::Coil_HeatingElectric; heatingCoil.Efficiency = Numbers(1); heatingCoil.NominalCapacity = Numbers(2); @@ -407,7 +379,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Inlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; errFlag = false; heatingCoil.AirOutletNodeNum = GetOnlySingleNode(state, @@ -418,10 +390,10 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Outlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; - TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); + BranchNodeConnections::TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); errFlag = false; heatingCoil.TempSetPointNodeNum = GetOnlySingleNode(state, @@ -432,7 +404,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Sensor, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; // Setup Report variables for the Electric Coils @@ -478,14 +450,14 @@ namespace HeatingCoils { } // Get the data for electric heating coils - for (ElecCoilNum = 1; ElecCoilNum <= state.dataHeatingCoils->NumElecCoilMultiStage; ++ElecCoilNum) { + for (int ElecCoilNum = 1; ElecCoilNum <= state.dataHeatingCoils->NumElecCoilMultiStage; ++ElecCoilNum) { - CoilNum = state.dataHeatingCoils->NumElecCoil + ElecCoilNum; + int CoilNum = state.dataHeatingCoils->NumElecCoil + ElecCoilNum; auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); auto &heatingCoilNumericFields = state.dataHeatingCoils->HeatingCoilNumericFields(CoilNum); CurrentModuleObject = "Coil:Heating:Electric:MultiStage"; - heatingCoil.ResourceType = Constant::eResource::Electricity; + heatingCoil.FuelType = Constant::eFuel::Electricity; state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -501,17 +473,17 @@ namespace HeatingCoils { cNumericFields); heatingCoilNumericFields.FieldNames.allocate(state.dataHeatingCoils->MaxNums); - heatingCoilNumericFields.FieldNames = ""; heatingCoilNumericFields.FieldNames = cNumericFields; // InputErrorsFound will be set to True if problem was found, left untouched otherwise - VerifyUniqueCoilName(state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); + GlobalNames::VerifyUniqueCoilName( + state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); heatingCoil.Name = Alphas(1); heatingCoil.Schedule = Alphas(2); if (lAlphaBlanks(2)) { heatingCoil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; } else { - heatingCoil.SchedPtr = GetScheduleIndex(state, Alphas(2)); + heatingCoil.SchedPtr = ScheduleManager::GetScheduleIndex(state, Alphas(2)); if (heatingCoil.SchedPtr == 0) { ShowSevereError(state, format("{}{}: Invalid {} entered ={} for {}={}", @@ -527,7 +499,7 @@ namespace HeatingCoils { heatingCoil.HeatingCoilType = "Heating"; heatingCoil.HeatingCoilModel = "ElectricMultiStage"; - heatingCoil.HCoilType_Num = Coil_HeatingElectric_MultiStage; + heatingCoil.HCoilType_Num = DataHVACGlobals::Coil_HeatingElectric_MultiStage; heatingCoil.NumOfStages = static_cast(Numbers(1)); @@ -549,7 +521,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Inlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; errFlag = false; heatingCoil.AirOutletNodeNum = GetOnlySingleNode(state, @@ -560,10 +532,10 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Outlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; - TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); + BranchNodeConnections::TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); errFlag = false; heatingCoil.TempSetPointNodeNum = GetOnlySingleNode(state, @@ -574,7 +546,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Sensor, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; // Setup Report variables for the Electric Coils @@ -620,9 +592,9 @@ namespace HeatingCoils { } // Get the data for for fuel heating coils - for (FuelCoilNum = 1; FuelCoilNum <= state.dataHeatingCoils->NumFuelCoil; ++FuelCoilNum) { + for (int FuelCoilNum = 1; FuelCoilNum <= state.dataHeatingCoils->NumFuelCoil; ++FuelCoilNum) { - CoilNum = state.dataHeatingCoils->NumElecCoil + state.dataHeatingCoils->NumElecCoilMultiStage + FuelCoilNum; + int CoilNum = state.dataHeatingCoils->NumElecCoil + state.dataHeatingCoils->NumElecCoilMultiStage + FuelCoilNum; auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); auto &heatingCoilNumericFields = state.dataHeatingCoils->HeatingCoilNumericFields(CoilNum); @@ -642,17 +614,17 @@ namespace HeatingCoils { cNumericFields); heatingCoilNumericFields.FieldNames.allocate(state.dataHeatingCoils->MaxNums); - heatingCoilNumericFields.FieldNames = ""; heatingCoilNumericFields.FieldNames = cNumericFields; // InputErrorsFound will be set to True if problem was found, left untouched otherwise - VerifyUniqueCoilName(state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); + GlobalNames::VerifyUniqueCoilName( + state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); heatingCoil.Name = Alphas(1); heatingCoil.Schedule = Alphas(2); if (lAlphaBlanks(2)) { heatingCoil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; } else { - heatingCoil.SchedPtr = GetScheduleIndex(state, Alphas(2)); + heatingCoil.SchedPtr = ScheduleManager::GetScheduleIndex(state, Alphas(2)); if (heatingCoil.SchedPtr == 0) { ShowSevereError(state, format("{}{}: Invalid {} entered ={} for {}={}", @@ -668,15 +640,14 @@ namespace HeatingCoils { heatingCoil.HeatingCoilType = "Heating"; heatingCoil.HeatingCoilModel = "Fuel"; - heatingCoil.HCoilType_Num = Coil_HeatingGasOrOtherFuel; - - heatingCoil.ResourceType = static_cast(getEnumerationValue(Constant::eResourceNamesUC, Alphas(3))); - if (!(heatingCoil.ResourceType == Constant::eResource::NaturalGas || heatingCoil.ResourceType == Constant::eResource::Propane || - heatingCoil.ResourceType == Constant::eResource::Diesel || heatingCoil.ResourceType == Constant::eResource::Gasoline || - heatingCoil.ResourceType == Constant::eResource::FuelOilNo1 || heatingCoil.ResourceType == Constant::eResource::FuelOilNo2 || - heatingCoil.ResourceType == Constant::eResource::OtherFuel1 || heatingCoil.ResourceType == Constant::eResource::OtherFuel2 || - heatingCoil.ResourceType == Constant::eResource::Coal) || - heatingCoil.ResourceType == Constant::eResource::Invalid) { + heatingCoil.HCoilType_Num = DataHVACGlobals::Coil_HeatingGasOrOtherFuel; + + heatingCoil.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, Alphas(3))); + if (!(heatingCoil.FuelType == Constant::eFuel::NaturalGas || heatingCoil.FuelType == Constant::eFuel::Propane || + heatingCoil.FuelType == Constant::eFuel::Diesel || heatingCoil.FuelType == Constant::eFuel::Gasoline || + heatingCoil.FuelType == Constant::eFuel::FuelOilNo1 || heatingCoil.FuelType == Constant::eFuel::FuelOilNo2 || + heatingCoil.FuelType == Constant::eFuel::OtherFuel1 || heatingCoil.FuelType == Constant::eFuel::OtherFuel2 || + heatingCoil.FuelType == Constant::eFuel::Coal)) { ShowSevereError(state, format("{}{}: Invalid {} entered ={} for {}={}", RoutineName, @@ -687,7 +658,7 @@ namespace HeatingCoils { Alphas(1))); state.dataHeatingCoils->InputErrorsFound = true; } - std::string const FuelType(Constant::eResourceNames[static_cast(heatingCoil.ResourceType)]); + std::string const sFuelType(Constant::eFuelNames[static_cast(heatingCoil.FuelType)]); heatingCoil.Efficiency = Numbers(1); heatingCoil.NominalCapacity = Numbers(2); @@ -700,7 +671,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Inlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; errFlag = false; heatingCoil.AirOutletNodeNum = GetOnlySingleNode(state, @@ -711,10 +682,10 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Outlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; - TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(4), Alphas(5), "Air Nodes"); + BranchNodeConnections::TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(4), Alphas(5), "Air Nodes"); errFlag = false; heatingCoil.TempSetPointNodeNum = GetOnlySingleNode(state, @@ -725,13 +696,13 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Sensor, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; // parasitic electric load associated with the fuel heating coil heatingCoil.ParasiticElecLoad = Numbers(3); - heatingCoil.PLFCurveIndex = GetCurveIndex(state, Alphas(7)); // convert curve name to number + heatingCoil.PLFCurveIndex = Curve::GetCurveIndex(state, Alphas(7)); // convert curve name to number // parasitic fuel load associated with the gas heating coil (standing pilot light) heatingCoil.ParasiticFuelCapacity = Numbers(4); @@ -759,19 +730,19 @@ namespace HeatingCoils { OutputProcessor::SOVStoreType::Average, heatingCoil.Name); SetupOutputVariable(state, - "Heating Coil " + FuelType + " Energy", + format("Heating Coil {} Energy", sFuelType), OutputProcessor::Unit::J, heatingCoil.FuelUseLoad, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, heatingCoil.Name, {}, - FuelType, + sFuelType, "Heating", {}, "System"); SetupOutputVariable(state, - "Heating Coil " + FuelType + " Rate", + format("Heating Coil {} Rate", sFuelType), OutputProcessor::Unit::W, heatingCoil.FuelUseRate, OutputProcessor::SOVTimeStepType::System, @@ -804,35 +775,35 @@ namespace HeatingCoils { OutputProcessor::SOVStoreType::Average, heatingCoil.Name); SetupOutputVariable(state, - "Heating Coil Ancillary " + FuelType + " Rate", + "Heating Coil Ancillary " + sFuelType + " Rate", OutputProcessor::Unit::W, heatingCoil.ParasiticFuelRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, heatingCoil.Name); SetupOutputVariable(state, - "Heating Coil Ancillary " + FuelType + " Energy", + "Heating Coil Ancillary " + sFuelType + " Energy", OutputProcessor::Unit::J, heatingCoil.ParasiticFuelLoad, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, heatingCoil.Name, {}, - FuelType, + sFuelType, "Heating", {}, "System"); } // Get the data for for gas multistage heating coils - for (FuelCoilNum = 1; FuelCoilNum <= state.dataHeatingCoils->NumGasCoilMultiStage; ++FuelCoilNum) { + for (int FuelCoilNum = 1; FuelCoilNum <= state.dataHeatingCoils->NumGasCoilMultiStage; ++FuelCoilNum) { - CoilNum = state.dataHeatingCoils->NumElecCoil + state.dataHeatingCoils->NumElecCoilMultiStage + state.dataHeatingCoils->NumFuelCoil + - FuelCoilNum; + int CoilNum = state.dataHeatingCoils->NumElecCoil + state.dataHeatingCoils->NumElecCoilMultiStage + state.dataHeatingCoils->NumFuelCoil + + FuelCoilNum; auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); auto &heatingCoilNumericFields = state.dataHeatingCoils->HeatingCoilNumericFields(CoilNum); CurrentModuleObject = "Coil:Heating:Gas:MultiStage"; - heatingCoil.ResourceType = Constant::eResource::NaturalGas; + heatingCoil.FuelType = Constant::eFuel::NaturalGas; state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -848,17 +819,17 @@ namespace HeatingCoils { cNumericFields); heatingCoilNumericFields.FieldNames.allocate(state.dataHeatingCoils->MaxNums); - heatingCoilNumericFields.FieldNames = ""; heatingCoilNumericFields.FieldNames = cNumericFields; // InputErrorsFound will be set to True if problem was found, left untouched otherwise - VerifyUniqueCoilName(state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); + GlobalNames::VerifyUniqueCoilName( + state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); heatingCoil.Name = Alphas(1); heatingCoil.Schedule = Alphas(2); if (lAlphaBlanks(2)) { heatingCoil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; } else { - heatingCoil.SchedPtr = GetScheduleIndex(state, Alphas(2)); + heatingCoil.SchedPtr = ScheduleManager::GetScheduleIndex(state, Alphas(2)); if (heatingCoil.SchedPtr == 0) { ShowSevereError(state, format("{}{}: Invalid {} entered ={} for {}={}", @@ -874,7 +845,7 @@ namespace HeatingCoils { heatingCoil.HeatingCoilType = "Heating"; heatingCoil.HeatingCoilModel = "GasMultiStage"; - heatingCoil.HCoilType_Num = Coil_HeatingGas_MultiStage; + heatingCoil.HCoilType_Num = DataHVACGlobals::Coil_HeatingGas_MultiStage; heatingCoil.ParasiticFuelCapacity = Numbers(1); @@ -900,7 +871,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Inlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; errFlag = false; heatingCoil.AirOutletNodeNum = GetOnlySingleNode(state, @@ -911,10 +882,10 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Outlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; - TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); + BranchNodeConnections::TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); errFlag = false; heatingCoil.TempSetPointNodeNum = GetOnlySingleNode(state, @@ -925,13 +896,13 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Sensor, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; // parasitic electric load associated with the gas heating coil heatingCoil.ParasiticElecLoad = Numbers(10); - heatingCoil.PLFCurveIndex = GetCurveIndex(state, Alphas(6)); // convert curve name to number + heatingCoil.PLFCurveIndex = Curve::GetCurveIndex(state, Alphas(6)); // convert curve name to number // parasitic gas load associated with the gas heating coil (standing pilot light) @@ -1023,14 +994,14 @@ namespace HeatingCoils { } // Get the data for for desuperheater heating coils - for (DesuperheaterCoilNum = 1; DesuperheaterCoilNum <= state.dataHeatingCoils->NumDesuperheaterCoil; ++DesuperheaterCoilNum) { + for (int DesuperheaterCoilNum = 1; DesuperheaterCoilNum <= state.dataHeatingCoils->NumDesuperheaterCoil; ++DesuperheaterCoilNum) { - CoilNum = state.dataHeatingCoils->NumElecCoil + state.dataHeatingCoils->NumElecCoilMultiStage + state.dataHeatingCoils->NumFuelCoil + - state.dataHeatingCoils->NumGasCoilMultiStage + DesuperheaterCoilNum; + int CoilNum = state.dataHeatingCoils->NumElecCoil + state.dataHeatingCoils->NumElecCoilMultiStage + state.dataHeatingCoils->NumFuelCoil + + state.dataHeatingCoils->NumGasCoilMultiStage + DesuperheaterCoilNum; auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); auto &heatingCoilNumericFields = state.dataHeatingCoils->HeatingCoilNumericFields(CoilNum); CurrentModuleObject = "Coil:Heating:Desuperheater"; - heatingCoil.ResourceType = Constant::eResource::Electricity; + heatingCoil.FuelType = Constant::eFuel::Electricity; state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -1046,17 +1017,17 @@ namespace HeatingCoils { cNumericFields); heatingCoilNumericFields.FieldNames.allocate(state.dataHeatingCoils->MaxNums); - heatingCoilNumericFields.FieldNames = ""; heatingCoilNumericFields.FieldNames = cNumericFields; // InputErrorsFound will be set to True if problem was found, left untouched otherwise - VerifyUniqueCoilName(state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); + GlobalNames::VerifyUniqueCoilName( + state, CurrentModuleObject, Alphas(1), state.dataHeatingCoils->InputErrorsFound, CurrentModuleObject + " Name"); heatingCoil.Name = Alphas(1); heatingCoil.Schedule = Alphas(2); if (lAlphaBlanks(2)) { heatingCoil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; } else { - heatingCoil.SchedPtr = GetScheduleIndex(state, Alphas(2)); + heatingCoil.SchedPtr = ScheduleManager::GetScheduleIndex(state, Alphas(2)); if (heatingCoil.SchedPtr == 0) { ShowSevereError(state, format("{}{}: Invalid {} entered ={} for {}={}", @@ -1072,7 +1043,7 @@ namespace HeatingCoils { // check availability schedule for values between 0 and 1 if (heatingCoil.SchedPtr > 0) { - if (!CheckScheduleValueMinMax(state, heatingCoil.SchedPtr, ">=", 0.0, "<=", 1.0)) { + if (!ScheduleManager::CheckScheduleValueMinMax(state, heatingCoil.SchedPtr, ">=", 0.0, "<=", 1.0)) { ShowSevereError(state, format("{} = \"{}\"", CurrentModuleObject, heatingCoil.Name)); ShowContinueError(state, format("Error found in {} = {}", cAlphaFields(2), Alphas(2))); ShowContinueError(state, "Schedule values must be (>=0., <=1.)"); @@ -1082,7 +1053,7 @@ namespace HeatingCoils { heatingCoil.HeatingCoilType = "Heating"; heatingCoil.HeatingCoilModel = "Desuperheater"; - heatingCoil.HCoilType_Num = Coil_HeatingDesuperheater; + heatingCoil.HCoilType_Num = DataHVACGlobals::Coil_HeatingDesuperheater; // HeatingCoil(CoilNum)%Efficiency = Numbers(1) //(Numbers(1)) error limits checked and defaults applied on efficiency after @@ -1097,7 +1068,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Inlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; errFlag = false; heatingCoil.AirOutletNodeNum = GetOnlySingleNode(state, @@ -1108,10 +1079,10 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Outlet, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; - TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); + BranchNodeConnections::TestCompSet(state, CurrentModuleObject, Alphas(1), Alphas(3), Alphas(4), "Air Nodes"); if ((UtilityRoutines::SameString(Alphas(5), "Refrigeration:Condenser:AirCooled")) || (UtilityRoutines::SameString(Alphas(5), "Refrigeration:Condenser:EvaporativeCooled")) || @@ -1146,7 +1117,7 @@ namespace HeatingCoils { // (when zone equipment heating coils are included in the input, the air loop DX equipment has not yet been read in) if (UtilityRoutines::SameString(Alphas(5), "Refrigeration:CompressorRack")) { heatingCoil.ReclaimHeatingSource = HeatObjTypes::COMPRESSORRACK_REFRIGERATEDCASE; - GetRefrigeratedRackIndex( + RefrigeratedCase::GetRefrigeratedRackIndex( state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DataHeatBalance::RefrigSystemType::Rack, DXCoilErrFlag, Alphas(5)); if (heatingCoil.ReclaimHeatingSourceIndexNum > 0) { if (allocated(state.dataHeatBal->HeatReclaimRefrigeratedRack)) { @@ -1154,15 +1125,14 @@ namespace HeatingCoils { state.dataHeatBal->HeatReclaimRefrigeratedRack(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{} \" cannot be over 0.3", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1173,27 +1143,26 @@ namespace HeatingCoils { (UtilityRoutines::SameString(Alphas(5), "Refrigeration:Condenser:EvaporativeCooled")) || (UtilityRoutines::SameString(Alphas(5), "Refrigeration:Condenser:WaterCooled"))) { heatingCoil.ReclaimHeatingSource = HeatObjTypes::CONDENSER_REFRIGERATION; - GetRefrigeratedRackIndex(state, - Alphas(6), - heatingCoil.ReclaimHeatingSourceIndexNum, - DataHeatBalance::RefrigSystemType::Detailed, - DXCoilErrFlag, - Alphas(5)); + RefrigeratedCase::GetRefrigeratedRackIndex(state, + Alphas(6), + heatingCoil.ReclaimHeatingSourceIndexNum, + DataHeatBalance::RefrigSystemType::Detailed, + DXCoilErrFlag, + Alphas(5)); if (heatingCoil.ReclaimHeatingSourceIndexNum > 0) { if (allocated(state.dataHeatBal->HeatReclaimRefrigCondenser)) { DataHeatBalance::HeatReclaimDataBase &HeatReclaim = state.dataHeatBal->HeatReclaimRefrigCondenser(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.9) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{} \" cannot be over 0.9", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1202,22 +1171,21 @@ namespace HeatingCoils { } } else if (UtilityRoutines::SameString(Alphas(5), "Coil:Cooling:DX:SingleSpeed")) { heatingCoil.ReclaimHeatingSource = HeatObjTypes::COIL_DX_COOLING; - GetDXCoilIndex(state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DXCoilErrFlag, Alphas(5)); + DXCoils::GetDXCoilIndex(state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DXCoilErrFlag, Alphas(5)); if (heatingCoil.ReclaimHeatingSourceIndexNum > 0) { if (allocated(state.dataHeatBal->HeatReclaimDXCoil)) { DataHeatBalance::HeatReclaimDataBase &HeatReclaim = state.dataHeatBal->HeatReclaimDXCoil(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{} \" cannot be over 0.3", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1234,15 +1202,14 @@ namespace HeatingCoils { state.dataHeatBal->HeatReclaimVS_DXCoil(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{} \" cannot be over 0.3", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1251,22 +1218,21 @@ namespace HeatingCoils { } } else if (UtilityRoutines::SameString(Alphas(5), "Coil:Cooling:DX:TwoSpeed")) { heatingCoil.ReclaimHeatingSource = HeatObjTypes::COIL_DX_MULTISPEED; - GetDXCoilIndex(state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DXCoilErrFlag, Alphas(5)); + DXCoils::GetDXCoilIndex(state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DXCoilErrFlag, Alphas(5)); if (heatingCoil.ReclaimHeatingSourceIndexNum > 0) { if (allocated(state.dataHeatBal->HeatReclaimDXCoil)) { DataHeatBalance::HeatReclaimDataBase &HeatReclaim = state.dataHeatBal->HeatReclaimDXCoil(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{} \" cannot be over 0.3", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1275,22 +1241,21 @@ namespace HeatingCoils { } } else if (UtilityRoutines::SameString(Alphas(5), "Coil:Cooling:DX:TwoStageWithHumidityControlMode")) { heatingCoil.ReclaimHeatingSource = HeatObjTypes::COIL_DX_MULTIMODE; - GetDXCoilIndex(state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DXCoilErrFlag, Alphas(5)); + DXCoils::GetDXCoilIndex(state, Alphas(6), heatingCoil.ReclaimHeatingSourceIndexNum, DXCoilErrFlag, Alphas(5)); if (heatingCoil.ReclaimHeatingSourceIndexNum > 0) { if (allocated(state.dataHeatBal->HeatReclaimDXCoil)) { DataHeatBalance::HeatReclaimDataBase &HeatReclaim = state.dataHeatBal->HeatReclaimDXCoil(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format(R"({}, "{}" sum of heat reclaim recovery efficiencies from the same source coil: "{} " cannot be over 0.3)", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1309,15 +1274,14 @@ namespace HeatingCoils { state.dataCoilCooingDX->coilCoolingDXs[heatingCoil.ReclaimHeatingSourceIndexNum].reclaimHeat; if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); } HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{}\" cannot be over 0.3", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1345,7 +1309,7 @@ namespace HeatingCoils { DataLoopNode::NodeFluidType::Air, DataLoopNode::ConnectionType::Sensor, NodeInputManager::CompFluidStream::Primary, - ObjectIsNotParent); + DataLoopNode::ObjectIsNotParent); state.dataHeatingCoils->InputErrorsFound = errFlag || state.dataHeatingCoils->InputErrorsFound; // parasitic electric load associated with the desuperheater heating coil @@ -1424,7 +1388,6 @@ namespace HeatingCoils { // AUTHOR Richard J. Liesen // DATE WRITTEN May 2000 // MODIFIED B. Griffith, May 2009 added EMS setpoint check - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // This subroutine is for initializations of the HeatingCoil Components. @@ -1432,21 +1395,15 @@ namespace HeatingCoils { // METHODOLOGY EMPLOYED: // Uses the status flags to trigger initializations. - // Using/Aliasing - using EMSManager::CheckIfNodeSetPointManagedByEMS; - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int CondNum; // Index to refrigeration condenser - int DXCoilNum; // Index to DX cooling coil - auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); if (state.dataHeatingCoils->MyOneTimeFlag) { // initialize the environment and sizing flags - state.dataHeatingCoils->MyEnvrnFlag.allocate(state.dataHeatingCoils->NumHeatingCoils); - state.dataHeatingCoils->MySizeFlag.allocate(state.dataHeatingCoils->NumHeatingCoils); - state.dataHeatingCoils->ShowSingleWarning.allocate(state.dataHeatingCoils->NumHeatingCoils); - state.dataHeatingCoils->MySPTestFlag.allocate(state.dataHeatingCoils->NumHeatingCoils); + Real64 numHeatingCoils = state.dataHeatingCoils->NumHeatingCoils; + state.dataHeatingCoils->MyEnvrnFlag.allocate(numHeatingCoils); + state.dataHeatingCoils->MySizeFlag.allocate(numHeatingCoils); + state.dataHeatingCoils->ShowSingleWarning.allocate(numHeatingCoils); + state.dataHeatingCoils->MySPTestFlag.allocate(numHeatingCoils); state.dataHeatingCoils->MyEnvrnFlag = true; state.dataHeatingCoils->MySizeFlag = true; state.dataHeatingCoils->ShowSingleWarning = true; @@ -1466,8 +1423,8 @@ namespace HeatingCoils { // First set the conditions for the air into the coil model int AirOutletNodeNum = heatingCoil.AirOutletNodeNum; int ControlNodeNum = heatingCoil.TempSetPointNodeNum; - auto &airInletNode = state.dataLoopNodes->Node(heatingCoil.AirInletNodeNum); - auto &airOutletNode = state.dataLoopNodes->Node(AirOutletNodeNum); + auto const &airInletNode = state.dataLoopNodes->Node(heatingCoil.AirInletNodeNum); + auto const &airOutletNode = state.dataLoopNodes->Node(AirOutletNodeNum); heatingCoil.InletAirMassFlowRate = airInletNode.MassFlowRate; heatingCoil.InletAirTemp = airInletNode.Temp; heatingCoil.InletAirHumRat = airInletNode.HumRat; @@ -1483,13 +1440,14 @@ namespace HeatingCoils { if (ControlNodeNum == 0) { heatingCoil.DesiredOutletTemp = 0.0; } else { - auto &controlNode = state.dataLoopNodes->Node(ControlNodeNum); + auto const &controlNode = state.dataLoopNodes->Node(ControlNodeNum); heatingCoil.DesiredOutletTemp = controlNode.TempSetPoint - ((ControlNodeNum == AirOutletNodeNum) ? 0 : (controlNode.Temp - airOutletNode.Temp)); } - if (QCoilRequired == SensedLoadFlagValue && state.dataHeatingCoils->MySPTestFlag(CoilNum) && - heatingCoil.HCoilType_Num != Coil_HeatingElectric_MultiStage && heatingCoil.HCoilType_Num != Coil_HeatingGas_MultiStage) { + if (QCoilRequired == DataLoopNode::SensedLoadFlagValue && state.dataHeatingCoils->MySPTestFlag(CoilNum) && + heatingCoil.HCoilType_Num != DataHVACGlobals::Coil_HeatingElectric_MultiStage && + heatingCoil.HCoilType_Num != DataHVACGlobals::Coil_HeatingGas_MultiStage) { // If the coil is temperature controlled (QCoilReq == -999.0), both a control node and setpoint are required. if (!state.dataGlobal->SysSizingCalc && state.dataHVACGlobal->DoSetPointTest) { @@ -1499,17 +1457,17 @@ namespace HeatingCoils { // 3) TempSetPointNodeNum .GT. 0 and TempSetPoint == SensedNodeFlagValue, this is not correct, missing temperature setpoint // test 2) here (fatal message) if (ControlNodeNum == 0) { - ShowSevereError(state, format("{} \"{}\"", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowSevereError(state, format("{} \"{}\"", DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); ShowContinueError(state, "... Missing control node for heating coil."); ShowContinueError(state, "... enter a control node name in the coil temperature setpoint node field for this heating coil."); ShowContinueError(state, "... use a Setpoint Manager to establish a setpoint at the coil temperature setpoint node."); state.dataHeatingCoils->HeatingCoilFatalError = true; // test 3) here (fatal message) } else { // IF(ControlNode .GT. 0)THEN - auto &controlNode = state.dataLoopNodes->Node(ControlNodeNum); - if (controlNode.TempSetPoint == SensedNodeFlagValue) { + auto const &controlNode = state.dataLoopNodes->Node(ControlNodeNum); + if (controlNode.TempSetPoint == DataLoopNode::SensedNodeFlagValue) { if (!state.dataGlobal->AnyEnergyManagementSystemInModel) { - ShowSevereError(state, format("{} \"{}\"", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowSevereError(state, format("{} \"{}\"", DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); ShowContinueError(state, "... Missing temperature setpoint for heating coil."); ShowContinueError(state, "... use a Setpoint Manager to establish a setpoint at the coil temperature setpoint node."); state.dataHeatingCoils->HeatingCoilFatalError = true; @@ -1517,7 +1475,8 @@ namespace HeatingCoils { CheckIfNodeSetPointManagedByEMS( state, ControlNodeNum, EMSManager::SPControlType::TemperatureSetPoint, state.dataHeatingCoils->HeatingCoilFatalError); if (state.dataHeatingCoils->HeatingCoilFatalError) { - ShowSevereError(state, format("{} \"{}\"", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowSevereError(state, + format("{} \"{}\"", DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); ShowContinueError(state, "... Missing temperature setpoint for heating coil."); ShowContinueError(state, "... use a Setpoint Manager to establish a setpoint at the coil temperature setpoint node."); ShowContinueError(state, "... or use an EMS Actuator to establish a setpoint at the coil temperature setpoint node."); @@ -1537,7 +1496,7 @@ namespace HeatingCoils { // 4) TempSetPointNodeNum .GT. 0 and TempSetPoint /= SensedNodeFlagValue, control node not required if load based control // test 3) and 4) here (warning only) if (ControlNodeNum > 0) { - ShowWarningError(state, format("{} \"{}\"", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowWarningError(state, format("{} \"{}\"", DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); ShowContinueError(state, " The \"Temperature Setpoint Node Name\" input is not required for this heating coil."); ShowContinueError(state, " Leaving the input field \"Temperature Setpoint Node Name\" blank will eliminate this warning."); } @@ -1552,7 +1511,7 @@ namespace HeatingCoils { // Find the heating source index for the desuperheater heating coil if not already found. This occurs when zone heating // equip. exists. (when zone equipment heating coils are included in the input, the air loop DX equipment has not yet been read) // Issue a single warning if the coil is not found and continue the simulation - if (!state.dataHeatingCoils->ValidSourceType(CoilNum) && (heatingCoil.HCoilType_Num == Coil_HeatingDesuperheater) && + if (!state.dataHeatingCoils->ValidSourceType(CoilNum) && (heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingDesuperheater) && state.dataHeatingCoils->ShowSingleWarning(CoilNum)) { ++state.dataHeatingCoils->ValidSourceTypeCounter; switch (heatingCoil.ReclaimHeatingSource) { @@ -1567,14 +1526,13 @@ namespace HeatingCoils { state.dataHeatBal->HeatReclaimRefrigeratedRack(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format(R"({}, "{}" sum of heat reclaim recovery efficiencies from the same source coil: "{}" cannot be over 0.3)", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1585,7 +1543,7 @@ namespace HeatingCoils { } } break; case HeatObjTypes::CONDENSER_REFRIGERATION: { - for (CondNum = 1; CondNum <= state.dataRefrigCase->NumRefrigCondensers; ++CondNum) { + for (int CondNum = 1; CondNum <= state.dataRefrigCase->NumRefrigCondensers; ++CondNum) { if (!UtilityRoutines::SameString(state.dataHeatBal->HeatReclaimRefrigCondenser(CondNum).Name, heatingCoil.ReclaimHeatingCoilName)) continue; heatingCoil.ReclaimHeatingSourceIndexNum = CondNum; @@ -1594,14 +1552,13 @@ namespace HeatingCoils { state.dataHeatBal->HeatReclaimRefrigCondenser(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.9) { ShowSevereError( state, format(R"({}, "{}" sum of heat reclaim recovery efficiencies from the same source coil: "{}" cannot be over 0.9)", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1614,7 +1571,7 @@ namespace HeatingCoils { case HeatObjTypes::COIL_DX_COOLING: case HeatObjTypes::COIL_DX_MULTISPEED: case HeatObjTypes::COIL_DX_MULTIMODE: { - for (DXCoilNum = 1; DXCoilNum <= state.dataDXCoils->NumDXCoils; ++DXCoilNum) { + for (int DXCoilNum = 1; DXCoilNum <= state.dataDXCoils->NumDXCoils; ++DXCoilNum) { if (!UtilityRoutines::SameString(state.dataHeatBal->HeatReclaimDXCoil(DXCoilNum).Name, heatingCoil.ReclaimHeatingCoilName)) continue; heatingCoil.ReclaimHeatingSourceIndexNum = DXCoilNum; @@ -1623,14 +1580,13 @@ namespace HeatingCoils { state.dataHeatBal->HeatReclaimDXCoil(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format(R"({}, "{}" sum of heat reclaim recovery efficiencies from the same source coil: "{}" cannot be over 0.3)", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1641,7 +1597,7 @@ namespace HeatingCoils { } } break; case HeatObjTypes::COIL_DX_VARIABLE_COOLING: { - for (DXCoilNum = 1; DXCoilNum <= state.dataVariableSpeedCoils->NumVarSpeedCoils; ++DXCoilNum) { + for (int DXCoilNum = 1; DXCoilNum <= state.dataVariableSpeedCoils->NumVarSpeedCoils; ++DXCoilNum) { if (!UtilityRoutines::SameString(state.dataHeatBal->HeatReclaimVS_DXCoil(DXCoilNum).Name, heatingCoil.ReclaimHeatingCoilName)) continue; heatingCoil.ReclaimHeatingSourceIndexNum = DXCoilNum; @@ -1650,14 +1606,13 @@ namespace HeatingCoils { state.dataHeatBal->HeatReclaimVS_DXCoil(heatingCoil.ReclaimHeatingSourceIndexNum); if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format(R"({}, "{}" sum of heat reclaim recovery efficiencies from the same source coil: "{}" cannot be over 0.3)", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1671,14 +1626,13 @@ namespace HeatingCoils { state.dataCoilCooingDX->coilCoolingDXs[heatingCoil.ReclaimHeatingSourceIndexNum].reclaimHeat; if (!allocated(HeatReclaim.HVACDesuperheaterReclaimedHeat)) { HeatReclaim.HVACDesuperheaterReclaimedHeat.allocate(state.dataHeatingCoils->NumDesuperheaterCoil); - for (auto &num : HeatReclaim.HVACDesuperheaterReclaimedHeat) - num = 0.0; + std::fill(HeatReclaim.HVACDesuperheaterReclaimedHeat.begin(), HeatReclaim.HVACDesuperheaterReclaimedHeat.end(), 0.0); HeatReclaim.ReclaimEfficiencyTotal += heatingCoil.Efficiency; if (HeatReclaim.ReclaimEfficiencyTotal > 0.3) { ShowSevereError( state, format("{}, \"{}\" sum of heat reclaim recovery efficiencies from the same source coil: \"{}\" cannot be over 0.3", - cAllCoilTypes(heatingCoil.HCoilType_Num), + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name, heatingCoil.ReclaimHeatingCoilName)); } @@ -1721,10 +1675,6 @@ namespace HeatingCoils { // currently only handles single values) and associated string representing that sizing variable. // Sizer functions handles the actual sizing and reporting. - // Using/Aliasing - using namespace DataSizing; - using namespace OutputReportPredefined; - // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("SizeHeatingCoil: "); // include trailing blank space @@ -1732,27 +1682,22 @@ namespace HeatingCoils { std::string CompName; // component name std::string CompType; // component type std::string SizingString; // input field sizing description (e.g., Nominal Capacity) - bool IsAutoSize; // Indicator to autosize for reporting bool bPRINT = true; // TRUE if sizing is reported to output (eio) - bool ThisStageAutoSize; // Indicator to autosize at each stage for reporting Real64 NominalCapacityDes; // Autosized nominal capacity for reporting Real64 NominalCapacityUser; // Hardsized nominal capacity for reporting Real64 TempCap; // autosized capacity of heating coil [W] - int StageNum; // actual stage of multi-stage heating coil - int NumOfStages; // total number of stages of multi-stage heating coil int FieldNum = 2; // IDD numeric field number where input field description is found int NumCoilsSized = 0; // counter used to deallocate temporary string array after all coils have been sized - auto &OASysEqSizing(state.dataSize->OASysEqSizing); auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); - if (heatingCoil.HCoilType_Num == Coil_HeatingElectric_MultiStage) { + if (heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingElectric_MultiStage) { FieldNum = 1 + (heatingCoil.NumOfStages * 2); TempCap = heatingCoil.MSNominalCapacity(heatingCoil.NumOfStages); - } else if (heatingCoil.HCoilType_Num == Coil_HeatingGas_MultiStage) { + } else if (heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingGas_MultiStage) { FieldNum = 1 + (heatingCoil.NumOfStages * 3); TempCap = heatingCoil.MSNominalCapacity(heatingCoil.NumOfStages); - } else if (heatingCoil.HCoilType_Num == Coil_HeatingDesuperheater) { + } else if (heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingDesuperheater) { return; // no autosizable inputs for desupterheater } else { FieldNum = 2; @@ -1765,7 +1710,7 @@ namespace HeatingCoils { state.dataSize->DataCoolCoilCap = 0.0; // global only used for heat pump heating coils, non-HP heating coils are sized with other global variables - if (TempCap == AutoSize) { + if (TempCap == DataSizing::AutoSize) { if (heatingCoil.DesiccantRegenerationCoil) { state.dataSize->DataDesicRegCoil = true; bPRINT = false; @@ -1781,9 +1726,9 @@ namespace HeatingCoils { state.dataSize->DataDesOutletAirTemp = sizerHeatingDesOutletTemp.size(state, DataSizing::AutoSize, ErrorsFound); if (state.dataSize->CurOASysNum > 0) { - OASysEqSizing(state.dataSize->CurOASysNum).AirFlow = true; - OASysEqSizing(state.dataSize->CurOASysNum).AirVolFlow = - state.dataSize->FinalSysSizing(state.dataSize->CurSysNum).DesOutAirVolFlow; + auto &OASysEqSizing(state.dataSize->OASysEqSizing(state.dataSize->CurOASysNum)); + OASysEqSizing.AirFlow = true; + OASysEqSizing.AirVolFlow = state.dataSize->FinalSysSizing(state.dataSize->CurSysNum).DesOutAirVolFlow; } state.dataSize->DataDesicDehumNum = 0; bPRINT = true; @@ -1799,18 +1744,21 @@ namespace HeatingCoils { state.dataSize->DataDesInletAirTemp = 0.0; // reset global data to zero so other heating coils are not state.dataSize->DataDesOutletAirTemp = 0.0; // reset global data to zero so other heating coils are not affected - if (heatingCoil.HCoilType_Num == Coil_HeatingElectric_MultiStage || heatingCoil.HCoilType_Num == Coil_HeatingGas_MultiStage) { + if (heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingGas_MultiStage) { heatingCoil.MSNominalCapacity(heatingCoil.NumOfStages) = TempCap; - IsAutoSize = false; - if (any_eq(heatingCoil.MSNominalCapacity, AutoSize)) { + bool IsAutoSize = false; + int NumOfStages; // total number of stages of multi-stage heating coil + if (any_eq(heatingCoil.MSNominalCapacity, DataSizing::AutoSize)) { IsAutoSize = true; } if (IsAutoSize) { NumOfStages = heatingCoil.NumOfStages; - for (StageNum = NumOfStages - 1; StageNum >= 1; --StageNum) { - FieldNum = 1 + StageNum * ((heatingCoil.HCoilType_Num == Coil_HeatingElectric_MultiStage) ? 2 : 3); + for (int StageNum = NumOfStages - 1; StageNum >= 1; --StageNum) { + bool ThisStageAutoSize = false; + FieldNum = 1 + StageNum * ((heatingCoil.HCoilType_Num == DataHVACGlobals::Coil_HeatingElectric_MultiStage) ? 2 : 3); SizingString = state.dataHeatingCoils->HeatingCoilNumericFields(CoilNum).FieldNames(FieldNum) + " [W]"; - if (heatingCoil.MSNominalCapacity(StageNum) == AutoSize) { + if (heatingCoil.MSNominalCapacity(StageNum) == DataSizing::AutoSize) { ThisStageAutoSize = true; } NominalCapacityDes = TempCap * StageNum / NumOfStages; @@ -1843,7 +1791,7 @@ namespace HeatingCoils { } } else { // No autosize NumOfStages = heatingCoil.NumOfStages; - for (StageNum = NumOfStages - 1; StageNum >= 1; --StageNum) { + for (int StageNum = NumOfStages - 1; StageNum >= 1; --StageNum) { if (heatingCoil.MSNominalCapacity(StageNum) > 0.0) { BaseSizer::reportSizerOutput( state, CompType, CompName, "User-Specified " + SizingString, heatingCoil.MSNominalCapacity(StageNum)); @@ -1851,7 +1799,7 @@ namespace HeatingCoils { } } // Ensure capacity at lower Stage must be lower or equal to the capacity at higher Stage. - for (StageNum = 1; StageNum <= heatingCoil.NumOfStages - 1; ++StageNum) { + for (int StageNum = 1; StageNum <= heatingCoil.NumOfStages - 1; ++StageNum) { if (heatingCoil.MSNominalCapacity(StageNum) > heatingCoil.MSNominalCapacity(StageNum + 1)) { ShowSevereError(state, format("SizeHeatingCoil: {} {}, Stage {} Nominal Capacity ({:.2R} W) must be less than or equal to Stage {} " @@ -1874,34 +1822,40 @@ namespace HeatingCoils { // create predefined report entries switch (heatingCoil.HCoilType_Num) { - case Coil_HeatingElectric: { - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Electric"); - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.NominalCapacity); - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.Efficiency); + case DataHVACGlobals::Coil_HeatingElectric: { + OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Electric"); + OutputReportPredefined::PreDefTableEntry( + state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.NominalCapacity); + OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.Efficiency); } break; - case Coil_HeatingElectric_MultiStage: { - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Electric:MultiStage"); - PreDefTableEntry( + case DataHVACGlobals::Coil_HeatingElectric_MultiStage: { + OutputReportPredefined::PreDefTableEntry( + state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Electric:MultiStage"); + OutputReportPredefined::PreDefTableEntry( state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.MSNominalCapacity(heatingCoil.NumOfStages)); - PreDefTableEntry( + OutputReportPredefined::PreDefTableEntry( state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.MSEfficiency(heatingCoil.NumOfStages)); } break; - case Coil_HeatingGasOrOtherFuel: { - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Fuel"); - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.NominalCapacity); - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.Efficiency); + case DataHVACGlobals::Coil_HeatingGasOrOtherFuel: { + OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Fuel"); + OutputReportPredefined::PreDefTableEntry( + state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.NominalCapacity); + OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.Efficiency); } break; - case Coil_HeatingGas_MultiStage: { - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Gas:MultiStage"); - PreDefTableEntry( + case DataHVACGlobals::Coil_HeatingGas_MultiStage: { + OutputReportPredefined::PreDefTableEntry( + state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Gas:MultiStage"); + OutputReportPredefined::PreDefTableEntry( state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.MSNominalCapacity(heatingCoil.NumOfStages)); - PreDefTableEntry( + OutputReportPredefined::PreDefTableEntry( state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.MSEfficiency(heatingCoil.NumOfStages)); } break; - case Coil_HeatingDesuperheater: { - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Desuperheater"); - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.NominalCapacity); - PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.Efficiency); + case DataHVACGlobals::Coil_HeatingDesuperheater: { + OutputReportPredefined::PreDefTableEntry( + state, state.dataOutRptPredefined->pdchHeatCoilType, heatingCoil.Name, "Coil:Heating:Desuperheater"); + OutputReportPredefined::PreDefTableEntry( + state, state.dataOutRptPredefined->pdchHeatCoilNomCap, heatingCoil.Name, heatingCoil.NominalCapacity); + OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchHeatCoilNomEff, heatingCoil.Name, heatingCoil.Efficiency); } break; default: break; @@ -1920,33 +1874,22 @@ namespace HeatingCoils { // AUTHOR Rich Liesen // DATE WRITTEN May 2000 // MODIFIED Jul. 2016, R. Zhang, Applied the coil supply air temperature sensor offset - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Simulates a simple Electric heating coil with an efficiency - // Using/Aliasing - using DataHVACGlobals::TempControlTol; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 AirMassFlow; // [kg/sec] - Real64 TempAirIn; // [C] Real64 TempAirOut; // [C] - Real64 Win; - Real64 Effic; - Real64 CapacitanceAir; Real64 HeatingCoilLoad; Real64 QCoilCap; - Real64 TempSetPoint; - int Control; auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); - Effic = heatingCoil.Efficiency; - TempAirIn = heatingCoil.InletAirTemp; - Win = heatingCoil.InletAirHumRat; - Control = heatingCoil.Control; - TempSetPoint = heatingCoil.DesiredOutletTemp; + Real64 Effic = heatingCoil.Efficiency; + Real64 TempAirIn = heatingCoil.InletAirTemp; + Real64 Win = heatingCoil.InletAirHumRat; + Real64 TempSetPoint = heatingCoil.DesiredOutletTemp; // If there is a fault of coil SAT Sensor if (heatingCoil.FaultyCoilSATFlag && (!state.dataGlobal->WarmupFlag) && (!state.dataGlobal->DoingSizing) && @@ -1959,7 +1902,7 @@ namespace HeatingCoils { } // adjust mass flow rates for cycling fan cycling coil operation - if (FanOpMode == CycFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) { if (PartLoadRatio > 0.0) { AirMassFlow = heatingCoil.InletAirMassFlowRate / PartLoadRatio; QCoilReq /= PartLoadRatio; @@ -1970,15 +1913,15 @@ namespace HeatingCoils { AirMassFlow = heatingCoil.InletAirMassFlowRate; } - CapacitanceAir = PsyCpAirFnW(Win) * AirMassFlow; + Real64 CapacitanceAir = Psychrometrics::PsyCpAirFnW(Win) * AirMassFlow; // If the coil is operating there should be some heating capacitance // across the coil, so do the simulation. If not set outlet to inlet and no load. // Also the coil has to be scheduled to be available. // Control output to meet load QCoilReq (QCoilReq is passed in if load controlled, otherwise QCoilReq=-999) - if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && - (QCoilReq > 0.0)) { + if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && + (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq > 0.0)) { // check to see if the Required heating capacity is greater than the user specified capacity. if (QCoilReq > heatingCoil.NominalCapacity) { @@ -1994,8 +1937,9 @@ namespace HeatingCoils { heatingCoil.ElecUseLoad = HeatingCoilLoad / Effic; // Control coil output to meet a setpoint temperature. - } else if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && - (QCoilReq == SensedLoadFlagValue) && (std::abs(TempSetPoint - TempAirIn) > TempControlTol)) { + } else if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && + (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq == DataLoopNode::SensedLoadFlagValue) && + (std::abs(TempSetPoint - TempAirIn) > DataHVACGlobals::TempControlTol)) { QCoilCap = CapacitanceAir * (TempSetPoint - TempAirIn); // check to see if setpoint above enetering temperature. If not, set @@ -2024,7 +1968,7 @@ namespace HeatingCoils { heatingCoil.ElecUseLoad = 0.0; } - if (FanOpMode == CycFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) { heatingCoil.ElecUseLoad *= PartLoadRatio; HeatingCoilLoad *= PartLoadRatio; } @@ -2038,7 +1982,7 @@ namespace HeatingCoils { heatingCoil.OutletAirHumRat = heatingCoil.InletAirHumRat; heatingCoil.OutletAirMassFlowRate = heatingCoil.InletAirMassFlowRate; // Set the outlet enthalpys for air and Heating - heatingCoil.OutletAirEnthalpy = PsyHFnTdbW(heatingCoil.OutletAirTemp, heatingCoil.OutletAirHumRat); + heatingCoil.OutletAirEnthalpy = Psychrometrics::PsyHFnTdbW(heatingCoil.OutletAirTemp, heatingCoil.OutletAirHumRat); QCoilActual = HeatingCoilLoad; if (std::abs(heatingCoil.NominalCapacity) < 1.e-8) { @@ -2071,8 +2015,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Chandan Sharma, FSEC // DATE WRITTEN January 2013 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Calculates the air-side performance and electrical energy use of multistage electric heating coil. @@ -2083,23 +2025,12 @@ namespace HeatingCoils { // the performance at high stage and that at low stage. If the output needed is below // that produced at low stage, the coil cycles between off and low stage. - // Using/Aliasing - using Curve::CurveValue; - using Psychrometrics::PsyRhFnTdbWPb; - using Psychrometrics::PsyTdbFnHW; - using Psychrometrics::PsyTsatFnHPb; - using Psychrometrics::PsyWFnTdbH; - // SUBROUTINE PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("CalcMultiStageElectricHeatingCoil"); - static constexpr std::string_view RoutineNameAverageLoad("CalcMultiStageElectricHeatingCoil:Averageload"); - static constexpr std::string_view RoutineNameFullLoad("CalcMultiStageElectricHeatingCoil:fullload"); + static constexpr std::string_view RoutineName = "CalcMultiStageElectricHeatingCoil"; + static constexpr std::string_view RoutineNameAverageLoad = "CalcMultiStageElectricHeatingCoil:Averageload"; + static constexpr std::string_view RoutineNameFullLoad = "CalcMultiStageElectricHeatingCoil:fullload"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - Real64 AirMassFlow; // dry air mass flow rate through coil [kg/s] - Real64 InletAirDryBulbTemp; // inlet air dry bulb temperature [C] - Real64 InletAirEnthalpy; // inlet air enthalpy [J/kg] - Real64 InletAirHumRat; // inlet air humidity ratio [kg/kg] Real64 OutletAirEnthalpy; // outlet air enthalpy [J/kg] Real64 OutletAirHumRat; // outlet air humidity ratio [kg/kg] Real64 TotCapHS; // total capacity at high stage [W] @@ -2107,7 +2038,6 @@ namespace HeatingCoils { Real64 TotCap; // total capacity at current stage [W] Real64 EffHS; // total capacity at high stage [W] Real64 EffLS; // total capacity at low stage [W] - Real64 OutdoorPressure; // Outdoor barometric pressure at condenser (Pa) int StageNumHS; // High stage number int StageNumLS; // Low stage number Real64 FullLoadOutAirEnth; // Outlet full load enthalpy @@ -2132,14 +2062,15 @@ namespace HeatingCoils { StageNumHS = 1; } - AirMassFlow = heatingCoil.InletAirMassFlowRate; - InletAirDryBulbTemp = heatingCoil.InletAirTemp; - InletAirEnthalpy = heatingCoil.InletAirEnthalpy; - InletAirHumRat = heatingCoil.InletAirHumRat; + Real64 AirMassFlow = heatingCoil.InletAirMassFlowRate; + Real64 InletAirDryBulbTemp = heatingCoil.InletAirTemp; + Real64 InletAirEnthalpy = heatingCoil.InletAirEnthalpy; + Real64 InletAirHumRat = heatingCoil.InletAirHumRat; - OutdoorPressure = state.dataEnvrn->OutBaroPress; + Real64 OutdoorPressure = state.dataEnvrn->OutBaroPress; - if ((AirMassFlow > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && ((CycRatio > 0.0) || (SpeedRatio > 0.0))) { + if ((AirMassFlow > 0.0) && (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && + ((CycRatio > 0.0) || (SpeedRatio > 0.0))) { if (StageNum > 1) { @@ -2163,12 +2094,12 @@ namespace HeatingCoils { heatingCoil.HeatingCoilLoad = TotCapHS * SpeedRatio + TotCapLS * (1.0 - SpeedRatio); OutletAirEnthalpy = InletAirEnthalpy + heatingCoil.HeatingCoilLoad / heatingCoil.InletAirMassFlowRate; - OutletAirTemp = PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); - FullLoadOutAirRH = PsyRhFnTdbWPb(state, OutletAirTemp, OutletAirHumRat, OutdoorPressure, RoutineNameAverageLoad); + OutletAirTemp = Psychrometrics::PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); + FullLoadOutAirRH = Psychrometrics::PsyRhFnTdbWPb(state, OutletAirTemp, OutletAirHumRat, OutdoorPressure, RoutineNameAverageLoad); if (FullLoadOutAirRH > 1.0) { // Limit to saturated conditions at FullLoadOutAirEnth - OutletAirTemp = PsyTsatFnHPb(state, OutletAirEnthalpy, OutdoorPressure, RoutineName); - OutletAirHumRat = PsyWFnTdbH(state, OutletAirTemp, OutletAirEnthalpy, RoutineName); + OutletAirTemp = Psychrometrics::PsyTsatFnHPb(state, OutletAirEnthalpy, OutdoorPressure, RoutineName); + OutletAirHumRat = Psychrometrics::PsyWFnTdbH(state, OutletAirTemp, OutletAirEnthalpy, RoutineName); } heatingCoil.OutletAirTemp = OutletAirTemp; @@ -2182,8 +2113,8 @@ namespace HeatingCoils { PartLoadRat = min(1.0, CycRatio); // for cycling fan, reset mass flow to full on rate - if (FanOpMode == CycFanCycCoil) AirMassFlow /= PartLoadRat; - if (FanOpMode == ContFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) AirMassFlow /= PartLoadRat; + if (FanOpMode == DataHVACGlobals::ContFanCycCoil) { if (!SuppHeat) { AirMassFlow = state.dataHVACGlobal->MSHPMassFlowRateLow; } @@ -2194,18 +2125,19 @@ namespace HeatingCoils { // Calculate full load outlet conditions FullLoadOutAirEnth = InletAirEnthalpy + TotCap / AirMassFlow; FullLoadOutAirHumRat = InletAirHumRat; - FullLoadOutAirTemp = PsyTdbFnHW(FullLoadOutAirEnth, FullLoadOutAirHumRat); - FullLoadOutAirRH = PsyRhFnTdbWPb(state, FullLoadOutAirTemp, FullLoadOutAirHumRat, OutdoorPressure, RoutineNameFullLoad); + FullLoadOutAirTemp = Psychrometrics::PsyTdbFnHW(FullLoadOutAirEnth, FullLoadOutAirHumRat); + FullLoadOutAirRH = + Psychrometrics::PsyRhFnTdbWPb(state, FullLoadOutAirTemp, FullLoadOutAirHumRat, OutdoorPressure, RoutineNameFullLoad); if (FullLoadOutAirRH > 1.0) { // Limit to saturated conditions at FullLoadOutAirEnth - FullLoadOutAirTemp = PsyTsatFnHPb(state, FullLoadOutAirEnth, OutdoorPressure, RoutineName); + FullLoadOutAirTemp = Psychrometrics::PsyTsatFnHPb(state, FullLoadOutAirEnth, OutdoorPressure, RoutineName); // Eventually inlet air conditions will be used in electric Coil, these lines are commented out and marked with this comment // line FullLoadOutAirTemp = PsyTsatFnHPb(FullLoadOutAirEnth,InletAirPressure) - FullLoadOutAirHumRat = PsyWFnTdbH(state, FullLoadOutAirTemp, FullLoadOutAirEnth, RoutineName); + FullLoadOutAirHumRat = Psychrometrics::PsyWFnTdbH(state, FullLoadOutAirTemp, FullLoadOutAirEnth, RoutineName); } // Set outlet conditions from the full load calculation - if (FanOpMode == CycFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) { OutletAirEnthalpy = FullLoadOutAirEnth; OutletAirHumRat = FullLoadOutAirHumRat; OutletAirTemp = FullLoadOutAirTemp; @@ -2271,39 +2203,26 @@ namespace HeatingCoils { // AUTHOR Rich Liesen // DATE WRITTEN May 2000 // MODIFIED Jul. 2016, R. Zhang, Applied the coil supply air temperature sensor offset - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Simulates a simple Gas heating coil with a burner efficiency - // Using/Aliasing - using Curve::CurveValue; - using DataHVACGlobals::TempControlTol; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - Real64 AirMassFlow; // [kg/sec] - Real64 TempAirIn; // [C] - Real64 TempAirOut; // [C] - Real64 Win; - Real64 Effic; - Real64 CapacitanceAir; + Real64 TempAirOut; // [C] Real64 HeatingCoilLoad; Real64 QCoilCap; - Real64 TempSetPoint; - int Control; Real64 PartLoadRat; Real64 PLF; auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); - Effic = heatingCoil.Efficiency; - TempAirIn = heatingCoil.InletAirTemp; - Win = heatingCoil.InletAirHumRat; - Control = heatingCoil.Control; - TempSetPoint = heatingCoil.DesiredOutletTemp; - AirMassFlow = heatingCoil.InletAirMassFlowRate; + Real64 Effic = heatingCoil.Efficiency; + Real64 TempAirIn = heatingCoil.InletAirTemp; + Real64 Win = heatingCoil.InletAirHumRat; + Real64 TempSetPoint = heatingCoil.DesiredOutletTemp; + Real64 AirMassFlow = heatingCoil.InletAirMassFlowRate; - CapacitanceAir = PsyCpAirFnW(Win) * AirMassFlow; + Real64 CapacitanceAir = Psychrometrics::PsyCpAirFnW(Win) * AirMassFlow; // If there is a fault of coil SAT Sensor if (heatingCoil.FaultyCoilSATFlag && (!state.dataGlobal->WarmupFlag) && (!state.dataGlobal->DoingSizing) && @@ -2320,8 +2239,8 @@ namespace HeatingCoils { // Also the coil has to be scheduled to be available. // Control output to meet load QCoilReq (QCoilReq is passed in if load controlled, otherwise QCoilReq=-999) - if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && - (QCoilReq > 0.0)) { + if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && + (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq > 0.0)) { // check to see if the Required heating capacity is greater than the user specified capacity. if (QCoilReq > heatingCoil.NominalCapacity) { @@ -2341,8 +2260,9 @@ namespace HeatingCoils { heatingCoil.ParasiticFuelRate = heatingCoil.ParasiticFuelCapacity * (1.0 - PartLoadRat); // Control coil output to meet a setpoint temperature. - } else if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && - (QCoilReq == SensedLoadFlagValue) && (std::abs(TempSetPoint - TempAirIn) > TempControlTol)) { + } else if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && + (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq == DataLoopNode::SensedLoadFlagValue) && + (std::abs(TempSetPoint - TempAirIn) > DataHVACGlobals::TempControlTol)) { QCoilCap = CapacitanceAir * (TempSetPoint - TempAirIn); // check to see if setpoint above entering temperature. If not, set @@ -2385,13 +2305,14 @@ namespace HeatingCoils { if (PartLoadRat == 0) { heatingCoil.FuelUseLoad = 0.0; } else { - PLF = CurveValue(state, heatingCoil.PLFCurveIndex, PartLoadRat); + PLF = Curve::CurveValue(state, heatingCoil.PLFCurveIndex, PartLoadRat); if (PLF < 0.7) { if (heatingCoil.PLFErrorCount < 1) { ++heatingCoil.PLFErrorCount; - ShowWarningError( - state, - format("CalcFuelHeatingCoil: {}=\"{}\", PLF curve values", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowWarningError(state, + format("CalcFuelHeatingCoil: {}=\"{}\", PLF curve values", + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), + heatingCoil.Name)); ShowContinueError(state, format("The PLF curve value = {:.5T} for part-load ratio = {:.5T}", PLF, PartLoadRat)); ShowContinueError(state, "PLF curve values must be >= 0.7. PLF has been reset to 0.7 and the simulation continues..."); ShowContinueError(state, "Check the IO reference manual for PLF curve guidance [Coil:Heating:Fuel]."); @@ -2406,9 +2327,10 @@ namespace HeatingCoils { if (heatingCoil.RTF > 1.0 && std::abs(heatingCoil.RTF - 1.0) > 0.001) { if (heatingCoil.RTFErrorCount < 1) { ++heatingCoil.RTFErrorCount; - ShowWarningError( - state, - format("CalcFuelHeatingCoil: {}=\"{}\", runtime fraction", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowWarningError(state, + format("CalcFuelHeatingCoil: {}=\"{}\", runtime fraction", + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), + heatingCoil.Name)); ShowContinueError(state, format("The runtime fraction exceeded 1.0. [{:.4T}].", heatingCoil.RTF)); ShowContinueError(state, "Runtime fraction is set to 1.0 and the simulation continues..."); ShowContinueError(state, "Check the IO reference manual for PLF curve guidance [Coil:Heating:Fuel]."); @@ -2428,7 +2350,7 @@ namespace HeatingCoils { heatingCoil.ParasiticFuelRate = heatingCoil.ParasiticFuelCapacity * (1.0 - heatingCoil.RTF); // Fan power will also be modified by the heating coil's part load fraction // OnOffFanPartLoadFraction passed to fan via DataHVACGlobals (cycling fan only) - if (FanOpMode == CycFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) { state.dataHVACGlobal->OnOffFanPartLoadFraction = PLF; } } @@ -2442,7 +2364,7 @@ namespace HeatingCoils { heatingCoil.OutletAirHumRat = heatingCoil.InletAirHumRat; heatingCoil.OutletAirMassFlowRate = heatingCoil.InletAirMassFlowRate; // Set the outlet enthalpys for air and Heating - heatingCoil.OutletAirEnthalpy = PsyHFnTdbW(heatingCoil.OutletAirTemp, heatingCoil.OutletAirHumRat); + heatingCoil.OutletAirEnthalpy = Psychrometrics::PsyHFnTdbW(heatingCoil.OutletAirTemp, heatingCoil.OutletAirHumRat); QCoilActual = HeatingCoilLoad; if (heatingCoil.AirLoopNum > 0) { @@ -2467,8 +2389,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Chandan Sharma, FSEC // DATE WRITTEN January 2013 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Calculates the air-side performance and energy use of a multi stage gas heating coil. @@ -2479,16 +2399,8 @@ namespace HeatingCoils { // the performance at high stage and that at low stage. If the output needed is below // that produced at low stage, the coil cycles between off and low stage. - // Using/Aliasing - using Curve::CurveValue; - auto &ElecHeatingCoilPower = state.dataHVACGlobal->ElecHeatingCoilPower; - auto &MSHPMassFlowRateHigh = state.dataHVACGlobal->MSHPMassFlowRateHigh; - auto &MSHPMassFlowRateLow = state.dataHVACGlobal->MSHPMassFlowRateLow; - - using Psychrometrics::PsyRhFnTdbWPb; - using Psychrometrics::PsyTdbFnHW; - using Psychrometrics::PsyTsatFnHPb; - using Psychrometrics::PsyWFnTdbH; + Real64 const MSHPMassFlowRateHigh = state.dataHVACGlobal->MSHPMassFlowRateHigh; + Real64 const MSHPMassFlowRateLow = state.dataHVACGlobal->MSHPMassFlowRateLow; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("CalcMultiStageGasHeatingCoil"); @@ -2496,10 +2408,6 @@ namespace HeatingCoils { static constexpr std::string_view RoutineNameFullLoad("CalcMultiStageGasHeatingCoil:fullload"); // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - Real64 AirMassFlow; // dry air mass flow rate through coil [kg/s] - Real64 InletAirDryBulbTemp; // inlet air dry bulb temperature [C] - Real64 InletAirEnthalpy; // inlet air enthalpy [J/kg] - Real64 InletAirHumRat; // inlet air humidity ratio [kg/kg] Real64 OutletAirEnthalpy; // outlet air enthalpy [J/kg] Real64 OutletAirHumRat; // outlet air humidity ratio [kg/kg] Real64 TotCapHS; // total capacity at high stage [W] @@ -2508,7 +2416,6 @@ namespace HeatingCoils { Real64 EffHS; // efficiency at high stage Real64 EffLS(0.0); // efficiency at low stage Real64 EffAvg; // average efficiency - Real64 OutdoorPressure; // Outdoor barometric pressure at condenser (Pa) int StageNumHS; // High stage number int StageNumLS; // Low stage number Real64 FullLoadOutAirEnth; // Outlet full load enthalpy @@ -2537,14 +2444,13 @@ namespace HeatingCoils { StageNumHS = 1; } - AirMassFlow = heatingCoil.InletAirMassFlowRate; - InletAirDryBulbTemp = heatingCoil.InletAirTemp; - InletAirEnthalpy = heatingCoil.InletAirEnthalpy; - InletAirHumRat = heatingCoil.InletAirHumRat; - - OutdoorPressure = state.dataEnvrn->OutBaroPress; + Real64 AirMassFlow = heatingCoil.InletAirMassFlowRate; + Real64 InletAirEnthalpy = heatingCoil.InletAirEnthalpy; + Real64 InletAirHumRat = heatingCoil.InletAirHumRat; + Real64 OutdoorPressure = state.dataEnvrn->OutBaroPress; - if ((AirMassFlow > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && ((CycRatio > 0.0) || (SpeedRatio > 0.0))) { + if ((AirMassFlow > 0.0) && (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && + ((CycRatio > 0.0) || (SpeedRatio > 0.0))) { if (StageNum > 1) { @@ -2571,7 +2477,7 @@ namespace HeatingCoils { heatingCoil.ElecUseLoad = PartLoadRat * heatingCoil.MSParasiticElecLoad(StageNumHS) + (1.0 - PartLoadRat) * heatingCoil.MSParasiticElecLoad(StageNumLS); - ElecHeatingCoilPower = heatingCoil.ElecUseLoad; + state.dataHVACGlobal->ElecHeatingCoilPower = heatingCoil.ElecUseLoad; heatingCoil.HeatingCoilLoad = MSHPMassFlowRateHigh * (HSFullLoadOutAirEnth - InletAirEnthalpy) * PartLoadRat + MSHPMassFlowRateLow * (LSFullLoadOutAirEnth - InletAirEnthalpy) * (1.0 - PartLoadRat); EffAvg = (EffHS * PartLoadRat) + (EffLS * (1.0 - PartLoadRat)); @@ -2579,12 +2485,12 @@ namespace HeatingCoils { heatingCoil.ParasiticFuelRate = 0.0; OutletAirEnthalpy = InletAirEnthalpy + heatingCoil.HeatingCoilLoad / heatingCoil.InletAirMassFlowRate; - OutletAirTemp = PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); - FullLoadOutAirRH = PsyRhFnTdbWPb(state, OutletAirTemp, OutletAirHumRat, OutdoorPressure, RoutineNameAverageLoad); + OutletAirTemp = Psychrometrics::PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); + FullLoadOutAirRH = Psychrometrics::PsyRhFnTdbWPb(state, OutletAirTemp, OutletAirHumRat, OutdoorPressure, RoutineNameAverageLoad); if (FullLoadOutAirRH > 1.0) { // Limit to saturated conditions at FullLoadOutAirEnth - OutletAirTemp = PsyTsatFnHPb(state, OutletAirEnthalpy, OutdoorPressure, RoutineName); - OutletAirHumRat = PsyWFnTdbH(state, OutletAirTemp, OutletAirEnthalpy, RoutineName); + OutletAirTemp = Psychrometrics::PsyTsatFnHPb(state, OutletAirEnthalpy, OutdoorPressure, RoutineName); + OutletAirHumRat = Psychrometrics::PsyWFnTdbH(state, OutletAirTemp, OutletAirEnthalpy, RoutineName); } heatingCoil.OutletAirTemp = OutletAirTemp; @@ -2596,9 +2502,9 @@ namespace HeatingCoils { } else if (CycRatio > 0.0) { // for cycling fan, reset mass flow to full on rate - if (FanOpMode == CycFanCycCoil) + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) AirMassFlow /= CycRatio; - else if (FanOpMode == ContFanCycCoil) + else if (FanOpMode == DataHVACGlobals::ContFanCycCoil) AirMassFlow = MSHPMassFlowRateLow; TotCap = heatingCoil.MSNominalCapacity(StageNumLS); @@ -2609,18 +2515,19 @@ namespace HeatingCoils { // Calculate full load outlet conditions FullLoadOutAirEnth = InletAirEnthalpy + TotCap / AirMassFlow; FullLoadOutAirHumRat = InletAirHumRat; - FullLoadOutAirTemp = PsyTdbFnHW(FullLoadOutAirEnth, FullLoadOutAirHumRat); - FullLoadOutAirRH = PsyRhFnTdbWPb(state, FullLoadOutAirTemp, FullLoadOutAirHumRat, OutdoorPressure, RoutineNameFullLoad); + FullLoadOutAirTemp = Psychrometrics::PsyTdbFnHW(FullLoadOutAirEnth, FullLoadOutAirHumRat); + FullLoadOutAirRH = + Psychrometrics::PsyRhFnTdbWPb(state, FullLoadOutAirTemp, FullLoadOutAirHumRat, OutdoorPressure, RoutineNameFullLoad); if (FullLoadOutAirRH > 1.0) { // Limit to saturated conditions at FullLoadOutAirEnth - FullLoadOutAirTemp = PsyTsatFnHPb(state, FullLoadOutAirEnth, OutdoorPressure, RoutineName); + FullLoadOutAirTemp = Psychrometrics::PsyTsatFnHPb(state, FullLoadOutAirEnth, OutdoorPressure, RoutineName); // Eventually inlet air conditions will be used in Gas Coil, these lines are commented out and marked with this comment line // FullLoadOutAirTemp = PsyTsatFnHPb(FullLoadOutAirEnth,InletAirPressure) - FullLoadOutAirHumRat = PsyWFnTdbH(state, FullLoadOutAirTemp, FullLoadOutAirEnth, RoutineName); + FullLoadOutAirHumRat = Psychrometrics::PsyWFnTdbH(state, FullLoadOutAirTemp, FullLoadOutAirEnth, RoutineName); } // Set outlet conditions from the full load calculation - if (FanOpMode == CycFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) { OutletAirEnthalpy = FullLoadOutAirEnth; OutletAirHumRat = FullLoadOutAirHumRat; OutletAirTemp = FullLoadOutAirTemp; @@ -2629,7 +2536,7 @@ namespace HeatingCoils { PartLoadRat * AirMassFlow / heatingCoil.InletAirMassFlowRate * (FullLoadOutAirEnth - InletAirEnthalpy) + InletAirEnthalpy; OutletAirHumRat = PartLoadRat * AirMassFlow / heatingCoil.InletAirMassFlowRate * (FullLoadOutAirHumRat - InletAirHumRat) + InletAirHumRat; - OutletAirTemp = PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); + OutletAirTemp = Psychrometrics::PsyTdbFnHW(OutletAirEnthalpy, OutletAirHumRat); } EffLS = heatingCoil.MSEfficiency(StageNumLS); @@ -2640,7 +2547,7 @@ namespace HeatingCoils { // parasitics are calculated when the coil is off (1-PLR) heatingCoil.ElecUseLoad = heatingCoil.MSParasiticElecLoad(StageNumLS) * (1.0 - PartLoadRat); heatingCoil.ParasiticFuelRate = heatingCoil.ParasiticFuelCapacity * (1.0 - PartLoadRat); - ElecHeatingCoilPower = heatingCoil.ElecUseLoad; + state.dataHVACGlobal->ElecHeatingCoilPower = heatingCoil.ElecUseLoad; heatingCoil.OutletAirTemp = OutletAirTemp; heatingCoil.OutletAirHumRat = OutletAirHumRat; @@ -2662,7 +2569,7 @@ namespace HeatingCoils { heatingCoil.HeatingCoilLoad = 0.0; heatingCoil.FuelUseLoad = 0.0; heatingCoil.ParasiticFuelRate = heatingCoil.ParasiticFuelCapacity; - ElecHeatingCoilPower = 0.0; + state.dataHVACGlobal->ElecHeatingCoilPower = 0.0; PartLoadRat = 0.0; } // end of on/off if - else @@ -2671,13 +2578,14 @@ namespace HeatingCoils { // The PLF curve is only used when the coil cycles. if (heatingCoil.PLFCurveIndex > 0) { if (PartLoadRat > 0.0 && StageNum < 2) { - PLF = CurveValue(state, heatingCoil.PLFCurveIndex, PartLoadRat); + PLF = Curve::CurveValue(state, heatingCoil.PLFCurveIndex, PartLoadRat); if (PLF < 0.7) { if (heatingCoil.PLFErrorCount < 1) { ++heatingCoil.PLFErrorCount; - ShowWarningError( - state, - format("CalcFuelHeatingCoil: {}=\"{}\", PLF curve values", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowWarningError(state, + format("CalcFuelHeatingCoil: {}=\"{}\", PLF curve values", + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), + heatingCoil.Name)); ShowContinueError(state, format("The PLF curve value = {:.5T} for part-load ratio = {:.5T}", PLF, PartLoadRat)); ShowContinueError(state, "PLF curve values must be >= 0.7. PLF has been reset to 0.7 and the simulation continues..."); ShowContinueError(state, "Check the IO reference manual for PLF curve guidance [Coil:Heating:Fuel]."); @@ -2695,9 +2603,10 @@ namespace HeatingCoils { if (heatingCoil.RTF > 1.0 && std::abs(heatingCoil.RTF - 1.0) > 0.001) { if (heatingCoil.RTFErrorCount < 1) { ++heatingCoil.RTFErrorCount; - ShowWarningError( - state, - format("CalcFuelHeatingCoil: {}=\"{}\", runtime fraction", cAllCoilTypes(heatingCoil.HCoilType_Num), heatingCoil.Name)); + ShowWarningError(state, + format("CalcFuelHeatingCoil: {}=\"{}\", runtime fraction", + DataHVACGlobals::cAllCoilTypes(heatingCoil.HCoilType_Num), + heatingCoil.Name)); ShowContinueError(state, format("The runtime fraction exceeded 1.0. [{:.4T}].", heatingCoil.RTF)); ShowContinueError(state, "Runtime fraction is set to 1.0 and the simulation continues..."); ShowContinueError(state, "Check the IO reference manual for PLF curve guidance [Coil:Heating:Fuel]."); @@ -2717,7 +2626,7 @@ namespace HeatingCoils { heatingCoil.ParasiticFuelRate = heatingCoil.ParasiticFuelCapacity * (1.0 - heatingCoil.RTF); // Fan power will also be modified by the heating coil's part load fraction // OnOffFanPartLoadFraction passed to fan via DataHVACGlobals (cycling fan only) - if (FanOpMode == CycFanCycCoil) { + if (FanOpMode == DataHVACGlobals::CycFanCycCoil) { state.dataHVACGlobal->OnOffFanPartLoadFraction = PLF; } } @@ -2737,7 +2646,6 @@ namespace HeatingCoils { // AUTHOR Richard Raustad // DATE WRITTEN January 2005 // MODIFIED Jul. 2016, R. Zhang, Applied the coil supply air temperature sensor offset - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // Simulates a simple desuperheater heating coil with a heat reclaim efficiency @@ -2752,31 +2660,21 @@ namespace HeatingCoils { // the electric or gas heating coil except that the NominalCapacity is variable // and based on the runtime fraction and heat rejection of the heat source object. - // Using/Aliasing - using DataHVACGlobals::TempControlTol; - using namespace DXCoils; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - Real64 AirMassFlow; // air mass flow through the desuperheater heating coil [kg/sec] Real64 AvailTemp; // Lowest temperature available from desuperheater (~T condensing)[C] - Real64 TempAirIn; // temperature of the air entering the desuperheater heating coil [C] Real64 TempAirOut; // temperature of the air leaving the desuperheater heating coil [C] - Real64 Win; // humidity ratio of the air entering the desuperheater heating coil [kg/kg] - Real64 Effic; // ratio of condenser waste heat reclaimed to total condenser waste heat rejected - Real64 CapacitanceAir; // MdotCp of air entering the desuperheater heating coil Real64 HeatingCoilLoad; // actual load delivered by the desuperheater heating coil [W] Real64 QCoilCap; // available capacity of the desuperheater heating coil [W] - Real64 TempSetPoint; // setpoint temperature to be met when using temperature based control [C] int SourceID; // waste heat source id number auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); - Effic = heatingCoil.Efficiency; - AirMassFlow = heatingCoil.InletAirMassFlowRate; - TempAirIn = heatingCoil.InletAirTemp; - Win = heatingCoil.InletAirHumRat; - CapacitanceAir = PsyCpAirFnW(Win) * AirMassFlow; - TempSetPoint = heatingCoil.DesiredOutletTemp; + Real64 Effic = heatingCoil.Efficiency; + Real64 AirMassFlow = heatingCoil.InletAirMassFlowRate; + Real64 TempAirIn = heatingCoil.InletAirTemp; + Real64 Win = heatingCoil.InletAirHumRat; + Real64 CapacitanceAir = Psychrometrics::PsyCpAirFnW(Win) * AirMassFlow; + Real64 TempSetPoint = heatingCoil.DesiredOutletTemp; // If there is a fault of coil SAT Sensor if (heatingCoil.FaultyCoilSATFlag && (!state.dataGlobal->WarmupFlag) && (!state.dataGlobal->DoingSizing) && @@ -2831,7 +2729,7 @@ namespace HeatingCoils { case HeatObjTypes::COIL_COOLING_DX_NEW: // get RTF and NominalCapacity from Coil:CoolingDX { - auto &thisCoolingCoil = state.dataCoilCooingDX->coilCoolingDXs[SourceID]; + auto const &thisCoolingCoil = state.dataCoilCooingDX->coilCoolingDXs[SourceID]; heatingCoil.RTF = thisCoolingCoil.runTimeFraction; heatingCoil.NominalCapacity = thisCoolingCoil.reclaimHeat.AvailCapacity * Effic - thisCoolingCoil.reclaimHeat.WaterHeatingDesuperheaterReclaimedHeatTotal; @@ -2846,7 +2744,7 @@ namespace HeatingCoils { } // Control output to meet load (QCoilReq) - if ((AirMassFlow > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq > 0.0)) { + if ((AirMassFlow > 0.0) && (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq > 0.0)) { // check to see if the Required heating capacity is greater than the available heating capacity. if (QCoilReq > heatingCoil.NominalCapacity) { @@ -2867,8 +2765,9 @@ namespace HeatingCoils { } // Control coil output to meet a setpoint temperature. - } else if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && (GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && - (QCoilReq == SensedLoadFlagValue) && (std::abs(TempSetPoint - TempAirIn) > TempControlTol)) { + } else if ((AirMassFlow > 0.0 && heatingCoil.NominalCapacity > 0.0) && + (ScheduleManager::GetCurrentScheduleValue(state, heatingCoil.SchedPtr) > 0.0) && (QCoilReq == DataLoopNode::SensedLoadFlagValue) && + (std::abs(TempSetPoint - TempAirIn) > DataHVACGlobals::TempControlTol)) { QCoilCap = CapacitanceAir * (TempSetPoint - TempAirIn); // check to see if setpoint is above entering air temperature. If not, set output to zero. @@ -2903,7 +2802,7 @@ namespace HeatingCoils { heatingCoil.OutletAirHumRat = heatingCoil.InletAirHumRat; heatingCoil.OutletAirMassFlowRate = heatingCoil.InletAirMassFlowRate; // Set the outlet enthalpy - heatingCoil.OutletAirEnthalpy = PsyHFnTdbW(heatingCoil.OutletAirTemp, heatingCoil.OutletAirHumRat); + heatingCoil.OutletAirEnthalpy = Psychrometrics::PsyHFnTdbW(heatingCoil.OutletAirTemp, heatingCoil.OutletAirHumRat); heatingCoil.ElecUseLoad = heatingCoil.ParasiticElecLoad * heatingCoil.RTF; QCoilActual = HeatingCoilLoad; @@ -2919,13 +2818,13 @@ namespace HeatingCoils { case HeatObjTypes::COMPRESSORRACK_REFRIGERATEDCASE: { state.dataHeatBal->HeatReclaimRefrigeratedRack(SourceID).HVACDesuperheaterReclaimedHeat(DesuperheaterNum) = HeatingCoilLoad; state.dataHeatBal->HeatReclaimRefrigeratedRack(SourceID).HVACDesuperheaterReclaimedHeatTotal = 0.0; - for (auto &num : state.dataHeatBal->HeatReclaimRefrigeratedRack(SourceID).HVACDesuperheaterReclaimedHeat) + for (auto const &num : state.dataHeatBal->HeatReclaimRefrigeratedRack(SourceID).HVACDesuperheaterReclaimedHeat) state.dataHeatBal->HeatReclaimRefrigeratedRack(SourceID).HVACDesuperheaterReclaimedHeatTotal += num; } break; case HeatObjTypes::CONDENSER_REFRIGERATION: { state.dataHeatBal->HeatReclaimRefrigCondenser(SourceID).HVACDesuperheaterReclaimedHeat(DesuperheaterNum) = HeatingCoilLoad; state.dataHeatBal->HeatReclaimRefrigCondenser(SourceID).HVACDesuperheaterReclaimedHeatTotal = 0.0; - for (auto &num : state.dataHeatBal->HeatReclaimRefrigCondenser(SourceID).HVACDesuperheaterReclaimedHeat) + for (auto const &num : state.dataHeatBal->HeatReclaimRefrigCondenser(SourceID).HVACDesuperheaterReclaimedHeat) state.dataHeatBal->HeatReclaimRefrigCondenser(SourceID).HVACDesuperheaterReclaimedHeatTotal += num; } break; case HeatObjTypes::COIL_DX_COOLING: @@ -2933,13 +2832,13 @@ namespace HeatingCoils { case HeatObjTypes::COIL_DX_MULTIMODE: { state.dataHeatBal->HeatReclaimDXCoil(SourceID).HVACDesuperheaterReclaimedHeat(DesuperheaterNum) = HeatingCoilLoad; state.dataHeatBal->HeatReclaimDXCoil(SourceID).HVACDesuperheaterReclaimedHeatTotal = 0.0; - for (auto &num : state.dataHeatBal->HeatReclaimDXCoil(SourceID).HVACDesuperheaterReclaimedHeat) + for (auto const &num : state.dataHeatBal->HeatReclaimDXCoil(SourceID).HVACDesuperheaterReclaimedHeat) state.dataHeatBal->HeatReclaimDXCoil(SourceID).HVACDesuperheaterReclaimedHeatTotal += num; } break; case HeatObjTypes::COIL_DX_VARIABLE_COOLING: { state.dataHeatBal->HeatReclaimVS_DXCoil(SourceID).HVACDesuperheaterReclaimedHeat(DesuperheaterNum) = HeatingCoilLoad; state.dataHeatBal->HeatReclaimVS_DXCoil(SourceID).HVACDesuperheaterReclaimedHeatTotal = 0.0; - for (auto &num : state.dataHeatBal->HeatReclaimVS_DXCoil(SourceID).HVACDesuperheaterReclaimedHeat) + for (auto const &num : state.dataHeatBal->HeatReclaimVS_DXCoil(SourceID).HVACDesuperheaterReclaimedHeat) state.dataHeatBal->HeatReclaimVS_DXCoil(SourceID).HVACDesuperheaterReclaimedHeatTotal += num; } break; default: @@ -2953,8 +2852,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Richard Liesen // DATE WRITTEN May 2000 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // This subroutine updates the coil outlet nodes. @@ -2963,8 +2860,8 @@ namespace HeatingCoils { // Data is moved from the coil data structure to the coil outlet nodes. // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - auto &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); - auto &airInletNode = state.dataLoopNodes->Node(heatingCoil.AirInletNodeNum); + auto const &heatingCoil = state.dataHeatingCoils->HeatingCoil(CoilNum); + auto const &airInletNode = state.dataLoopNodes->Node(heatingCoil.AirInletNodeNum); auto &airOuletNode = state.dataLoopNodes->Node(heatingCoil.AirOutletNodeNum); // Set the outlet air nodes of the HeatingCoil @@ -2996,8 +2893,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Richard Liesen // DATE WRITTEN May 2000 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // This subroutine updates the report variable for the coils. @@ -3024,19 +2919,19 @@ namespace HeatingCoils { std::string coilObjClassName; switch (heatingCoil.HCoilType_Num) { - case Coil_HeatingElectric: { + case DataHVACGlobals::Coil_HeatingElectric: { coilObjClassName = "Coil:Heating:Electric"; } break; - case Coil_HeatingElectric_MultiStage: { + case DataHVACGlobals::Coil_HeatingElectric_MultiStage: { coilObjClassName = "Coil:Heating:Electric:MultiStage"; } break; - case Coil_HeatingGasOrOtherFuel: { + case DataHVACGlobals::Coil_HeatingGasOrOtherFuel: { coilObjClassName = "Coil:Heating:Fuel"; } break; - case Coil_HeatingGas_MultiStage: { + case DataHVACGlobals::Coil_HeatingGas_MultiStage: { coilObjClassName = "Coil:Heating:Gas:MultiStage"; } break; - case Coil_HeatingDesuperheater: { + case DataHVACGlobals::Coil_HeatingDesuperheater: { coilObjClassName = "Coil:Heating:Desuperheater"; } break; default: @@ -3059,8 +2954,6 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Richard Raustad // DATE WRITTEN March 2005 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // This subroutine sets an index for a given DX Coil -- issues error message if that @@ -3089,16 +2982,11 @@ namespace HeatingCoils { // SUBROUTINE INFORMATION: // AUTHOR Linda Lawrie // DATE WRITTEN October 2005 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: // This routine provides a method for outside routines to check if // the heating coil is scheduled to be on. - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int CoilNum; - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); @@ -3107,22 +2995,22 @@ namespace HeatingCoils { // Find the correct Coil number if (CompIndex == 0) { - CoilNum = UtilityRoutines::FindItem(CompName, state.dataHeatingCoils->HeatingCoil); + int CoilNum = UtilityRoutines::FindItem(CompName, state.dataHeatingCoils->HeatingCoil); if (CoilNum == 0) { ShowFatalError(state, format("CheckHeatingCoilSchedule: Coil not found=\"{}\".", CompName)); } - if (!UtilityRoutines::SameString(CompType, cAllCoilTypes(state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num))) { + if (!UtilityRoutines::SameString(CompType, DataHVACGlobals::cAllCoilTypes(state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num))) { ShowSevereError(state, format("CheckHeatingCoilSchedule: Coil=\"{}\"", CompName)); ShowContinueError(state, format("...expected type=\"{}\", actual type=\"{}\".", CompType, - cAllCoilTypes(state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num))); + DataHVACGlobals::cAllCoilTypes(state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num))); ShowFatalError(state, "Program terminates due to preceding conditions."); } CompIndex = CoilNum; - Value = GetCurrentScheduleValue(state, state.dataHeatingCoils->HeatingCoil(CoilNum).SchedPtr); // not scheduled? + Value = ScheduleManager::GetCurrentScheduleValue(state, state.dataHeatingCoils->HeatingCoil(CoilNum).SchedPtr); // not scheduled? } else { - CoilNum = CompIndex; + int CoilNum = CompIndex; if (CoilNum > state.dataHeatingCoils->NumHeatingCoils || CoilNum < 1) { ShowFatalError(state, format("CheckHeatingCoilSchedule: Invalid CompIndex passed={}, Number of Heating Coils={}, Coil name={}", @@ -3139,10 +3027,10 @@ namespace HeatingCoils { ShowContinueError(state, format("...expected type=\"{}\", actual type=\"{}\".", CompType, - cAllCoilTypes(state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num))); + DataHVACGlobals::cAllCoilTypes(state.dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num))); ShowFatalError(state, "Program terminates due to preceding conditions."); } - Value = GetCurrentScheduleValue(state, state.dataHeatingCoils->HeatingCoil(CoilNum).SchedPtr); // not scheduled? + Value = ScheduleManager::GetCurrentScheduleValue(state, state.dataHeatingCoils->HeatingCoil(CoilNum).SchedPtr); // not scheduled? } } @@ -3156,8 +3044,6 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Linda Lawrie // DATE WRITTEN February 2006 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the coil capacity for the given coil and returns it. If @@ -3169,7 +3055,6 @@ namespace HeatingCoils { // FUNCTION LOCAL VARIABLE DECLARATIONS: int WhichCoil; - int FoundType; // Integer equivalent of coil type // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered @@ -3177,13 +3062,14 @@ namespace HeatingCoils { state.dataHeatingCoils->GetCoilsInputFlag = false; } - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingGasOrOtherFuel || FoundType == Coil_HeatingDesuperheater) { + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { CoilCapacity = state.dataHeatingCoils->HeatingCoil(WhichCoil).NominalCapacity; } - } else if (FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGas_MultiStage) { + } else if (FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage) { WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { CoilCapacity = @@ -3200,9 +3086,9 @@ namespace HeatingCoils { ShowSevereError(state, format("GetCoilCapacity: Invalid coil type for capacity, Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); ShowContinueError(state, format("...only {}, {} or {} are valid in this context.", - cAllCoilTypes(Coil_HeatingElectric), - cAllCoilTypes(Coil_HeatingGasOrOtherFuel), - cAllCoilTypes(Coil_HeatingDesuperheater))); + DataHVACGlobals::cAllCoilTypes(DataHVACGlobals::Coil_HeatingElectric), + DataHVACGlobals::cAllCoilTypes(DataHVACGlobals::Coil_HeatingGasOrOtherFuel), + DataHVACGlobals::cAllCoilTypes(DataHVACGlobals::Coil_HeatingDesuperheater))); } ShowContinueError(state, "... returning Coil Capacity as -1000."); ErrorsFound = true; @@ -3222,32 +3108,24 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Richard Raustad, FSEC // DATE WRITTEN February 2013 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the availability schedule index. If // incorrect coil type or name is given, ErrorsFound is returned as true and index is returned // as zero. - // Return value - int AvailSchIndex; // returned availability schedule of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = 0; - AvailSchIndex = 0; - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { + int WhichCoil = 0; + int AvailSchIndex = 0; + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { AvailSchIndex = state.dataHeatingCoils->HeatingCoil(WhichCoil).SchedPtr; @@ -3275,32 +3153,24 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Linda Lawrie // DATE WRITTEN February 2006 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the inlet node number. If // incorrect coil type or name is given, ErrorsFound is returned as true and node number is returned // as zero. - // Return value - int NodeNumber; // returned node number of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = 0; - NodeNumber = 0; - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { + int WhichCoil = 0; + int NodeNumber = 0; + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { NodeNumber = state.dataHeatingCoils->HeatingCoil(WhichCoil).AirInletNodeNum; @@ -3328,32 +3198,24 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Richard Raustad // DATE WRITTEN August 2006 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the outlet node number. If // incorrect coil type or name is given, ErrorsFound is returned as true and node number is returned // as zero. - // Return value - int NodeNumber; // returned node number of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = 0; - NodeNumber = 0; - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { + int WhichCoil = 0; + int NodeNumber = 0; + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { NodeNumber = state.dataHeatingCoils->HeatingCoil(WhichCoil).AirOutletNodeNum; @@ -3381,20 +3243,14 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Richard Raustad // DATE WRITTEN June 2007 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the heating coil index number if it is a desuperheating coil. // If incorrect coil type or name is given, ErrorsFound is returned as true and index number is returned // as zero. - // Return value - int CoilFound; // returned index number of matched coil - // FUNCTION LOCAL VARIABLE DECLARATIONS: bool GetCoilErrFlag; - bool SuppressWarning; int NumCoil; int CoilNum(0); @@ -3404,14 +3260,14 @@ namespace HeatingCoils { state.dataHeatingCoils->GetCoilsInputFlag = false; } - SuppressWarning = true; - CoilFound = 0; + int CoilFound = 0; // note should eventually get rid of this string comparison if (UtilityRoutines::SameString(CoilType, "COIL:COOLING:DX:SINGLESPEED") || UtilityRoutines::SameString(CoilType, "COIL:COOLING:DX:TWOSPEED") || UtilityRoutines::SameString(CoilType, "COIL:COOLING:DX:TWOSTAGEWITHHUMIDITYCONTROLMODE")) { - GetDXCoilIndex(state, CoilName, CoilNum, GetCoilErrFlag, CoilType, SuppressWarning); + bool SuppressWarning = true; + DXCoils::GetDXCoilIndex(state, CoilName, CoilNum, GetCoilErrFlag, CoilType, SuppressWarning); for (NumCoil = 1; NumCoil <= state.dataHeatingCoils->NumHeatingCoils; ++NumCoil) { if (state.dataHeatingCoils->HeatingCoil(NumCoil).ReclaimHeatingSource != HeatObjTypes::COIL_DX_COOLING && state.dataHeatingCoils->HeatingCoil(NumCoil).ReclaimHeatingSource != HeatObjTypes::COIL_DX_MULTISPEED && @@ -3449,47 +3305,31 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Richard Raustad // DATE WRITTEN June 2007 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the control node number. If // incorrect coil type or name is given, ErrorsFound is returned as true and node number is returned // as zero. - // Return value - int NodeNumber; // returned node number of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = 0; - NodeNumber = 0; - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { - WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { + int WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { - NodeNumber = state.dataHeatingCoils->HeatingCoil(WhichCoil).TempSetPointNodeNum; + return state.dataHeatingCoils->HeatingCoil(WhichCoil).TempSetPointNodeNum; } - } else { - WhichCoil = 0; } - if (WhichCoil == 0) { - ShowSevereError(state, format("GetCoilControlNodeNum: Could not find Coil, Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); - ErrorsFound = true; - NodeNumber = 0; - } - - return NodeNumber; + ShowSevereError(state, format("GetCoilControlNodeNum: Could not find Coil, Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); + ErrorsFound = true; + return 0; } int GetHeatingCoilTypeNum(EnergyPlusData &state, @@ -3502,47 +3342,31 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Richard Raustad // DATE WRITTEN August 2008 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the type number. If // incorrect coil type or name is given, ErrorsFound is returned as true and type number is returned // as zero. - // Return value - int TypeNum; // returned type number of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = 0; - TypeNum = 0; - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { - WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { + int WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { - TypeNum = state.dataHeatingCoils->HeatingCoil(WhichCoil).HCoilType_Num; + return state.dataHeatingCoils->HeatingCoil(WhichCoil).HCoilType_Num; } - } else { - WhichCoil = 0; } - if (WhichCoil == 0) { - ShowSevereError(state, format("GetHeatingCoilTypeNum: Could not find Coil, Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); - ErrorsFound = true; - TypeNum = 0; - } - - return TypeNum; + ShowSevereError(state, format("GetHeatingCoilTypeNum: Could not find Coil, Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); + ErrorsFound = true; + return 0; } int GetHeatingCoilIndex(EnergyPlusData &state, @@ -3555,33 +3379,24 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Linda Lawrie // DATE WRITTEN February 2011 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the index into the structure. If // incorrect coil type or name is given, ErrorsFound is returned as true and index is returned // as zero. - // Return value - int WhichCoil; // returned index number of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = 0; - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { + int WhichCoil = 0; + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); - } else { - WhichCoil = 0; } if (WhichCoil == 0) { @@ -3602,8 +3417,6 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Richard Raustad // DATE WRITTEN December 2008 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the PLF curve index. If @@ -3611,35 +3424,27 @@ namespace HeatingCoils { // is returned as true and curve index is returned as zero. // If not a gas or electric heating coil, ErrorsFound is unchanged and index is 0. - // Return value - int IndexNum; // returned PLF curve index of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - int FoundType; // Integer equivalent of coil type - // Obtains and Allocates HeatingCoil related parameters from input file if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - FoundType = UtilityRoutines::FindItem(CoilType, cAllCoilTypes, NumAllCoilTypes); - if (FoundType == Coil_HeatingElectric || FoundType == Coil_HeatingElectric_MultiStage || FoundType == Coil_HeatingGasOrOtherFuel || - FoundType == Coil_HeatingGas_MultiStage || FoundType == Coil_HeatingDesuperheater) { - WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); + int FoundType = UtilityRoutines::FindItem(CoilType, DataHVACGlobals::cAllCoilTypes, DataHVACGlobals::NumAllCoilTypes); + if (FoundType == DataHVACGlobals::Coil_HeatingElectric || FoundType == DataHVACGlobals::Coil_HeatingElectric_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingGasOrOtherFuel || FoundType == DataHVACGlobals::Coil_HeatingGas_MultiStage || + FoundType == DataHVACGlobals::Coil_HeatingDesuperheater) { + int WhichCoil = UtilityRoutines::FindItem(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { - IndexNum = state.dataHeatingCoils->HeatingCoil(WhichCoil).PLFCurveIndex; + return state.dataHeatingCoils->HeatingCoil(WhichCoil).PLFCurveIndex; } else { ShowSevereError(state, format("GetHeatingCoilPLFCurveIndex: Could not find Coil, Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); ErrorsFound = true; - IndexNum = 0; + return 0; } } else { - IndexNum = 0; + return 0; } - - return IndexNum; } int GetHeatingCoilNumberOfStages(EnergyPlusData &state, @@ -3652,35 +3457,25 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Chandan Sharma // DATE WRITTEN February 2013 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function looks up the given coil and returns the number of speeds for multistage coils. // If incorrect coil type or name is given, ErrorsFound is returned as true. - // Return value - int NumberOfStages; // returned the number of speed of matched coil - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int WhichCoil; - // Obtains and Allocates HeatingCoils if (state.dataHeatingCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetHeatingCoilInput(state); state.dataHeatingCoils->GetCoilsInputFlag = false; } - WhichCoil = UtilityRoutines::FindItemInList(CoilName, state.dataHeatingCoils->HeatingCoil); + int WhichCoil = UtilityRoutines::FindItemInList(CoilName, state.dataHeatingCoils->HeatingCoil); if (WhichCoil != 0) { - NumberOfStages = state.dataHeatingCoils->HeatingCoil(WhichCoil).NumOfStages; + return state.dataHeatingCoils->HeatingCoil(WhichCoil).NumOfStages; } else { ShowSevereError(state, format("GetHeatingCoilNumberOfSpeeds: Invalid Heating Coil Type=\"{}\" Name=\"{}\"", CoilType, CoilName)); ErrorsFound = true; - NumberOfStages = 0; + return 0; } - - return NumberOfStages; } void SetHeatingCoilData(EnergyPlusData &state, @@ -3694,8 +3489,6 @@ namespace HeatingCoils { // FUNCTION INFORMATION: // AUTHOR Bereket Nigusse // DATE WRITTEN February 2016 - // MODIFIED na - // RE-ENGINEERED na // PURPOSE OF THIS FUNCTION: // This function sets data to Heating Coil using the coil index and arguments passed diff --git a/src/EnergyPlus/HeatingCoils.hh b/src/EnergyPlus/HeatingCoils.hh index aa1eb616416..5710e8462ea 100644 --- a/src/EnergyPlus/HeatingCoils.hh +++ b/src/EnergyPlus/HeatingCoils.hh @@ -87,11 +87,11 @@ namespace HeatingCoils { std::string HeatingCoilType; // Type of HeatingCoil ie. Heating or Cooling std::string HeatingCoilModel; // Type of HeatingCoil ie. Simple, Detailed, etc. int HCoilType_Num = 0; - Constant::eResource ResourceType = Constant::eResource::Invalid; // Type of fuel used, reference resource type integers - std::string Schedule; // HeatingCoil Operation Schedule - int SchedPtr = 0; // Pointer to the correct schedule - int InsuffTemperatureWarn = 0; // Used for recurring error message - Real64 InletAirMassFlowRate = 0.0; // MassFlow through the HeatingCoil being Simulated [kg/Sec] + Constant::eFuel FuelType = Constant::eFuel::Invalid; // Type of fuel used, reference resource type integers + std::string Schedule; // HeatingCoil Operation Schedule + int SchedPtr = 0; // Pointer to the correct schedule + int InsuffTemperatureWarn = 0; // Used for recurring error message + Real64 InletAirMassFlowRate = 0.0; // MassFlow through the HeatingCoil being Simulated [kg/Sec] Real64 OutletAirMassFlowRate = 0.0; Real64 InletAirTemp = 0.0; Real64 OutletAirTemp = 0.0; diff --git a/src/EnergyPlus/ICEngineElectricGenerator.cc b/src/EnergyPlus/ICEngineElectricGenerator.cc index 5e942f4c34a..b9d16a866bb 100644 --- a/src/EnergyPlus/ICEngineElectricGenerator.cc +++ b/src/EnergyPlus/ICEngineElectricGenerator.cc @@ -292,8 +292,8 @@ namespace ICEngineElectricGenerator { // Validate fuel type input state.dataICEngElectGen->ICEngineGenerator(genNum).FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, AlphArray(10))); - if (state.dataICEngElectGen->ICEngineGenerator(genNum).FuelType == Constant::eResource::Invalid) { + static_cast(getEnumerationValue(Constant::eFuelNamesUC, AlphArray(10))); + if (state.dataICEngElectGen->ICEngineGenerator(genNum).FuelType == Constant::eFuel::Invalid) { ShowSevereError(state, format("Invalid {}={}", state.dataIPShortCut->cAlphaFieldNames(10), AlphArray(10))); ShowContinueError(state, format("Entered in {}={}", state.dataIPShortCut->cCurrentModuleObject, AlphArray(1))); ErrorsFound = true; @@ -309,7 +309,7 @@ namespace ICEngineElectricGenerator { void ICEngineGeneratorSpecs::setupOutputVars(EnergyPlusData &state) { - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, "Generator Produced AC Electricity Rate", OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/ICEngineElectricGenerator.hh b/src/EnergyPlus/ICEngineElectricGenerator.hh index eb258c055c8..3cff088e8eb 100644 --- a/src/EnergyPlus/ICEngineElectricGenerator.hh +++ b/src/EnergyPlus/ICEngineElectricGenerator.hh @@ -77,16 +77,16 @@ namespace ICEngineElectricGenerator { std::string Name; // user identifier std::string TypeOf; // Type of Generator GeneratorType CompType_Num; - Constant::eResource FuelType; // Type of Fuel - DIESEL, GASOLINE, GAS - Real64 RatedPowerOutput; // W - design nominal capacity of Generator - int ElectricCircuitNode; // Electric Circuit Node - Real64 MinPartLoadRat; // (IC ENGINE MIN) min allowed operating frac full load - Real64 MaxPartLoadRat; // (IC ENGINE MAX) max allowed operating frac full load - Real64 OptPartLoadRat; // (IC ENGINE BEST) optimal operating frac full load - Real64 ElecOutputFuelRat; // (RELDC) Ratio of Generator output to Fuel Energy Input - int ElecOutputFuelCurve; // Curve Index for generator output to Fuel Energy Input Coeff Poly Fit - Real64 RecJacHeattoFuelRat; // (RJACDC) Ratio of Recoverable Jacket Heat to Fuel Energy Input - int RecJacHeattoFuelCurve; // Curve Index for Ratio of Recoverable Jacket Heat to + Constant::eFuel FuelType; // Type of Fuel - DIESEL, GASOLINE, GAS + Real64 RatedPowerOutput; // W - design nominal capacity of Generator + int ElectricCircuitNode; // Electric Circuit Node + Real64 MinPartLoadRat; // (IC ENGINE MIN) min allowed operating frac full load + Real64 MaxPartLoadRat; // (IC ENGINE MAX) max allowed operating frac full load + Real64 OptPartLoadRat; // (IC ENGINE BEST) optimal operating frac full load + Real64 ElecOutputFuelRat; // (RELDC) Ratio of Generator output to Fuel Energy Input + int ElecOutputFuelCurve; // Curve Index for generator output to Fuel Energy Input Coeff Poly Fit + Real64 RecJacHeattoFuelRat; // (RJACDC) Ratio of Recoverable Jacket Heat to Fuel Energy Input + int RecJacHeattoFuelCurve; // Curve Index for Ratio of Recoverable Jacket Heat to // Fuel Energy Input Coeff Poly Fit Real64 RecLubeHeattoFuelRat; // (RLUBDC) Ratio of Recoverable Lube Oil Heat to Fuel Energy Input int RecLubeHeattoFuelCurve; // Curve Index for Ratio of Recoverable Lube Oil Heat to diff --git a/src/EnergyPlus/MicroturbineElectricGenerator.cc b/src/EnergyPlus/MicroturbineElectricGenerator.cc index 77a66d8fa21..dba119c5f74 100644 --- a/src/EnergyPlus/MicroturbineElectricGenerator.cc +++ b/src/EnergyPlus/MicroturbineElectricGenerator.cc @@ -348,8 +348,8 @@ void GetMTGeneratorInput(EnergyPlusData &state) // Validate fuel type input state.dataMircoturbElectGen->MTGenerator(GeneratorNum).FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, AlphArray(5))); - if (state.dataMircoturbElectGen->MTGenerator(GeneratorNum).FuelType == Constant::eResource::Invalid) { + static_cast(getEnumerationValue(Constant::eFuelNamesUC, AlphArray(5))); + if (state.dataMircoturbElectGen->MTGenerator(GeneratorNum).FuelType == Constant::eFuel::Invalid) { ShowSevereError( state, format("{} \"{}\"", state.dataIPShortCut->cCurrentModuleObject, state.dataMircoturbElectGen->MTGenerator(GeneratorNum).Name)); ShowSevereError(state, format("Invalid {} = {}", state.dataIPShortCut->cAlphaFieldNames(5), AlphArray(5))); @@ -899,7 +899,7 @@ void GetMTGeneratorInput(EnergyPlusData &state) void MTGeneratorSpecs::setupOutputVars(EnergyPlusData &state) { - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, "Generator Produced AC Electricity Rate", OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/MicroturbineElectricGenerator.hh b/src/EnergyPlus/MicroturbineElectricGenerator.hh index 8f088e1f57d..1d47670e013 100644 --- a/src/EnergyPlus/MicroturbineElectricGenerator.hh +++ b/src/EnergyPlus/MicroturbineElectricGenerator.hh @@ -165,7 +165,7 @@ namespace MicroturbineElectricGenerator { Real64 ThermalEfficiencyLHV; // Reporting: Thermal (heat recovery to water) efficiency LHV (-) Real64 AncillaryEnergy; // Reporting: Ancillary energy use (J) Real64 StandbyEnergy; // Reporting: Standby energy use (J) - Constant::eResource FuelType; + Constant::eFuel FuelType; bool myFlag; // Default Constructor diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index 110a616da23..4c1c225f196 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -6706,7 +6706,7 @@ void GetMeteredVariables(EnergyPlusData &state, Array1D &VarTypes, // Variable Types (1=integer, 2=real, 3=meter) Array1D &TimeStepTypes, // Variable Index Types (1=Zone,2=HVAC) Array1D &unitsForVar, // units from enum for each variable - std::map &ResourceTypes, // ResourceTypes for each variable + Array1D &ResourceTypes, // ResourceTypes for each variable Array1D_string &EndUses, // EndUses for each variable Array1D_string &Groups, // Groups for each variable Array1D_string &Names, // Variable Names for each variable @@ -6752,7 +6752,7 @@ void GetMeteredVariables(EnergyPlusData &state, TimeStepTypes(NumVariables) = op->RVariableTypes(Loop).timeStepType; unitsForVar(NumVariables) = op->RVariableTypes(Loop).units; - ResourceTypes.at(NumVariables) = static_cast( + ResourceTypes(NumVariables) = static_cast( getEnumerationValue(Constant::eResourceNamesUC, UtilityRoutines::MakeUPPERCase(op->EnergyMeters(MeterPtr).ResourceType))); Names(NumVariables) = op->RVariableTypes(Loop).VarNameUC; @@ -6789,7 +6789,7 @@ void GetMeteredVariables(EnergyPlusData &state, Array1D &VarTypes, // Variable Types (1=integer, 2=real, 3=meter) Array1D &TimeStepTypes, // Variable Index Types (1=Zone,2=HVAC) Array1D &unitsForVar, // units from enum for each variable - std::map &ResourceTypes, // ResourceTypes for each variable + Array1D &ResourceTypes, // ResourceTypes for each variable Array1D_string &EndUses, // EndUses for each variable Array1D_string &Groups, // Groups for each variable Array1D_string &Names, // Variable Names for each variable @@ -6835,7 +6835,7 @@ void GetMeteredVariables(EnergyPlusData &state, TimeStepTypes(NumVariables) = op->RVariableTypes(Loop).timeStepType; unitsForVar(NumVariables) = op->RVariableTypes(Loop).units; - ResourceTypes.at(NumVariables) = static_cast( + ResourceTypes(NumVariables) = static_cast( getEnumerationValue(Constant::eResourceNamesUC, UtilityRoutines::MakeUPPERCase(op->EnergyMeters(MeterPtr).ResourceType))); Names(NumVariables) = op->RVariableTypes(Loop).VarNameUC; diff --git a/src/EnergyPlus/OutputProcessor.hh b/src/EnergyPlus/OutputProcessor.hh index a9926a5261c..ba32aed671c 100644 --- a/src/EnergyPlus/OutputProcessor.hh +++ b/src/EnergyPlus/OutputProcessor.hh @@ -924,7 +924,7 @@ void GetMeteredVariables(EnergyPlusData &state, Array1D &VarTypes, // Variable Types (1=integer, 2=real, 3=meter) Array1D &TimeStepTypes, // Variable Index Types (1=Zone,2=HVAC), Array1D &unitsForVar, // units from enum for each variable - std::map &ResourceTypes, // ResourceTypes for each variable + Array1D &ResourceTypes, // ResourceTypes for each variable Array1D_string &EndUses, // EndUses for each variable Array1D_string &Groups, // Groups for each variable Array1D_string &Names, // Variable Names for each variable @@ -938,7 +938,7 @@ void GetMeteredVariables(EnergyPlusData &state, Array1D &VarTypes, // Variable Types (1=integer, 2=real, 3=meter) Array1D &TimeStepTypes, // Variable Index Types (1=Zone,2=HVAC), Array1D &unitsForVar, // units from enum for each variable - std::map &ResourceTypes, // ResourceTypes for each variable + Array1D &ResourceTypes, // ResourceTypes for each variable Array1D_string &EndUses, // EndUses for each variable Array1D_string &Groups, // Groups for each variable Array1D_string &Names, // Variable Names for each variable diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 6c1e9a7e5ff..0d3c2ede721 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -4385,7 +4385,7 @@ void CalcHeatEmissionReport(EnergyPlusData &state) state.dataHeatBal->SysTotalHVACRejectHeatLoss += thisDXCoil.EvapCondPumpElecConsumption + thisDXCoil.BasinHeaterConsumption + thisDXCoil.EvapWaterConsump * RhoWater * H2OHtOfVap_HVAC; } - if (thisDXCoil.FuelType != Constant::eResource::Electricity) { + if (thisDXCoil.FuelType != Constant::eFuel::Electricity) { state.dataHeatBal->SysTotalHVACRejectHeatLoss += thisDXCoil.MSFuelWasteHeat * TimeStepSysSec; } } else if (thisDXCoil.DXCoilType_Num == DataHVACGlobals::CoilDX_HeatingEmpirical || @@ -17331,6 +17331,12 @@ std::string ConvertToEscaped(std::string const &inString, bool isXML) // Input S s += ">"; } else if (c == char(176)) { s += "°"; + } else if (c == char(226) && char(inString[index]) == char(137) && char(inString[index + 1]) == char(164)) { // ≤ + s += "≤"; + index += 2; + } else if (c == char(226) && char(inString[index]) == char(137) && char(inString[index + 1]) == char(165)) { // ≥ + s += "≥"; + index += 2; } else if (c == '\xC2') { if (index == inputSize) { s += '\xC2'; diff --git a/src/EnergyPlus/Plant/MeterData.hh b/src/EnergyPlus/Plant/MeterData.hh index 99dc1f9fdf4..fe9bccbcc61 100644 --- a/src/EnergyPlus/Plant/MeterData.hh +++ b/src/EnergyPlus/Plant/MeterData.hh @@ -59,7 +59,7 @@ namespace DataPlant { // Members std::string ReportVarName; OutputProcessor::Unit ReportVarUnits; - Constant::eResource ResourceType; + Constant::eResource ResourceType = Constant::eResource::Invalid; std::string EndUse; SystemReports::EndUseType EndUse_CompMode; std::string Group; @@ -70,9 +70,8 @@ namespace DataPlant { // Default Constructor MeterData() - : ReportVarUnits(OutputProcessor::Unit::None), ResourceType(Constant::eResource::Invalid), - EndUse_CompMode(SystemReports::EndUseType::NoHeatNoCool), ReportVarIndex(0), ReportVarIndexType(OutputProcessor::TimeStepType::Zone), - ReportVarType(OutputProcessor::VariableType::NotFound), CurMeterReading(0.0) + : ReportVarUnits(OutputProcessor::Unit::None), EndUse_CompMode(SystemReports::EndUseType::NoHeatNoCool), ReportVarIndex(0), + ReportVarIndexType(OutputProcessor::TimeStepType::Zone), ReportVarType(OutputProcessor::VariableType::NotFound), CurMeterReading(0.0) { } }; diff --git a/src/EnergyPlus/PlantChillers.cc b/src/EnergyPlus/PlantChillers.cc index 3bffc60b725..a4820864d1f 100644 --- a/src/EnergyPlus/PlantChillers.cc +++ b/src/EnergyPlus/PlantChillers.cc @@ -2430,8 +2430,7 @@ namespace PlantChillers { thisChiller.DesignMinExitGasTemp = state.dataIPShortCut->rNumericArgs(24); // Validate fuel type input - thisChiller.FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(12))); + thisChiller.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(12))); thisChiller.FuelHeatingValue = state.dataIPShortCut->rNumericArgs(25); @@ -2708,7 +2707,7 @@ namespace PlantChillers { } } - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, format("Chiller {} Rate", sFuelType), OutputProcessor::Unit::W, @@ -4484,9 +4483,8 @@ namespace PlantChillers { } // Fuel Type Case Statement - thisChiller.FuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(10))); - if (thisChiller.FuelType == Constant::eResource::Invalid) { + thisChiller.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(10))); + if (thisChiller.FuelType == Constant::eFuel::Invalid) { ShowSevereError(state, format("Invalid {}={}", state.dataIPShortCut->cAlphaFieldNames(10), state.dataIPShortCut->cAlphaArgs(10))); ShowContinueError(state, format("Entered in {}={}", state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); ShowContinueError( @@ -4707,7 +4705,7 @@ namespace PlantChillers { {}, "Plant"); - std::string_view const sFuelType = Constant::eResourceNames[static_cast(this->FuelType)]; + std::string_view const sFuelType = Constant::eFuelNames[static_cast(this->FuelType)]; SetupOutputVariable(state, format("Chiller {} Rate", sFuelType), OutputProcessor::Unit::W, diff --git a/src/EnergyPlus/PlantChillers.hh b/src/EnergyPlus/PlantChillers.hh index fbf0dff1d87..efc497fc926 100644 --- a/src/EnergyPlus/PlantChillers.hh +++ b/src/EnergyPlus/PlantChillers.hh @@ -265,7 +265,7 @@ namespace PlantChillers { struct EngineDrivenChillerSpecs : BaseChillerSpecs { // temperature at the chiller evaporator side outlet - Constant::eResource FuelType; + Constant::eFuel FuelType; Array1D CapRatCoef; // (EngineDriven RCAVC() ) coeff of cap ratio poly fit Array1D PowerRatCoef; // (EngineDriven ADJEC() ) coeff of power rat poly fit Array1D FullLoadCoef; // (EngineDriven RPWRC() ) coeff of full load poly. fit @@ -363,7 +363,7 @@ namespace PlantChillers { struct GTChillerSpecs : BaseChillerSpecs { // Members - Constant::eResource FuelType; + Constant::eFuel FuelType; Array1D CapRatCoef; // (GT RCAVC() ) coeff of cap ratio poly fit Array1D PowerRatCoef; // (GT ADJEC() ) coeff of power rat poly fit Array1D FullLoadCoef; // (GT RPWRC() ) coeff of full load poly. fit diff --git a/src/EnergyPlus/PlantLoopHeatPumpEIR.cc b/src/EnergyPlus/PlantLoopHeatPumpEIR.cc index 77dc57903c5..f088262fdee 100644 --- a/src/EnergyPlus/PlantLoopHeatPumpEIR.cc +++ b/src/EnergyPlus/PlantLoopHeatPumpEIR.cc @@ -1943,14 +1943,14 @@ void EIRFuelFiredHeatPump::processInputForEIRPLHP(EnergyPlusData &state) // A6 Fuel Type std::string tempRsrStr = UtilityRoutines::MakeUPPERCase(fields.at("fuel_type").get()); - thisPLHP.fuelType = static_cast(getEnumerationValue(Constant::eResourceNamesUC, tempRsrStr)); + thisPLHP.fuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, tempRsrStr)); // Validate fuel type input static constexpr std::string_view RoutineName("processInputForEIRPLHP: "); - if (thisPLHP.fuelType == Constant::eResource::Invalid) { + if (thisPLHP.fuelType == Constant::eFuel::Invalid) { ShowSevereError(state, format("{}{}=\"{}\",", RoutineName, cCurrentModuleObject, thisPLHP.name)); ShowContinueError(state, format("Invalid Fuel Type = {}", tempRsrStr)); ShowContinueError(state, "Reset the Fuel Type to \"NaturalGas\"."); - thisPLHP.fuelType = Constant::eResource::NaturalGas; + thisPLHP.fuelType = Constant::eFuel::NaturalGas; errorsFound = true; } @@ -2399,7 +2399,7 @@ void EIRFuelFiredHeatPump::oneTimeInit(EnergyPlusData &state) OutputProcessor::SOVStoreType::Summed, this->name, {}, - Constant::eResourceNames[static_cast(this->fuelType)], + Constant::eFuelNames[static_cast(this->fuelType)], "Cooling", this->endUseSubcat, //"Heat Pump", "Plant"); @@ -2425,7 +2425,7 @@ void EIRFuelFiredHeatPump::oneTimeInit(EnergyPlusData &state) OutputProcessor::SOVStoreType::Summed, this->name, {}, - Constant::eResourceNames[static_cast(this->fuelType)], + Constant::eFuelNames[static_cast(this->fuelType)], "Heating", this->endUseSubcat, // "Heat Pump", "Plant"); diff --git a/src/EnergyPlus/PlantLoopHeatPumpEIR.hh b/src/EnergyPlus/PlantLoopHeatPumpEIR.hh index 2186e23c1e7..ff836a62543 100644 --- a/src/EnergyPlus/PlantLoopHeatPumpEIR.hh +++ b/src/EnergyPlus/PlantLoopHeatPumpEIR.hh @@ -236,7 +236,7 @@ namespace EIRPlantLoopHeatPumps { }; // New additions for GAHP only - Constant::eResource fuelType = Constant::eResource::Invalid; // resource type assignment + Constant::eFuel fuelType = Constant::eFuel::Invalid; // Fuel type assignment std::string endUseSubcat = ""; DataPlant::FlowMode flowMode = DataPlant::FlowMode::Invalid; Real64 desSupplyTemp = 60.0; diff --git a/src/EnergyPlus/SetPointManager.cc b/src/EnergyPlus/SetPointManager.cc index 848353c81b7..885ba97a6a7 100644 --- a/src/EnergyPlus/SetPointManager.cc +++ b/src/EnergyPlus/SetPointManager.cc @@ -8363,7 +8363,7 @@ void DefineIdealCondEntSetPointManager::SetupMeteredVarsForSetPt(EnergyPlusData Array1D VarTypes; // Variable Types (1=integer, 2=real, 3=meter) Array1D IndexTypes; // Variable Index Types (1=Zone,2=HVAC) Array1D unitsForVar; // units from enum for each variable - std::map ResourceTypes; // ResourceTypes for each variable + Array1D ResourceTypes; // ResourceTypes for each variable Array1D_string EndUses; // EndUses for each variable Array1D_string Groups; // Groups for each variable Array1D_string Names; // Variable Names for each variable @@ -8389,11 +8389,7 @@ void DefineIdealCondEntSetPointManager::SetupMeteredVarsForSetPt(EnergyPlusData VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -8411,12 +8407,7 @@ void DefineIdealCondEntSetPointManager::SetupMeteredVarsForSetPt(EnergyPlusData VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - - ResourceTypes.clear(); - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -8442,12 +8433,7 @@ void DefineIdealCondEntSetPointManager::SetupMeteredVarsForSetPt(EnergyPlusData VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - - ResourceTypes.clear(); - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -8465,12 +8451,7 @@ void DefineIdealCondEntSetPointManager::SetupMeteredVarsForSetPt(EnergyPlusData VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - - ResourceTypes.clear(); - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index bf965960570..51b4b832b28 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -6370,6 +6370,8 @@ void UpdateSysSizing(EnergyPlusData &state, Constant::CallIndicator const CallIn state.dataSize->CalcSysSizing(AirLoopNum).SysCoolOutHumRatSeq = sysSizing.SysCoolOutHumRatSeq; state.dataSize->CalcSysSizing(AirLoopNum).SysDOASHeatAddSeq = sysSizing.SysDOASHeatAddSeq; state.dataSize->CalcSysSizing(AirLoopNum).SysDOASLatAddSeq = sysSizing.SysDOASLatAddSeq; + state.dataSize->CalcSysSizing(AirLoopNum).SysDesCoolLoad = sysSizing.SysDesCoolLoad; + state.dataSize->CalcSysSizing(AirLoopNum).SysCoolLoadTimeStepPk = sysSizing.SysCoolLoadTimeStepPk; } state.dataSize->CalcSysSizing(AirLoopNum).SysCoolCoinSpaceSens = sysSizing.SysCoolCoinSpaceSens; } diff --git a/src/EnergyPlus/SizingManager.cc b/src/EnergyPlus/SizingManager.cc index 63173aafb9c..0d522ce40cb 100644 --- a/src/EnergyPlus/SizingManager.cc +++ b/src/EnergyPlus/SizingManager.cc @@ -791,11 +791,13 @@ void ManageSizing(EnergyPlusData &state) std::string coolPeakDDDate; int coolPeakDD = 0; Real64 coolCap = 0.; + int timeStepIndexAtPeakCoolLoad = 0; if (FinalSysSizing(AirLoopNum).coolingPeakLoad == DataSizing::PeakLoad::SensibleCooling) { coolPeakLoadKind = "Sensible"; coolPeakDDDate = SysSizPeakDDNum(AirLoopNum).cSensCoolPeakDDDate; coolPeakDD = SysSizPeakDDNum(AirLoopNum).SensCoolPeakDD; coolCap = FinalSysSizing(AirLoopNum).SensCoolCap; + timeStepIndexAtPeakCoolLoad = SysSizPeakDDNum(AirLoopNum).TimeStepAtSensCoolPk(coolPeakDD); } else if (FinalSysSizing(AirLoopNum).coolingPeakLoad == DataSizing::PeakLoad::TotalCooling) { if (FinalSysSizing(AirLoopNum).loadSizingType == DataSizing::LoadSizing::Latent && state.dataHeatBal->DoLatentSizing) { coolPeakLoadKind = "Total Based on Latent"; @@ -805,6 +807,7 @@ void ManageSizing(EnergyPlusData &state) coolPeakDDDate = SysSizPeakDDNum(AirLoopNum).cTotCoolPeakDDDate; coolPeakDD = SysSizPeakDDNum(AirLoopNum).TotCoolPeakDD; coolCap = FinalSysSizing(AirLoopNum).TotCoolCap; + timeStepIndexAtPeakCoolLoad = SysSizPeakDDNum(AirLoopNum).TimeStepAtTotCoolPk(coolPeakDD); } if (coolPeakDD > 0) { ReportSysSizing(state, @@ -816,7 +819,7 @@ void ManageSizing(EnergyPlusData &state) FinalSysSizing(AirLoopNum).DesCoolVolFlow, FinalSysSizing(AirLoopNum).CoolDesDay, coolPeakDDDate, - SysSizPeakDDNum(AirLoopNum).TimeStepAtHeatPk(coolPeakDD)); + timeStepIndexAtPeakCoolLoad); } else { ReportSysSizing(state, curName, @@ -4477,7 +4480,7 @@ void ReportSysSizing(EnergyPlusData &state, if (state.dataSizingManager->ReportSysSizingMyOneTimeFlag) { print(state.files.eio, "{}\n", - "! , System Name, Load Type, Peak Load Kind, User Design Capacity, Calc Des Air " + "! , System Name, Load Type, Peak Load Kind, User Design Capacity [W], Calc Des Air " "Flow Rate [m3/s], User Des Air Flow Rate [m3/s], Design Day Name, Date/Time of Peak"); state.dataSizingManager->ReportSysSizingMyOneTimeFlag = false; } diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index 8f70389c30c..1752b9fd7f4 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -1056,23 +1056,22 @@ void UpdatePoolSourceValAvg(EnergyPlusData &state, bool &SwimmingPoolOn) // .TRU // SUBROUTINE LOCAL VARIABLE DECLARATIONS: SwimmingPoolOn = false; - // If this was never allocated, then there are no radiant systems in this input file (just RETURN) + // If this was never allocated, then there are no swimming pools in this input file (just RETURN) for (int PoolNum = 1; PoolNum <= state.dataSwimmingPools->NumSwimmingPools; ++PoolNum) { if (!allocated(state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg)) return; - // If it was allocated, then we have to check to see if this was running at all + // If it was allocated, then we have to check to see if this pool was running at all. If so, update pool terms also. for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { if (state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg(SurfNum) != 0.0) { SwimmingPoolOn = true; + state.dataHeatBalFanSys->QPoolSurfNumerator(SurfNum) = state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg(SurfNum); + state.dataHeatBalFanSys->PoolHeatTransCoefs(SurfNum) = state.dataSwimmingPools->Pool(PoolNum).HeatTransCoefsAvg(SurfNum); break; // DO loop } } - - state.dataHeatBalFanSys->QPoolSurfNumerator = state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg; - state.dataHeatBalFanSys->PoolHeatTransCoefs = state.dataSwimmingPools->Pool(PoolNum).HeatTransCoefsAvg; } - // For interzone surfaces, modQPoolSrcAvg was only updated for the "active" side. The active side + // For interzone surfaces, QPoolSrcAvg was only updated for the "active" side. The active side // would have a non-zero value at this point. If the numbers differ, then we have to manually update. for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { if (state.dataSurface->Surface(SurfNum).ExtBoundCond > 0 && state.dataSurface->Surface(SurfNum).ExtBoundCond != SurfNum) { diff --git a/src/EnergyPlus/SystemReports.cc b/src/EnergyPlus/SystemReports.cc index f5b52f41d48..32fd4cee9e7 100644 --- a/src/EnergyPlus/SystemReports.cc +++ b/src/EnergyPlus/SystemReports.cc @@ -2205,7 +2205,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) Array1D_string UnitsStrings; // UnitsStrings for each variable Array1D IndexTypes; // Variable Idx Types (1=Zone,2=HVAC) Array1D unitsForVar; // units from enum for each variable - std::map ResourceTypes; // ResourceTypes for each variable + Array1D ResourceTypes; // ResourceTypes for each variable Array1D_string EndUses; // EndUses for each variable Array1D_string Groups; // Groups for each variable Array1D_string Names; // Variable Names for each variable @@ -2364,11 +2364,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } - + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -2396,7 +2392,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -2419,6 +2415,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.deallocate(); IndexTypes.deallocate(); unitsForVar.deallocate(); + ResourceTypes.deallocate(); EndUses.deallocate(); Groups.deallocate(); Names.deallocate(); @@ -2433,10 +2430,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -2464,7 +2458,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -2504,10 +2498,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -2535,7 +2526,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -2618,10 +2609,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -2649,7 +2637,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -2784,10 +2772,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -2815,7 +2800,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -2854,10 +2839,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -2885,7 +2867,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -3092,10 +3074,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -3124,7 +3103,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { @@ -3161,10 +3140,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) VarTypes.allocate(NumVariables); IndexTypes.allocate(NumVariables); unitsForVar.allocate(NumVariables); - ResourceTypes.clear(); - for (int idx = 1; idx <= NumVariables; ++idx) { - ResourceTypes.insert(std::pair(idx, Constant::eResource::Invalid)); - } + ResourceTypes.allocate(NumVariables); EndUses.allocate(NumVariables); Groups.allocate(NumVariables); Names.allocate(NumVariables); @@ -3192,7 +3168,7 @@ void CreateEnergyReportStructure(EnergyPlusData &state) thisVar.ReportVarIndex = VarIndexes(VarNum); thisVar.ReportVarIndexType = IndexTypes(VarNum); thisVar.ReportVarType = VarTypes(VarNum); - thisVar.ResourceType = ResourceTypes.at(VarNum); + thisVar.ResourceType = ResourceTypes(VarNum); thisVar.EndUse = EndUses(VarNum); if (thisVar.EndUse == "HEATINGCOILS" && ModeFlagOn) { for (VarNum1 = 1; VarNum1 <= NumVariables; ++VarNum1) { diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 4507f71cb44..d53e94c0f73 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -10420,7 +10420,7 @@ namespace UnitarySystems { if (this->m_SuppCoilExists) { if (this->m_DehumidControlType_Num == DehumCtrlType::CoolReheat) { - if (state.dataUnitarySystems->MoistureLoad < 0.0 && this->m_HeatPump) { + if (state.dataUnitarySystems->MoistureLoad < 0.0 && this->m_CoolCoilExists) { state.dataUnitarySystems->HeatingLoad = false; state.dataUnitarySystems->CoolingLoad = true; } diff --git a/src/EnergyPlus/UtilityRoutines.cc b/src/EnergyPlus/UtilityRoutines.cc index 98c8ddc4672..63ca48e3a20 100644 --- a/src/EnergyPlus/UtilityRoutines.cc +++ b/src/EnergyPlus/UtilityRoutines.cc @@ -776,6 +776,13 @@ int EndEnergyPlus(EnergyPlusData &state) // indicating that E+ finished its simulation if ((state.dataExternalInterface->NumExternalInterfaces > 0) && state.dataExternalInterface->haveExternalInterfaceBCVTB) CloseSocket(state, 1); + if (state.dataGlobal->fProgressPtr) { + state.dataGlobal->fProgressPtr(100); + } + if (state.dataGlobal->progressCallback) { + state.dataGlobal->progressCallback(100); + } + if (state.dataGlobal->eplusRunningViaAPI) { state.files.flushAll(); } diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index cf78a541647..75bf0fb2430 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -2434,16 +2434,16 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) Tank.IgnitionDelay = state.dataIPShortCut->rNumericArgs(7); // Not yet implemented // Validate Heater Fuel Type - Tank.FuelType = static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(4))); + Tank.FuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(4))); switch (Tank.FuelType) { - case Constant::eResource::Invalid: { + case Constant::eFuel::Invalid: { ShowSevereError(state, format("{} = {}: Invalid Heater Fuel Type entered={}", state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1), state.dataIPShortCut->cAlphaArgs(4))); // Set to Electric to avoid errors when setting up output variables - Tank.FuelType = Constant::eResource::Electricity; + Tank.FuelType = Constant::eFuel::Electricity; ErrorsFound = true; break; } @@ -2496,10 +2496,9 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) Tank.OffCycParaLoad = state.dataIPShortCut->rNumericArgs(9); // Validate Off-Cycle Parasitic Fuel Type - Tank.OffCycParaFuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(6))); + Tank.OffCycParaFuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(6))); switch (Tank.OffCycParaFuelType) { - case Constant::eResource::Invalid: + case Constant::eFuel::Invalid: if (state.dataIPShortCut->cAlphaArgs(6).empty()) { // If blank, default to Fuel Type for heater Tank.OffCycParaFuelType = Tank.FuelType; } else { // could have been an unsupported value @@ -2509,7 +2508,7 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(1), state.dataIPShortCut->cAlphaArgs(6))); // Set to Electric to avoid errors when setting up output variables - Tank.OffCycParaFuelType = Constant::eResource::Electricity; + Tank.OffCycParaFuelType = Constant::eFuel::Electricity; ErrorsFound = true; } break; @@ -2522,10 +2521,9 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) Tank.OnCycParaLoad = state.dataIPShortCut->rNumericArgs(11); // Validate On-Cycle Parasitic Fuel Type - Tank.OnCycParaFuelType = - static_cast(getEnumerationValue(Constant::eResourceNamesUC, state.dataIPShortCut->cAlphaArgs(7))); + Tank.OnCycParaFuelType = static_cast(getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs(7))); switch (Tank.OnCycParaFuelType) { - case Constant::eResource::Invalid: + case Constant::eFuel::Invalid: if (state.dataIPShortCut->cAlphaArgs(7).empty()) { // If blank, default to Fuel Type for heater Tank.OnCycParaFuelType = Tank.FuelType; } else { // could have been an unsupported value @@ -2535,7 +2533,7 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(1), state.dataIPShortCut->cAlphaArgs(7))); // Set to Electric to avoid errors when setting up output variables - Tank.OnCycParaFuelType = Constant::eResource::Electricity; + Tank.OnCycParaFuelType = Constant::eFuel::Electricity; ErrorsFound = true; } break; @@ -3004,18 +3002,18 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) } // Validate Heater Fuel Type - Tank.FuelType = static_cast( - getEnumerationValue(Constant::eResourceNamesUC, + Tank.FuelType = static_cast( + getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs( 7))); // returns all kinds of fuels including district heat and cool + steam, returns unassigned if unsupported - if (Tank.FuelType == Constant::eResource::Invalid) { + if (Tank.FuelType == Constant::eFuel::Invalid) { ShowSevereError(state, format("{} = {}: Invalid Heater Fuel Type entered={}", state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1), state.dataIPShortCut->cAlphaArgs(7))); // Set to Electric to avoid errors when setting up output variables - Tank.FuelType = Constant::eResource::Electricity; + Tank.FuelType = Constant::eFuel::Electricity; ErrorsFound = true; } @@ -3032,11 +3030,11 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) Tank.OffCycParaLoad = state.dataIPShortCut->rNumericArgs(12); // Validate Off-Cycle Parasitic Fuel Type - Tank.OffCycParaFuelType = static_cast( - getEnumerationValue(Constant::eResourceNamesUC, + Tank.OffCycParaFuelType = static_cast( + getEnumerationValue(Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs( 8))); // returns all kinds of fuels including district heat and cool + steam, returns unassigned if unsupported - if (Tank.OffCycParaFuelType == Constant::eResource::Invalid) { + if (Tank.OffCycParaFuelType == Constant::eFuel::Invalid) { if (state.dataIPShortCut->cAlphaArgs(8).empty()) { Tank.OffCycParaFuelType = Tank.FuelType; } else { @@ -3046,7 +3044,7 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(1), state.dataIPShortCut->cAlphaArgs(8))); // Set to Electric to avoid errors when setting up output variables - Tank.OffCycParaFuelType = Constant::eResource::Electricity; + Tank.OffCycParaFuelType = Constant::eFuel::Electricity; ErrorsFound = true; } } @@ -3057,11 +3055,11 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) Tank.OnCycParaLoad = state.dataIPShortCut->rNumericArgs(15); // Validate On-Cycle Parasitic Fuel Type - Tank.OnCycParaFuelType = static_cast(getEnumerationValue( - Constant::eResourceNamesUC, + Tank.OnCycParaFuelType = static_cast(getEnumerationValue( + Constant::eFuelNamesUC, state.dataIPShortCut->cAlphaArgs( 9))); // returns all kinds of fuels including district heat and cool + steam, returns unassigned if unsupported/empty - if (Tank.OnCycParaFuelType == Constant::eResource::Invalid) { + if (Tank.OnCycParaFuelType == Constant::eFuel::Invalid) { if (state.dataIPShortCut->cAlphaArgs(9).empty()) { Tank.OnCycParaFuelType = Tank.FuelType; } else { @@ -3071,7 +3069,7 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(1), state.dataIPShortCut->cAlphaArgs(9))); // Set to Electric to avoid errors when setting up output variables - Tank.OnCycParaFuelType = Constant::eResource::Electricity; + Tank.OnCycParaFuelType = Constant::eFuel::Electricity; ErrorsFound = true; } } @@ -3522,14 +3520,14 @@ bool getWaterTankMixedInput(EnergyPlusData &state) Tank.MassFlowRateMin = 0.0; Tank.IgnitionDelay = 0.0; - Tank.FuelType = Constant::eResource::Electricity; + Tank.FuelType = Constant::eFuel::Electricity; Tank.Efficiency = 1.0; Tank.PLFCurve = 0; Tank.OffCycParaLoad = 0.0; - Tank.OffCycParaFuelType = Constant::eResource::Electricity; + Tank.OffCycParaFuelType = Constant::eFuel::Electricity; Tank.OffCycParaFracToTank = 0.0; Tank.OnCycParaLoad = 0.0; - Tank.OnCycParaFuelType = Constant::eResource::Electricity; + Tank.OnCycParaFuelType = Constant::eFuel::Electricity; Tank.OnCycParaFracToTank = 0.0; Tank.AmbientTempIndicator = static_cast( @@ -3858,14 +3856,14 @@ bool getWaterTankStratifiedInput(EnergyPlusData &state) Tank.SetPointTempSchedule2 = 0; Tank.MaxCapacity2 = 0.0; Tank.HeaterHeight2 = 0.0; - Tank.FuelType = Constant::eResource::Electricity; + Tank.FuelType = Constant::eFuel::Electricity; Tank.OffCycParaLoad = 0.0; - Tank.OffCycParaFuelType = Constant::eResource::Electricity; + Tank.OffCycParaFuelType = Constant::eFuel::Electricity; Tank.OffCycParaFracToTank = 0.0; Tank.OffCycParaHeight = 0.0; Tank.OnCycParaLoad = 0.0; - Tank.OnCycParaFuelType = Constant::eResource::Electricity; + Tank.OnCycParaFuelType = Constant::eFuel::Electricity; Tank.OnCycParaFracToTank = 0.0; Tank.OnCycParaHeight = 0.0; @@ -5435,61 +5433,61 @@ void WaterThermalTankData::setupWaterHeaterOutputVars(EnergyPlusData &state) this->Name); SetupOutputVariable(state, - format("Water Heater {} Rate", Constant::eResourceNames[static_cast(this->FuelType)]), + format("Water Heater {} Rate", Constant::eFuelNames[static_cast(this->FuelType)]), OutputProcessor::Unit::W, this->FuelRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, this->Name); SetupOutputVariable(state, - format("Water Heater {} Energy", Constant::eResourceNames[static_cast(this->FuelType)]), + format("Water Heater {} Energy", Constant::eFuelNames[static_cast(this->FuelType)]), OutputProcessor::Unit::J, this->FuelEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, this->Name, {}, - Constant::eResourceNames[static_cast(this->FuelType)], + Constant::eFuelNames[static_cast(this->FuelType)], "DHW", this->EndUseSubcategoryName, "Plant"); SetupOutputVariable(state, - format("Water Heater Off Cycle Parasitic {} Rate", Constant::eResourceNames[static_cast(this->OffCycParaFuelType)]), + format("Water Heater Off Cycle Parasitic {} Rate", Constant::eFuelNames[static_cast(this->OffCycParaFuelType)]), OutputProcessor::Unit::W, this->OffCycParaFuelRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, this->Name); SetupOutputVariable(state, - format("Water Heater Off Cycle Parasitic {} Energy", Constant::eResourceNames[static_cast(this->OffCycParaFuelType)]), + format("Water Heater Off Cycle Parasitic {} Energy", Constant::eFuelNames[static_cast(this->OffCycParaFuelType)]), OutputProcessor::Unit::J, this->OffCycParaFuelEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, this->Name, {}, - Constant::eResourceNames[static_cast(this->OffCycParaFuelType)], + Constant::eFuelNames[static_cast(this->OffCycParaFuelType)], "DHW", this->EndUseSubcategoryName, "Plant"); SetupOutputVariable(state, - format("Water Heater On Cycle Parasitic {} Rate", Constant::eResourceNames[static_cast(this->OnCycParaFuelType)]), + format("Water Heater On Cycle Parasitic {} Rate", Constant::eFuelNames[static_cast(this->OnCycParaFuelType)]), OutputProcessor::Unit::W, this->OnCycParaFuelRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, this->Name); SetupOutputVariable(state, - format("Water Heater On Cycle Parasitic {} Energy", Constant::eResourceNames[static_cast(this->OnCycParaFuelType)]), + format("Water Heater On Cycle Parasitic {} Energy", Constant::eFuelNames[static_cast(this->OnCycParaFuelType)]), OutputProcessor::Unit::J, this->OnCycParaFuelEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, this->Name, {}, - Constant::eResourceNames[static_cast(this->OnCycParaFuelType)], + Constant::eFuelNames[static_cast(this->OnCycParaFuelType)], "DHW", this->EndUseSubcategoryName, "Plant"); @@ -11049,17 +11047,17 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) // assume can propagate rules for gas to other fuels. bool FuelTypeIsLikeGas = false; switch (this->FuelType) { - case Constant::eResource::NaturalGas: - case Constant::eResource::Diesel: - case Constant::eResource::Gasoline: - case Constant::eResource::Coal: - case Constant::eResource::FuelOilNo1: - case Constant::eResource::FuelOilNo2: - case Constant::eResource::Propane: - case Constant::eResource::Steam: - case Constant::eResource::OtherFuel1: - case Constant::eResource::OtherFuel2: - case Constant::eResource::DistrictHeating: + case Constant::eFuel::NaturalGas: + case Constant::eFuel::Diesel: + case Constant::eFuel::Gasoline: + case Constant::eFuel::Coal: + case Constant::eFuel::FuelOilNo1: + case Constant::eFuel::FuelOilNo2: + case Constant::eFuel::Propane: + case Constant::eFuel::Steam: + case Constant::eFuel::OtherFuel1: + case Constant::eFuel::OtherFuel2: + case Constant::eFuel::DistrictHeating: FuelTypeIsLikeGas = true; break; default: // FuelTypeIsLikeGas stays false @@ -11067,7 +11065,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) } if (this->Sizing.NumberOfBedrooms == 1) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 20.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 2.5 * 1000.0; // 2.5 kW } else if (FuelTypeIsLikeGas) { @@ -11077,7 +11075,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) } else if (this->Sizing.NumberOfBedrooms == 2) { if (this->Sizing.NumberOfBathrooms <= 1.5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 30.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 3.5 * 1000.0; // 3.5 kW } else if (FuelTypeIsLikeGas) { @@ -11085,7 +11083,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if ((this->Sizing.NumberOfBathrooms > 1.5) && (this->Sizing.NumberOfBathrooms < 3.0)) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 40.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 4.5 * 1000.0; // 4.5 kW } else if (FuelTypeIsLikeGas) { @@ -11093,7 +11091,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if (this->Sizing.NumberOfBathrooms >= 3.0) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11103,7 +11101,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) } } else if (this->Sizing.NumberOfBedrooms == 3) { if (this->Sizing.NumberOfBathrooms <= 1.5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 40.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 4.5 * 1000.0; // 4.5 kW } else if (FuelTypeIsLikeGas) { @@ -11111,7 +11109,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if ((this->Sizing.NumberOfBathrooms > 1.5) && (this->Sizing.NumberOfBathrooms < 3.0)) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11119,7 +11117,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if (this->Sizing.NumberOfBathrooms >= 3.0) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11129,7 +11127,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) } } else if (this->Sizing.NumberOfBedrooms == 4) { if (this->Sizing.NumberOfBathrooms <= 1.5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11137,7 +11135,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if ((this->Sizing.NumberOfBathrooms > 1.5) && (this->Sizing.NumberOfBathrooms < 3.0)) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11145,7 +11143,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 38.0 * kBtuPerHrToWatts; // 38 kBtu/hr } } else if (this->Sizing.NumberOfBathrooms >= 3.0) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 66.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11154,7 +11152,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) } } } else if (this->Sizing.NumberOfBedrooms == 5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 66.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11162,7 +11160,7 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 47.0 * kBtuPerHrToWatts; // 47 kBtu/hr } } else if (this->Sizing.NumberOfBedrooms >= 6) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 66.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11772,17 +11770,17 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) // assume can propagate rules for gas to other fuels. bool FuelTypeIsLikeGas = false; switch (this->FuelType) { - case Constant::eResource::NaturalGas: - case Constant::eResource::Diesel: - case Constant::eResource::Gasoline: - case Constant::eResource::Coal: - case Constant::eResource::FuelOilNo1: - case Constant::eResource::FuelOilNo2: - case Constant::eResource::Propane: - case Constant::eResource::Steam: - case Constant::eResource::OtherFuel1: - case Constant::eResource::OtherFuel2: - case Constant::eResource::DistrictHeating: + case Constant::eFuel::NaturalGas: + case Constant::eFuel::Diesel: + case Constant::eFuel::Gasoline: + case Constant::eFuel::Coal: + case Constant::eFuel::FuelOilNo1: + case Constant::eFuel::FuelOilNo2: + case Constant::eFuel::Propane: + case Constant::eFuel::Steam: + case Constant::eFuel::OtherFuel1: + case Constant::eFuel::OtherFuel2: + case Constant::eFuel::DistrictHeating: FuelTypeIsLikeGas = true; break; default: // FuelTypeIsLikeGas stays false @@ -11790,7 +11788,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } if (this->Sizing.NumberOfBedrooms == 1) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 20.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 2.5 * 1000.0; // 2.5 kW } else if (FuelTypeIsLikeGas) { @@ -11800,7 +11798,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } else if (this->Sizing.NumberOfBedrooms == 2) { if (this->Sizing.NumberOfBathrooms <= 1.5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 30.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 3.5 * 1000.0; // 3.5 kW } else if (FuelTypeIsLikeGas) { @@ -11808,7 +11806,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if ((this->Sizing.NumberOfBathrooms > 1.5) && (this->Sizing.NumberOfBathrooms < 3.0)) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 40.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 4.5 * 1000.0; // 4.5 kW } else if (FuelTypeIsLikeGas) { @@ -11816,7 +11814,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if (this->Sizing.NumberOfBathrooms >= 3.0) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11826,7 +11824,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } } else if (this->Sizing.NumberOfBedrooms == 3) { if (this->Sizing.NumberOfBathrooms <= 1.5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 40.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 4.5 * 1000.0; // 4.5 kW } else if (FuelTypeIsLikeGas) { @@ -11834,7 +11832,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if ((this->Sizing.NumberOfBathrooms > 1.5) && (this->Sizing.NumberOfBathrooms < 3.0)) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11842,7 +11840,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if (this->Sizing.NumberOfBathrooms >= 3.0) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11852,7 +11850,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } } else if (this->Sizing.NumberOfBedrooms == 4) { if (this->Sizing.NumberOfBathrooms <= 1.5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11860,7 +11858,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 36.0 * kBtuPerHrToWatts; // 36 kBtu/hr } } else if ((this->Sizing.NumberOfBathrooms > 1.5) && (this->Sizing.NumberOfBathrooms < 3.0)) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 50.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11868,7 +11866,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 38.0 * kBtuPerHrToWatts; // 38 kBtu/hr } } else if (this->Sizing.NumberOfBathrooms >= 3.0) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 66.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11877,7 +11875,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } } } else if (this->Sizing.NumberOfBedrooms == 5) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 66.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { @@ -11885,7 +11883,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 47.0 * kBtuPerHrToWatts; // 47 kBtu/hr } } else if (this->Sizing.NumberOfBedrooms >= 6) { - if (this->FuelType == Constant::eResource::Electricity) { + if (this->FuelType == Constant::eFuel::Electricity) { if (this->VolumeWasAutoSized) tmpTankVolume = 66.0 * GalTocubicMeters; if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 5.5 * 1000.0; // 5.5 kW } else if (FuelTypeIsLikeGas) { diff --git a/src/EnergyPlus/WaterThermalTanks.hh b/src/EnergyPlus/WaterThermalTanks.hh index 1e1e1f58de4..057b70a480c 100644 --- a/src/EnergyPlus/WaterThermalTanks.hh +++ b/src/EnergyPlus/WaterThermalTanks.hh @@ -497,7 +497,7 @@ namespace WaterThermalTanks { TankOperatingMode SavedMode = TankOperatingMode::Floating; // Mode indicator saved from previous time step HeaterControlMode ControlType; // Indicator for Heater Control type PriorityControlMode StratifiedControlMode; // Indicator for Stratified Water Heaters Priority Control Type - Constant::eResource FuelType; // Fuel type + Constant::eFuel FuelType; // Fuel type Real64 MaxCapacity; // Maximum capacity of auxiliary heater 1 (W) bool MaxCapacityWasAutoSized; // true if heater 1 capacity was autosized on input Real64 MinCapacity; // Minimum capacity of auxiliary heater 1 (W) @@ -509,10 +509,10 @@ namespace WaterThermalTanks { Real64 TankTempLimit; // Maximum tank temperature limit before venting (C) Real64 IgnitionDelay; // Time delay before heater is allowed to turn on (s) Real64 OffCycParaLoad; // Rate for off-cycle parasitic load (W) - Constant::eResource OffCycParaFuelType; // Fuel type for off-cycle parasitic load + Constant::eFuel OffCycParaFuelType; // Fuel type for off-cycle parasitic load Real64 OffCycParaFracToTank; // Fraction of off-cycle parasitic energy ending up in tank (W) Real64 OnCycParaLoad; // Rate for on-cycle parasitic load (W) - Constant::eResource OnCycParaFuelType; // Fuel type for on-cycle parasitic load + Constant::eFuel OnCycParaFuelType; // Fuel type for on-cycle parasitic load Real64 OnCycParaFracToTank; // Fraction of on-cycle parasitic energy ending up in tank (W) DataPlant::FlowLock UseCurrentFlowLock; // current flow lock setting on use side int UseInletNode; // Inlet node on the use side; colder water returning to a hottank diff --git a/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md b/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md index edb5b012b46..7855633973c 100644 --- a/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md +++ b/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md @@ -7,6 +7,10 @@ This file documents the structural changes on the output of EnergyPlus that coul This will eventually become a more structured file, but currently it isn't clear what format is best. As an intermediate solution, and to allow the form to be formed organically, this plain text file is being used. Entries should be clearly delimited. It isn't expected that there will be but maybe a couple each release at most. Entries should also include some reference back to the repo. At least a PR number or whatever. -### Template Title +### EIO System Sizing Information User Design Capacity header +Missing unit is added to the EIO ystem Sizing Informationg table "User Design Capacity" header as shown below: +- , System Name, Load Type, Peak Load Kind, User Design Capacity [W], Calc Des Air Flow Rate [m3/s], User Des Air Flow Rate [m3/s], Design Day Name, Date/Time of Peak +- This change also impacts the html tabular output report file: report name "Initialization Summary" and table name "System Sizing Information". + +See pull request [#9967](https://github.com/NREL/EnergyPlus/pull/9967) for more details. -Change description goes here, use links to the PR such as [#9117](https://github.com/NREL/EnergyPlus/pull/9117/files). diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt index 1b87709e62a..6d84ac86f4b 100644 --- a/testfiles/CMakeLists.txt +++ b/testfiles/CMakeLists.txt @@ -575,6 +575,7 @@ add_simulation_test(IDF_FILE Standard621SimplifiedProcedure_VAVterminal.idf EPW_ add_simulation_test(IDF_FILE SteamSystemAutoSize.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE StormWindow.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE StripMallZoneEvapCooler.idf EPW_FILE USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw) +add_simulation_test(IDF_FILE StripMallZoneEvapCoolerRHcutoff.idf EPW_FILE USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw) add_simulation_test(IDF_FILE StripMallZoneEvapCoolerAutosized.idf EPW_FILE USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw) add_simulation_test(IDF_FILE SuperMarketDetailed_DesuperHeatingCoil.idf EPW_FILE USA_FL_Miami.Intl.AP.722020_TMY3.epw) add_simulation_test(IDF_FILE SuperMarket_DesuperHeatingCoil.idf EPW_FILE USA_FL_Miami.Intl.AP.722020_TMY3.epw) diff --git a/testfiles/StripMallZoneEvapCoolerRHcutoff.idf b/testfiles/StripMallZoneEvapCoolerRHcutoff.idf new file mode 100644 index 00000000000..4bdff5eb52a --- /dev/null +++ b/testfiles/StripMallZoneEvapCoolerRHcutoff.idf @@ -0,0 +1,5324 @@ +!StripMallZoneEvapCooler +! +! Description: This example file was derived from DOE Reference Building Model for a new strip mall in Boulder, CO +! Modified to demonstrate 10 different types of zone evaporative cooler units. +! +! Location: Boulder Colorado. +! +! Single story, 10 single-zone stores, double size on end and middle. +! Form: Area = 2090 m2 (22,500 ft2); single size store 174 m2 (1,875 ft2) +! Number of Stories = 1; Shape = rectangle +! Envelope: Envelope thermal properties vary with climate according to ASHRAE Standard 90.1-2004. +! Opaque constructions: steel frame walls; built-up flat roof (insulation above deck); slab-on-grade floor +! Windows: window-to-wall ratio = 10.5% overall, but south wall is the only wall with glazing (26.24%) +! Infiltration = 0.4 cfm/ft2 above grade wall area at 0.3 in wc (75 Pa) adjusted to 0.016 in wc (4 Pa). +! 50% of full value when ventilation system on. +! HVAC: Zone Evaporative Coolers, Electric Baseboards +! +! Evap Units: Zone Description +! LGstore1 Component VS Fan, blow through, zone load VS fan, autosize, 1)Indirect CelDekPad 2)Direct ResearchSpecial +! LGstore2 On/Off Fan, Blow through, thermostat on/off, hardsize, Direct CelDekPad, +! SMstore1 Constant Fan, draw through, zone load on/off, hardsize, Direct CelDekPad, +! SMstore2 Constant Fan, draw through, zone load on/off, autosize, Direct CelDekPad, +! SMStore3 Variable Fan, draw through, zone load VS fan, autosize, Direct CelDekPad, +! SMStore4 Variable Fan, blow through, zone load VS fan, autosize, Direct ResearchSpecial +! SMStore5 Variable Fan, blow through, zone load VS fan, autosize, Indirect ResearchSpecial +! SMstore6 Constant Fan, draw through, thermostat on/off, hardsize, Indirect WetCoil +! SMstore7 Constant Fan, draw through, thermostat on/off, hardsize, 1)Indirect WetCoil 2)Direct CelDekPad +! SMstore8 Variable Fan, blow through, zone load VS fan, autosize, 1)Indirect ResearchSpecial 2)Direct ResearchSpecial +! +! Int. gains: W/m2 (W/ft2) lights elec plug gas plug +! High LPD (2 stores): 23.99 (2.23) 4.3 (0.4) 0 +! Med LPD (3 stores): 18.29 (1.70) 4.3 (0.4) 0 +! Low LPD (5 stores): 13.77 (1.28) 4.3 (0.4) 0 +! People: 6.19 m2/person (15/1000ft2) +! +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Zonal Equipment: Zone Evaporative Coolers, Baseboards +! Air Primary Loops: None +! Plant Loops: None +! System Equipment Autosize: Some +! Purchased Cooling: None +! Purchased Heating: None +! Coils: None +! Pumps: None +! Boilers: None +! Chillers: None +! ***GENERAL SIMULATION PARAMETERS*** +! Number of Zones: 10 + + Version,23.1; + + SimulationControl, + YES, !- Do Zone Sizing Calculation + No, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + YES, !- Run Simulation for Sizing Periods + No, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + + Building, + Strip Mall, !- Name + 0.0000, !- North Axis {deg} + City, !- Terrain + 0.0400, !- Loads Convergence Tolerance Value {W} + 0.2000, !- Temperature Convergence Tolerance Value {deltaC} + FullInteriorAndExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + RunPeriod, + Annual, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 12, !- End Month + 31, !- End Day of Month + , !- End Year + Monday, !- Day of Week for Start Day + No, !- Use Weather File Holidays and Special Days + No, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + +! ***HOLIDAYS & DAYLIGHT SAVINGS*** + + RunPeriodControl:DaylightSavingTime, + 2nd Sunday in March, !- Start Date + 1st Sunday in November; !- End Date + + RunPeriodControl:SpecialDays, + New Years Day, !- Name + January 1, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Veterans Day, !- Name + November 11, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Christmas, !- Name + December 25, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Independence Day, !- Name + July 4, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + MLK Day, !- Name + 3rd Monday in January, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Presidents Day, !- Name + 3rd Monday in February, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Memorial Day, !- Name + Last Monday in May, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Labor Day, !- Name + 1st Monday in September, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Columbus Day, !- Name + 2nd Monday in October, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Thanksgiving, !- Name + 4th Thursday in November,!- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + +! ***SCHEDULE TYPES*** + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + Humidity, !- Name + 10, !- Lower Limit Value + 90, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Number; !- Name + +! ***ALWAYS ON SCHEDULE*** + + Schedule:Compact, + ALWAYS_ON, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1; !- Field 3 + +! ***MISC SIMULATION PARAMETERS*** + + SurfaceConvectionAlgorithm:Inside,TARP; + + SurfaceConvectionAlgorithm:Outside,DOE-2; + + HeatBalanceAlgorithm,ConductionTransferFunction,200.0000; + + ZoneAirHeatBalanceAlgorithm, + AnalyticalSolution; !- Algorithm + + Sizing:Parameters, + 1.2, !- Heating Sizing Factor + 1.2, !- Cooling Sizing Factor + 6; !- Timesteps in Averaging Window + + ConvergenceLimits, + 2, !- Minimum System Timestep {minutes} + 25; !- Maximum HVAC Iterations + + ShadowCalculation, + PolygonClipping, !- Shading Calculation Method + Periodic, !- Shading Calculation Update Frequency Method + 7, !- Shading Calculation Update Frequency + 15000; !- Maximum Figures in Shadow Overlap Calculations + + Timestep,6; + +! WeatherFileName=USA_CO_Boulder_TMY2.epw + + Site:Location, + USA CO-BOULDER, !- Name + 40.02, !- Latitude {deg} + -105.25, !- Longitude {deg} + -7.00, !- Time Zone {hr} + 1634; !- Elevation {m} + +! BOULDER_CO_USA Annual Heating 99.6%, MaxDB=-18.6°C + + SizingPeriod:DesignDay, + BOULDER Ann Htg 99.6% Condns DB, !- Name + 12, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -18.6, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -18.6, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 83175., !- Barometric Pressure {Pa} + 2.9, !- Wind Speed {m/s} + 140, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.00; !- Sky Clearness + +! BOULDER_CO_USA Annual Cooling (WB=>MDB) .4%, MDB=27.4°C WB=18.6°C + + SizingPeriod:DesignDay, + BOULDER Ann Clg .4% Condns WB=>MDB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 27.4, !- Maximum Dry-Bulb Temperature {C} + 15.2, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 18.6, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 83175., !- Barometric Pressure {Pa} + 5, !- Wind Speed {m/s} + 350, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.00; !- Sky Clearness + + Site:WaterMainsTemperature, + CORRELATION, !- Calculation Method + , !- Temperature Schedule Name + 9.84, !- Annual Average Outdoor Air Temperature {C} + 24.70; !- Maximum Difference In Monthly Average Outdoor Air Temperatures {deltaC} + + Site:GroundTemperature:BuildingSurface,19.195,19.191,19.215,19.250,19.367,20.429,21.511,21.776,20.440,19.538,19.333,19.237; + +! ***OPAQUE CONSTRUCTIONS AND MATERIALS*** +! Exterior Walls + + Construction, + Steel Frame Non-res Ext Wall, !- Name + Wood Siding, !- Outside Layer + Steel Frame NonRes Wall Insulation, !- Layer 2 + 1/2IN Gypsum; !- Layer 3 + + Material, + Steel Frame NonRes Wall Insulation, !- Name + MediumRough, !- Roughness + 0.0870564552646045, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Roof + + Construction, + IEAD Non-res Roof, !- Name + Roof Membrane, !- Outside Layer + IEAD NonRes Roof Insulation, !- Layer 2 + Metal Decking; !- Layer 3 + + Material, + IEAD NonRes Roof Insulation, !- Name + MediumRough, !- Roughness + 0.127338688569477, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Slab on grade, unheated + + Construction, + ext-slab, !- Name + HW CONCRETE; !- Outside Layer + +! Interior Walls + + Construction, + int-walls, !- Name + 1/2IN Gypsum, !- Outside Layer + 1/2IN Gypsum; !- Layer 2 + +! ***WINDOW/DOOR CONSTRUCTIONS AND MATERIALS*** + + Construction, + Window Non-res Fixed, !- Name + NonRes Fixed Assembly Window; !- Outside Layer + + WindowMaterial:SimpleGlazingSystem, + NonRes Fixed Assembly Window, !- Name + 3.23646, !- U-Factor {W/m2-K} + 0.39, !- Solar Heat Gain Coefficient + ; !- Visible Transmittance + + Construction, + Swinging Door Non-res, !- Name + Opaque Door panel NonRes;!- Outside Layer + + Material:NoMass, + Opaque Door panel NonRes,!- Name + MediumRough, !- Roughness + 0.101897046243647, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +! ***COMMON CONSTRUCTIONS AND MATERIALS*** + + Construction, + InteriorFurnishings, !- Name + Std Wood 6inch; !- Outside Layer + + Material, + Std Wood 6inch, !- Name + MediumSmooth, !- Roughness + 0.15, !- Thickness {m} + 0.12, !- Conductivity {W/m-K} + 540.0000, !- Density {kg/m3} + 1210, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Material, + Wood Siding, !- Name + MediumSmooth, !- Roughness + 0.0100, !- Thickness {m} + 0.1100, !- Conductivity {W/m-K} + 544.6200, !- Density {kg/m3} + 1210.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7800, !- Solar Absorptance + 0.7800; !- Visible Absorptance + + Material, + 1/2IN Gypsum, !- Name + Smooth, !- Roughness + 0.0127, !- Thickness {m} + 0.1600, !- Conductivity {W/m-K} + 784.9000, !- Density {kg/m3} + 830.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.9200, !- Solar Absorptance + 0.9200; !- Visible Absorptance + + Material, + 1IN Stucco, !- Name + Smooth, !- Roughness + 0.0253, !- Thickness {m} + 0.6918, !- Conductivity {W/m-K} + 1858.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.9200, !- Solar Absorptance + 0.9200; !- Visible Absorptance + + Material, + 8IN CONCRETE HW, !- Name + Rough, !- Roughness + 0.2032, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material, + Metal Siding, !- Name + Smooth, !- Roughness + 0.0015, !- Thickness {m} + 44.9600, !- Conductivity {W/m-K} + 7688.8600, !- Density {kg/m3} + 410.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.2000, !- Solar Absorptance + 0.2000; !- Visible Absorptance + + Material, + HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material:NoMass, + CP02 CARPET PAD, !- Name + VeryRough, !- Roughness + 0.2165, !- Thermal Resistance {m2-K/W} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.8000; !- Visible Absorptance + + Material, + Roof Membrane, !- Name + VeryRough, !- Roughness + 0.0095, !- Thickness {m} + 0.1600, !- Conductivity {W/m-K} + 1121.2900, !- Density {kg/m3} + 1460.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material, + Metal Decking, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.0060, !- Conductivity {W/m-K} + 7680.0000, !- Density {kg/m3} + 418.4000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.3000; !- Visible Absorptance + + Material, + Metal Roofing, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.0060, !- Conductivity {W/m-K} + 7680.0000, !- Density {kg/m3} + 418.4000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.3000; !- Visible Absorptance + + Material, + MAT-CC05 4 HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Acoustic tile for drop ceiling + + Material, + Std AC02, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 5.7000000E-02, !- Conductivity {W/m-K} + 288.0000, !- Density {kg/m3} + 1339.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.2000000; !- Visible Absorptance + + Material:NoMass, + MAT-AIR-WALL, !- Name + Rough, !- Roughness + 0.2079491, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7; !- Solar Absorptance + +! ZONE LIST: +! LGstore1 +! LGstore2 +! SMstore1 +! SMstore2 +! SMstore3 +! SMstore4 +! SMstore5 +! SMstore6 +! SMstore7 +! SMstore8 +! ***ZONES*** + + Zone, + LGstore1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + LGstore2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore5, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore6, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore7, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + SMstore8, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + +! ***WALLS*** + + BuildingSurface:Detailed, + LGstore1_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + LGstore1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 15.2400,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 15.2400,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore1_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + LGstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 15.2400,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 15.2400,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore1_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + LGstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 15.2400,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 15.2400,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore1_Wall_2, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + LGstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore1_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + LGstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 15.2400,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 15.2400,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore1_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + LGstore1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore1_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 15.2400,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 15.2400,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 15.2400,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 15.2400,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore2_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + LGstore2, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 45.7200,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 60.9600,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 60.9600,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 45.7200,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore2_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + LGstore2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 60.9600,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 45.7200,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 45.7200,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 60.9600,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore2_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + LGstore2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 45.7200,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 45.7200,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 60.9600,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 60.9600,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore2_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + LGstore2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore4_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 45.7200,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 45.7200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 45.7200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 45.7200,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore2_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + LGstore2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 60.9600,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 60.9600,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 45.7200,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 45.7200,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LGstore2_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + LGstore2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore5_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 60.9600,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 60.9600,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 60.9600,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 60.9600,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore1_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 15.2400,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 22.8600,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 22.8600,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 15.2400,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore1_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 22.8600,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 15.2400,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 15.2400,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 22.8600,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore1_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 15.2400,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 15.2400,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 22.8600,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 22.8600,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore1_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + LGstore1_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 15.2400,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 15.2400,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 15.2400,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 15.2400,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore1_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 22.8600,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 22.8600,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 15.2400,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 15.2400,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore1_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore2_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 22.8600,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 22.8600,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 22.8600,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 22.8600,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore2_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore2, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 22.8600,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 30.4800,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 30.4800,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 22.8600,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore2_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 30.4800,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 22.8600,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 22.8600,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 30.4800,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore2_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 22.8600,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 22.8600,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 30.4800,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 30.4800,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore2_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore1_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 22.8600,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 22.8600,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 22.8600,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 22.8600,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore2_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 30.4800,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 30.4800,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 22.8600,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 22.8600,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore2_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore3_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 30.4800,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 30.4800,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 30.4800,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 30.4800,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore3_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore3, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 30.4800,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 38.1000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 38.1000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 30.4800,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore3_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore3, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 38.1000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 30.4800,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 30.4800,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 38.1000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore3_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore3, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 30.4800,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 30.4800,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 38.1000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 38.1000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore3_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore2_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 30.4800,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 30.4800,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 30.4800,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 30.4800,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore3_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore3, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 38.1000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 38.1000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 30.4800,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 30.4800,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore3_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore4_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 38.1000,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 38.1000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 38.1000,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 38.1000,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore4_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore4, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 38.1000,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 45.7200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 45.7200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 38.1000,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore4_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 45.7200,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 38.1000,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 38.1000,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 45.7200,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore4_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 38.1000,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 38.1000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 45.7200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 45.7200,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore4_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore3_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 38.1000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 38.1000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 38.1000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 38.1000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore4_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 45.7200,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 45.7200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 38.1000,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 38.1000,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore4_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + LGstore2_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 45.7200,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 45.7200,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 45.7200,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 45.7200,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore5_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore5, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 60.9600,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 68.5800,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5800,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 60.9600,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore5_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore5, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5800,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 60.9600,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 60.9600,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 68.5800,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore5_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore5, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 60.9600,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 60.9600,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5800,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5800,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore5_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + LGstore2_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 60.9600,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 60.9600,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 60.9600,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 60.9600,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore5_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore5, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5800,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 68.5800,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 60.9600,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 60.9600,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore5_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore6_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5800,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 68.5800,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5800,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5800,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore6_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore6, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5800,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 76.2000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 76.2000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5800,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore6_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore6, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 76.2000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 68.5800,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 68.5800,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 76.2000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore6_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore6, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5800,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 68.5800,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 76.2000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 76.2000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore6_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore6, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore5_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5800,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 68.5800,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5800,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5800,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore6_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore6, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 76.2000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 76.2000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5800,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5800,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore6_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore6, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore7_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 76.2000,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 76.2000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 76.2000,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 76.2000,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore7_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore7, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 76.2000,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 83.8200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 83.8200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 76.2000,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore7_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore7, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 83.8200,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 76.2000,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 76.2000,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 83.8200,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore7_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore7, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 76.2000,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 76.2000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 83.8200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 83.8200,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore7_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore7, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore6_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 76.2000,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 76.2000,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 76.2000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 76.2000,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore7_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore7, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 83.8200,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 83.8200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 76.2000,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 76.2000,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore7_Wall_4, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore7, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore8_Wall_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 83.8200,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 83.8200,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 83.8200,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 83.8200,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore8_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + SMstore8, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 83.8200,22.8600,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 91.4400,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 91.4400,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 83.8200,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore8_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + SMstore8, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 91.4400,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 83.8200,22.8600,5.1800, !- X,Y,Z ==> Vertex 2 {m} + 83.8200,0.0000,5.1800, !- X,Y,Z ==> Vertex 3 {m} + 91.4400,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore8_Wall_1, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore8, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 83.8200,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 83.8200,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 91.4400,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 91.4400,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore8_Wall_2, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + SMstore8, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SMstore7_Wall_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 83.8200,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 83.8200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 83.8200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 83.8200,0.0000,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore8_Wall_3, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore8, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 91.4400,22.8600,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 91.4400,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 83.8200,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 83.8200,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SMstore8_Wall_4, !- Name + Wall, !- Surface Type + Steel Frame Non-res Ext Wall, !- Construction Name + SMstore8, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 91.4400,0.0000,5.1800, !- X,Y,Z ==> Vertex 1 {m} + 91.4400,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 91.4400,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 91.4400,22.8600,5.1800; !- X,Y,Z ==> Vertex 4 {m} + +! ***WINDOWS & DOORS*** + + FenestrationSurface:Detailed, + LGstore1_Wall_1_Door_1, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 2.900,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 2.900,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.730,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.730,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_1_Door_2, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 10.520,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 10.520,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 12.350,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 12.350,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.6100,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 0.6100,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 2.7400,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 2.7400,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 4.8800,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 4.8800,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 7.0100,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 7.0100,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_1_Window_3,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 8.2300,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 8.2300,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 10.3600,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 10.3600,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_1_Window_4,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 12.5000,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 12.5000,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 14.6300,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 14.6300,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_3_Door_1, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + LGstore1_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 4.730,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 4.730,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 2.900,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 2.900,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore1_Wall_3_Door_2, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + LGstore1_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 12.350,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 12.350,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 10.520,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 10.520,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_1_Door_1, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 48.620,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 48.620,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 50.440,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 50.440,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_1_Door_2, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 56.240,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 56.240,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 58.060,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 58.060,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 46.3300,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 46.3300,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 48.4600,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 48.4600,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 50.6000,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 50.6000,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 52.7300,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 52.7300,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_1_Window_3,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 53.9500,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 53.9500,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 56.0800,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 56.0800,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_1_Window_4,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + LGstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 58.2200,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 58.2200,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 60.3500,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 60.3500,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_3_Door_1, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + LGstore2_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 50.440,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 50.440,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 48.620,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 48.620,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + LGstore2_Wall_3_Door_2, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + LGstore2_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 58.060,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 58.060,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 56.240,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 56.240,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore1_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 18.140,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 18.140,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 19.970,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 19.970,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore1_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 15.8500,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 15.8500,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 17.9800,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 17.9800,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore1_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore1_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 20.1200,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 20.1200,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 22.2500,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 22.2500,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore1_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore1_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 19.970,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 19.970,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 18.140,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 18.140,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore2_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 25.760,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 25.760,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 27.580,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 27.580,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore2_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 23.4700,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 23.4700,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 25.6000,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 25.6000,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore2_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore2_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 27.7400,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 27.7400,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 29.8700,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 29.8700,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore2_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore2_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 27.580,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 27.580,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 25.760,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 25.760,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore3_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore3_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 33.380,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 33.380,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 35.200,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 35.200,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore3_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore3_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 31.0900,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 31.0900,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 33.2200,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 33.2200,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore3_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore3_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 35.3600,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 35.3600,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 37.4900,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 37.4900,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore3_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore3_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 35.200,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 35.200,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 33.380,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 33.380,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore4_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore4_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 41.000,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 41.000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 42.820,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 42.820,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore4_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore4_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 38.7100,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 38.7100,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 40.8400,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 40.8400,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore4_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore4_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 42.9800,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 42.9800,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 45.1100,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 45.1100,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore4_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore4_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 42.820,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 42.820,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 41.000,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 41.000,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore5_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore5_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 63.860,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 63.860,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 65.680,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 65.680,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore5_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore5_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 61.5700,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 61.5700,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 63.7000,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 63.7000,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore5_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore5_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 65.8400,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 65.8400,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 67.9700,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 67.9700,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore5_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore5_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 65.680,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 65.680,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 63.860,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 63.860,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore6_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore6_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 71.480,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 71.480,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.300,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.300,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore6_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore6_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 69.1900,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 69.1900,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 71.3200,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 71.3200,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore6_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore6_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.4600,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 73.4600,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 75.5900,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 75.5900,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore6_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore6_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.300,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 73.300,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 71.480,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 71.480,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore7_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore7_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 79.100,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 79.100,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 80.920,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 80.920,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore7_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore7_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 76.8100,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 76.8100,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 78.9400,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 78.9400,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore7_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore7_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 81.0800,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 81.0800,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 83.2100,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 83.2100,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore7_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore7_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 80.920,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 80.920,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 79.100,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 79.100,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore8_Wall_1_Door, !- Name + GlassDoor, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore8_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 86.720,0.0000,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 86.720,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 88.540,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 88.540,0.0000,2.1300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore8_Wall_1_Window_1,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore8_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 84.4300,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 84.4300,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 86.5600,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 86.5600,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore8_Wall_1_Window_2,!- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + SMstore8_Wall_1, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 88.7000,0.0000,2.4300, !- X,Y,Z ==> Vertex 1 {m} + 88.7000,0.0000,0.9100, !- X,Y,Z ==> Vertex 2 {m} + 90.8300,0.0000,0.9100, !- X,Y,Z ==> Vertex 3 {m} + 90.8300,0.0000,2.4300; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SMstore8_Wall_3_Door, !- Name + Door, !- Surface Type + Swinging Door Non-res, !- Construction Name + SMstore8_Wall_3, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 88.540,22.8600,2.1300, !- X,Y,Z ==> Vertex 1 {m} + 88.540,22.8600,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 86.720,22.8600,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 86.720,22.8600,2.1300; !- X,Y,Z ==> Vertex 4 {m} + +! ***GEOMETRY RULES*** + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + Counterclockwise, !- Vertex Entry Direction + Relative, !- Coordinate System + Relative; !- Daylighting Reference Point Coordinate System + +! ***PEOPLE*** + + People, + LGstore1 People, !- Name + LGstore1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + LGstore2 People, !- Name + LGstore2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore1 People, !- Name + SMstore1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore2 People, !- Name + SMstore2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore3 People, !- Name + SMstore3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore4 People, !- Name + SMstore4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore5 People, !- Name + SMstore5, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore6 People, !- Name + SMstore6, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore7 People, !- Name + SMstore7, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + SMstore8 People, !- Name + SMstore8, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 6.19, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + +! ***LIGHTS*** + + Lights, + LGstore1_Lights, !- Name + LGstore1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 23.99, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + LGstore2_Lights, !- Name + LGstore2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 13.77, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore1_Lights, !- Name + SMstore1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 23.99, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore2_Lights, !- Name + SMstore2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 18.29, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore3_Lights, !- Name + SMstore3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 18.29, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore4_Lights, !- Name + SMstore4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 18.29, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore5_Lights, !- Name + SMstore5, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 13.77, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore6_Lights, !- Name + SMstore6, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 13.77, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore7_Lights, !- Name + SMstore7, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 13.77, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + SMstore8_Lights, !- Name + SMstore8, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 13.77, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + +! ***EQUIPMENT GAINS*** + + ElectricEquipment, + LGstore1_MiscPlug_Equip, !- Name + LGstore1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + LGstore2_MiscPlug_Equip, !- Name + LGstore2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore1_MiscPlug_Equip, !- Name + SMstore1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore2_MiscPlug_Equip, !- Name + SMstore2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore3_MiscPlug_Equip, !- Name + SMstore3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore4_MiscPlug_Equip, !- Name + SMstore4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore5_MiscPlug_Equip, !- Name + SMstore5, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore6_MiscPlug_Equip, !- Name + SMstore6, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore7_MiscPlug_Equip, !- Name + SMstore7, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + + ElectricEquipment, + SMstore8_MiscPlug_Equip, !- Name + SMstore8, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 4.3, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + MiscPlug; !- End-Use Subcategory + +! ***EXTERIOR LOADS*** + + Exterior:Lights, + Exterior Facade Lighting,!- Name + ALWAYS_ON, !- Schedule Name + 11485, !- Design Level {W} + AstronomicalClock, !- Control Option + Exterior Facade Lighting;!- End-Use Subcategory + +! ***INFILTRATION*** + + ZoneInfiltration:DesignFlowRate, + LGstore1_Infiltration, !- Name + LGstore1, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + LGstore2_Infiltration, !- Name + LGstore2, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore1_Infiltration, !- Name + SMstore1, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore2_Infiltration, !- Name + SMstore2, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore3_Infiltration, !- Name + SMstore3, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore4_Infiltration, !- Name + SMstore4, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore5_Infiltration, !- Name + SMstore5, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore6_Infiltration, !- Name + SMstore6, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore7_Infiltration, !- Name + SMstore7, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SMstore8_Infiltration, !- Name + SMstore8, !- Zone or ZoneList or Space or SpaceList Name + INFIL_HALF_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + +! ***INTERNAL MASS*** + + InternalMass, + LGstore1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + LGstore1, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 696.7728; !- Surface Area {m2} + + InternalMass, + LGstore2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + LGstore2, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 696.7728; !- Surface Area {m2} + + InternalMass, + SMstore1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore1, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore2, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore3, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore4, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore5 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore5, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore6 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore6, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore7 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore7, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + + InternalMass, + SMstore8 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + SMstore8, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 348.3864; !- Surface Area {m2} + +! ***INTERNAL GAINS SCHEDULES*** + + Schedule:Compact, + BLDG_EQUIP_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 07:00,0.2, !- Field 3 + Until: 08:00,0.4, !- Field 5 + Until: 09:00,0.7, !- Field 7 + Until: 18:00,0.9, !- Field 9 + Until: 20:00,0.8, !- Field 11 + Until: 21:00,0.7, !- Field 13 + Until: 22:00,0.4, !- Field 15 + Until: 24:00,0.2, !- Field 17 + For: Saturday, !- Field 19 + Until: 07:00,0.15, !- Field 20 + Until: 08:00,0.3, !- Field 22 + Until: 09:00,0.5, !- Field 24 + Until: 10:00,0.8, !- Field 26 + Until: 18:00,0.9, !- Field 28 + Until: 19:00,0.7, !- Field 30 + Until: 21:00,0.5, !- Field 32 + Until: 22:00,0.3, !- Field 34 + Until: 24:00,0.15, !- Field 36 + For: SummerDesignDay, !- Field 38 + Until: 24:00,1.0, !- Field 39 + For: WinterDesignDay, !- Field 41 + Until: 24:00,0.0, !- Field 42 + For: Sunday Holidays AllOtherDays, !- Field 44 + Until: 08:00,0.15, !- Field 45 + Until: 10:00,0.3, !- Field 47 + Until: 12:00,0.6, !- Field 49 + Until: 17:00,0.8, !- Field 51 + Until: 18:00,0.6, !- Field 53 + Until: 19:00,0.4, !- Field 55 + Until: 24:00,0.15; !- Field 57 + + Schedule:Compact, + BLDG_LIGHT_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 07:00,0.05, !- Field 3 + Until: 08:00,0.2, !- Field 5 + Until: 09:00,0.5, !- Field 7 + Until: 18:00,0.9, !- Field 9 + Until: 20:00,0.6, !- Field 11 + Until: 21:00,0.5, !- Field 13 + Until: 22:00,0.2, !- Field 15 + Until: 24:00,0.05, !- Field 17 + For: Saturday, !- Field 19 + Until: 07:00,0.05, !- Field 20 + Until: 08:00,0.1, !- Field 22 + Until: 09:00,0.3, !- Field 24 + Until: 10:00,0.6, !- Field 26 + Until: 18:00,0.9, !- Field 28 + Until: 19:00,0.5, !- Field 30 + Until: 21:00,0.3, !- Field 32 + Until: 22:00,0.1, !- Field 34 + Until: 24:00,0.05, !- Field 36 + For: SummerDesignDay, !- Field 38 + Until: 24:00,1.0, !- Field 39 + For: WinterDesignDay, !- Field 41 + Until: 24:00,0.0, !- Field 42 + For: Sunday Holidays AllOtherDays, !- Field 44 + Until: 08:00,0.05, !- Field 45 + Until: 10:00,0.1, !- Field 47 + Until: 12:00,0.4, !- Field 49 + Until: 17:00,0.6, !- Field 51 + Until: 18:00,0.4, !- Field 53 + Until: 19:00,0.2, !- Field 55 + Until: 24:00,0.05; !- Field 57 + + Schedule:Compact, + BLDG_OCC_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 07:00,0.0, !- Field 3 + Until: 08:00,0.1, !- Field 5 + Until: 09:00,0.2, !- Field 7 + Until: 11:00,0.5, !- Field 9 + Until: 15:00,0.7, !- Field 11 + Until: 16:00,0.8, !- Field 13 + Until: 17:00,0.7, !- Field 15 + Until: 19:00,0.5, !- Field 17 + Until: 21:00,0.3, !- Field 19 + Until: 24:00,0.0, !- Field 21 + For: SummerDesignDay WinterDesignDay, !- Field 23 + Until: 24:00,1.0, !- Field 24 + For: Saturday, !- Field 26 + Until: 07:00,0.0, !- Field 27 + Until: 08:00,0.1, !- Field 29 + Until: 09:00,0.2, !- Field 31 + Until: 10:00,0.5, !- Field 33 + Until: 11:00,0.6, !- Field 35 + Until: 17:00,0.8, !- Field 37 + Until: 18:00,0.6, !- Field 39 + Until: 21:00,0.2, !- Field 41 + Until: 22:00,0.1, !- Field 43 + Until: 24:00,0.0, !- Field 45 + For: AllOtherDays, !- Field 47 + Until: 09:00,0.0, !- Field 48 + Until: 10:00,0.1, !- Field 50 + Until: 12:00,0.2, !- Field 52 + Until: 17:00,0.4, !- Field 54 + Until: 18:00,0.2, !- Field 56 + Until: 19:00,0.1, !- Field 58 + Until: 24:00,0.0; !- Field 60 + + Schedule:Compact, + INFIL_HALF_ON_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,1.0, !- Field 3 + Until: 21:00,0.5, !- Field 5 + Until: 24:00,1.0, !- Field 7 + For: Saturday, !- Field 9 + Until: 06:00,1.0, !- Field 10 + Until: 22:00,0.5, !- Field 12 + Until: 24:00,1.0, !- Field 14 + For: WinterDesignDay, !- Field 16 + Until: 24:00,1.0, !- Field 17 + For: Sunday Holidays AllOtherDays, !- Field 19 + Until: 08:00,1.0, !- Field 20 + Until: 17:00,0.5, !- Field 22 + Until: 24:00,1.0; !- Field 24 + + Schedule:Compact, + CLOTHING_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 04/30, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 09/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,0.5, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,1.0; !- Field 11 + + Schedule:Compact, + ACTIVITY_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,120.; !- Field 3 + + Schedule:Compact, + AIR_VELO_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.2; !- Field 3 + + Schedule:Compact, + WORK_EFF_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + +! ***HVAC EQUIPMENT*** + + ZoneHVAC:EquipmentList, + LGstore1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + LGstore1 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + LGstore1 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + LGstore2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + LGstore2 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + LGstore2 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore1 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore1 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore2 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore2 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore3 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore3 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore4 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore4 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore5 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore5 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore5 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore6 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore6 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore6 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore7 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore7 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore7 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SMstore8 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:EvaporativeCoolerUnit, !- Zone Equipment 1 Object Type + SMstore8 Zone Evap Unit, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + ZoneHVAC:Baseboard:Convective:Electric, !- Zone Equipment 2 Object Type + SMstore8 Zone Baseboard, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + +! ***SIZING & CONTROLS*** + + Sizing:Zone, + LGstore1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA LGstore1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA LGstore1, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + LGstore2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA LGstore2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA LGstore2, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore1, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore2, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore3, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore4, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore5, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore5, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore5, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore6, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore6, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore6, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore7, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore7, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore7, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SMstore8, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.0000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SMstore8, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SMstore8, !- Name + Flow/Area, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.00152, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + ; !- Outdoor Air Flow per Zone {m3/s} + + ZoneControl:Thermostat, + LGstore1 Thermostat, !- Name + LGstore1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + LGstore1 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + LGstore2 Thermostat, !- Name + LGstore2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + LGstore2 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore1 Thermostat, !- Name + SMstore1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore1 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore2 Thermostat, !- Name + SMstore2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore2 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore3 Thermostat, !- Name + SMstore3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore3 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore4 Thermostat, !- Name + SMstore4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore4 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore5 Thermostat, !- Name + SMstore5, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore5 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore6 Thermostat, !- Name + SMstore6, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore6 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore7 Thermostat, !- Name + SMstore7, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore7 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + SMstore8 Thermostat, !- Name + SMstore8, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + SMstore8 DualSPSched; !- Control 1 Name + + ThermostatSetpoint:DualSetpoint, + LGstore1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + LGstore2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore5 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore6 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore7 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SMstore8 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + +! ***CONNECTIONS*** + + ZoneHVAC:EquipmentConnections, + LGstore1, !- Zone Name + LGstore1 Equipment, !- Zone Conditioning Equipment List Name + LGstore1 Inlet Node, !- Zone Air Inlet Node or NodeList Name + LGstore1 Relief Node, !- Zone Air Exhaust Node or NodeList Name + LGstore1 Air Node, !- Zone Air Node Name + LGstore1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + LGstore2, !- Zone Name + LGstore2 Equipment, !- Zone Conditioning Equipment List Name + LGstore2 Inlet Node, !- Zone Air Inlet Node or NodeList Name + LGstore2 Relief Node, !- Zone Air Exhaust Node or NodeList Name + LGstore2 Air Node, !- Zone Air Node Name + LGstore2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore1, !- Zone Name + SMstore1 Equipment, !- Zone Conditioning Equipment List Name + SMstore1 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore1 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore1 Air Node, !- Zone Air Node Name + SMstore1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore2, !- Zone Name + SMstore2 Equipment, !- Zone Conditioning Equipment List Name + SMstore2 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore2 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore2 Air Node, !- Zone Air Node Name + SMstore2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore3, !- Zone Name + SMstore3 Equipment, !- Zone Conditioning Equipment List Name + SMstore3 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore3 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore3 Air Node, !- Zone Air Node Name + SMstore3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore4, !- Zone Name + SMstore4 Equipment, !- Zone Conditioning Equipment List Name + SMstore4 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore4 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore4 Air Node, !- Zone Air Node Name + SMstore4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore5, !- Zone Name + SMstore5 Equipment, !- Zone Conditioning Equipment List Name + SMstore5 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore5 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore5 Air Node, !- Zone Air Node Name + SMstore5 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore6, !- Zone Name + SMstore6 Equipment, !- Zone Conditioning Equipment List Name + SMstore6 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore6 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore6 Air Node, !- Zone Air Node Name + SMstore6 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore7, !- Zone Name + SMstore7 Equipment, !- Zone Conditioning Equipment List Name + SMstore7 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore7 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore7 Air Node, !- Zone Air Node Name + SMstore7 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SMstore8, !- Zone Name + SMstore8 Equipment, !- Zone Conditioning Equipment List Name + SMstore8 Inlet Node, !- Zone Air Inlet Node or NodeList Name + SMstore8 Relief Node, !- Zone Air Exhaust Node or NodeList Name + SMstore8 Air Node, !- Zone Air Node Name + SMstore8 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EvaporativeCoolerUnit, + LGstore1 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + LGstore1 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + LGstore1 Inlet Node, !- Cooler Outlet Node Name + LGstore1 Relief Node, !- Zone Relief Air Node Name + Fan:ComponentModel, !- Supply Air Fan Object Type + LGstore1 Supply Fan, !- Supply Air Fan Name + autosize, !- Design Supply Air Flow Rate {m3/s} + BlowThrough, !- Fan Placement + ZoneCoolingLoadVariableSpeedFan, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Indirect:CelDekPad, !- First Evaporative Cooler Object Type + LGstore1 Indirect Evaporative Cooler, !- First Evaporative Cooler Object Name + EvaporativeCooler:Direct:ResearchSpecial, !- Second Evaporative Cooler Object Type + LGstore1 Direct Evaporative Cooler, !- Second Evaporative Cooler Name + , !- Design Specification ZoneHVAC Sizing Object Name + 0.0; !- Shut Off Relative Humidity + + OutdoorAir:Node, + LGstore1 Cooler Unit OA Inlet; !- Name + + Fan:ComponentModel, + LGstore1 Supply Fan, !- Name + LGstore1 Cooler Unit OA Inlet, !- Air Inlet Node Name + LGstore1 Fan outlet, !- Air Outlet Node Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Maximum Flow Rate {m3/s} + 0., !- Minimum Flow Rate {m3/s} + 1.0, !- Fan Sizing Factor + 0.3048, !- Fan Wheel Diameter {m} + 0.0873288576, !- Fan Outlet Area {m2} + 0.514, !- Maximum Fan Static Efficiency + 9.76, !- Euler Number at Maximum Fan Static Efficiency + 0.160331811647483, !- Maximum Dimensionless Fan Airflow + autosize, !- Motor Fan Pulley Ratio + autosize, !- Belt Maximum Torque {N-m} + 1.0, !- Belt Sizing Factor + 0.167, !- Belt Fractional Torque Transition + 1800, !- Motor Maximum Speed {rev/min} + autosize, !- Maximum Motor Output Power {W} + 1.0, !- Motor Sizing Factor + 1.0, !- Motor In Airstream Fraction + Power, !- VFD Efficiency Type + autosize, !- Maximum VFD Output Power {W} + 1.0, !- VFD Sizing Factor + VSD Example, !- Fan Pressure Rise Curve Name + DiagnosticSPR, !- Duct Static Pressure Reset Curve Name + FanEff120CPLANormal, !- Normalized Fan Static Efficiency Curve Name-Non-Stall Region + FanEff120CPLAStall, !- Normalized Fan Static Efficiency Curve Name-Stall Region + FanDimFlowNormal, !- Normalized Dimensionless Airflow Curve Name-Non-Stall Region + FanDimFlowStall, !- Normalized Dimensionless Airflow Curve Name-Stall Region + BeltMaxEffMedium, !- Maximum Belt Efficiency Curve Name + BeltPartLoadRegion1, !- Normalized Belt Efficiency Curve Name - Region 1 + BeltPartLoadRegion2, !- Normalized Belt Efficiency Curve Name - Region 2 + BeltPartLoadRegion3, !- Normalized Belt Efficiency Curve Name - Region 3 + MotorMaxEffAvg, !- Maximum Motor Efficiency Curve Name + MotorPartLoad, !- Normalized Motor Efficiency Curve Name + VFDPartLoad; !- VFD Efficiency Curve Name + + Curve:FanPressureRise, + VSD Example, !- Name + 200, !- Coefficient1 C1 + 0., !- Coefficient2 C2 + 0., !- Coefficient3 C3 + 1., !- Coefficient4 C4 + 0., !- Minimum Value of Qfan {m3/s} + 100., !- Maximum Value of Qfan {m3/s} + 62.5, !- Minimum Value of Psm {Pa} + 300., !- Maximum Value of Psm {Pa} + 0., !- Minimum Curve Output {Pa} + 5000.; !- Maximum Curve Output {Pa} + + Curve:Linear, + DiagnosticSPR, !- Name + 248.84, !- Coefficient1 Constant + 0., !- Coefficient2 x + 0., !- Minimum Value of x + 100., !- Maximum Value of x + 62.5, !- Minimum Curve Output + 248.84; !- Maximum Curve Output + + Curve:ExponentialSkewNormal, + FanEff120CPLANormal, !- Name + 0.072613, !- Coefficient1 C1 + 0.833213, !- Coefficient2 C2 + 0., !- Coefficient3 C3 + 0.013911, !- Coefficient4 C4 + -4., !- Minimum Value of x + 5., !- Maximum Value of x + 0.1, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:ExponentialSkewNormal, + FanEff120CPLAStall, !- Name + -1.674931, !- Coefficient1 C1 + 1.980182, !- Coefficient2 C2 + 0., !- Coefficient3 C3 + 1.844950, !- Coefficient4 C4 + -4., !- Minimum Value of x + 5., !- Maximum Value of x + 0.1, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:Sigmoid, + FanDimFlowNormal, !- Name + 0., !- Coefficient1 C1 + 1.001423, !- Coefficient2 C2 + 0.123935, !- Coefficient3 C3 + -0.476026, !- Coefficient4 C4 + 1., !- Coefficient5 C5 + -4., !- Minimum Value of x + 5., !- Maximum Value of x + 0.05, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:Sigmoid, + FanDimFlowStall, !- Name + 0., !- Coefficient1 C1 + 5.924993, !- Coefficient2 C2 + -1.91636, !- Coefficient3 C3 + -0.851779, !- Coefficient4 C4 + 1., !- Coefficient5 C5 + -4., !- Minimum Value of x + 5., !- Maximum Value of x + 0.05, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:Quartic, + BeltMaxEffMedium, !- Name + -0.09504, !- Coefficient1 Constant + 0.03415, !- Coefficient2 x + -0.008897, !- Coefficient3 x**2 + 0.001159, !- Coefficient4 x**3 + -0.00006132, !- Coefficient5 x**4 + -1.2, !- Minimum Value of x + 6.2, !- Maximum Value of x + -4.6, !- Minimum Curve Output + 0.; !- Maximum Curve Output + + Curve:RectangularHyperbola2, + BeltPartLoadRegion1, !- Name + 0.920797, !- Coefficient1 C1 + 0.0262686, !- Coefficient2 C2 + 0.151594, !- Coefficient3 C3 + 0., !- Minimum Value of x + 1., !- Maximum Value of x + 0.01, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:ExponentialDecay, + BeltPartLoadRegion2, !- Name + 1.011965, !- Coefficient1 C1 + -0.339038, !- Coefficient2 C2 + -3.43626, !- Coefficient3 C3 + 0., !- Minimum Value of x + 1., !- Maximum Value of x + 0.01, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:RectangularHyperbola2, + BeltPartLoadRegion3, !- Name + 1.037778, !- Coefficient1 C1 + 0.0103068, !- Coefficient2 C2 + -0.0268146, !- Coefficient3 C3 + 0., !- Minimum Value of x + 1., !- Maximum Value of x + 0.01, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:RectangularHyperbola1, + MotorMaxEffAvg, !- Name + 0.29228, !- Coefficient1 C1 + 3.368739, !- Coefficient2 C2 + 0.762471, !- Coefficient3 C3 + 0., !- Minimum Value of x + 7.6, !- Maximum Value of x + 0.01, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:RectangularHyperbola2, + MotorPartLoad, !- Name + 1.137209, !- Coefficient1 C1 + 0.0502359, !- Coefficient2 C2 + -0.0891503, !- Coefficient3 C3 + 0., !- Minimum Value of x + 1., !- Maximum Value of x + 0.01, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + Curve:RectangularHyperbola2, + VFDPartLoad, !- Name + 0.987405, !- Coefficient1 C1 + 0.0155361, !- Coefficient2 C2 + -0.0059365, !- Coefficient3 C3 + 0., !- Minimum Value of x + 1., !- Maximum Value of x + 0.01, !- Minimum Curve Output + 1.; !- Maximum Curve Output + + EvaporativeCooler:Indirect:CelDekPad, + LGstore1 Indirect Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.6, !- Direct Pad Area {m2} + 0.2, !- Direct Pad Depth {m} + 55., !- Recirculating Water Pump Power Consumption {W} + 1.0, !- Secondary Air Fan Flow Rate {m3/s} + 0.7, !- Secondary Air Fan Total Efficiency + 200.0, !- Secondary Air Fan Delta Pressure {Pa} + 0.67, !- Indirect Heat Exchanger Effectiveness + LGstore1 Fan outlet, !- Primary Air Inlet Node Name + LGstore1 Indirect Outlet Node, !- Primary Air Outlet Node Name + Constant, !- Control Type + , !- Water Supply Storage Tank Name + LGstore1 Evap Cooler OA node; !- Secondary Air Inlet Node Name + + OutdoorAir:Node, + LGstore1 Evap Cooler OA node; !- Name + + EvaporativeCooler:Direct:ResearchSpecial, + LGstore1 Direct Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Cooler Design Effectiveness + , !- Effectiveness Flow Ratio Modifier Curve Name + autosize, !- Primary Air Design Flow Rate {m3/s} + 55.0, !- Recirculating Water Pump Design Power {W} + , !- Water Pump Power Sizing Factor {W/(m3/s)} + , !- Water Pump Power Modifier Curve Name + LGstore1 Indirect Outlet Node, !- Air Inlet Node Name + LGstore1 Inlet Node, !- Air Outlet Node Name + LGstore1 Inlet Node, !- Sensor Node Name + , !- Water Supply Storage Tank Name + 0.0, !- Drift Loss Fraction + 3; !- Blowdown Concentration Ratio + + ZoneHVAC:EvaporativeCoolerUnit, + LGstore2 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + LGstore2 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + LGstore2 Inlet Node, !- Cooler Outlet Node Name + LGstore2 Relief Node, !- Zone Relief Air Node Name + Fan:OnOff, !- Supply Air Fan Object Type + LGstore2 Supply Fan, !- Supply Air Fan Name + 1.0, !- Design Supply Air Flow Rate {m3/s} + BlowThrough, !- Fan Placement + ZoneTemperatureDeadbandOnOffCycling, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Direct:CelDekPad, !- First Evaporative Cooler Object Type + LGstore2 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + LGstore2 Cooler Unit OA Inlet; !- Name + + Fan:OnOff, + LGstore2 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + 1.0, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + LGstore2 Cooler Unit OA Inlet, !- Air Inlet Node Name + LGstore2 Fan outlet; !- Air Outlet Node Name + + EvaporativeCooler:Direct:CelDekPad, + LGstore2 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.6, !- Direct Pad Area {m2} + 0.2, !- Direct Pad Depth {m} + 55, !- Recirculating Water Pump Power Consumption {W} + LGstore2 Fan outlet, !- Air Inlet Node Name + LGstore2 Inlet Node, !- Air Outlet Node Name + CONSTANT; !- Control Type + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore1 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore1 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore1 Inlet Node, !- Cooler Outlet Node Name + SMstore1 Relief Node, !- Zone Relief Air Node Name + Fan:ConstantVolume, !- Supply Air Fan Object Type + SMstore1 Supply Fan, !- Supply Air Fan Name + 0.65, !- Design Supply Air Flow Rate {m3/s} + DrawThrough, !- Fan Placement + ZoneCoolingLoadOnOffCycling, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Direct:CelDekPad, !- First Evaporative Cooler Object Type + SMstore1 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore1 Cooler Unit OA Inlet; !- Name + + Fan:ConstantVolume, + SMstore1 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + 0.65, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + SMstore1 Fan Inlet Node, !- Air Inlet Node Name + SMstore1 Inlet Node; !- Air Outlet Node Name + + EvaporativeCooler:Direct:CelDekPad, + SMstore1 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.6, !- Direct Pad Area {m2} + 0.2, !- Direct Pad Depth {m} + 55, !- Recirculating Water Pump Power Consumption {W} + SMstore1 Cooler Unit OA Inlet, !- Air Inlet Node Name + SMstore1 Fan Inlet Node, !- Air Outlet Node Name + CONSTANT; !- Control Type + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore2 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore2 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore2 Inlet Node, !- Cooler Outlet Node Name + SMstore2 Relief Node, !- Zone Relief Air Node Name + Fan:ConstantVolume, !- Supply Air Fan Object Type + SMstore2 Supply Fan, !- Supply Air Fan Name + autosize, !- Design Supply Air Flow Rate {m3/s} + DrawThrough, !- Fan Placement + ZoneCoolingLoadOnOffCycling, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Direct:CelDekPad, !- First Evaporative Cooler Object Type + SMstore2 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore2 Cooler Unit OA Inlet; !- Name + + Fan:ConstantVolume, + SMstore2 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + SMstore2 Fan Inlet Node, !- Air Inlet Node Name + SMstore2 Inlet Node; !- Air Outlet Node Name + + EvaporativeCooler:Direct:CelDekPad, + SMstore2 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.6, !- Direct Pad Area {m2} + 0.2, !- Direct Pad Depth {m} + 55, !- Recirculating Water Pump Power Consumption {W} + SMstore2 Cooler Unit OA Inlet, !- Air Inlet Node Name + SMstore2 Fan Inlet Node, !- Air Outlet Node Name + CONSTANT; !- Control Type + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore3 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore3 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore3 Inlet Node, !- Cooler Outlet Node Name + SMstore3 Relief Node, !- Zone Relief Air Node Name + Fan:VariableVolume, !- Supply Air Fan Object Type + SMstore3 Supply Fan, !- Supply Air Fan Name + autosize, !- Design Supply Air Flow Rate {m3/s} + DrawThrough, !- Fan Placement + ZoneCoolingLoadVariableSpeedFan, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Direct:CelDekPad, !- First Evaporative Cooler Object Type + SMstore3 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore3 Cooler Unit OA Inlet; !- Name + + Fan:VariableVolume, + SMstore3 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.0015302446, !- Fan Power Coefficient 1 + 0.0052080574, !- Fan Power Coefficient 2 + 1.1086242, !- Fan Power Coefficient 3 + -0.11635563, !- Fan Power Coefficient 4 + 0.000, !- Fan Power Coefficient 5 + SMstore3 Fan Inlet Node, !- Air Inlet Node Name + SMstore3 Inlet Node; !- Air Outlet Node Name + + EvaporativeCooler:Direct:CelDekPad, + SMstore3 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.6, !- Direct Pad Area {m2} + 0.2, !- Direct Pad Depth {m} + 55, !- Recirculating Water Pump Power Consumption {W} + SMstore3 Cooler Unit OA Inlet, !- Air Inlet Node Name + SMstore3 Fan Inlet Node, !- Air Outlet Node Name + CONSTANT; !- Control Type + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore4 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore4 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore4 Inlet Node, !- Cooler Outlet Node Name + SMstore4 Relief Node, !- Zone Relief Air Node Name + Fan:VariableVolume, !- Supply Air Fan Object Type + SMstore4 Supply Fan, !- Supply Air Fan Name + autosize, !- Design Supply Air Flow Rate {m3/s} + BlowThrough, !- Fan Placement + ZoneCoolingLoadVariableSpeedFan, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Direct:ResearchSpecial, !- First Evaporative Cooler Object Type + SMstore4 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore4 Cooler Unit OA Inlet; !- Name + + Fan:VariableVolume, + SMstore4 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.0015302446, !- Fan Power Coefficient 1 + 0.0052080574, !- Fan Power Coefficient 2 + 1.1086242, !- Fan Power Coefficient 3 + -0.11635563, !- Fan Power Coefficient 4 + 0.000, !- Fan Power Coefficient 5 + SMstore4 Cooler Unit OA Inlet, !- Air Inlet Node Name + SMstore4 Fan outlet; !- Air Outlet Node Name + + EvaporativeCooler:Direct:ResearchSpecial, + SMstore4 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Cooler Design Effectiveness + , !- Effectiveness Flow Ratio Modifier Curve Name + autosize, !- Primary Air Design Flow Rate {m3/s} + 55.0, !- Recirculating Water Pump Design Power {W} + , !- Water Pump Power Sizing Factor {W/(m3/s)} + , !- Water Pump Power Modifier Curve Name + SMstore4 Fan outlet, !- Air Inlet Node Name + SMstore4 Inlet Node, !- Air Outlet Node Name + SMstore4 Inlet Node, !- Sensor Node Name + , !- Water Supply Storage Tank Name + 0.0, !- Drift Loss Fraction + 3; !- Blowdown Concentration Ratio + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore5 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore5 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore5 Inlet Node, !- Cooler Outlet Node Name + SMstore5 Relief Node, !- Zone Relief Air Node Name + Fan:VariableVolume, !- Supply Air Fan Object Type + SMstore5 Supply Fan, !- Supply Air Fan Name + autosize, !- Design Supply Air Flow Rate {m3/s} + BlowThrough, !- Fan Placement + ZoneCoolingLoadVariableSpeedFan, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Indirect:ResearchSpecial, !- First Evaporative Cooler Object Type + SMstore5 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore5 Cooler Unit OA Inlet; !- Name + + Fan:VariableVolume, + SMstore5 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.0015302446, !- Fan Power Coefficient 1 + 0.0052080574, !- Fan Power Coefficient 2 + 1.1086242, !- Fan Power Coefficient 3 + -0.11635563, !- Fan Power Coefficient 4 + 0.000, !- Fan Power Coefficient 5 + SMstore5 Cooler Unit OA Inlet, !- Air Inlet Node Name + SMstore5 Fan outlet; !- Air Outlet Node Name + + EvaporativeCooler:Indirect:ResearchSpecial, + SMstore5 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7500, !- Cooler Wetbulb Design Effectiveness + , !- Wetbulb Effectiveness Flow Ratio Modifier Curve Name + , !- Cooler Drybulb Design Effectiveness + , !- Drybulb Effectiveness Flow Ratio Modifier Curve Name + 55.0000, !- Recirculating Water Pump Design Power {W} + , !- Water Pump Power Sizing Factor {W/(m3/s)} + , !- Water Pump Power Modifier Curve Name + 1.0, !- Secondary Air Design Flow Rate {m3/s} + 1.0, !- Secondary Air Flow Scaling Factor {dimensionless} + autosize, !- Secondary Air Fan Design Power {W} + 207.6666666666666667, !- Secondary Air Fan Sizing Specific Power {W/(m3/s)} + , !- Secondary Air Fan Power Modifier Curve Name + SMstore5 Fan outlet, !- Primary Air Inlet Node Name + SMstore5 Inlet Node, !- Primary Air Outlet Node Name + autosize, !- Primary Air Design Flow Rate {m3/s} + 0.9000, !- Dewpoint Effectiveness Factor + SMstore5 Evap Cooler OA node, !- Secondary Air Inlet Node Name + SMstore5 Evap Cooler OA Outlet Node, !- Secondary Air Outlet Node Name + SMstore5 Inlet Node, !- Sensor Node Name + , !- Relief Air Inlet Node Name + , !- Water Supply Storage Tank Name + 0.2, !- Drift Loss Fraction + 3; !- Blowdown Concentration Ratio + + OutdoorAir:Node, + SMstore5 Evap Cooler OA node; !- Name + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore6 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore6 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore6 Inlet Node, !- Cooler Outlet Node Name + SMstore6 Relief Node, !- Zone Relief Air Node Name + Fan:ConstantVolume, !- Supply Air Fan Object Type + SMstore6 Supply Fan, !- Supply Air Fan Name + 0.65, !- Design Supply Air Flow Rate {m3/s} + DrawThrough, !- Fan Placement + ZoneTemperatureDeadbandOnOffCycling, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Indirect:WetCoil, !- First Evaporative Cooler Object Type + SMstore6 Evaporative Cooler, !- First Evaporative Cooler Object Name + , !- Second Evaporative Cooler Object Type + ; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore6 Cooler Unit OA Inlet; !- Name + + Fan:ConstantVolume, + SMstore6 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + 0.65, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + SMstore6 Fan Inlet Node, !- Air Inlet Node Name + SMstore6 Inlet Node; !- Air Outlet Node Name + + EvaporativeCooler:Indirect:WetCoil, + SMstore6 Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.8, !- Coil Maximum Efficiency + 0.16, !- Coil Flow Ratio + 55., !- Recirculating Water Pump Power Consumption {W} + 0.6, !- Secondary Air Fan Flow Rate {m3/s} + 0.7, !- Secondary Air Fan Total Efficiency + 200.0, !- Secondary Air Fan Delta Pressure {Pa} + SMstore6 Cooler Unit OA Inlet, !- Primary Air Inlet Node Name + SMstore6 Fan Inlet Node, !- Primary Air Outlet Node Name + Constant, !- Control Type + , !- Water Supply Storage Tank Name + SMstore6 Secondary side OA inlet node; !- Secondary Air Inlet Node Name + + OutdoorAir:Node, + SMstore6 Secondary side OA inlet node; !- Name + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore7 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore7 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore7 Inlet Node, !- Cooler Outlet Node Name + SMstore7 Relief Node, !- Zone Relief Air Node Name + Fan:ConstantVolume, !- Supply Air Fan Object Type + SMstore7 Supply Fan, !- Supply Air Fan Name + 0.65, !- Design Supply Air Flow Rate {m3/s} + DrawThrough, !- Fan Placement + ZoneTemperatureDeadbandOnOffCycling, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Indirect:WetCoil, !- First Evaporative Cooler Object Type + SMstore7 Indirect Evaporative Cooler, !- First Evaporative Cooler Object Name + EvaporativeCooler:Direct:CelDekPad, !- Second Evaporative Cooler Object Type + SMstore7 Direct Evaporative Cooler; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore7 Cooler Unit OA Inlet; !- Name + + Fan:ConstantVolume, + SMstore7 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + 0.65, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + SMstore7 Fan Inlet Node, !- Air Inlet Node Name + SMstore7 Inlet Node; !- Air Outlet Node Name + + EvaporativeCooler:Indirect:WetCoil, + SMstore7 Indirect Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.8, !- Coil Maximum Efficiency + 0.16, !- Coil Flow Ratio + 55., !- Recirculating Water Pump Power Consumption {W} + 0.6, !- Secondary Air Fan Flow Rate {m3/s} + 0.7, !- Secondary Air Fan Total Efficiency + 200.0, !- Secondary Air Fan Delta Pressure {Pa} + SMstore7 Cooler Unit OA Inlet, !- Primary Air Inlet Node Name + SMstore7 Indirect Outlet Node, !- Primary Air Outlet Node Name + Constant, !- Control Type + , !- Water Supply Storage Tank Name + SMstore7 Secondary side OA inlet node; !- Secondary Air Inlet Node Name + + OutdoorAir:Node, + SMstore7 Secondary side OA inlet node; !- Name + + EvaporativeCooler:Direct:CelDekPad, + SMstore7 Direct Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.6, !- Direct Pad Area {m2} + 0.2, !- Direct Pad Depth {m} + 55, !- Recirculating Water Pump Power Consumption {W} + SMstore7 Indirect Outlet Node, !- Air Inlet Node Name + SMstore7 Fan Inlet Node, !- Air Outlet Node Name + CONSTANT; !- Control Type + + ZoneHVAC:EvaporativeCoolerUnit, + SMstore8 Zone Evap Unit, !- Name + ALWAYS_ON, !- Availability Schedule Name + , !- Availability Manager List Name + SMstore8 Cooler Unit OA Inlet, !- Outdoor Air Inlet Node Name + SMstore8 Inlet Node, !- Cooler Outlet Node Name + SMstore8 Relief Node, !- Zone Relief Air Node Name + Fan:VariableVolume, !- Supply Air Fan Object Type + SMstore8 Supply Fan, !- Supply Air Fan Name + autosize, !- Design Supply Air Flow Rate {m3/s} + BlowThrough, !- Fan Placement + ZoneCoolingLoadVariableSpeedFan, !- Cooler Unit Control Method + 1.1, !- Throttling Range Temperature Difference {deltaC} + 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W} + EvaporativeCooler:Indirect:ResearchSpecial, !- First Evaporative Cooler Object Type + SMstore8 Indirect Evaporative Cooler, !- First Evaporative Cooler Object Name + EvaporativeCooler:Direct:ResearchSpecial, !- Second Evaporative Cooler Object Type + SMstore8 Direct Evaporative Cooler; !- Second Evaporative Cooler Name + + OutdoorAir:Node, + SMstore8 Cooler Unit OA Inlet; !- Name + + Fan:VariableVolume, + SMstore8 Supply Fan, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 300.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.0015302446, !- Fan Power Coefficient 1 + 0.0052080574, !- Fan Power Coefficient 2 + 1.1086242, !- Fan Power Coefficient 3 + -0.11635563, !- Fan Power Coefficient 4 + 0.000, !- Fan Power Coefficient 5 + SMstore8 Cooler Unit OA Inlet, !- Air Inlet Node Name + SMstore8 Fan outlet; !- Air Outlet Node Name + + EvaporativeCooler:Indirect:ResearchSpecial, + SMstore8 Indirect Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7500, !- Cooler Wetbulb Design Effectiveness + , !- Wetbulb Effectiveness Flow Ratio Modifier Curve Name + , !- Cooler Drybulb Design Effectiveness + , !- Drybulb Effectiveness Flow Ratio Modifier Curve Name + 55.0000, !- Recirculating Water Pump Design Power {W} + , !- Water Pump Power Sizing Factor {W/(m3/s)} + , !- Water Pump Power Modifier Curve Name + 1.0, !- Secondary Air Design Flow Rate {m3/s} + 1.0, !- Secondary Air Flow Scaling Factor {dimensionless} + autosize, !- Secondary Air Fan Design Power {W} + 207.6666666666666667, !- Secondary Air Fan Sizing Specific Power {W/(m3/s)} + , !- Secondary Air Fan Power Modifier Curve Name + SMstore8 Fan outlet, !- Primary Air Inlet Node Name + SMstore8 Indirect Outlet Node, !- Primary Air Outlet Node Name + autosize, !- Primary Air Design Flow Rate {m3/s} + 0.9000, !- Dewpoint Effectiveness Factor + SMstore8 Evap Cooler OA node, !- Secondary Air Inlet Node Name + SMstore8 Evap Cooler OA Outlet Node, !- Secondary Air Outlet Node Name + SMstore8 Inlet Node, !- Sensor Node Name + , !- Relief Air Inlet Node Name + , !- Water Supply Storage Tank Name + 0.2, !- Drift Loss Fraction + 3; !- Blowdown Concentration Ratio + + OutdoorAir:Node, + SMstore8 Evap Cooler OA node; !- Name + + EvaporativeCooler:Direct:ResearchSpecial, + SMstore8 Direct Evaporative Cooler, !- Name + ALWAYS_ON, !- Availability Schedule Name + 0.7, !- Cooler Design Effectiveness + , !- Effectiveness Flow Ratio Modifier Curve Name + autosize, !- Primary Air Design Flow Rate {m3/s} + 55.0, !- Recirculating Water Pump Design Power {W} + , !- Water Pump Power Sizing Factor {W/(m3/s)} + , !- Water Pump Power Modifier Curve Name + SMstore8 Indirect Outlet Node, !- Air Inlet Node Name + SMstore8 Inlet Node, !- Air Outlet Node Name + SMstore8 Inlet Node, !- Sensor Node Name + , !- Water Supply Storage Tank Name + 0.0, !- Drift Loss Fraction + 3; !- Blowdown Concentration Ratio + + AvailabilityManagerAssignmentList, + PSZ-AC_10:10 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_10:10 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_1:1 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_1:1 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_2:2 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_2:2 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_3:3 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_3:3 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_4:4 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_4:4 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_5:5 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_5:5 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_6:6 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_6:6 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_7:7 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_7:7 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_8:8 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_8:8 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + PSZ-AC_9:9 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + PSZ-AC_9:9 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManager:NightCycle, + PSZ-AC_10:10 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_1:1 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_2:2 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_3:3 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_4:4 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_5:5 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_6:6 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_7:7 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_8:8 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + PSZ-AC_9:9 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + ZoneHVAC:Baseboard:Convective:Electric, + LGstore1 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + LGstore2 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore1 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore2 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore3 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore4 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore5 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore6 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore7 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + + ZoneHVAC:Baseboard:Convective:Electric, + SMstore8 Zone Baseboard, !- Name + ALWAYS_ON, !- Availability Schedule Name + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + 0.97; !- Efficiency + +! ***SCHEDULES*** + + Schedule:Compact, + CLGSETP_SCH, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,30.0, !- Field 3 + Until: 21:00,24.0, !- Field 5 + Until: 24:00,30.0, !- Field 7 + For: Saturday, !- Field 9 + Until: 06:00,30.0, !- Field 10 + Until: 22:00,24.0, !- Field 12 + Until: 24:00,30.0, !- Field 14 + For WinterDesignDay, !- Field 16 + Until: 24:00,30.0, !- Field 17 + For: Sunday Holidays AllOtherDays, !- Field 19 + Until: 8:00,30.0, !- Field 20 + Until: 19:00,24.0, !- Field 22 + Until: 24:00,30.0; !- Field 24 + + Schedule:Compact, + Dual Zone Control Type Sched, !- Name + Control Type, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4; !- Field 3 + + Schedule:Compact, + HTGSETP_SCH, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 06:00,15.6, !- Field 3 + Until: 21:00,21.0, !- Field 5 + Until: 24:00,15.6, !- Field 7 + For SummerDesignDay, !- Field 9 + Until: 24:00,15.6, !- Field 10 + For WinterDesignDay, !- Field 12 + Until: 24:00,21.0, !- Field 13 + For: Saturday, !- Field 15 + Until: 06:00,15.6, !- Field 16 + Until: 22:00,21.0, !- Field 18 + Until: 24:00,15.6, !- Field 20 + For: AllOtherDays, !- Field 22 + Until: 8:00,15.6, !- Field 23 + Until: 19:00,21., !- Field 25 + Until: 24:00,15.6; !- Field 27 + + Schedule:Compact, + HVACOperationSchd, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,0.0, !- Field 3 + Until: 21:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 06:00,0.0, !- Field 10 + Until: 22:00,1.0, !- Field 12 + Until: 24:00,0.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 08:00,0.0, !- Field 17 + Until: 19:00,1.0, !- Field 19 + Until: 24:00,0.0; !- Field 21 + +! ***ECONOMICS*** +! PubServColorado_C_CommercialService, source TAP, effective 2005-01-05 +! PubServColorado_SG_SecondaryGeneral, source TAP, effective 2004-04-02 + + UtilityCost:Tariff, + PubServColorado_SG_SecondaryGeneral, !- Name + Electricity:Facility, !- Output Meter Name + kWh, !- Conversion Factor Choice + , !- Energy Conversion Factor + , !- Demand Conversion Factor + , !- Time of Use Period Schedule Name + , !- Season Schedule Name + , !- Month Schedule Name + HalfHour, !- Demand Window Length + 15.30, !- Monthly Charge or Variable Name + , !- Minimum Monthly Charge or Variable Name + , !- Real Time Pricing Charge Schedule Name + , !- Customer Baseline Load Schedule Name + Comm Elect; !- Group Name + + UtilityCost:Charge:Simple, + AnnualEnergyCharge, !- Utility Cost Charge Simple Name + PubServColorado_SG_SecondaryGeneral, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.0165; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + AnnualIncentiveCostCharge, !- Utility Cost Charge Simple Name + PubServColorado_SG_SecondaryGeneral, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.0021; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + AnnualEnergyCostCharge, !- Utility Cost Charge Simple Name + PubServColorado_SG_SecondaryGeneral, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.0083; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + AnnualEnergyCostCharge, !- Utility Cost Charge Simple Name + PubServColorado_SG_SecondaryGeneral, !- Tariff Name + totalDemand, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 12.55; !- Cost per Unit Value or Variable Name + + UtilityCost:Qualify, + MinDemand25kw, !- Utility Cost Qualify Name + PubServColorado_SG_SecondaryGeneral, !- Tariff Name + TotalDemand, !- Variable Name + Minimum, !- Qualify Type + 25, !- Threshold Value or Variable Name + Annual, !- Season + Count, !- Threshold Test + 12; !- Number of Months + + UtilityCost:Charge:Simple, + taxoffourPtNinePercent, !- Utility Cost Charge Simple Name + PubServColorado_SG_SecondaryGeneral, !- Tariff Name + SubTotal, !- Source Variable + Annual, !- Season + Taxes, !- Category Variable Name + 0.049; !- Cost per Unit Value or Variable Name + +!end PubServColorado_SG_SecondaryGeneral + + UtilityCost:Tariff, + PubServColorado_C_CommercialService, !- Name + Electricity:Facility, !- Output Meter Name + kWh, !- Conversion Factor Choice + , !- Energy Conversion Factor + , !- Demand Conversion Factor + , !- Time of Use Period Schedule Name + , !- Season Schedule Name + , !- Month Schedule Name + HalfHour, !- Demand Window Length + 6.60, !- Monthly Charge or Variable Name + , !- Minimum Monthly Charge or Variable Name + , !- Real Time Pricing Charge Schedule Name + , !- Customer Baseline Load Schedule Name + Comm Elect; !- Group Name + + UtilityCost:Charge:Simple, + AnnualEnergyCharge, !- Utility Cost Charge Simple Name + PubServColorado_C_CommercialService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.0602; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + AnnualIncentiveCharge, !- Utility Cost Charge Simple Name + PubServColorado_C_CommercialService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.0021; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + AnnualEnergyCostCharge, !- Utility Cost Charge Simple Name + PubServColorado_C_CommercialService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.0082; !- Cost per Unit Value or Variable Name + + UtilityCost:Qualify, + MaxDemand25kw, !- Utility Cost Qualify Name + PubServColorado_C_CommercialService, !- Tariff Name + TotalDemand, !- Variable Name + Maximum, !- Qualify Type + 25, !- Threshold Value or Variable Name + Annual, !- Season + Count, !- Threshold Test + 1; !- Number of Months + + UtilityCost:Charge:Simple, + taxoffourPtNinePercent, !- Utility Cost Charge Simple Name + PubServColorado_C_CommercialService, !- Tariff Name + SubTotal, !- Source Variable + Annual, !- Season + Taxes, !- Category Variable Name + 0.049; !- Cost per Unit Value or Variable Name + +!end PubServColorado_C_CommercialService +! ***GENERAL REPORTING*** + + OutputControl:ReportingTolerances, + 0.556, !- Tolerance for Time Heating Setpoint Not Met {deltaC} + 0.556; !- Tolerance for Time Cooling Setpoint Not Met {deltaC} + + Output:SQLite, + Simple; !- Option Type + + Output:JSON, + TimeSeries; !- Option Type + + EnvironmentalImpactFactors, + 0.663, !- District Heating Efficiency + 4.18, !- District Cooling COP {W/W} + 0.585, !- Steam Conversion Efficiency + 80.7272, !- Total Carbon Equivalent Emission Factor From N2O {kg/kg} + 6.2727, !- Total Carbon Equivalent Emission Factor From CH4 {kg/kg} + 0.2727; !- Total Carbon Equivalent Emission Factor From CO2 {kg/kg} + +! Colorado electricity source and emission factors based on Deru and Torcellini 2007 + + FuelFactors, + Electricity, !- Existing Fuel Resource Name + 3.318, !- Source Energy Factor {J/J} + , !- Source Energy Schedule Name + 2.644E+02, !- CO2 Emission Factor {g/MJ} + , !- CO2 Emission Factor Schedule Name + 9.806E-02, !- CO Emission Factor {g/MJ} + , !- CO Emission Factor Schedule Name + 6.25E-01, !- CH4 Emission Factor {g/MJ} + , !- CH4 Emission Factor Schedule Name + 4.639E-01, !- NOx Emission Factor {g/MJ} + , !- NOx Emission Factor Schedule Name + 6.750E-03, !- N2O Emission Factor {g/MJ} + , !- N2O Emission Factor Schedule Name + 1.213E+00, !- SO2 Emission Factor {g/MJ} + , !- SO2 Emission Factor Schedule Name + 0.0, !- PM Emission Factor {g/MJ} + , !- PM Emission Factor Schedule Name + 1.456E-02, !- PM10 Emission Factor {g/MJ} + , !- PM10 Emission Factor Schedule Name + 0.0, !- PM2.5 Emission Factor {g/MJ} + , !- PM2.5 Emission Factor Schedule Name + 0.0, !- NH3 Emission Factor {g/MJ} + , !- NH3 Emission Factor Schedule Name + 8.472E-03, !- NMVOC Emission Factor {g/MJ} + , !- NMVOC Emission Factor Schedule Name + 4.722E-06, !- Hg Emission Factor {g/MJ} + , !- Hg Emission Factor Schedule Name + 2.350E-05, !- Pb Emission Factor {g/MJ} + , !- Pb Emission Factor Schedule Name + 1.261333, !- Water Emission Factor {L/MJ} + , !- Water Emission Factor Schedule Name + 0, !- Nuclear High Level Emission Factor {g/MJ} + , !- Nuclear High Level Emission Factor Schedule Name + 0; !- Nuclear Low Level Emission Factor {m3/MJ} + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AllSummary; !- Report 1 Name + + Output:Meter,Electricity:Facility,hourly; + + Output:VariableDictionary,IDF; + + Output:Variable,LGstore1 Direct Evaporative Cooler,Evaporative Cooler Electricity Energy,hourly; + + Output:Variable,LGstore1 Direct Evaporative Cooler,Evaporative Cooler Water Volume,hourly; + + Output:Variable,LGstore1 Supply Fan,Fan Electricity Rate,hourly; + + Output:Variable,LGstore1 Zone Evap Unit,Zone Evaporative Cooler Unit Fan Speed Ratio,hourly; + + Output:Variable,LGstore1,Zone Air Temperature,hourly; + + Output:Variable,LGstore1,Zone Air Relative Humidity,hourly; !- HVAC Average [%] + + Output:Diagnostics, + DisplayUnusedSchedules; !- Key 1 + diff --git a/tst/EnergyPlus/api/TestRuntime.c b/tst/EnergyPlus/api/TestRuntime.c index 7c58d924b96..0276b83d85e 100644 --- a/tst/EnergyPlus/api/TestRuntime.c +++ b/tst/EnergyPlus/api/TestRuntime.c @@ -56,6 +56,7 @@ int numWarnings = 0; int oneTimeHalfway = 0; +int progressValue = 0; void BeginNewEnvironmentHandler(EnergyPlusState state) { @@ -136,6 +137,7 @@ void newEnvrnHandler(EnergyPlusState state) void progressHandler(int const progress) { + progressValue = progress; if (oneTimeHalfway == 0 && progress > 50) { printf("Were halfway there!\n"); oneTimeHalfway = 1; @@ -186,6 +188,9 @@ int main(int argc, const char *argv[]) printf("There were %d warnings!\n", numWarnings); numWarnings = 0; } + if (progressValue != 100) { + return 1; + } oneTimeHalfway = 0; // reset and run again EnergyPlusState state2 = stateNew(); // stateReset(state); // note previous callbacks are cleared here diff --git a/tst/EnergyPlus/api/TestRuntime.py b/tst/EnergyPlus/api/TestRuntime.py index 66169cfcfff..a00162131c0 100644 --- a/tst/EnergyPlus/api/TestRuntime.py +++ b/tst/EnergyPlus/api/TestRuntime.py @@ -56,6 +56,7 @@ import sys from pyenergyplus.api import EnergyPlusAPI +progressValue = 0 def environment_handler(_state) -> None: print("OH HAI ENVIRONMENT") @@ -68,6 +69,8 @@ def common_callback_handler(_state) -> None: def progress_handler(progress: int) -> None: + global progressValue + progressValue = progress if 49 < progress < 51: print("HALFWAY THERE!!") sys.stdout.flush() @@ -91,6 +94,7 @@ def error_handler(severity: int, message: bytes) -> None: if v != 0: print("EnergyPlus Failed!") sys.exit(1) +assert(progressValue == 100) print("MUTING CONSOLE OUTPUT") state2 = api.state_manager.new_state() diff --git a/tst/EnergyPlus/unit/BoilerHotWater.unit.cc b/tst/EnergyPlus/unit/BoilerHotWater.unit.cc index 45f1a4add24..d561537be41 100644 --- a/tst/EnergyPlus/unit/BoilerHotWater.unit.cc +++ b/tst/EnergyPlus/unit/BoilerHotWater.unit.cc @@ -190,7 +190,7 @@ TEST_F(EnergyPlusFixture, Boiler_HotWater_BlankDesignWaterFlowRate) EXPECT_EQ(AutoSize, state->dataBoilers->Boiler(1).VolFlowRate); // Additional tests for fuel type input - EXPECT_TRUE(compare_enums(state->dataBoilers->Boiler(1).FuelType, Constant::eResource::NaturalGas)); + EXPECT_TRUE(compare_enums(state->dataBoilers->Boiler(1).FuelType, Constant::eFuel::NaturalGas)); } TEST_F(EnergyPlusFixture, Boiler_HotWater_BoilerEfficiency) diff --git a/tst/EnergyPlus/unit/BoilerSteam.unit.cc b/tst/EnergyPlus/unit/BoilerSteam.unit.cc index 5f9add59314..3034c759c88 100644 --- a/tst/EnergyPlus/unit/BoilerSteam.unit.cc +++ b/tst/EnergyPlus/unit/BoilerSteam.unit.cc @@ -94,7 +94,7 @@ TEST_F(EnergyPlusFixture, BoilerSteam_GetInput) GetBoilerInput(*state); auto &thisBoiler = state->dataBoilerSteam->Boiler((int)state->dataBoilerSteam->Boiler.size()); EXPECT_EQ(thisBoiler.Name, "STEAM BOILER PLANT BOILER"); - EXPECT_TRUE(compare_enums(thisBoiler.FuelType, Constant::eResource::NaturalGas)); + EXPECT_TRUE(compare_enums(thisBoiler.FuelType, Constant::eFuel::NaturalGas)); EXPECT_EQ(thisBoiler.BoilerMaxOperPress, 160000); EXPECT_EQ(thisBoiler.NomEffic, 0.8); EXPECT_EQ(thisBoiler.TempUpLimitBoilerOut, 115); diff --git a/tst/EnergyPlus/unit/CTElectricGenerator.unit.cc b/tst/EnergyPlus/unit/CTElectricGenerator.unit.cc index 736f8ee5089..c0de5170c08 100644 --- a/tst/EnergyPlus/unit/CTElectricGenerator.unit.cc +++ b/tst/EnergyPlus/unit/CTElectricGenerator.unit.cc @@ -142,7 +142,7 @@ TEST_F(EnergyPlusFixture, CTElectricGenerator_Fueltype) GetCTGeneratorInput(*state); - EXPECT_TRUE(compare_enums(state->dataCTElectricGenerator->CTGenerator(1).FuelType, Constant::eResource::NaturalGas)); + EXPECT_TRUE(compare_enums(state->dataCTElectricGenerator->CTGenerator(1).FuelType, Constant::eFuel::NaturalGas)); } } // namespace EnergyPlus diff --git a/tst/EnergyPlus/unit/ChillerGasAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerGasAbsorption.unit.cc index 573d7a0370b..a42d2d8d51e 100644 --- a/tst/EnergyPlus/unit/ChillerGasAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerGasAbsorption.unit.cc @@ -166,7 +166,7 @@ TEST_F(EnergyPlusFixture, GasAbsorption_GetInput_Test) EXPECT_FALSE(state->dataChillerGasAbsorption->GasAbsorber(1).isWaterCooled); EXPECT_EQ(2., state->dataChillerGasAbsorption->GasAbsorber(1).CHWLowLimitTemp); - EXPECT_TRUE(compare_enums(Constant::eResource::NaturalGas, state->dataChillerGasAbsorption->GasAbsorber(1).FuelType)); + EXPECT_TRUE(compare_enums(Constant::eFuel::NaturalGas, state->dataChillerGasAbsorption->GasAbsorber(1).FuelType)); } TEST_F(EnergyPlusFixture, GasAbsorption_getDesignCapacities_Test) diff --git a/tst/EnergyPlus/unit/Coils/CoilCoolingDX.unit.cc b/tst/EnergyPlus/unit/Coils/CoilCoolingDX.unit.cc index 4c577dbd81f..b2b52213f44 100644 --- a/tst/EnergyPlus/unit/Coils/CoilCoolingDX.unit.cc +++ b/tst/EnergyPlus/unit/Coils/CoilCoolingDX.unit.cc @@ -394,7 +394,7 @@ TEST_F(EnergyPlusFixture, DISABLED_CoilDXCoolingVsMultiSpeed_CycFanCycCoil) Coil.DXCoilType_Num = DataHVACGlobals::CoilDX_MultiSpeedCooling; Coil.DXCoilType = "Coil:Cooling:DX:MultiSpeed"; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; Coil.NumOfSpeeds = 2; Coil.MSRatedTotCap.allocate(Coil.NumOfSpeeds); @@ -810,7 +810,7 @@ TEST_F(EnergyPlusFixture, DISABLED_CoilDXCoolingVsMultiSpeed_ContFanCycCoil) Coil.DXCoilType_Num = DataHVACGlobals::CoilDX_MultiSpeedCooling; Coil.DXCoilType = "Coil:Cooling:DX:MultiSpeed"; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; Coil.NumOfSpeeds = 2; Coil.MSRatedTotCap.allocate(Coil.NumOfSpeeds); @@ -1226,7 +1226,7 @@ TEST_F(EnergyPlusFixture, DISABLED_CoilDXMultiSpeed_SpeedCheck_CycFanCycCoil) Coil.DXCoilType_Num = DataHVACGlobals::CoilDX_MultiSpeedCooling; Coil.DXCoilType = "Coil:Cooling:DX:MultiSpeed"; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; Coil.NumOfSpeeds = 2; Coil.MSRatedTotCap.allocate(Coil.NumOfSpeeds); @@ -1457,7 +1457,7 @@ TEST_F(EnergyPlusFixture, DISABLED_CoilDXMultiSpeed_SpeedCheck_ContFanCycCoil) Coil.DXCoilType_Num = DataHVACGlobals::CoilDX_MultiSpeedCooling; Coil.DXCoilType = "Coil:Cooling:DX:MultiSpeed"; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.SchedPtr = ScheduleManager::ScheduleAlwaysOn; Coil.NumOfSpeeds = 2; Coil.MSRatedTotCap.allocate(Coil.NumOfSpeeds); diff --git a/tst/EnergyPlus/unit/DXCoils.unit.cc b/tst/EnergyPlus/unit/DXCoils.unit.cc index 65847524e48..edd63fc91e3 100644 --- a/tst/EnergyPlus/unit/DXCoils.unit.cc +++ b/tst/EnergyPlus/unit/DXCoils.unit.cc @@ -451,7 +451,7 @@ TEST_F(EnergyPlusFixture, TestMultiSpeedDefrostCOP) Coil.DefrostTime = 0.058333; Coil.DefrostCapacity = 1000; Coil.PLRImpact = false; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.RegionNum = 4; Coil.MSRatedTotCap(1) = 2202.5268975202675; Coil.MSRatedCOP(1) = 4.200635910578916; @@ -805,7 +805,7 @@ TEST_F(EnergyPlusFixture, TestSingleSpeedDefrostCOP) Coil.DefrostTime = 0.058333; Coil.DefrostCapacity = 1000; Coil.PLRImpact = false; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.RegionNum = 4; state->dataCurveManager->allocateCurveVector(5); @@ -2318,13 +2318,13 @@ TEST_F(EnergyPlusFixture, TestMultiSpeedWasteHeat) // Case 1 test GetDXCoils(*state); - EXPECT_TRUE(compare_enums(Constant::eResource::Electricity, state->dataDXCoils->DXCoil(1).FuelType)); + EXPECT_TRUE(compare_enums(Constant::eFuel::Electricity, state->dataDXCoils->DXCoil(1).FuelType)); EXPECT_EQ(0, state->dataDXCoils->DXCoil(1).MSWasteHeat(2)); // Test calculations of the waste heat function #5162 // Case 2 test waste heat is zero when the parent has not heat recovery inputs - state->dataDXCoils->DXCoil(1).FuelType = Constant::eResource::NaturalGas; + state->dataDXCoils->DXCoil(1).FuelType = Constant::eFuel::NaturalGas; state->dataDXCoils->DXCoil(1).MSHPHeatRecActive = false; state->dataEnvrn->OutDryBulbTemp = 35; diff --git a/tst/EnergyPlus/unit/DesiccantDehumidifiers.unit.cc b/tst/EnergyPlus/unit/DesiccantDehumidifiers.unit.cc index 86a6985cd5e..417f5502238 100644 --- a/tst/EnergyPlus/unit/DesiccantDehumidifiers.unit.cc +++ b/tst/EnergyPlus/unit/DesiccantDehumidifiers.unit.cc @@ -2892,6 +2892,20 @@ TEST_F(EnergyPlusFixture, DesiccantDehum_OnOASystemTest) } } EXPECT_EQ(RegCoilCapacity, state->dataHeatingCoils->HeatingCoil(CoilIndex).NominalCapacity); + + // testing system peak cooling load timestamp + int coolPeakDD = 2; + auto &finalSysSizing = state->dataSize->FinalSysSizing(1); + auto &sysSizPeakDDNum = state->dataSize->SysSizPeakDDNum(1); + EXPECT_TRUE(compare_enums(finalSysSizing.coolingPeakLoad, DataSizing::PeakLoad::SensibleCooling)); + EXPECT_EQ(finalSysSizing.SizingOption, DataSizing::NonCoincident); + EXPECT_EQ(sysSizPeakDDNum.SensCoolPeakDD, coolPeakDD); + int timeStepIndexAtPeakCoolLoad = sysSizPeakDDNum.TimeStepAtSensCoolPk(coolPeakDD); + EXPECT_EQ(sysSizPeakDDNum.TimeStepAtTotCoolPk(coolPeakDD), timeStepIndexAtPeakCoolLoad); + std::string coolPeakDDDate = sysSizPeakDDNum.cTotCoolPeakDDDate; + EXPECT_EQ(coolPeakDDDate, "7/21"); + std::string dateHrMin = coolPeakDDDate + " " + SizingManager::TimeIndexToHrMinString(*state, timeStepIndexAtPeakCoolLoad); + EXPECT_EQ(dateHrMin, "7/21 10:30:00"); } TEST_F(EnergyPlusFixture, DesiccantDehum_OnPrimaryAirSystemTest) diff --git a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc index 230f5e08766..c7f69455351 100644 --- a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc +++ b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc @@ -513,7 +513,7 @@ TEST_F(EnergyPlusFixture, EconomicLifeCycleCost_ExpressAsCashFlows) state->dataEconTariff->numTariff = 1; state->dataEconTariff->tariff.allocate(1); state->dataEconTariff->tariff(1).isSelected = true; - state->dataEconTariff->tariff(1).resourceNum = Constant::eResource::Electricity; + state->dataEconTariff->tariff(1).resource = Constant::eResource::Electricity; state->dataEconTariff->tariff(1).ptTotal = 1; state->dataEconTariff->econVar.allocate(1); state->dataEconTariff->econVar(1).values.allocate(12); diff --git a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc index 613092d5d26..c34462c28f0 100644 --- a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc +++ b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc @@ -4886,7 +4886,7 @@ TEST_F(EnergyPlusFixture, VRFTest_SysCurve_GetInputFailers) EXPECT_EQ(0, state->dataHVACVarRefFlow->VRFTU(VRFTUNum).IndexToTUInTUList); // Additional tests for fuel type input - EXPECT_TRUE(compare_enums(state->dataHVACVarRefFlow->VRF(VRFTUNum).FuelTypeNum, Constant::eResource::Electricity)); + EXPECT_TRUE(compare_enums(state->dataHVACVarRefFlow->VRF(VRFTUNum).fuel, Constant::eFuel::Electricity)); } TEST_F(EnergyPlusFixture, VRFTest_SysCurve_WaterCooled) @@ -8147,7 +8147,7 @@ TEST_F(EnergyPlusFixture, VRFTU_CalcVRFSupplementalHeatingCoilElectric) state->dataHeatingCoils->CoilIsSuppHeater = true; state->dataHeatingCoils->HeatingCoil(CoilNum).Name = thisVRFTU.SuppHeatCoilName; state->dataHeatingCoils->HeatingCoil(CoilNum).HeatingCoilType = thisVRFTU.SuppHeatCoilType; - state->dataHeatingCoils->HeatingCoil(CoilNum).ResourceType = Constant::eResource::Electricity; + state->dataHeatingCoils->HeatingCoil(CoilNum).FuelType = Constant::eFuel::Electricity; state->dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num = thisVRFTU.SuppHeatCoilType_Num; state->dataHeatingCoils->HeatingCoil(CoilNum).AirInletNodeNum = thisVRFTU.SuppHeatCoilAirInletNode; state->dataHeatingCoils->HeatingCoil(CoilNum).AirOutletNodeNum = thisVRFTU.SuppHeatCoilAirOutletNode; @@ -8212,7 +8212,7 @@ TEST_F(EnergyPlusFixture, VRFTU_CalcVRFSupplementalHeatingCoilFuel) state->dataHeatingCoils->CoilIsSuppHeater = true; state->dataHeatingCoils->HeatingCoil(CoilNum).Name = thisVRFTU.SuppHeatCoilName; state->dataHeatingCoils->HeatingCoil(CoilNum).HeatingCoilType = thisVRFTU.SuppHeatCoilType; - state->dataHeatingCoils->HeatingCoil(CoilNum).ResourceType = Constant::eResource::NaturalGas; + state->dataHeatingCoils->HeatingCoil(CoilNum).FuelType = Constant::eFuel::NaturalGas; state->dataHeatingCoils->HeatingCoil(CoilNum).HCoilType_Num = thisVRFTU.SuppHeatCoilType_Num; state->dataHeatingCoils->HeatingCoil(CoilNum).AirInletNodeNum = thisVRFTU.SuppHeatCoilAirInletNode; state->dataHeatingCoils->HeatingCoil(CoilNum).AirOutletNodeNum = thisVRFTU.SuppHeatCoilAirOutletNode; @@ -14497,7 +14497,7 @@ TEST_F(EnergyPlusFixture, VRF_MinPLR_and_EIRfPLRCruveMinPLRInputsTest) EXPECT_EQ(1.00, thisHeatEIRFPLR->inputLimits[0].max); EXPECT_EQ(1.00, maxEIRfLowPLRXInput); // getinput checks this EXPECT_GT(thisHeatEIRFPLR->inputLimits[0].min, thisVRF.MinPLR); // expect warning message - EXPECT_TRUE(compare_enums(thisVRF.FuelTypeNum, Constant::eResource::Electricity)); + EXPECT_TRUE(compare_enums(thisVRF.fuel, Constant::eFuel::Electricity)); } TEST_F(EnergyPlusFixture, VRFTest_TU_NotOnZoneHVACEquipmentList) diff --git a/tst/EnergyPlus/unit/HeatingCoils.unit.cc b/tst/EnergyPlus/unit/HeatingCoils.unit.cc index c8bc0637892..3b70e84c8c9 100644 --- a/tst/EnergyPlus/unit/HeatingCoils.unit.cc +++ b/tst/EnergyPlus/unit/HeatingCoils.unit.cc @@ -79,7 +79,7 @@ TEST_F(EnergyPlusFixture, HeatingCoils_FuelTypeInput) ASSERT_NO_THROW(HeatingCoils::GetHeatingCoilInput(*state)); - EXPECT_TRUE(compare_enums(state->dataHeatingCoils->HeatingCoil(1).ResourceType, Constant::eResource::OtherFuel1)); + EXPECT_TRUE(compare_enums(state->dataHeatingCoils->HeatingCoil(1).FuelType, Constant::eFuel::OtherFuel1)); } TEST_F(EnergyPlusFixture, HeatingCoils_FuelTypeInputError) @@ -123,7 +123,7 @@ TEST_F(EnergyPlusFixture, HeatingCoils_FuelTypeCoal) ASSERT_NO_THROW(HeatingCoils::GetHeatingCoilInput(*state)); - EXPECT_TRUE(compare_enums(state->dataHeatingCoils->HeatingCoil(1).ResourceType, Constant::eResource::Coal)); + EXPECT_TRUE(compare_enums(state->dataHeatingCoils->HeatingCoil(1).FuelType, Constant::eFuel::Coal)); } TEST_F(EnergyPlusFixture, HeatingCoils_FuelTypePropaneGas) @@ -141,7 +141,7 @@ TEST_F(EnergyPlusFixture, HeatingCoils_FuelTypePropaneGas) ASSERT_NO_THROW(HeatingCoils::GetHeatingCoilInput(*state)); - EXPECT_TRUE(compare_enums(state->dataHeatingCoils->HeatingCoil(1).ResourceType, Constant::eResource::Propane)); + EXPECT_TRUE(compare_enums(state->dataHeatingCoils->HeatingCoil(1).FuelType, Constant::eFuel::Propane)); } TEST_F(EnergyPlusFixture, HeatingCoils_OutletAirPropertiesTest) diff --git a/tst/EnergyPlus/unit/ICEngineElectricGenerator.unit.cc b/tst/EnergyPlus/unit/ICEngineElectricGenerator.unit.cc index eefa187666a..dca3eab3576 100644 --- a/tst/EnergyPlus/unit/ICEngineElectricGenerator.unit.cc +++ b/tst/EnergyPlus/unit/ICEngineElectricGenerator.unit.cc @@ -129,7 +129,7 @@ TEST_F(EnergyPlusFixture, ICEngineElectricGenerator_Fueltype) GetICEngineGeneratorInput(*state); - EXPECT_TRUE(compare_enums(state->dataICEngElectGen->ICEngineGenerator(1).FuelType, Constant::eResource::Diesel)); + EXPECT_TRUE(compare_enums(state->dataICEngElectGen->ICEngineGenerator(1).FuelType, Constant::eFuel::Diesel)); } } // namespace EnergyPlus diff --git a/tst/EnergyPlus/unit/MicroturbineElectricGenerator.unit.cc b/tst/EnergyPlus/unit/MicroturbineElectricGenerator.unit.cc index ca3813862f0..70ad47b291e 100644 --- a/tst/EnergyPlus/unit/MicroturbineElectricGenerator.unit.cc +++ b/tst/EnergyPlus/unit/MicroturbineElectricGenerator.unit.cc @@ -127,7 +127,7 @@ TEST_F(EnergyPlusFixture, MicroturbineElectricGenerator_Fueltype) state->dataIPShortCut->cCurrentModuleObject = "Generator:MicroTurbine"; GetMTGeneratorInput(*state); - EXPECT_TRUE(compare_enums(state->dataMircoturbElectGen->MTGenerator(1).FuelType, Constant::eResource::NaturalGas)); + EXPECT_TRUE(compare_enums(state->dataMircoturbElectGen->MTGenerator(1).FuelType, Constant::eFuel::NaturalGas)); } } // namespace EnergyPlus diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index 0e894ff8b22..ed6a2cedd04 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -83,7 +83,7 @@ namespace OutputProcessor { Array1D VarTypes(NumVariables); // Variable Types (1=integer, 2=real, 3=meter) Array1D IndexTypes(NumVariables); // Variable Index Types (1=Zone,2=HVAC) Array1D unitsForVar(NumVariables); // units from enum for each variable - std::map ResourceTypes; // ResourceTypes for each variable + Array1D ResourceTypes(NumVariables); // ResourceTypes for each variable Array1D_string EndUses(NumVariables); // EndUses for each variable Array1D_string Groups(NumVariables); // Groups for each variable Array1D_string Names(NumVariables); // Variable Names for each variable @@ -94,10 +94,6 @@ namespace OutputProcessor { int NumFound; - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - GetMeteredVariables( *state, TypeOfComp, NameOfComp, VarIndexes, VarTypes, IndexTypes, unitsForVar, ResourceTypes, EndUses, Groups, Names, NumFound); diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index f8cf84ec1c7..5c0b9eb08c9 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -661,6 +661,8 @@ TEST_F(EnergyPlusFixture, OutputReportTabularTest_ConfirmConvertToEscaped) EXPECT_EQ("String with \xC2\xB1 in it", ConvertToEscaped("String with \xC2\xB1 in it")); EXPECT_EQ("String with ° in it", ConvertToEscaped(R"(String with \u00B0 in it)")); EXPECT_EQ("String with ° in it", ConvertToEscaped(R"(String with \xB0 in it)")); + EXPECT_EQ("String with ≤ in it", ConvertToEscaped("String with ≤ in it")); + EXPECT_EQ("String with ≥ in it", ConvertToEscaped("String with ≥ in it")); EXPECT_ANY_THROW(ConvertToEscaped(R"(String with \u in it)")); EXPECT_ANY_THROW(ConvertToEscaped(R"(String with \x in it)")); } @@ -3810,7 +3812,7 @@ TEST_F(EnergyPlusFixture, OutputReportTabular_GatherHeatEmissionReport) state->dataDXCoils->DXCoil.allocate(2); state->dataDXCoils->DXCoil(1).DXCoilType_Num = DataHVACGlobals::CoilDX_MultiSpeedCooling; state->dataDXCoils->DXCoil(1).CondenserType(1) = DataHeatBalance::RefrigCondenserType::Air; - state->dataDXCoils->DXCoil(1).FuelType = Constant::eResource::NaturalGas; + state->dataDXCoils->DXCoil(1).FuelType = Constant::eFuel::NaturalGas; state->dataDXCoils->DXCoil(1).ElecCoolingConsumption = 100.0; state->dataDXCoils->DXCoil(1).TotalCoolingEnergy = 100.0; state->dataDXCoils->DXCoil(1).MSFuelWasteHeat = 1.0; @@ -11150,7 +11152,7 @@ TEST_F(SQLiteFixture, DOASDirectToZone_ZoneMultiplierRemoved) 1, !- Upper Limit Value Discrete, !- Numeric Type availability; !- Unit Type - + ZoneHVAC:EquipmentConnections, Test Zone, !- Zone Name Test Zone Equipment List, !- Zone Conditioning Equipment List Name @@ -11317,7 +11319,7 @@ TEST_F(SQLiteFixture, DOASDirectToZone_ZoneMultiplierRemoved) 3.0, !- U-Factor {W/m2-K} 0.5, !- Solar Heat Gain Coefficient 0.4; !- Visible Transmittance - + Construction, ExteriorWall, !- Name C4 - 4 IN COMMON BRICK; !- Layer 2 @@ -11749,3 +11751,940 @@ TEST_F(SQLiteFixture, DOASDirectToZone_ZoneMultiplierRemoved) Real64 return_val_sensible_instant = execAndReturnFirstDouble(query_sensible_instant); EXPECT_EQ(return_val_sensible_instant, 517.05); } + +TEST_F(SQLiteFixture, UpdateSizing_EndSysSizingCalc) +{ + std::string const idf_objects_1 = R"IDF( + Version,23.1; + + Timestep,4; + + Building, + NONE, !- Name + 0, !- North Axis {deg} + Suburbs, !- Terrain + 0.039999999, !- Loads Convergence Tolerance Value {W} + 0.4, !- Temperature Convergence Tolerance Value {deltaC} + FullInteriorAndExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + Zone, + Thermal Zone one, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0; !- Z Origin {m} + + BuildingSurface:Detailed, + Zn001:Flr001, !- Name + Floor, !- Surface Type + FLOOR SLAB 8 IN, !- Construction Name + Thermal Zone one, !- Zone Name + , !- Space Name + Adiabatic, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 1, !- View Factor to Ground + , !- Number of Vertices + 6,6,0, !- X,Y,Z ==> Vertex 1 {m} + 6,0,0, !- X,Y,Z ==> Vertex 2 {m} + 0,0,0, !- X,Y,Z ==> Vertex 3 {m} + 0,6,0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Roof001, !- Name + Roof, !- Surface Type + ROOF34, !- Construction Name + Thermal Zone one, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0, !- View Factor to Ground + , !- Number of Vertices + 6,0,3, !- X,Y,Z ==> Vertex 1 {m} + 6,6,3, !- X,Y,Z ==> Vertex 2 {m} + 0,6,3, !- X,Y,Z ==> Vertex 3 {m} + 0,0,3; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall001, !- Name + Wall, !- Surface Type + ExteriorWall, !- Construction Name + Thermal Zone one, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + , !- Number of Vertices + 0,0,3, !- X,Y,Z ==> Vertex 1 {m} + 0,0,0, !- X,Y,Z ==> Vertex 2 {m} + 6,0,0, !- X,Y,Z ==> Vertex 3 {m} + 6,0,3; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Zn001:Wall001:Win001, !- Name + Window, !- Surface Type + SimpleGlazing, !- Construction Name + Zn001:Wall001, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.5, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + , !- Number of Vertices + 0.548,0,2, !- X,Y,Z ==> Vertex 1 {m} + 0.548,0,1, !- X,Y,Z ==> Vertex 2 {m} + 5.548,0,1, !- X,Y,Z ==> Vertex 3 {m} + 5.548,0,2; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall002, !- Name + Wall, !- Surface Type + ExteriorWall, !- Construction Name + Thermal Zone one, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + , !- Number of Vertices + 0,6,3, !- X,Y,Z ==> Vertex 1 {m} + 0,6,0, !- X,Y,Z ==> Vertex 2 {m} + 0,0,0, !- X,Y,Z ==> Vertex 3 {m} + 0,0,3; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall003, !- Name + Wall, !- Surface Type + ExteriorWall, !- Construction Name + Thermal Zone one, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + , !- Number of Vertices + 6,6,3, !- X,Y,Z ==> Vertex 1 {m} + 6,6,0, !- X,Y,Z ==> Vertex 2 {m} + 0,6,0, !- X,Y,Z ==> Vertex 3 {m} + 0,6,3; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall004, !- Name + Wall, !- Surface Type + ExteriorWall, !- Construction Name + Thermal Zone one, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + , !- Number of Vertices + 6,0,3, !- X,Y,Z ==> Vertex 1 {m} + 6,0,0, !- X,Y,Z ==> Vertex 2 {m} + 6,6,0, !- X,Y,Z ==> Vertex 3 {m} + 6,6,3; !- X,Y,Z ==> Vertex 4 {m} + + Lights, + West Zone Lights, !- Name + Thermal Zone one, !- Zone or ZoneList or Space or SpaceList Name + Always On, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1878.6252, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Return Air Fraction + 0.2, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + West Zone ElecEq, !- Name + Thermal Zone one, !- Zone or ZoneList or Space or SpaceList Name + Always On, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1928.751, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + ZoneInfiltration:DesignFlowRate, + West Zone Infiltration, !- Name + Thermal Zone one, !- Zone or ZoneList or Space or SpaceList Name + Always On, !- Schedule Name + Flow/Zone, !- Design Flow Rate Calculation Method + 0, !- Design Flow Rate {m3/s} + , !- Flow Rate per Floor Area {m3/s-m2} + , !- Flow Rate per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneControl:Thermostat, + Thermal Zone one Thermostat, !- Name + Thermal Zone one, !- Zone or ZoneList Name + Thermal Zone one Thermostat Schedule, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + DualThermostat, !- Control 1 Name + , !- Control 2 Object Type + , !- Control 2 Name + , !- Control 3 Object Type + , !- Control 3 Name + , !- Control 4 Object Type + , !- Control 4 Name + 0; !- Temperature Difference Between Cutout And Setpoint {deltaC} + + Schedule:Compact, + Thermal Zone one Thermostat Schedule, !- Name + Thermal Zone one Thermostat Schedule Type Limits, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4; !- Field 3 + + ScheduleTypeLimits, + Thermal Zone one Thermostat Schedule Type Limits, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ThermostatSetpoint:DualSetpoint, + DualThermostat, !- Name + Heating Setpoints, !- Heating Setpoint Temperature Schedule Name + Cooling Setpoints; !- Cooling Setpoint Temperature Schedule Name + + Schedule:Compact, + Heating Setpoints, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,22.5; !- Field 3 + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS, !- Numeric Type + temperature; !- Unit Type + + Schedule:Compact, + Cooling Setpoints, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,23.5; !- Field 3 + + Schedule:Constant,Always On,On/Off,1; + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + Discrete, !- Numeric Type + availability; !- Unit Type + + ZoneHVAC:EquipmentConnections, + Thermal Zone one, !- Zone Name + Thermal Zone one Equipment List, !- Zone Conditioning Equipment List Name + Thermal Zone one Inlet Node List, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + ZoneAirNode, !- Zone Air Node Name + Thermal Zone one Return Node List; !- Zone Return Air Node or NodeList Name + + NodeList, + Thermal Zone one Inlet Node List, !- Name + Node 5; !- Node 1 Name + + NodeList, + Thermal Zone one Return Node List, !- Name + Node 29; !- Node 1 Name + + ZoneHVAC:AirDistributionUnit, + ADU VAV No Rht, !- Name + Node 5, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:NoReheat, !- Air Terminal Object Type + VAV No Rht; !- Air Terminal Name + + AirTerminal:SingleDuct:VAV:NoReheat, + VAV No Rht, !- Name + Always On, !- Availability Schedule Name + Node 5, !- Air Outlet Node Name + Node 10, !- Air Inlet Node Name + Autosize, !- Maximum Air Flow Rate {m3/s} + , !- Zone Minimum Air Flow Input Method + , !- Constant Minimum Air Flow Fraction + Autosize; !- Fixed Minimum Air Flow Rate {m3/s} + + ZoneHVAC:EquipmentList, + Thermal Zone one Equipment List, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + ADU VAV No Rht, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + Sizing:Zone, + Thermal Zone one, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12, !- Zone Cooling Design Supply Air Temperature {C} + 11.11, !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + 11.11, !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name + 0, !- Zone Heating Sizing Factor + 0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + 0.000762, !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + 0, !- Cooling Minimum Air Flow {m3/s} + 0, !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + 0.002032, !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + 0.1415762, !- Heating Maximum Air Flow {m3/s} + 0.3, !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + , !- Dedicated Outdoor Air System Control Strategy + , !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + , !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + Sensible Load Only No Latent Load, !- Zone Load Sizing Method + HumidityRatioDifference, !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method + , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.005, !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir} + HumidityRatioDifference, !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method + , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.005; !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir} + +)IDF"; + + std::string const idf_objects_2 = R"IDF( + + DesignSpecification:OutdoorAir, + SZ DSOA West Zone, !- Name + Sum, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0, !- Outdoor Air Flow per Zone {m3/s} + 0; !- Outdoor Air Flow Air Changes per Hour {1/hr} + + SimulationControl, + Yes, !- Do Zone Sizing Calculation + Yes, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + Yes, !- Run Simulation for Sizing Periods + No, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + ; !- Maximum Number of HVAC Sizing Simulation Passes + + ShadowCalculation, + PolygonClipping, !- Shading Calculation Method + Periodic, !- Shading Calculation Update Frequency Method + 20, !- Shading Calculation Update Frequency + 15000, !- Maximum Figures in Shadow Overlap Calculations + SutherlandHodgman, !- Polygon Clipping Algorithm + 512, !- Pixel Counting Resolution + SimpleSkyDiffuseModeling,!- Sky Diffuse Modeling Algorithm + No, !- Output External Shading Calculation Results + No, !- Disable Self-Shading Within Shading Zone Groups + No; !- Disable Self-Shading From Shading Zone Groups to Other Zones + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + Counterclockwise, !- Vertex Entry Direction + Relative, !- Coordinate System + Relative, !- Daylighting Reference Point Coordinate System + Relative; !- Rectangular Surface Coordinate System + + Material, + A1 - 1 IN STUCCO, !- Name + Smooth, !- Roughness + 0.025389841, !- Thickness {m} + 0.6918309, !- Conductivity {W/m-K} + 1858.142, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.92, !- Solar Absorptance + 0.92; !- Visible Absorptance + + Material, + B5 - 1 IN DENSE INSULATION, !- Name + VeryRough, !- Roughness + 0.025389841, !- Thickness {m} + 0.04323943, !- Conductivity {W/m-K} + 91.30524, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + + Material, + B6 - 4 IN DENSE INSULATION, !- Name + VeryRough, !- Roughness + 0.101559364, !- Thickness {m} + 0.04323943, !- Conductivity {W/m-K} + 91.30524, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + + Material, + C10 - 8 IN HW CONCRETE, !- Name + MediumRough, !- Roughness + 0.2033016, !- Thickness {m} + 1.729577, !- Conductivity {W/m-K} + 2242.585, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material, + C12 - 2 IN HW CONCRETE, !- Name + MediumRough, !- Roughness + 0.050901599, !- Thickness {m} + 1.729577, !- Conductivity {W/m-K} + 2242.585, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material, + C4 - 4 IN COMMON BRICK, !- Name + Rough, !- Roughness + 0.1014984, !- Thickness {m} + 0.7264224, !- Conductivity {W/m-K} + 1922.216, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.76, !- Solar Absorptance + 0.76; !- Visible Absorptance + + Material, + C6 - 8 IN CLAY TILE, !- Name + Smooth, !- Roughness + 0.2033016, !- Thickness {m} + 0.5707605, !- Conductivity {W/m-K} + 1121.292, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.82, !- Solar Absorptance + 0.82; !- Visible Absorptance + + Material, + E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name + Smooth, !- Roughness + 0.01905, !- Thickness {m} + 0.7264224, !- Conductivity {W/m-K} + 1601.846, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.92, !- Solar Absorptance + 0.92; !- Visible Absorptance + + Material, + E2 - 1 / 2 IN SLAG OR STONE, !- Name + Rough, !- Roughness + 0.012710161, !- Thickness {m} + 1.435549, !- Conductivity {W/m-K} + 881.0155, !- Density {kg/m3} + 1673.6, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.55, !- Solar Absorptance + 0.55; !- Visible Absorptance + + Material, + E3 - 3 / 8 IN FELT AND MEMBRANE, !- Name + Rough, !- Roughness + 0.0095402403, !- Thickness {m} + 0.1902535, !- Conductivity {W/m-K} + 1121.292, !- Density {kg/m3} + 1673.6, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.75, !- Solar Absorptance + 0.75; !- Visible Absorptance + + Material:NoMass, + CP02 CARPET PAD, !- Name + VeryRough, !- Roughness + 0.21648, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + WindowMaterial:SimpleGlazingSystem, + Theoretical Glazing, !- Name + 3.0, !- U-Factor {W/m2-K} + 0.5, !- Solar Heat Gain Coefficient + 0.4; !- Visible Transmittance + + Construction, + ExteriorWall, !- Name + A1 - 1 IN STUCCO, !- Outside Layer + C4 - 4 IN COMMON BRICK, !- Layer 2 + B5 - 1 IN DENSE INSULATION, !- Layer 3 + E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 4 + + Construction, + FLOOR SLAB 8 IN, !- Name + C10 - 8 IN HW CONCRETE, !- Outside Layer + CP02 CARPET PAD; !- Layer 2 + + Construction, + ROOF34, !- Name + E2 - 1 / 2 IN SLAG OR STONE, !- Outside Layer + E3 - 3 / 8 IN FELT AND MEMBRANE, !- Layer 2 + B6 - 4 IN DENSE INSULATION, !- Layer 3 + C12 - 2 IN HW CONCRETE; !- Layer 4 + + Construction, + SimpleGlazing, !- Name + Theoretical Glazing; !- Outside Layer + + OutdoorAir:Node, + Model Outdoor Air Node; !- Name + + AirLoopHVAC, + VAV with Reheat, !- Name + , !- Controller List Name + VAV with ReheatAvailability Manager List, !- Availability Manager List Name + Autosize, !- Design Supply Air Flow Rate {m3/s} + VAV with Reheat Supply Branches, !- Branch List Name + , !- Connector List Name + Node 1, !- Supply Side Inlet Node Name + Node 4, !- Demand Side Outlet Node Name + VAV with Reheat Demand Inlet Nodes, !- Demand Side Inlet Node Names + VAV with Reheat Supply Outlet Nodes, !- Supply Side Outlet Node Names + 1; !- Design Return Air Flow Fraction of Supply Air Flow + + NodeList, + VAV with Reheat Supply Outlet Nodes, !- Name + Node 2; !- Node 1 Name + + NodeList, + VAV with Reheat Demand Inlet Nodes, !- Name + Node 3; !- Node 1 Name + + Sizing:System, + VAV with Reheat, !- AirLoop Name + Total, !- Type of Load to Size On + Autosize, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 12.8, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8, !- Central Cooling Design Supply Air Temperature {C} + 40, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + No, !- 100% Outdoor Air in Cooling + No, !- 100% Outdoor Air in Heating + 0.0085, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + 0, !- Cooling Supply Air Flow Rate {m3/s} + 0.0099676501, !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + 1, !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + 3.9475456e-05, !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + 0, !- Heating Supply Air Flow Rate {m3/s} + 0.0099676501, !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + 1, !- Heating Fraction of Autosized Heating Supply Air Flow Rate + 1, !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + 3.1588213e-05, !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + ZoneSum, !- System Outdoor Air Method + 1, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + Autosize, !- Cooling Design Capacity {W} + 234.7, !- Cooling Design Capacity Per Floor Area {W/m2} + 1, !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + Autosize, !- Heating Design Capacity {W} + 157, !- Heating Design Capacity Per Floor Area {W/m2} + 1, !- Fraction of Autosized Heating Design Capacity + OnOff, !- Central Cooling Capacity Control Method + Autosize; !- Occupant Diversity + + AvailabilityManagerAssignmentList, + VAV with ReheatAvailability Manager List, !- Name + AvailabilityManager:Scheduled, !- Availability Manager 1 Object Type + VAV with Reheat Availability Manager; !- Availability Manager 1 Name + + AvailabilityManager:Scheduled, + VAV with Reheat Availability Manager, !- Name + Always On; !- Schedule Name + + BranchList, + VAV with Reheat Supply Branches, !- Name + VAV with Reheat Main Branch; !- Branch 1 Name + + Branch, + VAV with Reheat Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV with Reheat OA System, !- Component 1 Name + Node 1, !- Component 1 Inlet Node Name + Node 8, !- Component 1 Outlet Node Name + CoilSystem:Cooling:DX, !- Component 2 Object Type + VAV Main DX Clg Coil CoilSystem, !- Component 2 Name + Node 8, !- Component 2 Inlet Node Name + Node 11, !- Component 2 Outlet Node Name + Coil:Heating:Electric, !- Component 3 Object Type + Elec Htg Coil, !- Component 3 Name + Node 11, !- Component 3 Inlet Node Name + Node 9, !- Component 3 Outlet Node Name + Fan:SystemModel, !- Component 4 Object Type + VAV with Reheat Supply Fan, !- Component 4 Name + Node 9, !- Component 4 Inlet Node Name + Node 2; !- Component 4 Outlet Node Name + +)IDF"; + + std::string const idf_objects_3 = R"IDF( + + AirLoopHVAC:OutdoorAirSystem, + VAV with Reheat OA System, !- Name + VAV with Reheat OA System Controller List, !- Controller List Name + VAV with Reheat OA System Equipment List; !- Outdoor Air Equipment List Name + + AirLoopHVAC:ControllerList, + VAV with Reheat OA System Controller List, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV with Reheat OA Controller; !- Controller 1 Name + + Controller:OutdoorAir, + VAV with Reheat OA Controller, !- Name + Node 7, !- Relief Air Outlet Node Name + Node 1, !- Return Air Node Name + Node 8, !- Mixed Air Node Name + Node 6, !- Actuator Node Name + 0, !- Minimum Outdoor Air Flow Rate {m3/s} + Autosize, !- Maximum Outdoor Air Flow Rate {m3/s} + NoEconomizer, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + , !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + , !- Minimum Outdoor Air Schedule Name + , !- Minimum Fraction of Outdoor Air Schedule Name + , !- Maximum Fraction of Outdoor Air Schedule Name + , !- Mechanical Ventilation Controller Name + , !- Time of Day Economizer Control Schedule Name + No, !- High Humidity Control + , !- Humidistat Control Zone Name + , !- High Humidity Outdoor Air Flow Ratio + Yes, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio + BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type + + AvailabilityManagerAssignmentList, + VAV with Reheat OA System Availability Manager List, !- Name + AvailabilityManager:Scheduled, !- Availability Manager 1 Object Type + VAV with Reheat OA System Availability Manager; !- Availability Manager 1 Name + + AvailabilityManager:Scheduled, + VAV with Reheat OA System Availability Manager, !- Name + Always On; !- Schedule Name + + OutdoorAir:NodeList, + Node 6; !- Node or NodeList Name 1 + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV with Reheat OA System Equipment List, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + OA Mixer; !- Component 1 Name + + OutdoorAir:Mixer, + OA Mixer, !- Name + Node 8, !- Mixed Air Node Name + Node 6, !- Outdoor Air Stream Node Name + Node 7, !- Relief Air Stream Node Name + Node 1; !- Return Air Stream Node Name + + SetpointManager:MixedAir, + Node 8 OS Default SPM, !- Name + Temperature, !- Control Variable + Node 2, !- Reference Setpoint Node Name + Node 9, !- Fan Inlet Node Name + Node 2, !- Fan Outlet Node Name + Node 8; !- Setpoint Node or NodeList Name + + CoilSystem:Cooling:DX, + VAV Main DX Clg Coil CoilSystem, !- Name + Always On, !- Availability Schedule Name + Node 8, !- DX Cooling Coil System Inlet Node Name + Node 11, !- DX Cooling Coil System Outlet Node Name + Node 11, !- DX Cooling Coil System Sensor Node Name + Coil:Cooling:DX:TwoSpeed,!- Cooling Coil Object Type + VAV Main DX Clg Coil; !- Cooling Coil Name + + Coil:Cooling:DX:TwoSpeed, + VAV Main DX Clg Coil, !- Name + Always On, !- Availability Schedule Name + Autosize, !- High Speed Gross Rated Total Cooling Capacity {W} + 0.75, !- High Speed Rated Sensible Heat Ratio + 3, !- High Speed Gross Rated Cooling COP {W/W} + Autosize, !- High Speed Rated Air Flow Rate {m3/s} + , !- High Speed 2017 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + , !- High Speed 2023 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + 773.3, !- Unit Internal Static Air Pressure {Pa} + Node 8, !- Air Inlet Node Name + Node 11, !- Air Outlet Node Name + Curve Biquadratic, !- Total Cooling Capacity Function of Temperature Curve Name + Curve Quadratic, !- Total Cooling Capacity Function of Flow Fraction Curve Name + Curve Biquadratic, !- Energy Input Ratio Function of Temperature Curve Name + Curve Quadratic, !- Energy Input Ratio Function of Flow Fraction Curve Name + Curve Quadratic, !- Part Load Fraction Correlation Curve Name + Autosize, !- Low Speed Gross Rated Total Cooling Capacity {W} + 0.75, !- Low Speed Gross Rated Sensible Heat Ratio + 3, !- Low Speed Gross Rated Cooling COP {W/W} + Autosize, !- Low Speed Rated Air Flow Rate {m3/s} + , !- Low Speed 2017 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + , !- Low Speed 2023 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + Curve Biquadratic, !- Low Speed Total Cooling Capacity Function of Temperature Curve Name + Curve Biquadratic, !- Low Speed Energy Input Ratio Function of Temperature Curve Name + , !- Condenser Air Inlet Node Name + AirCooled, !- Condenser Type + -25, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C} + 0, !- High Speed Evaporative Condenser Effectiveness {dimensionless} + Autosize, !- High Speed Evaporative Condenser Air Flow Rate {m3/s} + Autosize, !- High Speed Evaporative Condenser Pump Rated Power Consumption {W} + 0, !- Low Speed Evaporative Condenser Effectiveness {dimensionless} + Autosize, !- Low Speed Evaporative Condenser Air Flow Rate {m3/s} + Autosize, !- Low Speed Evaporative Condenser Pump Rated Power Consumption {W} + , !- Supply Water Storage Tank Name + , !- Condensate Collection Water Storage Tank Name + 10, !- Basin Heater Capacity {W/K} + 2; !- Basin Heater Setpoint Temperature {C} + + SetpointManager:MixedAir, + Node 11 OS Default SPM, !- Name + Temperature, !- Control Variable + Node 2, !- Reference Setpoint Node Name + Node 9, !- Fan Inlet Node Name + Node 2, !- Fan Outlet Node Name + Node 11; !- Setpoint Node or NodeList Name + + Curve:Biquadratic, + Curve Biquadratic, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50; !- Maximum Value of y + + Curve:Quadratic, + Curve Quadratic, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.9, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Coil:Heating:Electric, + Elec Htg Coil, !- Name + Always On, !- Availability Schedule Name + 1, !- Efficiency + Autosize, !- Nominal Capacity {W} + Node 11, !- Air Inlet Node Name + Node 9, !- Air Outlet Node Name + Node 9; !- Temperature Setpoint Node Name + + SetpointManager:MixedAir, + Node 9 OS Default SPM, !- Name + Temperature, !- Control Variable + Node 2, !- Reference Setpoint Node Name + Node 9, !- Fan Inlet Node Name + Node 2, !- Fan Outlet Node Name + Node 9; !- Setpoint Node or NodeList Name + + Fan:SystemModel, + VAV with Reheat Supply Fan, !- Name + Always On, !- Availability Schedule Name + Node 9, !- Air Inlet Node Name + Node 2, !- Air Outlet Node Name + Autosize, !- Design Maximum Air Flow Rate {m3/s} + Continuous, !- Speed Control Method + 0.2, !- Electric Power Minimum Flow Rate Fraction + 500, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + Autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + 840, !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.66667, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.524386048, !- Fan Total Efficiency + VAV Fan Curve, !- Electric Power Function of Flow Fraction Curve Name + , !- Night Ventilation Mode Pressure Rise {Pa} + , !- Night Ventilation Mode Flow Fraction + , !- Motor Loss Zone Name + 0, !- Motor Loss Radiative Fraction + General, !- End-Use Subcategory + 1; !- Number of Speeds + + Curve:Quartic, + VAV Fan Curve, !- Name + 0.040759894, !- Coefficient1 Constant + 0.08804497, !- Coefficient2 x + -0.07292612, !- Coefficient3 x**2 + 0.943739823, !- Coefficient4 x**3 + 0, !- Coefficient5 x**4 + 0, !- Minimum Value of x + 1, !- Maximum Value of x + 0, !- Minimum Curve Output + 1, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + SetpointManager:Warmest, + VAV with Reheat SetPoint Manager Warmest, !- Name + Temperature, !- Control Variable + VAV with Reheat, !- HVAC Air Loop Name + 12.2, !- Minimum Setpoint Temperature {C} + 15.6, !- Maximum Setpoint Temperature {C} + MaximumTemperature, !- Strategy + Node 2; !- Setpoint Node or NodeList Name + + AirLoopHVAC:SupplyPath, + VAV with Reheat Node 3 Supply Path, !- Name + Node 3, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + Air Loop HVAC Zone Splitter 1; !- Component 1 Name + + AirLoopHVAC:ZoneSplitter, + Air Loop HVAC Zone Splitter 1, !- Name + Node 3, !- Inlet Node Name + Node 10; !- Outlet 1 Node Name + + AirLoopHVAC:ReturnPath, + VAV with Reheat Return Path, !- Name + Node 4, !- Return Air Path Outlet Node Name + AirLoopHVAC:ZoneMixer, !- Component 1 Object Type + Air Loop HVAC Zone Mixer 1; !- Component 1 Name + + AirLoopHVAC:ZoneMixer, + Air Loop HVAC Zone Mixer 1, !- Name + Node 4, !- Outlet Node Name + Node 29; !- Inlet 1 Node Name + + Site:Location, + Atlanta Hartsfield Intl Ap, !- Name + 33.63, !- Latitude {deg} + -84.43, !- Longitude {deg} + -5, !- Time Zone {hr} + 308; !- Elevation {m} + + SizingPeriod:DesignDay, + Atlanta Hartsfield Intl Ap Ann Clg .4% Condns DB=>MWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 34.4, !- Maximum Dry-Bulb Temperature {C} + 9.5, !- Daily Dry-Bulb Temperature Range {deltaC} + DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.5, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 97679, !- Barometric Pressure {Pa} + 4, !- Wind Speed {m/s} + 300, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAETau, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + 0.556, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + 1.779, !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + ; !- Sky Clearness + + SizingPeriod:DesignDay, + Atlanta Hartsfield Intl Ap Ann Htg 99.6% Condns DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -6.3, !- Maximum Dry-Bulb Temperature {C} + 0, !- Daily Dry-Bulb Temperature Range {deltaC} + DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -6.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 97679, !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 320, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0; !- Sky Clearness + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:VariableDictionary,IDF,Unsorted; + + Output:SQLite, + SimpleAndTabular; !- Option Type + + Output:Table:SummaryReports, + AllSummary, !- Report 1 Name + AllSummaryAndSizingPeriod; !- Report 2 Name +)IDF"; + + std::string const idf_objects = idf_objects_1 + idf_objects_2 + idf_objects_3; + ASSERT_TRUE(process_idf(idf_objects)); + + ManageSimulation(*state); // run the design days + state->dataSQLiteProcedures->sqlite->sqliteCommit(); + auto &finalSysSizing = state->dataSize->FinalSysSizing(1); + EXPECT_TRUE(compare_enums(finalSysSizing.coolingPeakLoad, DataSizing::PeakLoad::TotalCooling)); + + // get the 'Peak Sensible Load with Sizing Factor' + std::string query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'Cooling Peak Conditions'" + " AND ReportName = 'AirLoop Component Load Summary'" + " AND ColumnName = 'Value'" + " AND RowName = 'Peak Sensible Load with Sizing Factor'"); + // check the value from result records + Real64 return_val = execAndReturnFirstDouble(query); + EXPECT_EQ(return_val, 5080.22); +} diff --git a/tst/EnergyPlus/unit/PlantChillers.unit.cc b/tst/EnergyPlus/unit/PlantChillers.unit.cc index 5826d9672d5..fcb24d4c622 100644 --- a/tst/EnergyPlus/unit/PlantChillers.unit.cc +++ b/tst/EnergyPlus/unit/PlantChillers.unit.cc @@ -226,7 +226,7 @@ TEST_F(EnergyPlusFixture, EngineDrivenChiller_Fueltype) EngineDrivenChillerSpecs::getInput(*state); EXPECT_EQ(1, state->dataPlantChillers->NumEngineDrivenChillers); - EXPECT_TRUE(compare_enums(state->dataPlantChillers->EngineDrivenChiller(1).FuelType, Constant::eResource::Diesel)); + EXPECT_TRUE(compare_enums(state->dataPlantChillers->EngineDrivenChiller(1).FuelType, Constant::eFuel::Diesel)); } TEST_F(EnergyPlusFixture, CombustionTurbineChiller_Fueltype) @@ -295,5 +295,5 @@ TEST_F(EnergyPlusFixture, CombustionTurbineChiller_Fueltype) GTChillerSpecs::getInput(*state); EXPECT_EQ(1, state->dataPlantChillers->NumGTChillers); - EXPECT_TRUE(compare_enums(state->dataPlantChillers->GTChiller(1).FuelType, Constant::eResource::NaturalGas)); + EXPECT_TRUE(compare_enums(state->dataPlantChillers->GTChiller(1).FuelType, Constant::eFuel::NaturalGas)); } diff --git a/tst/EnergyPlus/unit/PlantLoopHeatPumpEIR.unit.cc b/tst/EnergyPlus/unit/PlantLoopHeatPumpEIR.unit.cc index c8612959cb4..e6c575e441c 100644 --- a/tst/EnergyPlus/unit/PlantLoopHeatPumpEIR.unit.cc +++ b/tst/EnergyPlus/unit/PlantLoopHeatPumpEIR.unit.cc @@ -2970,23 +2970,19 @@ TEST_F(EnergyPlusFixture, CoolingMetering) Array1D VarTypes(NumVariables); // Variable Types (1=integer, 2=real, 3=meter) Array1D IndexTypes(NumVariables); // Variable Index Types (1=Zone,2=HVAC) Array1D unitsForVar(NumVariables); // units from enum for each variable - std::map ResourceTypes; // ResourceTypes for each variable + Array1D ResourceTypes(NumVariables); // ResourceTypes for each variable Array1D_string EndUses(NumVariables); // EndUses for each variable Array1D_string Groups(NumVariables); // Groups for each variable Array1D_string Names(NumVariables); // Variable Names for each variable - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - GetMeteredVariables( *state, TypeOfComp, NameOfComp, VarIndexes, VarTypes, IndexTypes, unitsForVar, ResourceTypes, EndUses, Groups, Names, NumFound); EXPECT_EQ(2, NumFound); - EXPECT_TRUE(compare_enums(ResourceTypes.at(1), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER + EXPECT_TRUE(compare_enums(ResourceTypes(1), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER EXPECT_EQ(EndUses(1), ""); EXPECT_EQ(Groups(1), "PLANT"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(2), Constant::eResource::Electricity)); // Electric + EXPECT_TRUE(compare_enums(ResourceTypes(2), Constant::eResource::Electricity)); // Electric EXPECT_EQ(EndUses(2), "COOLING"); EXPECT_EQ(Groups(2), "PLANT"); } @@ -3071,23 +3067,19 @@ TEST_F(EnergyPlusFixture, HeatingMetering) Array1D VarTypes(NumVariables); // Variable Types (1=integer, 2=real, 3=meter) Array1D IndexTypes(NumVariables); // Variable Index Types (1=Zone,2=HVAC) Array1D unitsForVar(NumVariables); // units from enum for each variable - std::map ResourceTypes; // ResourceTypes for each variable + Array1D ResourceTypes(NumVariables); // ResourceTypes for each variable Array1D_string EndUses(NumVariables); // EndUses for each variable Array1D_string Groups(NumVariables); // Groups for each variable Array1D_string Names(NumVariables); // Variable Names for each variable - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - GetMeteredVariables( *state, TypeOfComp, NameOfComp, VarIndexes, VarTypes, IndexTypes, unitsForVar, ResourceTypes, EndUses, Groups, Names, NumFound); EXPECT_EQ(2, NumFound); - EXPECT_TRUE(compare_enums(ResourceTypes.at(1), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER + EXPECT_TRUE(compare_enums(ResourceTypes(1), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER EXPECT_EQ(EndUses(1), ""); EXPECT_EQ(Groups(1), "PLANT"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(2), Constant::eResource::Electricity)); // Electric + EXPECT_TRUE(compare_enums(ResourceTypes(2), Constant::eResource::Electricity)); // Electric EXPECT_EQ(EndUses(2), "HEATING"); EXPECT_EQ(Groups(2), "PLANT"); } diff --git a/tst/EnergyPlus/unit/StandardRatings.unit.cc b/tst/EnergyPlus/unit/StandardRatings.unit.cc index aaffda3eee0..fc6e132543b 100644 --- a/tst/EnergyPlus/unit/StandardRatings.unit.cc +++ b/tst/EnergyPlus/unit/StandardRatings.unit.cc @@ -120,7 +120,7 @@ TEST_F(EnergyPlusFixture, SingleSpeedHeatingCoilCurveTest) Coil.DefrostTime = 0.058333; Coil.DefrostCapacity = 1000; Coil.PLRImpact = false; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.RegionNum = 4; Coil.OATempCompressorOn = -5.0; Coil.OATempCompressorOnOffBlank = "true"; @@ -316,7 +316,7 @@ TEST_F(EnergyPlusFixture, SingleSpeedHeatingCoilCurveTest_PositiveCurve) Coil.DefrostTime = 0.058333; Coil.DefrostCapacity = 1000; Coil.PLRImpact = false; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.RegionNum = 4; Coil.OATempCompressorOn = -5.0; Coil.OATempCompressorOnOffBlank = "true"; @@ -503,7 +503,7 @@ TEST_F(EnergyPlusFixture, SingleSpeedHeatingCoilCurveTest2023) Coil.DefrostTime = 0.167; // Coil.DefrostCapacity = 20000; // Coil.PLRImpact = false; - Coil.FuelType = Constant::eResource::Electricity; + Coil.FuelType = Constant::eFuel::Electricity; Coil.RegionNum = 4; // Coil.OATempCompressorOn = -5.0; Coil.OATempCompressorOnOffBlank = "true"; diff --git a/tst/EnergyPlus/unit/SwimmingPool.unit.cc b/tst/EnergyPlus/unit/SwimmingPool.unit.cc index 127926d02c8..8346745f0cf 100644 --- a/tst/EnergyPlus/unit/SwimmingPool.unit.cc +++ b/tst/EnergyPlus/unit/SwimmingPool.unit.cc @@ -55,6 +55,7 @@ #include #include #include +#include #include #include #include @@ -354,3 +355,111 @@ TEST_F(EnergyPlusFixture, SwimmingPool_ErrorCheckSetupPoolSurfaceTest) EXPECT_TRUE(state->dataSurface->SurfIsPool(poolReference.SurfacePtr)); EXPECT_EQ(state->dataSurface->Surface(poolReference.SurfacePtr).Zone, poolReference.ZonePtr); } + +TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) +{ + // Test of UpdatePoolSourceValAvg for Multiple Swimming Pools (Fix for Defect #9797) + // The specification of multiple pools in single input file led to weird results and + // was traced back to improper assignment statements in UpdatePoolSourceValAvg. + + auto &PoolData = state->dataSwimmingPools; + auto &SurfData = state->dataSurface; + auto &HBFanData = state->dataHeatBalFanSys; + + Real64 closeEnough = 0.00001; + PoolData->NumSwimmingPools = 2; + PoolData->Pool.allocate(PoolData->NumSwimmingPools); + auto &Pool1Data = state->dataSwimmingPools->Pool(1); + auto &Pool2Data = state->dataSwimmingPools->Pool(2); + + SurfData->TotSurfaces = 2; + SurfData->Surface.allocate(SurfData->TotSurfaces); + for (int poolNum = 1; poolNum <= PoolData->NumSwimmingPools; ++poolNum) { + PoolData->Pool(poolNum).QPoolSrcAvg.allocate(SurfData->TotSurfaces); + PoolData->Pool(poolNum).HeatTransCoefsAvg.allocate(SurfData->TotSurfaces); + } + + Real64 noResult = -9999.0; + HBFanData->QPoolSurfNumerator.allocate(SurfData->TotSurfaces); + HBFanData->QPoolSurfNumerator = noResult; + HBFanData->PoolHeatTransCoefs.allocate(SurfData->TotSurfaces); + HBFanData->PoolHeatTransCoefs = noResult; + + for (int surfNum = 1; surfNum <= SurfData->TotSurfaces; ++surfNum) { + SurfData->Surface(surfNum).ExtBoundCond = 0; // All connected to exterior + } + + // Test 1: both pools off + Pool1Data.QPoolSrcAvg = 0.0; + Pool1Data.HeatTransCoefsAvg = 0.0; + Pool2Data.QPoolSrcAvg = 0.0; + Pool2Data.HeatTransCoefsAvg = 0.0; + + // Call subroutine + bool poolOnFlag = false; + UpdatePoolSourceValAvg(*state, poolOnFlag); + + // Test data transfer + EXPECT_FALSE(poolOnFlag); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), noResult, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), noResult, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), noResult, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), noResult, closeEnough); + + // Test 2a: pool 1 on, pool 2 off + Pool1Data.QPoolSrcAvg(1) = 100.0; + Pool1Data.HeatTransCoefsAvg(1) = 10.0; + Pool2Data.QPoolSrcAvg(2) = 0.0; + Pool2Data.HeatTransCoefsAvg(2) = 0.0; + HBFanData->QPoolSurfNumerator = noResult; + HBFanData->PoolHeatTransCoefs = noResult; + + // Call subroutine + poolOnFlag = false; + UpdatePoolSourceValAvg(*state, poolOnFlag); + + // Test data transfer + EXPECT_TRUE(poolOnFlag); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), Pool1Data.QPoolSrcAvg(1), closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), noResult, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), Pool1Data.HeatTransCoefsAvg(1), closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), noResult, closeEnough); + + // Test 2b: pool 1 off, pool 2 on + Pool1Data.QPoolSrcAvg(1) = 0.0; + Pool1Data.HeatTransCoefsAvg(1) = 0.0; + Pool2Data.QPoolSrcAvg(2) = 200.0; + Pool2Data.HeatTransCoefsAvg(2) = 20.0; + HBFanData->QPoolSurfNumerator = noResult; + HBFanData->PoolHeatTransCoefs = noResult; + + // Call subroutine + poolOnFlag = false; + UpdatePoolSourceValAvg(*state, poolOnFlag); + + // Test data transfer + EXPECT_TRUE(poolOnFlag); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), noResult, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), Pool2Data.QPoolSrcAvg(2), closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), noResult, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), Pool2Data.HeatTransCoefsAvg(2), closeEnough); + + // Test 3: both pools on + Pool1Data.QPoolSrcAvg(1) = 100.0; + Pool1Data.HeatTransCoefsAvg(1) = 10.0; + Pool2Data.QPoolSrcAvg(2) = 200.0; + Pool2Data.HeatTransCoefsAvg(2) = 20.0; + HBFanData->QPoolSurfNumerator = noResult; + HBFanData->PoolHeatTransCoefs = noResult; + + // Call subroutine + poolOnFlag = false; + UpdatePoolSourceValAvg(*state, poolOnFlag); + + // Test data transfer + EXPECT_TRUE(poolOnFlag); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), Pool1Data.QPoolSrcAvg(1), closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), Pool2Data.QPoolSrcAvg(2), closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), Pool1Data.HeatTransCoefsAvg(1), closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), Pool2Data.HeatTransCoefsAvg(2), closeEnough); +} diff --git a/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc b/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc index 8531362cc7c..c61b88d809a 100644 --- a/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc +++ b/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc @@ -426,15 +426,11 @@ TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_Unittest) Array1D VarTypes(NumVariables); // Variable Types (1=integer, 2=real, 3=meter) Array1D IndexTypes(NumVariables); // Variable Index Types (1=Zone,2=HVAC) Array1D unitsForVar(NumVariables); // units from enum for each variable - std::map ResourceTypes; // ResourceTypes for each variable + Array1D ResourceTypes(NumVariables); // ResourceTypes for each variable Array1D_string EndUses(NumVariables); // EndUses for each variable Array1D_string Groups(NumVariables); // Groups for each variable Array1D_string Names(NumVariables); // Variable Names for each variable - for (int varN = 1; varN <= NumVariables; ++varN) { - ResourceTypes.insert(std::pair(varN, Constant::eResource::Invalid)); - } - GetMeteredVariables( *state, TypeOfComp, NameOfComp, VarIndexes, VarTypes, IndexTypes, unitsForVar, ResourceTypes, EndUses, Groups, Names, NumFound); @@ -443,28 +439,28 @@ TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_Unittest) // Check the meters associated with the ZoneHVAC:HybridUnitaryHVAC outputs EXPECT_EQ(14, NumFound); - EXPECT_TRUE(compare_enums(ResourceTypes.at(1), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER - Cooling + EXPECT_TRUE(compare_enums(ResourceTypes(1), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER - Cooling EXPECT_EQ(EndUses(1), "COOLINGCOILS"); EXPECT_EQ(Groups(1), "HVAC"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(2), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER - Heating + EXPECT_TRUE(compare_enums(ResourceTypes(2), Constant::eResource::EnergyTransfer)); // ENERGYTRANSFER - Heating EXPECT_EQ(EndUses(2), "HEATINGCOILS"); EXPECT_EQ(Groups(2), "HVAC"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(3), Constant::eResource::Electricity)); // ELECTRIC - Cooling Energy + EXPECT_TRUE(compare_enums(ResourceTypes(3), Constant::eResource::Electricity)); // ELECTRIC - Cooling Energy EXPECT_EQ(EndUses(3), "COOLING"); EXPECT_EQ(Groups(3), "HVAC"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(4), Constant::eResource::Electricity)); // ELECTRIC - Fan Energy + EXPECT_TRUE(compare_enums(ResourceTypes(4), Constant::eResource::Electricity)); // ELECTRIC - Fan Energy EXPECT_EQ(EndUses(4), "FANS"); EXPECT_EQ(Groups(4), "HVAC"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(5), + EXPECT_TRUE(compare_enums(ResourceTypes(5), Constant::eResource::NaturalGas)); // NATURALGAS - Secondary Fuel Type - specified in UnitaryHybridUnitTest_DOSA.idf EXPECT_EQ(EndUses(5), "COOLING"); EXPECT_EQ(Groups(5), "HVAC"); EXPECT_TRUE( - compare_enums(ResourceTypes.at(6), + compare_enums(ResourceTypes(6), Constant::eResource::DistrictCooling)); // DISTRICTCOOLING - Third Fuel Type - specified in UnitaryHybridUnitTest_DOSA.idf EXPECT_EQ(EndUses(6), "COOLING"); EXPECT_EQ(Groups(6), "HVAC"); - EXPECT_TRUE(compare_enums(ResourceTypes.at(7), Constant::eResource::Water)); // WATER - Cooling Water Use + EXPECT_TRUE(compare_enums(ResourceTypes(7), Constant::eResource::Water)); // WATER - Cooling Water Use EXPECT_EQ(EndUses(7), "COOLING"); EXPECT_EQ(Groups(7), "HVAC"); diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index e471bb1767e..fe898b5bcc6 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -20933,3 +20933,354 @@ Coil:Heating:Gas:MultiStage, EXPECT_TRUE(state->dataUnitarySystems->HeatingLoad); EXPECT_FALSE(state->dataUnitarySystems->CoolingLoad); } + +TEST_F(EnergyPlusFixture, UnitarySystemModel_CoolReheat) +{ + + bool ErrorsFound(false); + bool FirstHVACIteration(false); + int InletNode(0); // UnitarySystem inlet node number + int OutletNode(0); // UnitarySystem outlet node number + int ControlZoneNum(0); // index to control zone + + std::string_view constexpr idf_objects = R"IDF( +Zone, + EAST ZONE, !- Name + 0, !- Direction of Relative North{ deg } + 0, !- X Origin{ m } + 0, !- Y Origin{ m } + 0, !- Z Origin{ m } + 1, !- Type + 1, !- Multiplier + autocalculate, !- Ceiling Height{ m } + autocalculate; !- Volume{ m3 } + +ZoneHVAC:EquipmentConnections, +EAST ZONE, !- Zone Name + Zone2Equipment, !- Zone Conditioning Equipment List Name + Zone 2 Inlet Node, !- Zone Air Inlet Node or NodeList Name + Zone Exhaust Node, !- Zone Air Exhaust Node or NodeList Name + Zone 2 Node, !- Zone Air Node Name + Zone 2 Outlet Node; !- Zone Return Air Node Name + +ZoneHVAC:EquipmentList, + Zone2Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + AirLoopHVAC:UnitarySystem, !- Zone Equipment 1 Object Type + Unitary System Model, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No - Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction + ; !- Zone Equipment 1 Sequential Heating Fraction + +AirLoopHVAC:UnitarySystem, + Unitary System Model, !- Name + Load, !- Control Type + East Zone, !- Controlling Zone or Thermostat Location + CoolReheat, !- Dehumidification Control Type + FanAndCoilAvailSched, !- Availability Schedule Name + Zone Exhaust Node, !- Air Inlet Node Name + Zone 2 Inlet Node, !- Air Outlet Node Name + Fan:OnOff, !- Supply Fan Object Type + Supply Fan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + ContinuousFanSchedule, !- Supply Air Fan Operating Mode Schedule Name + Coil:Heating:Fuel, !- Heating Coil Object Type + Furnace Heating Coil 1, !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:DX:SingleSpeed, !- Cooling Coil Object Type + Furnace ACDXCoil 1, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- DOAS DX Cooling Coil Leaving Minimum Air Temperature{ C } + LatentOrSensibleLoadControl, !- Latent Load Control + Coil:Heating:Fuel, !- Supplemental Heating Coil Object Type + Humidistat Reheat Coil 1, !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Supply Air Flow Rate Method During Cooling Operation + 1.6, !- Supply Air Flow Rate During Cooling Operation{ m3/s } + , !- Supply Air Flow Rate Per Floor Area During Cooling Operation{ m3/s-m2 } + , !- Fraction of Autosized Design Cooling Supply Air Flow Rate + , !- Design Supply Air Flow Rate Per Unit of Capacity During Cooling Operation{ m3/s-W } + SupplyAirFlowRate, !- Supply air Flow Rate Method During Heating Operation + 1.6, !- Supply Air Flow Rate During Heating Operation{ m3/s } + , !- Supply Air Flow Rate Per Floor Area during Heating Operation{ m3/s-m2 } + , !- Fraction of Autosized Design Heating Supply Air Flow Rate + , !- Design Supply Air Flow Rate Per Unit of Capacity During Heating Operation{ m3/s-W } + SupplyAirFlowRate, !- Supply Air Flow Rate Method When No Cooling or Heating is Required + 1.6, !- Supply Air Flow Rate When No Cooling or Heating is Required{ m3/s } + , !- Supply Air Flow Rate Per Floor Area When No Cooling or Heating is Required{ m3/s-m2 } + , !- Fraction of Autosized Design Cooling Supply Air Flow Rate + , !- Fraction of Autosized Design Heating Supply Air Flow Rate + , !- Design Supply Air Flow Rate Per Unit of Capacity During Cooling Operation{ m3/s-W } + , !- Design Supply Air Flow Rate Per Unit of Capacity During Heating Operation{ m3/s-W } + 80; !- Maximum Supply Air Temperature{ C } + +Fan:OnOff, + Supply Fan 1, !- Name + FanAndCoilAvailSched, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 600.0, !- Pressure Rise{ Pa } + 1.6, !- Maximum Flow Rate{ m3 / s } + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + Zone Exhaust Node, !- Air Inlet Node Name + DX Cooling Coil Air Inlet Node; !- Air Outlet Node Name + +Coil:Cooling:DX:SingleSpeed, + Furnace ACDXCoil 1, !- Name + FanAndCoilAvailSched, !- Availability Schedule Name + 32000, !- Gross Rated Total Cooling Capacity {W} + 0.75, !- Gross Rated Sensible Heat Ratio + 3.0, !- Gross Rated Cooling COP {W/W} + 1.6, !- Rated Air Flow Rate {m3/s} + , !- 2017 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + , !- 2023 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + DX Cooling Coil Air Inlet Node, !- Air Inlet Node Name + Heating Coil Air Inlet Node, !- Air Outlet Node Name + WindACCoolCapFT, !- Total Cooling Capacity Function of Temperature Curve Name + WindACCoolCapFFF, !- Total Cooling Capacity Function of Flow Fraction Curve Name + WindACEIRFT, !- Energy Input Ratio Function of Temperature Curve Name + WindACEIRFFF, !- Energy Input Ratio Function of Flow Fraction Curve Name + WindACPLFFPLR, !- Part Load Fraction Correlation Curve Name + , !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C} + 1000, !- Nominal Time for Condensate Removal to Begin {s} + 0.4, !- Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity {dimensionless} + 4, !- Maximum Cycling Rate {cycles/hr} + 45; !- Latent Capacity Time Constant {s} + +Coil:Heating:Fuel, + Furnace Heating Coil 1, !- Name + FanAndCoilAvailSched, !- Availability Schedule Name + NaturalGas, !- Fuel Type + 0.8, !- Gas Burner Efficiency + 32000, !- Nominal Capacity{ W } + Heating Coil Air Inlet Node, !- Air Inlet Node Name + Reheat Coil Air Inlet Node; !- Air Outlet Node Name + +Coil:Heating:Fuel, + Humidistat Reheat Coil 1, !- Name + FanAndCoilAvailSched, !- Availability Schedule Name + NaturalGas, !- Fuel Type + 0.8, !- Gas Burner Efficiency + 32000, !- Nominal Capacity{ W } + Reheat Coil Air Inlet Node, !- Air Inlet Node Name + Zone 2 Inlet Node; !- Air Outlet Node Name + +ScheduleTypeLimits, + Any Number; !- Name + +Schedule:Compact, + FanAndCoilAvailSched, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00, 1.0; !- Field 3 + +Schedule:Compact, + ContinuousFanSchedule, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00, 1.0; !- Field 3 + +Curve:Quadratic, + WindACCoolCapFFF, !- Name + 0.8, !- Coefficient1 Constant + 0.2, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + +Curve:Quadratic, + WindACEIRFFF, !- Name + 1.1552, !- Coefficient1 Constant + -0.1808, !- Coefficient2 x + 0.0256, !- Coefficient3 x**2 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + +Curve:Quadratic, + WindACPLFFPLR, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +Curve:Biquadratic, + WindACCoolCapFT, !- Name + 0.942587793, !- Coefficient1 Constant + 0.009543347, !- Coefficient2 x + 0.000683770, !- Coefficient3 x**2 + -0.011042676, !- Coefficient4 y + 0.000005249, !- Coefficient5 y**2 + -0.000009720, !- Coefficient6 x*y + 12.77778, !- Minimum Value of x + 23.88889, !- Maximum Value of x + 18.0, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +Curve:Biquadratic, + WindACEIRFT, !- Name + 0.342414409, !- Coefficient1 Constant + 0.034885008, !- Coefficient2 x + -0.000623700, !- Coefficient3 x**2 + 0.004977216, !- Coefficient4 y + 0.000437951, !- Coefficient5 y**2 + -0.000728028, !- Coefficient6 x*y + 12.77778, !- Minimum Value of x + 23.88889, !- Maximum Value of x + 18.0, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +ScheduleTypeLimits, + Percent, !- Name + 0, !- Lower Limit Value + 100, !- Upper Limit Value + Continuous, !- Numeric Type + percent; !- Unit Type + +Schedule:Constant, + Schedule_Constant_Humdifier, !- Name + Percent, !- Schedule Type Limits Name + 0; !- Hourly Value + +Schedule:Constant, + Schedule_Constant_Dehumidifier, !- Name + Percent, !- Schedule Type Limits Name + 50; !- Hourly Value + +)IDF"; + + ASSERT_TRUE(process_idf(idf_objects)); // read idf objects + + HeatBalanceManager::GetZoneData(*state, ErrorsFound); // read zone data + EXPECT_FALSE(ErrorsFound); // expect no errors + + DataZoneEquipment::GetZoneEquipmentData(*state); // read zone equipment configuration and list objects + + state->dataSize->ZoneEqSizing.allocate(1); + state->dataZoneEquip->ZoneEquipList(1).EquipIndex.allocate(1); + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(1) = 1; // initialize equipment index for ZoneHVAC + + state->dataZoneCtrls->NumHumidityControlZones = 1; + state->dataZoneCtrls->HumidityControlZone.allocate(state->dataZoneCtrls->NumHumidityControlZones); + state->dataZoneCtrls->HumidityControlZone(1).ControlName = "East Zone"; + state->dataZoneCtrls->HumidityControlZone(1).ZoneName = "East Zone"; + state->dataZoneCtrls->HumidityControlZone(1).ActualZoneNum = 1; + state->dataZoneCtrls->HumidityControlZone(1).HumidifyingSchedIndex = ScheduleManager::GetScheduleIndex(*state, "Schedule_Constant_Humdifier"); + state->dataZoneCtrls->HumidityControlZone(1).DehumidifyingSchedIndex = + ScheduleManager::GetScheduleIndex(*state, "Schedule_Constant_Dehumidifier"); + + std::string compName = "UNITARY SYSTEM MODEL"; + bool zoneEquipment = true; + int compTypeOfNum = DataHVACGlobals::UnitarySys_AnyCoilType; + FirstHVACIteration = true; + UnitarySystems::UnitarySys::factory(*state, compTypeOfNum, compName, zoneEquipment, 0); + UnitarySystems::UnitarySys *thisSys = &state->dataUnitarySystems->unitarySys[0]; + + state->dataZoneEquip->ZoneEquipInputsFilled = true; + thisSys->getUnitarySystemInputData(*state, compName, zoneEquipment, 0, ErrorsFound); + EXPECT_FALSE(ErrorsFound); + // check model inputs + ASSERT_EQ(1, state->dataUnitarySystems->numUnitarySystems); + EXPECT_EQ(thisSys->UnitType, DataHVACGlobals::cFurnaceTypes(compTypeOfNum)); + EXPECT_TRUE(compare_enums(UnitarySys::UnitarySysCtrlType::Load, thisSys->m_ControlType)); + EXPECT_TRUE(compare_enums(UnitarySys::DehumCtrlType::CoolReheat, thisSys->m_DehumidControlType_Num)); + // set sizing is already done + state->dataGlobal->SysSizingCalc = true; + InletNode = thisSys->AirInNode; + OutletNode = thisSys->AirOutNode; + ControlZoneNum = thisSys->NodeNumOfControlledZone; + // set up unitary system inlet condtions + state->dataLoopNodes->Node(InletNode).Temp = 22.0; + state->dataLoopNodes->Node(InletNode).HumRat = 0.010; + state->dataLoopNodes->Node(InletNode).Enthalpy = + Psychrometrics::PsyHFnTdbW(state->dataLoopNodes->Node(InletNode).Temp, state->dataLoopNodes->Node(InletNode).HumRat); + // initialize other incidentals that are used within the UnitarySystem module during calculations + state->dataSize->CurZoneEqNum = 1; + state->dataZoneEnergyDemand->ZoneSysEnergyDemand.allocate(1); + state->dataZoneEnergyDemand->ZoneSysMoistureDemand.allocate(1); + auto &zoneSysEnergyDemand = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum); + auto &zoneSysMoistureDemand = state->dataZoneEnergyDemand->ZoneSysMoistureDemand(ControlZoneNum); + zoneSysEnergyDemand.RemainingOutputRequired = 0.0; // no heating or cooling load + zoneSysEnergyDemand.RemainingOutputReqToCoolSP = 2000.0; + zoneSysEnergyDemand.RemainingOutputReqToHeatSP = -2000.0; + zoneSysMoistureDemand.RemainingOutputReqToDehumidSP = -0.002; // dehumidification load only + // set zone predictyed loads sequence + zoneSysEnergyDemand.SequencedOutputRequired.allocate(1); + zoneSysEnergyDemand.SequencedOutputRequiredToCoolingSP.allocate(1); + zoneSysEnergyDemand.SequencedOutputRequiredToHeatingSP.allocate(1); + zoneSysMoistureDemand.SequencedOutputRequiredToDehumidSP.allocate(1); + zoneSysEnergyDemand.SequencedOutputRequired(1) = zoneSysEnergyDemand.RemainingOutputRequired; + zoneSysEnergyDemand.SequencedOutputRequiredToCoolingSP(1) = zoneSysEnergyDemand.OutputRequiredToCoolingSP; + zoneSysEnergyDemand.SequencedOutputRequiredToHeatingSP(1) = zoneSysEnergyDemand.OutputRequiredToHeatingSP; + zoneSysMoistureDemand.SequencedOutputRequiredToDehumidSP(1) = zoneSysMoistureDemand.OutputRequiredToDehumidifyingSP; + // set thermostat control type + state->dataHeatBalFanSys->TempControlType.allocate(1); + state->dataHeatBalFanSys->TempControlTypeRpt.allocate(1); + state->dataHeatBalFanSys->TempControlType(1) = DataHVACGlobals::ThermostatType::DualSetPointWithDeadBand; + state->dataZoneEnergyDemand->CurDeadBandOrSetback.allocate(1); + state->dataZoneEnergyDemand->CurDeadBandOrSetback(1) = true; + state->dataGlobal->BeginEnvrnFlag = true; + state->dataScheduleMgr->Schedule(1).CurrentValue = 1.0; + state->dataEnvrn->StdRhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(*state, 101325.0, 20.0, 0.0); // initialize RhoAir + state->dataLoopNodes->Node(InletNode).MassFlowRateMaxAvail = thisSys->m_MaxCoolAirVolFlow * state->dataEnvrn->StdRhoAir; + + // set zone air conditions + state->dataLoopNodes->Node(ControlZoneNum).Temp = 22.0; + state->dataLoopNodes->Node(ControlZoneNum).HumRat = 0.010; + state->dataEnvrn->OutDryBulbTemp = 15.0; + state->dataEnvrn->OutHumRat = 0.1; + state->dataEnvrn->OutBaroPress = 101325.0; + state->dataEnvrn->OutWetBulbTemp = 12.0; + state->dataDXCoils->DXCoil(1).RatedCBF(1) = 0.1; + state->dataDXCoils->DXCoil(1).RatedAirMassFlowRate(1) = state->dataLoopNodes->Node(InletNode).MassFlowRateMaxAvail; + + int CompIndex = 1; + int AirLoopNum = 0; + int constexpr ZoneOAUnitNum = 0; + bool HeatActive = false; + bool CoolActive = true; + bool const ZoneEquipment = true; + Real64 sensOut = 0.0; + Real64 latOut = 0.0; + Real64 constexpr OAUCoilOutTemp = 0.0; + // check cool and heat flags are set false + EXPECT_FALSE(state->dataUnitarySystems->CoolingLoad); + EXPECT_FALSE(state->dataUnitarySystems->HeatingLoad); + EXPECT_DOUBLE_EQ(zoneSysMoistureDemand.RemainingOutputReqToDehumidSP, -0.002); + EXPECT_TRUE(thisSys->m_Humidistat); + Real64 results_moistureLoad = Psychrometrics::PsyHfgAirFnWTdb(0.010, 22.0) * zoneSysMoistureDemand.RemainingOutputReqToDehumidSP; + + // run simulation + thisSys->simulate(*state, + thisSys->Name, + FirstHVACIteration, + AirLoopNum, + CompIndex, + HeatActive, + CoolActive, + ZoneOAUnitNum, + OAUCoilOutTemp, + ZoneEquipment, + sensOut, + latOut); + + // check model output parameters + EXPECT_TRUE(state->dataUnitarySystems->CoolingLoad); + EXPECT_FALSE(state->dataUnitarySystems->HeatingLoad); + EXPECT_DOUBLE_EQ(state->dataLoopNodes->Node(InletNode).MassFlowRate, thisSys->MaxHeatAirMassFlow * thisSys->m_PartLoadFrac); + EXPECT_DOUBLE_EQ(state->dataLoopNodes->Node(InletNode).MassFlowRate, state->dataLoopNodes->Node(OutletNode).MassFlowRate); + EXPECT_NEAR(thisSys->m_LatentLoadMet, results_moistureLoad, 0.25); + EXPECT_NEAR(thisSys->m_MoistureLoadPredicted, results_moistureLoad, 0.25); +} diff --git a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc index d488e22cf67..8dbb33df43d 100644 --- a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc +++ b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc @@ -797,9 +797,9 @@ TEST_F(EnergyPlusFixture, HPWHEnergyBalance) // ValidateFuelType tests for WaterHeater:Stratified WaterThermalTanks::getWaterHeaterStratifiedInput(*state); - EXPECT_TRUE(compare_enums(Tank.FuelType, Constant::eResource::Electricity)); - EXPECT_TRUE(compare_enums(Tank.OffCycParaFuelType, Constant::eResource::Electricity)); - EXPECT_TRUE(compare_enums(Tank.OnCycParaFuelType, Constant::eResource::Electricity)); + EXPECT_TRUE(compare_enums(Tank.FuelType, Constant::eFuel::Electricity)); + EXPECT_TRUE(compare_enums(Tank.OffCycParaFuelType, Constant::eFuel::Electricity)); + EXPECT_TRUE(compare_enums(Tank.OnCycParaFuelType, Constant::eFuel::Electricity)); } TEST_F(EnergyPlusFixture, HPWHSizing) @@ -1530,9 +1530,9 @@ TEST_F(EnergyPlusFixture, HPWHTestSPControl) // ValidateFuelType tests for WaterHeater:Mixed WaterThermalTanks::getWaterHeaterMixedInputs(*state); - EXPECT_TRUE(compare_enums(Tank.FuelType, Constant::eResource::Electricity)); - EXPECT_TRUE(compare_enums(Tank.OffCycParaFuelType, Constant::eResource::Electricity)); - EXPECT_TRUE(compare_enums(Tank.OnCycParaFuelType, Constant::eResource::Electricity)); + EXPECT_TRUE(compare_enums(Tank.FuelType, Constant::eFuel::Electricity)); + EXPECT_TRUE(compare_enums(Tank.OffCycParaFuelType, Constant::eFuel::Electricity)); + EXPECT_TRUE(compare_enums(Tank.OnCycParaFuelType, Constant::eFuel::Electricity)); } TEST_F(EnergyPlusFixture, StratifiedTankUseEnergy) @@ -4222,9 +4222,9 @@ TEST_F(EnergyPlusFixture, HPWH_Both_Pumped_and_Wrapped_InputProcessing) // ValidateFuelType tests for WaterHeater:Mixed WaterThermalTanks::getWaterHeaterMixedInputs(*state); - EXPECT_TRUE(compare_enums(HPWHTank.FuelType, Constant::eResource::Steam)); - EXPECT_TRUE(compare_enums(HPWHTank.OffCycParaFuelType, Constant::eResource::Steam)); - EXPECT_TRUE(compare_enums(HPWHTank.OnCycParaFuelType, Constant::eResource::Steam)); + EXPECT_TRUE(compare_enums(HPWHTank.FuelType, Constant::eFuel::Steam)); + EXPECT_TRUE(compare_enums(HPWHTank.OffCycParaFuelType, Constant::eFuel::Steam)); + EXPECT_TRUE(compare_enums(HPWHTank.OnCycParaFuelType, Constant::eFuel::Steam)); } ++HPWaterHeaterNum; diff --git a/tst/EnergyPlus/unit/ZoneHVACEvaporativeCooler.unit.cc b/tst/EnergyPlus/unit/ZoneHVACEvaporativeCooler.unit.cc index 4d38f4509b7..b0cf64b1a84 100644 --- a/tst/EnergyPlus/unit/ZoneHVACEvaporativeCooler.unit.cc +++ b/tst/EnergyPlus/unit/ZoneHVACEvaporativeCooler.unit.cc @@ -529,3 +529,116 @@ TEST_F(ZoneHVACEvapCoolerUnitTest, IndirectWetCoil_CyclingUnit_Sim) EvaporativeCoolers::CalcZoneEvapUnitOutput(*state, UnitNum, thisZoneEvapCooler.UnitPartLoadRatio, SensOutputProvided, LatOutputProvided); EXPECT_NEAR(HalfOfFullLoad, SensOutputProvided, 0.01); } + +TEST_F(ZoneHVACEvapCoolerUnitTest, RHcontrol) +{ + + int ActualZoneNum = 1; + int ZoneEquipIndex = 1; + Real64 SensOutputProvided(0.0); + Real64 LatOutputProvided(0.0); + + std::string const idf_objects = delimited_string({ + " ZoneHVAC:EvaporativeCoolerUnit,", + " ZoneEvapCooler Unit, !- Name", + " , !- Availability Schedule Name", + " , !- Availability Manager List Name", + " ZoneEvapCool OA Inlet, !- Outdoor Air Inlet Node Name", + " ZoneEvapCool Inlet Node, !- Cooler Outlet Node Name", + " ZoneEvapCool Relief Node, !- Zone Relief Air Node Name", + " Fan:OnOff, !- Supply Air Fan Object Type", + " ZoneEvapCool Supply Fan, !- Supply Air Fan Name", + " 1.0, !- Design Supply Air Flow Rate {m3/s}", + " BlowThrough, !- Fan Placement", + " ZoneTemperatureDeadbandOnOffCycling, !- Cooler Unit Control Method", + " 1.0, !- Throttling Range Temperature Difference {deltaC}", + " 100.0, !- Cooling Load Control Threshold Heat Transfer Rate {W}", + " EvaporativeCooler:Direct:CelDekPad, !- First Evaporative Cooler Object Type", + " Direct CelDekPad EvapCooler, !- First Evaporative Cooler Object Name", + " ,", + " ,", + " ,", + " 40; !- Shut Off Relative Humidity", + + " Fan:OnOff,", + " ZoneEvapCool Supply Fan, !- Name", + " , !- Availability Schedule Name", + " 0.7, !- Fan Total Efficiency", + " 300.0, !- Pressure Rise {Pa}", + " 1.0, !- Maximum Flow Rate {m3/s}", + " 0.9, !- Motor Efficiency", + " 1.0, !- Motor In Airstream Fraction", + " ZoneEvapCool OA Inlet, !- Air Inlet Node Name", + " ZoneEvapCool Fan outlet; !- Air Outlet Node Name", + + " EvaporativeCooler:Direct:CelDekPad,", + " Direct CelDekPad EvapCooler, !- Name", + " , !- Availability Schedule Name", + " 0.6, !- Direct Pad Area {m2}", + " 0.17, !- Direct Pad Depth {m}", + " 55, !- Recirculating Water Pump Power Consumption {W}", + " ZoneEvapCool Fan outlet, !- Air Inlet Node Name", + " ZoneEvapCool Inlet Node, !- Air Outlet Node Name", + " ; !- Control Type", + + " OutdoorAir:Node,", + " Secondary OA inlet node; !- Name", + + }); + ASSERT_TRUE(process_idf(idf_objects)); + + ScheduleManager::ProcessScheduleInput(*state); + state->dataScheduleMgr->ScheduleInputProcessed = true; + + Fans::GetFanInput(*state); + ASSERT_FALSE(ErrorsFound); + EvaporativeCoolers::GetEvapInput(*state); + ASSERT_FALSE(ErrorsFound); + EvaporativeCoolers::GetInputZoneEvaporativeCoolerUnit(*state); + ASSERT_FALSE(ErrorsFound); + + OutAirNodeManager::SetOutAirNodes(*state); + + state->dataGlobal->BeginEnvrnFlag = true; + state->dataZoneEquip->ZoneEquipInputsFilled = true; + + auto &thisZoneEvapCooler(state->dataEvapCoolers->ZoneEvapUnit(UnitNum)); + + state->dataZoneEquip->ZoneEquipConfig(1).ExhaustNode(1) = thisZoneEvapCooler.UnitReliefNodeNum; + + state->dataLoopNodes->Node.redimension(NumOfNodes); + state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).Temp = 24.0; + state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).HumRat = 0.0080; + state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).Enthalpy = + Psychrometrics::PsyHFnTdbW(state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).Temp, + state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).HumRat); + + state->dataLoopNodes->Node(thisZoneEvapCooler.OAInletNodeNum).Temp = state->dataEnvrn->OutDryBulbTemp; + state->dataLoopNodes->Node(thisZoneEvapCooler.OAInletNodeNum).HumRat = state->dataEnvrn->OutHumRat; + state->dataLoopNodes->Node(thisZoneEvapCooler.OAInletNodeNum).Enthalpy = + Psychrometrics::PsyHFnTdbW(state->dataEnvrn->OutDryBulbTemp, state->dataEnvrn->OutHumRat); + + state->dataHeatBalFanSys->ZoneThermostatSetPointHi(1) = 23.0; + state->dataZoneEnergyDemand->ZoneSysEnergyDemand(1).RemainingOutputReqToHeatSP = 0.0; + state->dataZoneEnergyDemand->ZoneSysEnergyDemand(1).RemainingOutputReqToCoolSP = -15000.0; + state->dataZoneEquip->ZoneEquipList(1).EquipName(1) = thisZoneEvapCooler.Name; + + // Evap Cooler Unit Control Method = Zone Temperature Dead Band OnOff Cycling + EvaporativeCoolers::SimZoneEvaporativeCoolerUnit( + *state, thisZoneEvapCooler.Name, ActualZoneNum, SensOutputProvided, LatOutputProvided, ZoneEquipIndex); + Real64 FullSensibleOutput = 0.0; + Real64 FullLatentOutput = 0.0; + Real64 PartLoadRatio = 1.0; + EvaporativeCoolers::CalcZoneEvapUnitOutput(*state, UnitNum, PartLoadRatio, FullSensibleOutput, FullLatentOutput); + + Real64 relativeHumidity = + 100.0 * Psychrometrics::PsyRhFnTdbWPb(*state, + state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).Temp, + state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode).HumRat, + state->dataEnvrn->OutBaroPress, + "CalcZoneEvaporativeCoolerUnit"); + // when relative humidity is higher than the threshold, the evaporative cooler is off + EXPECT_EQ(thisZoneEvapCooler.ShutOffRelativeHumidity, 40); + ASSERT_TRUE(relativeHumidity > thisZoneEvapCooler.ShutOffRelativeHumidity); + EXPECT_FALSE(thisZoneEvapCooler.IsOnThisTimestep); +}