diff --git a/BuildResidentialHPXML/README.md b/BuildResidentialHPXML/README.md
index c322c00d0e..e502a47cfc 100644
--- a/BuildResidentialHPXML/README.md
+++ b/BuildResidentialHPXML/README.md
@@ -101,7 +101,7 @@ Specifies the unavailable period date ranges. Enter a date range like "Dec 15 -
**Schedules: Unavailable Period Window Natural Ventilation Availabilities**
-The availability of the natural ventilation schedule during unavailable periods. Valid choices are: regular schedule, always available, always unavailable. If multiple periods, use a comma-separated list. If not provided, the OS-HPXML default (see HPXML Unavailable Periods) is used.
+The availability of the natural ventilation schedule during unavailable periods. Valid choices are: regular schedule, always available, always unavailable. If multiple periods, use a comma-separated list. If not provided, the OS-HPXML default (see HPXML Unavailable Periods) is used.
- **Name:** ``schedules_unavailable_period_window_natvent_availabilities``
- **Type:** ``String``
@@ -112,7 +112,7 @@ The availability of the natural ventilation schedule during unavailable periods.
**Simulation Control: Timestep**
-Value must be a divisor of 60. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
+Value must be a divisor of 60. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
- **Name:** ``simulation_control_timestep``
- **Type:** ``Integer``
@@ -125,7 +125,7 @@ Value must be a divisor of 60. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
+Enter a date range like 'Jan 1 - Dec 31'. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
- **Name:** ``simulation_control_run_period``
- **Type:** ``String``
@@ -136,7 +136,7 @@ Enter a date range like 'Jan 1 - Dec 31'. If not provided, the OS-HPXML default
**Simulation Control: Run Period Calendar Year**
-This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
+This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
- **Name:** ``simulation_control_run_period_calendar_year``
- **Type:** ``Integer``
@@ -149,7 +149,7 @@ This numeric field should contain the calendar year that determines the start da
**Simulation Control: Daylight Saving Enabled**
-Whether to use daylight saving. If not provided, the OS-HPXML default (see HPXML Building Site) is used.
+Whether to use daylight saving. If not provided, the OS-HPXML default (see HPXML Building Site) is used.
- **Name:** ``simulation_control_daylight_saving_enabled``
- **Type:** ``Boolean``
@@ -160,7 +160,7 @@ Whether to use daylight saving. If not provided, the OS-HPXML default (see HPXML Building Site) is used.
+Enter a date range like 'Mar 15 - Dec 15'. If not provided, the OS-HPXML default (see HPXML Building Site) is used.
- **Name:** ``simulation_control_daylight_saving_period``
- **Type:** ``String``
@@ -171,7 +171,7 @@ Enter a date range like 'Mar 15 - Dec 15'. If not provided, the OS-HPXML default
**Simulation Control: Temperature Capacitance Multiplier**
-Affects the transient calculation of indoor air temperatures. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
+Affects the transient calculation of indoor air temperatures. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
- **Name:** ``simulation_control_temperature_capacitance_multiplier``
- **Type:** ``String``
@@ -182,7 +182,7 @@ Affects the transient calculation of indoor air temperatures. If not provided, t
**Simulation Control: Defrost Model Type**
-Research feature to select the type of defrost model. Use standard for default E+ defrost setting. Use advanced for an improved model that better accounts for load and energy use during defrost; using advanced may impact simulation runtime. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
+Research feature to select the type of defrost model. Use standard for default E+ defrost setting. Use advanced for an improved model that better accounts for load and energy use during defrost; using advanced may impact simulation runtime. If not provided, the OS-HPXML default (see HPXML Simulation Control) is used.
- **Name:** ``simulation_control_defrost_model_type``
- **Type:** ``Choice``
@@ -221,7 +221,7 @@ Research feature to model capacity increment of multi-stage heat pump backup sys
**Site: Type**
-The type of site. If not provided, the OS-HPXML default (see HPXML Site) is used.
+The type of site. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_type``
- **Type:** ``Choice``
@@ -234,7 +234,7 @@ The type of site. If not provided, the OS-HPXML default (see HPXML Site) is used.
+Presence of nearby buildings, trees, obstructions for infiltration model. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_shielding_of_home``
- **Type:** ``Choice``
@@ -247,7 +247,7 @@ Presence of nearby buildings, trees, obstructions for infiltration model. If not
**Site: Soil and Moisture Type**
-Type of soil and moisture. This is used to inform ground conductivity and diffusivity. If not provided, the OS-HPXML default (see HPXML Site) is used.
+Type of soil and moisture. This is used to inform ground conductivity and diffusivity. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_soil_and_moisture_type``
- **Type:** ``Choice``
@@ -310,7 +310,7 @@ City/municipality of the home address.
**Site: State Code**
-State code of the home address. If not provided, the OS-HPXML default (see HPXML Site) is used.
+State code of the home address. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_state_code``
- **Type:** ``Choice``
@@ -334,7 +334,7 @@ Zip code of the home address. Either this or the Weather Station: EnergyPlus Wea
**Site: Time Zone UTC Offset**
-Time zone UTC offset of the home address. Must be between -12 and 14. If not provided, the OS-HPXML default (see HPXML Site) is used.
+Time zone UTC offset of the home address. Must be between -12 and 14. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_time_zone_utc_offset``
- **Type:** ``Double``
@@ -347,7 +347,7 @@ Time zone UTC offset of the home address. Must be between -12 and 14. If not pro
**Site: Elevation**
-Elevation of the home address. If not provided, the OS-HPXML default (see HPXML Site) is used.
+Elevation of the home address. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_elevation``
- **Type:** ``Double``
@@ -360,7 +360,7 @@ Elevation of the home address. If not provided, the OS-HPXML default (see HPXML Site) is used.
+Latitude of the home address. Must be between -90 and 90. Use negative values for southern hemisphere. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_latitude``
- **Type:** ``Double``
@@ -373,7 +373,7 @@ Latitude of the home address. Must be between -90 and 90. Use negative values fo
**Site: Longitude**
-Longitude of the home address. Must be between -180 and 180. Use negative values for the western hemisphere. If not provided, the OS-HPXML default (see HPXML Site) is used.
+Longitude of the home address. Must be between -180 and 180. Use negative values for the western hemisphere. If not provided, the OS-HPXML default (see HPXML Site) is used.
- **Name:** ``site_longitude``
- **Type:** ``Double``
@@ -541,7 +541,7 @@ The number of bedrooms in the unit.
**Geometry: Unit Number of Bathrooms**
-The number of bathrooms in the unit. If not provided, the OS-HPXML default (see HPXML Building Construction) is used.
+The number of bathrooms in the unit. If not provided, the OS-HPXML default (see HPXML Building Construction) is used.
- **Name:** ``geometry_unit_num_bathrooms``
- **Type:** ``Integer``
@@ -593,7 +593,7 @@ Average distance from the floor to the ceiling.
**Geometry: Unit Height Above Grade**
-Describes the above-grade height of apartment units on upper floors or homes above ambient or belly-and-wing foundations. It is defined as the height of the lowest conditioned floor above grade and is used to calculate the wind speed for the infiltration model. If not provided, the OS-HPXML default (see HPXML Building Construction) is used.
+Describes the above-grade height of apartment units on upper floors or homes above ambient or belly-and-wing foundations. It is defined as the height of the lowest conditioned floor above grade and is used to calculate the wind speed for the infiltration model. If not provided, the OS-HPXML default (see HPXML Building Construction) is used.
- **Name:** ``geometry_unit_height_above_grade``
- **Type:** ``Double``
@@ -814,7 +814,7 @@ The distance between the unit and the neighboring building to the right (not inc
**Neighbor: Front Height**
-The height of the neighboring building to the front. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
+The height of the neighboring building to the front. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
- **Name:** ``neighbor_front_height``
- **Type:** ``Double``
@@ -827,7 +827,7 @@ The height of the neighboring building to the front. If not provided, the OS-HPX
**Neighbor: Back Height**
-The height of the neighboring building to the back. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
+The height of the neighboring building to the back. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
- **Name:** ``neighbor_back_height``
- **Type:** ``Double``
@@ -840,7 +840,7 @@ The height of the neighboring building to the back. If not provided, the OS-HPXM
**Neighbor: Left Height**
-The height of the neighboring building to the left. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
+The height of the neighboring building to the left. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
- **Name:** ``neighbor_left_height``
- **Type:** ``Double``
@@ -853,7 +853,7 @@ The height of the neighboring building to the left. If not provided, the OS-HPXM
**Neighbor: Right Height**
-The height of the neighboring building to the right. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
+The height of the neighboring building to the right. If not provided, the OS-HPXML default (see HPXML Neighbor Building) is used.
- **Name:** ``neighbor_right_height``
- **Type:** ``Double``
@@ -905,7 +905,7 @@ The type of floors.
**Foundation Wall: Type**
-The material type of the foundation wall. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
+The material type of the foundation wall. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
- **Name:** ``foundation_wall_type``
- **Type:** ``Choice``
@@ -918,7 +918,7 @@ The material type of the foundation wall. If not provided, the OS-HPXML default
**Foundation Wall: Thickness**
-The thickness of the foundation wall. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
+The thickness of the foundation wall. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
- **Name:** ``foundation_wall_thickness``
- **Type:** ``Double``
@@ -957,7 +957,7 @@ Whether the insulation is on the interior or exterior of the foundation wall. On
**Foundation Wall: Insulation Distance To Top**
-The distance from the top of the foundation wall to the top of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
+The distance from the top of the foundation wall to the top of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
- **Name:** ``foundation_wall_insulation_distance_to_top``
- **Type:** ``Double``
@@ -970,7 +970,7 @@ The distance from the top of the foundation wall to the top of the foundation wa
**Foundation Wall: Insulation Distance To Bottom**
-The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
+The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see HPXML Foundation Walls) is used.
- **Name:** ``foundation_wall_insulation_distance_to_bottom``
- **Type:** ``Double``
@@ -1100,7 +1100,7 @@ Width from slab edge inward of horizontal under-slab insulation. Enter 999 to sp
**Slab: Thickness**
-The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab. If not provided, the OS-HPXML default (see HPXML Slabs) is used.
+The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab. If not provided, the OS-HPXML default (see HPXML Slabs) is used.
- **Name:** ``slab_thickness``
- **Type:** ``Double``
@@ -1113,7 +1113,7 @@ The thickness of the slab. Zero can be entered if there is a dirt floor instead
**Slab: Carpet Fraction**
-Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML default (see HPXML Slabs) is used.
+Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML default (see HPXML Slabs) is used.
- **Name:** ``slab_carpet_fraction``
- **Type:** ``Double``
@@ -1126,7 +1126,7 @@ Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML
**Slab: Carpet R-value**
-R-value of the slab carpet. If not provided, the OS-HPXML default (see HPXML Slabs) is used.
+R-value of the slab carpet. If not provided, the OS-HPXML default (see HPXML Slabs) is used.
- **Name:** ``slab_carpet_r``
- **Type:** ``Double``
@@ -1152,7 +1152,7 @@ Assembly R-value for the ceiling (attic floor).
**Roof: Material Type**
-The material type of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
+The material type of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
- **Name:** ``roof_material_type``
- **Type:** ``Choice``
@@ -1165,7 +1165,7 @@ The material type of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
+The color of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
- **Name:** ``roof_color``
- **Type:** ``Choice``
@@ -1204,7 +1204,7 @@ The location of the radiant barrier in the attic.
**Attic: Radiant Barrier Grade**
-The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
+The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
- **Name:** ``radiant_barrier_grade``
- **Type:** ``Choice``
@@ -1230,7 +1230,7 @@ The type of walls.
**Wall: Siding Type**
-The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.
+The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.
- **Name:** ``wall_siding_type``
- **Type:** ``Choice``
@@ -1243,7 +1243,7 @@ The siding type of the walls. Also applies to rim joists. If not provided, the O
**Wall: Color**
-The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.
+The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.
- **Name:** ``wall_color``
- **Type:** ``Choice``
@@ -1386,7 +1386,7 @@ Ratio of window height to width.
**Windows: Fraction Operable**
-Fraction of windows that are operable. If not provided, the OS-HPXML default (see HPXML Windows) is used.
+Fraction of windows that are operable. If not provided, the OS-HPXML default (see HPXML Windows) is used.
- **Name:** ``window_fraction_operable``
- **Type:** ``Double``
@@ -1399,7 +1399,7 @@ Fraction of windows that are operable. If not provided, the OS-HPXML default (se
**Windows: Natural Ventilation Availability**
-For operable windows, the number of days/week that windows can be opened by occupants for natural ventilation. If not provided, the OS-HPXML default (see HPXML Windows) is used.
+For operable windows, the number of days/week that windows can be opened by occupants for natural ventilation. If not provided, the OS-HPXML default (see HPXML Windows) is used.
- **Name:** ``window_natvent_availability``
- **Type:** ``Integer``
@@ -1436,7 +1436,7 @@ Full-assembly NFRC solar heat gain coefficient.
**Windows: Interior Shading Type**
-Type of window interior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see HPXML Interior Shading) is used.
+Type of window interior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see HPXML Interior Shading) is used.
- **Name:** ``window_interior_shading_type``
- **Type:** ``Choice``
@@ -1449,7 +1449,7 @@ Type of window interior shading. Summer/winter shading coefficients can be provi
**Windows: Winter Interior Shading Coefficient**
-Interior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Interior Shading) is used.
+Interior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Interior Shading) is used.
- **Name:** ``window_interior_shading_winter``
- **Type:** ``Double``
@@ -1462,7 +1462,7 @@ Interior shading coefficient for the winter season, which if provided overrides
**Windows: Summer Interior Shading Coefficient**
-Interior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Interior Shading) is used.
+Interior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Interior Shading) is used.
- **Name:** ``window_interior_shading_summer``
- **Type:** ``Double``
@@ -1475,7 +1475,7 @@ Interior shading coefficient for the summer season, which if provided overrides
**Windows: Exterior Shading Type**
-Type of window exterior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see HPXML Exterior Shading) is used.
+Type of window exterior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see HPXML Exterior Shading) is used.
- **Name:** ``window_exterior_shading_type``
- **Type:** ``Choice``
@@ -1488,7 +1488,7 @@ Type of window exterior shading. Summer/winter shading coefficients can be provi
**Windows: Winter Exterior Shading Coefficient**
-Exterior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Exterior Shading) is used.
+Exterior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Exterior Shading) is used.
- **Name:** ``window_exterior_shading_winter``
- **Type:** ``Double``
@@ -1501,7 +1501,7 @@ Exterior shading coefficient for the winter season, which if provided overrides
**Windows: Summer Exterior Shading Coefficient**
-Exterior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Exterior Shading) is used.
+Exterior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see HPXML Exterior Shading) is used.
- **Name:** ``window_exterior_shading_summer``
- **Type:** ``Double``
@@ -1514,7 +1514,7 @@ Exterior shading coefficient for the summer season, which if provided overrides
**Windows: Shading Summer Season**
-Enter a date range like 'May 1 - Sep 30'. Defines the summer season for purposes of shading coefficients; the rest of the year is assumed to be winter. If not provided, the OS-HPXML default (see HPXML Windows) is used.
+Enter a date range like 'May 1 - Sep 30'. Defines the summer season for purposes of shading coefficients; the rest of the year is assumed to be winter. If not provided, the OS-HPXML default (see HPXML Windows) is used.
- **Name:** ``window_shading_summer_season``
- **Type:** ``String``
@@ -1885,7 +1885,7 @@ Type of air leakage if providing a numeric air leakage value. If 'unit total', r
**Air Leakage: Has Flue or Chimney in Conditioned Space**
-Presence of flue or chimney with combustion air from conditioned space; used for infiltration model. If not provided, the OS-HPXML default (see Flue or Chimney) is used.
+Presence of flue or chimney with combustion air from conditioned space; used for infiltration model. If not provided, the OS-HPXML default (see Flue or Chimney) is used.
- **Name:** ``air_leakage_has_flue_or_chimney_in_conditioned_space``
- **Type:** ``Boolean``
@@ -1935,7 +1935,7 @@ The rated heating efficiency value of the heating system.
**Heating System: Heating Capacity**
-The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default (see HPXML Heating Systems) is used.
+The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default (see HPXML Heating Systems) is used.
- **Name:** ``heating_system_heating_capacity``
- **Type:** ``Double``
@@ -2048,7 +2048,7 @@ The rated efficiency value of the cooling system. Ignored for evaporative cooler
**Cooling System: Cooling Compressor Type**
-The compressor type of the cooling system. Only applies to central air conditioner and mini-split. If not provided, the OS-HPXML default (see Central Air Conditioner, Mini-Split Air Conditioner) is used.
+The compressor type of the cooling system. Only applies to central air conditioner and mini-split. If not provided, the OS-HPXML default (see Central Air Conditioner, Mini-Split Air Conditioner) is used.
- **Name:** ``cooling_system_cooling_compressor_type``
- **Type:** ``Choice``
@@ -2061,7 +2061,7 @@ The compressor type of the cooling system. Only applies to central air condition
**Cooling System: Cooling Sensible Heat Fraction**
-The sensible heat fraction of the cooling system. Ignored for evaporative cooler. If not provided, the OS-HPXML default (see Central Air Conditioner, Room Air Conditioner, Packaged Terminal Air Conditioner, Mini-Split Air Conditioner) is used.
+The sensible heat fraction of the cooling system. Ignored for evaporative cooler. If not provided, the OS-HPXML default (see Central Air Conditioner, Room Air Conditioner, Packaged Terminal Air Conditioner, Mini-Split Air Conditioner) is used.
- **Name:** ``cooling_system_cooling_sensible_heat_fraction``
- **Type:** ``Double``
@@ -2074,7 +2074,7 @@ The sensible heat fraction of the cooling system. Ignored for evaporative cooler
**Cooling System: Cooling Capacity**
-The output cooling capacity of the cooling system. If not provided, the OS-HPXML autosized default (see Central Air Conditioner, Room Air Conditioner, Packaged Terminal Air Conditioner, Evaporative Cooler, Mini-Split Air Conditioner) is used.
+The output cooling capacity of the cooling system. If not provided, the OS-HPXML autosized default (see Central Air Conditioner, Room Air Conditioner, Packaged Terminal Air Conditioner, Evaporative Cooler, Mini-Split Air Conditioner) is used.
- **Name:** ``cooling_system_cooling_capacity``
- **Type:** ``Double``
@@ -2161,7 +2161,7 @@ The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge)
**Cooling System: Crankcase Heater Power Watts**
-Cooling system crankcase heater power consumption in Watts. Applies only to central air conditioner, room air conditioner, packaged terminal air conditioner and mini-split. If not provided, the OS-HPXML default (see Central Air Conditioner, Room Air Conditioner, Packaged Terminal Air Conditioner, Mini-Split Air Conditioner) is used.
+Cooling system crankcase heater power consumption in Watts. Applies only to central air conditioner, room air conditioner, packaged terminal air conditioner and mini-split. If not provided, the OS-HPXML default (see Central Air Conditioner, Room Air Conditioner, Packaged Terminal Air Conditioner, Mini-Split Air Conditioner) is used.
- **Name:** ``cooling_system_crankcase_heater_watts``
- **Type:** ``Double``
@@ -2200,7 +2200,7 @@ The rated heating efficiency value of the heating system integrated into cooling
**Cooling System: Integrated Heating System Heating Capacity**
-The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default (see Room Air Conditioner, Packaged Terminal Air Conditioner) is used. Only used for room air conditioner and packaged terminal air conditioner.
+The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default (see Room Air Conditioner, Packaged Terminal Air Conditioner) is used. Only used for room air conditioner and packaged terminal air conditioner.
- **Name:** ``cooling_system_integrated_heating_system_capacity``
- **Type:** ``Double``
@@ -2287,7 +2287,7 @@ The rated cooling efficiency value of the heat pump.
**Heat Pump: Cooling Compressor Type**
-The compressor type of the heat pump. Only applies to air-to-air and mini-split. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump) is used.
+The compressor type of the heat pump. Only applies to air-to-air and mini-split. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump) is used.
- **Name:** ``heat_pump_cooling_compressor_type``
- **Type:** ``Choice``
@@ -2300,7 +2300,7 @@ The compressor type of the heat pump. Only applies to air-to-air and mini-split.
**Heat Pump: Cooling Sensible Heat Fraction**
-The sensible heat fraction of the heat pump. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle, Ground-to-Air Heat Pump) is used.
+The sensible heat fraction of the heat pump. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle, Ground-to-Air Heat Pump) is used.
- **Name:** ``heat_pump_cooling_sensible_heat_fraction``
- **Type:** ``Double``
@@ -2313,7 +2313,7 @@ The sensible heat fraction of the heat pump. If not provided, the OS-HPXML defau
**Heat Pump: Heating Capacity**
-The output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle, Ground-to-Air Heat Pump) is used.
+The output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle, Ground-to-Air Heat Pump) is used.
- **Name:** ``heat_pump_heating_capacity``
- **Type:** ``Double``
@@ -2350,7 +2350,7 @@ The maximum capacity limit applied to the auto-sizing methodology. If not provid
**Heat Pump: Heating Capacity Retention Fraction**
-The output heating capacity of the heat pump at a user-specified temperature (e.g., 17F or 5F) divided by the above nominal heating capacity. Applies to all heat pump types except ground-to-air. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle) is used.
+The output heating capacity of the heat pump at a user-specified temperature (e.g., 17F or 5F) divided by the above nominal heating capacity. Applies to all heat pump types except ground-to-air. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle) is used.
- **Name:** ``heat_pump_heating_capacity_retention_fraction``
- **Type:** ``Double``
@@ -2376,7 +2376,7 @@ The user-specified temperature (e.g., 17F or 5F) for the above heating capacity
**Heat Pump: Cooling Capacity**
-The output cooling capacity of the heat pump. If not provided, the OS-HPXML autosized default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle, Ground-to-Air Heat Pump) is used.
+The output cooling capacity of the heat pump. If not provided, the OS-HPXML autosized default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle, Ground-to-Air Heat Pump) is used.
- **Name:** ``heat_pump_cooling_capacity``
- **Type:** ``Double``
@@ -2439,7 +2439,7 @@ The cooling load served by the heat pump.
**Heat Pump: Compressor Lockout Temperature**
-The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than ground-to-air. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle) is used.
+The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than ground-to-air. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle) is used.
- **Name:** ``heat_pump_compressor_lockout_temp``
- **Type:** ``Double``
@@ -2513,7 +2513,7 @@ The backup rated efficiency value of the heat pump. Percent for electricity fuel
**Heat Pump: Backup Heating Capacity**
-The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see Backup) is used. Only applies if Backup Type is 'integrated'.
+The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see Backup) is used. Only applies if Backup Type is 'integrated'.
- **Name:** ``heat_pump_backup_heating_capacity``
- **Type:** ``Double``
@@ -2526,7 +2526,7 @@ The backup output heating capacity of the heat pump. If not provided, the OS-HPX
**Heat Pump: Backup Heating Lockout Temperature**
-The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of 'integrated' and 'separate'. If not provided, the OS-HPXML default (see Backup) is used.
+The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of 'integrated' and 'separate'. If not provided, the OS-HPXML default (see Backup) is used.
- **Name:** ``heat_pump_backup_heating_lockout_temp``
- **Type:** ``Double``
@@ -2539,7 +2539,7 @@ The temperature above which the heat pump backup system is disabled. If both thi
**Heat Pump: Sizing Methodology**
-The auto-sizing methodology to use when the heat pump capacity is not provided. If not provided, the OS-HPXML default (see HPXML HVAC Sizing Control) is used.
+The auto-sizing methodology to use when the heat pump capacity is not provided. If not provided, the OS-HPXML default (see HPXML HVAC Sizing Control) is used.
- **Name:** ``heat_pump_sizing_methodology``
- **Type:** ``Choice``
@@ -2552,7 +2552,7 @@ The auto-sizing methodology to use when the heat pump capacity is not provided.
**Heat Pump: Backup Sizing Methodology**
-The auto-sizing methodology to use when the heat pump backup capacity is not provided. If not provided, the OS-HPXML default (see HPXML HVAC Sizing Control) is used.
+The auto-sizing methodology to use when the heat pump backup capacity is not provided. If not provided, the OS-HPXML default (see HPXML HVAC Sizing Control) is used.
- **Name:** ``heat_pump_backup_sizing_methodology``
- **Type:** ``Choice``
@@ -2602,7 +2602,7 @@ The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge)
**Heat Pump: Crankcase Heater Power Watts**
-Heat Pump crankcase heater power consumption in Watts. Applies only to air-to-air, mini-split, packaged terminal heat pump and room air conditioner with reverse cycle. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle) is used.
+Heat Pump crankcase heater power consumption in Watts. Applies only to air-to-air, mini-split, packaged terminal heat pump and room air conditioner with reverse cycle. If not provided, the OS-HPXML default (see Air-to-Air Heat Pump, Mini-Split Heat Pump, Packaged Terminal Heat Pump, Room Air Conditioner w/ Reverse Cycle) is used.
- **Name:** ``heat_pump_crankcase_heater_watts``
- **Type:** ``Double``
@@ -2738,7 +2738,7 @@ Maximum speed efficiency COP values of cooling detailed performance data if avai
**Geothermal Loop: Configuration**
-Configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see Ground-to-Air Heat Pump) is used.
+Configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see Ground-to-Air Heat Pump) is used.
- **Name:** ``geothermal_loop_configuration``
- **Type:** ``Choice``
@@ -2751,7 +2751,7 @@ Configuration of the geothermal loop. Only applies to ground-to-air heat pump ty
**Geothermal Loop: Borefield Configuration**
-Borefield configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
+Borefield configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_borefield_configuration``
- **Type:** ``Choice``
@@ -2764,7 +2764,7 @@ Borefield configuration of the geothermal loop. Only applies to ground-to-air he
**Geothermal Loop: Loop Flow**
-Water flow rate through the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see HPXML Geothermal Loops) is used.
+Water flow rate through the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_loop_flow``
- **Type:** ``Double``
@@ -2777,7 +2777,7 @@ Water flow rate through the geothermal loop. Only applies to ground-to-air heat
**Geothermal Loop: Boreholes Count**
-Number of boreholes. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see HPXML Geothermal Loops) is used.
+Number of boreholes. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_boreholes_count``
- **Type:** ``Integer``
@@ -2790,7 +2790,7 @@ Number of boreholes. Only applies to ground-to-air heat pump type. If not provid
**Geothermal Loop: Boreholes Length**
-Average length of each borehole (vertical). Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see HPXML Geothermal Loops) is used.
+Average length of each borehole (vertical). Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_boreholes_length``
- **Type:** ``Double``
@@ -2803,7 +2803,7 @@ Average length of each borehole (vertical). Only applies to ground-to-air heat p
**Geothermal Loop: Boreholes Spacing**
-Distance between bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
+Distance between bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_boreholes_spacing``
- **Type:** ``Double``
@@ -2816,7 +2816,7 @@ Distance between bores. Only applies to ground-to-air heat pump type. If not pro
**Geothermal Loop: Boreholes Diameter**
-Diameter of bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
+Diameter of bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_boreholes_diameter``
- **Type:** ``Double``
@@ -2829,7 +2829,7 @@ Diameter of bores. Only applies to ground-to-air heat pump type. If not provided
**Geothermal Loop: Grout Type**
-Grout type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
+Grout type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_grout_type``
- **Type:** ``Choice``
@@ -2842,7 +2842,7 @@ Grout type of the geothermal loop. Only applies to ground-to-air heat pump type.
**Geothermal Loop: Pipe Type**
-Pipe type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
+Pipe type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_pipe_type``
- **Type:** ``Choice``
@@ -2855,7 +2855,7 @@ Pipe type of the geothermal loop. Only applies to ground-to-air heat pump type.
**Geothermal Loop: Pipe Diameter**
-Pipe diameter of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
+Pipe diameter of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see HPXML Geothermal Loops) is used.
- **Name:** ``geothermal_loop_pipe_diameter``
- **Type:** ``Choice``
@@ -2907,7 +2907,7 @@ The rated heating efficiency value of the second heating system.
**Heating System 2: Heating Capacity**
-The output heating capacity of the second heating system. If not provided, the OS-HPXML autosized default (see HPXML Heating Systems) is used.
+The output heating capacity of the second heating system. If not provided, the OS-HPXML autosized default (see HPXML Heating Systems) is used.
- **Name:** ``heating_system_2_heating_capacity``
- **Type:** ``Double``
@@ -3001,7 +3001,7 @@ Specify the constant or 24-hour comma-separated weekend cooling setpoint schedul
**HVAC Control: Heating Season Period**
-Enter a date range like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default (see HPXML HVAC Control) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
+Enter a date range like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default (see HPXML HVAC Control) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
- **Name:** ``hvac_control_heating_season_period``
- **Type:** ``String``
@@ -3012,7 +3012,7 @@ Enter a date range like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default
**HVAC Control: Cooling Season Period**
-Enter a date range like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default (see HPXML HVAC Control) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
+Enter a date range like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default (see HPXML HVAC Control) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
- **Name:** ``hvac_control_cooling_season_period``
- **Type:** ``String``
@@ -3023,7 +3023,7 @@ Enter a date range like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default
**HVAC Blower: Fan Efficiency**
-The blower fan efficiency at maximum fan speed. Applies only to split (not packaged) systems (i.e., applies to ducted systems as well as ductless mini-split systems). If not provided, the OS-HPXML default (see HPXML Heating Systems, HPXML Cooling Systems, HPXML Heat Pumps) is used.
+The blower fan efficiency at maximum fan speed. Applies only to split (not packaged) systems (i.e., applies to ducted systems as well as ductless mini-split systems). If not provided, the OS-HPXML default (see HPXML Heating Systems, HPXML Cooling Systems, HPXML Heat Pumps) is used.
- **Name:** ``hvac_blower_fan_watts_per_cfm``
- **Type:** ``Double``
@@ -3060,7 +3060,7 @@ The leakage value to outside for the supply ducts.
**Ducts: Supply Location**
-The location of the supply ducts. If not provided, the OS-HPXML default (see Air Distribution) is used.
+The location of the supply ducts. If not provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_supply_location``
- **Type:** ``Choice``
@@ -3099,7 +3099,7 @@ Whether the supply ducts are buried in, e.g., attic loose-fill insulation. Parti
**Ducts: Supply Surface Area**
-The supply ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
+The supply ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_supply_surface_area``
- **Type:** ``Double``
@@ -3112,7 +3112,7 @@ The supply ducts surface area in the given location. If neither Surface Area nor
**Ducts: Supply Area Fraction**
-The fraction of supply ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
+The fraction of supply ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_supply_surface_area_fraction``
- **Type:** ``Double``
@@ -3125,7 +3125,7 @@ The fraction of supply ducts surface area in the given location. Only used if Su
**Ducts: Supply Fraction Rectangular**
-The fraction of supply ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see Air Distribution) is used.
+The fraction of supply ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_supply_fraction_rectangular``
- **Type:** ``Double``
@@ -3149,7 +3149,7 @@ The leakage value to outside for the return ducts.
**Ducts: Return Location**
-The location of the return ducts. If not provided, the OS-HPXML default (see Air Distribution) is used.
+The location of the return ducts. If not provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_return_location``
- **Type:** ``Choice``
@@ -3188,7 +3188,7 @@ Whether the return ducts are buried in, e.g., attic loose-fill insulation. Parti
**Ducts: Return Surface Area**
-The return ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
+The return ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_return_surface_area``
- **Type:** ``Double``
@@ -3201,7 +3201,7 @@ The return ducts surface area in the given location. If neither Surface Area nor
**Ducts: Return Area Fraction**
-The fraction of return ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
+The fraction of return ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_return_surface_area_fraction``
- **Type:** ``Double``
@@ -3214,7 +3214,7 @@ The fraction of return ducts surface area in the given location. Only used if Su
**Ducts: Number of Return Registers**
-The number of return registers of the ducts. Only used to calculate default return duct surface area. If not provided, the OS-HPXML default (see Air Distribution) is used.
+The number of return registers of the ducts. Only used to calculate default return duct surface area. If not provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_number_of_return_registers``
- **Type:** ``Integer``
@@ -3227,7 +3227,7 @@ The number of return registers of the ducts. Only used to calculate default retu
**Ducts: Return Fraction Rectangular**
-The fraction of return ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see Air Distribution) is used.
+The fraction of return ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see Air Distribution) is used.
- **Name:** ``ducts_return_fraction_rectangular``
- **Type:** ``Double``
@@ -3253,7 +3253,7 @@ The type of the mechanical ventilation. Use 'none' if there is no mechanical ven
**Mechanical Ventilation: Flow Rate**
-The flow rate of the mechanical ventilation. If not provided, the OS-HPXML default (see HPXML Mechanical Ventilation Fans) is used.
+The flow rate of the mechanical ventilation. If not provided, the OS-HPXML default (see HPXML Mechanical Ventilation Fans) is used.
- **Name:** ``mech_vent_flow_rate``
- **Type:** ``Double``
@@ -3266,7 +3266,7 @@ The flow rate of the mechanical ventilation. If not provided, the OS-HPXML defau
**Mechanical Ventilation: Hours In Operation**
-The hours in operation of the mechanical ventilation. If not provided, the OS-HPXML default (see HPXML Mechanical Ventilation Fans) is used.
+The hours in operation of the mechanical ventilation. If not provided, the OS-HPXML default (see HPXML Mechanical Ventilation Fans) is used.
- **Name:** ``mech_vent_hours_in_operation``
- **Type:** ``Double``
@@ -3318,7 +3318,7 @@ The Unadjusted or Adjusted sensible recovery efficiency of the mechanical ventil
**Mechanical Ventilation: Fan Power**
-The fan power of the mechanical ventilation. If not provided, the OS-HPXML default (see HPXML Mechanical Ventilation Fans) is used.
+The fan power of the mechanical ventilation. If not provided, the OS-HPXML default (see HPXML Mechanical Ventilation Fans) is used.
- **Name:** ``mech_vent_fan_power``
- **Type:** ``Double``
@@ -3526,7 +3526,7 @@ The fan power of the second mechanical ventilation.
**Kitchen Fans: Quantity**
-The quantity of the kitchen fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The quantity of the kitchen fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``kitchen_fans_quantity``
- **Type:** ``Integer``
@@ -3539,7 +3539,7 @@ The quantity of the kitchen fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The flow rate of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``kitchen_fans_flow_rate``
- **Type:** ``Double``
@@ -3552,7 +3552,7 @@ The flow rate of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The hours in operation of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``kitchen_fans_hours_in_operation``
- **Type:** ``Double``
@@ -3565,7 +3565,7 @@ The hours in operation of the kitchen fan. If not provided, the OS-HPXML default
**Kitchen Fans: Fan Power**
-The fan power of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The fan power of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``kitchen_fans_power``
- **Type:** ``Double``
@@ -3578,7 +3578,7 @@ The fan power of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The start hour of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``kitchen_fans_start_hour``
- **Type:** ``Integer``
@@ -3591,7 +3591,7 @@ The start hour of the kitchen fan. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The quantity of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``bathroom_fans_quantity``
- **Type:** ``Integer``
@@ -3604,7 +3604,7 @@ The quantity of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The flow rate of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``bathroom_fans_flow_rate``
- **Type:** ``Double``
@@ -3617,7 +3617,7 @@ The flow rate of the bathroom fans. If not provided, the OS-HPXML default (see <
**Bathroom Fans: Hours In Operation**
-The hours in operation of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The hours in operation of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``bathroom_fans_hours_in_operation``
- **Type:** ``Double``
@@ -3630,7 +3630,7 @@ The hours in operation of the bathroom fans. If not provided, the OS-HPXML defau
**Bathroom Fans: Fan Power**
-The fan power of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The fan power of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``bathroom_fans_power``
- **Type:** ``Double``
@@ -3643,7 +3643,7 @@ The fan power of the bathroom fans. If not provided, the OS-HPXML default (see <
**Bathroom Fans: Start Hour**
-The start hour of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
+The start hour of the bathroom fans. If not provided, the OS-HPXML default (see HPXML Local Ventilation Fans) is used.
- **Name:** ``bathroom_fans_start_hour``
- **Type:** ``Integer``
@@ -3667,7 +3667,7 @@ Whether there is a whole house fan.
**Whole House Fan: Flow Rate**
-The flow rate of the whole house fan. If not provided, the OS-HPXML default (see HPXML Whole House Fans) is used.
+The flow rate of the whole house fan. If not provided, the OS-HPXML default (see HPXML Whole House Fans) is used.
- **Name:** ``whole_house_fan_flow_rate``
- **Type:** ``Double``
@@ -3680,7 +3680,7 @@ The flow rate of the whole house fan. If not provided, the OS-HPXML default (see
**Whole House Fan: Fan Power**
-The fan power of the whole house fan. If not provided, the OS-HPXML default (see HPXML Whole House Fans) is used.
+The fan power of the whole house fan. If not provided, the OS-HPXML default (see HPXML Whole House Fans) is used.
- **Name:** ``whole_house_fan_power``
- **Type:** ``Double``
@@ -3719,7 +3719,7 @@ The fuel type of water heater. Ignored for heat pump water heater.
**Water Heater: Location**
-The location of water heater. If not provided, the OS-HPXML default (see HPXML Water Heating Systems) is used.
+The location of water heater. If not provided, the OS-HPXML default (see HPXML Water Heating Systems) is used.
- **Name:** ``water_heater_location``
- **Type:** ``Choice``
@@ -3732,7 +3732,7 @@ The location of water heater. If not provided, the OS-HPXML default (see Conventional Storage, Heat Pump, Combi Boiler w/ Storage) is used.
+Nominal volume of water heater tank. If not provided, the OS-HPXML default (see Conventional Storage, Heat Pump, Combi Boiler w/ Storage) is used.
- **Name:** ``water_heater_tank_volume``
- **Type:** ``Double``
@@ -3769,7 +3769,7 @@ Rated Energy Factor or Uniform Energy Factor. Does not apply to space-heating bo
**Water Heater: Usage Bin**
-The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not instantaneous water heater. Does not apply to space-heating boilers. If not provided, the OS-HPXML default (see Conventional Storage, Heat Pump) is used.
+The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not instantaneous water heater. Does not apply to space-heating boilers. If not provided, the OS-HPXML default (see Conventional Storage, Heat Pump) is used.
- **Name:** ``water_heater_usage_bin``
- **Type:** ``Choice``
@@ -3782,7 +3782,7 @@ The usage of the water heater. Only applies if Efficiency Type is UniformEnergyF
**Water Heater: Recovery Efficiency**
-Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters. If not provided, the OS-HPXML default (see Conventional Storage) is used.
+Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters. If not provided, the OS-HPXML default (see Conventional Storage) is used.
- **Name:** ``water_heater_recovery_efficiency``
- **Type:** ``Double``
@@ -3795,7 +3795,7 @@ Ratio of energy delivered to water heater to the energy content of the fuel cons
**Water Heater: Heating Capacity**
-Heating capacity. Only applies to storage water heater and heat pump water heater (compressor). If not provided, the OS-HPXML default (see Conventional Storage, Heat Pump) is used.
+Heating capacity. Only applies to storage water heater and heat pump water heater (compressor). If not provided, the OS-HPXML default (see Conventional Storage, Heat Pump) is used.
- **Name:** ``water_heater_heating_capacity``
- **Type:** ``Double``
@@ -3808,7 +3808,7 @@ Heating capacity. Only applies to storage water heater and heat pump water heate
**Water Heater: Backup Heating Capacity**
-Backup heating capacity for a heat pump water heater. If not provided, the OS-HPXML default (see Heat Pump) is used.
+Backup heating capacity for a heat pump water heater. If not provided, the OS-HPXML default (see Heat Pump) is used.
- **Name:** ``water_heater_backup_heating_capacity``
- **Type:** ``Double``
@@ -3821,7 +3821,7 @@ Backup heating capacity for a heat pump water heater. If not provided, the OS-HP
**Water Heater: Standby Loss**
-The standby loss of water heater. Only applies to space-heating boilers. If not provided, the OS-HPXML default (see Combi Boiler w/ Storage) is used.
+The standby loss of water heater. Only applies to space-heating boilers. If not provided, the OS-HPXML default (see Combi Boiler w/ Storage) is used.
- **Name:** ``water_heater_standby_loss``
- **Type:** ``Double``
@@ -3847,7 +3847,7 @@ The jacket R-value of water heater. Doesn't apply to instantaneous water heater
**Water Heater: Setpoint Temperature**
-The setpoint temperature of water heater. If not provided, the OS-HPXML default (see HPXML Water Heating Systems) is used.
+The setpoint temperature of water heater. If not provided, the OS-HPXML default (see HPXML Water Heating Systems) is used.
- **Name:** ``water_heater_setpoint_temperature``
- **Type:** ``Double``
@@ -3884,7 +3884,7 @@ Requires that the dwelling unit has a air-to-air, mini-split, or ground-to-air h
**Water Heater: Tank Type**
-Type of tank model to use. The 'stratified' tank generally provide more accurate results, but may significantly increase run time. Applies only to storage water heater. If not provided, the OS-HPXML default (see Conventional Storage) is used.
+Type of tank model to use. The 'stratified' tank generally provide more accurate results, but may significantly increase run time. Applies only to storage water heater. If not provided, the OS-HPXML default (see Conventional Storage) is used.
- **Name:** ``water_heater_tank_model_type``
- **Type:** ``Choice``
@@ -3897,7 +3897,7 @@ Type of tank model to use. The 'stratified' tank generally provide more accurate
**Water Heater: Operating Mode**
-The water heater operating mode. The 'heat pump only' option only uses the heat pump, while 'hybrid/auto' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to heat pump water heater. If not provided, the OS-HPXML default (see Heat Pump) is used.
+The water heater operating mode. The 'heat pump only' option only uses the heat pump, while 'hybrid/auto' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to heat pump water heater. If not provided, the OS-HPXML default (see Heat Pump) is used.
- **Name:** ``water_heater_operating_mode``
- **Type:** ``Choice``
@@ -3923,7 +3923,7 @@ The type of the hot water distribution system.
**Hot Water Distribution: Standard Piping Length**
-If the distribution system is Standard, the length of the piping. If not provided, the OS-HPXML default (see Standard) is used.
+If the distribution system is Standard, the length of the piping. If not provided, the OS-HPXML default (see Standard) is used.
- **Name:** ``hot_water_distribution_standard_piping_length``
- **Type:** ``Double``
@@ -3949,7 +3949,7 @@ If the distribution system is Recirculation, the type of hot water recirculation
**Hot Water Distribution: Recirculation Piping Length**
-If the distribution system is Recirculation, the length of the recirculation piping. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
+If the distribution system is Recirculation, the length of the recirculation piping. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
- **Name:** ``hot_water_distribution_recirc_piping_length``
- **Type:** ``Double``
@@ -3962,7 +3962,7 @@ If the distribution system is Recirculation, the length of the recirculation pip
**Hot Water Distribution: Recirculation Branch Piping Length**
-If the distribution system is Recirculation, the length of the recirculation branch piping. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
+If the distribution system is Recirculation, the length of the recirculation branch piping. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
- **Name:** ``hot_water_distribution_recirc_branch_piping_length``
- **Type:** ``Double``
@@ -3975,7 +3975,7 @@ If the distribution system is Recirculation, the length of the recirculation bra
**Hot Water Distribution: Recirculation Pump Power**
-If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
+If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
- **Name:** ``hot_water_distribution_recirc_pump_power``
- **Type:** ``Double``
@@ -3988,7 +3988,7 @@ If the distribution system is Recirculation, the recirculation pump power. If no
**Hot Water Distribution: Pipe Insulation Nominal R-Value**
-Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default (see HPXML Hot Water Distribution) is used.
+Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default (see HPXML Hot Water Distribution) is used.
- **Name:** ``hot_water_distribution_pipe_r``
- **Type:** ``Double``
@@ -4060,7 +4060,7 @@ Whether the sink fixture is low flow.
**Hot Water Fixtures: Usage Multiplier**
-Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Water Fixtures) is used.
+Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Water Fixtures) is used.
- **Name:** ``water_fixtures_usage_multiplier``
- **Type:** ``Double``
@@ -4071,7 +4071,7 @@ Multiplier on the hot water usage that can reflect, e.g., high/low usage occupan
**General Water Use: Usage Multiplier**
-Multiplier on internal gains from general water use (floor mopping, shower evaporation, water films on showers, tubs & sinks surfaces, plant watering, etc.) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Building Occupancy) is used.
+Multiplier on internal gains from general water use (floor mopping, shower evaporation, water films on showers, tubs & sinks surfaces, plant watering, etc.) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Building Occupancy) is used.
- **Name:** ``general_water_use_usage_multiplier``
- **Type:** ``Double``
@@ -4184,7 +4184,7 @@ The collector rated thermal losses of the solar thermal system.
**Solar Thermal: Storage Volume**
-The storage volume of the solar thermal system. If not provided, the OS-HPXML default (see Detailed Inputs) is used.
+The storage volume of the solar thermal system. If not provided, the OS-HPXML default (see Detailed Inputs) is used.
- **Name:** ``solar_thermal_storage_volume``
- **Type:** ``Double``
@@ -4221,7 +4221,7 @@ Whether there is a PV system present.
**PV System: Module Type**
-Module type of the PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Module type of the PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_module_type``
- **Type:** ``Choice``
@@ -4234,7 +4234,7 @@ Module type of the PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Location of the PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_location``
- **Type:** ``Choice``
@@ -4247,7 +4247,7 @@ Location of the PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Type of tracking for the PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_tracking``
- **Type:** ``Choice``
@@ -4297,7 +4297,7 @@ Maximum power output of the PV system. For a shared system, this is the total bu
**PV System: Inverter Efficiency**
-Inverter efficiency of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Inverter efficiency of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_inverter_efficiency``
- **Type:** ``Double``
@@ -4310,7 +4310,7 @@ Inverter efficiency of the PV system. If there are two PV systems, this will app
**PV System: System Losses Fraction**
-System losses fraction of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+System losses fraction of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_system_losses_fraction``
- **Type:** ``Double``
@@ -4347,7 +4347,7 @@ Whether there is a second PV system present.
**PV System 2: Module Type**
-Module type of the second PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Module type of the second PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_2_module_type``
- **Type:** ``Choice``
@@ -4360,7 +4360,7 @@ Module type of the second PV system. If not provided, the OS-HPXML default (see
**PV System 2: Location**
-Location of the second PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Location of the second PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_2_location``
- **Type:** ``Choice``
@@ -4373,7 +4373,7 @@ Location of the second PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
+Type of tracking for the second PV system. If not provided, the OS-HPXML default (see HPXML Photovoltaics) is used.
- **Name:** ``pv_system_2_tracking``
- **Type:** ``Choice``
@@ -4434,7 +4434,7 @@ Whether there is a lithium ion battery present.
**Battery: Location**
-The space type for the lithium ion battery location. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
+The space type for the lithium ion battery location. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
- **Name:** ``battery_location``
- **Type:** ``Choice``
@@ -4447,7 +4447,7 @@ The space type for the lithium ion battery location. If not provided, the OS-HPX
**Battery: Rated Power Output**
-The rated power output of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
+The rated power output of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
- **Name:** ``battery_power``
- **Type:** ``Double``
@@ -4460,7 +4460,7 @@ The rated power output of the lithium ion battery. If not provided, the OS-HPXML
**Battery: Nominal Capacity**
-The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
+The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
- **Name:** ``battery_capacity``
- **Type:** ``Double``
@@ -4473,7 +4473,7 @@ The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML d
**Battery: Usable Capacity**
-The usable capacity of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
+The usable capacity of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
- **Name:** ``battery_usable_capacity``
- **Type:** ``Double``
@@ -4486,7 +4486,7 @@ The usable capacity of the lithium ion battery. If not provided, the OS-HPXML de
**Battery: Round Trip Efficiency**
-The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
+The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default (see HPXML Batteries) is used.
- **Name:** ``battery_round_trip_efficiency``
- **Type:** ``Double``
@@ -4556,7 +4556,7 @@ Fraction of all lamps (interior) that are light emitting diodes. Lighting not sp
**Lighting: Interior Usage Multiplier**
-Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
+Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
- **Name:** ``lighting_interior_usage_multiplier``
- **Type:** ``Double``
@@ -4600,7 +4600,7 @@ Fraction of all lamps (exterior) that are light emitting diodes. Lighting not sp
**Lighting: Exterior Usage Multiplier**
-Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
+Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
- **Name:** ``lighting_exterior_usage_multiplier``
- **Type:** ``Double``
@@ -4644,7 +4644,7 @@ Fraction of all lamps (garage) that are light emitting diodes. Lighting not spec
**Lighting: Garage Usage Multiplier**
-Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
+Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
- **Name:** ``lighting_garage_usage_multiplier``
- **Type:** ``Double``
@@ -4666,7 +4666,7 @@ Whether there is holiday lighting.
**Holiday Lighting: Daily Consumption**
-The daily energy consumption for holiday lighting (exterior). If not provided, the OS-HPXML default (see HPXML Lighting) is used.
+The daily energy consumption for holiday lighting (exterior). If not provided, the OS-HPXML default (see HPXML Lighting) is used.
- **Name:** ``holiday_lighting_daily_kwh``
- **Type:** ``Double``
@@ -4679,7 +4679,7 @@ The daily energy consumption for holiday lighting (exterior). If not provided, t
**Holiday Lighting: Period**
-Enter a date range like 'Nov 25 - Jan 5'. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
+Enter a date range like 'Nov 25 - Jan 5'. If not provided, the OS-HPXML default (see HPXML Lighting) is used.
- **Name:** ``holiday_lighting_period``
- **Type:** ``String``
@@ -4779,7 +4779,7 @@ Whether there is a clothes washer present.
**Clothes Washer: Location**
-The space type for the clothes washer location. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The space type for the clothes washer location. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_location``
- **Type:** ``Choice``
@@ -4805,7 +4805,7 @@ The efficiency type of the clothes washer.
**Clothes Washer: Efficiency**
-The efficiency of the clothes washer. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The efficiency of the clothes washer. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_efficiency``
- **Type:** ``Double``
@@ -4818,7 +4818,7 @@ The efficiency of the clothes washer. If not provided, the OS-HPXML default (see
**Clothes Washer: Rated Annual Consumption**
-The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_rated_annual_kwh``
- **Type:** ``Double``
@@ -4831,7 +4831,7 @@ The annual energy consumed by the clothes washer, as rated, obtained from the En
**Clothes Washer: Label Electric Rate**
-The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_label_electric_rate``
- **Type:** ``Double``
@@ -4844,7 +4844,7 @@ The annual energy consumed by the clothes washer, as rated, obtained from the En
**Clothes Washer: Label Gas Rate**
-The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_label_gas_rate``
- **Type:** ``Double``
@@ -4857,7 +4857,7 @@ The annual energy consumed by the clothes washer, as rated, obtained from the En
**Clothes Washer: Label Annual Cost with Gas DHW**
-The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_label_annual_gas_cost``
- **Type:** ``Double``
@@ -4870,7 +4870,7 @@ The annual cost of using the system under test conditions. Input is obtained fro
**Clothes Washer: Label Usage**
-The clothes washer loads per week. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+The clothes washer loads per week. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_label_usage``
- **Type:** ``Double``
@@ -4883,7 +4883,7 @@ The clothes washer loads per week. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_capacity``
- **Type:** ``Double``
@@ -4896,7 +4896,7 @@ Volume of the washer drum. Obtained from the EnergyStar website or the manufactu
**Clothes Washer: Usage Multiplier**
-Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
+Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Clothes Washer) is used.
- **Name:** ``clothes_washer_usage_multiplier``
- **Type:** ``Double``
@@ -4918,7 +4918,7 @@ Whether there is a clothes dryer present.
**Clothes Dryer: Location**
-The space type for the clothes dryer location. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
+The space type for the clothes dryer location. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
- **Name:** ``clothes_dryer_location``
- **Type:** ``Choice``
@@ -4957,7 +4957,7 @@ The efficiency type of the clothes dryer.
**Clothes Dryer: Efficiency**
-The efficiency of the clothes dryer. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
+The efficiency of the clothes dryer. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
- **Name:** ``clothes_dryer_efficiency``
- **Type:** ``Double``
@@ -4970,7 +4970,7 @@ The efficiency of the clothes dryer. If not provided, the OS-HPXML default (see
**Clothes Dryer: Vented Flow Rate**
-The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
+The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
- **Name:** ``clothes_dryer_vented_flow_rate``
- **Type:** ``Double``
@@ -4983,7 +4983,7 @@ The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML
**Clothes Dryer: Usage Multiplier**
-Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
+Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Clothes Dryer) is used.
- **Name:** ``clothes_dryer_usage_multiplier``
- **Type:** ``Double``
@@ -5005,7 +5005,7 @@ Whether there is a dishwasher present.
**Dishwasher: Location**
-The space type for the dishwasher location. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The space type for the dishwasher location. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_location``
- **Type:** ``Choice``
@@ -5031,7 +5031,7 @@ The efficiency type of dishwasher.
**Dishwasher: Efficiency**
-The efficiency of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The efficiency of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_efficiency``
- **Type:** ``Double``
@@ -5044,7 +5044,7 @@ The efficiency of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The label electric rate of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_label_electric_rate``
- **Type:** ``Double``
@@ -5057,7 +5057,7 @@ The label electric rate of the dishwasher. If not provided, the OS-HPXML default
**Dishwasher: Label Gas Rate**
-The label gas rate of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The label gas rate of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_label_gas_rate``
- **Type:** ``Double``
@@ -5070,7 +5070,7 @@ The label gas rate of the dishwasher. If not provided, the OS-HPXML default (see
**Dishwasher: Label Annual Gas Cost**
-The label annual gas cost of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The label annual gas cost of the dishwasher. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_label_annual_gas_cost``
- **Type:** ``Double``
@@ -5083,7 +5083,7 @@ The label annual gas cost of the dishwasher. If not provided, the OS-HPXML defau
**Dishwasher: Label Usage**
-The dishwasher loads per week. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The dishwasher loads per week. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_label_usage``
- **Type:** ``Double``
@@ -5096,7 +5096,7 @@ The dishwasher loads per week. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+The number of place settings for the unit. Data obtained from manufacturer's literature. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_place_setting_capacity``
- **Type:** ``Integer``
@@ -5109,7 +5109,7 @@ The number of place settings for the unit. Data obtained from manufacturer's lit
**Dishwasher: Usage Multiplier**
-Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
+Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Dishwasher) is used.
- **Name:** ``dishwasher_usage_multiplier``
- **Type:** ``Double``
@@ -5131,7 +5131,7 @@ Whether there is a refrigerator present.
**Refrigerator: Location**
-The space type for the refrigerator location. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
+The space type for the refrigerator location. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
- **Name:** ``refrigerator_location``
- **Type:** ``Choice``
@@ -5144,7 +5144,7 @@ The space type for the refrigerator location. If not provided, the OS-HPXML defa
**Refrigerator: Rated Annual Consumption**
-The EnergyGuide rated annual energy consumption for a refrigerator. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
+The EnergyGuide rated annual energy consumption for a refrigerator. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
- **Name:** ``refrigerator_rated_annual_kwh``
- **Type:** ``Double``
@@ -5157,7 +5157,7 @@ The EnergyGuide rated annual energy consumption for a refrigerator. If not provi
**Refrigerator: Usage Multiplier**
-Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
+Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
- **Name:** ``refrigerator_usage_multiplier``
- **Type:** ``Double``
@@ -5179,7 +5179,7 @@ Whether there is an extra refrigerator present.
**Extra Refrigerator: Location**
-The space type for the extra refrigerator location. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
+The space type for the extra refrigerator location. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
- **Name:** ``extra_refrigerator_location``
- **Type:** ``Choice``
@@ -5192,7 +5192,7 @@ The space type for the extra refrigerator location. If not provided, the OS-HPXM
**Extra Refrigerator: Rated Annual Consumption**
-The EnergyGuide rated annual energy consumption for an extra refrigerator. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
+The EnergyGuide rated annual energy consumption for an extra refrigerator. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
- **Name:** ``extra_refrigerator_rated_annual_kwh``
- **Type:** ``Double``
@@ -5205,7 +5205,7 @@ The EnergyGuide rated annual energy consumption for an extra refrigerator. If no
**Extra Refrigerator: Usage Multiplier**
-Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
+Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Refrigerators) is used.
- **Name:** ``extra_refrigerator_usage_multiplier``
- **Type:** ``Double``
@@ -5227,7 +5227,7 @@ Whether there is a freezer present.
**Freezer: Location**
-The space type for the freezer location. If not provided, the OS-HPXML default (see HPXML Freezers) is used.
+The space type for the freezer location. If not provided, the OS-HPXML default (see HPXML Freezers) is used.
- **Name:** ``freezer_location``
- **Type:** ``Choice``
@@ -5240,7 +5240,7 @@ The space type for the freezer location. If not provided, the OS-HPXML default (
**Freezer: Rated Annual Consumption**
-The EnergyGuide rated annual energy consumption for a freezer. If not provided, the OS-HPXML default (see HPXML Freezers) is used.
+The EnergyGuide rated annual energy consumption for a freezer. If not provided, the OS-HPXML default (see HPXML Freezers) is used.
- **Name:** ``freezer_rated_annual_kwh``
- **Type:** ``Double``
@@ -5253,7 +5253,7 @@ The EnergyGuide rated annual energy consumption for a freezer. If not provided,
**Freezer: Usage Multiplier**
-Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Freezers) is used.
+Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Freezers) is used.
- **Name:** ``freezer_usage_multiplier``
- **Type:** ``Double``
@@ -5275,7 +5275,7 @@ Whether there is a cooking range/oven present.
**Cooking Range/Oven: Location**
-The space type for the cooking range/oven location. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
+The space type for the cooking range/oven location. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
- **Name:** ``cooking_range_oven_location``
- **Type:** ``Choice``
@@ -5301,7 +5301,7 @@ Type of fuel used by the cooking range/oven.
**Cooking Range/Oven: Is Induction**
-Whether the cooking range is induction. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
+Whether the cooking range is induction. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
- **Name:** ``cooking_range_oven_is_induction``
- **Type:** ``Boolean``
@@ -5312,7 +5312,7 @@ Whether the cooking range is induction. If not provided, the OS-HPXML default (s
**Cooking Range/Oven: Is Convection**
-Whether the oven is convection. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
+Whether the oven is convection. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
- **Name:** ``cooking_range_oven_is_convection``
- **Type:** ``Boolean``
@@ -5323,7 +5323,7 @@ Whether the oven is convection. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
+Multiplier on the cooking range/oven energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Cooking Range/Oven) is used.
- **Name:** ``cooking_range_oven_usage_multiplier``
- **Type:** ``Double``
@@ -5345,7 +5345,7 @@ Whether there are any ceiling fans.
**Ceiling Fan: Label Energy Use**
-The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
+The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
- **Name:** ``ceiling_fan_label_energy_use``
- **Type:** ``Double``
@@ -5358,7 +5358,7 @@ The label average energy use of the ceiling fan(s). If neither Efficiency nor La
**Ceiling Fan: Efficiency**
-The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
+The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
- **Name:** ``ceiling_fan_efficiency``
- **Type:** ``Double``
@@ -5371,7 +5371,7 @@ The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label
**Ceiling Fan: Quantity**
-Total number of ceiling fans. If not provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
+Total number of ceiling fans. If not provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
- **Name:** ``ceiling_fan_quantity``
- **Type:** ``Integer``
@@ -5384,7 +5384,7 @@ Total number of ceiling fans. If not provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
+The cooling setpoint temperature offset during months when the ceiling fans are operating. Only applies if ceiling fan quantity is greater than zero. If not provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
- **Name:** ``ceiling_fan_cooling_setpoint_temp_offset``
- **Type:** ``Double``
@@ -5408,7 +5408,7 @@ Whether there are televisions.
**Misc Plug Loads: Television Annual kWh**
-The annual energy consumption of the television plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+The annual energy consumption of the television plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_television_annual_kwh``
- **Type:** ``Double``
@@ -5421,7 +5421,7 @@ The annual energy consumption of the television plug loads. If not provided, the
**Misc Plug Loads: Television Usage Multiplier**
-Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_television_usage_multiplier``
- **Type:** ``Double``
@@ -5432,7 +5432,7 @@ Multiplier on the television energy usage that can reflect, e.g., high/low usage
**Misc Plug Loads: Other Annual kWh**
-The annual energy consumption of the other residual plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+The annual energy consumption of the other residual plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_other_annual_kwh``
- **Type:** ``Double``
@@ -5445,7 +5445,7 @@ The annual energy consumption of the other residual plug loads. If not provided,
**Misc Plug Loads: Other Sensible Fraction**
-Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_other_frac_sensible``
- **Type:** ``Double``
@@ -5458,7 +5458,7 @@ Fraction of other residual plug loads' internal gains that are sensible. If not
**Misc Plug Loads: Other Latent Fraction**
-Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_other_frac_latent``
- **Type:** ``Double``
@@ -5471,7 +5471,7 @@ Fraction of other residual plug loads' internal gains that are latent. If not pr
**Misc Plug Loads: Other Usage Multiplier**
-Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_other_usage_multiplier``
- **Type:** ``Double``
@@ -5493,7 +5493,7 @@ Whether there is a well pump.
**Misc Plug Loads: Well Pump Annual kWh**
-The annual energy consumption of the well pump plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+The annual energy consumption of the well pump plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_well_pump_annual_kwh``
- **Type:** ``Double``
@@ -5506,7 +5506,7 @@ The annual energy consumption of the well pump plug loads. If not provided, the
**Misc Plug Loads: Well Pump Usage Multiplier**
-Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_well_pump_usage_multiplier``
- **Type:** ``Double``
@@ -5528,7 +5528,7 @@ Whether there is an electric vehicle.
**Misc Plug Loads: Vehicle Annual kWh**
-The annual energy consumption of the electric vehicle plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+The annual energy consumption of the electric vehicle plug loads. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_vehicle_annual_kwh``
- **Type:** ``Double``
@@ -5541,7 +5541,7 @@ The annual energy consumption of the electric vehicle plug loads. If not provide
**Misc Plug Loads: Vehicle Usage Multiplier**
-Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
+Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Plug Loads) is used.
- **Name:** ``misc_plug_loads_vehicle_usage_multiplier``
- **Type:** ``Double``
@@ -5576,7 +5576,7 @@ The fuel type of the fuel loads grill.
**Misc Fuel Loads: Grill Annual therm**
-The annual energy consumption of the fuel loads grill. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+The annual energy consumption of the fuel loads grill. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_grill_annual_therm``
- **Type:** ``Double``
@@ -5589,7 +5589,7 @@ The annual energy consumption of the fuel loads grill. If not provided, the OS-H
**Misc Fuel Loads: Grill Usage Multiplier**
-Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_grill_usage_multiplier``
- **Type:** ``Double``
@@ -5624,7 +5624,7 @@ The fuel type of the fuel loads lighting.
**Misc Fuel Loads: Lighting Annual therm**
-The annual energy consumption of the fuel loads lighting. If not provided, the OS-HPXML default (see HPXML Fuel Loads)is used.
+The annual energy consumption of the fuel loads lighting. If not provided, the OS-HPXML default (see HPXML Fuel Loads)is used.
- **Name:** ``misc_fuel_loads_lighting_annual_therm``
- **Type:** ``Double``
@@ -5637,7 +5637,7 @@ The annual energy consumption of the fuel loads lighting. If not provided, the O
**Misc Fuel Loads: Lighting Usage Multiplier**
-Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_lighting_usage_multiplier``
- **Type:** ``Double``
@@ -5672,7 +5672,7 @@ The fuel type of the fuel loads fireplace.
**Misc Fuel Loads: Fireplace Annual therm**
-The annual energy consumption of the fuel loads fireplace. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+The annual energy consumption of the fuel loads fireplace. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_fireplace_annual_therm``
- **Type:** ``Double``
@@ -5685,7 +5685,7 @@ The annual energy consumption of the fuel loads fireplace. If not provided, the
**Misc Fuel Loads: Fireplace Sensible Fraction**
-Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_fireplace_frac_sensible``
- **Type:** ``Double``
@@ -5698,7 +5698,7 @@ Fraction of fireplace residual fuel loads' internal gains that are sensible. If
**Misc Fuel Loads: Fireplace Latent Fraction**
-Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_fireplace_frac_latent``
- **Type:** ``Double``
@@ -5711,7 +5711,7 @@ Fraction of fireplace residual fuel loads' internal gains that are latent. If no
**Misc Fuel Loads: Fireplace Usage Multiplier**
-Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
+Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see HPXML Fuel Loads) is used.
- **Name:** ``misc_fuel_loads_fireplace_usage_multiplier``
- **Type:** ``Double``
@@ -5733,7 +5733,7 @@ Whether there is a pool.
**Pool: Pump Annual kWh**
-The annual energy consumption of the pool pump. If not provided, the OS-HPXML default (see Pool Pump) is used.
+The annual energy consumption of the pool pump. If not provided, the OS-HPXML default (see Pool Pump) is used.
- **Name:** ``pool_pump_annual_kwh``
- **Type:** ``Double``
@@ -5746,7 +5746,7 @@ The annual energy consumption of the pool pump. If not provided, the OS-HPXML de
**Pool: Pump Usage Multiplier**
-Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Pool Pump) is used.
+Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Pool Pump) is used.
- **Name:** ``pool_pump_usage_multiplier``
- **Type:** ``Double``
@@ -5770,7 +5770,7 @@ The type of pool heater. Use 'none' if there is no pool heater.
**Pool: Heater Annual kWh**
-The annual energy consumption of the electric resistance pool heater. If not provided, the OS-HPXML default (see Pool Heater) is used.
+The annual energy consumption of the electric resistance pool heater. If not provided, the OS-HPXML default (see Pool Heater) is used.
- **Name:** ``pool_heater_annual_kwh``
- **Type:** ``Double``
@@ -5783,7 +5783,7 @@ The annual energy consumption of the electric resistance pool heater. If not pro
**Pool: Heater Annual therm**
-The annual energy consumption of the gas fired pool heater. If not provided, the OS-HPXML default (see Pool Heater) is used.
+The annual energy consumption of the gas fired pool heater. If not provided, the OS-HPXML default (see Pool Heater) is used.
- **Name:** ``pool_heater_annual_therm``
- **Type:** ``Double``
@@ -5796,7 +5796,7 @@ The annual energy consumption of the gas fired pool heater. If not provided, the
**Pool: Heater Usage Multiplier**
-Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Pool Heater) is used.
+Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Pool Heater) is used.
- **Name:** ``pool_heater_usage_multiplier``
- **Type:** ``Double``
@@ -5818,7 +5818,7 @@ Whether there is a permanent spa.
**Permanent Spa: Pump Annual kWh**
-The annual energy consumption of the permanent spa pump. If not provided, the OS-HPXML default (see Permanent Spa Pump) is used.
+The annual energy consumption of the permanent spa pump. If not provided, the OS-HPXML default (see Permanent Spa Pump) is used.
- **Name:** ``permanent_spa_pump_annual_kwh``
- **Type:** ``Double``
@@ -5831,7 +5831,7 @@ The annual energy consumption of the permanent spa pump. If not provided, the OS
**Permanent Spa: Pump Usage Multiplier**
-Multiplier on the permanent spa pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Permanent Spa Pump) is used.
+Multiplier on the permanent spa pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Permanent Spa Pump) is used.
- **Name:** ``permanent_spa_pump_usage_multiplier``
- **Type:** ``Double``
@@ -5855,7 +5855,7 @@ The type of permanent spa heater. Use 'none' if there is no permanent spa heater
**Permanent Spa: Heater Annual kWh**
-The annual energy consumption of the electric resistance permanent spa heater. If not provided, the OS-HPXML default (see Permanent Spa Heater) is used.
+The annual energy consumption of the electric resistance permanent spa heater. If not provided, the OS-HPXML default (see Permanent Spa Heater) is used.
- **Name:** ``permanent_spa_heater_annual_kwh``
- **Type:** ``Double``
@@ -5868,7 +5868,7 @@ The annual energy consumption of the electric resistance permanent spa heater. I
**Permanent Spa: Heater Annual therm**
-The annual energy consumption of the gas fired permanent spa heater. If not provided, the OS-HPXML default (see Permanent Spa Heater) is used.
+The annual energy consumption of the gas fired permanent spa heater. If not provided, the OS-HPXML default (see Permanent Spa Heater) is used.
- **Name:** ``permanent_spa_heater_annual_therm``
- **Type:** ``Double``
@@ -5881,7 +5881,7 @@ The annual energy consumption of the gas fired permanent spa heater. If not prov
**Permanent Spa: Heater Usage Multiplier**
-Multiplier on the permanent spa heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Permanent Spa Heater) is used.
+Multiplier on the permanent spa heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see Permanent Spa Heater) is used.
- **Name:** ``permanent_spa_heater_usage_multiplier``
- **Type:** ``Double``
diff --git a/BuildResidentialHPXML/measure.rb b/BuildResidentialHPXML/measure.rb
index bd3faca4f7..8434564b4d 100644
--- a/BuildResidentialHPXML/measure.rb
+++ b/BuildResidentialHPXML/measure.rb
@@ -4082,13 +4082,14 @@ def self.create_geometry_envelope(runner, model, args)
return false
end
- if args[:geometry_unit_type] == HPXML::ResidentialTypeSFD
+ case args[:geometry_unit_type]
+ when HPXML::ResidentialTypeSFD
success = Geometry.create_single_family_detached(runner: runner, model: model, **args)
- elsif args[:geometry_unit_type] == HPXML::ResidentialTypeSFA
+ when HPXML::ResidentialTypeSFA
success = Geometry.create_single_family_attached(model: model, **args)
- elsif args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
+ when HPXML::ResidentialTypeApartment
success = Geometry.create_apartment(model: model, **args)
- elsif args[:geometry_unit_type] == HPXML::ResidentialTypeManufactured
+ when HPXML::ResidentialTypeManufactured
success = Geometry.create_single_family_detached(runner: runner, model: model, **args)
end
return false if not success
@@ -4613,7 +4614,8 @@ def self.set_site(hpxml_bldg, args)
adb_walls = [args[:geometry_unit_left_wall_is_adiabatic], args[:geometry_unit_right_wall_is_adiabatic], args[:geometry_unit_front_wall_is_adiabatic], args[:geometry_unit_back_wall_is_adiabatic]]
n_walls_attached = adb_walls.count(true)
- if [HPXML::ResidentialTypeSFA, HPXML::ResidentialTypeApartment].include? args[:geometry_unit_type]
+ case args[:geometry_unit_type]
+ when HPXML::ResidentialTypeSFA, HPXML::ResidentialTypeApartment
if n_walls_attached == 3
hpxml_bldg.site.surroundings = HPXML::SurroundingsThreeSides
elsif n_walls_attached == 2
@@ -4636,7 +4638,7 @@ def self.set_site(hpxml_bldg, args)
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsNoAboveOrBelow
end
end
- elsif [HPXML::ResidentialTypeSFD, HPXML::ResidentialTypeManufactured].include? args[:geometry_unit_type]
+ when HPXML::ResidentialTypeSFD, HPXML::ResidentialTypeManufactured
hpxml_bldg.site.surroundings = HPXML::SurroundingsStandAlone
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsNoAboveOrBelow
end
@@ -5178,9 +5180,10 @@ def self.set_floors(hpxml_bldg, args, sorted_surfaces)
@surface_ids[surface.name.to_s] = hpxml_bldg.floors[-1].id
if hpxml_bldg.floors[-1].is_thermal_boundary
- if [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? exterior_adjacent_to
+ case exterior_adjacent_to
+ when HPXML::LocationAtticUnvented, HPXML::LocationAtticVented
hpxml_bldg.floors[-1].insulation_assembly_r_value = args[:ceiling_assembly_r]
- elsif [HPXML::LocationGarage].include? exterior_adjacent_to
+ when HPXML::LocationGarage
hpxml_bldg.floors[-1].insulation_assembly_r_value = args[:floor_over_garage_assembly_r]
else
hpxml_bldg.floors[-1].insulation_assembly_r_value = args[:floor_over_foundation_assembly_r]
@@ -5229,11 +5232,7 @@ def self.set_slabs(hpxml_bldg, model, args, sorted_surfaces)
exposed_perimeter = Geometry.calculate_exposed_perimeter(model: model, ground_floor_surfaces: [surface], has_foundation_walls: has_foundation_walls).round(1)
next if exposed_perimeter == 0
- if [HPXML::LocationCrawlspaceVented,
- HPXML::LocationCrawlspaceUnvented,
- HPXML::LocationCrawlspaceConditioned,
- HPXML::LocationBasementUnconditioned,
- HPXML::LocationBasementConditioned].include? interior_adjacent_to
+ if has_foundation_walls
exposed_perimeter -= Geometry.get_unexposed_garage_perimeter(**args)
end
@@ -5627,13 +5626,14 @@ def self.set_cooling_systems(hpxml_bldg, args)
end
if cooling_system_type != HPXML::HVACTypeEvaporativeCooler
- if args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsSEER
+ case args[:cooling_system_cooling_efficiency_type]
+ when HPXML::UnitsSEER
cooling_efficiency_seer = args[:cooling_system_cooling_efficiency]
- elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsSEER2
+ when HPXML::UnitsSEER2
cooling_efficiency_seer2 = args[:cooling_system_cooling_efficiency]
- elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsEER
+ when HPXML::UnitsEER
cooling_efficiency_eer = args[:cooling_system_cooling_efficiency]
- elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsCEER
+ when HPXML::UnitsCEER
cooling_efficiency_ceer = args[:cooling_system_cooling_efficiency]
end
end
@@ -5695,10 +5695,11 @@ def self.set_cooling_systems(hpxml_bldg, args)
cooling_perf_data_data_points.each do |cooling_perf_data_data_point|
outdoor_temperature, min_speed_cap_or_frac, max_speed_cap_or_frac, min_speed_cop, max_speed_cop = cooling_perf_data_data_point
- if hvac_perf_data_capacity_type == 'Absolute capacities'
+ case hvac_perf_data_capacity_type
+ when 'Absolute capacities'
min_speed_capacity = Float(min_speed_cap_or_frac)
max_speed_capacity = Float(max_speed_cap_or_frac)
- elsif hvac_perf_data_capacity_type == 'Normalized capacity fractions'
+ when 'Normalized capacity fractions'
min_speed_capacity_fraction_of_nominal = Float(min_speed_cap_or_frac)
max_speed_capacity_fraction_of_nominal = Float(max_speed_cap_or_frac)
end
@@ -5737,7 +5738,8 @@ def self.set_heat_pumps(hpxml_bldg, args)
return if heat_pump_type == Constants::None
- if args[:heat_pump_backup_type] == HPXML::HeatPumpBackupTypeIntegrated
+ case args[:heat_pump_backup_type]
+ when HPXML::HeatPumpBackupTypeIntegrated
backup_type = args[:heat_pump_backup_type]
backup_heating_fuel = args[:heat_pump_backup_fuel]
backup_heating_capacity = args[:heat_pump_backup_heating_capacity]
@@ -5747,7 +5749,7 @@ def self.set_heat_pumps(hpxml_bldg, args)
else
backup_heating_efficiency_afue = args[:heat_pump_backup_heating_efficiency]
end
- elsif args[:heat_pump_backup_type] == HPXML::HeatPumpBackupTypeSeparate
+ when HPXML::HeatPumpBackupTypeSeparate
if args[:heating_system_2_type] == Constants::None
fail "Heat pump backup type specified as '#{args[:heat_pump_backup_type]}' but no heating system provided."
end
@@ -5769,19 +5771,21 @@ def self.set_heat_pumps(hpxml_bldg, args)
compressor_type = args[:heat_pump_cooling_compressor_type]
end
- if args[:heat_pump_heating_efficiency_type] == HPXML::UnitsHSPF
+ case args[:heat_pump_heating_efficiency_type]
+ when HPXML::UnitsHSPF
heating_efficiency_hspf = args[:heat_pump_heating_efficiency]
- elsif args[:heat_pump_heating_efficiency_type] == HPXML::UnitsHSPF2
+ when HPXML::UnitsHSPF2
heating_efficiency_hspf2 = args[:heat_pump_heating_efficiency]
- elsif args[:heat_pump_heating_efficiency_type] == HPXML::UnitsCOP
+ when HPXML::UnitsCOP
heating_efficiency_cop = args[:heat_pump_heating_efficiency]
end
- if args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsSEER
+ case args[:heat_pump_cooling_efficiency_type]
+ when HPXML::UnitsSEER
cooling_efficiency_seer = args[:heat_pump_cooling_efficiency]
- elsif args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsSEER2
+ when HPXML::UnitsSEER2
cooling_efficiency_seer2 = args[:heat_pump_cooling_efficiency]
- elsif args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsEER
+ when HPXML::UnitsEER
cooling_efficiency_eer = args[:heat_pump_cooling_efficiency]
end
@@ -5848,10 +5852,11 @@ def self.set_heat_pumps(hpxml_bldg, args)
heating_perf_data_data_points.each do |heating_perf_data_data_point|
outdoor_temperature, min_speed_cap_or_frac, max_speed_cap_or_frac, min_speed_cop, max_speed_cop = heating_perf_data_data_point
- if hvac_perf_data_capacity_type == 'Absolute capacities'
+ case hvac_perf_data_capacity_type
+ when 'Absolute capacities'
min_speed_capacity = Float(min_speed_cap_or_frac)
max_speed_capacity = Float(max_speed_cap_or_frac)
- elsif hvac_perf_data_capacity_type == 'Normalized capacity fractions'
+ when 'Normalized capacity fractions'
min_speed_capacity_fraction_of_nominal = Float(min_speed_cap_or_frac)
max_speed_capacity_fraction_of_nominal = Float(max_speed_cap_or_frac)
end
@@ -5885,10 +5890,11 @@ def self.set_heat_pumps(hpxml_bldg, args)
cooling_perf_data_data_points.each do |cooling_perf_data_data_point|
outdoor_temperature, min_speed_cap_or_frac, max_speed_cap_or_frac, min_speed_cop, max_speed_cop = cooling_perf_data_data_point
- if hvac_perf_data_capacity_type == 'Absolute capacities'
+ case hvac_perf_data_capacity_type
+ when 'Absolute capacities'
min_speed_capacity = Float(min_speed_cap_or_frac)
max_speed_capacity = Float(max_speed_cap_or_frac)
- elsif hvac_perf_data_capacity_type == 'Normalized capacity fractions'
+ when 'Normalized capacity fractions'
min_speed_capacity_fraction_of_nominal = Float(min_speed_cap_or_frac)
max_speed_capacity_fraction_of_nominal = Float(max_speed_cap_or_frac)
end
@@ -5926,12 +5932,12 @@ def self.set_geothermal_loop(hpxml_bldg, args)
return if args[:geothermal_loop_configuration].nil? || args[:geothermal_loop_configuration] == Constants::None
if not args[:geothermal_loop_pipe_diameter].nil?
- pipe_diameter = args[:geothermal_loop_pipe_diameter]
- if pipe_diameter == '3/4" pipe'
+ case args[:geothermal_loop_pipe_diameter]
+ when '3/4" pipe'
pipe_diameter = 0.75
- elsif pipe_diameter == '1" pipe'
+ when '1" pipe'
pipe_diameter = 1.0
- elsif pipe_diameter == '1-1/4" pipe'
+ when '1-1/4" pipe'
pipe_diameter = 1.25
end
end
@@ -6018,24 +6024,25 @@ def self.set_hvac_distribution(hpxml_bldg, args)
# AirDistribution?
air_distribution_systems = []
hpxml_bldg.heating_systems.each do |heating_system|
- if [HPXML::HVACTypeFurnace].include?(heating_system.heating_system_type)
+ case heating_system.heating_system_type
+ when HPXML::HVACTypeFurnace
air_distribution_systems << heating_system
end
end
hpxml_bldg.cooling_systems.each do |cooling_system|
- if [HPXML::HVACTypeCentralAirConditioner].include?(cooling_system.cooling_system_type)
- air_distribution_systems << cooling_system
- elsif [HPXML::HVACTypeEvaporativeCooler, HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system.cooling_system_type) && args[:cooling_system_is_ducted]
+ case cooling_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner
air_distribution_systems << cooling_system
+ when HPXML::HVACTypeEvaporativeCooler, HPXML::HVACTypeMiniSplitAirConditioner
+ air_distribution_systems << cooling_system if args[:cooling_system_is_ducted]
end
end
hpxml_bldg.heat_pumps.each do |heat_pump|
- if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
+ case heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir
air_distribution_systems << heat_pump
- elsif [HPXML::HVACTypeHeatPumpMiniSplit].include?(heat_pump.heat_pump_type)
- if args[:heat_pump_is_ducted]
- air_distribution_systems << heat_pump if args[:heat_pump_is_ducted]
- end
+ when HPXML::HVACTypeHeatPumpMiniSplit
+ air_distribution_systems << heat_pump if args[:heat_pump_is_ducted]
end
end
@@ -6089,7 +6096,8 @@ def self.set_hvac_distribution(hpxml_bldg, args)
def self.set_hvac_blower(hpxml_bldg, args)
# Blower fan W/cfm
hpxml_bldg.hvac_systems.each do |hvac_system|
- next unless (!hvac_system.distribution_system.nil? && hvac_system.distribution_system.distribution_system_type == HPXML::HVACDistributionTypeAir) || (hvac_system.is_a?(HPXML::HeatPump) && [HPXML::HVACTypeHeatPumpMiniSplit].include?(hvac_system.heat_pump_type))
+ next unless (!hvac_system.distribution_system.nil? && hvac_system.distribution_system.distribution_system_type == HPXML::HVACDistributionTypeAir) ||
+ (hvac_system.is_a?(HPXML::HeatPump) && hvac_system.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit)
fan_watts_per_cfm = args[:hvac_blower_fan_watts_per_cfm]
@@ -6098,11 +6106,14 @@ def self.set_hvac_blower(hpxml_bldg, args)
hvac_system.fan_watts_per_cfm = fan_watts_per_cfm
end
elsif hvac_system.is_a?(HPXML::CoolingSystem)
- if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner].include?(hvac_system.cooling_system_type)
+ if [HPXML::HVACTypeCentralAirConditioner,
+ HPXML::HVACTypeMiniSplitAirConditioner].include?(hvac_system.cooling_system_type)
hvac_system.fan_watts_per_cfm = fan_watts_per_cfm
end
elsif hvac_system.is_a?(HPXML::HeatPump)
- if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit, HPXML::HVACTypeHeatPumpGroundToAir].include?(hvac_system.heat_pump_type)
+ if [HPXML::HVACTypeHeatPumpAirToAir,
+ HPXML::HVACTypeHeatPumpMiniSplit,
+ HPXML::HVACTypeHeatPumpGroundToAir].include?(hvac_system.heat_pump_type)
hvac_system.fan_watts_per_cfm = fan_watts_per_cfm
end
end
@@ -6138,21 +6149,23 @@ def self.get_location(location, foundation_type, attic_type)
return if location.nil?
if location == HPXML::LocationCrawlspace
- if foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
+ case foundation_type
+ when HPXML::FoundationTypeCrawlspaceUnvented
return HPXML::LocationCrawlspaceUnvented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceVented
+ when HPXML::FoundationTypeCrawlspaceVented
return HPXML::LocationCrawlspaceVented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
+ when HPXML::FoundationTypeCrawlspaceConditioned
return HPXML::LocationCrawlspaceConditioned
else
fail "Specified '#{location}' but foundation type is '#{foundation_type}'."
end
elsif location == HPXML::LocationAttic
- if attic_type == HPXML::AtticTypeUnvented
+ case attic_type
+ when HPXML::AtticTypeUnvented
return HPXML::LocationAtticUnvented
- elsif attic_type == HPXML::AtticTypeVented
+ when HPXML::AtticTypeVented
return HPXML::LocationAtticVented
- elsif attic_type == HPXML::AtticTypeConditioned
+ when HPXML::AtticTypeConditioned
return HPXML::LocationConditionedSpace
else
fail "Specified '#{location}' but attic type is '#{attic_type}'."
@@ -6393,24 +6406,26 @@ def self.set_hvac_control(hpxml, hpxml_bldg, args, weather)
def self.set_ventilation_fans(hpxml_bldg, args)
if args[:mech_vent_fan_type] != Constants::None
- if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type])
- if args[:mech_vent_recovery_efficiency_type] == 'Unadjusted'
+ distribution_system_idref = nil
+
+ case args[:mech_vent_fan_type]
+ when HPXML::MechVentTypeERV
+ case args[:mech_vent_recovery_efficiency_type]
+ when 'Unadjusted'
total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency]
sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency]
- elsif args[:mech_vent_recovery_efficiency_type] == 'Adjusted'
+ when 'Adjusted'
total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency]
sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency]
end
- elsif [HPXML::MechVentTypeHRV].include?(args[:mech_vent_fan_type])
- if args[:mech_vent_recovery_efficiency_type] == 'Unadjusted'
+ when HPXML::MechVentTypeHRV
+ case args[:mech_vent_recovery_efficiency_type]
+ when 'Unadjusted'
sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency]
- elsif args[:mech_vent_recovery_efficiency_type] == 'Adjusted'
+ when 'Adjusted'
sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency]
end
- end
-
- distribution_system_idref = nil
- if args[:mech_vent_fan_type] == HPXML::MechVentTypeCFIS
+ when HPXML::MechVentTypeCFIS
hpxml_bldg.hvac_distributions.each do |hvac_distribution|
next unless hvac_distribution.distribution_system_type == HPXML::HVACDistributionTypeAir
next if hvac_distribution.air_type != HPXML::AirTypeRegularVelocity
@@ -6474,19 +6489,21 @@ def self.set_ventilation_fans(hpxml_bldg, args)
if args[:mech_vent_2_fan_type] != Constants::None
- if [HPXML::MechVentTypeERV].include?(args[:mech_vent_2_fan_type])
-
- if args[:mech_vent_2_recovery_efficiency_type] == 'Unadjusted'
+ case args[:mech_vent_2_fan_type]
+ when HPXML::MechVentTypeERV
+ case args[:mech_vent_2_recovery_efficiency_type]
+ when 'Unadjusted'
total_recovery_efficiency = args[:mech_vent_2_total_recovery_efficiency]
sensible_recovery_efficiency = args[:mech_vent_2_sensible_recovery_efficiency]
- elsif args[:mech_vent_2_recovery_efficiency_type] == 'Adjusted'
+ when 'Adjusted'
total_recovery_efficiency_adjusted = args[:mech_vent_2_total_recovery_efficiency]
sensible_recovery_efficiency_adjusted = args[:mech_vent_2_sensible_recovery_efficiency]
end
- elsif [HPXML::MechVentTypeHRV].include?(args[:mech_vent_2_fan_type])
- if args[:mech_vent_2_recovery_efficiency_type] == 'Unadjusted'
+ when HPXML::MechVentTypeHRV
+ case args[:mech_vent_2_recovery_efficiency_type]
+ when 'Unadjusted'
sensible_recovery_efficiency = args[:mech_vent_2_sensible_recovery_efficiency]
- elsif args[:mech_vent_2_recovery_efficiency_type] == 'Adjusted'
+ when 'Adjusted'
sensible_recovery_efficiency_adjusted = args[:mech_vent_2_sensible_recovery_efficiency]
end
end
@@ -6560,9 +6577,10 @@ def self.set_water_heating_systems(hpxml_bldg, args)
location = get_location(args[:water_heater_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
if not [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? water_heater_type
- if args[:water_heater_efficiency_type] == 'EnergyFactor'
+ case args[:water_heater_efficiency_type]
+ when 'EnergyFactor'
energy_factor = args[:water_heater_efficiency]
- elsif args[:water_heater_efficiency_type] == 'UniformEnergyFactor'
+ when 'UniformEnergyFactor'
uniform_energy_factor = args[:water_heater_efficiency]
if water_heater_type != HPXML::WaterHeaterTypeTankless
usage_bin = args[:water_heater_usage_bin]
@@ -6955,9 +6973,10 @@ def self.set_lighting(hpxml_bldg, args)
def self.set_dehumidifier(hpxml_bldg, args)
return if args[:dehumidifier_type] == Constants::None
- if args[:dehumidifier_efficiency_type] == 'EnergyFactor'
+ case args[:dehumidifier_efficiency_type]
+ when 'EnergyFactor'
energy_factor = args[:dehumidifier_efficiency]
- elsif args[:dehumidifier_efficiency_type] == 'IntegratedEnergyFactor'
+ when 'IntegratedEnergyFactor'
integrated_energy_factor = args[:dehumidifier_efficiency]
end
@@ -6987,9 +7006,10 @@ def self.set_clothes_washer(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
return unless args[:clothes_washer_present]
- if args[:clothes_washer_efficiency_type] == 'ModifiedEnergyFactor'
+ case args[:clothes_washer_efficiency_type]
+ when 'ModifiedEnergyFactor'
modified_energy_factor = args[:clothes_washer_efficiency]
- elsif args[:clothes_washer_efficiency_type] == 'IntegratedModifiedEnergyFactor'
+ when 'IntegratedModifiedEnergyFactor'
integrated_modified_energy_factor = args[:clothes_washer_efficiency]
end
@@ -7021,9 +7041,10 @@ def self.set_clothes_dryer(hpxml_bldg, args)
return unless args[:clothes_washer_present]
return unless args[:clothes_dryer_present]
- if args[:clothes_dryer_efficiency_type] == 'EnergyFactor'
+ case args[:clothes_dryer_efficiency_type]
+ when 'EnergyFactor'
energy_factor = args[:clothes_dryer_efficiency]
- elsif args[:clothes_dryer_efficiency_type] == 'CombinedEnergyFactor'
+ when 'CombinedEnergyFactor'
combined_energy_factor = args[:clothes_dryer_efficiency]
end
@@ -7061,9 +7082,10 @@ def self.set_dishwasher(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
return unless args[:dishwasher_present]
- if args[:dishwasher_efficiency_type] == 'RatedAnnualkWh'
+ case args[:dishwasher_efficiency_type]
+ when 'RatedAnnualkWh'
rated_annual_kwh = args[:dishwasher_efficiency]
- elsif args[:dishwasher_efficiency_type] == 'EnergyFactor'
+ when 'EnergyFactor'
energy_factor = args[:dishwasher_efficiency]
end
@@ -7305,14 +7327,13 @@ def self.set_misc_fuel_loads_fireplace(hpxml_bldg, args)
def self.set_pool(hpxml_bldg, args)
return unless args[:pool_present]
- if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(args[:pool_heater_type])
+ case args[:pool_heater_type]
+ when HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump
if not args[:pool_heater_annual_kwh].nil?
heater_load_units = HPXML::UnitsKwhPerYear
heater_load_value = args[:pool_heater_annual_kwh]
end
- end
-
- if [HPXML::HeaterTypeGas].include?(args[:pool_heater_type])
+ when HPXML::HeaterTypeGas
if not args[:pool_heater_annual_therm].nil?
heater_load_units = HPXML::UnitsThermPerYear
heater_load_value = args[:pool_heater_annual_therm]
@@ -7343,14 +7364,13 @@ def self.set_pool(hpxml_bldg, args)
def self.set_permanent_spa(hpxml_bldg, args)
return unless args[:permanent_spa_present]
- if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(args[:permanent_spa_heater_type])
+ case args[:permanent_spa_heater_type]
+ when HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump
if not args[:permanent_spa_heater_annual_kwh].nil?
heater_load_units = HPXML::UnitsKwhPerYear
heater_load_value = args[:permanent_spa_heater_annual_kwh]
end
- end
-
- if [HPXML::HeaterTypeGas].include?(args[:permanent_spa_heater_type])
+ when HPXML::HeaterTypeGas
if not args[:permanent_spa_heater_annual_therm].nil?
heater_load_units = HPXML::UnitsThermPerYear
heater_load_value = args[:permanent_spa_heater_annual_therm]
diff --git a/BuildResidentialHPXML/measure.xml b/BuildResidentialHPXML/measure.xml
index ea8c333d99..24436bc6d0 100644
--- a/BuildResidentialHPXML/measure.xml
+++ b/BuildResidentialHPXML/measure.xml
@@ -3,8 +3,8 @@
3.1
build_residential_hpxml
a13a8983-2b01-4930-8af2-42030b6e4233
- 6024806a-1640-4c75-86e4-d00329c89e3a
- 2024-10-31T22:43:54Z
+ a612d193-7718-4eb6-a3b5-4c30a1e658df
+ 2024-11-27T02:33:38Z
2C38F48B
BuildResidentialHPXML
HPXML Builder
@@ -88,7 +88,7 @@
schedules_unavailable_period_window_natvent_availabilities
Schedules: Unavailable Period Window Natural Ventilation Availabilities
- The availability of the natural ventilation schedule during unavailable periods. Valid choices are: regular schedule, always available, always unavailable. If multiple periods, use a comma-separated list. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-unavailable-periods'>HPXML Unavailable Periods</a>) is used.
+ The availability of the natural ventilation schedule during unavailable periods. Valid choices are: regular schedule, always available, always unavailable. If multiple periods, use a comma-separated list. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-unavailable-periods'>HPXML Unavailable Periods</a>) is used.
String
false
false
@@ -96,7 +96,7 @@
simulation_control_timestep
Simulation Control: Timestep
- Value must be a divisor of 60. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
+ Value must be a divisor of 60. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
Integer
min
false
@@ -105,7 +105,7 @@
simulation_control_run_period
Simulation Control: Run Period
- Enter a date range like 'Jan 1 - Dec 31'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
+ Enter a date range like 'Jan 1 - Dec 31'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
String
false
false
@@ -113,7 +113,7 @@
simulation_control_run_period_calendar_year
Simulation Control: Run Period Calendar Year
- This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
+ This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
Integer
year
false
@@ -122,7 +122,7 @@
simulation_control_daylight_saving_enabled
Simulation Control: Daylight Saving Enabled
- Whether to use daylight saving. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-building-site'>HPXML Building Site</a>) is used.
+ Whether to use daylight saving. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-building-site'>HPXML Building Site</a>) is used.
Boolean
false
false
@@ -140,7 +140,7 @@
simulation_control_daylight_saving_period
Simulation Control: Daylight Saving Period
- Enter a date range like 'Mar 15 - Dec 15'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-building-site'>HPXML Building Site</a>) is used.
+ Enter a date range like 'Mar 15 - Dec 15'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-building-site'>HPXML Building Site</a>) is used.
String
false
false
@@ -148,7 +148,7 @@
simulation_control_temperature_capacitance_multiplier
Simulation Control: Temperature Capacitance Multiplier
- Affects the transient calculation of indoor air temperatures. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
+ Affects the transient calculation of indoor air temperatures. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
String
false
false
@@ -156,7 +156,7 @@
simulation_control_defrost_model_type
Simulation Control: Defrost Model Type
- Research feature to select the type of defrost model. Use standard for default E+ defrost setting. Use advanced for an improved model that better accounts for load and energy use during defrost; using advanced may impact simulation runtime. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
+ Research feature to select the type of defrost model. Use standard for default E+ defrost setting. Use advanced for an improved model that better accounts for load and energy use during defrost; using advanced may impact simulation runtime. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.
Choice
false
false
@@ -192,7 +192,7 @@
site_type
Site: Type
- The type of site. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ The type of site. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Choice
false
false
@@ -214,7 +214,7 @@
site_shielding_of_home
Site: Shielding of Home
- Presence of nearby buildings, trees, obstructions for infiltration model. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ Presence of nearby buildings, trees, obstructions for infiltration model. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Choice
false
false
@@ -236,7 +236,7 @@
site_soil_and_moisture_type
Site: Soil and Moisture Type
- Type of soil and moisture. This is used to inform ground conductivity and diffusivity. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ Type of soil and moisture. This is used to inform ground conductivity and diffusivity. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Choice
false
false
@@ -434,7 +434,7 @@
site_state_code
Site: State Code
- State code of the home address. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ State code of the home address. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Choice
false
false
@@ -656,7 +656,7 @@
site_time_zone_utc_offset
Site: Time Zone UTC Offset
- Time zone UTC offset of the home address. Must be between -12 and 14. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ Time zone UTC offset of the home address. Must be between -12 and 14. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Double
hr
false
@@ -665,7 +665,7 @@
site_elevation
Site: Elevation
- Elevation of the home address. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ Elevation of the home address. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Double
ft
false
@@ -674,7 +674,7 @@
site_latitude
Site: Latitude
- Latitude of the home address. Must be between -90 and 90. Use negative values for southern hemisphere. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ Latitude of the home address. Must be between -90 and 90. Use negative values for southern hemisphere. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Double
deg
false
@@ -683,7 +683,7 @@
site_longitude
Site: Longitude
- Longitude of the home address. Must be between -180 and 180. Use negative values for the western hemisphere. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
+ Longitude of the home address. Must be between -180 and 180. Use negative values for the western hemisphere. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-site'>HPXML Site</a>) is used.
Double
deg
false
@@ -869,7 +869,7 @@
geometry_unit_num_bathrooms
Geometry: Unit Number of Bathrooms
- The number of bathrooms in the unit. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-building-construction'>HPXML Building Construction</a>) is used.
+ The number of bathrooms in the unit. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-building-construction'>HPXML Building Construction</a>) is used.
Integer
#
false
@@ -906,7 +906,7 @@
geometry_unit_height_above_grade
Geometry: Unit Height Above Grade
- Describes the above-grade height of apartment units on upper floors or homes above ambient or belly-and-wing foundations. It is defined as the height of the lowest conditioned floor above grade and is used to calculate the wind speed for the infiltration model. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-building-construction'>HPXML Building Construction</a>) is used.
+ Describes the above-grade height of apartment units on upper floors or homes above ambient or belly-and-wing foundations. It is defined as the height of the lowest conditioned floor above grade and is used to calculate the wind speed for the infiltration model. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-building-construction'>HPXML Building Construction</a>) is used.
Double
ft
false
@@ -1203,7 +1203,7 @@
neighbor_front_height
Neighbor: Front Height
- The height of the neighboring building to the front. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
+ The height of the neighboring building to the front. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
Double
ft
false
@@ -1212,7 +1212,7 @@
neighbor_back_height
Neighbor: Back Height
- The height of the neighboring building to the back. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
+ The height of the neighboring building to the back. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
Double
ft
false
@@ -1221,7 +1221,7 @@
neighbor_left_height
Neighbor: Left Height
- The height of the neighboring building to the left. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
+ The height of the neighboring building to the left. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
Double
ft
false
@@ -1230,7 +1230,7 @@
neighbor_right_height
Neighbor: Right Height
- The height of the neighboring building to the right. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
+ The height of the neighboring building to the right. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-neighbor-buildings'>HPXML Neighbor Building</a>) is used.
Double
ft
false
@@ -1286,7 +1286,7 @@
foundation_wall_type
Foundation Wall: Type
- The material type of the foundation wall. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
+ The material type of the foundation wall. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
Choice
false
false
@@ -1328,7 +1328,7 @@
foundation_wall_thickness
Foundation Wall: Thickness
- The thickness of the foundation wall. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
+ The thickness of the foundation wall. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
Double
in
false
@@ -1367,7 +1367,7 @@
foundation_wall_insulation_distance_to_top
Foundation Wall: Insulation Distance To Top
- The distance from the top of the foundation wall to the top of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
+ The distance from the top of the foundation wall to the top of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
Double
ft
false
@@ -1376,7 +1376,7 @@
foundation_wall_insulation_distance_to_bottom
Foundation Wall: Insulation Distance To Bottom
- The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
+ The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.
Double
ft
false
@@ -1470,7 +1470,7 @@
slab_thickness
Slab: Thickness
- The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-slabs'>HPXML Slabs</a>) is used.
+ The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-slabs'>HPXML Slabs</a>) is used.
Double
in
false
@@ -1479,7 +1479,7 @@
slab_carpet_fraction
Slab: Carpet Fraction
- Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-slabs'>HPXML Slabs</a>) is used.
+ Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-slabs'>HPXML Slabs</a>) is used.
Double
Frac
false
@@ -1488,7 +1488,7 @@
slab_carpet_r
Slab: Carpet R-value
- R-value of the slab carpet. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-slabs'>HPXML Slabs</a>) is used.
+ R-value of the slab carpet. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-slabs'>HPXML Slabs</a>) is used.
Double
h-ft^2-R/Btu
false
@@ -1507,7 +1507,7 @@
roof_material_type
Roof: Material Type
- The material type of the roof. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
+ The material type of the roof. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
Choice
false
false
@@ -1553,7 +1553,7 @@
roof_color
Roof: Color
- The color of the roof. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
+ The color of the roof. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
Choice
false
false
@@ -1619,7 +1619,7 @@
radiant_barrier_grade
Attic: Radiant Barrier Grade
- The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
+ The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
Choice
false
false
@@ -1696,7 +1696,7 @@
wall_siding_type
Wall: Siding Type
- The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-walls'>HPXML Walls</a>) is used.
+ The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-walls'>HPXML Walls</a>) is used.
Choice
false
false
@@ -1750,7 +1750,7 @@
wall_color
Wall: Color
- The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-walls'>HPXML Walls</a>) is used.
+ The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-walls'>HPXML Walls</a>) is used.
Choice
false
false
@@ -1880,7 +1880,7 @@
window_fraction_operable
Windows: Fraction Operable
- Fraction of windows that are operable. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-windows'>HPXML Windows</a>) is used.
+ Fraction of windows that are operable. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-windows'>HPXML Windows</a>) is used.
Double
Frac
false
@@ -1889,7 +1889,7 @@
window_natvent_availability
Windows: Natural Ventilation Availability
- For operable windows, the number of days/week that windows can be opened by occupants for natural ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-windows'>HPXML Windows</a>) is used.
+ For operable windows, the number of days/week that windows can be opened by occupants for natural ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-windows'>HPXML Windows</a>) is used.
Integer
Days/week
false
@@ -1917,7 +1917,7 @@
window_interior_shading_type
Windows: Interior Shading Type
- Type of window interior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-interior-shading'>HPXML Interior Shading</a>) is used.
+ Type of window interior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-interior-shading'>HPXML Interior Shading</a>) is used.
Choice
false
false
@@ -1967,7 +1967,7 @@
window_interior_shading_winter
Windows: Winter Interior Shading Coefficient
- Interior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-interior-shading'>HPXML Interior Shading</a>) is used.
+ Interior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-interior-shading'>HPXML Interior Shading</a>) is used.
Double
Frac
false
@@ -1976,7 +1976,7 @@
window_interior_shading_summer
Windows: Summer Interior Shading Coefficient
- Interior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-interior-shading'>HPXML Interior Shading</a>) is used.
+ Interior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-interior-shading'>HPXML Interior Shading</a>) is used.
Double
Frac
false
@@ -1985,7 +1985,7 @@
window_exterior_shading_type
Windows: Exterior Shading Type
- Type of window exterior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-exterior-shading'>HPXML Exterior Shading</a>) is used.
+ Type of window exterior shading. Summer/winter shading coefficients can be provided below instead. If neither is provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-exterior-shading'>HPXML Exterior Shading</a>) is used.
Choice
false
false
@@ -2007,7 +2007,7 @@
window_exterior_shading_winter
Windows: Winter Exterior Shading Coefficient
- Exterior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-exterior-shading'>HPXML Exterior Shading</a>) is used.
+ Exterior shading coefficient for the winter season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-exterior-shading'>HPXML Exterior Shading</a>) is used.
Double
Frac
false
@@ -2016,7 +2016,7 @@
window_exterior_shading_summer
Windows: Summer Exterior Shading Coefficient
- Exterior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-exterior-shading'>HPXML Exterior Shading</a>) is used.
+ Exterior shading coefficient for the summer season, which if provided overrides the shading type input. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-exterior-shading'>HPXML Exterior Shading</a>) is used.
Double
Frac
false
@@ -2025,7 +2025,7 @@
window_shading_summer_season
Windows: Shading Summer Season
- Enter a date range like 'May 1 - Sep 30'. Defines the summer season for purposes of shading coefficients; the rest of the year is assumed to be winter. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-windows'>HPXML Windows</a>) is used.
+ Enter a date range like 'May 1 - Sep 30'. Defines the summer season for purposes of shading coefficients; the rest of the year is assumed to be winter. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-windows'>HPXML Windows</a>) is used.
String
false
false
@@ -2386,7 +2386,7 @@
air_leakage_has_flue_or_chimney_in_conditioned_space
Air Leakage: Has Flue or Chimney in Conditioned Space
- Presence of flue or chimney with combustion air from conditioned space; used for infiltration model. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#flue-or-chimney'>Flue or Chimney</a>) is used.
+ Presence of flue or chimney with combustion air from conditioned space; used for infiltration model. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#flue-or-chimney'>Flue or Chimney</a>) is used.
Boolean
false
false
@@ -2508,7 +2508,7 @@
heating_system_heating_capacity
Heating System: Heating Capacity
- The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-heating-systems'>HPXML Heating Systems</a>) is used.
+ The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-heating-systems'>HPXML Heating Systems</a>) is used.
Double
Btu/hr
false
@@ -2633,7 +2633,7 @@
cooling_system_cooling_compressor_type
Cooling System: Cooling Compressor Type
- The compressor type of the cooling system. Only applies to central air conditioner and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
+ The compressor type of the cooling system. Only applies to central air conditioner and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
Choice
false
false
@@ -2655,7 +2655,7 @@
cooling_system_cooling_sensible_heat_fraction
Cooling System: Cooling Sensible Heat Fraction
- The sensible heat fraction of the cooling system. Ignored for evaporative cooler. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
+ The sensible heat fraction of the cooling system. Ignored for evaporative cooler. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
Double
Frac
false
@@ -2664,7 +2664,7 @@
cooling_system_cooling_capacity
Cooling System: Cooling Capacity
- The output cooling capacity of the cooling system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#evaporative-cooler'>Evaporative Cooler</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
+ The output cooling capacity of the cooling system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#evaporative-cooler'>Evaporative Cooler</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
Double
Btu/hr
false
@@ -2737,7 +2737,7 @@
cooling_system_crankcase_heater_watts
Cooling System: Crankcase Heater Power Watts
- Cooling system crankcase heater power consumption in Watts. Applies only to central air conditioner, room air conditioner, packaged terminal air conditioner and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
+ Cooling system crankcase heater power consumption in Watts. Applies only to central air conditioner, room air conditioner, packaged terminal air conditioner and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.
Double
W
false
@@ -2793,7 +2793,7 @@
cooling_system_integrated_heating_system_capacity
Cooling System: Integrated Heating System Heating Capacity
- The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>) is used. Only used for room air conditioner and packaged terminal air conditioner.
+ The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner'>Room Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>) is used. Only used for room air conditioner and packaged terminal air conditioner.
Double
Btu/hr
false
@@ -2914,7 +2914,7 @@
heat_pump_cooling_compressor_type
Heat Pump: Cooling Compressor Type
- The compressor type of the heat pump. Only applies to air-to-air and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>) is used.
+ The compressor type of the heat pump. Only applies to air-to-air and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>) is used.
Choice
false
false
@@ -2936,7 +2936,7 @@
heat_pump_cooling_sensible_heat_fraction
Heat Pump: Cooling Sensible Heat Fraction
- The sensible heat fraction of the heat pump. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
+ The sensible heat fraction of the heat pump. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
Double
Frac
false
@@ -2945,7 +2945,7 @@
heat_pump_heating_capacity
Heat Pump: Heating Capacity
- The output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
+ The output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
Double
Btu/hr
false
@@ -2971,7 +2971,7 @@
heat_pump_heating_capacity_retention_fraction
Heat Pump: Heating Capacity Retention Fraction
- The output heating capacity of the heat pump at a user-specified temperature (e.g., 17F or 5F) divided by the above nominal heating capacity. Applies to all heat pump types except ground-to-air. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.
+ The output heating capacity of the heat pump at a user-specified temperature (e.g., 17F or 5F) divided by the above nominal heating capacity. Applies to all heat pump types except ground-to-air. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.
Double
Frac
false
@@ -2989,7 +2989,7 @@
heat_pump_cooling_capacity
Heat Pump: Cooling Capacity
- The output cooling capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
+ The output cooling capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
Double
Btu/hr
false
@@ -3035,7 +3035,7 @@
heat_pump_compressor_lockout_temp
Heat Pump: Compressor Lockout Temperature
- The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than ground-to-air. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.
+ The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than ground-to-air. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.
Double
F
false
@@ -3120,7 +3120,7 @@
heat_pump_backup_heating_capacity
Heat Pump: Backup Heating Capacity
- The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#backup'>Backup</a>) is used. Only applies if Backup Type is 'integrated'.
+ The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#backup'>Backup</a>) is used. Only applies if Backup Type is 'integrated'.
Double
Btu/hr
false
@@ -3129,7 +3129,7 @@
heat_pump_backup_heating_lockout_temp
Heat Pump: Backup Heating Lockout Temperature
- The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of 'integrated' and 'separate'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#backup'>Backup</a>) is used.
+ The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of 'integrated' and 'separate'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#backup'>Backup</a>) is used.
Double
F
false
@@ -3138,7 +3138,7 @@
heat_pump_sizing_methodology
Heat Pump: Sizing Methodology
- The auto-sizing methodology to use when the heat pump capacity is not provided. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-hvac-sizing-control'>HPXML HVAC Sizing Control</a>) is used.
+ The auto-sizing methodology to use when the heat pump capacity is not provided. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-hvac-sizing-control'>HPXML HVAC Sizing Control</a>) is used.
Choice
false
false
@@ -3160,7 +3160,7 @@
heat_pump_backup_sizing_methodology
Heat Pump: Backup Sizing Methodology
- The auto-sizing methodology to use when the heat pump backup capacity is not provided. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-hvac-sizing-control'>HPXML HVAC Sizing Control</a>) is used.
+ The auto-sizing methodology to use when the heat pump backup capacity is not provided. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-hvac-sizing-control'>HPXML HVAC Sizing Control</a>) is used.
Choice
false
false
@@ -3214,7 +3214,7 @@
heat_pump_crankcase_heater_watts
Heat Pump: Crankcase Heater Power Watts
- Heat Pump crankcase heater power consumption in Watts. Applies only to air-to-air, mini-split, packaged terminal heat pump and room air conditioner with reverse cycle. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.
+ Heat Pump crankcase heater power consumption in Watts. Applies only to air-to-air, mini-split, packaged terminal heat pump and room air conditioner with reverse cycle. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.
Double
W
false
@@ -3332,7 +3332,7 @@
geothermal_loop_configuration
Geothermal Loop: Configuration
- Configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
+ Configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.
Choice
false
false
@@ -3350,7 +3350,7 @@
geothermal_loop_borefield_configuration
Geothermal Loop: Borefield Configuration
- Borefield configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Borefield configuration of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Choice
false
false
@@ -3384,7 +3384,7 @@
geothermal_loop_loop_flow
Geothermal Loop: Loop Flow
- Water flow rate through the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Water flow rate through the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Double
gpm
false
@@ -3393,7 +3393,7 @@
geothermal_loop_boreholes_count
Geothermal Loop: Boreholes Count
- Number of boreholes. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Number of boreholes. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Integer
#
false
@@ -3402,7 +3402,7 @@
geothermal_loop_boreholes_length
Geothermal Loop: Boreholes Length
- Average length of each borehole (vertical). Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Average length of each borehole (vertical). Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Double
ft
false
@@ -3411,7 +3411,7 @@
geothermal_loop_boreholes_spacing
Geothermal Loop: Boreholes Spacing
- Distance between bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Distance between bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Double
ft
false
@@ -3420,7 +3420,7 @@
geothermal_loop_boreholes_diameter
Geothermal Loop: Boreholes Diameter
- Diameter of bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Diameter of bores. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Double
in
false
@@ -3429,7 +3429,7 @@
geothermal_loop_grout_type
Geothermal Loop: Grout Type
- Grout type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Grout type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Choice
false
false
@@ -3447,7 +3447,7 @@
geothermal_loop_pipe_type
Geothermal Loop: Pipe Type
- Pipe type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Pipe type of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Choice
false
false
@@ -3465,7 +3465,7 @@
geothermal_loop_pipe_diameter
Geothermal Loop: Pipe Diameter
- Pipe diameter of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
+ Pipe diameter of the geothermal loop. Only applies to ground-to-air heat pump type. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-geothermal-loops'>HPXML Geothermal Loops</a>) is used.
Choice
in
false
@@ -3584,7 +3584,7 @@
heating_system_2_heating_capacity
Heating System 2: Heating Capacity
- The output heating capacity of the second heating system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-heating-systems'>HPXML Heating Systems</a>) is used.
+ The output heating capacity of the second heating system. If not provided, the OS-HPXML autosized default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-heating-systems'>HPXML Heating Systems</a>) is used.
Double
Btu/hr
false
@@ -3656,7 +3656,7 @@
hvac_control_heating_season_period
HVAC Control: Heating Season Period
- Enter a date range like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-hvac-control'>HPXML HVAC Control</a>) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
+ Enter a date range like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-hvac-control'>HPXML HVAC Control</a>) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
String
false
false
@@ -3664,7 +3664,7 @@
hvac_control_cooling_season_period
HVAC Control: Cooling Season Period
- Enter a date range like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-hvac-control'>HPXML HVAC Control</a>) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
+ Enter a date range like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-hvac-control'>HPXML HVAC Control</a>) is used. Can also provide 'BuildingAmerica' to use automatic seasons from the Building America House Simulation Protocols.
String
false
false
@@ -3672,7 +3672,7 @@
hvac_blower_fan_watts_per_cfm
HVAC Blower: Fan Efficiency
- The blower fan efficiency at maximum fan speed. Applies only to split (not packaged) systems (i.e., applies to ducted systems as well as ductless mini-split systems). If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-heating-systems'>HPXML Heating Systems</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-cooling-systems'>HPXML Cooling Systems</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-heat-pumps'>HPXML Heat Pumps</a>) is used.
+ The blower fan efficiency at maximum fan speed. Applies only to split (not packaged) systems (i.e., applies to ducted systems as well as ductless mini-split systems). If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-heating-systems'>HPXML Heating Systems</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-cooling-systems'>HPXML Cooling Systems</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-heat-pumps'>HPXML Heat Pumps</a>) is used.
Double
W/CFM
false
@@ -3713,7 +3713,7 @@
ducts_supply_location
Ducts: Supply Location
- The location of the supply ducts. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The location of the supply ducts. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Choice
false
false
@@ -3839,7 +3839,7 @@
ducts_supply_surface_area
Ducts: Supply Surface Area
- The supply ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The supply ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Double
ft^2
false
@@ -3848,7 +3848,7 @@
ducts_supply_surface_area_fraction
Ducts: Supply Area Fraction
- The fraction of supply ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The fraction of supply ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Double
frac
false
@@ -3857,7 +3857,7 @@
ducts_supply_fraction_rectangular
Ducts: Supply Fraction Rectangular
- The fraction of supply ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The fraction of supply ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Double
frac
false
@@ -3875,7 +3875,7 @@
ducts_return_location
Ducts: Return Location
- The location of the return ducts. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The location of the return ducts. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Choice
false
false
@@ -4001,7 +4001,7 @@
ducts_return_surface_area
Ducts: Return Surface Area
- The return ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The return ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Double
ft^2
false
@@ -4010,7 +4010,7 @@
ducts_return_surface_area_fraction
Ducts: Return Area Fraction
- The fraction of return ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The fraction of return ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Double
frac
false
@@ -4019,7 +4019,7 @@
ducts_number_of_return_registers
Ducts: Number of Return Registers
- The number of return registers of the ducts. Only used to calculate default return duct surface area. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The number of return registers of the ducts. Only used to calculate default return duct surface area. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Integer
#
false
@@ -4028,7 +4028,7 @@
ducts_return_fraction_rectangular
Ducts: Return Fraction Rectangular
- The fraction of return ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
+ The fraction of return ducts that are rectangular (as opposed to round); this affects the duct effective R-value used for modeling. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#air-distribution'>Air Distribution</a>) is used.
Double
frac
false
@@ -4076,7 +4076,7 @@
mech_vent_flow_rate
Mechanical Ventilation: Flow Rate
- The flow rate of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-mechanical-ventilation-fans'>HPXML Mechanical Ventilation Fans</a>) is used.
+ The flow rate of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-mechanical-ventilation-fans'>HPXML Mechanical Ventilation Fans</a>) is used.
Double
CFM
false
@@ -4085,7 +4085,7 @@
mech_vent_hours_in_operation
Mechanical Ventilation: Hours In Operation
- The hours in operation of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-mechanical-ventilation-fans'>HPXML Mechanical Ventilation Fans</a>) is used.
+ The hours in operation of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-mechanical-ventilation-fans'>HPXML Mechanical Ventilation Fans</a>) is used.
Double
hrs/day
false
@@ -4133,7 +4133,7 @@
mech_vent_fan_power
Mechanical Ventilation: Fan Power
- The fan power of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-mechanical-ventilation-fans'>HPXML Mechanical Ventilation Fans</a>) is used.
+ The fan power of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-mechanical-ventilation-fans'>HPXML Mechanical Ventilation Fans</a>) is used.
Double
W
false
@@ -4353,7 +4353,7 @@
kitchen_fans_quantity
Kitchen Fans: Quantity
- The quantity of the kitchen fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The quantity of the kitchen fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Integer
#
false
@@ -4362,7 +4362,7 @@
kitchen_fans_flow_rate
Kitchen Fans: Flow Rate
- The flow rate of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The flow rate of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Double
CFM
false
@@ -4371,7 +4371,7 @@
kitchen_fans_hours_in_operation
Kitchen Fans: Hours In Operation
- The hours in operation of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The hours in operation of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Double
hrs/day
false
@@ -4380,7 +4380,7 @@
kitchen_fans_power
Kitchen Fans: Fan Power
- The fan power of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The fan power of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Double
W
false
@@ -4389,7 +4389,7 @@
kitchen_fans_start_hour
Kitchen Fans: Start Hour
- The start hour of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The start hour of the kitchen fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Integer
hr
false
@@ -4398,7 +4398,7 @@
bathroom_fans_quantity
Bathroom Fans: Quantity
- The quantity of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The quantity of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Integer
#
false
@@ -4407,7 +4407,7 @@
bathroom_fans_flow_rate
Bathroom Fans: Flow Rate
- The flow rate of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The flow rate of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Double
CFM
false
@@ -4416,7 +4416,7 @@
bathroom_fans_hours_in_operation
Bathroom Fans: Hours In Operation
- The hours in operation of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The hours in operation of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Double
hrs/day
false
@@ -4425,7 +4425,7 @@
bathroom_fans_power
Bathroom Fans: Fan Power
- The fan power of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The fan power of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Double
W
false
@@ -4434,7 +4434,7 @@
bathroom_fans_start_hour
Bathroom Fans: Start Hour
- The start hour of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
+ The start hour of the bathroom fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-local-ventilation-fans'>HPXML Local Ventilation Fans</a>) is used.
Integer
hr
false
@@ -4462,7 +4462,7 @@
whole_house_fan_flow_rate
Whole House Fan: Flow Rate
- The flow rate of the whole house fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-whole-house-fans'>HPXML Whole House Fans</a>) is used.
+ The flow rate of the whole house fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-whole-house-fans'>HPXML Whole House Fans</a>) is used.
Double
CFM
false
@@ -4471,7 +4471,7 @@
whole_house_fan_power
Whole House Fan: Fan Power
- The fan power of the whole house fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-whole-house-fans'>HPXML Whole House Fans</a>) is used.
+ The fan power of the whole house fan. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-whole-house-fans'>HPXML Whole House Fans</a>) is used.
Double
W
false
@@ -4550,7 +4550,7 @@
water_heater_location
Water Heater: Location
- The location of water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-water-heating-systems'>HPXML Water Heating Systems</a>) is used.
+ The location of water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-water-heating-systems'>HPXML Water Heating Systems</a>) is used.
Choice
false
false
@@ -4624,7 +4624,7 @@
water_heater_tank_volume
Water Heater: Tank Volume
- Nominal volume of water heater tank. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#conventional-storage'>Conventional Storage</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#heat-pump'>Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#combi-boiler-w-storage'>Combi Boiler w/ Storage</a>) is used.
+ Nominal volume of water heater tank. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#conventional-storage'>Conventional Storage</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#heat-pump'>Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#combi-boiler-w-storage'>Combi Boiler w/ Storage</a>) is used.
Double
gal
false
@@ -4661,7 +4661,7 @@
water_heater_usage_bin
Water Heater: Usage Bin
- The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not instantaneous water heater. Does not apply to space-heating boilers. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#conventional-storage'>Conventional Storage</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
+ The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not instantaneous water heater. Does not apply to space-heating boilers. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#conventional-storage'>Conventional Storage</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
Choice
false
false
@@ -4687,7 +4687,7 @@
water_heater_recovery_efficiency
Water Heater: Recovery Efficiency
- Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#conventional-storage'>Conventional Storage</a>) is used.
+ Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#conventional-storage'>Conventional Storage</a>) is used.
Double
Frac
false
@@ -4696,7 +4696,7 @@
water_heater_heating_capacity
Water Heater: Heating Capacity
- Heating capacity. Only applies to storage water heater and heat pump water heater (compressor). If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#conventional-storage'>Conventional Storage</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
+ Heating capacity. Only applies to storage water heater and heat pump water heater (compressor). If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#conventional-storage'>Conventional Storage</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
Double
Btu/hr
false
@@ -4705,7 +4705,7 @@
water_heater_backup_heating_capacity
Water Heater: Backup Heating Capacity
- Backup heating capacity for a heat pump water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
+ Backup heating capacity for a heat pump water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
Double
Btu/hr
false
@@ -4714,7 +4714,7 @@
water_heater_standby_loss
Water Heater: Standby Loss
- The standby loss of water heater. Only applies to space-heating boilers. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#combi-boiler-w-storage'>Combi Boiler w/ Storage</a>) is used.
+ The standby loss of water heater. Only applies to space-heating boilers. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#combi-boiler-w-storage'>Combi Boiler w/ Storage</a>) is used.
Double
F/hr
false
@@ -4732,7 +4732,7 @@
water_heater_setpoint_temperature
Water Heater: Setpoint Temperature
- The setpoint temperature of water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-water-heating-systems'>HPXML Water Heating Systems</a>) is used.
+ The setpoint temperature of water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-water-heating-systems'>HPXML Water Heating Systems</a>) is used.
Double
F
false
@@ -4768,7 +4768,7 @@
water_heater_tank_model_type
Water Heater: Tank Type
- Type of tank model to use. The 'stratified' tank generally provide more accurate results, but may significantly increase run time. Applies only to storage water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#conventional-storage'>Conventional Storage</a>) is used.
+ Type of tank model to use. The 'stratified' tank generally provide more accurate results, but may significantly increase run time. Applies only to storage water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#conventional-storage'>Conventional Storage</a>) is used.
Choice
false
false
@@ -4786,7 +4786,7 @@
water_heater_operating_mode
Water Heater: Operating Mode
- The water heater operating mode. The 'heat pump only' option only uses the heat pump, while 'hybrid/auto' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to heat pump water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
+ The water heater operating mode. The 'heat pump only' option only uses the heat pump, while 'hybrid/auto' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to heat pump water heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#heat-pump'>Heat Pump</a>) is used.
Choice
false
false
@@ -4823,7 +4823,7 @@
hot_water_distribution_standard_piping_length
Hot Water Distribution: Standard Piping Length
- If the distribution system is Standard, the length of the piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#standard'>Standard</a>) is used.
+ If the distribution system is Standard, the length of the piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#standard'>Standard</a>) is used.
Double
ft
false
@@ -4863,7 +4863,7 @@
hot_water_distribution_recirc_piping_length
Hot Water Distribution: Recirculation Piping Length
- If the distribution system is Recirculation, the length of the recirculation piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
+ If the distribution system is Recirculation, the length of the recirculation piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
Double
ft
false
@@ -4872,7 +4872,7 @@
hot_water_distribution_recirc_branch_piping_length
Hot Water Distribution: Recirculation Branch Piping Length
- If the distribution system is Recirculation, the length of the recirculation branch piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
+ If the distribution system is Recirculation, the length of the recirculation branch piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
Double
ft
false
@@ -4881,7 +4881,7 @@
hot_water_distribution_recirc_pump_power
Hot Water Distribution: Recirculation Pump Power
- If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
+ If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
Double
W
false
@@ -4890,7 +4890,7 @@
hot_water_distribution_pipe_r
Hot Water Distribution: Pipe Insulation Nominal R-Value
- Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-hot-water-distribution'>HPXML Hot Water Distribution</a>) is used.
+ Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-hot-water-distribution'>HPXML Hot Water Distribution</a>) is used.
Double
h-ft^2-R/Btu
false
@@ -4989,7 +4989,7 @@
water_fixtures_usage_multiplier
Hot Water Fixtures: Usage Multiplier
- Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-water-fixtures'>HPXML Water Fixtures</a>) is used.
+ Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-water-fixtures'>HPXML Water Fixtures</a>) is used.
Double
false
false
@@ -4997,7 +4997,7 @@
general_water_use_usage_multiplier
General Water Use: Usage Multiplier
- Multiplier on internal gains from general water use (floor mopping, shower evaporation, water films on showers, tubs & sinks surfaces, plant watering, etc.) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-building-occupancy'>HPXML Building Occupancy</a>) is used.
+ Multiplier on internal gains from general water use (floor mopping, shower evaporation, water films on showers, tubs & sinks surfaces, plant watering, etc.) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-building-occupancy'>HPXML Building Occupancy</a>) is used.
Double
false
false
@@ -5124,7 +5124,7 @@
solar_thermal_storage_volume
Solar Thermal: Storage Volume
- The storage volume of the solar thermal system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#detailed-inputs'>Detailed Inputs</a>) is used.
+ The storage volume of the solar thermal system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#detailed-inputs'>Detailed Inputs</a>) is used.
Double
gal
false
@@ -5162,7 +5162,7 @@
pv_system_module_type
PV System: Module Type
- Module type of the PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Module type of the PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Choice
false
false
@@ -5184,7 +5184,7 @@
pv_system_location
PV System: Location
- Location of the PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Location of the PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Choice
false
false
@@ -5202,7 +5202,7 @@
pv_system_tracking
PV System: Tracking
- Type of tracking for the PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Type of tracking for the PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Choice
false
false
@@ -5258,7 +5258,7 @@
pv_system_inverter_efficiency
PV System: Inverter Efficiency
- Inverter efficiency of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Inverter efficiency of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Double
Frac
false
@@ -5267,7 +5267,7 @@
pv_system_system_losses_fraction
PV System: System Losses Fraction
- System losses fraction of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ System losses fraction of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Double
Frac
false
@@ -5304,7 +5304,7 @@
pv_system_2_module_type
PV System 2: Module Type
- Module type of the second PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Module type of the second PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Choice
false
false
@@ -5326,7 +5326,7 @@
pv_system_2_location
PV System 2: Location
- Location of the second PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Location of the second PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Choice
false
false
@@ -5344,7 +5344,7 @@
pv_system_2_tracking
PV System 2: Tracking
- Type of tracking for the second PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
+ Type of tracking for the second PV system. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.
Choice
false
false
@@ -5419,7 +5419,7 @@
battery_location
Battery: Location
- The space type for the lithium ion battery location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
+ The space type for the lithium ion battery location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
Choice
false
false
@@ -5477,7 +5477,7 @@
battery_power
Battery: Rated Power Output
- The rated power output of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
+ The rated power output of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
Double
W
false
@@ -5486,7 +5486,7 @@
battery_capacity
Battery: Nominal Capacity
- The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
+ The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
Double
kWh
false
@@ -5495,7 +5495,7 @@
battery_usable_capacity
Battery: Usable Capacity
- The usable capacity of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
+ The usable capacity of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
Double
kWh
false
@@ -5504,7 +5504,7 @@
battery_round_trip_efficiency
Battery: Round Trip Efficiency
- The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
+ The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-batteries'>HPXML Batteries</a>) is used.
Double
Frac
false
@@ -5568,7 +5568,7 @@
lighting_interior_usage_multiplier
Lighting: Interior Usage Multiplier
- Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
+ Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
Double
false
false
@@ -5603,7 +5603,7 @@
lighting_exterior_usage_multiplier
Lighting: Exterior Usage Multiplier
- Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
+ Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
Double
false
false
@@ -5638,7 +5638,7 @@
lighting_garage_usage_multiplier
Lighting: Garage Usage Multiplier
- Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
+ Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
Double
false
false
@@ -5665,7 +5665,7 @@
holiday_lighting_daily_kwh
Holiday Lighting: Daily Consumption
- The daily energy consumption for holiday lighting (exterior). If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
+ The daily energy consumption for holiday lighting (exterior). If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
Double
kWh/day
false
@@ -5674,7 +5674,7 @@
holiday_lighting_period
Holiday Lighting: Period
- Enter a date range like 'Nov 25 - Jan 5'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
+ Enter a date range like 'Nov 25 - Jan 5'. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-lighting'>HPXML Lighting</a>) is used.
String
false
false
@@ -5783,7 +5783,7 @@
clothes_washer_location
Clothes Washer: Location
- The space type for the clothes washer location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The space type for the clothes washer location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Choice
false
false
@@ -5844,7 +5844,7 @@
clothes_washer_efficiency
Clothes Washer: Efficiency
- The efficiency of the clothes washer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The efficiency of the clothes washer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
ft^3/kWh-cyc
false
@@ -5853,7 +5853,7 @@
clothes_washer_rated_annual_kwh
Clothes Washer: Rated Annual Consumption
- The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
kWh/yr
false
@@ -5862,7 +5862,7 @@
clothes_washer_label_electric_rate
Clothes Washer: Label Electric Rate
- The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
$/kWh
false
@@ -5871,7 +5871,7 @@
clothes_washer_label_gas_rate
Clothes Washer: Label Gas Rate
- The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
$/therm
false
@@ -5880,7 +5880,7 @@
clothes_washer_label_annual_gas_cost
Clothes Washer: Label Annual Cost with Gas DHW
- The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
$
false
@@ -5889,7 +5889,7 @@
clothes_washer_label_usage
Clothes Washer: Label Usage
- The clothes washer loads per week. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ The clothes washer loads per week. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
cyc/wk
false
@@ -5898,7 +5898,7 @@
clothes_washer_capacity
Clothes Washer: Drum Volume
- Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
ft^3
false
@@ -5907,7 +5907,7 @@
clothes_washer_usage_multiplier
Clothes Washer: Usage Multiplier
- Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
+ Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.
Double
false
false
@@ -5934,7 +5934,7 @@
clothes_dryer_location
Clothes Dryer: Location
- The space type for the clothes dryer location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
+ The space type for the clothes dryer location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
Choice
false
false
@@ -6030,7 +6030,7 @@
clothes_dryer_efficiency
Clothes Dryer: Efficiency
- The efficiency of the clothes dryer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
+ The efficiency of the clothes dryer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
Double
lb/kWh
false
@@ -6039,7 +6039,7 @@
clothes_dryer_vented_flow_rate
Clothes Dryer: Vented Flow Rate
- The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
+ The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
Double
CFM
false
@@ -6048,7 +6048,7 @@
clothes_dryer_usage_multiplier
Clothes Dryer: Usage Multiplier
- Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
+ Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.
Double
false
false
@@ -6075,7 +6075,7 @@
dishwasher_location
Dishwasher: Location
- The space type for the dishwasher location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The space type for the dishwasher location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Choice
false
false
@@ -6136,7 +6136,7 @@
dishwasher_efficiency
Dishwasher: Efficiency
- The efficiency of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The efficiency of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Double
RatedAnnualkWh or EnergyFactor
false
@@ -6145,7 +6145,7 @@
dishwasher_label_electric_rate
Dishwasher: Label Electric Rate
- The label electric rate of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The label electric rate of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Double
$/kWh
false
@@ -6154,7 +6154,7 @@
dishwasher_label_gas_rate
Dishwasher: Label Gas Rate
- The label gas rate of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The label gas rate of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Double
$/therm
false
@@ -6163,7 +6163,7 @@
dishwasher_label_annual_gas_cost
Dishwasher: Label Annual Gas Cost
- The label annual gas cost of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The label annual gas cost of the dishwasher. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Double
$
false
@@ -6172,7 +6172,7 @@
dishwasher_label_usage
Dishwasher: Label Usage
- The dishwasher loads per week. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The dishwasher loads per week. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Double
cyc/wk
false
@@ -6181,7 +6181,7 @@
dishwasher_place_setting_capacity
Dishwasher: Number of Place Settings
- The number of place settings for the unit. Data obtained from manufacturer's literature. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ The number of place settings for the unit. Data obtained from manufacturer's literature. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Integer
#
false
@@ -6190,7 +6190,7 @@
dishwasher_usage_multiplier
Dishwasher: Usage Multiplier
- Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
+ Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.
Double
false
false
@@ -6217,7 +6217,7 @@
refrigerator_location
Refrigerator: Location
- The space type for the refrigerator location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
+ The space type for the refrigerator location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
Choice
false
false
@@ -6259,7 +6259,7 @@
refrigerator_rated_annual_kwh
Refrigerator: Rated Annual Consumption
- The EnergyGuide rated annual energy consumption for a refrigerator. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
+ The EnergyGuide rated annual energy consumption for a refrigerator. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
Double
kWh/yr
false
@@ -6268,7 +6268,7 @@
refrigerator_usage_multiplier
Refrigerator: Usage Multiplier
- Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
+ Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
Double
false
false
@@ -6295,7 +6295,7 @@
extra_refrigerator_location
Extra Refrigerator: Location
- The space type for the extra refrigerator location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
+ The space type for the extra refrigerator location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
Choice
false
false
@@ -6337,7 +6337,7 @@
extra_refrigerator_rated_annual_kwh
Extra Refrigerator: Rated Annual Consumption
- The EnergyGuide rated annual energy consumption for an extra refrigerator. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
+ The EnergyGuide rated annual energy consumption for an extra refrigerator. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
Double
kWh/yr
false
@@ -6346,7 +6346,7 @@
extra_refrigerator_usage_multiplier
Extra Refrigerator: Usage Multiplier
- Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
+ Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.
Double
false
false
@@ -6373,7 +6373,7 @@
freezer_location
Freezer: Location
- The space type for the freezer location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-freezers'>HPXML Freezers</a>) is used.
+ The space type for the freezer location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-freezers'>HPXML Freezers</a>) is used.
Choice
false
false
@@ -6415,7 +6415,7 @@
freezer_rated_annual_kwh
Freezer: Rated Annual Consumption
- The EnergyGuide rated annual energy consumption for a freezer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-freezers'>HPXML Freezers</a>) is used.
+ The EnergyGuide rated annual energy consumption for a freezer. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-freezers'>HPXML Freezers</a>) is used.
Double
kWh/yr
false
@@ -6424,7 +6424,7 @@
freezer_usage_multiplier
Freezer: Usage Multiplier
- Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-freezers'>HPXML Freezers</a>) is used.
+ Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-freezers'>HPXML Freezers</a>) is used.
Double
false
false
@@ -6451,7 +6451,7 @@
cooking_range_oven_location
Cooking Range/Oven: Location
- The space type for the cooking range/oven location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
+ The space type for the cooking range/oven location. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
Choice
false
false
@@ -6528,7 +6528,7 @@
cooking_range_oven_is_induction
Cooking Range/Oven: Is Induction
- Whether the cooking range is induction. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
+ Whether the cooking range is induction. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
Boolean
false
false
@@ -6546,7 +6546,7 @@
cooking_range_oven_is_convection
Cooking Range/Oven: Is Convection
- Whether the oven is convection. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
+ Whether the oven is convection. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
Boolean
false
false
@@ -6564,7 +6564,7 @@
cooking_range_oven_usage_multiplier
Cooking Range/Oven: Usage Multiplier
- Multiplier on the cooking range/oven energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
+ Multiplier on the cooking range/oven energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.
Double
false
false
@@ -6591,7 +6591,7 @@
ceiling_fan_label_energy_use
Ceiling Fan: Label Energy Use
- The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
+ The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
Double
W
false
@@ -6600,7 +6600,7 @@
ceiling_fan_efficiency
Ceiling Fan: Efficiency
- The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
+ The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
Double
CFM/W
false
@@ -6609,7 +6609,7 @@
ceiling_fan_quantity
Ceiling Fan: Quantity
- Total number of ceiling fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
+ Total number of ceiling fans. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
Integer
#
false
@@ -6618,7 +6618,7 @@
ceiling_fan_cooling_setpoint_temp_offset
Ceiling Fan: Cooling Setpoint Temperature Offset
- The cooling setpoint temperature offset during months when the ceiling fans are operating. Only applies if ceiling fan quantity is greater than zero. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
+ The cooling setpoint temperature offset during months when the ceiling fans are operating. Only applies if ceiling fan quantity is greater than zero. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
Double
F
false
@@ -6646,7 +6646,7 @@
misc_plug_loads_television_annual_kwh
Misc Plug Loads: Television Annual kWh
- The annual energy consumption of the television plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ The annual energy consumption of the television plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
kWh/yr
false
@@ -6655,7 +6655,7 @@
misc_plug_loads_television_usage_multiplier
Misc Plug Loads: Television Usage Multiplier
- Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
false
false
@@ -6663,7 +6663,7 @@
misc_plug_loads_other_annual_kwh
Misc Plug Loads: Other Annual kWh
- The annual energy consumption of the other residual plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ The annual energy consumption of the other residual plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
kWh/yr
false
@@ -6672,7 +6672,7 @@
misc_plug_loads_other_frac_sensible
Misc Plug Loads: Other Sensible Fraction
- Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
Frac
false
@@ -6681,7 +6681,7 @@
misc_plug_loads_other_frac_latent
Misc Plug Loads: Other Latent Fraction
- Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
Frac
false
@@ -6690,7 +6690,7 @@
misc_plug_loads_other_usage_multiplier
Misc Plug Loads: Other Usage Multiplier
- Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
false
false
@@ -6717,7 +6717,7 @@
misc_plug_loads_well_pump_annual_kwh
Misc Plug Loads: Well Pump Annual kWh
- The annual energy consumption of the well pump plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ The annual energy consumption of the well pump plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
kWh/yr
false
@@ -6726,7 +6726,7 @@
misc_plug_loads_well_pump_usage_multiplier
Misc Plug Loads: Well Pump Usage Multiplier
- Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
false
false
@@ -6753,7 +6753,7 @@
misc_plug_loads_vehicle_annual_kwh
Misc Plug Loads: Vehicle Annual kWh
- The annual energy consumption of the electric vehicle plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ The annual energy consumption of the electric vehicle plug loads. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
kWh/yr
false
@@ -6762,7 +6762,7 @@
misc_plug_loads_vehicle_usage_multiplier
Misc Plug Loads: Vehicle Usage Multiplier
- Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
+ Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.
Double
false
false
@@ -6820,7 +6820,7 @@
misc_fuel_loads_grill_annual_therm
Misc Fuel Loads: Grill Annual therm
- The annual energy consumption of the fuel loads grill. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ The annual energy consumption of the fuel loads grill. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
therm/yr
false
@@ -6829,7 +6829,7 @@
misc_fuel_loads_grill_usage_multiplier
Misc Fuel Loads: Grill Usage Multiplier
- Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
false
false
@@ -6887,7 +6887,7 @@
misc_fuel_loads_lighting_annual_therm
Misc Fuel Loads: Lighting Annual therm
- The annual energy consumption of the fuel loads lighting. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>)is used.
+ The annual energy consumption of the fuel loads lighting. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>)is used.
Double
therm/yr
false
@@ -6896,7 +6896,7 @@
misc_fuel_loads_lighting_usage_multiplier
Misc Fuel Loads: Lighting Usage Multiplier
- Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
false
false
@@ -6954,7 +6954,7 @@
misc_fuel_loads_fireplace_annual_therm
Misc Fuel Loads: Fireplace Annual therm
- The annual energy consumption of the fuel loads fireplace. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ The annual energy consumption of the fuel loads fireplace. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
therm/yr
false
@@ -6963,7 +6963,7 @@
misc_fuel_loads_fireplace_frac_sensible
Misc Fuel Loads: Fireplace Sensible Fraction
- Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
Frac
false
@@ -6972,7 +6972,7 @@
misc_fuel_loads_fireplace_frac_latent
Misc Fuel Loads: Fireplace Latent Fraction
- Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
Frac
false
@@ -6981,7 +6981,7 @@
misc_fuel_loads_fireplace_usage_multiplier
Misc Fuel Loads: Fireplace Usage Multiplier
- Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
+ Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.
Double
false
false
@@ -7008,7 +7008,7 @@
pool_pump_annual_kwh
Pool: Pump Annual kWh
- The annual energy consumption of the pool pump. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#pool-pump'>Pool Pump</a>) is used.
+ The annual energy consumption of the pool pump. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#pool-pump'>Pool Pump</a>) is used.
Double
kWh/yr
false
@@ -7017,7 +7017,7 @@
pool_pump_usage_multiplier
Pool: Pump Usage Multiplier
- Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#pool-pump'>Pool Pump</a>) is used.
+ Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#pool-pump'>Pool Pump</a>) is used.
Double
false
false
@@ -7052,7 +7052,7 @@
pool_heater_annual_kwh
Pool: Heater Annual kWh
- The annual energy consumption of the electric resistance pool heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#pool-heater'>Pool Heater</a>) is used.
+ The annual energy consumption of the electric resistance pool heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#pool-heater'>Pool Heater</a>) is used.
Double
kWh/yr
false
@@ -7061,7 +7061,7 @@
pool_heater_annual_therm
Pool: Heater Annual therm
- The annual energy consumption of the gas fired pool heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#pool-heater'>Pool Heater</a>) is used.
+ The annual energy consumption of the gas fired pool heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#pool-heater'>Pool Heater</a>) is used.
Double
therm/yr
false
@@ -7070,7 +7070,7 @@
pool_heater_usage_multiplier
Pool: Heater Usage Multiplier
- Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#pool-heater'>Pool Heater</a>) is used.
+ Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#pool-heater'>Pool Heater</a>) is used.
Double
false
false
@@ -7097,7 +7097,7 @@
permanent_spa_pump_annual_kwh
Permanent Spa: Pump Annual kWh
- The annual energy consumption of the permanent spa pump. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#permanent-spa-pump'>Permanent Spa Pump</a>) is used.
+ The annual energy consumption of the permanent spa pump. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#permanent-spa-pump'>Permanent Spa Pump</a>) is used.
Double
kWh/yr
false
@@ -7106,7 +7106,7 @@
permanent_spa_pump_usage_multiplier
Permanent Spa: Pump Usage Multiplier
- Multiplier on the permanent spa pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#permanent-spa-pump'>Permanent Spa Pump</a>) is used.
+ Multiplier on the permanent spa pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#permanent-spa-pump'>Permanent Spa Pump</a>) is used.
Double
false
false
@@ -7141,7 +7141,7 @@
permanent_spa_heater_annual_kwh
Permanent Spa: Heater Annual kWh
- The annual energy consumption of the electric resistance permanent spa heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#permanent-spa-heater'>Permanent Spa Heater</a>) is used.
+ The annual energy consumption of the electric resistance permanent spa heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#permanent-spa-heater'>Permanent Spa Heater</a>) is used.
Double
kWh/yr
false
@@ -7150,7 +7150,7 @@
permanent_spa_heater_annual_therm
Permanent Spa: Heater Annual therm
- The annual energy consumption of the gas fired permanent spa heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#permanent-spa-heater'>Permanent Spa Heater</a>) is used.
+ The annual energy consumption of the gas fired permanent spa heater. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#permanent-spa-heater'>Permanent Spa Heater</a>) is used.
Double
therm/yr
false
@@ -7159,7 +7159,7 @@
permanent_spa_heater_usage_multiplier
Permanent Spa: Heater Usage Multiplier
- Multiplier on the permanent spa heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#permanent-spa-heater'>Permanent Spa Heater</a>) is used.
+ Multiplier on the permanent spa heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.10.0/workflow_inputs.html#permanent-spa-heater'>Permanent Spa Heater</a>) is used.
Double
false
false
@@ -7527,7 +7527,7 @@
README.md
md
readme
- 25110074
+ B595D2F2
README.md.erb
@@ -7544,7 +7544,7 @@
measure.rb
rb
script
- 79912FCC
+ 5F60558F
constants.rb
@@ -7556,13 +7556,13 @@
geometry.rb
rb
resource
- E50F00EB
+ 425682E4
test_build_residential_hpxml.rb
rb
test
- 04146810
+ 71348C9A
diff --git a/BuildResidentialHPXML/resources/geometry.rb b/BuildResidentialHPXML/resources/geometry.rb
index cba189f455..6bf1d4ef74 100644
--- a/BuildResidentialHPXML/resources/geometry.rb
+++ b/BuildResidentialHPXML/resources/geometry.rb
@@ -268,7 +268,8 @@ def self.create_single_family_detached(runner:,
# make polygons
polygon_floor = make_polygon(roof_nw_point, roof_ne_point, roof_se_point, roof_sw_point)
side_type = nil
- if roof_type == Constants::RoofTypeGable
+ case roof_type
+ when Constants::RoofTypeGable
if length >= width
roof_w_point = OpenStudio::Point3d.new(0, width / 2.0, z + attic_height)
roof_e_point = OpenStudio::Point3d.new(length, width / 2.0, z + attic_height)
@@ -285,7 +286,7 @@ def self.create_single_family_detached(runner:,
polygon_e_wall = make_polygon(roof_e_point, roof_ne_point, roof_nw_point)
end
side_type = EPlus::SurfaceTypeWall
- elsif roof_type == Constants::RoofTypeHip
+ when Constants::RoofTypeHip
if length >= width
roof_w_point = OpenStudio::Point3d.new(width / 2.0, width / 2.0, z + attic_height)
roof_e_point = OpenStudio::Point3d.new(length - width / 2.0, width / 2.0, z + attic_height)
@@ -330,7 +331,8 @@ def self.create_single_family_detached(runner:,
surface_e_wall.setSpace(attic_space)
# set these to the attic zone
- if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
+ case attic_type
+ when HPXML::AtticTypeVented, HPXML::AtticTypeUnvented
# create attic zone
attic_zone = OpenStudio::Model::ThermalZone.new(model)
attic_space.setThermalZone(attic_zone)
@@ -340,7 +342,7 @@ def self.create_single_family_detached(runner:,
attic_space_name = HPXML::LocationAtticUnvented
end
attic_zone.setName(attic_space_name)
- elsif attic_type == HPXML::AtticTypeConditioned
+ when HPXML::AtticTypeConditioned
attic_space.setThermalZone(conditioned_zone)
attic_space_name = HPXML::LocationConditionedSpace
end
@@ -379,20 +381,23 @@ def self.create_single_family_detached(runner:,
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_polygon, foundation_height, model)
foundation_space = foundation_space.get
assign_indexes(model: model, footprint_polygon: foundation_polygon, space: foundation_space)
- if foundation_type == HPXML::FoundationTypeCrawlspaceVented
+ case foundation_type
+ when HPXML::FoundationTypeCrawlspaceVented
foundation_space_name = HPXML::LocationCrawlspaceVented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
+ when HPXML::FoundationTypeCrawlspaceUnvented
foundation_space_name = HPXML::LocationCrawlspaceUnvented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
+ when HPXML::FoundationTypeCrawlspaceConditioned
foundation_space_name = HPXML::LocationCrawlspaceConditioned
- elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
+ when HPXML::FoundationTypeBasementUnconditioned
foundation_space_name = HPXML::LocationBasementUnconditioned
- elsif foundation_type == HPXML::FoundationTypeBasementConditioned
+ when HPXML::FoundationTypeBasementConditioned
foundation_space_name = HPXML::LocationBasementConditioned
- elsif foundation_type == HPXML::FoundationTypeAmbient
+ when HPXML::FoundationTypeAmbient
foundation_space_name = HPXML::LocationOutside
- elsif foundation_type.start_with?(HPXML::FoundationTypeBellyAndWing)
- foundation_space_name = HPXML::LocationManufacturedHomeUnderBelly
+ else
+ if foundation_type.start_with? HPXML::FoundationTypeBellyAndWing
+ foundation_space_name = HPXML::LocationManufacturedHomeUnderBelly
+ end
end
foundation_zone.setName(foundation_space_name)
foundation_space.setName(foundation_space_name)
@@ -814,17 +819,18 @@ def self.create_single_family_attached(model:,
# create foundation zone
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
- if foundation_type == HPXML::FoundationTypeCrawlspaceVented
+ case foundation_type
+ when HPXML::FoundationTypeCrawlspaceVented
foundation_space_name = HPXML::LocationCrawlspaceVented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
+ when HPXML::FoundationTypeCrawlspaceUnvented
foundation_space_name = HPXML::LocationCrawlspaceUnvented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
+ when HPXML::FoundationTypeCrawlspaceConditioned
foundation_space_name = HPXML::LocationCrawlspaceConditioned
- elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
+ when HPXML::FoundationTypeBasementUnconditioned
foundation_space_name = HPXML::LocationBasementUnconditioned
- elsif foundation_type == HPXML::FoundationTypeBasementConditioned
+ when HPXML::FoundationTypeBasementConditioned
foundation_space_name = HPXML::LocationBasementConditioned
- elsif foundation_type == HPXML::FoundationTypeAmbient
+ when HPXML::FoundationTypeAmbient
foundation_space_name = HPXML::LocationOutside
end
foundation_zone.setName(foundation_space_name)
@@ -889,7 +895,8 @@ def self.create_single_family_attached(model:,
attic_space = get_attic_space(model: model, x: x, y: y, average_ceiling_height: average_ceiling_height, num_floors: num_floors, roof_pitch: roof_pitch, roof_type: roof_type, rim_joist_height: rim_joist_height)
# set these to the attic zone
- if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
+ case attic_type
+ when HPXML::AtticTypeVented, HPXML::AtticTypeUnvented
# create attic zone
attic_zone = OpenStudio::Model::ThermalZone.new(model)
attic_space.setThermalZone(attic_zone)
@@ -1106,17 +1113,18 @@ def self.create_apartment(model:,
# create foundation zone
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
- if foundation_type == HPXML::FoundationTypeCrawlspaceVented
+ case foundation_type
+ when HPXML::FoundationTypeCrawlspaceVented
foundation_space_name = HPXML::LocationCrawlspaceVented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
+ when HPXML::FoundationTypeCrawlspaceUnvented
foundation_space_name = HPXML::LocationCrawlspaceUnvented
- elsif foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
+ when HPXML::FoundationTypeCrawlspaceConditioned
foundation_space_name = HPXML::LocationCrawlspaceConditioned
- elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
+ when HPXML::FoundationTypeBasementUnconditioned
foundation_space_name = HPXML::LocationBasementUnconditioned
- elsif foundation_type == HPXML::FoundationTypeBasementConditioned
+ when HPXML::FoundationTypeBasementConditioned
foundation_space_name = HPXML::LocationBasementConditioned
- elsif foundation_type == HPXML::FoundationTypeAmbient
+ when HPXML::FoundationTypeAmbient
foundation_space_name = HPXML::LocationOutside
end
foundation_zone.setName(foundation_space_name)
@@ -1179,7 +1187,8 @@ def self.create_apartment(model:,
attic_space = get_attic_space(model: model, x: x, y: y, average_ceiling_height: average_ceiling_height, num_floors: num_floors, roof_pitch: roof_pitch, roof_type: roof_type, rim_joist_height: rim_joist_height)
# set these to the attic zone
- if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
+ case attic_type
+ when HPXML::AtticTypeVented, HPXML::AtticTypeUnvented
# create attic zone
attic_zone = OpenStudio::Model::ThermalZone.new(model)
attic_space.setThermalZone(attic_zone)
@@ -1326,16 +1335,17 @@ def self.create_doors(runner:,
# Convert to 3D geometry; assign to surface
door_polygon = OpenStudio::Point3dVector.new
- if facade == Constants::FacadeFront
+ case facade
+ when Constants::FacadeFront
multx = 1
multy = 0
- elsif facade == Constants::FacadeBack
+ when Constants::FacadeBack
multx = -1
multy = 0
- elsif facade == Constants::FacadeLeft
+ when Constants::FacadeLeft
multx = 0
multy = -1
- elsif facade == Constants::FacadeRight
+ when Constants::FacadeRight
multx = 0
multy = 1
end
@@ -1602,19 +1612,20 @@ def self.create_windows_and_skylights(runner:,
leftx = skylight_bottom_left.x
lefty = skylight_bottom_left.y
bottomz = skylight_bottom_left.z
- if (facade == Constants::FacadeFront) || (facade == Constants::FacadeNone)
+ case facade
+ when Constants::FacadeFront, Constants::FacadeNone
skylight_top_left = OpenStudio::Point3d.new(leftx, lefty + Math.cos(surface.tilt) * skylight_length, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_top_right = OpenStudio::Point3d.new(leftx + skylight_width, lefty + Math.cos(surface.tilt) * skylight_length, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_bottom_right = OpenStudio::Point3d.new(leftx + skylight_width, lefty, bottomz)
- elsif facade == Constants::FacadeBack
+ when Constants::FacadeBack
skylight_top_left = OpenStudio::Point3d.new(leftx, lefty - Math.cos(surface.tilt) * skylight_length, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_top_right = OpenStudio::Point3d.new(leftx - skylight_width, lefty - Math.cos(surface.tilt) * skylight_length, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_bottom_right = OpenStudio::Point3d.new(leftx - skylight_width, lefty, bottomz)
- elsif facade == Constants::FacadeLeft
+ when Constants::FacadeLeft
skylight_top_left = OpenStudio::Point3d.new(leftx + Math.cos(surface.tilt) * skylight_length, lefty, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_top_right = OpenStudio::Point3d.new(leftx + Math.cos(surface.tilt) * skylight_length, lefty - skylight_width, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_bottom_right = OpenStudio::Point3d.new(leftx, lefty - skylight_width, bottomz)
- elsif facade == Constants::FacadeRight
+ when Constants::FacadeRight
skylight_top_left = OpenStudio::Point3d.new(leftx - Math.cos(surface.tilt) * skylight_length, lefty, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_top_right = OpenStudio::Point3d.new(leftx - Math.cos(surface.tilt) * skylight_length, lefty + skylight_width, bottomz + Math.sin(surface.tilt) * skylight_length)
skylight_bottom_right = OpenStudio::Point3d.new(leftx, lefty + skylight_width, bottomz)
@@ -1802,13 +1813,14 @@ def self.get_facade_for_surface(surface:)
# @return [Double] the absolute azimuth based on relative azimuth of the facade and building orientation
def self.get_azimuth_from_facade(facade:,
orientation:)
- if facade == Constants::FacadeFront
+ case facade
+ when Constants::FacadeFront
return get_abs_azimuth(relative_azimuth: 0, building_orientation: orientation)
- elsif facade == Constants::FacadeBack
+ when Constants::FacadeBack
return get_abs_azimuth(relative_azimuth: 180, building_orientation: orientation)
- elsif facade == Constants::FacadeLeft
+ when Constants::FacadeLeft
return get_abs_azimuth(relative_azimuth: 90, building_orientation: orientation)
- elsif facade == Constants::FacadeRight
+ when Constants::FacadeRight
return get_abs_azimuth(relative_azimuth: 270, building_orientation: orientation)
else
fail 'Unexpected facade.'
@@ -2290,16 +2302,17 @@ def self.add_window_to_wall(surface:,
# Convert to 3D geometry; assign to surface
window_polygon = OpenStudio::Point3dVector.new
- if facade == Constants::FacadeFront
+ case facade
+ when Constants::FacadeFront
multx = 1
multy = 0
- elsif facade == Constants::FacadeBack
+ when Constants::FacadeBack
multx = -1
multy = 0
- elsif facade == Constants::FacadeLeft
+ when Constants::FacadeLeft
multx = 0
multy = -1
- elsif facade == Constants::FacadeRight
+ when Constants::FacadeRight
multx = 0
multy = 1
end
@@ -2458,7 +2471,8 @@ def self.get_attic_space(model:,
attic_height = (y_tot / 2.0) * roof_pitch + rim_joist_height # Roof always has same orientation
side_type = nil
- if roof_type == Constants::RoofTypeGable
+ case roof_type
+ when Constants::RoofTypeGable
roof_w_point = OpenStudio::Point3d.new(0, y_peak, average_ceiling_height * num_floors + attic_height)
roof_e_point = OpenStudio::Point3d.new(x, y_peak, average_ceiling_height * num_floors + attic_height)
polygon_w_roof = make_polygon(roof_w_point, roof_e_point, ne_point, nw_point)
@@ -2466,7 +2480,7 @@ def self.get_attic_space(model:,
polygon_s_wall = make_polygon(roof_w_point, nw_point, sw_point)
polygon_n_wall = make_polygon(roof_e_point, se_point, ne_point)
side_type = EPlus::SurfaceTypeWall
- elsif roof_type == Constants::RoofTypeHip
+ when Constants::RoofTypeHip
if y > 0
if x <= (y + y_rear)
roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear - x / 2.0, average_ceiling_height * num_floors + attic_height)
diff --git a/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb b/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
index 9b79b0e8b8..1e4e7b282b 100644
--- a/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
+++ b/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
@@ -394,7 +394,8 @@ def _set_measure_argument_values(hpxml_file, args)
args['apply_validation'] = true
# Base
- if ['base-sfd.xml'].include? hpxml_file
+ case hpxml_file
+ when 'base-sfd.xml'
args['simulation_control_timestep'] = 60
args['weather_station_epw_filepath'] = 'USA_CO_Denver.Intl.AP.725650_TMY3.epw'
args['site_type'] = HPXML::SiteTypeSuburban
@@ -669,10 +670,10 @@ def _set_measure_argument_values(hpxml_file, args)
args['pool_heater_type'] = HPXML::HeaterTypeElectricResistance
args['permanent_spa_present'] = false
args['permanent_spa_heater_type'] = HPXML::HeaterTypeElectricResistance
- elsif ['base-sfd2.xml'].include? hpxml_file
+ when 'base-sfd2.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfd.xml')
args['whole_sfa_or_mf_building_sim'] = true
- elsif ['base-sfa.xml'].include? hpxml_file
+ when 'base-sfa.xml'
args['geometry_unit_type'] = HPXML::ResidentialTypeSFA
args['geometry_unit_cfa'] = 1800.0
args['geometry_building_num_units'] = 3
@@ -686,13 +687,13 @@ def _set_measure_argument_values(hpxml_file, args)
args['window_area_left'] = 0
args['window_area_right'] = 0
args['air_leakage_type'] = HPXML::InfiltrationTypeUnitTotal
- elsif ['base-sfa2.xml'].include? hpxml_file
+ when 'base-sfa2.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfa.xml')
args['whole_sfa_or_mf_building_sim'] = true
- elsif ['base-sfa3.xml'].include? hpxml_file
+ when 'base-sfa3.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfa2.xml')
args['whole_sfa_or_mf_building_sim'] = true
- elsif ['base-mf.xml'].include? hpxml_file
+ when 'base-mf.xml'
args['geometry_unit_type'] = HPXML::ResidentialTypeApartment
args['geometry_unit_cfa'] = 900.0
args['geometry_foundation_type'] = HPXML::FoundationTypeBasementUnconditioned
@@ -717,16 +718,16 @@ def _set_measure_argument_values(hpxml_file, args)
args['ducts_number_of_return_registers'] = 1
args['door_area'] = 20.0
args['air_leakage_type'] = HPXML::InfiltrationTypeUnitTotal
- elsif ['base-mf2.xml'].include? hpxml_file
+ when 'base-mf2.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-mf.xml')
args['whole_sfa_or_mf_building_sim'] = true
- elsif ['base-mf3.xml'].include? hpxml_file
+ when 'base-mf3.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-mf2.xml')
args['whole_sfa_or_mf_building_sim'] = true
- elsif ['base-mf4.xml'].include? hpxml_file
+ when 'base-mf4.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-mf3.xml')
args['whole_sfa_or_mf_building_sim'] = true
- elsif ['base-sfd-header.xml'].include? hpxml_file
+ when 'base-sfd-header.xml'
args['software_info_program_used'] = 'Program'
args['software_info_program_version'] = '1'
args['schedules_unavailable_period_types'] = 'Vacancy, Power Outage'
@@ -742,13 +743,14 @@ def _set_measure_argument_values(hpxml_file, args)
args['emissions_fossil_fuel_units'] = 'kg/MBtu'
args['emissions_natural_gas_values'] = '2'
args['utility_bill_scenario_names'] = 'Bills'
- elsif ['base-sfd-header-no-duplicates.xml'].include? hpxml_file
+ when 'base-sfd-header-no-duplicates.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfd-header.xml')
args['whole_sfa_or_mf_building_sim'] = true
end
# Extras
- if ['extra-auto.xml'].include? hpxml_file
+ case hpxml_file
+ when 'extra-auto.xml'
args.delete('geometry_unit_num_occupants')
args.delete('ducts_supply_location')
args.delete('ducts_return_location')
@@ -760,20 +762,20 @@ def _set_measure_argument_values(hpxml_file, args)
args.delete('clothes_washer_location')
args.delete('clothes_dryer_location')
args.delete('refrigerator_location')
- elsif ['extra-auto-duct-locations.xml'].include? hpxml_file
+ when 'extra-auto-duct-locations.xml'
args['ducts_supply_location'] = HPXML::LocationAtticUnvented
args['ducts_return_location'] = HPXML::LocationAtticUnvented
- elsif ['extra-pv-roofpitch.xml'].include? hpxml_file
+ when 'extra-pv-roofpitch.xml'
args['pv_system_module_type'] = HPXML::PVModuleTypeStandard
args['pv_system_2_module_type'] = HPXML::PVModuleTypeStandard
args['pv_system_array_tilt'] = 'roofpitch'
args['pv_system_2_array_tilt'] = 'roofpitch+15'
- elsif ['extra-dhw-solar-latitude.xml'].include? hpxml_file
+ when 'extra-dhw-solar-latitude.xml'
args['solar_thermal_system_type'] = HPXML::SolarThermalSystemTypeHotWater
args['solar_thermal_collector_tilt'] = 'Latitude-15'
- elsif ['extra-second-refrigerator.xml'].include? hpxml_file
+ when 'extra-second-refrigerator.xml'
args['extra_refrigerator_location'] = HPXML::LocationConditionedSpace
- elsif ['extra-second-heating-system-portable-heater-to-heating-system.xml'].include? hpxml_file
+ when 'extra-second-heating-system-portable-heater-to-heating-system.xml'
args['heating_system_fuel'] = HPXML::FuelTypeElectricity
args['heating_system_heating_capacity'] = 48000.0
args['heating_system_fraction_heat_load_served'] = 0.75
@@ -783,7 +785,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['ducts_return_location'] = HPXML::LocationConditionedSpace
args['heating_system_2_type'] = HPXML::HVACTypeSpaceHeater
args['heating_system_2_heating_capacity'] = 16000.0
- elsif ['extra-second-heating-system-fireplace-to-heating-system.xml'].include? hpxml_file
+ when 'extra-second-heating-system-fireplace-to-heating-system.xml'
args['heating_system_type'] = HPXML::HVACTypeElectricResistance
args['heating_system_fuel'] = HPXML::FuelTypeElectricity
args['heating_system_heating_efficiency'] = 1.0
@@ -792,11 +794,11 @@ def _set_measure_argument_values(hpxml_file, args)
args['cooling_system_type'] = Constants::None
args['heating_system_2_type'] = HPXML::HVACTypeFireplace
args['heating_system_2_heating_capacity'] = 16000.0
- elsif ['extra-second-heating-system-boiler-to-heating-system.xml'].include? hpxml_file
+ when 'extra-second-heating-system-boiler-to-heating-system.xml'
args['heating_system_type'] = HPXML::HVACTypeBoiler
args['heating_system_fraction_heat_load_served'] = 0.75
args['heating_system_2_type'] = HPXML::HVACTypeBoiler
- elsif ['extra-second-heating-system-portable-heater-to-heat-pump.xml'].include? hpxml_file
+ when 'extra-second-heating-system-portable-heater-to-heat-pump.xml'
args['heating_system_type'] = Constants::None
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
@@ -810,7 +812,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['ducts_return_location'] = HPXML::LocationConditionedSpace
args['heating_system_2_type'] = HPXML::HVACTypeSpaceHeater
args['heating_system_2_heating_capacity'] = 16000.0
- elsif ['extra-second-heating-system-fireplace-to-heat-pump.xml'].include? hpxml_file
+ when 'extra-second-heating-system-fireplace-to-heat-pump.xml'
args['heating_system_type'] = Constants::None
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpMiniSplit
@@ -822,7 +824,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['heat_pump_fraction_heat_load_served'] = 0.75
args['heating_system_2_type'] = HPXML::HVACTypeFireplace
args['heating_system_2_heating_capacity'] = 16000.0
- elsif ['extra-second-heating-system-boiler-to-heat-pump.xml'].include? hpxml_file
+ when 'extra-second-heating-system-boiler-to-heat-pump.xml'
args['heating_system_type'] = Constants::None
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpGroundToAir
@@ -834,15 +836,15 @@ def _set_measure_argument_values(hpxml_file, args)
args['heat_pump_backup_fuel'] = HPXML::FuelTypeElectricity
args['heat_pump_fraction_heat_load_served'] = 0.75
args['heating_system_2_type'] = HPXML::HVACTypeBoiler
- elsif ['extra-enclosure-windows-shading.xml'].include? hpxml_file
+ when 'extra-enclosure-windows-shading.xml'
args['window_interior_shading_winter'] = 0.99
args['window_interior_shading_summer'] = 0.01
args['window_exterior_shading_winter'] = 0.9
args['window_exterior_shading_summer'] = 0.1
- elsif ['extra-enclosure-garage-partially-protruded.xml'].include? hpxml_file
+ when 'extra-enclosure-garage-partially-protruded.xml'
args['geometry_garage_width'] = 12
args['geometry_garage_protrusion'] = 0.5
- elsif ['extra-enclosure-garage-atticroof-conditioned.xml'].include? hpxml_file
+ when 'extra-enclosure-garage-atticroof-conditioned.xml'
args['geometry_garage_width'] = 30.0
args['geometry_garage_protrusion'] = 1.0
args['window_area_front'] = 12.0
@@ -853,7 +855,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['floor_over_garage_assembly_r'] = 39.3
args['ducts_supply_location'] = HPXML::LocationGarage
args['ducts_return_location'] = HPXML::LocationGarage
- elsif ['extra-enclosure-atticroof-conditioned-eaves-gable.xml'].include? hpxml_file
+ when 'extra-enclosure-atticroof-conditioned-eaves-gable.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
args['geometry_foundation_height'] = 0.0
args['geometry_foundation_height_above_grade'] = 0.0
@@ -864,26 +866,26 @@ def _set_measure_argument_values(hpxml_file, args)
args['geometry_eaves_depth'] = 2
args['ducts_supply_location'] = HPXML::LocationUnderSlab
args['ducts_return_location'] = HPXML::LocationUnderSlab
- elsif ['extra-enclosure-atticroof-conditioned-eaves-hip.xml'].include? hpxml_file
+ when 'extra-enclosure-atticroof-conditioned-eaves-hip.xml'
args['geometry_roof_type'] = Constants::RoofTypeHip
- elsif ['extra-gas-pool-heater-with-zero-kwh.xml'].include? hpxml_file
+ when 'extra-gas-pool-heater-with-zero-kwh.xml'
args['pool_present'] = true
args['pool_heater_type'] = HPXML::HeaterTypeGas
args['pool_heater_annual_kwh'] = 0
- elsif ['extra-gas-hot-tub-heater-with-zero-kwh.xml'].include? hpxml_file
+ when 'extra-gas-hot-tub-heater-with-zero-kwh.xml'
args['permanent_spa_present'] = true
args['permanent_spa_heater_type'] = HPXML::HeaterTypeGas
args['permanent_spa_heater_annual_kwh'] = 0
- elsif ['extra-no-rim-joists.xml'].include? hpxml_file
+ when 'extra-no-rim-joists.xml'
args.delete('geometry_rim_joist_height')
args.delete('rim_joist_assembly_r')
- elsif ['extra-iecc-zone-different-than-epw.xml'].include? hpxml_file
+ when 'extra-iecc-zone-different-than-epw.xml'
args['site_iecc_zone'] = '6B'
- elsif ['extra-state-code-different-than-epw.xml'].include? hpxml_file
+ when 'extra-state-code-different-than-epw.xml'
args['site_state_code'] = 'WY'
- elsif ['extra-time-zone-different-than-epw.xml'].include? hpxml_file
+ when 'extra-time-zone-different-than-epw.xml'
args['site_time_zone_utc_offset'] = '-6'
- elsif ['extra-emissions-fossil-fuel-factors.xml'].include? hpxml_file
+ when 'extra-emissions-fossil-fuel-factors.xml'
args['emissions_scenario_names'] = 'Scenario1, Scenario2'
args['emissions_types'] = 'CO2e, SO2'
args['emissions_electricity_units'] = "#{HPXML::EmissionsScenario::UnitsKgPerMWh}, #{HPXML::EmissionsScenario::UnitsLbPerMWh}"
@@ -894,7 +896,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['emissions_fuel_oil_values'] = '161.0, 0.0015'
args['emissions_coal_values'] = '211.1, 0.0020'
args['emissions_wood_values'] = '200.0, 0.0025'
- elsif ['extra-bills-fossil-fuel-rates.xml'].include? hpxml_file
+ when 'extra-bills-fossil-fuel-rates.xml'
args['utility_bill_scenario_names'] = 'Scenario1, Scenario2'
args['utility_bill_propane_fixed_charges'] = '1, 2'
args['utility_bill_propane_marginal_rates'] = '3, 4'
@@ -906,38 +908,38 @@ def _set_measure_argument_values(hpxml_file, args)
args['utility_bill_wood_marginal_rates'] = '14, 15'
args['utility_bill_wood_pellets_fixed_charges'] = '16, 17'
args['utility_bill_wood_pellets_marginal_rates'] = '18, 19'
- elsif ['extra-seasons-building-america.xml'].include? hpxml_file
+ when 'extra-seasons-building-america.xml'
args['hvac_control_heating_season_period'] = Constants::BuildingAmerica
args['hvac_control_cooling_season_period'] = Constants::BuildingAmerica
- elsif ['extra-ducts-crawlspace.xml'].include? hpxml_file
+ when 'extra-ducts-crawlspace.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 4
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4
args['ducts_supply_location'] = HPXML::LocationCrawlspace
args['ducts_return_location'] = HPXML::LocationCrawlspace
- elsif ['extra-ducts-attic.xml'].include? hpxml_file
+ when 'extra-ducts-attic.xml'
args['ducts_supply_location'] = HPXML::LocationAttic
args['ducts_return_location'] = HPXML::LocationAttic
- elsif ['extra-water-heater-crawlspace.xml'].include? hpxml_file
+ when 'extra-water-heater-crawlspace.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 4
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4
args['water_heater_location'] = HPXML::LocationCrawlspace
- elsif ['extra-water-heater-attic.xml'].include? hpxml_file
+ when 'extra-water-heater-attic.xml'
args['water_heater_location'] = HPXML::LocationAttic
- elsif ['extra-battery-crawlspace.xml'].include? hpxml_file
+ when 'extra-battery-crawlspace.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 4
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4
args['battery_present'] = true
args['battery_location'] = HPXML::LocationCrawlspace
- elsif ['extra-battery-attic.xml'].include? hpxml_file
+ when 'extra-battery-attic.xml'
args['battery_present'] = true
args['battery_location'] = HPXML::LocationAttic
- elsif ['extra-detailed-performance-autosize.xml'].include? hpxml_file
+ when 'extra-detailed-performance-autosize.xml'
args['heating_system_type'] = Constants::None
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
@@ -958,214 +960,202 @@ def _set_measure_argument_values(hpxml_file, args)
args['hvac_perf_data_cooling_max_speed_capacities'] = '1.0, 1.11'
args['hvac_perf_data_cooling_min_speed_cops'] = '4.47, 6.34'
args['hvac_perf_data_cooling_max_speed_cops'] = '2.71, 3.53'
- elsif ['extra-power-outage-periods.xml'].include? hpxml_file
+ when 'extra-power-outage-periods.xml'
args['schedules_unavailable_period_types'] = 'Power Outage, Power Outage'
args['schedules_unavailable_period_dates'] = 'Jan 1 - Jan 5, Jan 7 - Jan 9'
- elsif ['extra-sfa-atticroof-flat.xml'].include? hpxml_file
+ when 'extra-sfa-atticroof-flat.xml'
args['geometry_attic_type'] = HPXML::AtticTypeFlatRoof
args['ducts_supply_leakage_to_outside_value'] = 0.0
args['ducts_return_leakage_to_outside_value'] = 0.0
args['ducts_supply_location'] = HPXML::LocationBasementConditioned
args['ducts_return_location'] = HPXML::LocationBasementConditioned
- elsif ['extra-sfa-atticroof-conditioned-eaves-gable.xml'].include? hpxml_file
+ when 'extra-sfa-atticroof-conditioned-eaves-gable.xml'
args['geometry_unit_num_floors_above_grade'] = 2
args['geometry_attic_type'] = HPXML::AtticTypeConditioned
args['geometry_eaves_depth'] = 2
args['ducts_supply_location'] = HPXML::LocationConditionedSpace
args['ducts_return_location'] = HPXML::LocationConditionedSpace
- elsif ['extra-sfa-atticroof-conditioned-eaves-hip.xml'].include? hpxml_file
+ when 'extra-sfa-atticroof-conditioned-eaves-hip.xml'
args['geometry_roof_type'] = Constants::RoofTypeHip
- elsif ['extra-mf-eaves.xml'].include? hpxml_file
+ when 'extra-mf-eaves.xml'
args['geometry_eaves_depth'] = 2
- elsif ['extra-sfa-slab.xml'].include? hpxml_file
+ when 'extra-sfa-slab.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
args['geometry_foundation_height'] = 0.0
args['geometry_foundation_height_above_grade'] = 0.0
args.delete('foundation_wall_insulation_distance_to_bottom')
- elsif ['extra-sfa-vented-crawlspace.xml'].include? hpxml_file
+ when 'extra-sfa-vented-crawlspace.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceVented
args['geometry_foundation_height'] = 4.0
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4.0
- elsif ['extra-sfa-unvented-crawlspace.xml'].include? hpxml_file
+ when 'extra-sfa-unvented-crawlspace.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 4.0
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4.0
- elsif ['extra-sfa-conditioned-crawlspace.xml'].include? hpxml_file
+ when 'extra-sfa-conditioned-crawlspace.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceConditioned
args['geometry_foundation_height'] = 4.0
args['floor_over_foundation_assembly_r'] = 2.1
args['foundation_wall_insulation_distance_to_bottom'] = 4.0
- elsif ['extra-sfa-unconditioned-basement.xml'].include? hpxml_file
+ when 'extra-sfa-unconditioned-basement.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeBasementUnconditioned
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_r'] = 0
args['foundation_wall_insulation_distance_to_bottom'] = 0.0
- elsif ['extra-sfa-ambient.xml'].include? hpxml_file
+ when 'extra-sfa-ambient.xml'
args['geometry_unit_cfa'] = 900.0
args['geometry_foundation_type'] = HPXML::FoundationTypeAmbient
args.delete('geometry_rim_joist_height')
args['floor_over_foundation_assembly_r'] = 18.7
args.delete('rim_joist_assembly_r')
args['misc_plug_loads_other_annual_kwh'] = 1228.5
- elsif ['extra-sfa-rear-units.xml'].include? hpxml_file
+ when 'extra-sfa-rear-units.xml'
args['geometry_building_num_units'] = 4
- elsif ['extra-sfa-exterior-corridor.xml'].include? hpxml_file
+ when 'extra-sfa-exterior-corridor.xml'
args['geometry_building_num_units'] = 4
- elsif ['extra-sfa-slab-middle.xml',
- 'extra-sfa-vented-crawlspace-middle.xml',
- 'extra-sfa-unvented-crawlspace-middle.xml',
- 'extra-sfa-unconditioned-basement-middle.xml'].include? hpxml_file
+ when 'extra-sfa-slab-middle.xml', 'extra-sfa-vented-crawlspace-middle.xml',
+ 'extra-sfa-unvented-crawlspace-middle.xml', 'extra-sfa-unconditioned-basement-middle.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_right_wall_is_adiabatic'] = true
- elsif ['extra-sfa-slab-right.xml',
- 'extra-sfa-vented-crawlspace-right.xml',
- 'extra-sfa-unvented-crawlspace-right.xml',
- 'extra-sfa-unconditioned-basement-right.xml'].include? hpxml_file
+ when 'extra-sfa-slab-right.xml', 'extra-sfa-vented-crawlspace-right.xml',
+ 'extra-sfa-unvented-crawlspace-right.xml', 'extra-sfa-unconditioned-basement-right.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
- elsif ['extra-mf-atticroof-flat.xml'].include? hpxml_file
+ when 'extra-mf-atticroof-flat.xml'
args['geometry_attic_type'] = HPXML::AtticTypeFlatRoof
- elsif ['extra-mf-atticroof-vented.xml'].include? hpxml_file
+ when 'extra-mf-atticroof-vented.xml'
args['geometry_attic_type'] = HPXML::AtticTypeVented
- elsif ['extra-mf-slab.xml'].include? hpxml_file
+ when 'extra-mf-slab.xml'
args['geometry_building_num_units'] = 18
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
args['geometry_foundation_height'] = 0.0
args['geometry_foundation_height_above_grade'] = 0.0
args.delete('foundation_wall_insulation_distance_to_bottom')
- elsif ['extra-mf-vented-crawlspace.xml'].include? hpxml_file
+ when 'extra-mf-vented-crawlspace.xml'
args['geometry_building_num_units'] = 18
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceVented
args['geometry_foundation_height'] = 4.0
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4.0
- elsif ['extra-mf-unvented-crawlspace.xml'].include? hpxml_file
+ when 'extra-mf-unvented-crawlspace.xml'
args['geometry_building_num_units'] = 18
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 4.0
args['floor_over_foundation_assembly_r'] = 18.7
args['foundation_wall_insulation_distance_to_bottom'] = 4.0
- elsif ['extra-mf-ambient.xml'].include? hpxml_file
+ when 'extra-mf-ambient.xml'
args['geometry_unit_cfa'] = 450.0
args['geometry_foundation_type'] = HPXML::FoundationTypeAmbient
args.delete('geometry_rim_joist_height')
args['floor_over_foundation_assembly_r'] = 18.7
args.delete('rim_joist_assembly_r')
args['misc_plug_loads_other_annual_kwh'] = 1228.5
- elsif ['extra-mf-rear-units.xml'].include? hpxml_file
+ when 'extra-mf-rear-units.xml'
args['geometry_building_num_units'] = 18
- elsif ['extra-mf-exterior-corridor.xml'].include? hpxml_file
+ when 'extra-mf-exterior-corridor.xml'
args['geometry_building_num_units'] = 18
- elsif ['extra-mf-slab-left-bottom.xml',
- 'extra-mf-vented-crawlspace-left-bottom.xml',
- 'extra-mf-unvented-crawlspace-left-bottom.xml'].include? hpxml_file
+ when 'extra-mf-slab-left-bottom.xml', 'extra-mf-vented-crawlspace-left-bottom.xml',
+ 'extra-mf-unvented-crawlspace-left-bottom.xml'
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
- elsif ['extra-mf-slab-left-middle.xml',
- 'extra-mf-vented-crawlspace-left-middle.xml',
- 'extra-mf-unvented-crawlspace-left-middle.xml'].include? hpxml_file
+ when 'extra-mf-slab-left-middle.xml', 'extra-mf-vented-crawlspace-left-middle.xml',
+ 'extra-mf-unvented-crawlspace-left-middle.xml'
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['extra-mf-slab-left-top.xml',
- 'extra-mf-vented-crawlspace-left-top.xml',
- 'extra-mf-unvented-crawlspace-left-top.xml'].include? hpxml_file
+ when 'extra-mf-slab-left-top.xml', 'extra-mf-vented-crawlspace-left-top.xml',
+ 'extra-mf-unvented-crawlspace-left-top.xml'
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['extra-mf-slab-middle-bottom.xml',
- 'extra-mf-vented-crawlspace-middle-bottom.xml',
- 'extra-mf-unvented-crawlspace-middle-bottom.xml'].include? hpxml_file
+ when 'extra-mf-slab-middle-bottom.xml', 'extra-mf-vented-crawlspace-middle-bottom.xml',
+ 'extra-mf-unvented-crawlspace-middle-bottom.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
- elsif ['extra-mf-slab-middle-middle.xml',
- 'extra-mf-vented-crawlspace-middle-middle.xml',
- 'extra-mf-unvented-crawlspace-middle-middle.xml'].include? hpxml_file
+ when 'extra-mf-slab-middle-middle.xml', 'extra-mf-vented-crawlspace-middle-middle.xml',
+ 'extra-mf-unvented-crawlspace-middle-middle.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['extra-mf-slab-middle-top.xml',
- 'extra-mf-vented-crawlspace-middle-top.xml',
- 'extra-mf-unvented-crawlspace-middle-top.xml'].include? hpxml_file
+ when 'extra-mf-slab-middle-top.xml', 'extra-mf-vented-crawlspace-middle-top.xml',
+ 'extra-mf-unvented-crawlspace-middle-top.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['extra-mf-slab-right-bottom.xml',
- 'extra-mf-vented-crawlspace-right-bottom.xml',
- 'extra-mf-unvented-crawlspace-right-bottom.xml'].include? hpxml_file
+ when 'extra-mf-slab-right-bottom.xml', 'extra-mf-vented-crawlspace-right-bottom.xml',
+ 'extra-mf-unvented-crawlspace-right-bottom.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
- elsif ['extra-mf-slab-right-middle.xml',
- 'extra-mf-vented-crawlspace-right-middle.xml',
- 'extra-mf-unvented-crawlspace-right-middle.xml'].include? hpxml_file
+ when 'extra-mf-slab-right-middle.xml', 'extra-mf-vented-crawlspace-right-middle.xml',
+ 'extra-mf-unvented-crawlspace-right-middle.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['extra-mf-slab-right-top.xml',
- 'extra-mf-vented-crawlspace-right-top.xml',
- 'extra-mf-unvented-crawlspace-right-top.xml'].include? hpxml_file
+ when 'extra-mf-slab-right-top.xml', 'extra-mf-vented-crawlspace-right-top.xml',
+ 'extra-mf-unvented-crawlspace-right-top.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['extra-mf-slab-rear-units.xml',
- 'extra-mf-vented-crawlspace-rear-units.xml',
- 'extra-mf-unvented-crawlspace-rear-units.xml',
- 'extra-mf-slab-left-bottom-rear-units.xml',
- 'extra-mf-slab-left-middle-rear-units.xml',
- 'extra-mf-slab-left-top-rear-units.xml',
- 'extra-mf-slab-middle-bottom-rear-units.xml',
- 'extra-mf-slab-middle-middle-rear-units.xml',
- 'extra-mf-slab-middle-top-rear-units.xml',
- 'extra-mf-slab-right-bottom-rear-units.xml',
- 'extra-mf-slab-right-middle-rear-units.xml',
- 'extra-mf-slab-right-top-rear-units.xml',
- 'extra-mf-vented-crawlspace-left-bottom-rear-units.xml',
- 'extra-mf-vented-crawlspace-left-middle-rear-units.xml',
- 'extra-mf-vented-crawlspace-left-top-rear-units.xml',
- 'extra-mf-vented-crawlspace-middle-bottom-rear-units.xml',
- 'extra-mf-vented-crawlspace-middle-middle-rear-units.xml',
- 'extra-mf-vented-crawlspace-middle-top-rear-units.xml',
- 'extra-mf-vented-crawlspace-right-bottom-rear-units.xml',
- 'extra-mf-vented-crawlspace-right-middle-rear-units.xml',
- 'extra-mf-vented-crawlspace-right-top-rear-units.xml',
+ when 'extra-mf-slab-rear-units.xml',
+ 'extra-mf-vented-crawlspace-rear-units.xml',
+ 'extra-mf-unvented-crawlspace-rear-units.xml',
+ 'extra-mf-slab-left-bottom-rear-units.xml',
+ 'extra-mf-slab-left-middle-rear-units.xml',
+ 'extra-mf-slab-left-top-rear-units.xml',
+ 'extra-mf-slab-middle-bottom-rear-units.xml',
+ 'extra-mf-slab-middle-middle-rear-units.xml',
+ 'extra-mf-slab-middle-top-rear-units.xml',
+ 'extra-mf-slab-right-bottom-rear-units.xml',
+ 'extra-mf-slab-right-middle-rear-units.xml',
+ 'extra-mf-slab-right-top-rear-units.xml',
+ 'extra-mf-vented-crawlspace-left-bottom-rear-units.xml',
+ 'extra-mf-vented-crawlspace-left-middle-rear-units.xml',
+ 'extra-mf-vented-crawlspace-left-top-rear-units.xml',
+ 'extra-mf-vented-crawlspace-middle-bottom-rear-units.xml',
+ 'extra-mf-vented-crawlspace-middle-middle-rear-units.xml',
+ 'extra-mf-vented-crawlspace-middle-top-rear-units.xml',
+ 'extra-mf-vented-crawlspace-right-bottom-rear-units.xml',
+ 'extra-mf-vented-crawlspace-right-middle-rear-units.xml',
+ 'extra-mf-vented-crawlspace-right-top-rear-units.xml',
'extra-mf-unvented-crawlspace-left-bottom-rear-units.xml',
- 'extra-mf-unvented-crawlspace-left-middle-rear-units.xml',
+ 'extra-mf-unvented-crawlspace-left-middle-rear-units.xml',
'extra-mf-unvented-crawlspace-left-top-rear-units.xml',
'extra-mf-unvented-crawlspace-middle-bottom-rear-units.xml',
'extra-mf-unvented-crawlspace-middle-middle-rear-units.xml',
'extra-mf-unvented-crawlspace-middle-top-rear-units.xml',
'extra-mf-unvented-crawlspace-right-bottom-rear-units.xml',
'extra-mf-unvented-crawlspace-right-middle-rear-units.xml',
- 'extra-mf-unvented-crawlspace-right-top-rear-units.xml'].include? hpxml_file
+ 'extra-mf-unvented-crawlspace-right-top-rear-units.xml'
args['geometry_unit_front_wall_is_adiabatic'] = true
end
# Error
- if ['error-heating-system-and-heat-pump.xml'].include? hpxml_file
+ case hpxml_file
+ when 'error-heating-system-and-heat-pump.xml'
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
- elsif ['error-cooling-system-and-heat-pump.xml'].include? hpxml_file
+ when 'error-cooling-system-and-heat-pump.xml'
args['heating_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
- elsif ['error-sfd-conditioned-basement-zero-foundation-height.xml'].include? hpxml_file
+ when 'error-sfd-conditioned-basement-zero-foundation-height.xml'
args['geometry_foundation_height'] = 0.0
args.delete('foundation_wall_insulation_distance_to_bottom')
- elsif ['error-sfd-adiabatic-walls.xml'].include? hpxml_file
+ when 'error-sfd-adiabatic-walls.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
- elsif ['error-mf-conditioned-basement'].include? hpxml_file
+ when 'error-mf-conditioned-basement'
args['geometry_foundation_type'] = HPXML::FoundationTypeBasementConditioned
- elsif ['error-mf-conditioned-crawlspace'].include? hpxml_file
+ when 'error-mf-conditioned-crawlspace'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceConditioned
- elsif ['error-mf-bottom-crawlspace-zero-foundation-height.xml'].include? hpxml_file
+ when 'error-mf-bottom-crawlspace-zero-foundation-height.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 0.0
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
args.delete('foundation_wall_insulation_distance_to_bottom')
- elsif ['error-second-heating-system-but-no-primary-heating.xml'].include? hpxml_file
+ when 'error-second-heating-system-but-no-primary-heating.xml'
args['heating_system_type'] = Constants::None
args['heating_system_2_type'] = HPXML::HVACTypeFireplace
- elsif ['error-second-heating-system-ducted-with-ducted-primary-heating.xml'].include? hpxml_file
+ when 'error-second-heating-system-ducted-with-ducted-primary-heating.xml'
args['heating_system_type'] = Constants::None
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpMiniSplit
@@ -1173,119 +1163,119 @@ def _set_measure_argument_values(hpxml_file, args)
args['heat_pump_is_ducted'] = true
args['heat_pump_backup_type'] = HPXML::HeatPumpBackupTypeSeparate
args['heating_system_2_type'] = HPXML::HVACTypeFurnace
- elsif ['error-sfa-no-building-num-units.xml'].include? hpxml_file
+ when 'error-sfa-no-building-num-units.xml'
args.delete('geometry_building_num_units')
- elsif ['error-sfa-above-apartment.xml'].include? hpxml_file
+ when 'error-sfa-above-apartment.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
- elsif ['error-sfa-below-apartment.xml'].include? hpxml_file
+ when 'error-sfa-below-apartment.xml'
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
- elsif ['error-sfa-all-adiabatic-walls.xml'].include? hpxml_file
+ when 'error-sfa-all-adiabatic-walls.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_unit_front_wall_is_adiabatic'] = true
args['geometry_unit_back_wall_is_adiabatic'] = true
- elsif ['error-mf-no-building-num-units.xml'].include? hpxml_file
+ when 'error-mf-no-building-num-units.xml'
args.delete('geometry_building_num_units')
- elsif ['error-mf-all-adiabatic-walls.xml'].include? hpxml_file
+ when 'error-mf-all-adiabatic-walls.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_right_wall_is_adiabatic'] = true
args['geometry_unit_front_wall_is_adiabatic'] = true
args['geometry_unit_back_wall_is_adiabatic'] = true
- elsif ['error-mf-two-stories.xml'].include? hpxml_file
+ when 'error-mf-two-stories.xml'
args['geometry_unit_num_floors_above_grade'] = 2
- elsif ['error-mf-conditioned-attic.xml'].include? hpxml_file
+ when 'error-mf-conditioned-attic.xml'
args['geometry_attic_type'] = HPXML::AtticTypeConditioned
- elsif ['error-dhw-indirect-without-boiler.xml'].include? hpxml_file
+ when 'error-dhw-indirect-without-boiler.xml'
args['water_heater_type'] = HPXML::WaterHeaterTypeCombiStorage
- elsif ['error-conditioned-attic-with-one-floor-above-grade.xml'].include? hpxml_file
+ when 'error-conditioned-attic-with-one-floor-above-grade.xml'
args['geometry_attic_type'] = HPXML::AtticTypeConditioned
args['ceiling_assembly_r'] = 0.0
- elsif ['error-sfd-with-shared-system.xml'].include? hpxml_file
+ when 'error-sfd-with-shared-system.xml'
args['heating_system_type'] = "Shared #{HPXML::HVACTypeBoiler} w/ Baseboard"
- elsif ['error-rim-joist-height-but-no-assembly-r.xml'].include? hpxml_file
+ when 'error-rim-joist-height-but-no-assembly-r.xml'
args.delete('rim_joist_assembly_r')
- elsif ['error-rim-joist-assembly-r-but-no-height.xml'].include? hpxml_file
+ when 'error-rim-joist-assembly-r-but-no-height.xml'
args.delete('geometry_rim_joist_height')
- elsif ['error-unavailable-period-args-not-all-specified'].include? hpxml_file
+ when 'error-unavailable-period-args-not-all-specified'
args['schedules_unavailable_period_types'] = 'Vacancy'
- elsif ['error-unavailable-period-args-not-all-same-size.xml'].include? hpxml_file
+ when 'error-unavailable-period-args-not-all-same-size.xml'
args['schedules_unavailable_period_types'] = 'Vacancy, Power Outage'
args['schedules_unavailable_period_dates'] = 'Jan 1 - Jan 5, Jan 7 - Jan 9'
args['schedules_unavailable_period_window_natvent_availabilities'] = HPXML::ScheduleRegular
- elsif ['error-unavailable-period-window-natvent-invalid.xml'].include? hpxml_file
+ when 'error-unavailable-period-window-natvent-invalid.xml'
args['schedules_unavailable_period_types'] = 'Power Outage'
args['schedules_unavailable_period_dates'] = 'Jan 7 - Jan 9'
args['schedules_unavailable_period_window_natvent_availabilities'] = 'invalid'
- elsif ['error-heating-perf-data-not-all-specified.xml'].include? hpxml_file
+ when 'error-heating-perf-data-not-all-specified.xml'
args['hvac_perf_data_heating_outdoor_temperatures'] = '47.0'
- elsif ['error-heating-perf-data-not-all-same-size.xml'].include? hpxml_file
+ when 'error-heating-perf-data-not-all-same-size.xml'
args['hvac_perf_data_heating_outdoor_temperatures'] = '47.0'
args['hvac_perf_data_heating_min_speed_capacities'] = '10000, 4200'
args['hvac_perf_data_heating_max_speed_capacities'] = '36000, 24800'
args['hvac_perf_data_heating_min_speed_cops'] = '4.73, 1.84'
args['hvac_perf_data_heating_max_speed_cops'] = '3.44, 2.66'
- elsif ['error-cooling-perf-data-not-all-specified.xml'].include? hpxml_file
+ when 'error-cooling-perf-data-not-all-specified.xml'
args['hvac_perf_data_cooling_outdoor_temperatures'] = '95.0'
- elsif ['error-cooling-perf-data-not-all-same-size.xml'].include? hpxml_file
+ when 'error-cooling-perf-data-not-all-same-size.xml'
args['hvac_perf_data_cooling_outdoor_temperatures'] = '95.0'
args['hvac_perf_data_cooling_min_speed_capacities'] = '11700, 13200'
args['hvac_perf_data_cooling_max_speed_capacities'] = '36000, 40000'
args['hvac_perf_data_cooling_min_speed_cops'] = '4.47, 6.34'
args['hvac_perf_data_cooling_max_speed_cops'] = '2.71, 3.53'
- elsif ['error-emissions-args-not-all-specified.xml'].include? hpxml_file
+ when 'error-emissions-args-not-all-specified.xml'
args['emissions_scenario_names'] = 'Scenario1'
- elsif ['error-emissions-args-not-all-same-size.xml'].include? hpxml_file
+ when 'error-emissions-args-not-all-same-size.xml'
args['emissions_scenario_names'] = 'Scenario1'
args['emissions_types'] = 'CO2e,CO2e'
args['emissions_electricity_units'] = HPXML::EmissionsScenario::UnitsLbPerMWh
args['emissions_electricity_values_or_filepaths'] = '../../HPXMLtoOpenStudio/resources/data/cambium/LRMER_MidCase.csv'
- elsif ['error-emissions-natural-gas-args-not-all-specified.xml'].include? hpxml_file
+ when 'error-emissions-natural-gas-args-not-all-specified.xml'
args['emissions_natural_gas_values'] = '117.6'
- elsif ['error-bills-args-not-all-same-size.xml'].include? hpxml_file
+ when 'error-bills-args-not-all-same-size.xml'
args['utility_bill_scenario_names'] = 'Scenario1'
args['utility_bill_electricity_fixed_charges'] = '1'
args['utility_bill_electricity_marginal_rates'] = '2,2'
- elsif ['error-invalid-aspect-ratio.xml'].include? hpxml_file
+ when 'error-invalid-aspect-ratio.xml'
args['geometry_unit_aspect_ratio'] = -1
- elsif ['error-negative-foundation-height.xml'].include? hpxml_file
+ when 'error-negative-foundation-height.xml'
args['geometry_foundation_height'] = -8
- elsif ['error-too-many-floors.xml'].include? hpxml_file
+ when 'error-too-many-floors.xml'
args['geometry_unit_num_floors_above_grade'] = 7
- elsif ['error-invalid-garage-protrusion.xml'].include? hpxml_file
+ when 'error-invalid-garage-protrusion.xml'
args['geometry_garage_protrusion'] = 1.5
- elsif ['error-sfa-no-non-adiabatic-walls.xml'].include? hpxml_file
+ when 'error-sfa-no-non-adiabatic-walls.xml'
args['geometry_unit_left_wall_is_adiabatic'] = true
args['geometry_unit_front_wall_is_adiabatic'] = true
args['geometry_unit_back_wall_is_adiabatic'] = true
- elsif ['error-hip-roof-and-protruding-garage.xml'].include? hpxml_file
+ when 'error-hip-roof-and-protruding-garage.xml'
args['geometry_roof_type'] = Constants::RoofTypeHip
args['geometry_garage_width'] = 12
args['geometry_garage_protrusion'] = 0.5
- elsif ['error-protruding-garage-under-gable-roof.xml'].include? hpxml_file
+ when 'error-protruding-garage-under-gable-roof.xml'
args['geometry_unit_aspect_ratio'] = 0.5
args['geometry_garage_width'] = 12
args['geometry_garage_protrusion'] = 0.5
- elsif ['error-ambient-with-garage.xml'].include? hpxml_file
+ when 'error-ambient-with-garage.xml'
args['geometry_garage_width'] = 12
args['geometry_foundation_type'] = HPXML::FoundationTypeAmbient
- elsif ['error-invalid-door-area.xml'].include? hpxml_file
+ when 'error-invalid-door-area.xml'
args['door_area'] = -10
- elsif ['error-invalid-window-aspect-ratio.xml'].include? hpxml_file
+ when 'error-invalid-window-aspect-ratio.xml'
args['window_aspect_ratio'] = 0
- elsif ['error-garage-too-wide.xml'].include? hpxml_file
+ when 'error-garage-too-wide.xml'
args['geometry_garage_width'] = 72
- elsif ['error-garage-too-deep.xml'].include? hpxml_file
+ when 'error-garage-too-deep.xml'
args['geometry_garage_width'] = 12
args['geometry_garage_depth'] = 40
- elsif ['error-vented-attic-with-zero-floor-insulation.xml'].include? hpxml_file
+ when 'error-vented-attic-with-zero-floor-insulation.xml'
args['ceiling_assembly_r'] = 0
- elsif ['error-different-software-program.xml'].include? hpxml_file
+ when 'error-different-software-program.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfd-header.xml')
args['software_info_program_used'] = 'Program2'
args['software_info_program_version'] = '2'
args['emissions_scenario_names'] = 'Emissions2'
args['utility_bill_scenario_names'] = 'Bills2'
- elsif ['error-different-simulation-control.xml'].include? hpxml_file
+ when 'error-different-simulation-control.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfd-header.xml')
args['simulation_control_timestep'] = 10
args['simulation_control_run_period'] = 'Jan 2 - Dec 30'
@@ -1293,63 +1283,64 @@ def _set_measure_argument_values(hpxml_file, args)
args['simulation_control_temperature_capacitance_multiplier'] = 2.0
args['emissions_scenario_names'] = 'Emissions2'
args['utility_bill_scenario_names'] = 'Bills2'
- elsif ['error-same-emissions-scenario-name.xml'].include? hpxml_file
+ when 'error-same-emissions-scenario-name.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfd-header.xml')
args['emissions_electricity_values_or_filepaths'] = '2'
- elsif ['error-same-utility-bill-scenario-name.xml'].include? hpxml_file
+ when 'error-same-utility-bill-scenario-name.xml'
args['existing_hpxml_path'] = File.join(File.dirname(__FILE__), 'extra_files/base-sfd-header.xml')
args['utility_bill_electricity_fixed_charges'] = '13.0'
end
# Warning
- if ['warning-non-electric-heat-pump-water-heater.xml'].include? hpxml_file
+ case hpxml_file
+ when 'warning-non-electric-heat-pump-water-heater.xml'
args['water_heater_type'] = HPXML::WaterHeaterTypeHeatPump
args['water_heater_fuel_type'] = HPXML::FuelTypeNaturalGas
args['water_heater_efficiency'] = 2.3
- elsif ['warning-sfd-slab-non-zero-foundation-height.xml'].include? hpxml_file
+ when 'warning-sfd-slab-non-zero-foundation-height.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
args['geometry_foundation_height_above_grade'] = 0.0
- elsif ['warning-mf-bottom-slab-non-zero-foundation-height.xml'].include? hpxml_file
+ when 'warning-mf-bottom-slab-non-zero-foundation-height.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
args['geometry_foundation_height_above_grade'] = 0.0
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
- elsif ['warning-slab-non-zero-foundation-height-above-grade.xml'].include? hpxml_file
+ when 'warning-slab-non-zero-foundation-height-above-grade.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
args['geometry_foundation_height'] = 0.0
args.delete('foundation_wall_insulation_distance_to_bottom')
- elsif ['warning-vented-crawlspace-with-wall-and-ceiling-insulation.xml'].include? hpxml_file
+ when 'warning-vented-crawlspace-with-wall-and-ceiling-insulation.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceVented
args['geometry_foundation_height'] = 3.0
args['floor_over_foundation_assembly_r'] = 10
args['foundation_wall_insulation_distance_to_bottom'] = 0.0
args['foundation_wall_assembly_r'] = 10
- elsif ['warning-unvented-crawlspace-with-wall-and-ceiling-insulation.xml'].include? hpxml_file
+ when 'warning-unvented-crawlspace-with-wall-and-ceiling-insulation.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeCrawlspaceUnvented
args['geometry_foundation_height'] = 3.0
args['floor_over_foundation_assembly_r'] = 10
args['foundation_wall_insulation_distance_to_bottom'] = 0.0
args['foundation_wall_assembly_r'] = 10
- elsif ['warning-unconditioned-basement-with-wall-and-ceiling-insulation.xml'].include? hpxml_file
+ when 'warning-unconditioned-basement-with-wall-and-ceiling-insulation.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeBasementUnconditioned
args['floor_over_foundation_assembly_r'] = 10
args['foundation_wall_assembly_r'] = 10
- elsif ['warning-vented-attic-with-floor-and-roof-insulation.xml'].include? hpxml_file
+ when 'warning-vented-attic-with-floor-and-roof-insulation.xml'
args['geometry_attic_type'] = HPXML::AtticTypeVented
args['roof_assembly_r'] = 10
args['ducts_supply_location'] = HPXML::LocationAtticVented
args['ducts_return_location'] = HPXML::LocationAtticVented
- elsif ['warning-unvented-attic-with-floor-and-roof-insulation.xml'].include? hpxml_file
+ when 'warning-unvented-attic-with-floor-and-roof-insulation.xml'
args['geometry_attic_type'] = HPXML::AtticTypeUnvented
args['roof_assembly_r'] = 10
- elsif ['warning-conditioned-basement-with-ceiling-insulation.xml'].include? hpxml_file
+ when 'warning-conditioned-basement-with-ceiling-insulation.xml'
args['geometry_foundation_type'] = HPXML::FoundationTypeBasementConditioned
args['floor_over_foundation_assembly_r'] = 10
- elsif ['warning-conditioned-attic-with-floor-insulation.xml'].include? hpxml_file
+ when 'warning-conditioned-attic-with-floor-insulation.xml'
args['geometry_unit_num_floors_above_grade'] = 2
args['geometry_attic_type'] = HPXML::AtticTypeConditioned
args['ducts_supply_location'] = HPXML::LocationConditionedSpace
args['ducts_return_location'] = HPXML::LocationConditionedSpace
- elsif ['warning-geothermal-loop-but-no-gshp.xml'].include? hpxml_file
+ when 'warning-geothermal-loop-but-no-gshp.xml'
args['geothermal_loop_configuration'] = HPXML::GeothermalLoopLoopConfigurationVertical
end
end
diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml
index f5c9ff526c..b4ac7fd8f4 100644
--- a/HPXMLtoOpenStudio/measure.xml
+++ b/HPXMLtoOpenStudio/measure.xml
@@ -3,8 +3,8 @@
3.1
hpxm_lto_openstudio
b1543b30-9465-45ff-ba04-1d1f85e763bc
- b3741dfe-4849-4f63-af36-a5e53e7e84bd
- 2024-11-18T17:56:23Z
+ c578c384-3ac2-4bc5-8764-763873807874
+ 2024-11-27T16:38:08Z
D8922A73
HPXMLtoOpenStudio
HPXML to OpenStudio Translator
@@ -189,7 +189,7 @@
airflow.rb
rb
resource
- 87ABF972
+ 9D8C57A2
battery.rb
@@ -213,7 +213,7 @@
constructions.rb
rb
resource
- B3B897EB
+ 75FBCCF4
data/Xing_okstate_0664D_13659_Table_A-3.csv
@@ -327,13 +327,13 @@
defaults.rb
rb
resource
- BCA4AD98
+ 3EB617E6
energyplus.rb
rb
resource
- 978EE36D
+ 071927F3
generator.rb
@@ -345,19 +345,19 @@
geometry.rb
rb
resource
- 6C147EFE
+ C9E92EE9
hotwater_appliances.rb
rb
resource
- 1EE4897F
+ FAD2E124
hpxml.rb
rb
resource
- 3F71DE61
+ 30969918
hpxml_schema/HPXML.xsd
@@ -375,7 +375,7 @@
hpxml_schematron/EPvalidator.xml
xml
resource
- 94AE43FB
+ 105F837D
hpxml_schematron/iso-schematron.xsd
@@ -387,13 +387,13 @@
hvac.rb
rb
resource
- 0DF759D2
+ 901BE48C
hvac_sizing.rb
rb
resource
- C6F9CE12
+ B1744A25
internal_gains.rb
@@ -417,7 +417,7 @@
materials.rb
rb
resource
- 0E69FBCE
+ 23B30F2C
math.rb
@@ -441,13 +441,13 @@
misc_loads.rb
rb
resource
- 2DCA8614
+ DF088D8A
model.rb
rb
resource
- A578B92B
+ 8B91AD7C
output.rb
@@ -465,7 +465,7 @@
pv.rb
rb
resource
- 58457C1A
+ F8E8DDDD
schedule_files/battery.csv
@@ -591,7 +591,7 @@
schedules.rb
rb
resource
- 29DAE0EC
+ 467EB413
simcontrols.rb
@@ -615,7 +615,7 @@
utility_bills.rb
rb
resource
- 17195DD4
+ C87C3553
version.rb
@@ -627,7 +627,7 @@
waterheater.rb
rb
resource
- 6F8A18EC
+ 6D8EEB7D
weather.rb
@@ -639,7 +639,7 @@
xmlhelper.rb
rb
resource
- DA4456A1
+ B18A6A72
xmlvalidator.rb
@@ -735,7 +735,7 @@
test_validation.rb
rb
test
- CABF42C5
+ 95476C6B
test_water_heater.rb
diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb
index 16b83d830c..7a2df1d5d2 100644
--- a/HPXMLtoOpenStudio/resources/airflow.rb
+++ b/HPXMLtoOpenStudio/resources/airflow.rb
@@ -278,17 +278,18 @@ def self.set_wind_speed_correction(model, hpxml_bldg)
site_ap.ashrae_terrain_thickness = 270
site_ap.ashrae_terrain_exponent = 0.14
- if site.site_type == HPXML::SiteTypeRural
+ case site.site_type
+ when HPXML::SiteTypeRural
site_ap.site_terrain_multiplier = 0.85
site_ap.site_terrain_exponent = 0.20
site_ap.ashrae_site_terrain_thickness = 270 # Flat, open country
site_ap.ashrae_site_terrain_exponent = 0.14 # Flat, open country
- elsif site.site_type == HPXML::SiteTypeSuburban
+ when HPXML::SiteTypeSuburban
site_ap.site_terrain_multiplier = 0.67
site_ap.site_terrain_exponent = 0.25
site_ap.ashrae_site_terrain_thickness = 370 # Rough, wooded country, suburbs
site_ap.ashrae_site_terrain_exponent = 0.22 # Rough, wooded country, suburbs
- elsif site.site_type == HPXML::SiteTypeUrban
+ when HPXML::SiteTypeUrban
site_ap.site_terrain_multiplier = 0.47
site_ap.site_terrain_exponent = 0.35
site_ap.ashrae_site_terrain_thickness = 460 # Towns, city outskirts, center of large cities
@@ -297,11 +298,12 @@ def self.set_wind_speed_correction(model, hpxml_bldg)
# Mapping based on AIM-2 Model by Walker/Wilson
# Table 2: Estimates of Shelter Coefficient S_wo for No Flue (flue effect is handled later)
- if site.shielding_of_home == HPXML::ShieldingNormal
+ case site.shielding_of_home
+ when HPXML::ShieldingNormal
site_ap.aim2_shelter_coeff = 0.50 # Class 4: "Very heavy shielding, many large obstructions within one house height"
- elsif site.shielding_of_home == HPXML::ShieldingExposed
+ when HPXML::ShieldingExposed
site_ap.aim2_shelter_coeff = 0.90 # Class 2: "Light local shielding with few obstructions within two house heights"
- elsif site.shielding_of_home == HPXML::ShieldingWellShielded
+ when HPXML::ShieldingWellShielded
site_ap.aim2_shelter_coeff = 0.30 # Class 5: "Complete shielding, with large buildings immediately adjacent"
end
@@ -854,11 +856,12 @@ def self.check_duct_leakage(runner, hpxml_bldg)
if hvac_distribution.ducts.count { |d| !HPXML::conditioned_locations_this_unit.include?(d.duct_location) } == 0
# If ducts completely in conditioned space, issue warning if duct leakage to outside above a certain threshold (e.g., 5%)
issue_warning = false
- if units == HPXML::UnitsCFM25
+ case units
+ when HPXML::UnitsCFM25
issue_warning = true if sum_lto > 0.04 * cfa
- elsif units == HPXML::UnitsCFM50
+ when HPXML::UnitsCFM50
issue_warning = true if sum_lto > 0.06 * cfa
- elsif units == HPXML::UnitsPercent
+ when HPXML::UnitsPercent
issue_warning = true if sum_lto > 0.05
end
next unless issue_warning
@@ -867,11 +870,12 @@ def self.check_duct_leakage(runner, hpxml_bldg)
else
# If ducts in unconditioned space, issue warning if duct leakage to outside above a certain threshold (e.g., 40%)
issue_warning = false
- if units == HPXML::UnitsCFM25
+ case units
+ when HPXML::UnitsCFM25
issue_warning = true if sum_lto >= 0.32 * cfa
- elsif units == HPXML::UnitsCFM50
+ when HPXML::UnitsCFM50
issue_warning = true if sum_lto >= 0.48 * cfa
- elsif units == HPXML::UnitsPercent
+ when HPXML::UnitsPercent
issue_warning = true if sum_lto >= 0.4
end
next unless issue_warning
@@ -1984,18 +1988,20 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a
infil_program.addLine("Set f_operation = #{[vent_mech.hours_in_operation / 24.0, 0.0001].max}") # Operation, fraction of hour
infil_program.addLine("Set oa_cfm_ah = #{UnitConversions.convert(vent_mech.oa_unit_flow_rate, 'cfm', 'm^3/s')}")
- if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan
+ case vent_mech.cfis_addtl_runtime_operating_mode
+ when HPXML::CFISModeSupplementalFan
if vent_mech.cfis_supplemental_fan.oa_unit_flow_rate < vent_mech.average_unit_flow_rate
runner.registerWarning("CFIS supplemental fan '#{vent_mech.cfis_supplemental_fan.id}' is undersized (#{vent_mech.cfis_supplemental_fan.oa_unit_flow_rate} cfm) compared to the target hourly ventilation rate (#{vent_mech.average_unit_flow_rate} cfm).")
end
infil_program.addLine("Set suppl_fan_w = #{vent_mech.cfis_supplemental_fan.unit_fan_power}") # W, supplemental fan power
infil_program.addLine("Set oa_cfm_suppl = #{UnitConversions.convert(vent_mech.cfis_supplemental_fan.oa_unit_flow_rate, 'cfm', 'm^3/s')}")
- elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler
+ when HPXML::CFISModeAirHandler
infil_program.addLine("Set ah_fan_w = #{vent_mech.unit_fan_power}") # W, air handler fan power
end
infil_program.addLine("Set has_outdoor_air_control = #{vent_mech.cfis_has_outdoor_air_control ? 1 : 0}")
- if vent_mech.cfis_control_type == HPXML::CFISControlTypeTimer
+ case vent_mech.cfis_control_type
+ when HPXML::CFISControlTypeTimer
# Ventilation occurs at fixed intervals regardless of HVAC operation
# Calculate outdoor air ventilation
@@ -2007,7 +2013,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a
# Calculate additional fan energy
infil_program.addLine("Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})")
- elsif vent_mech.cfis_control_type == HPXML::CFISControlTypeOptimized
+ when HPXML::CFISControlTypeOptimized
# Ventilation optimized to make use of HVAC operation
infil_program.addLine("Set #{f_vent_only_mode_var.name} = 0")
@@ -2040,9 +2046,10 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a
infil_program.addLine(' If hr_oa_cfm_during_hvac > 0')
infil_program.addLine(' Set f_open_damper_ah = (hr_oa_cfm_during_hvac / hr_oa_cfm_during_hvac_avail) * fan_rtf_hvac')
infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)")
- if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply
+ case vent_mech.cfis_supplemental_fan.fan_type
+ when HPXML::MechVentTypeSupply
infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)')
- elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust
+ when HPXML::MechVentTypeExhaust
infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)')
end
infil_program.addLine(' EndIf')
@@ -2052,16 +2059,18 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a
infil_program.addLine(' Set hr_oa_cfm_addtl_needed = hr_oa_cfm_needed - hr_oa_cfm_during_hvac')
# Calculate hourly-average outdoor air ventilation that can be brought in during subsequent timesteps of the hour if needed
- if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler
+ case vent_mech.cfis_addtl_runtime_operating_mode
+ when HPXML::CFISModeAirHandler
infil_program.addLine(' Set hr_oa_cfm_addtl_needed = hr_oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_ah)')
- elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan
+ when HPXML::CFISModeSupplementalFan
infil_program.addLine(' Set hr_oa_cfm_addtl_needed = hr_oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_suppl)')
- elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeNone
+ when HPXML::CFISModeNone
infil_program.addLine(' Set hr_oa_cfm_addtl_needed = 0')
end
infil_program.addLine(' If hr_oa_cfm_addtl_needed > 0')
- if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler
+ case vent_mech.cfis_addtl_runtime_operating_mode
+ when HPXML::CFISModeAirHandler
# Air handler meets additional runtime requirement
# Calculate hourly-average available outdoor air ventilation during non-HVAC runtime
@@ -2078,7 +2087,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a
infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})")
infil_program.addLine(' EndIf')
- elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan
+ when HPXML::CFISModeSupplementalFan
# Supplemental fan meets additional runtime requirement
# Calculate hourly-average available outdoor air ventilation during non-HVAC runtime
@@ -2086,9 +2095,10 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a
# Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime
infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed')
- if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply
+ case vent_mech.cfis_supplemental_fan.fan_type
+ when HPXML::MechVentTypeSupply
infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (hr_oa_cfm_during_non_hvac / ZoneTimestep)')
- elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust
+ when HPXML::MechVentTypeExhaust
infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (hr_oa_cfm_during_non_hvac / ZoneTimestep)')
end
infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + hr_oa_cfm_during_non_hvac")
@@ -3057,11 +3067,12 @@ def self.create_ducts(model, hvac_distribution, spaces)
duct_leakage_value = leakage_to_outside[duct_side][0]
duct_leakage_units = leakage_to_outside[duct_side][1]
- if duct_leakage_units == HPXML::UnitsCFM25
+ case duct_leakage_units
+ when HPXML::UnitsCFM25
duct_leakage_cfm25 = duct_leakage_value
- elsif duct_leakage_units == HPXML::UnitsCFM50
+ when HPXML::UnitsCFM50
duct_leakage_cfm50 = duct_leakage_value
- elsif duct_leakage_units == HPXML::UnitsPercent
+ when HPXML::UnitsPercent
duct_leakage_frac = duct_leakage_value
else
fail "#{duct_side.capitalize} ducts exist but leakage was not specified for distribution system '#{hvac_distribution.id}'."
diff --git a/HPXMLtoOpenStudio/resources/constructions.rb b/HPXMLtoOpenStudio/resources/constructions.rb
index 36c34aca50..252409cd60 100644
--- a/HPXMLtoOpenStudio/resources/constructions.rb
+++ b/HPXMLtoOpenStudio/resources/constructions.rb
@@ -1544,13 +1544,15 @@ def self.apply_furniture(model, furniture_mass, spaces)
furnSolarAbsorptance = 0.6
furnSpecHeat = mat.cp
furnDensity = mat.rho
- if location == HPXML::LocationConditionedSpace
+
+ case location
+ when HPXML::LocationConditionedSpace
furnAreaFraction = furniture_mass.area_fraction
furnMass = mass_lb_per_sqft
- elsif location == HPXML::LocationBasementUnconditioned
+ when HPXML::LocationBasementUnconditioned
furnAreaFraction = 0.4
furnMass = mass_lb_per_sqft
- elsif location == HPXML::LocationGarage
+ when HPXML::LocationGarage
furnAreaFraction = 0.1
furnMass = 2.0
end
@@ -1686,11 +1688,14 @@ def self.get_wall_color_and_solar_absorptance_map
def self.get_gap_factor(install_grade, framing_factor, cavity_r)
if cavity_r <= 0
return 0 # Gap factor only applies when there is cavity insulation
- elsif install_grade == 1
+ end
+
+ case install_grade
+ when 1
return 0
- elsif install_grade == 2
+ when 2
return 0.02 * (1 - framing_factor)
- elsif install_grade == 3
+ when 3
return 0.05 * (1 - framing_factor)
end
@@ -1920,7 +1925,8 @@ def self.apply_kiva_initial_temperature(foundation, weather, hpxml_bldg, hpxml_h
else
# Space temperature assumptions from ASHRAE 152 - Duct Efficiency Calculations.xls, Zone temperatures
ground_temp = weather.data.ShallowGroundMonthlyTemps[sim_begin_month - 1]
- if interior_adjacent_to == HPXML::LocationBasementUnconditioned
+ case interior_adjacent_to
+ when HPXML::LocationBasementUnconditioned
if foundation_ceiling_insulated
# Insulated ceiling: 75% ground, 25% outdoor, 0% indoor
ground_weight, outdoor_weight, indoor_weight = 0.75, 0.25, 0.0
@@ -1932,7 +1938,7 @@ def self.apply_kiva_initial_temperature(foundation, weather, hpxml_bldg, hpxml_h
ground_weight, outdoor_weight, indoor_weight = 0.5, 0.2, 0.3
end
initial_temp = outdoor_temp * outdoor_weight + ground_temp * ground_weight + indoor_weight * indoor_temp
- elsif interior_adjacent_to == HPXML::LocationCrawlspaceVented
+ when HPXML::LocationCrawlspaceVented
if foundation_ceiling_insulated
# Insulated ceiling: 90% outdoor, 10% indoor
outdoor_weight, indoor_weight = 0.9, 0.1
@@ -1944,7 +1950,7 @@ def self.apply_kiva_initial_temperature(foundation, weather, hpxml_bldg, hpxml_h
outdoor_weight, indoor_weight = 0.5, 0.5
end
initial_temp = outdoor_temp * outdoor_weight + indoor_weight * indoor_temp
- elsif interior_adjacent_to == HPXML::LocationCrawlspaceUnvented
+ when HPXML::LocationCrawlspaceUnvented
if foundation_ceiling_insulated
# Insulated ceiling: 85% outdoor, 15% indoor
outdoor_weight, indoor_weight = 0.85, 0.15
@@ -1956,7 +1962,7 @@ def self.apply_kiva_initial_temperature(foundation, weather, hpxml_bldg, hpxml_h
outdoor_weight, indoor_weight = 0.4, 0.6
end
initial_temp = outdoor_temp * outdoor_weight + indoor_weight * indoor_temp
- elsif interior_adjacent_to == HPXML::LocationGarage
+ when HPXML::LocationGarage
initial_temp = outdoor_temp + 11.0
else
fail "Unhandled space: #{interior_adjacent_to}"
@@ -2036,14 +2042,14 @@ def self.apply_window_skylight_shading(model, window_or_skylight, sub_surface, s
esf_winter = window_or_skylight.exterior_shading_factor_winter.nil? ? 1.0 : window_or_skylight.exterior_shading_factor_winter
if window_or_skylight.is_a? HPXML::Window
# These inputs currently only pertain to windows (not skylights)
- if [HPXML::ExteriorShadingTypeExternalOverhangs,
- HPXML::ExteriorShadingTypeAwnings].include? window_or_skylight.exterior_shading_type
+ case window_or_skylight.exterior_shading_type
+ when HPXML::ExteriorShadingTypeExternalOverhangs, HPXML::ExteriorShadingTypeAwnings
if window_or_skylight.overhangs_depth.to_f > 0
# Explicitly modeling the overhangs, so don't double count the shading effect
esf_summer = 1.0
esf_winter = 1.0
end
- elsif [HPXML::ExteriorShadingTypeBuilding].include? window_or_skylight.exterior_shading_type
+ when HPXML::ExteriorShadingTypeBuilding
if hpxml_bldg.neighbor_buildings.size > 0
# Explicitly modeling neighboring building, so don't double count the shading effect
esf_summer = 1.0
@@ -2184,7 +2190,8 @@ def self.apply_wall_construction(runner,
fallback_mat_int_finish = Material.InteriorFinishMaterial(mat_int_finish.name, 0.1) # Try thin material
end
- if wall_type == HPXML::WallTypeWoodStud
+ case wall_type
+ when HPXML::WallTypeWoodStud
install_grade = 1
cavity_filled = true
@@ -2215,7 +2222,7 @@ def self.apply_wall_construction(runner,
radiant_barrier_grade,
solar_absorptance,
emittance)
- elsif wall_type == HPXML::WallTypeSteelStud
+ when HPXML::WallTypeSteelStud
install_grade = 1
cavity_filled = true
corr_factor = 0.45
@@ -2236,7 +2243,7 @@ def self.apply_wall_construction(runner,
constr_set.osb_thick_in, constr_set.rigid_r,
constr_set.mat_ext_finish, has_radiant_barrier, inside_film, outside_film,
radiant_barrier_grade, solar_absorptance, emittance)
- elsif wall_type == HPXML::WallTypeDoubleWoodStud
+ when HPXML::WallTypeDoubleWoodStud
install_grade = 1
is_staggered = false
@@ -2255,7 +2262,7 @@ def self.apply_wall_construction(runner,
has_radiant_barrier, inside_film, outside_film,
radiant_barrier_grade, solar_absorptance,
emittance)
- elsif wall_type == HPXML::WallTypeCMU
+ when HPXML::WallTypeCMU
density = 119.0 # lb/ft^3
furring_r = 0
furring_cavity_depth_in = 0 # in
@@ -2274,7 +2281,7 @@ def self.apply_wall_construction(runner,
constr_set.mat_int_finish, constr_set.osb_thick_in,
rigid_r, constr_set.mat_ext_finish, has_radiant_barrier, inside_film,
outside_film, radiant_barrier_grade, solar_absorptance, emittance)
- elsif wall_type == HPXML::WallTypeSIP
+ when HPXML::WallTypeSIP
sheathing_thick_in = 0.44
constr_sets = [
@@ -2290,7 +2297,7 @@ def self.apply_wall_construction(runner,
constr_set.osb_thick_in, constr_set.rigid_r,
constr_set.mat_ext_finish, has_radiant_barrier, inside_film, outside_film,
radiant_barrier_grade, solar_absorptance, emittance)
- elsif wall_type == HPXML::WallTypeICF
+ when HPXML::WallTypeICF
constr_sets = [
ICFConstructionSet.new(2.0, 4.0, 0.08, 0.0, 0.5, mat_int_finish, mat_ext_finish), # ICF w/4" concrete and 2" rigid ins layers
ICFConstructionSet.new(1.0, 1.0, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
@@ -2305,7 +2312,7 @@ def self.apply_wall_construction(runner,
has_radiant_barrier, inside_film, outside_film,
radiant_barrier_grade, solar_absorptance,
emittance)
- elsif [HPXML::WallTypeConcrete, HPXML::WallTypeBrick, HPXML::WallTypeAdobe, HPXML::WallTypeStrawBale, HPXML::WallTypeStone, HPXML::WallTypeLog].include? wall_type
+ when HPXML::WallTypeConcrete, HPXML::WallTypeBrick, HPXML::WallTypeAdobe, HPXML::WallTypeStrawBale, HPXML::WallTypeStone, HPXML::WallTypeLog
constr_sets = [
GenericConstructionSet.new(10.0, 0.5, mat_int_finish, mat_ext_finish), # w/R-10 rigid
GenericConstructionSet.new(0.0, 0.5, mat_int_finish, mat_ext_finish), # Standard
@@ -2313,22 +2320,23 @@ def self.apply_wall_construction(runner,
]
match, constr_set, layer_r = pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film)
- if wall_type == HPXML::WallTypeConcrete
+ case wall_type
+ when HPXML::WallTypeConcrete
thick_in = 6.0
base_mat = BaseMaterial.Concrete
- elsif wall_type == HPXML::WallTypeBrick
+ when HPXML::WallTypeBrick
thick_in = 8.0
base_mat = BaseMaterial.Brick
- elsif wall_type == HPXML::WallTypeAdobe
+ when HPXML::WallTypeAdobe
thick_in = 10.0
base_mat = BaseMaterial.Soil(12.0)
- elsif wall_type == HPXML::WallTypeStrawBale
+ when HPXML::WallTypeStrawBale
thick_in = 23.0
base_mat = BaseMaterial.StrawBale
- elsif wall_type == HPXML::WallTypeStone
+ when HPXML::WallTypeStone
thick_in = 6.0
base_mat = BaseMaterial.Stone
- elsif wall_type == HPXML::WallTypeLog
+ when HPXML::WallTypeLog
thick_in = 6.0
base_mat = BaseMaterial.Wood
end
@@ -2385,7 +2393,8 @@ def self.apply_floor_ceiling_construction(runner, model, surface, floor_id, floo
end
osb_thick_in = (is_ceiling ? 0.0 : 0.75)
- if floor_type == HPXML::FloorTypeWoodFrame
+ case floor_type
+ when HPXML::FloorTypeWoodFrame
install_grade = 1
constr_sets = [
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 50.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R50
@@ -2406,7 +2415,7 @@ def self.apply_floor_ceiling_construction(runner, model, surface, floor_id, floo
constr_set.osb_thick_in, constr_set.rigid_r, constr_int_finish_or_covering,
has_radiant_barrier, inside_film, outside_film, radiant_barrier_grade)
- elsif floor_type == HPXML::FloorTypeSteelFrame
+ when HPXML::FloorTypeSteelFrame
install_grade = 1
corr_factor = 0.45
osb_thick_in = (is_ceiling ? 0.0 : 0.75)
@@ -2428,7 +2437,7 @@ def self.apply_floor_ceiling_construction(runner, model, surface, floor_id, floo
constr_set.osb_thick_in, constr_set.rigid_r, constr_int_finish_or_covering,
has_radiant_barrier, inside_film, outside_film, radiant_barrier_grade)
- elsif floor_type == HPXML::FloorTypeSIP
+ when HPXML::FloorTypeSIP
constr_sets = [
SIPConstructionSet.new(16.0, 0.08, 0.0, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 16" SIP core
SIPConstructionSet.new(12.0, 0.08, 0.0, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 12" SIP core
@@ -2441,7 +2450,7 @@ def self.apply_floor_ceiling_construction(runner, model, surface, floor_id, floo
cavity_r, constr_set.thick_in, constr_set.framing_factor,
constr_set.mat_int_finish, constr_set.osb_thick_in, constr_set.rigid_r,
constr_set.mat_ext_finish, has_radiant_barrier, inside_film, outside_film, radiant_barrier_grade)
- elsif floor_type == HPXML::FloorTypeConcrete
+ when HPXML::FloorTypeConcrete
constr_sets = [
GenericConstructionSet.new(20.0, osb_thick_in, mat_int_finish_or_covering, nil), # w/R-20 rigid
GenericConstructionSet.new(10.0, osb_thick_in, mat_int_finish_or_covering, nil), # w/R-10 rigid
diff --git a/HPXMLtoOpenStudio/resources/defaults.rb b/HPXMLtoOpenStudio/resources/defaults.rb
index 5f84296aab..205e084b33 100644
--- a/HPXMLtoOpenStudio/resources/defaults.rb
+++ b/HPXMLtoOpenStudio/resources/defaults.rb
@@ -41,7 +41,7 @@ def self.apply(runner, hpxml, hpxml_bldg, weather, schedules_file: nil, convert_
end
# Check for presence of fuels once
- has_fuel = hpxml_bldg.has_fuels(hpxml.to_doc)
+ has_fuel = hpxml_bldg.has_fuels()
add_zones_spaces_if_needed(hpxml_bldg, unit_num)
@@ -652,7 +652,8 @@ def self.apply_building(hpxml_bldg, weather)
# Conductivity/diffusivity values come from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4813881 (with the exception of "unknown")
if hpxml_bldg.site.ground_conductivity.nil? && hpxml_bldg.site.ground_diffusivity.nil?
- if hpxml_bldg.site.soil_type == HPXML::SiteSoilTypeSand
+ case hpxml_bldg.site.soil_type
+ when HPXML::SiteSoilTypeSand
if hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeDry
hpxml_bldg.site.ground_conductivity = 0.2311 # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = 0.0097 # ft^2/hr
@@ -665,39 +666,40 @@ def self.apply_building(hpxml_bldg, weather)
end
hpxml_bldg.site.ground_conductivity_isdefaulted = true
hpxml_bldg.site.ground_diffusivity_isdefaulted = true
- elsif hpxml_bldg.site.soil_type == HPXML::SiteSoilTypeSilt || hpxml_bldg.site.soil_type == HPXML::SiteSoilTypeClay
- if hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeDry
+ when HPXML::SiteSoilTypeSilt, HPXML::SiteSoilTypeClay
+ case hpxml_bldg.site.moisture_type
+ when HPXML::SiteSoilMoistureTypeDry
hpxml_bldg.site.ground_conductivity = 0.2889 # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = 0.0120 # ft^2/hr
- elsif hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeWet
+ when HPXML::SiteSoilMoistureTypeWet
hpxml_bldg.site.ground_conductivity = 0.9821 # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = 0.0194 # ft^2/hr
- elsif hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeMixed
+ when HPXML::SiteSoilMoistureTypeMixed
hpxml_bldg.site.ground_conductivity = ((0.2889 + 0.9821) / 2.0).round(4) # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = ((0.0120 + 0.0194) / 2.0).round(4) # ft^2/hr
end
hpxml_bldg.site.ground_conductivity_isdefaulted = true
hpxml_bldg.site.ground_diffusivity_isdefaulted = true
- elsif hpxml_bldg.site.soil_type == HPXML::SiteSoilTypeLoam
+ when HPXML::SiteSoilTypeLoam
hpxml_bldg.site.ground_conductivity = 1.2132 # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = 0.0353 # ft^2/hr
-
hpxml_bldg.site.ground_conductivity_isdefaulted = true
hpxml_bldg.site.ground_diffusivity_isdefaulted = true
- elsif hpxml_bldg.site.soil_type == HPXML::SiteSoilTypeGravel
- if hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeDry
+ when HPXML::SiteSoilTypeGravel
+ case hpxml_bldg.site.moisture_type
+ when HPXML::SiteSoilMoistureTypeDry
hpxml_bldg.site.ground_conductivity = 0.2311 # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = 0.0097 # ft^2/hr
- elsif hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeWet
+ when HPXML::SiteSoilMoistureTypeWet
hpxml_bldg.site.ground_conductivity = 1.0399 # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = 0.0291 # ft^2/hr
- elsif hpxml_bldg.site.moisture_type == HPXML::SiteSoilMoistureTypeMixed
+ when HPXML::SiteSoilMoistureTypeMixed
hpxml_bldg.site.ground_conductivity = ((0.2311 + 1.0399) / 2.0).round(4) # Btu/hr-ft-F
hpxml_bldg.site.ground_diffusivity = ((0.0097 + 0.0291) / 2.0).round(4) # ft^2/hr
end
hpxml_bldg.site.ground_conductivity_isdefaulted = true
hpxml_bldg.site.ground_diffusivity_isdefaulted = true
- elsif hpxml_bldg.site.soil_type == HPXML::SiteSoilTypeUnknown
+ when HPXML::SiteSoilTypeUnknown
hpxml_bldg.site.ground_conductivity = 1.0 # ANSI/RESNET/ICC 301-2022 Addendum C
hpxml_bldg.site.ground_diffusivity = 0.0208
hpxml_bldg.site.ground_conductivity_isdefaulted = true
@@ -2008,20 +2010,21 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
hpxml_bldg.cooling_systems.each do |cooling_system|
next unless cooling_system.cooling_shr.nil?
- if cooling_system.cooling_system_type == HPXML::HVACTypeCentralAirConditioner
- if cooling_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case cooling_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner
+ case cooling_system.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
cooling_system.cooling_shr = 0.73
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
cooling_system.cooling_shr = 0.73
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
cooling_system.cooling_shr = 0.78
end
cooling_system.cooling_shr_isdefaulted = true
- elsif cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner ||
- cooling_system.cooling_system_type == HPXML::HVACTypePTAC
+ when HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC
cooling_system.cooling_shr = 0.65
cooling_system.cooling_shr_isdefaulted = true
- elsif cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
+ when HPXML::HVACTypeMiniSplitAirConditioner
cooling_system.cooling_shr = 0.73
cooling_system.cooling_shr_isdefaulted = true
end
@@ -2029,23 +2032,24 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
hpxml_bldg.heat_pumps.each do |heat_pump|
next unless heat_pump.cooling_shr.nil?
- if heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpAirToAir
- if heat_pump.compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpAirToAir
+ case heat_pump.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
heat_pump.cooling_shr = 0.73
- elsif heat_pump.compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
heat_pump.cooling_shr = 0.73
- elsif heat_pump.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
heat_pump.cooling_shr = 0.78
end
heat_pump.cooling_shr_isdefaulted = true
- elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit
+ when HPXML::HVACTypeHeatPumpMiniSplit
heat_pump.cooling_shr = 0.73
heat_pump.cooling_shr_isdefaulted = true
- elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
+ when HPXML::HVACTypeHeatPumpGroundToAir
heat_pump.cooling_shr = 0.73
heat_pump.cooling_shr_isdefaulted = true
- elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpPTHP ||
- heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpRoom
+ when HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom
heat_pump.cooling_shr = 0.65
heat_pump.cooling_shr_isdefaulted = true
end
@@ -2111,7 +2115,8 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
mini_split_ductless_watts_per_cfm = 0.07 # W/cfm
mini_split_ducted_watts_per_cfm = 0.18 # W/cfm
hpxml_bldg.heating_systems.each do |heating_system|
- if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
+ case heating_system.heating_system_type
+ when HPXML::HVACTypeFurnace
if heating_system.fan_watts_per_cfm.nil?
if (not heating_system.distribution_system.nil?) && (heating_system.distribution_system.air_type == HPXML::AirTypeGravity)
heating_system.fan_watts_per_cfm = 0.0
@@ -2122,15 +2127,13 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
end
heating_system.fan_watts_per_cfm_isdefaulted = true
end
- elsif [HPXML::HVACTypeStove].include? heating_system.heating_system_type
+ when HPXML::HVACTypeStove
if heating_system.fan_watts.nil?
heating_system.fan_watts = 40.0 # W
heating_system.fan_watts_isdefaulted = true
end
- elsif [HPXML::HVACTypeWallFurnace,
- HPXML::HVACTypeFloorFurnace,
- HPXML::HVACTypeSpaceHeater,
- HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
+ when HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace,
+ HPXML::HVACTypeSpaceHeater, HPXML::HVACTypeFireplace
if heating_system.fan_watts.nil?
heating_system.fan_watts = 0.0 # W/cfm, assume no fan power
heating_system.fan_watts_isdefaulted = true
@@ -2143,42 +2146,46 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
if (not cooling_system.attached_heating_system.nil?) && (not cooling_system.attached_heating_system.fan_watts_per_cfm.nil?)
cooling_system.fan_watts_per_cfm = cooling_system.attached_heating_system.fan_watts_per_cfm
cooling_system.fan_watts_per_cfm_isdefaulted = true
- elsif [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
- if cooling_system.cooling_efficiency_seer > 13.5 # HEScore assumption
- cooling_system.fan_watts_per_cfm = ecm_watts_per_cfm
- else
- cooling_system.fan_watts_per_cfm = psc_watts_per_cfm
- end
- cooling_system.fan_watts_per_cfm_isdefaulted = true
- elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
- if not cooling_system.distribution_system.nil?
- cooling_system.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
- else
- cooling_system.fan_watts_per_cfm = mini_split_ductless_watts_per_cfm
+ else
+ case cooling_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner
+ if cooling_system.cooling_efficiency_seer > 13.5 # HEScore assumption
+ cooling_system.fan_watts_per_cfm = ecm_watts_per_cfm
+ else
+ cooling_system.fan_watts_per_cfm = psc_watts_per_cfm
+ end
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
+ when HPXML::HVACTypeMiniSplitAirConditioner
+ if not cooling_system.distribution_system.nil?
+ cooling_system.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
+ else
+ cooling_system.fan_watts_per_cfm = mini_split_ductless_watts_per_cfm
+ end
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
+ when HPXML::HVACTypeEvaporativeCooler
+ # Depends on airflow rate, so defaulted in hvac_sizing.rb
end
- cooling_system.fan_watts_per_cfm_isdefaulted = true
- elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
- # Depends on airflow rate, so defaulted in hvac_sizing.rb
end
end
hpxml_bldg.heat_pumps.each do |heat_pump|
next unless heat_pump.fan_watts_per_cfm.nil?
- if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump.heat_pump_type
+ case heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpAirToAir
if heat_pump.heating_efficiency_hspf > 8.75 # HEScore assumption
heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
else
heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
end
heat_pump.fan_watts_per_cfm_isdefaulted = true
- elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpGroundToAir
if heat_pump.heating_efficiency_cop > 8.75 / 3.2 # HEScore assumption
heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
else
heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
end
heat_pump.fan_watts_per_cfm_isdefaulted = true
- elsif [HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpMiniSplit
if not heat_pump.distribution_system.nil?
heat_pump.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
else
@@ -2234,10 +2241,9 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
# Detailed HVAC performance
hpxml_bldg.cooling_systems.each do |cooling_system|
clg_ap = cooling_system.additional_properties
- if [HPXML::HVACTypeCentralAirConditioner,
- HPXML::HVACTypeMiniSplitAirConditioner,
- HPXML::HVACTypeRoomAirConditioner,
- HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
+ case cooling_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner,
+ HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC
if [HPXML::HVACTypeRoomAirConditioner,
HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
use_eer = true
@@ -2248,7 +2254,7 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
HVAC.set_fan_power_rated(cooling_system, use_eer)
HVAC.set_cool_curves_central_air_source(cooling_system, use_eer)
- elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
+ when HPXML::HVACTypeEvaporativeCooler
clg_ap.effectiveness = 0.72 # Assumption from HEScore
end
@@ -2263,10 +2269,9 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
heating_system.additional_properties.heat_rated_cfm_per_ton = HVAC.get_heat_cfm_per_ton(HPXML::HVACCompressorTypeSingleStage, true)
end
hpxml_bldg.heat_pumps.each do |heat_pump|
- if [HPXML::HVACTypeHeatPumpAirToAir,
- HPXML::HVACTypeHeatPumpMiniSplit,
- HPXML::HVACTypeHeatPumpPTHP,
- HPXML::HVACTypeHeatPumpRoom].include? heat_pump.heat_pump_type
+ case heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit,
+ HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom
if [HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? heat_pump.heat_pump_type
use_eer_cop = true
else
@@ -2277,7 +2282,7 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
HVAC.set_cool_curves_central_air_source(heat_pump, use_eer_cop)
HVAC.set_heat_curves_central_air_source(heat_pump, use_eer_cop)
- elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpGroundToAir
HVAC.set_heat_pump_temperatures(heat_pump, runner)
if heat_pump.geothermal_loop.nil?
@@ -2342,7 +2347,7 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
heat_pump.geothermal_loop.shank_spacing = (hp_ap.u_tube_spacing + hp_ap.pipe_od).round(2) # Distance from center of pipe to center of pipe
heat_pump.geothermal_loop.shank_spacing_isdefaulted = true
end
- elsif [HPXML::HVACTypeHeatPumpWaterLoopToAir].include? heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpWaterLoopToAir
HVAC.set_heat_pump_temperatures(heat_pump, runner)
end
@@ -2993,12 +2998,13 @@ def self.apply_hot_water_distribution(hpxml_bldg, schedules_file)
hot_water_distribution.pipe_r_value_isdefaulted = true
end
- if hot_water_distribution.system_type == HPXML::DHWDistTypeStandard
+ case hot_water_distribution.system_type
+ when HPXML::DHWDistTypeStandard
if hot_water_distribution.standard_piping_length.nil?
hot_water_distribution.standard_piping_length = get_std_pipe_length(has_uncond_bsmnt, has_cond_bsmnt, cfa, ncfl)
hot_water_distribution.standard_piping_length_isdefaulted = true
end
- elsif hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
+ when HPXML::DHWDistTypeRecirc
if hot_water_distribution.recirculation_piping_loop_length.nil?
hot_water_distribution.recirculation_piping_loop_length = get_recirc_loop_length(has_uncond_bsmnt, has_cond_bsmnt, cfa, ncfl)
hot_water_distribution.recirculation_piping_loop_length_isdefaulted = true
@@ -3023,7 +3029,8 @@ def self.apply_hot_water_distribution(hpxml_bldg, schedules_file)
if hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc || hot_water_distribution.has_shared_recirculation
schedules_file_includes_recirculation_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:HotWaterRecirculationPump].name))
recirc_control_type = hot_water_distribution.has_shared_recirculation ? hot_water_distribution.shared_recirculation_control_type : hot_water_distribution.recirculation_control_type
- if [HPXML::DHWRecircControlTypeNone, HPXML::DHWRecircControlTypeTimer].include?(recirc_control_type)
+ case recirc_control_type
+ when HPXML::DHWRecircControlTypeNone, HPXML::DHWRecircControlTypeTimer
if hot_water_distribution.recirculation_pump_weekday_fractions.nil? && !schedules_file_includes_recirculation_pump
hot_water_distribution.recirculation_pump_weekday_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_no_control"]['RecirculationPumpWeekdayScheduleFractions']
hot_water_distribution.recirculation_pump_weekday_fractions_isdefaulted = true
@@ -3032,7 +3039,7 @@ def self.apply_hot_water_distribution(hpxml_bldg, schedules_file)
hot_water_distribution.recirculation_pump_weekend_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_no_control"]['RecirculationPumpWeekendScheduleFractions']
hot_water_distribution.recirculation_pump_weekend_fractions_isdefaulted = true
end
- elsif [HPXML::DHWRecircControlTypeSensor, HPXML::DHWRecircControlTypeManual].include?(recirc_control_type)
+ when HPXML::DHWRecircControlTypeSensor, HPXML::DHWRecircControlTypeManual
if hot_water_distribution.recirculation_pump_weekday_fractions.nil? && !schedules_file_includes_recirculation_pump
hot_water_distribution.recirculation_pump_weekday_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_demand_control"]['RecirculationPumpWeekdayScheduleFractions']
hot_water_distribution.recirculation_pump_weekday_fractions_isdefaulted = true
@@ -3041,7 +3048,7 @@ def self.apply_hot_water_distribution(hpxml_bldg, schedules_file)
hot_water_distribution.recirculation_pump_weekend_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_demand_control"]['RecirculationPumpWeekendScheduleFractions']
hot_water_distribution.recirculation_pump_weekend_fractions_isdefaulted = true
end
- elsif [HPXML::DHWRecircControlTypeTemperature].include?(recirc_control_type)
+ when HPXML::DHWRecircControlTypeTemperature
if hot_water_distribution.recirculation_pump_weekday_fractions.nil? && !schedules_file_includes_recirculation_pump
hot_water_distribution.recirculation_pump_weekday_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_temperature_control"]['RecirculationPumpWeekdayScheduleFractions']
hot_water_distribution.recirculation_pump_weekday_fractions_isdefaulted = true
@@ -3809,7 +3816,8 @@ def self.apply_plug_loads(hpxml_bldg, schedules_file)
num_occ = hpxml_bldg.building_occupancy.number_of_residents
unit_type = hpxml_bldg.building_construction.residential_facility_type
hpxml_bldg.plug_loads.each do |plug_load|
- if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
+ case plug_load.plug_load_type
+ when HPXML::PlugLoadTypeOther
default_annual_kwh, default_sens_frac, default_lat_frac = get_residual_mels_values(cfa, num_occ, unit_type)
if plug_load.kwh_per_year.nil?
plug_load.kwh_per_year = default_annual_kwh
@@ -3836,7 +3844,7 @@ def self.apply_plug_loads(hpxml_bldg, schedules_file)
plug_load.monthly_multipliers = @default_schedules_csv_data[SchedulesFile::Columns[:PlugLoadsOther].name]['MonthlyScheduleMultipliers']
plug_load.monthly_multipliers_isdefaulted = true
end
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
+ when HPXML::PlugLoadTypeTelevision
default_annual_kwh, default_sens_frac, default_lat_frac = get_televisions_values(cfa, nbeds, num_occ, unit_type)
if plug_load.kwh_per_year.nil?
plug_load.kwh_per_year = default_annual_kwh
@@ -3863,7 +3871,7 @@ def self.apply_plug_loads(hpxml_bldg, schedules_file)
plug_load.monthly_multipliers = @default_schedules_csv_data[SchedulesFile::Columns[:PlugLoadsTV].name]['MonthlyScheduleMultipliers']
plug_load.monthly_multipliers_isdefaulted = true
end
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
+ when HPXML::PlugLoadTypeElectricVehicleCharging
default_annual_kwh = get_electric_vehicle_charging_annual_energy
if plug_load.kwh_per_year.nil?
plug_load.kwh_per_year = default_annual_kwh
@@ -3890,7 +3898,7 @@ def self.apply_plug_loads(hpxml_bldg, schedules_file)
plug_load.monthly_multipliers = @default_schedules_csv_data[SchedulesFile::Columns[:PlugLoadsVehicle].name]['MonthlyScheduleMultipliers']
plug_load.monthly_multipliers_isdefaulted = true
end
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
+ when HPXML::PlugLoadTypeWellPump
default_annual_kwh = get_detault_well_pump_annual_energy(cfa, nbeds_eq)
if plug_load.kwh_per_year.nil?
plug_load.kwh_per_year = default_annual_kwh
@@ -3934,7 +3942,8 @@ def self.apply_fuel_loads(hpxml_bldg, schedules_file)
cfa = hpxml_bldg.building_construction.conditioned_floor_area
nbeds_eq = hpxml_bldg.building_construction.additional_properties.equivalent_number_of_bedrooms
hpxml_bldg.fuel_loads.each do |fuel_load|
- if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
+ case fuel_load.fuel_load_type
+ when HPXML::FuelLoadTypeGrill
if fuel_load.therm_per_year.nil?
fuel_load.therm_per_year = get_gas_grill_annual_energy(cfa, nbeds_eq)
fuel_load.therm_per_year_isdefaulted = true
@@ -3960,7 +3969,7 @@ def self.apply_fuel_loads(hpxml_bldg, schedules_file)
fuel_load.monthly_multipliers = @default_schedules_csv_data[SchedulesFile::Columns[:FuelLoadsGrill].name]['MonthlyScheduleMultipliers']
fuel_load.monthly_multipliers_isdefaulted = true
end
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
+ when HPXML::FuelLoadTypeLighting
if fuel_load.therm_per_year.nil?
fuel_load.therm_per_year = get_detault_gas_lighting_annual_energy(cfa, nbeds_eq)
fuel_load.therm_per_year_isdefaulted = true
@@ -3986,7 +3995,7 @@ def self.apply_fuel_loads(hpxml_bldg, schedules_file)
fuel_load.monthly_multipliers = @default_schedules_csv_data[SchedulesFile::Columns[:FuelLoadsLighting].name]['MonthlyScheduleMultipliers']
fuel_load.monthly_multipliers_isdefaulted = true
end
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
+ when HPXML::FuelLoadTypeFireplace
if fuel_load.therm_per_year.nil?
fuel_load.therm_per_year = get_gas_fireplace_annual_energy(cfa, nbeds_eq)
fuel_load.therm_per_year_isdefaulted = true
@@ -4050,21 +4059,22 @@ def self.cleanup_zones_spaces(hpxml_bldg)
def self.get_azimuth_from_orientation(orientation)
return if orientation.nil?
- if orientation == HPXML::OrientationNorth
+ case orientation
+ when HPXML::OrientationNorth
return 0
- elsif orientation == HPXML::OrientationNortheast
+ when HPXML::OrientationNortheast
return 45
- elsif orientation == HPXML::OrientationEast
+ when HPXML::OrientationEast
return 90
- elsif orientation == HPXML::OrientationSoutheast
+ when HPXML::OrientationSoutheast
return 135
- elsif orientation == HPXML::OrientationSouth
+ when HPXML::OrientationSouth
return 180
- elsif orientation == HPXML::OrientationSouthwest
+ when HPXML::OrientationSouthwest
return 225
- elsif orientation == HPXML::OrientationWest
+ when HPXML::OrientationWest
return 270
- elsif orientation == HPXML::OrientationNorthwest
+ when HPXML::OrientationNorthwest
return 315
end
@@ -4110,13 +4120,14 @@ def self.get_equivalent_nbeds_for_operational_calculation(hpxml_bldg)
n_occs = hpxml_bldg.building_occupancy.number_of_residents
unit_type = hpxml_bldg.building_construction.residential_facility_type
# Relations below come from 2020 RECS weighted regressions between NBEDS and NHSHLDMEM (sample weights = NWEIGHT)
- if [HPXML::ResidentialTypeApartment].include? unit_type
+ case unit_type
+ when HPXML::ResidentialTypeApartment
return -1.36 + 1.49 * n_occs
- elsif [HPXML::ResidentialTypeSFA].include? unit_type
+ when HPXML::ResidentialTypeSFA
return -1.98 + 1.89 * n_occs
- elsif [HPXML::ResidentialTypeSFD].include? unit_type
+ when HPXML::ResidentialTypeSFD
return -2.19 + 2.08 * n_occs
- elsif [HPXML::ResidentialTypeManufactured].include? unit_type
+ when HPXML::ResidentialTypeManufactured
return -1.26 + 1.61 * n_occs
else
fail "Unexpected residential facility type: #{unit_type}."
@@ -4134,20 +4145,16 @@ def self.get_flue_or_chimney_in_conditioned_space(hpxml_bldg)
next if heating_system.heating_system_fuel == HPXML::FuelTypeElectricity
next unless HPXML::conditioned_locations_this_unit.include? heating_system.location
- if [HPXML::HVACTypeFurnace,
- HPXML::HVACTypeBoiler,
- HPXML::HVACTypeWallFurnace,
- HPXML::HVACTypeFloorFurnace,
- HPXML::HVACTypeStove,
- HPXML::HVACTypeSpaceHeater].include? heating_system.heating_system_type
+ case heating_system.heating_system_type
+ when HPXML::HVACTypeFurnace, HPXML::HVACTypeBoiler, HPXML::HVACTypeWallFurnace,
+ HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeStove, HPXML::HVACTypeSpaceHeater
if not heating_system.heating_efficiency_afue.nil?
next if heating_system.heating_efficiency_afue >= 0.89
elsif not heating_system.heating_efficiency_percent.nil?
next if heating_system.heating_efficiency_percent >= 0.89
end
-
return true
- elsif [HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
+ when HPXML::HVACTypeFireplace
return true
end
end
@@ -4726,11 +4733,14 @@ def self.get_mech_vent_fan_efficiency(vent_fan)
# Returns fan power in W/cfm, based on ANSI 301
if vent_fan.is_shared_system
return 1.00 # Table 4.2.2(1) Note (n)
- elsif [HPXML::MechVentTypeSupply, HPXML::MechVentTypeExhaust].include? vent_fan.fan_type
+ end
+
+ case vent_fan.fan_type
+ when HPXML::MechVentTypeSupply, HPXML::MechVentTypeExhaust
return 0.35
- elsif [HPXML::MechVentTypeBalanced].include? vent_fan.fan_type
+ when HPXML::MechVentTypeBalanced
return 0.70
- elsif [HPXML::MechVentTypeERV, HPXML::MechVentTypeHRV].include? vent_fan.fan_type
+ when HPXML::MechVentTypeERV, HPXML::MechVentTypeHRV
return 1.00
else
fail "Unexpected fan_type: '#{fan_type}'."
@@ -4788,27 +4798,28 @@ def self.get_infiltration_ach50(cfa, ncfl_ag, year_built, avg_ceiling_height, in
# Climate zone
c_iecc = nil
- if (iecc_cz == '1A') || (iecc_cz == '2A')
+ case iecc_cz
+ when '1A', '2A'
c_iecc = 0.4727
- elsif iecc_cz == '3A'
+ when '3A'
c_iecc = 0.2529
- elsif iecc_cz == '4A'
+ when '4A'
c_iecc = 0.3261
- elsif iecc_cz == '5A'
+ when '5A'
c_iecc = 0.1118
- elsif (iecc_cz == '6A') || (iecc_cz == '7')
+ when '6A', '7'
c_iecc = 0.0
- elsif (iecc_cz == '2B') || (iecc_cz == '3B')
+ when '2B', '3B'
c_iecc = -0.03755
- elsif (iecc_cz == '4B') || (iecc_cz == '5B')
+ when '4B', '5B'
c_iecc = -0.008774
- elsif iecc_cz == '6B'
+ when '6B'
c_iecc = 0.01944
- elsif iecc_cz == '3C'
+ when '3C'
c_iecc = 0.04827
- elsif iecc_cz == '4C'
+ when '4C'
c_iecc = 0.2584
- elsif iecc_cz == '8'
+ when '8'
c_iecc = -0.5119
else
fail "Unexpected IECC climate zone: #{c_iecc}"
@@ -4898,21 +4909,23 @@ def self.get_duct_effective_r_value(r_nominal, side, buried_level, f_rect)
if side == HPXML::DuctTypeSupply
# Equations derived from Table 13 in https://www.nrel.gov/docs/fy13osti/55876.pdf
# assuming 6-in supply diameter
- if buried_level == HPXML::DuctBuriedInsulationPartial
+ case buried_level
+ when HPXML::DuctBuriedInsulationPartial
return (4.28 + 0.65 * r_nominal).round(2)
- elsif buried_level == HPXML::DuctBuriedInsulationFull
+ when HPXML::DuctBuriedInsulationFull
return (6.22 + 0.89 * r_nominal).round(2)
- elsif buried_level == HPXML::DuctBuriedInsulationDeep
+ when HPXML::DuctBuriedInsulationDeep
return (13.41 + 0.63 * r_nominal).round(2)
end
elsif side == HPXML::DuctTypeReturn
# Equations derived from Table 13 in https://www.nrel.gov/docs/fy13osti/55876.pdf
# assuming 14-in return diameter
- if buried_level == HPXML::DuctBuriedInsulationPartial
+ case buried_level
+ when HPXML::DuctBuriedInsulationPartial
return (4.62 + 1.31 * r_nominal).round(2)
- elsif buried_level == HPXML::DuctBuriedInsulationFull
+ when HPXML::DuctBuriedInsulationFull
return (8.91 + 1.29 * r_nominal).round(2)
- elsif buried_level == HPXML::DuctBuriedInsulationDeep
+ when HPXML::DuctBuriedInsulationDeep
return (18.64 + 1.0 * r_nominal).round(2)
end
end
@@ -4926,14 +4939,19 @@ def self.get_duct_effective_r_value(r_nominal, side, buried_level, f_rect)
# @return [String] Water heater location (HPXML::LocationXXX)
def self.get_water_heater_location(hpxml_bldg, iecc_zone = nil)
# ANSI/RESNET/ICC 301-2022C
- if ['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C'].include? iecc_zone
+ case iecc_zone
+ when '1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C'
location_hierarchy = [HPXML::LocationGarage,
HPXML::LocationConditionedSpace]
- elsif ['4A', '4B', '4C', '5A', '5B', '5C', '6A', '6B', '6C', '7', '8'].include? iecc_zone
+ when '4A', '4B', '4C', '5A', '5B', '5C', '6A', '6B', '6C', '7', '8'
location_hierarchy = [HPXML::LocationBasementUnconditioned,
HPXML::LocationBasementConditioned,
HPXML::LocationConditionedSpace]
- elsif iecc_zone.nil?
+ else
+ if not iecc_zone.nil?
+ fail "Unexpected IECC zone: #{iecc_zone}."
+ end
+
location_hierarchy = [HPXML::LocationBasementConditioned,
HPXML::LocationBasementUnconditioned,
HPXML::LocationConditionedSpace]
@@ -5038,15 +5056,16 @@ def self.get_water_heater_tank_volume(fuel, nbeds, nbaths = nil)
end
if fuel != HPXML::FuelTypeElectricity # Non-electric tank WHs
- if nbeds <= 2
+ case nbeds
+ when 0, 1, 2
return 30.0
- elsif nbeds == 3
+ when 3
if nbaths <= 1.5
return 30.0
else
return 40.0
end
- elsif nbeds == 4
+ when 4
if nbaths <= 2.5
return 40.0
else
@@ -5056,27 +5075,28 @@ def self.get_water_heater_tank_volume(fuel, nbeds, nbaths = nil)
return 50.0
end
else
- if nbeds == 1
+ case nbeds
+ when 0, 1
return 30.0
- elsif nbeds == 2
+ when 2
if nbaths <= 1.5
return 30.0
else
return 40.0
end
- elsif nbeds == 3
+ when 3
if nbaths <= 1.5
return 40.0
else
return 50.0
end
- elsif nbeds == 4
+ when 4
if nbaths <= 2.5
return 50.0
else
return 66.0
end
- elsif nbeds == 5
+ when 5
return 66.0
else
return 80.0
@@ -5195,37 +5215,34 @@ def self.get_wall_solar_absorptance(wall)
def self.get_window_ufactor_shgc(window)
type = window.is_a?(HPXML::Window) ? 'window' : 'skylight'
- if window.glass_layers == HPXML::WindowLayersSinglePane
+ case window.glass_layers
+ when HPXML::WindowLayersSinglePane
n_panes = 1
- elsif window.glass_layers == HPXML::WindowLayersDoublePane
+ when HPXML::WindowLayersDoublePane
n_panes = 2
- elsif window.glass_layers == HPXML::WindowLayersTriplePane
+ when HPXML::WindowLayersTriplePane
n_panes = 3
- elsif window.glass_layers == HPXML::WindowLayersGlassBlock
+ when HPXML::WindowLayersGlassBlock
return [0.6, 0.6] # From https://www.federalregister.gov/documents/2016/06/17/2016-13547/energy-conservation-standards-for-manufactured-housing
end
- if [HPXML::WindowFrameTypeAluminum,
- HPXML::WindowFrameTypeMetal].include? window.frame_type
+ case window.frame_type
+ when HPXML::WindowFrameTypeAluminum, HPXML::WindowFrameTypeMetal
is_metal_frame = true
- elsif [HPXML::WindowFrameTypeWood,
- HPXML::WindowFrameTypeVinyl,
- HPXML::WindowFrameTypeFiberglass].include? window.frame_type
+ when HPXML::WindowFrameTypeWood, HPXML::WindowFrameTypeVinyl, HPXML::WindowFrameTypeFiberglass
is_metal_frame = false
else
fail "Unexpected #{type.downcase} frame type."
end
- if [HPXML::WindowGlassTypeClear,
- HPXML::WindowGlassTypeReflective].include? window.glass_type
+ case window.glass_type
+ when HPXML::WindowGlassTypeClear, HPXML::WindowGlassTypeReflective
glass_type = 'clear'
- elsif [HPXML::WindowGlassTypeTinted,
- HPXML::WindowGlassTypeTintedReflective].include? window.glass_type
+ when HPXML::WindowGlassTypeTinted, HPXML::WindowGlassTypeTintedReflective
glass_type = 'tinted'
- elsif [HPXML::WindowGlassTypeLowE,
- HPXML::WindowGlassTypeLowEHighSolarGain].include? window.glass_type
+ when HPXML::WindowGlassTypeLowE, HPXML::WindowGlassTypeLowEHighSolarGain
glass_type = 'low_e_insulating'
- elsif [HPXML::WindowGlassTypeLowELowSolarGain].include? window.glass_type
+ when HPXML::WindowGlassTypeLowELowSolarGain
glass_type = 'low_e_solar_control'
else
fail "Unexpected #{type.downcase} glass type."
@@ -5233,16 +5250,19 @@ def self.get_window_ufactor_shgc(window)
if window.glass_layers == HPXML::WindowLayersSinglePane
gas_fill = 'none'
- elsif [HPXML::WindowGasAir].include? window.gas_fill
- gas_fill = 'air'
- elsif [HPXML::WindowGasArgon,
+ else
+ case window.gas_fill
+ when HPXML::WindowGasAir
+ gas_fill = 'air'
+ when HPXML::WindowGasArgon,
HPXML::WindowGasKrypton,
HPXML::WindowGasXenon,
HPXML::WindowGasNitrogen,
- HPXML::WindowGasOther].include? window.gas_fill
- gas_fill = 'gas'
- else
- fail "Unexpected #{type.downcase} gas type."
+ HPXML::WindowGasOther
+ gas_fill = 'gas'
+ else
+ fail "Unexpected #{type.downcase} gas type."
+ end
end
# Lookup values
@@ -5300,8 +5320,9 @@ def self.get_window_ufactor_shgc(window)
# @param seer [Double] Cooling efficiency
# @return [String] Compressor type (HPXML::HVACCompressorTypeXXX)
def self.get_hvac_compressor_type(hvac_type, seer)
- if [HPXML::HVACTypeCentralAirConditioner,
- HPXML::HVACTypeHeatPumpAirToAir].include? hvac_type
+ case hvac_type
+ when HPXML::HVACTypeCentralAirConditioner,
+ HPXML::HVACTypeHeatPumpAirToAir
if seer <= 15
return HPXML::HVACCompressorTypeSingleStage
elsif seer <= 21
@@ -5309,13 +5330,13 @@ def self.get_hvac_compressor_type(hvac_type, seer)
elsif seer > 21
return HPXML::HVACCompressorTypeVariableSpeed
end
- elsif [HPXML::HVACTypeMiniSplitAirConditioner,
- HPXML::HVACTypeHeatPumpMiniSplit].include? hvac_type
+ when HPXML::HVACTypeMiniSplitAirConditioner,
+ HPXML::HVACTypeHeatPumpMiniSplit
return HPXML::HVACCompressorTypeVariableSpeed
- elsif [HPXML::HVACTypePTAC,
- HPXML::HVACTypeHeatPumpPTHP,
- HPXML::HVACTypeHeatPumpRoom,
- HPXML::HVACTypeRoomAirConditioner].include? hvac_type
+ when HPXML::HVACTypePTAC,
+ HPXML::HVACTypeHeatPumpPTHP,
+ HPXML::HVACTypeHeatPumpRoom,
+ HPXML::HVACTypeRoomAirConditioner
return HPXML::HVACCompressorTypeSingleStage
end
return
@@ -5545,9 +5566,10 @@ def self.get_cooling_setpoint(control_type, eri_version)
# @return [Array] Temperature (F), heating capacity retention at the temperature (frac)
def self.get_heating_capacity_retention(compressor_type, hspf = nil)
retention_temp = 5.0
- if [HPXML::HVACCompressorTypeSingleStage, HPXML::HVACCompressorTypeTwoStage].include? compressor_type
+ case compressor_type
+ when HPXML::HVACCompressorTypeSingleStage, HPXML::HVACCompressorTypeTwoStage
retention_fraction = 0.425
- elsif [HPXML::HVACCompressorTypeVariableSpeed].include? compressor_type
+ when HPXML::HVACCompressorTypeVariableSpeed
# Default maximum capacity maintenance based on NEEP data for all var speed heat pump types, if not provided
retention_fraction = (0.0461 * hspf + 0.1594).round(4)
end
@@ -5671,13 +5693,14 @@ def self.get_televisions_values(cfa, nbeds, num_occ = nil, unit_type = nil)
# - SFA: 13.3 + 251.3 * num_tv
# - MF: 11.4 + 250.7 * num_tv
# - MH: 12.6 + 287.5 * num_tv
- if unit_type == HPXML::ResidentialTypeSFD
+ case unit_type
+ when HPXML::ResidentialTypeSFD
annual_kwh = 334.0 + 92.2 * num_occ + 0.06 * cfa
- elsif unit_type == HPXML::ResidentialTypeSFA
+ when HPXML::ResidentialTypeSFA
annual_kwh = 283.9 + 80.1 * num_occ + 0.07 * cfa
- elsif unit_type == HPXML::ResidentialTypeApartment
+ when HPXML::ResidentialTypeApartment
annual_kwh = 190.3 + 81.0 * num_occ + 0.11 * cfa
- elsif unit_type == HPXML::ResidentialTypeManufactured
+ when HPXML::ResidentialTypeManufactured
annual_kwh = 99.9 + 129.6 * num_occ + 0.21 * cfa
end
end
diff --git a/HPXMLtoOpenStudio/resources/energyplus.rb b/HPXMLtoOpenStudio/resources/energyplus.rb
index 9b588d06ff..c8d5e79302 100644
--- a/HPXMLtoOpenStudio/resources/energyplus.rb
+++ b/HPXMLtoOpenStudio/resources/energyplus.rb
@@ -59,28 +59,25 @@ def self.fuel_type(hpxml_fuel)
# Name of fuel used as inputs to E+ objects
if hpxml_fuel.nil?
return FuelTypeNone
- elsif [HPXML::FuelTypeElectricity].include? hpxml_fuel
+ end
+
+ case hpxml_fuel
+ when HPXML::FuelTypeElectricity
return FuelTypeElectricity
- elsif [HPXML::FuelTypeNaturalGas].include? hpxml_fuel
+ when HPXML::FuelTypeNaturalGas
return FuelTypeNaturalGas
- elsif [HPXML::FuelTypeOil,
- HPXML::FuelTypeOil1,
- HPXML::FuelTypeOil2,
- HPXML::FuelTypeOil4,
- HPXML::FuelTypeOil5or6,
- HPXML::FuelTypeDiesel,
- HPXML::FuelTypeKerosene].include? hpxml_fuel
+ when HPXML::FuelTypeOil, HPXML::FuelTypeOil1, HPXML::FuelTypeOil2,
+ HPXML::FuelTypeOil4, HPXML::FuelTypeOil5or6, HPXML::FuelTypeDiesel,
+ HPXML::FuelTypeKerosene
return FuelTypeOil
- elsif [HPXML::FuelTypePropane].include? hpxml_fuel
+ when HPXML::FuelTypePropane
return FuelTypePropane
- elsif [HPXML::FuelTypeWoodCord].include? hpxml_fuel
+ when HPXML::FuelTypeWoodCord
return FuelTypeWoodCord
- elsif [HPXML::FuelTypeWoodPellets].include? hpxml_fuel
+ when HPXML::FuelTypeWoodPellets
return FuelTypeWoodPellets
- elsif [HPXML::FuelTypeCoal,
- HPXML::FuelTypeCoalAnthracite,
- HPXML::FuelTypeCoalBituminous,
- HPXML::FuelTypeCoke].include? hpxml_fuel
+ when HPXML::FuelTypeCoal, HPXML::FuelTypeCoalAnthracite,
+ HPXML::FuelTypeCoalBituminous, HPXML::FuelTypeCoke
return FuelTypeCoal
else
fail "Unexpected HPXML fuel '#{hpxml_fuel}'."
diff --git a/HPXMLtoOpenStudio/resources/geometry.rb b/HPXMLtoOpenStudio/resources/geometry.rb
index 36965be122..3f6304e199 100644
--- a/HPXMLtoOpenStudio/resources/geometry.rb
+++ b/HPXMLtoOpenStudio/resources/geometry.rb
@@ -1640,49 +1640,50 @@ def self.calculate_zone_volume(hpxml_bldg, location)
# @param location [String] the general HPXML location
# @return [Hash] Map of minimum temperature, indoor/outdoor/ground weights, duct regain factor
def self.get_temperature_scheduled_space_values(location)
- if location == HPXML::LocationOtherHeatedSpace
+ case location
+ when HPXML::LocationOtherHeatedSpace
# Average of indoor/outdoor temperatures with minimum of heating setpoint
return { temp_min: 68,
indoor_weight: 0.5,
outdoor_weight: 0.5,
ground_weight: 0.0,
f_regain: 0.0 }
- elsif location == HPXML::LocationOtherMultifamilyBufferSpace
+ when HPXML::LocationOtherMultifamilyBufferSpace
# Average of indoor/outdoor temperatures with minimum of 50 F
return { temp_min: 50,
indoor_weight: 0.5,
outdoor_weight: 0.5,
ground_weight: 0.0,
f_regain: 0.0 }
- elsif location == HPXML::LocationOtherNonFreezingSpace
+ when HPXML::LocationOtherNonFreezingSpace
# Floating with outdoor air temperature with minimum of 40 F
return { temp_min: 40,
indoor_weight: 0.0,
outdoor_weight: 1.0,
ground_weight: 0.0,
f_regain: 0.0 }
- elsif location == HPXML::LocationOtherHousingUnit
+ when HPXML::LocationOtherHousingUnit
# Indoor air temperature
return { temp_min: nil,
indoor_weight: 1.0,
outdoor_weight: 0.0,
ground_weight: 0.0,
f_regain: 0.0 }
- elsif location == HPXML::LocationExteriorWall
+ when HPXML::LocationExteriorWall
# Average of indoor/outdoor temperatures
return { temp_min: nil,
indoor_weight: 0.5,
outdoor_weight: 0.5,
ground_weight: 0.0,
f_regain: 0.5 } # From LBNL's "Technical Background for default values used for Forced Air Systems in Proposed ASHRAE Standard 152P"
- elsif location == HPXML::LocationUnderSlab
+ when HPXML::LocationUnderSlab
# Ground temperature
return { temp_min: nil,
indoor_weight: 0.0,
outdoor_weight: 0.0,
ground_weight: 1.0,
f_regain: 0.83 } # From LBNL's "Technical Background for default values used for Forced Air Systems in Proposed ASHRAE Standard 152P"
- elsif location == HPXML::LocationManufacturedHomeBelly
+ when HPXML::LocationManufacturedHomeBelly
# From LBNL's "Technical Background for default values used for Forced Air Systems in Proposed ASHRAE Standard 152P"
# 3.5 Manufactured House Belly Pan Temperatures
# FUTURE: Consider modeling the belly as a separate thermal zone so that we dynamically calculate temperatures.
diff --git a/HPXMLtoOpenStudio/resources/hotwater_appliances.rb b/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
index 6a6182a223..0a57a99138 100644
--- a/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
+++ b/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
@@ -1093,14 +1093,14 @@ def self.get_hwdist_recirc_pump_energy(hot_water_distribution, fixtures_usage_mu
# Annual electricity consumption factor for hot water recirculation system pumps
# Assume the fixtures_usage_multiplier only applies for Sensor/Manual control type.
if hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
- if [HPXML::DHWRecircControlTypeNone,
- HPXML::DHWRecircControlTypeTimer].include? hot_water_distribution.recirculation_control_type
+ case hot_water_distribution.recirculation_control_type
+ when HPXML::DHWRecircControlTypeNone, HPXML::DHWRecircControlTypeTimer
dist_pump_annual_kwh += (8.76 * hot_water_distribution.recirculation_pump_power)
- elsif [HPXML::DHWRecircControlTypeTemperature].include? hot_water_distribution.recirculation_control_type
+ when HPXML::DHWRecircControlTypeTemperature
dist_pump_annual_kwh += (1.46 * hot_water_distribution.recirculation_pump_power)
- elsif [HPXML::DHWRecircControlTypeSensor].include? hot_water_distribution.recirculation_control_type
+ when HPXML::DHWRecircControlTypeSensor
dist_pump_annual_kwh += (0.15 * hot_water_distribution.recirculation_pump_power * fixtures_usage_multiplier)
- elsif [HPXML::DHWRecircControlTypeManual].include? hot_water_distribution.recirculation_control_type
+ when HPXML::DHWRecircControlTypeManual
dist_pump_annual_kwh += (0.10 * hot_water_distribution.recirculation_pump_power * fixtures_usage_multiplier)
else
fail "Unexpected hot water distribution system recirculation type: '#{hot_water_distribution.recirculation_control_type}'."
@@ -1115,12 +1115,10 @@ def self.get_hwdist_recirc_pump_energy(hot_water_distribution, fixtures_usage_mu
# Assume the fixtures_usage_multiplier only applies for Sensor/Manual control type.
if hot_water_distribution.has_shared_recirculation
n_bdeq = hot_water_distribution.shared_recirculation_number_of_bedrooms_served
- if [HPXML::DHWRecircControlTypeNone,
- HPXML::DHWRecircControlTypeTimer,
- HPXML::DHWRecircControlTypeTemperature].include? hot_water_distribution.shared_recirculation_control_type
+ case hot_water_distribution.shared_recirculation_control_type
+ when HPXML::DHWRecircControlTypeNone, HPXML::DHWRecircControlTypeTimer, HPXML::DHWRecircControlTypeTemperature
op_hrs = 8760.0
- elsif [HPXML::DHWRecircControlTypeSensor,
- HPXML::DHWRecircControlTypeManual].include? hot_water_distribution.shared_recirculation_control_type
+ when HPXML::DHWRecircControlTypeSensor, HPXML::DHWRecircControlTypeManual
op_hrs = 730.0 * fixtures_usage_multiplier
else
fail "Unexpected hot water distribution system shared recirculation type: '#{hot_water_distribution.shared_recirculation_control_type}'."
@@ -1195,14 +1193,19 @@ def self.get_dist_waste_gpd(eri_version, nbeds, has_uncond_bsmnt, has_cond_bsmnt
# Table 4.2.2.5.2.11(2) Hot Water Distribution System Insulation Factors
sys_factor = nil
- if (hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc) && (hot_water_distribution.pipe_r_value < 3.0)
- sys_factor = 1.11
- elsif (hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc) && (hot_water_distribution.pipe_r_value >= 3.0)
- sys_factor = 1.0
- elsif (hot_water_distribution.system_type == HPXML::DHWDistTypeStandard) && (hot_water_distribution.pipe_r_value >= 3.0)
- sys_factor = 0.90
- elsif (hot_water_distribution.system_type == HPXML::DHWDistTypeStandard) && (hot_water_distribution.pipe_r_value < 3.0)
- sys_factor = 1.0
+ case hot_water_distribution.system_type
+ when HPXML::DHWDistTypeRecirc
+ if hot_water_distribution.pipe_r_value < 3.0
+ sys_factor = 1.11
+ elsif hot_water_distribution.pipe_r_value >= 3.0
+ sys_factor = 1.0
+ end
+ when HPXML::DHWDistTypeStandard
+ if hot_water_distribution.pipe_r_value >= 3.0
+ sys_factor = 0.90
+ elsif hot_water_distribution.pipe_r_value < 3.0
+ sys_factor = 1.0
+ end
end
if n_occ.nil? # Asset calculation
@@ -1213,9 +1216,10 @@ def self.get_dist_waste_gpd(eri_version, nbeds, has_uncond_bsmnt, has_cond_bsmnt
o_frac = 0.25
o_cd_eff = 0.0
- if hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
+ case hot_water_distribution.system_type
+ when HPXML::DHWDistTypeRecirc
p_ratio = hot_water_distribution.recirculation_branch_piping_length / 10.0
- elsif hot_water_distribution.system_type == HPXML::DHWDistTypeStandard
+ when HPXML::DHWDistTypeStandard
ref_pipe_l = Defaults.get_std_pipe_length(has_uncond_bsmnt, has_cond_bsmnt, cfa, ncfl)
p_ratio = hot_water_distribution.standard_piping_length / ref_pipe_l
end
@@ -1224,9 +1228,10 @@ def self.get_dist_waste_gpd(eri_version, nbeds, has_uncond_bsmnt, has_cond_bsmnt
s_w_gpd = (ref_w_gpd - ref_w_gpd * o_frac) * p_ratio * sys_factor # Eq. 4.2-13
# Table 4.2.2.5.2.11(3) Distribution system water use effectiveness
- if hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
+ case hot_water_distribution.system_type
+ when HPXML::DHWDistTypeRecirc
wd_eff = 0.1
- elsif hot_water_distribution.system_type == HPXML::DHWDistTypeStandard
+ when HPXML::DHWDistTypeStandard
wd_eff = 1.0
end
diff --git a/HPXMLtoOpenStudio/resources/hpxml.rb b/HPXMLtoOpenStudio/resources/hpxml.rb
index aa0242e034..02683908bb 100644
--- a/HPXMLtoOpenStudio/resources/hpxml.rb
+++ b/HPXMLtoOpenStudio/resources/hpxml.rb
@@ -660,40 +660,62 @@ def set_unique_hpxml_ids(hpxml_doc, last_building_only = false)
# Returns a hash with whether each fuel exists in the HPXML Building or Buildings
#
- # @param hpxml_doc [Oga::XML::Document] HPXML object as an XML document
# @param building_id [String] If provided, only search the single HPXML Building with the given ID
# @return [Hash] Map of HPXML::FuelTypeXXX => boolean
- def has_fuels(hpxml_doc, building_id = nil)
- has_fuels = {}
-
- fuel_element_names = ['HeatingSystemFuel',
- 'CoolingSystemFuel',
- 'HeatPumpFuel',
- 'BackupSystemFuel',
- 'FuelType',
- 'IntegratedHeatingSystemFuel',
- 'Heater/Type']
+ def has_fuels(building_id = nil)
+ has_fuel = {}
+ has_fuel[HPXML::FuelTypeElectricity] = true
HPXML::fossil_fuels.each do |fuel|
- has_fuels[fuel] = false
- fuel_element_names.each do |fuel_element_name|
- if fuel_element_name == 'Heater/Type' && fuel == HPXML::FuelTypeNaturalGas
- fuel_element_value = HPXML::HeaterTypeGas
- else
- fuel_element_value = fuel
+ has_fuel[fuel] = false
+
+ buildings.each do |hpxml_bldg|
+ next if (not building_id.nil?) && (hpxml_bldg.building_id != building_id)
+
+ # Check HVAC systems
+ hpxml_bldg.hvac_systems.each do |hvac_system|
+ if hvac_system.respond_to?(:heating_system_fuel) && hvac_system.heating_system_fuel == fuel
+ has_fuel[fuel] = true
+ end
+ if hvac_system.respond_to?(:cooling_system_fuel) && hvac_system.cooling_system_fuel == fuel
+ has_fuel[fuel] = true
+ end
+ if hvac_system.respond_to?(:heat_pump_fuel) && hvac_system.heat_pump_fuel == fuel
+ has_fuel[fuel] = true
+ end
+ if hvac_system.respond_to?(:backup_heating_fuel) && hvac_system.backup_heating_fuel == fuel
+ has_fuel[fuel] = true
+ end
+ if hvac_system.respond_to?(:integrated_heating_system_fuel) && hvac_system.integrated_heating_system_fuel == fuel
+ has_fuel[fuel] = true
+ end
end
- search_str = "/HPXML/Building[BuildingID/@id='#{building_id}']//#{fuel_element_name}[text() = '#{fuel_element_value}']"
- if building_id.nil?
- search_str = "/HPXML/Building//#{fuel_element_name}[text() = '#{fuel_element_value}']"
+
+ # Check other appliances
+ (hpxml_bldg.water_heating_systems +
+ hpxml_bldg.generators +
+ hpxml_bldg.clothes_dryers +
+ hpxml_bldg.cooking_ranges +
+ hpxml_bldg.fuel_loads).each do |appliance|
+ if appliance.fuel_type == fuel
+ has_fuel[fuel] = true
+ end
end
- if XMLHelper.has_element(hpxml_doc, search_str)
- has_fuels[fuel] = true
- break
+
+ # Check pool/spa heaters
+ if fuel == HPXML::FuelTypeNaturalGas
+ (hpxml_bldg.pools + hpxml_bldg.permanent_spas).each do |pool_or_spa|
+ if pool_or_spa.heater_type == HPXML::HeaterTypeGas
+ has_fuel[fuel] = true
+ end
+ end
end
+
+ break if has_fuel[fuel]
end
end
- return has_fuels
+ return has_fuel
end
# Object to store additional properties on an HPXML object that are not intended
@@ -1714,11 +1736,9 @@ def has_fuel_access
# Returns a hash with whether each fuel exists in the HPXML Building.
#
- # @param hpxml_doc [Oga::XML::Document] HPXML object as an XML document
# @return [Hash] Map of HPXML::FuelTypeXXX => boolean
- def has_fuels(hpxml_doc)
- # Returns a hash with whether each fuel exists in the HPXML Building
- return @parent_object.has_fuels(hpxml_doc, @building_id)
+ def has_fuels()
+ return @parent_object.has_fuels(@building_id)
end
# Returns the predominant heating fuel type (weighted by fraction of
@@ -2699,11 +2719,9 @@ def check_for_errors
# @param building [Oga::XML::Element] The current Building XML element
# @return [nil]
def to_doc(building)
- return if nil?
-
climate_and_risk_zones = XMLHelper.create_elements_as_needed(building, ['BuildingDetails', 'ClimateandRiskZones'])
-
@climate_zone_ieccs.to_doc(climate_and_risk_zones)
+ return if nil?
if not @weather_station_id.nil?
weather_station = XMLHelper.add_element(climate_and_risk_zones, 'WeatherStation')
@@ -3407,11 +3425,12 @@ def attached_floors
def to_location
return if @attic_type.nil?
- if [AtticTypeCathedral, AtticTypeConditioned, AtticTypeFlatRoof, AtticTypeBelowApartment].include? @attic_type
+ case @attic_type
+ when AtticTypeCathedral, AtticTypeConditioned, AtticTypeFlatRoof, AtticTypeBelowApartment
return LocationConditionedSpace
- elsif [AtticTypeUnvented].include? @attic_type
+ when AtticTypeUnvented
return LocationAtticUnvented
- elsif [AtticTypeVented].include? @attic_type
+ when AtticTypeVented
return LocationAtticVented
else
fail "Unexpected attic type: '#{@attic_type}'."
@@ -3450,12 +3469,13 @@ def to_doc(building)
XMLHelper.add_attribute(sys_id, 'id', @id)
if not @attic_type.nil?
attic_type_el = XMLHelper.add_element(attic, 'AtticType')
- if [AtticTypeFlatRoof, AtticTypeCathedral, AtticTypeBelowApartment].include? @attic_type
+ case @attic_type
+ when AtticTypeFlatRoof, AtticTypeCathedral, AtticTypeBelowApartment
XMLHelper.add_element(attic_type_el, @attic_type)
- elsif [AtticTypeUnvented].include? @attic_type
+ when AtticTypeUnvented
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
XMLHelper.add_element(attic_type_attic, 'Vented', false, :boolean)
- elsif [AtticTypeVented].include? @attic_type
+ when AtticTypeVented
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
XMLHelper.add_element(attic_type_attic, 'Vented', true, :boolean)
if not @vented_attic_sla.nil?
@@ -3467,7 +3487,7 @@ def to_doc(building)
XMLHelper.add_element(ventilation_rate, 'UnitofMeasure', UnitsACHNatural, :string)
XMLHelper.add_element(ventilation_rate, 'Value', @vented_attic_ach, :float)
end
- elsif [AtticTypeConditioned].include? @attic_type
+ when AtticTypeConditioned
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
XMLHelper.add_element(attic_type_attic, 'Conditioned', true, :boolean)
else
@@ -3648,21 +3668,22 @@ def attached_rim_joists
def to_location
return if @foundation_type.nil?
- if [FoundationTypeSlab, FoundationTypeAboveApartment].include? @foundation_type
+ case @foundation_type
+ when FoundationTypeSlab, FoundationTypeAboveApartment
return LocationConditionedSpace
- elsif [FoundationTypeAmbient].include? @foundation_type
+ when FoundationTypeAmbient
return LocationOutside
- elsif [FoundationTypeBasementConditioned].include? @foundation_type
+ when FoundationTypeBasementConditioned
return LocationBasementConditioned
- elsif [FoundationTypeBasementUnconditioned].include? @foundation_type
+ when FoundationTypeBasementUnconditioned
return LocationBasementUnconditioned
- elsif [FoundationTypeCrawlspaceUnvented].include? @foundation_type
+ when FoundationTypeCrawlspaceUnvented
return LocationCrawlspaceUnvented
- elsif [FoundationTypeCrawlspaceVented].include? @foundation_type
+ when FoundationTypeCrawlspaceVented
return LocationCrawlspaceVented
- elsif @foundation_type == FoundationTypeCrawlspaceConditioned
+ when FoundationTypeCrawlspaceConditioned
return LocationCrawlspaceConditioned
- elsif @foundation_type == FoundationTypeBellyAndWing
+ when FoundationTypeBellyAndWing
return LocationManufacturedHomeUnderBelly
else
fail "Unexpected foundation type: '#{@foundation_type}'."
@@ -3721,15 +3742,16 @@ def to_doc(building)
XMLHelper.add_attribute(sys_id, 'id', @id)
if not @foundation_type.nil?
foundation_type_el = XMLHelper.add_element(foundation, 'FoundationType')
- if [FoundationTypeSlab, FoundationTypeAmbient, FoundationTypeAboveApartment].include? @foundation_type
+ case @foundation_type
+ when FoundationTypeSlab, FoundationTypeAmbient, FoundationTypeAboveApartment
XMLHelper.add_element(foundation_type_el, @foundation_type)
- elsif [FoundationTypeBasementConditioned].include? @foundation_type
+ when FoundationTypeBasementConditioned
basement = XMLHelper.add_element(foundation_type_el, 'Basement')
XMLHelper.add_element(basement, 'Conditioned', true, :boolean)
- elsif [FoundationTypeBasementUnconditioned].include? @foundation_type
+ when FoundationTypeBasementUnconditioned
basement = XMLHelper.add_element(foundation_type_el, 'Basement')
XMLHelper.add_element(basement, 'Conditioned', false, :boolean)
- elsif [FoundationTypeCrawlspaceVented].include? @foundation_type
+ when FoundationTypeCrawlspaceVented
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
XMLHelper.add_element(crawlspace, 'Vented', true, :boolean)
if not @vented_crawlspace_sla.nil?
@@ -3737,13 +3759,13 @@ def to_doc(building)
XMLHelper.add_element(ventilation_rate, 'UnitofMeasure', UnitsSLA, :string)
XMLHelper.add_element(ventilation_rate, 'Value', @vented_crawlspace_sla, :float, @vented_crawlspace_sla_isdefaulted)
end
- elsif [FoundationTypeCrawlspaceUnvented].include? @foundation_type
+ when FoundationTypeCrawlspaceUnvented
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
XMLHelper.add_element(crawlspace, 'Vented', false, :boolean)
- elsif @foundation_type == FoundationTypeCrawlspaceConditioned
+ when FoundationTypeCrawlspaceConditioned
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
XMLHelper.add_element(crawlspace, 'Conditioned', true, :boolean)
- elsif @foundation_type == FoundationTypeBellyAndWing
+ when FoundationTypeBellyAndWing
belly_and_wing = XMLHelper.add_element(foundation_type_el, 'BellyAndWing')
XMLHelper.add_element(belly_and_wing, 'SkirtPresent', @belly_wing_skirt_present, :boolean, @belly_wing_skirt_present_isdefaulted) unless @belly_wing_skirt_present.nil?
else
@@ -7723,11 +7745,12 @@ def to_doc(building)
hvac_distribution = XMLHelper.add_element(hvac, 'HVACDistribution')
sys_id = XMLHelper.add_element(hvac_distribution, 'SystemIdentifier')
XMLHelper.add_attribute(sys_id, 'id', @id)
- distribution_system_type_el = XMLHelper.add_element(hvac_distribution, 'DistributionSystemType')
if [HVACDistributionTypeAir, HVACDistributionTypeHydronic].include? @distribution_system_type
+ distribution_system_type_el = XMLHelper.add_element(hvac_distribution, 'DistributionSystemType')
XMLHelper.add_element(distribution_system_type_el, @distribution_system_type)
XMLHelper.add_element(hvac_distribution, 'ConditionedFloorAreaServed', @conditioned_floor_area_served, :float) unless @conditioned_floor_area_served.nil?
elsif [HVACDistributionTypeDSE].include? @distribution_system_type
+ distribution_system_type_el = XMLHelper.add_element(hvac_distribution, 'DistributionSystemType')
XMLHelper.add_element(distribution_system_type_el, 'Other', @distribution_system_type, :string)
XMLHelper.add_element(hvac_distribution, 'AnnualHeatingDistributionSystemEfficiency', @annual_heating_dse, :float) unless @annual_heating_dse.nil?
XMLHelper.add_element(hvac_distribution, 'AnnualCoolingDistributionSystemEfficiency', @annual_cooling_dse, :float) unless @annual_cooling_dse.nil?
diff --git a/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml b/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml
index 0379fec462..f7db0334d9 100644
--- a/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml
+++ b/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml
@@ -18,6 +18,7 @@
Expected 0 or more element(s) for xpath: extension/EmissionsScenarios/EmissionsScenario
Expected 0 or more element(s) for xpath: extension/UtilityBillScenarios/UtilityBillScenario
Expected 0 or more element(s) for xpath: extension/UnavailablePeriods/UnavailablePeriod
+ Expected 0 or 1 element(s) for xpath: extension/WholeSFAorMFBuildingSimulation
extension/SchedulesFilePath has been replaced by /HPXML/Building/BuildingDetails/BuildingSummary/extension/SchedulesFilePath
extension/HVACSizingControl has been replaced by /HPXML/Building/BuildingDetails/BuildingSummary/extension/HVACSizingControl
diff --git a/HPXMLtoOpenStudio/resources/hvac.rb b/HPXMLtoOpenStudio/resources/hvac.rb
index 6775d0a7be..6dad4bdfd5 100644
--- a/HPXMLtoOpenStudio/resources/hvac.rb
+++ b/HPXMLtoOpenStudio/resources/hvac.rb
@@ -89,16 +89,12 @@ def self.apply_cooling_system(runner, model, weather, spaces, hpxml_bldg, hpxml_
end
sys_id = cooling_system.id
- if [HPXML::HVACTypeCentralAirConditioner,
- HPXML::HVACTypeRoomAirConditioner,
- HPXML::HVACTypeMiniSplitAirConditioner,
- HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
-
+ case cooling_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeRoomAirConditioner,
+ HPXML::HVACTypeMiniSplitAirConditioner, HPXML::HVACTypePTAC
airloop_map[sys_id] = apply_air_source_hvac_systems(model, runner, weather, cooling_system, heating_system, hvac_sequential_load_fracs,
conditioned_zone, hvac_unavailable_periods, schedules_file, hpxml_bldg, hpxml_header)
-
- elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
-
+ when HPXML::HVACTypeEvaporativeCooler
airloop_map[sys_id] = apply_evaporative_cooler(model, cooling_system, hvac_sequential_load_fracs, conditioned_zone, hvac_unavailable_periods,
hpxml_bldg.building_construction.number_of_units)
end
@@ -154,25 +150,16 @@ def self.apply_heating_system(runner, model, weather, spaces, hpxml_bldg, hpxml_
end
sys_id = heating_system.id
- if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
-
+ case heating_system.heating_system_type
+ when HPXML::HVACTypeFurnace
airloop_map[sys_id] = apply_air_source_hvac_systems(model, runner, weather, nil, heating_system, hvac_sequential_load_fracs,
conditioned_zone, hvac_unavailable_periods, schedules_file, hpxml_bldg, hpxml_header)
-
- elsif [HPXML::HVACTypeBoiler].include? heating_system.heating_system_type
-
+ when HPXML::HVACTypeBoiler
airloop_map[sys_id] = apply_boiler(model, runner, heating_system, hvac_sequential_load_fracs, conditioned_zone, hvac_unavailable_periods)
-
- elsif [HPXML::HVACTypeElectricResistance].include? heating_system.heating_system_type
-
+ when HPXML::HVACTypeElectricResistance
apply_electric_baseboard(model, heating_system, hvac_sequential_load_fracs, conditioned_zone, hvac_unavailable_periods)
-
- elsif [HPXML::HVACTypeStove,
- HPXML::HVACTypeSpaceHeater,
- HPXML::HVACTypeWallFurnace,
- HPXML::HVACTypeFloorFurnace,
- HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
-
+ when HPXML::HVACTypeStove, HPXML::HVACTypeSpaceHeater, HPXML::HVACTypeWallFurnace,
+ HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeFireplace
apply_unit_heater(model, heating_system, hvac_sequential_load_fracs, conditioned_zone, hvac_unavailable_periods)
end
@@ -223,24 +210,17 @@ def self.apply_heat_pump(runner, model, weather, spaces, hpxml_bldg, hpxml_heade
hvac_remaining_load_fracs[:clg] -= heat_pump.fraction_cool_load_served
sys_id = heat_pump.id
- if [HPXML::HVACTypeHeatPumpWaterLoopToAir].include? heat_pump.heat_pump_type
-
+ case heat_pump.heat_pump_type
+ when HPXML::HVACTypeHeatPumpWaterLoopToAir
airloop_map[sys_id] = apply_water_loop_to_air_heat_pump(model, heat_pump, hvac_sequential_load_fracs, conditioned_zone, hvac_unavailable_periods)
-
- elsif [HPXML::HVACTypeHeatPumpAirToAir,
- HPXML::HVACTypeHeatPumpMiniSplit,
- HPXML::HVACTypeHeatPumpPTHP,
- HPXML::HVACTypeHeatPumpRoom].include? heat_pump.heat_pump_type
-
+ when HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit,
+ HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom
airloop_map[sys_id] = apply_air_source_hvac_systems(model, runner, weather, heat_pump, heat_pump, hvac_sequential_load_fracs,
conditioned_zone, hvac_unavailable_periods, schedules_file, hpxml_bldg, hpxml_header)
-
- elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
-
+ when HPXML::HVACTypeHeatPumpGroundToAir
airloop_map[sys_id] = apply_ground_to_air_heat_pump(model, runner, weather, heat_pump, hvac_sequential_load_fracs,
conditioned_zone, hpxml_bldg.site.ground_conductivity, hpxml_bldg.site.ground_diffusivity,
hvac_unavailable_periods, hpxml_bldg.building_construction.number_of_units)
-
end
next if heat_pump.backup_system.nil?
@@ -291,21 +271,23 @@ def self.apply_air_source_hvac_systems(model, runner, weather, cooling_system, h
if not cooling_system.nil?
if cooling_system.is_a? HPXML::HeatPump
is_heatpump = true
- if cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpAirToAir
+ case cooling_system.heat_pump_type
+ when HPXML::HVACTypeHeatPumpAirToAir
obj_name = Constants::ObjectTypeAirSourceHeatPump
- elsif cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit
+ when HPXML::HVACTypeHeatPumpMiniSplit
obj_name = Constants::ObjectTypeMiniSplitHeatPump
- elsif cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpPTHP
+ when HPXML::HVACTypeHeatPumpPTHP
obj_name = Constants::ObjectTypePTHP
fan_watts_per_cfm = 0.0
- elsif cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpRoom
+ when HPXML::HVACTypeHeatPumpRoom
obj_name = Constants::ObjectTypeRoomHP
fan_watts_per_cfm = 0.0
else
fail "Unexpected heat pump type: #{cooling_system.heat_pump_type}."
end
elsif cooling_system.is_a? HPXML::CoolingSystem
- if cooling_system.cooling_system_type == HPXML::HVACTypeCentralAirConditioner
+ case cooling_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner
if heating_system.nil?
obj_name = Constants::ObjectTypeCentralAirConditioner
else
@@ -315,14 +297,14 @@ def self.apply_air_source_hvac_systems(model, runner, weather, cooling_system, h
fail "Fan powers for heating system '#{heating_system.id}' and cooling system '#{cooling_system.id}' are attached to a single distribution system and therefore must be the same."
end
end
- elsif [HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
+ when HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC
fan_watts_per_cfm = 0.0
if cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner
obj_name = Constants::ObjectTypeRoomAC
else
obj_name = Constants::ObjectTypePTAC
end
- elsif cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
+ when HPXML::HVACTypeMiniSplitAirConditioner
obj_name = Constants::ObjectTypeMiniSplitAirConditioner
else
fail "Unexpected cooling system type: #{cooling_system.cooling_system_type}."
@@ -1593,10 +1575,11 @@ def self.get_cooling_setpoints(hvac_control, has_ceiling_fan, year, weather, off
# @param compressor_type [TODO] TODO
# @return [TODO] TODO
def self.get_cool_cap_eir_ft_spec(compressor_type)
- if compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
cap_ft_spec = [[3.68637657, -0.098352478, 0.000956357, 0.005838141, -0.0000127, -0.000131702]]
eir_ft_spec = [[-3.437356399, 0.136656369, -0.001049231, -0.0079378, 0.000185435, -0.0001441]]
- elsif compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
cap_ft_spec = [[3.998418659, -0.108728222, 0.001056818, 0.007512314, -0.0000139, -0.000164716],
[3.466810106, -0.091476056, 0.000901205, 0.004163355, -0.00000919, -0.000110829]]
eir_ft_spec = [[-4.282911381, 0.181023691, -0.001357391, -0.026310378, 0.000333282, -0.000197405],
@@ -1610,17 +1593,18 @@ def self.get_cool_cap_eir_ft_spec(compressor_type)
# @param compressor_type [TODO] TODO
# @return [TODO] TODO
def self.get_cool_cap_eir_fflow_spec(compressor_type)
- if compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
# Single stage systems have PSC or constant torque ECM blowers, so the airflow rate is affected by the static pressure losses.
cap_fflow_spec = [[0.718664047, 0.41797409, -0.136638137]]
eir_fflow_spec = [[1.143487507, -0.13943972, -0.004047787]]
- elsif compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
# Most two stage systems have PSC or constant torque ECM blowers, so the airflow rate is affected by the static pressure losses.
cap_fflow_spec = [[0.655239515, 0.511655216, -0.166894731],
[0.618281092, 0.569060264, -0.187341356]]
eir_fflow_spec = [[1.639108268, -0.998953996, 0.359845728],
[1.570774717, -0.914152018, 0.343377302]]
- elsif compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
# Variable speed systems have constant flow ECM blowers, so the air handler can always achieve the design airflow rate by sacrificing blower power.
# So we assume that there is only one corresponding airflow rate for each compressor speed.
eir_fflow_spec = [[1, 0, 0]] * 2
@@ -1655,17 +1639,18 @@ def self.get_heat_cap_eir_ft_spec(compressor_type, heating_capacity_retention_te
# @param compressor_type [TODO] TODO
# @return [TODO] TODO
def self.get_heat_cap_eir_fflow_spec(compressor_type)
- if compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
# Single stage systems have PSC or constant torque ECM blowers, so the airflow rate is affected by the static pressure losses.
cap_fflow_spec = [[0.694045465, 0.474207981, -0.168253446]]
eir_fflow_spec = [[2.185418751, -1.942827919, 0.757409168]]
- elsif compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
# Most two stage systems have PSC or constant torque ECM blowers, so the airflow rate is affected by the static pressure losses.
cap_fflow_spec = [[0.741466907, 0.378645444, -0.119754733],
[0.76634609, 0.32840943, -0.094701495]]
eir_fflow_spec = [[2.153618211, -1.737190609, 0.584269478],
[2.001041353, -1.58869128, 0.587593517]]
- elsif compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
# Variable speed systems have constant flow ECM blowers, so the air handler can always achieve the design airflow rate by sacrificing blower power.
# So we assume that there is only one corresponding airflow rate for each compressor speed.
cap_fflow_spec = [[1, 0, 0]] * 3
@@ -1686,7 +1671,8 @@ def self.set_cool_curves_central_air_source(cooling_system, use_eer = false)
set_cool_c_d(cooling_system)
seer = cooling_system.cooling_efficiency_seer
- if cooling_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case cooling_system.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
clg_ap.cool_cap_ft_spec, clg_ap.cool_eir_ft_spec = get_cool_cap_eir_ft_spec(cooling_system.compressor_type)
if not use_eer
clg_ap.cool_rated_airflow_rate = clg_ap.cool_rated_cfm_per_ton[0]
@@ -1699,7 +1685,7 @@ def self.set_cool_curves_central_air_source(cooling_system, use_eer = false)
clg_ap.cool_eir_fflow_spec = [[1.0, 0.0, 0.0]]
end
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
clg_ap.cool_rated_airflow_rate = clg_ap.cool_rated_cfm_per_ton[-1]
clg_ap.cool_fan_speed_ratios = calc_fan_speed_ratios(clg_ap.cool_capacity_ratios, clg_ap.cool_rated_cfm_per_ton, clg_ap.cool_rated_airflow_rate)
clg_ap.cool_cap_ft_spec, clg_ap.cool_eir_ft_spec = get_cool_cap_eir_ft_spec(cooling_system.compressor_type)
@@ -1707,7 +1693,7 @@ def self.set_cool_curves_central_air_source(cooling_system, use_eer = false)
clg_ap.cool_rated_cops = [0.2773 * seer - 0.0018] # Regression based on inverse model
clg_ap.cool_rated_cops << clg_ap.cool_rated_cops[0] * 0.91 # COP ratio based on Dylan's data as seen in BEopt 2.8 options
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
clg_ap.cooling_capacity_retention_temperature = 82.0
clg_ap.cooling_capacity_retention_fraction = 1.033 # From NEEP data
clg_ap.cool_rated_airflow_rate = clg_ap.cool_rated_cfm_per_ton[-1]
@@ -1724,11 +1710,12 @@ def self.set_cool_curves_central_air_source(cooling_system, use_eer = false)
# @return [TODO] TODO
def self.get_cool_capacity_ratios(hvac_system)
# For each speed, ratio of capacity to nominal capacity
- if hvac_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case hvac_system.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
return [1.0]
- elsif hvac_system.compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
return [0.72, 1.0]
- elsif hvac_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
is_ducted = !hvac_system.distribution_system_idref.nil?
if is_ducted
return [0.394, 1.0]
@@ -1753,7 +1740,8 @@ def self.set_heat_curves_central_air_source(heating_system, use_cop = false)
set_heat_c_d(heating_system)
hspf = heating_system.heating_efficiency_hspf
- if heating_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case heating_system.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
heating_capacity_retention_temp, heating_capacity_retention_fraction = get_heating_capacity_retention(heating_system)
htg_ap.heat_cap_ft_spec, htg_ap.heat_eir_ft_spec = get_heat_cap_eir_ft_spec(heating_system.compressor_type, heating_capacity_retention_temp, heating_capacity_retention_fraction)
if not use_cop
@@ -1764,7 +1752,7 @@ def self.set_heat_curves_central_air_source(heating_system, use_cop = false)
htg_ap.heat_fan_speed_ratios = [1.0]
end
- elsif heating_system.compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
heating_capacity_retention_temp, heating_capacity_retention_fraction = get_heating_capacity_retention(heating_system)
htg_ap.heat_cap_ft_spec, htg_ap.heat_eir_ft_spec = get_heat_cap_eir_ft_spec(heating_system.compressor_type, heating_capacity_retention_temp, heating_capacity_retention_fraction)
htg_ap.heat_rated_airflow_rate = htg_ap.heat_rated_cfm_per_ton[-1]
@@ -1772,7 +1760,7 @@ def self.set_heat_curves_central_air_source(heating_system, use_cop = false)
htg_ap.heat_rated_cops = [0.0426 * hspf**2 - 0.0747 * hspf + 1.5374] # Regression based on inverse model
htg_ap.heat_rated_cops << htg_ap.heat_rated_cops[0] * 0.87 # COP ratio based on Dylan's data as seen in BEopt 2.8 options
- elsif heating_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
htg_ap.heat_rated_airflow_rate = htg_ap.heat_rated_cfm_per_ton[-1]
htg_ap.heat_capacity_ratios = get_heat_capacity_ratios(heating_system)
htg_ap.heat_fan_speed_ratios = calc_fan_speed_ratios(htg_ap.heat_capacity_ratios, htg_ap.heat_rated_cfm_per_ton, htg_ap.heat_rated_airflow_rate)
@@ -1889,11 +1877,12 @@ def self.set_cool_detailed_performance_data(heat_pump)
# @return [TODO] TODO
def self.get_heat_capacity_ratios(heat_pump)
# For each speed, ratio of capacity to nominal capacity
- if heat_pump.compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case heat_pump.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
return [1.0]
- elsif heat_pump.compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
return [0.72, 1.0]
- elsif heat_pump.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
is_ducted = !heat_pump.distribution_system_idref.nil?
if is_ducted
nominal_to_max_ratio = 0.972
@@ -1975,15 +1964,16 @@ def self.get_cool_cfm_per_ton(compressor_type, use_eer = false)
# @return [TODO] TODO
def self.get_heat_cfm_per_ton(compressor_type, use_cop_or_htg_sys = false)
# cfm/ton of rated capacity
- if compressor_type == HPXML::HVACCompressorTypeSingleStage
+ case compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
if not use_cop_or_htg_sys
return [384.1]
else
return [350]
end
- elsif compressor_type == HPXML::HVACCompressorTypeTwoStage
+ when HPXML::HVACCompressorTypeTwoStage
return [391.3333, 352.2]
- elsif compressor_type == HPXML::HVACCompressorTypeVariableSpeed
+ when HPXML::HVACCompressorTypeVariableSpeed
return [400.0, 400.0, 400.0]
else
fail 'Compressor type not supported.'
@@ -4430,16 +4420,19 @@ def self.set_cool_c_d(cooling_system)
if ((cooling_system.is_a? HPXML::CoolingSystem) && ([HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type)) ||
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? cooling_system.heat_pump_type))
clg_ap.cool_c_d = 0.22
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
- if cooling_system.cooling_efficiency_seer < 13.0
- clg_ap.cool_c_d = 0.20
- else
- clg_ap.cool_c_d = 0.07
+ else
+ case cooling_system.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
+ if cooling_system.cooling_efficiency_seer < 13.0
+ clg_ap.cool_c_d = 0.20
+ else
+ clg_ap.cool_c_d = 0.07
+ end
+ when HPXML::HVACCompressorTypeTwoStage
+ clg_ap.cool_c_d = 0.11
+ when HPXML::HVACCompressorTypeVariableSpeed
+ clg_ap.cool_c_d = 0.25
end
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeTwoStage
- clg_ap.cool_c_d = 0.11
- elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
- clg_ap.cool_c_d = 0.25
end
# PLF curve
@@ -4457,16 +4450,19 @@ def self.set_heat_c_d(heating_system)
# Degradation coefficient for heating
if (heating_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? heating_system.heat_pump_type)
htg_ap.heat_c_d = 0.22
- elsif heating_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
- if heating_system.heating_efficiency_hspf < 7.0
- htg_ap.heat_c_d = 0.20
- else
+ else
+ case heating_system.compressor_type
+ when HPXML::HVACCompressorTypeSingleStage
+ if heating_system.heating_efficiency_hspf < 7.0
+ htg_ap.heat_c_d = 0.20
+ else
+ htg_ap.heat_c_d = 0.11
+ end
+ when HPXML::HVACCompressorTypeTwoStage
htg_ap.heat_c_d = 0.11
+ when HPXML::HVACCompressorTypeVariableSpeed
+ htg_ap.heat_c_d = 0.25
end
- elsif heating_system.compressor_type == HPXML::HVACCompressorTypeTwoStage
- htg_ap.heat_c_d = 0.11
- elsif heating_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
- htg_ap.heat_c_d = 0.25
end
# PLF curve
@@ -4544,14 +4540,15 @@ def self.set_gshp_assumptions(heat_pump, weather)
end
pipe_diameter = geothermal_loop.pipe_diameter
# Pipe nominal size conversion to pipe outside diameter and inside diameter,
- # only pipe sizes <= 2" are used here with DR11 (dimension ratio),
- if pipe_diameter == 0.75 # 3/4" pipe
+ # only pipe sizes <= 2" are used here with DR11 (dimension ratio)
+ case pipe_diameter
+ when 0.75 # 3/4" pipe
hp_ap.pipe_od = 1.050 # in
hp_ap.pipe_id = 0.859 # in
- elsif pipe_diameter == 1.0 # 1" pipe
+ when 1.0 # 1" pipe
hp_ap.pipe_od = 1.315 # in
hp_ap.pipe_id = 1.076 # in
- elsif pipe_diameter == 1.25 # 1-1/4" pipe
+ when 1.25 # 1-1/4" pipe
hp_ap.pipe_od = 1.660 # in
hp_ap.pipe_id = 1.358 # in
else
@@ -4559,13 +4556,14 @@ def self.set_gshp_assumptions(heat_pump, weather)
end
hp_ap.u_tube_spacing_type = 'b'
# Calculate distance between pipes
- if hp_ap.u_tube_spacing_type == 'as'
+ case hp_ap.u_tube_spacing_type
+ when 'as'
# Two tubes, spaced 1/8” apart at the center of the borehole
hp_ap.u_tube_spacing = 0.125
- elsif hp_ap.u_tube_spacing_type == 'b'
+ when 'b'
# Two tubes equally spaced between the borehole edges
hp_ap.u_tube_spacing = 0.9661
- elsif hp_ap.u_tube_spacing_type == 'c'
+ when 'c'
# Both tubes placed against outer edge of borehole
hp_ap.u_tube_spacing = geothermal_loop.bore_diameter - 2 * hp_ap.pipe_od
end
diff --git a/HPXMLtoOpenStudio/resources/hvac_sizing.rb b/HPXMLtoOpenStudio/resources/hvac_sizing.rb
index 408e380b02..d2e76b1321 100644
--- a/HPXMLtoOpenStudio/resources/hvac_sizing.rb
+++ b/HPXMLtoOpenStudio/resources/hvac_sizing.rb
@@ -260,10 +260,11 @@ def self.process_site_calcs_and_design_temps(mj, weather, hpxml_bldg)
locations.uniq.each do |location|
next if [HPXML::LocationGround].include? location
- if [HPXML::LocationOutside, HPXML::LocationRoofDeck, HPXML::LocationManufacturedHomeUnderBelly].include? location
+ case location
+ when HPXML::LocationOutside, HPXML::LocationRoofDeck, HPXML::LocationManufacturedHomeUnderBelly
mj.cool_design_temps[location] = hpxml_bldg.header.manualj_cooling_design_temp
mj.heat_design_temps[location] = hpxml_bldg.header.manualj_heating_design_temp
- elsif HPXML::conditioned_locations.include? location
+ when *HPXML::conditioned_locations
mj.cool_design_temps[location] = get_design_temp_cooling(mj, weather, HPXML::LocationConditionedSpace, hpxml_bldg)
mj.heat_design_temps[location] = get_design_temp_heating(mj, weather, HPXML::LocationConditionedSpace, hpxml_bldg)
else
@@ -423,54 +424,62 @@ def self.get_design_temp_cooling(mj, weather, location, hpxml_bldg)
end
else
if not roof.radiant_barrier
- if roof.roof_type == HPXML::RoofTypeAsphaltShingles
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ case roof.roof_type
+ when HPXML::RoofTypeAsphaltShingles
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
cool_temp += 130.0 * roof.net_area
else
cool_temp += 120.0 * roof.net_area
end
- elsif roof.roof_type == HPXML::RoofTypeWoodShingles
+ when HPXML::RoofTypeWoodShingles
cool_temp += 120.0 * roof.net_area
- elsif roof.roof_type == HPXML::RoofTypeMetal
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ when HPXML::RoofTypeMetal
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
cool_temp += 130.0 * roof.net_area
- elsif [HPXML::ColorMedium, HPXML::ColorLight].include? roof.roof_color
+ when HPXML::ColorMedium, HPXML::ColorLight
cool_temp += 120.0 * roof.net_area
- elsif [HPXML::ColorReflective].include? roof.roof_color
+ when HPXML::ColorReflective
cool_temp += 95.0 * roof.net_area
end
- elsif roof.roof_type == HPXML::RoofTypeClayTile
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ when HPXML::RoofTypeClayTile
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
cool_temp += 110.0 * roof.net_area
- elsif [HPXML::ColorMedium, HPXML::ColorLight].include? roof.roof_color
+ when HPXML::ColorMedium, HPXML::ColorLight
cool_temp += 105.0 * roof.net_area
- elsif [HPXML::ColorReflective].include? roof.roof_color
+ when HPXML::ColorReflective
cool_temp += 95.0 * roof.net_area
end
end
else # with a radiant barrier
- if roof.roof_type == HPXML::RoofTypeAsphaltShingles
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ case roof.roof_type
+ when HPXML::RoofTypeAsphaltShingles
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
cool_temp += 120.0 * roof.net_area
else
cool_temp += 110.0 * roof.net_area
end
- elsif roof.roof_type == HPXML::RoofTypeWoodShingles
+ when HPXML::RoofTypeWoodShingles
cool_temp += 110.0 * roof.net_area
- elsif roof.roof_type == HPXML::RoofTypeMetal
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ when HPXML::RoofTypeMetal
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
cool_temp += 120.0 * roof.net_area
- elsif [HPXML::ColorMedium, HPXML::ColorLight].include? roof.roof_color
+ when HPXML::ColorMedium, HPXML::ColorLight
cool_temp += 110.0 * roof.net_area
- elsif [HPXML::ColorReflective].include? roof.roof_color
+ when HPXML::ColorReflective
cool_temp += 95.0 * roof.net_area
end
- elsif roof.roof_type == HPXML::RoofTypeClayTile
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ when HPXML::RoofTypeClayTile
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
cool_temp += 105.0 * roof.net_area
- elsif [HPXML::ColorMedium, HPXML::ColorLight].include? roof.roof_color
+ when HPXML::ColorMedium, HPXML::ColorLight
cool_temp += 100.0 * roof.net_area
- elsif [HPXML::ColorReflective].include? roof.roof_color
+ when HPXML::ColorReflective
cool_temp += 95.0 * roof.net_area
end
end
@@ -1070,11 +1079,12 @@ def self.process_load_walls(mj, hpxml_bldg, all_zone_loads, all_space_loads)
color = HPXML::ColorDark
end
- if color == HPXML::ColorLight
+ case color
+ when HPXML::ColorLight
color_multiplier = 0.65 # MJ8 Table 4B Notes, pg 348
- elsif color == HPXML::ColorMedium
+ when HPXML::ColorMedium
color_multiplier = 0.83 # MJ8 Appendix 12, pg 519
- elsif color == HPXML::ColorDark
+ when HPXML::ColorDark
color_multiplier = 1.0
end
@@ -1170,17 +1180,18 @@ def self.process_load_roofs(mj, hpxml_bldg, all_zone_loads, all_space_loads)
end
# Base CLTD color adjustment based on notes in MJ8 Figure A12-16
- if [HPXML::ColorDark, HPXML::ColorMediumDark].include? roof.roof_color
+ case roof.roof_color
+ when HPXML::ColorDark, HPXML::ColorMediumDark
if [HPXML::RoofTypeClayTile, HPXML::RoofTypeWoodShingles].include? roof.roof_type
cltd *= 0.83
end
- elsif [HPXML::ColorMedium, HPXML::ColorLight].include? roof.roof_color
+ when HPXML::ColorMedium, HPXML::ColorLight
if [HPXML::RoofTypeClayTile].include? roof.roof_type
cltd *= 0.65
else
cltd *= 0.83
end
- elsif [HPXML::ColorReflective].include? roof.roof_color
+ when HPXML::ColorReflective
if [HPXML::RoofTypeAsphaltShingles, HPXML::RoofTypeWoodShingles].include? roof.roof_type
cltd *= 0.83
else
@@ -1748,16 +1759,16 @@ def self.apply_hvac_loads_to_hvac_sizings(hvac_sizings, hvac_loads)
def self.get_duct_regain_factor(duct, hpxml_bldg)
f_regain = nil
- if [HPXML::LocationOutside, HPXML::LocationRoofDeck].include? duct.duct_location
+ case duct.duct_location
+ when HPXML::LocationOutside, HPXML::LocationRoofDeck
f_regain = 0.0
- elsif [HPXML::LocationOtherHousingUnit, HPXML::LocationOtherHeatedSpace, HPXML::LocationOtherMultifamilyBufferSpace,
- HPXML::LocationOtherNonFreezingSpace, HPXML::LocationExteriorWall, HPXML::LocationUnderSlab,
- HPXML::LocationManufacturedHomeBelly].include? duct.duct_location
+ when HPXML::LocationOtherHousingUnit, HPXML::LocationOtherHeatedSpace, HPXML::LocationOtherMultifamilyBufferSpace,
+ HPXML::LocationOtherNonFreezingSpace, HPXML::LocationExteriorWall, HPXML::LocationUnderSlab, HPXML::LocationManufacturedHomeBelly
space_values = Geometry.get_temperature_scheduled_space_values(duct.duct_location)
f_regain = space_values[:f_regain]
- elsif [HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceVented, HPXML::LocationCrawlspaceUnvented].include? duct.duct_location
+ when HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceVented, HPXML::LocationCrawlspaceUnvented
ceilings = hpxml_bldg.floors.select { |f| f.is_floor && [f.interior_adjacent_to, f.exterior_adjacent_to].include?(duct.duct_location) }
avg_ceiling_rvalue = calculate_average_r_value(ceilings)
@@ -1799,13 +1810,13 @@ def self.get_duct_regain_factor(duct, hpxml_bldg)
end
end
- elsif [HPXML::LocationAtticVented, HPXML::LocationAtticUnvented].include? duct.duct_location
+ when HPXML::LocationAtticVented, HPXML::LocationAtticUnvented
f_regain = 0.10 # This would likely be higher for unvented attics with roof insulation
- elsif [HPXML::LocationGarage].include? duct.duct_location
+ when HPXML::LocationGarage
f_regain = 0.05
- elsif HPXML::conditioned_locations.include? duct.duct_location
+ when *HPXML::conditioned_locations
f_regain = 1.0
end
@@ -3422,13 +3433,14 @@ def self.apply_hvac_ground_loop(mj, runner, hvac_sizings, weather, hvac_cooling,
def self.get_geothermal_loop_borefield_ft_per_ton(mj, hpxml_bldg, geothermal_loop, weather, hvac_cooling)
hvac_cooling_ap = hvac_cooling.additional_properties
- if hvac_cooling_ap.u_tube_spacing_type == 'b'
+ case hvac_cooling_ap.u_tube_spacing_type
+ when 'b'
beta_0 = 17.4427
beta_1 = -0.6052
- elsif hvac_cooling_ap.u_tube_spacing_type == 'c'
+ when 'c'
beta_0 = 21.9059
beta_1 = -0.3796
- elsif hvac_cooling_ap.u_tube_spacing_type == 'as'
+ when 'as'
beta_0 = 20.1004
beta_1 = -0.94467
end
@@ -4358,13 +4370,14 @@ def self.calculate_space_design_temp(mj, location, weather, hpxml_bldg, setpoint
sum_uat, sum_ua = 0.0, 0.0
space_UAs.each do |ua_type, ua|
- if ua_type == HPXML::LocationGround
+ case ua_type
+ when HPXML::LocationGround
sum_uat += ua * ground_db
sum_ua += ua
- elsif ua_type == HPXML::LocationOutside
+ when HPXML::LocationOutside
sum_uat += ua * design_db
sum_ua += ua
- elsif ua_type == HPXML::LocationConditionedSpace
+ when HPXML::LocationConditionedSpace
sum_uat += ua * setpoint_temp
sum_ua += ua
else
@@ -4393,11 +4406,12 @@ def self.calculate_space_design_temp(mj, location, weather, hpxml_bldg, setpoint
ua_conditioned = 0.0
ua_outside = 0.0
space_UAs.each do |ua_type, ua|
- if ua_type == HPXML::LocationOutside
+ case ua_type
+ when HPXML::LocationOutside
ua_outside += ua
- elsif ua_type == HPXML::LocationConditionedSpace
+ when HPXML::LocationConditionedSpace
ua_conditioned += ua
- elsif ua_type != HPXML::LocationGround
+ when !HPXML::LocationGround
fail "Unexpected space ua type: '#{ua_type}'."
end
end
@@ -5006,35 +5020,36 @@ def self.get_window_interior_shading_coefficient(window)
end
else
# Use physical window properties
- if window.glass_layers == HPXML::WindowLayersSinglePane
- if [HPXML::WindowGlassTypeTintedReflective,
- HPXML::WindowGlassTypeReflective].include? window.glass_type
+ case window.glass_layers
+ when HPXML::WindowLayersSinglePane
+ case window.glass_type
+ when HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGlassTypeReflective
window_type = '1P Reflective'
- elsif [HPXML::WindowGlassTypeTinted].include? window.glass_type
+ when HPXML::WindowGlassTypeTinted
window_type = '1P Heat Absorbing'
else
window_type = '1P Clear'
end
- elsif window.glass_layers == HPXML::WindowLayersDoublePane
- if [HPXML::WindowGlassTypeTintedReflective,
- HPXML::WindowGlassTypeReflective].include? window.glass_type
+ when HPXML::WindowLayersDoublePane
+ case window.glass_type
+ when HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGlassTypeReflective
window_type = '2P Reflective'
- elsif [HPXML::WindowGlassTypeTinted].include? window.glass_type
+ when HPXML::WindowGlassTypeTinted
window_type = '2P Heat Absorbing'
- elsif [HPXML::WindowGlassTypeLowELowSolarGain].include? window.glass_type
+ when HPXML::WindowGlassTypeLowELowSolarGain
window_type = '2P Low-e Option 3'
- elsif [HPXML::WindowGlassTypeLowE].include? window.glass_type
+ when HPXML::WindowGlassTypeLowE
window_type = '2P Low-e Option 2'
- elsif [HPXML::WindowGlassTypeLowEHighSolarGain].include? window.glass_type
+ when HPXML::WindowGlassTypeLowEHighSolarGain
window_type = '2P Low-e Option 1'
else
window_type = '2P Clear'
end
- elsif window.glass_layers == HPXML::WindowLayersTriplePane
- if [HPXML::WindowGlassTypeTintedReflective,
- HPXML::WindowGlassTypeReflective].include? window.glass_type
+ when HPXML::WindowLayersTriplePane
+ case window.glass_type
+ when HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGlassTypeReflective
window_type = '3P Reflective'
- elsif [HPXML::WindowGlassTypeTinted].include? window.glass_type
+ when HPXML::WindowGlassTypeTinted
window_type = '3P Heat Absorbing'
else
window_type = '3P Clear'
diff --git a/HPXMLtoOpenStudio/resources/materials.rb b/HPXMLtoOpenStudio/resources/materials.rb
index 19e7241b3a..484d79b4f2 100644
--- a/HPXMLtoOpenStudio/resources/materials.rb
+++ b/HPXMLtoOpenStudio/resources/materials.rb
@@ -272,31 +272,34 @@ def self.Concrete(thick_in)
def self.ExteriorFinishMaterial(type, thick_in = nil)
if (type == HPXML::SidingTypeNone) || (!thick_in.nil? && thick_in <= 0)
return
- elsif [HPXML::SidingTypeAsbestos].include? type
+ end
+
+ case type
+ when HPXML::SidingTypeAsbestos
thick_in = 0.25 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 4.20, rho: 118.6, cp: 0.24)
- elsif [HPXML::SidingTypeBrick].include? type
+ when HPXML::SidingTypeBrick
thick_in = 4.0 if thick_in.nil?
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.Brick)
- elsif [HPXML::SidingTypeCompositeShingle].include? type
+ when HPXML::SidingTypeCompositeShingle
thick_in = 0.25 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 1.128, rho: 70.0, cp: 0.35)
- elsif [HPXML::SidingTypeFiberCement].include? type
+ when HPXML::SidingTypeFiberCement
thick_in = 0.375 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 1.79, rho: 21.7, cp: 0.24)
- elsif [HPXML::SidingTypeMasonite].include? type # Masonite hardboard
+ when HPXML::SidingTypeMasonite # Masonite hardboard
thick_in = 0.5 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 0.69, rho: 46.8, cp: 0.39)
- elsif [HPXML::SidingTypeStucco].include? type
+ when HPXML::SidingTypeStucco
thick_in = 1.0 if thick_in.nil?
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.Stucco)
- elsif [HPXML::SidingTypeSyntheticStucco].include? type # EIFS
+ when HPXML::SidingTypeSyntheticStucco # EIFS
thick_in = 1.0 if thick_in.nil?
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.InsulationRigid)
- elsif [HPXML::SidingTypeVinyl, HPXML::SidingTypeAluminum].include? type
+ when HPXML::SidingTypeVinyl, HPXML::SidingTypeAluminum
thick_in = 0.375 if thick_in.nil?
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.Vinyl)
- elsif [HPXML::SidingTypeWood].include? type
+ when HPXML::SidingTypeWood
thick_in = 1.0 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 0.71, rho: 34.0, cp: 0.28)
end
@@ -310,25 +313,26 @@ def self.ExteriorFinishMaterial(type, thick_in = nil)
# @param thick_in [TODO] TODO
# @return [TODO] TODO
def self.FoundationWallMaterial(type, thick_in)
- if type == HPXML::FoundationWallTypeSolidConcrete
+ case type
+ when HPXML::FoundationWallTypeSolidConcrete
return Material.Concrete(thick_in)
- elsif type == HPXML::FoundationWallTypeDoubleBrick
+ when HPXML::FoundationWallTypeDoubleBrick
return new(name: "#{type} #{thick_in} in.", thick_in: thick_in, mat_base: BaseMaterial.Brick, tAbs: 0.9)
- elsif type == HPXML::FoundationWallTypeWood
+ when HPXML::FoundationWallTypeWood
# Open wood cavity wall, so just assume 0.5" of sheathing
return new(name: "#{type} #{thick_in} in.", thick_in: 0.5, mat_base: BaseMaterial.Wood, tAbs: 0.9)
# Concrete block conductivity values below derived from Table 2 of
# https://ncma.org/resource/rvalues-ufactors-of-single-wythe-concrete-masonry-walls/. Values
# for 6-in thickness and 115 pcf, with interior/exterior films removed (R-0.68/R-0.17).
- elsif type == HPXML::FoundationWallTypeConcreteBlockSolidCore
+ when HPXML::FoundationWallTypeConcreteBlockSolidCore
return new(name: "#{type} #{thick_in} in.", thick_in: thick_in, k_in: 8.5, rho: 115.0, cp: 0.2, tAbs: 0.9)
- elsif type == HPXML::FoundationWallTypeConcreteBlock
+ when HPXML::FoundationWallTypeConcreteBlock
return new(name: "#{type} #{thick_in} in.", thick_in: thick_in, k_in: 5.0, rho: 45.0, cp: 0.2, tAbs: 0.9)
- elsif type == HPXML::FoundationWallTypeConcreteBlockPerliteCore
+ when HPXML::FoundationWallTypeConcreteBlockPerliteCore
return new(name: "#{type} #{thick_in} in.", thick_in: thick_in, k_in: 2.0, rho: 67.0, cp: 0.2, tAbs: 0.9)
- elsif type == HPXML::FoundationWallTypeConcreteBlockFoamCore
+ when HPXML::FoundationWallTypeConcreteBlockFoamCore
return new(name: "#{type} #{thick_in} in.", thick_in: thick_in, k_in: 1.8, rho: 67.0, cp: 0.2, tAbs: 0.9)
- elsif type == HPXML::FoundationWallTypeConcreteBlockVermiculiteCore
+ when HPXML::FoundationWallTypeConcreteBlockVermiculiteCore
return new(name: "#{type} #{thick_in} in.", thick_in: thick_in, k_in: 2.1, rho: 67.0, cp: 0.2, tAbs: 0.9)
end
@@ -345,11 +349,10 @@ def self.InteriorFinishMaterial(type, thick_in = nil)
return
else
thick_in = 0.5 if thick_in.nil?
- if [HPXML::InteriorFinishGypsumBoard,
- HPXML::InteriorFinishGypsumCompositeBoard,
- HPXML::InteriorFinishPlaster].include? type
+ case type
+ when HPXML::InteriorFinishGypsumBoard, HPXML::InteriorFinishGypsumCompositeBoard, HPXML::InteriorFinishPlaster
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.Gypsum)
- elsif [HPXML::InteriorFinishWood].include? type
+ when HPXML::InteriorFinishWood
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.Wood)
end
end
@@ -435,22 +438,23 @@ def self.RadiantBarrier(grade, is_attic_floor)
# @param thick_in [TODO] TODO
# @return [TODO] TODO
def self.RoofMaterial(type, thick_in = nil)
- if [HPXML::RoofTypeMetal].include? type
+ case type
+ when HPXML::RoofTypeMetal
thick_in = 0.02 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 346.9, rho: 487.0, cp: 0.11)
- elsif [HPXML::RoofTypeAsphaltShingles, HPXML::RoofTypeWoodShingles, HPXML::RoofTypeShingles, HPXML::RoofTypeCool].include? type
+ when HPXML::RoofTypeAsphaltShingles, HPXML::RoofTypeWoodShingles, HPXML::RoofTypeShingles, HPXML::RoofTypeCool
thick_in = 0.25 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 1.128, rho: 70.0, cp: 0.35)
- elsif [HPXML::RoofTypeConcrete].include? type
+ when HPXML::RoofTypeConcrete
thick_in = 0.75 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 7.63, rho: 131.1, cp: 0.199)
- elsif [HPXML::RoofTypeClayTile].include? type
+ when HPXML::RoofTypeClayTile
thick_in = 0.75 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 5.83, rho: 118.6, cp: 0.191)
- elsif [HPXML::RoofTypeEPS].include? type
+ when HPXML::RoofTypeEPS
thick_in = 1.0 if thick_in.nil?
return new(name: type, thick_in: thick_in, mat_base: BaseMaterial.InsulationRigid)
- elsif [HPXML::RoofTypePlasticRubber].include? type
+ when HPXML::RoofTypePlasticRubber
thick_in = 0.25 if thick_in.nil?
return new(name: type, thick_in: thick_in, k_in: 2.78, rho: 110.8, cp: 0.36)
end
diff --git a/HPXMLtoOpenStudio/resources/misc_loads.rb b/HPXMLtoOpenStudio/resources/misc_loads.rb
index 2e31b90403..036c38707d 100644
--- a/HPXMLtoOpenStudio/resources/misc_loads.rb
+++ b/HPXMLtoOpenStudio/resources/misc_loads.rb
@@ -13,13 +13,14 @@ module MiscLoads
# @return [nil]
def self.apply_plug_loads(runner, model, spaces, hpxml_bldg, hpxml_header, schedules_file)
hpxml_bldg.plug_loads.each do |plug_load|
- if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
+ case plug_load.plug_load_type
+ when HPXML::PlugLoadTypeOther
obj_name = Constants::ObjectTypeMiscPlugLoads
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
+ when HPXML::PlugLoadTypeTelevision
obj_name = Constants::ObjectTypeMiscTelevision
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
+ when HPXML::PlugLoadTypeElectricVehicleCharging
obj_name = Constants::ObjectTypeMiscElectricVehicleCharging
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
+ when HPXML::PlugLoadTypeWellPump
obj_name = Constants::ObjectTypeMiscWellPump
end
if obj_name.nil?
@@ -53,13 +54,14 @@ def self.apply_plug_load(runner, model, plug_load, obj_name, spaces, schedules_f
# Create schedule
sch = nil
- if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
+ case plug_load.plug_load_type
+ when HPXML::PlugLoadTypeOther
col_name = SchedulesFile::Columns[:PlugLoadsOther].name
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
+ when HPXML::PlugLoadTypeTelevision
col_name = SchedulesFile::Columns[:PlugLoadsTV].name
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
+ when HPXML::PlugLoadTypeElectricVehicleCharging
col_name = SchedulesFile::Columns[:PlugLoadsVehicle].name
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
+ when HPXML::PlugLoadTypeWellPump
col_name = SchedulesFile::Columns[:PlugLoadsWellPump].name
end
if not schedules_file.nil?
@@ -111,11 +113,12 @@ def self.apply_plug_load(runner, model, plug_load, obj_name, spaces, schedules_f
# @return [nil]
def self.apply_fuel_loads(runner, model, spaces, hpxml_bldg, hpxml_header, schedules_file)
hpxml_bldg.fuel_loads.each do |fuel_load|
- if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
+ case fuel_load.fuel_load_type
+ when HPXML::FuelLoadTypeGrill
obj_name = Constants::ObjectTypeMiscGrill
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
+ when HPXML::FuelLoadTypeLighting
obj_name = Constants::ObjectTypeMiscLighting
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
+ when HPXML::FuelLoadTypeFireplace
obj_name = Constants::ObjectTypeMiscFireplace
end
if obj_name.nil?
@@ -148,11 +151,12 @@ def self.apply_fuel_load(runner, model, fuel_load, obj_name, spaces, schedules_f
# Create schedule
sch = nil
- if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
+ case fuel_load.fuel_load_type
+ when HPXML::FuelLoadTypeGrill
col_name = SchedulesFile::Columns[:FuelLoadsGrill].name
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
+ when HPXML::FuelLoadTypeLighting
col_name = SchedulesFile::Columns[:FuelLoadsLighting].name
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
+ when HPXML::FuelLoadTypeFireplace
col_name = SchedulesFile::Columns[:FuelLoadsFireplace].name
end
if not schedules_file.nil?
diff --git a/HPXMLtoOpenStudio/resources/model.rb b/HPXMLtoOpenStudio/resources/model.rb
index a30aacbbc5..537e2eabf6 100644
--- a/HPXMLtoOpenStudio/resources/model.rb
+++ b/HPXMLtoOpenStudio/resources/model.rb
@@ -859,6 +859,8 @@ def self.reset(model, runner)
# @return [nil]
def self.merge_unit_models(model, hpxml_osm_map)
# Map of OpenStudio IDD objects => OSM class names
+ # Note: ZoneCapacitanceMultiplierResearchSpecial is not actually unique, but we don't assign it to
+ # individual thermal zones, so we'll treat it as unique here.
unique_object_map = { 'OS:ConvergenceLimits' => 'ConvergenceLimits',
'OS:Foundation:Kiva:Settings' => 'FoundationKivaSettings',
'OS:OutputControl:Files' => 'OutputControlFiles',
@@ -875,7 +877,8 @@ def self.merge_unit_models(model, hpxml_osm_map)
'OS:Site:WaterMainsTemperature' => 'SiteWaterMainsTemperature',
'OS:SurfaceConvectionAlgorithm:Inside' => 'InsideSurfaceConvectionAlgorithm',
'OS:SurfaceConvectionAlgorithm:Outside' => 'OutsideSurfaceConvectionAlgorithm',
- 'OS:Timestep' => 'Timestep' }
+ 'OS:Timestep' => 'Timestep',
+ 'OS:ZoneCapacitanceMultiplier:ResearchSpecial' => 'ZoneCapacitanceMultiplierResearchSpecial' }
# Handle unique objects first: Grab one from the first model we find the
# object on (may not be the first unit).
diff --git a/HPXMLtoOpenStudio/resources/pv.rb b/HPXMLtoOpenStudio/resources/pv.rb
index 5a9f60a2b1..08822275c7 100644
--- a/HPXMLtoOpenStudio/resources/pv.rb
+++ b/HPXMLtoOpenStudio/resources/pv.rb
@@ -64,22 +64,28 @@ def self.apply_pv_system(model, hpxml_bldg, pv_system)
gpvwatts.setSystemLosses(pv_system.system_losses_fraction)
gpvwatts.setTiltAngle(pv_system.array_tilt)
gpvwatts.setAzimuthAngle(pv_system.array_azimuth)
- if (pv_system.tracking == HPXML::PVTrackingTypeFixed) && (pv_system.location == HPXML::LocationRoof)
- gpvwatts.setArrayType('FixedRoofMounted')
- elsif (pv_system.tracking == HPXML::PVTrackingTypeFixed) && (pv_system.location == HPXML::LocationGround)
- gpvwatts.setArrayType('FixedOpenRack')
- elsif pv_system.tracking == HPXML::PVTrackingType1Axis
+
+ case pv_system.tracking
+ when HPXML::PVTrackingTypeFixed
+ if pv_system.location == HPXML::LocationRoof
+ gpvwatts.setArrayType('FixedRoofMounted')
+ elsif pv_system.location == HPXML::LocationGround
+ gpvwatts.setArrayType('FixedOpenRack')
+ end
+ when HPXML::PVTrackingType1Axis
gpvwatts.setArrayType('OneAxis')
- elsif pv_system.tracking == HPXML::PVTrackingType1AxisBacktracked
+ when HPXML::PVTrackingType1AxisBacktracked
gpvwatts.setArrayType('OneAxisBacktracking')
- elsif pv_system.tracking == HPXML::PVTrackingType2Axis
+ when HPXML::PVTrackingType2Axis
gpvwatts.setArrayType('TwoAxis')
end
- if pv_system.module_type == HPXML::PVModuleTypeStandard
+
+ case pv_system.module_type
+ when HPXML::PVModuleTypeStandard
gpvwatts.setModuleType('Standard')
- elsif pv_system.module_type == HPXML::PVModuleTypePremium
+ when HPXML::PVModuleTypePremium
gpvwatts.setModuleType('Premium')
- elsif pv_system.module_type == HPXML::PVModuleTypeThinFilm
+ when HPXML::PVModuleTypeThinFilm
gpvwatts.setModuleType('ThinFilm')
end
diff --git a/HPXMLtoOpenStudio/resources/schedules.rb b/HPXMLtoOpenStudio/resources/schedules.rb
index f5ee36e47c..0da62c5f8a 100644
--- a/HPXMLtoOpenStudio/resources/schedules.rb
+++ b/HPXMLtoOpenStudio/resources/schedules.rb
@@ -1434,17 +1434,19 @@ def set_unavailable_periods(runner, unavailable_periods)
@tmp_schedules.keys.each do |schedule_name|
next if column_names.include? schedule_name
- schedule_name2 = schedule_name
- if [SchedulesFile::Columns[:HotWaterDishwasher].name].include?(schedule_name)
+ case schedule_name
+ when SchedulesFile::Columns[:HotWaterDishwasher].name
schedule_name2 = SchedulesFile::Columns[:Dishwasher].name
- elsif [SchedulesFile::Columns[:HotWaterClothesWasher].name].include?(schedule_name)
+ when SchedulesFile::Columns[:HotWaterClothesWasher].name
schedule_name2 = SchedulesFile::Columns[:ClothesWasher].name
- elsif [SchedulesFile::Columns[:HeatingSetpoint].name].include?(schedule_name)
+ when SchedulesFile::Columns[:HeatingSetpoint].name
schedule_name2 = SchedulesFile::Columns[:SpaceHeating].name
- elsif [SchedulesFile::Columns[:CoolingSetpoint].name].include?(schedule_name)
+ when SchedulesFile::Columns[:CoolingSetpoint].name
schedule_name2 = SchedulesFile::Columns[:SpaceCooling].name
- elsif [SchedulesFile::Columns[:WaterHeaterSetpoint].name].include?(schedule_name)
+ when SchedulesFile::Columns[:WaterHeaterSetpoint].name
schedule_name2 = SchedulesFile::Columns[:WaterHeater].name
+ else
+ schedule_name2 = schedule_name
end
# Skip those unaffected
diff --git a/HPXMLtoOpenStudio/resources/utility_bills.rb b/HPXMLtoOpenStudio/resources/utility_bills.rb
index e9fba1f567..72b851bc8d 100644
--- a/HPXMLtoOpenStudio/resources/utility_bills.rb
+++ b/HPXMLtoOpenStudio/resources/utility_bills.rb
@@ -36,17 +36,19 @@ def self.get_rates_from_eia_data(runner, state_code, fuel_type, fixed_charge, ma
end
if not marginal_rate.nil?
- if [HPXML::FuelTypeElectricity, HPXML::FuelTypeNaturalGas].include? fuel_type
+ case fuel_type
+ when HPXML::FuelTypeElectricity, HPXML::FuelTypeNaturalGas
# Calculate average rate from user-specified marginal rate, user-specified fixed charge, and EIA data
average_rate = marginal_rate_to_average_rate(marginal_rate, fixed_charge, household_consumption)
- elsif [HPXML::FuelTypeOil, HPXML::FuelTypePropane, HPXML::FuelTypeCoal, HPXML::FuelTypeWoodCord, HPXML::FuelTypeWoodPellets].include? fuel_type
+ when HPXML::FuelTypeOil, HPXML::FuelTypePropane, HPXML::FuelTypeCoal, HPXML::FuelTypeWoodCord, HPXML::FuelTypeWoodPellets
# Do nothing
end
else
- if [HPXML::FuelTypeElectricity, HPXML::FuelTypeNaturalGas].include? fuel_type
+ case fuel_type
+ when HPXML::FuelTypeElectricity, HPXML::FuelTypeNaturalGas
average_rate = get_eia_seds_rate(runner, state_code, fuel_type)
marginal_rate = average_rate_to_marginal_rate(average_rate, fixed_charge, household_consumption)
- elsif [HPXML::FuelTypeOil, HPXML::FuelTypePropane, HPXML::FuelTypeCoal, HPXML::FuelTypeWoodCord, HPXML::FuelTypeWoodPellets].include? fuel_type
+ when HPXML::FuelTypeOil, HPXML::FuelTypePropane, HPXML::FuelTypeCoal, HPXML::FuelTypeWoodCord, HPXML::FuelTypeWoodPellets
marginal_rate = get_eia_seds_rate(runner, state_code, fuel_type)
end
end
diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb
index 003b113a8f..32c094ce64 100644
--- a/HPXMLtoOpenStudio/resources/waterheater.rb
+++ b/HPXMLtoOpenStudio/resources/waterheater.rb
@@ -19,13 +19,14 @@ def self.apply_dhw_appliances(runner, model, weather, spaces, hpxml_bldg, hpxml_
plantloop_map = {}
hpxml_bldg.water_heating_systems.each do |dhw_system|
- if dhw_system.water_heater_type == HPXML::WaterHeaterTypeStorage
+ case dhw_system.water_heater_type
+ when HPXML::WaterHeaterTypeStorage
apply_tank(model, runner, spaces, hpxml_bldg, hpxml_header, dhw_system, schedules_file, unavailable_periods, plantloop_map)
- elsif dhw_system.water_heater_type == HPXML::WaterHeaterTypeTankless
+ when HPXML::WaterHeaterTypeTankless
apply_tankless(model, runner, spaces, hpxml_bldg, hpxml_header, dhw_system, schedules_file, unavailable_periods, plantloop_map)
- elsif dhw_system.water_heater_type == HPXML::WaterHeaterTypeHeatPump
+ when HPXML::WaterHeaterTypeHeatPump
apply_heatpump(model, runner, spaces, hpxml_bldg, hpxml_header, dhw_system, schedules_file, unavailable_periods, plantloop_map)
- elsif [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? dhw_system.water_heater_type
+ when HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless
apply_combi(model, runner, spaces, hpxml_bldg, hpxml_header, dhw_system, schedules_file, unavailable_periods, plantloop_map)
else
fail "Unhandled water heater (#{dhw_system.water_heater_type})."
@@ -386,26 +387,26 @@ def self.get_dist_energy_waste_factor(hot_water_distribution)
# Amendment on Domestic Hot Water (DHW) Systems
# Table 4.2.2.5.2.11(6) Hot water distribution system relative annual energy waste factors
if hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
- if (hot_water_distribution.recirculation_control_type == HPXML::DHWRecircControlTypeNone) ||
- (hot_water_distribution.recirculation_control_type == HPXML::DHWRecircControlTypeTimer)
+ case hot_water_distribution.recirculation_control_type
+ when HPXML::DHWRecircControlTypeNone, HPXML::DHWRecircControlTypeTimer
if hot_water_distribution.pipe_r_value < 3.0
return 500.0
else
return 250.0
end
- elsif hot_water_distribution.recirculation_control_type == HPXML::DHWRecircControlTypeTemperature
+ when HPXML::DHWRecircControlTypeTemperature
if hot_water_distribution.pipe_r_value < 3.0
return 375.0
else
return 187.5
end
- elsif hot_water_distribution.recirculation_control_type == HPXML::DHWRecircControlTypeSensor
+ when HPXML::DHWRecircControlTypeSensor
if hot_water_distribution.pipe_r_value < 3.0
return 64.8
else
return 43.2
end
- elsif hot_water_distribution.recirculation_control_type == HPXML::DHWRecircControlTypeManual
+ when HPXML::DHWRecircControlTypeManual
if hot_water_distribution.pipe_r_value < 3.0
return 43.2
else
@@ -620,21 +621,23 @@ def self.apply_solar_thermal(model, spaces, hpxml_bldg, plantloop_map)
obj_name = Constants::ObjectTypeSolarHotWater
- if [HPXML::SolarThermalCollectorTypeEvacuatedTube].include? solar_thermal_system.collector_type
+ case solar_thermal_system.collector_type
+ when HPXML::SolarThermalCollectorTypeEvacuatedTube
iam_coeff2 = 0.3023 # IAM coeff1=1 by definition, values based on a system listed by SRCC with values close to the average
iam_coeff3 = -0.3057
- elsif [HPXML::SolarThermalCollectorTypeSingleGlazing, HPXML::SolarThermalCollectorTypeDoubleGlazing].include? solar_thermal_system.collector_type
+ when HPXML::SolarThermalCollectorTypeSingleGlazing, HPXML::SolarThermalCollectorTypeDoubleGlazing
iam_coeff2 = 0.1
iam_coeff3 = 0
- elsif [HPXML::SolarThermalCollectorTypeICS].include? solar_thermal_system.collector_type
+ when HPXML::SolarThermalCollectorTypeICS
iam_coeff2 = 0.1
iam_coeff3 = 0
end
- if [HPXML::SolarThermalLoopTypeIndirect].include? solar_thermal_system.collector_loop_type
+ case solar_thermal_system.collector_loop_type
+ when HPXML::SolarThermalLoopTypeIndirect
fluid_type = EPlus::FluidPropyleneGlycol
heat_ex_eff = 0.7
- elsif [HPXML::SolarThermalLoopTypeDirect, HPXML::SolarThermalLoopTypeThermosyphon].include? solar_thermal_system.collector_loop_type
+ when HPXML::SolarThermalLoopTypeDirect, HPXML::SolarThermalLoopTypeThermosyphon
fluid_type = EPlus::FluidWater
heat_ex_eff = 1.0
end
@@ -1011,13 +1014,14 @@ def self.set_heat_pump_cop(water_heating_system)
cop = 1.174536058 * uef # Based on simulation of the UEF test procedure at varying COPs
elsif not water_heating_system.uniform_energy_factor.nil?
uef = water_heating_system.uniform_energy_factor
- if water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinVerySmall
+ case water_heating_system.usage_bin
+ when HPXML::WaterHeaterUsageBinVerySmall
fail 'It is unlikely that a heat pump water heater falls into the very small bin of the First Hour Rating (FHR) test. Double check input.'
- elsif water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinLow
+ when HPXML::WaterHeaterUsageBinLow
cop = 1.0005 * uef - 0.0789
- elsif water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinMedium
+ when HPXML::WaterHeaterUsageBinMedium
cop = 1.0909 * uef - 0.0868
- elsif water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinHigh
+ when HPXML::WaterHeaterUsageBinHigh
cop = 1.1022 * uef - 0.0877
end
end
@@ -1571,17 +1575,19 @@ def self.add_desuperheater(model, runner, water_heating_system, tank, loc_space,
def self.calc_ef_from_uef(water_heating_system)
# Interpretation on Water Heater UEF
if water_heating_system.fuel_type == HPXML::FuelTypeElectricity
- if water_heating_system.water_heater_type == HPXML::WaterHeaterTypeStorage
+ case water_heating_system.water_heater_type
+ when HPXML::WaterHeaterTypeStorage
return [2.4029 * water_heating_system.uniform_energy_factor - 1.2844, 0.96].min
- elsif water_heating_system.water_heater_type == HPXML::WaterHeaterTypeTankless
+ when HPXML::WaterHeaterTypeTankless
return water_heating_system.uniform_energy_factor
- elsif water_heating_system.water_heater_type == HPXML::WaterHeaterTypeHeatPump
+ when HPXML::WaterHeaterTypeHeatPump
return 1.2101 * water_heating_system.uniform_energy_factor - 0.6052
end
else # Fuel
- if water_heating_system.water_heater_type == HPXML::WaterHeaterTypeStorage
+ case water_heating_system.water_heater_type
+ when HPXML::WaterHeaterTypeStorage
return 0.9066 * water_heating_system.uniform_energy_factor + 0.0711
- elsif water_heating_system.water_heater_type == HPXML::WaterHeaterTypeTankless
+ when HPXML::WaterHeaterTypeTankless
return water_heating_system.uniform_energy_factor
end
end
@@ -1835,13 +1841,14 @@ def self.calc_tank_UA(act_vol, water_heating_system, solar_fraction, nbeds)
volume_drawn = 64.3 # gal/day
elsif not water_heating_system.uniform_energy_factor.nil?
t = 125.0 # F
- if water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinVerySmall
+ case water_heating_system.usage_bin
+ when HPXML::WaterHeaterUsageBinVerySmall
volume_drawn = 10.0 # gal
- elsif water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinLow
+ when HPXML::WaterHeaterUsageBinLow
volume_drawn = 38.0 # gal
- elsif water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinMedium
+ when HPXML::WaterHeaterUsageBinMedium
volume_drawn = 55.0 # gal
- elsif water_heating_system.usage_bin == HPXML::WaterHeaterUsageBinHigh
+ when HPXML::WaterHeaterUsageBinHigh
volume_drawn = 84.0 # gal
end
end
diff --git a/HPXMLtoOpenStudio/resources/xmlhelper.rb b/HPXMLtoOpenStudio/resources/xmlhelper.rb
index 05b66f4b7a..b6a9a0b731 100644
--- a/HPXMLtoOpenStudio/resources/xmlhelper.rb
+++ b/HPXMLtoOpenStudio/resources/xmlhelper.rb
@@ -36,15 +36,18 @@ def self.insert_element(parent, element_name, index = 0, value = nil, datatype =
parent.children.insert(index, added)
end
if not value.nil?
- if datatype == :integer
+ case datatype
+ when :integer
value = to_integer(value, parent, element_name)
- elsif datatype == :float
+ when :float
value = to_float(value, parent, element_name)
- elsif datatype == :boolean
+ when :boolean
value = to_boolean(value, parent, element_name)
- elsif datatype != :string
- # If value provided, datatype required
- fail 'Unexpected datatype.'
+ else
+ if datatype != :string
+ # If value provided, datatype required
+ fail 'Unexpected datatype.'
+ end
end
added.inner_text = value.to_s
end
@@ -113,14 +116,17 @@ def self.get_value(parent, element_name, datatype)
value = element.text
- if datatype == :integer
+ case datatype
+ when :integer
value = to_integer_or_nil(value, parent, element_name)
- elsif datatype == :float
+ when :float
value = to_float_or_nil(value, parent, element_name)
- elsif datatype == :boolean
+ when :boolean
value = to_boolean_or_nil(value, parent, element_name)
- elsif datatype != :string
- fail 'Unexpected datatype.'
+ else
+ if datatype != :string
+ fail 'Unexpected datatype.'
+ end
end
return value
@@ -138,14 +144,17 @@ def self.get_values(parent, element_name, datatype)
parent.xpath(element_name).each do |value|
value = value.text
- if datatype == :integer
+ case datatype
+ when :integer
value = to_integer_or_nil(value, parent, element_name)
- elsif datatype == :float
+ when :float
value = to_float_or_nil(value, parent, element_name)
- elsif datatype == :boolean
+ when :boolean
value = to_boolean_or_nil(value, parent, element_name)
- elsif datatype != :string
- fail 'Unexpected datatype.'
+ else
+ if datatype != :string
+ fail 'Unexpected datatype.'
+ end
end
values << value
diff --git a/HPXMLtoOpenStudio/tests/test_validation.rb b/HPXMLtoOpenStudio/tests/test_validation.rb
index 485f6105de..21f4bf08e0 100644
--- a/HPXMLtoOpenStudio/tests/test_validation.rb
+++ b/HPXMLtoOpenStudio/tests/test_validation.rb
@@ -270,79 +270,80 @@ def test_schema_schematron_error_messages
all_expected_errors.each_with_index do |(error_case, expected_errors), i|
puts "[#{i + 1}/#{all_expected_errors.size}] Testing #{error_case}..."
# Create HPXML object
- if ['boiler-invalid-afue'].include? error_case
+ case error_case
+ when 'boiler-invalid-afue'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-boiler-oil-only.xml')
hpxml_bldg.heating_systems[0].heating_efficiency_afue *= 100.0
- elsif ['clothes-dryer-location'].include? error_case
+ when 'clothes-dryer-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.clothes_dryers[0].location = HPXML::LocationGarage
- elsif ['clothes-washer-location'].include? error_case
+ when 'clothes-washer-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.clothes_washers[0].location = HPXML::LocationGarage
- elsif ['cooking-range-location'].include? error_case
+ when 'cooking-range-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.cooking_ranges[0].location = HPXML::LocationGarage
- elsif ['dehumidifier-fraction-served'].include? error_case
+ when 'dehumidifier-fraction-served'
hpxml, hpxml_bldg = _create_hpxml('base-appliances-dehumidifier-multiple.xml')
hpxml_bldg.dehumidifiers[-1].fraction_served = 0.6
- elsif ['dhw-frac-load-served'].include? error_case
+ when 'dhw-frac-load-served'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-multiple.xml')
hpxml_bldg.water_heating_systems[0].fraction_dhw_load_served = 0.35
- elsif ['dhw-invalid-ef-tank'].include? error_case
+ when 'dhw-invalid-ef-tank'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.water_heating_systems[0].energy_factor = 1.0
- elsif ['dhw-invalid-uef-tank-heat-pump'].include? error_case
+ when 'dhw-invalid-uef-tank-heat-pump'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-heat-pump-uef.xml')
hpxml_bldg.water_heating_systems[0].uniform_energy_factor = 1.0
- elsif ['dishwasher-location'].include? error_case
+ when 'dishwasher-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.dishwashers[0].location = HPXML::LocationGarage
- elsif ['duct-leakage-cfm25'].include? error_case
+ when 'duct-leakage-cfm25'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[0].duct_leakage_value = -2
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[1].duct_leakage_value = -3
- elsif ['duct-leakage-cfm50'].include? error_case
+ when 'duct-leakage-cfm50'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ducts-leakage-cfm50.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[0].duct_leakage_value = -2
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[1].duct_leakage_value = -3
- elsif ['duct-leakage-percent'].include? error_case
+ when 'duct-leakage-percent'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[0].duct_leakage_units = HPXML::UnitsPercent
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[1].duct_leakage_units = HPXML::UnitsPercent
- elsif ['duct-location'].include? error_case
+ when 'duct-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationGarage
hpxml_bldg.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationGarage
- elsif ['duct-location-unconditioned-space'].include? error_case
+ when 'duct-location-unconditioned-space'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationUnconditionedSpace
hpxml_bldg.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationUnconditionedSpace
- elsif ['emissions-electricity-schedule'].include? error_case
+ when 'emissions-electricity-schedule'
hpxml, hpxml_bldg = _create_hpxml('base-misc-emissions.xml')
hpxml.header.emissions_scenarios[0].elec_schedule_number_of_header_rows = -1
hpxml.header.emissions_scenarios[0].elec_schedule_column_number = 0
- elsif ['enclosure-attic-missing-roof'].include? error_case
+ when 'enclosure-attic-missing-roof'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.roofs.reverse_each do |roof|
roof.delete
end
- elsif ['enclosure-basement-missing-exterior-foundation-wall'].include? error_case
+ when 'enclosure-basement-missing-exterior-foundation-wall'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-unconditioned-basement.xml')
hpxml_bldg.foundation_walls.reverse_each do |foundation_wall|
foundation_wall.delete
end
- elsif ['enclosure-basement-missing-slab'].include? error_case
+ when 'enclosure-basement-missing-slab'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-unconditioned-basement.xml')
hpxml_bldg.slabs.reverse_each do |slab|
slab.delete
end
- elsif ['enclosure-floor-area-exceeds-cfa'].include? error_case
+ when 'enclosure-floor-area-exceeds-cfa'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.building_construction.conditioned_floor_area = 1348.8
- elsif ['enclosure-floor-area-exceeds-cfa2'].include? error_case
+ when 'enclosure-floor-area-exceeds-cfa2'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit.xml')
hpxml_bldg.building_construction.conditioned_floor_area = 898.8
- elsif ['enclosure-garage-missing-exterior-wall'].include? error_case
+ when 'enclosure-garage-missing-exterior-wall'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
hpxml_bldg.walls.select { |w|
w.interior_adjacent_to == HPXML::LocationGarage &&
@@ -350,7 +351,7 @@ def test_schema_schematron_error_messages
}.reverse_each do |wall|
wall.delete
end
- elsif ['enclosure-garage-missing-roof-ceiling'].include? error_case
+ when 'enclosure-garage-missing-roof-ceiling'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
hpxml_bldg.floors.select { |w|
w.interior_adjacent_to == HPXML::LocationGarage &&
@@ -358,75 +359,75 @@ def test_schema_schematron_error_messages
}.reverse_each do |floor|
floor.delete
end
- elsif ['enclosure-garage-missing-slab'].include? error_case
+ when 'enclosure-garage-missing-slab'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
hpxml_bldg.slabs.select { |w| w.interior_adjacent_to == HPXML::LocationGarage }.reverse_each do |slab|
slab.delete
end
- elsif ['enclosure-conditioned-missing-ceiling-roof'].include? error_case
+ when 'enclosure-conditioned-missing-ceiling-roof'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.floors.reverse_each do |floor|
floor.delete
end
- elsif ['enclosure-conditioned-missing-exterior-wall'].include? error_case
+ when 'enclosure-conditioned-missing-exterior-wall'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.walls.reverse_each do |wall|
next unless wall.interior_adjacent_to == HPXML::LocationConditionedSpace
wall.delete
end
- elsif ['enclosure-conditioned-missing-floor-slab'].include? error_case
+ when 'enclosure-conditioned-missing-floor-slab'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-slab.xml')
hpxml_bldg.slabs[0].delete
- elsif ['frac-sensible-latent-fuel-load-values'].include? error_case
+ when 'frac-sensible-latent-fuel-load-values'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.fuel_loads[0].frac_sensible = -0.1
hpxml_bldg.fuel_loads[0].frac_latent = -0.1
- elsif ['frac-sensible-latent-fuel-load-presence'].include? error_case
+ when 'frac-sensible-latent-fuel-load-presence'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.fuel_loads[0].frac_sensible = 1.0
hpxml_bldg.fuel_loads[0].frac_latent = nil
- elsif ['frac-sensible-latent-plug-load-values'].include? error_case
+ when 'frac-sensible-latent-plug-load-values'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.plug_loads[0].frac_sensible = -0.1
hpxml_bldg.plug_loads[0].frac_latent = -0.1
- elsif ['frac-sensible-latent-plug-load-presence'].include? error_case
+ when 'frac-sensible-latent-plug-load-presence'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.plug_loads[0].frac_latent = 1.0
hpxml_bldg.plug_loads[0].frac_sensible = nil
- elsif ['frac-total-fuel-load'].include? error_case
+ when 'frac-total-fuel-load'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.fuel_loads[0].frac_sensible = 0.8
hpxml_bldg.fuel_loads[0].frac_latent = 0.3
- elsif ['frac-total-plug-load'].include? error_case
+ when 'frac-total-plug-load'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.plug_loads[1].frac_latent = 0.245
- elsif ['furnace-invalid-afue'].include? error_case
+ when 'furnace-invalid-afue'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.heating_systems[0].heating_efficiency_afue *= 100.0
- elsif ['generator-number-of-bedrooms-served'].include? error_case
+ when 'generator-number-of-bedrooms-served'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-generator.xml')
hpxml_bldg.generators[0].number_of_bedrooms_served = 3
- elsif ['generator-output-greater-than-consumption'].include? error_case
+ when 'generator-output-greater-than-consumption'
hpxml, hpxml_bldg = _create_hpxml('base-misc-generators.xml')
hpxml_bldg.generators[0].annual_consumption_kbtu = 1500
- elsif ['heat-pump-backup-sizing'].include? error_case
+ when 'heat-pump-backup-sizing'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.header.heat_pump_backup_sizing_methodology = 'foobar'
- elsif ['heat-pump-separate-backup-inputs'].include? error_case
+ when 'heat-pump-separate-backup-inputs'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml')
hpxml_bldg.heat_pumps[0].backup_heating_capacity = 12345
hpxml_bldg.heat_pumps[0].backup_heating_efficiency_afue = 0.8
hpxml_bldg.heat_pumps[0].backup_heating_autosizing_factor = 1.2
- elsif ['heat-pump-capacity-17f'].include? error_case
+ when 'heat-pump-capacity-17f'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].heating_capacity_17F = hpxml_bldg.heat_pumps[0].heating_capacity + 1000.0
hpxml_bldg.heat_pumps[0].heating_capacity_retention_fraction = nil
hpxml_bldg.heat_pumps[0].heating_capacity_retention_temp = nil
- elsif ['heat-pump-lockout-temperatures'].include? error_case
+ when 'heat-pump-lockout-temperatures'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml')
hpxml_bldg.heat_pumps[0].compressor_lockout_temp = hpxml_bldg.heat_pumps[0].backup_heating_lockout_temp + 1
- elsif ['heat-pump-multiple-backup-systems'].include? error_case
+ when 'heat-pump-multiple-backup-systems'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml')
hpxml_bldg.heating_systems << hpxml_bldg.heating_systems[0].dup
hpxml_bldg.heating_systems[-1].id = 'HeatingSystem2'
@@ -436,13 +437,13 @@ def test_schema_schematron_error_messages
hpxml_bldg.heat_pumps[-1].id = 'HeatPump2'
hpxml_bldg.heat_pumps[-1].primary_heating_system = false
hpxml_bldg.heat_pumps[-1].primary_cooling_system = false
- elsif ['hvac-detailed-performance-not-variable-speed'].include? error_case
+ when 'hvac-detailed-performance-not-variable-speed'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-detailed-performance.xml')
hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeTwoStage
- elsif ['hvac-distribution-return-duct-leakage-missing'].include? error_case
+ when 'hvac-distribution-return-duct-leakage-missing'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-evap-cooler-only-ducted.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[-1].delete
- elsif ['hvac-frac-load-served'].include? error_case
+ when 'hvac-frac-load-served'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-multiple.xml')
hpxml_bldg.heating_systems[0].fraction_heat_load_served += 0.1
hpxml_bldg.cooling_systems[0].fraction_cool_load_served += 0.2
@@ -450,22 +451,22 @@ def test_schema_schematron_error_messages
hpxml_bldg.cooling_systems[0].primary_system = true
hpxml_bldg.heat_pumps[-1].primary_heating_system = false
hpxml_bldg.heat_pumps[-1].primary_cooling_system = false
- elsif ['hvac-research-features-timestep-ten-mins'].include? error_case
+ when 'hvac-research-features-timestep-ten-mins'
hpxml, _hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml.header.timestep = 10
- elsif ['hvac-research-features-timestep-missing'].include? error_case
+ when 'hvac-research-features-timestep-missing'
hpxml, _hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml.header.timestep = nil
- elsif ['hvac-research-features-onoff-thermostat-heat-load-fraction-partial'].include? error_case
+ when 'hvac-research-features-onoff-thermostat-heat-load-fraction-partial'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml_bldg.heat_pumps[0].fraction_heat_load_served = 0.5
- elsif ['hvac-research-features-onoff-thermostat-cool-load-fraction-partial'].include? error_case
+ when 'hvac-research-features-onoff-thermostat-cool-load-fraction-partial'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml_bldg.heat_pumps[0].fraction_cool_load_served = 0.5
- elsif ['hvac-research-features-onoff-thermostat-negative-value'].include? error_case
+ when 'hvac-research-features-onoff-thermostat-negative-value'
hpxml, _hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml.header.hvac_onoff_thermostat_deadband = -1.0
- elsif ['hvac-research-features-onoff-thermostat-two-heat-pumps'].include? error_case
+ when 'hvac-research-features-onoff-thermostat-two-heat-pumps'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml_bldg.heat_pumps[0].fraction_cool_load_served = 0.5
hpxml_bldg.heat_pumps[0].fraction_heat_load_served = 0.5
@@ -473,80 +474,80 @@ def test_schema_schematron_error_messages
hpxml_bldg.heat_pumps[-1].id = 'HeatPump2'
hpxml_bldg.heat_pumps[-1].primary_heating_system = false
hpxml_bldg.heat_pumps[-1].primary_cooling_system = false
- elsif ['hvac-gshp-invalid-bore-config'].include? error_case
+ when 'hvac-gshp-invalid-bore-config'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.geothermal_loops[0].bore_config = 'Invalid'
- elsif ['hvac-gshp-invalid-bore-depth-low'].include? error_case
+ when 'hvac-gshp-invalid-bore-depth-low'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.geothermal_loops[0].bore_length = 78
- elsif ['hvac-gshp-invalid-bore-depth-high'].include? error_case
+ when 'hvac-gshp-invalid-bore-depth-high'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.geothermal_loops[0].bore_length = 501
- elsif ['hvac-gshp-autosized-count-not-rectangle'].include? error_case
+ when 'hvac-gshp-autosized-count-not-rectangle'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.geothermal_loops[0].num_bore_holes = nil
- elsif ['hvac-location-heating-system'].include? error_case
+ when 'hvac-location-heating-system'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-boiler-oil-only.xml')
hpxml_bldg.heating_systems[0].location = HPXML::LocationBasementUnconditioned
- elsif ['hvac-location-cooling-system'].include? error_case
+ when 'hvac-location-cooling-system'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-central-ac-only-1-speed.xml')
hpxml_bldg.cooling_systems[0].location = HPXML::LocationBasementUnconditioned
- elsif ['hvac-location-heat-pump'].include? error_case
+ when 'hvac-location-heat-pump'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].location = HPXML::LocationBasementUnconditioned
- elsif ['hvac-msac-not-var-speed'].include? error_case
+ when 'hvac-msac-not-var-speed'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-mini-split-air-conditioner-only-ductless.xml')
hpxml_bldg.cooling_systems[0].compressor_type = HPXML::HVACCompressorTypeTwoStage
- elsif ['hvac-mshp-not-var-speed'].include? error_case
+ when 'hvac-mshp-not-var-speed'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-mini-split-heat-pump-ductless.xml')
hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeSingleStage
- elsif ['hvac-shr-low'].include? error_case
+ when 'hvac-shr-low'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.cooling_systems[0].cooling_shr = 0.4
- elsif ['hvac-sizing-humidity-setpoint'].include? error_case
+ when 'hvac-sizing-humidity-setpoint'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.manualj_humidity_setpoint = 50
- elsif ['hvac-sizing-daily-temp-range'].include? error_case
+ when 'hvac-sizing-daily-temp-range'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.manualj_daily_temp_range = 'foobar'
- elsif ['hvac-negative-crankcase-heater-watts'].include? error_case
+ when 'hvac-negative-crankcase-heater-watts'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.cooling_systems[0].crankcase_heater_watts = -10
- elsif ['incomplete-integrated-heating'].include? error_case
+ when 'incomplete-integrated-heating'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ptac-with-heating-electricity.xml')
hpxml_bldg.cooling_systems[0].integrated_heating_system_fraction_heat_load_served = nil
- elsif ['invalid-airflow-defect-ratio'].include? error_case
+ when 'invalid-airflow-defect-ratio'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-mini-split-heat-pump-ductless.xml')
hpxml_bldg.heat_pumps[0].airflow_defect_ratio = -0.25
- elsif ['invalid-assembly-effective-rvalue'].include? error_case
+ when 'invalid-assembly-effective-rvalue'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.walls[0].insulation_assembly_r_value = 0.0
- elsif ['invalid-battery-capacities-ah'].include? error_case
+ when 'invalid-battery-capacities-ah'
hpxml, hpxml_bldg = _create_hpxml('base-pv-battery-ah.xml')
hpxml_bldg.batteries[0].usable_capacity_ah = hpxml_bldg.batteries[0].nominal_capacity_ah
- elsif ['invalid-battery-capacities-kwh'].include? error_case
+ when 'invalid-battery-capacities-kwh'
hpxml, hpxml_bldg = _create_hpxml('base-pv-battery.xml')
hpxml_bldg.batteries[0].usable_capacity_kwh = hpxml_bldg.batteries[0].nominal_capacity_kwh
- elsif ['invalid-calendar-year-low'].include? error_case
+ when 'invalid-calendar-year-low'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml.header.sim_calendar_year = 1575
- elsif ['invalid-calendar-year-high'].include? error_case
+ when 'invalid-calendar-year-high'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml.header.sim_calendar_year = 20000
- elsif ['invalid-clothes-dryer-cef'].include? error_case
+ when 'invalid-clothes-dryer-cef'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.clothes_dryers[0].combined_energy_factor = 0
- elsif ['invalid-clothes-washer-imef'].include? error_case
+ when 'invalid-clothes-washer-imef'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.clothes_washers[0].integrated_modified_energy_factor = 0
- elsif ['invalid-cfis-addtl-runtime-mode'].include? error_case
+ when 'invalid-cfis-addtl-runtime-mode'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-control-type-timer.xml')
hpxml_bldg.ventilation_fans[0].cfis_addtl_runtime_operating_mode = HPXML::CFISModeNone
hpxml_bldg.ventilation_fans[0].fan_power = nil
- elsif ['invalid-dishwasher-ler'].include? error_case
+ when 'invalid-dishwasher-ler'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.dishwashers[0].label_electric_rate = 0
- elsif ['invalid-duct-area-fractions'].include? error_case
+ when 'invalid-duct-area-fractions'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ducts-area-fractions.xml')
hpxml_bldg.hvac_distributions[0].ducts[0].duct_surface_area = nil
hpxml_bldg.hvac_distributions[0].ducts[1].duct_surface_area = nil
@@ -556,41 +557,41 @@ def test_schema_schematron_error_messages
hpxml_bldg.hvac_distributions[0].ducts[1].duct_fraction_area = 0.65
hpxml_bldg.hvac_distributions[0].ducts[2].duct_fraction_area = 0.15
hpxml_bldg.hvac_distributions[0].ducts[3].duct_fraction_area = 0.15
- elsif ['invalid-facility-type'].include? error_case
+ when 'invalid-facility-type'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-laundry-room.xml')
hpxml_bldg.building_construction.residential_facility_type = HPXML::ResidentialTypeSFD
- elsif ['invalid-foundation-wall-properties'].include? error_case
+ when 'invalid-foundation-wall-properties'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-unconditioned-basement-wall-insulation.xml')
hpxml_bldg.foundation_walls[0].depth_below_grade = 9.0
hpxml_bldg.foundation_walls[0].insulation_interior_distance_to_top = 12.0
hpxml_bldg.foundation_walls[0].insulation_interior_distance_to_bottom = 10.0
- elsif ['invalid-ground-conductivity'].include? error_case
+ when 'invalid-ground-conductivity'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.site.ground_conductivity = 0.0
- elsif ['invalid-ground-diffusivity'].include? error_case
+ when 'invalid-ground-diffusivity'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.site.ground_diffusivity = 0.0
- elsif ['invalid-heat-pump-capacity-retention'].include? error_case
+ when 'invalid-heat-pump-capacity-retention'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].heating_capacity_17F = nil
hpxml_bldg.heat_pumps[0].heating_capacity_retention_fraction = 1.5
hpxml_bldg.heat_pumps[0].heating_capacity_retention_temp = 30
- elsif ['invalid-heat-pump-capacity-retention2'].include? error_case
+ when 'invalid-heat-pump-capacity-retention2'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].heating_capacity_17F = nil
hpxml_bldg.heat_pumps[0].heating_capacity_retention_fraction = -1
hpxml_bldg.heat_pumps[0].heating_capacity_retention_temp = 5
- elsif ['invalid-hvac-installation-quality'].include? error_case
+ when 'invalid-hvac-installation-quality'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].airflow_defect_ratio = -99
hpxml_bldg.heat_pumps[0].charge_defect_ratio = -99
- elsif ['invalid-hvac-installation-quality2'].include? error_case
+ when 'invalid-hvac-installation-quality2'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].airflow_defect_ratio = 99
hpxml_bldg.heat_pumps[0].charge_defect_ratio = 99
- elsif ['invalid-id2'].include? error_case
+ when 'invalid-id2'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-skylights.xml')
- elsif ['invalid-input-parameters'].include? error_case
+ when 'invalid-input-parameters'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml.header.transaction = 'modify'
hpxml_bldg.site.site_type = 'mountain'
@@ -601,15 +602,15 @@ def test_schema_schematron_error_messages
hpxml_bldg.roofs[0].azimuth = 365
hpxml_bldg.dishwashers[0].rated_annual_kwh = nil
hpxml_bldg.dishwashers[0].energy_factor = 5.1
- elsif ['invalid-insulation-top'].include? error_case
+ when 'invalid-insulation-top'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.foundation_walls[0].insulation_interior_distance_to_top = -0.5
- elsif ['invalid-integrated-heating'].include? error_case
+ when 'invalid-integrated-heating'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-central-ac-only-1-speed.xml')
hpxml_bldg.cooling_systems[0].integrated_heating_system_fuel = HPXML::FuelTypeElectricity
hpxml_bldg.cooling_systems[0].integrated_heating_system_efficiency_percent = 0.98
hpxml_bldg.cooling_systems[0].integrated_heating_system_fraction_heat_load_served = 1.0
- elsif ['invalid-lighting-groups'].include? error_case
+ when 'invalid-lighting-groups'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
[HPXML::LocationInterior, HPXML::LocationExterior, HPXML::LocationGarage].each do |ltg_loc|
hpxml_bldg.lighting_groups.each do |lg|
@@ -619,7 +620,7 @@ def test_schema_schematron_error_messages
break
end
end
- elsif ['invalid-lighting-groups2'].include? error_case
+ when 'invalid-lighting-groups2'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
[HPXML::LocationInterior, HPXML::LocationExterior, HPXML::LocationGarage].each do |ltg_loc|
hpxml_bldg.lighting_groups.each do |lg|
@@ -631,75 +632,75 @@ def test_schema_schematron_error_messages
break
end
end
- elsif ['invalid-natvent-availability'].include? error_case
+ when 'invalid-natvent-availability'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.natvent_days_per_week = 8
- elsif ['invalid-natvent-availability2'].include? error_case
+ when 'invalid-natvent-availability2'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.natvent_days_per_week = -1
- elsif ['invalid-number-of-bedrooms-served-pv'].include? error_case
+ when 'invalid-number-of-bedrooms-served-pv'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-pv.xml')
hpxml_bldg.pv_systems[0].number_of_bedrooms_served = 3
- elsif ['invalid-number-of-bedrooms-served-recirc'].include? error_case
+ when 'invalid-number-of-bedrooms-served-recirc'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-water-heater-recirc.xml')
hpxml_bldg.hot_water_distributions[0].shared_recirculation_number_of_bedrooms_served = 3
- elsif ['invalid-number-of-bedrooms-served-water-heater'].include? error_case
+ when 'invalid-number-of-bedrooms-served-water-heater'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-water-heater.xml')
hpxml_bldg.water_heating_systems[0].number_of_bedrooms_served = 3
- elsif ['invalid-number-of-conditioned-floors'].include? error_case
+ when 'invalid-number-of-conditioned-floors'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.building_construction.number_of_conditioned_floors_above_grade = 3
- elsif ['invalid-number-of-conditioned-floors-above-grade'].include? error_case
+ when 'invalid-number-of-conditioned-floors-above-grade'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.building_construction.number_of_conditioned_floors_above_grade = 0
- elsif ['invalid-pilot-light-heating-system'].include? error_case
+ when 'invalid-pilot-light-heating-system'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-floor-furnace-propane-only.xml')
hpxml_bldg.heating_systems[0].heating_system_fuel = HPXML::FuelTypeElectricity
- elsif ['invalid-soil-type'].include? error_case
+ when 'invalid-soil-type'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.site.soil_type = HPXML::SiteSoilTypeOther
- elsif ['invalid-shared-vent-in-unit-flowrate'].include? error_case
+ when 'invalid-shared-vent-in-unit-flowrate'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-mechvent.xml')
hpxml_bldg.ventilation_fans[0].rated_flow_rate = 80
- elsif ['invalid-timestep'].include? error_case
+ when 'invalid-timestep'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml.header.timestep = 45
- elsif ['invalid-timezone-utcoffset-low'].include? error_case
+ when 'invalid-timezone-utcoffset-low'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.time_zone_utc_offset = -13
- elsif ['invalid-timezone-utcoffset-high'].include? error_case
+ when 'invalid-timezone-utcoffset-high'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.time_zone_utc_offset = 15
- elsif ['invalid-ventilation-fan'].include? error_case
+ when 'invalid-ventilation-fan'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-exhaust.xml')
hpxml_bldg.ventilation_fans[0].used_for_garage_ventilation = true
- elsif ['invalid-ventilation-recovery'].include? error_case
+ when 'invalid-ventilation-recovery'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-exhaust.xml')
hpxml_bldg.ventilation_fans[0].sensible_recovery_efficiency = 0.72
hpxml_bldg.ventilation_fans[0].total_recovery_efficiency = 0.48
- elsif ['invalid-water-heater-heating-capacity'].include? error_case
+ when 'invalid-water-heater-heating-capacity'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-gas.xml')
hpxml_bldg.water_heating_systems[0].heating_capacity = 0
- elsif ['invalid-water-heater-heating-capacity2'].include? error_case
+ when 'invalid-water-heater-heating-capacity2'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-heat-pump.xml')
hpxml_bldg.water_heating_systems[0].heating_capacity = 0
- elsif ['invalid-window-height'].include? error_case
+ when 'invalid-window-height'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-overhangs.xml')
hpxml_bldg.windows[1].overhangs_distance_to_bottom_of_window = 1.0
- elsif ['leakiness-description-missing-year-built'].include? error_case
+ when 'leakiness-description-missing-year-built'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-infil-leakiness-description.xml')
hpxml_bldg.building_construction.year_built = nil
- elsif ['lighting-fractions'].include? error_case
+ when 'lighting-fractions'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
int_cfl = hpxml_bldg.lighting_groups.find { |lg| lg.location == HPXML::LocationInterior && lg.lighting_type == HPXML::LightingTypeCFL }
int_cfl.fraction_of_units_in_location = 0.8
- elsif ['manufactured-home-reference-duct'].include? error_case
+ when 'manufactured-home-reference-duct'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationManufacturedHomeBelly
- elsif ['manufactured-home-reference-water-heater'].include? error_case
+ when 'manufactured-home-reference-water-heater'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.water_heating_systems[0].location = HPXML::LocationManufacturedHomeBelly
- elsif ['manufactured-home-reference-floor'].include? error_case
+ when 'manufactured-home-reference-floor'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-vented-crawlspace.xml')
hpxml_bldg.floors.each do |floor|
if floor.exterior_adjacent_to == HPXML::LocationCrawlspaceVented
@@ -707,97 +708,97 @@ def test_schema_schematron_error_messages
break
end
end
- elsif ['missing-attached-to-space-wall'].include? error_case
+ when 'missing-attached-to-space-wall'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.walls.find { |s| s.interior_adjacent_to == HPXML::LocationConditionedSpace }.attached_to_space_idref = nil
- elsif ['missing-attached-to-space-slab'].include? error_case
+ when 'missing-attached-to-space-slab'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.slabs.find { |s| s.interior_adjacent_to == HPXML::LocationBasementConditioned }.attached_to_space_idref = nil
- elsif ['missing-attached-to-zone'].include? error_case
+ when 'missing-attached-to-zone'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.hvac_systems[0].attached_to_zone_idref = nil
- elsif ['missing-capacity-detailed-performance'].include? error_case
+ when 'missing-capacity-detailed-performance'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-mini-split-heat-pump-ductless-detailed-performance.xml')
hpxml_bldg.heat_pumps[0].cooling_capacity = nil
hpxml_bldg.heat_pumps[0].heating_capacity = nil
- elsif ['missing-cfis-supplemental-fan'].include? error_case
+ when 'missing-cfis-supplemental-fan'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-supplemental-fan-exhaust.xml')
hpxml_bldg.ventilation_fans[1].delete
- elsif ['missing-distribution-cfa-served'].include? error_case
+ when 'missing-distribution-cfa-served'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].ducts[1].duct_surface_area = nil
hpxml_bldg.hvac_distributions[0].ducts[1].duct_location = nil
- elsif ['missing-duct-area'].include? error_case
+ when 'missing-duct-area'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].conditioned_floor_area_served = hpxml_bldg.building_construction.conditioned_floor_area
hpxml_bldg.hvac_distributions[0].ducts[1].duct_surface_area = nil
- elsif ['missing-duct-location'].include? error_case
+ when 'missing-duct-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].ducts[1].duct_location = nil
- elsif ['missing-elements'].include? error_case
+ when 'missing-elements'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.building_construction.number_of_conditioned_floors = nil
hpxml_bldg.building_construction.conditioned_floor_area = nil
- elsif ['missing-epw-filepath-and-zipcode'].include? error_case
+ when 'missing-epw-filepath-and-zipcode'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.climate_and_risk_zones.weather_station_epw_filepath = nil
- elsif ['missing-skylight-floor'].include? error_case
+ when 'missing-skylight-floor'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-skylights.xml')
hpxml_bldg.skylights[0].attached_to_floor_idref = nil
- elsif ['multifamily-reference-appliance'].include? error_case
+ when 'multifamily-reference-appliance'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.clothes_washers[0].location = HPXML::LocationOtherHousingUnit
- elsif ['multifamily-reference-duct'].include? error_case
+ when 'multifamily-reference-duct'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherMultifamilyBufferSpace
- elsif ['multifamily-reference-surface'].include? error_case
+ when 'multifamily-reference-surface'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.floors << hpxml_bldg.floors[0].dup
hpxml_bldg.floors[1].id = "Floor#{hpxml_bldg.floors.size}"
hpxml_bldg.floors[1].insulation_id = "FloorInsulation#{hpxml_bldg.floors.size}"
hpxml_bldg.floors[1].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
hpxml_bldg.floors[1].floor_or_ceiling = HPXML::FloorOrCeilingCeiling
- elsif ['multifamily-reference-water-heater'].include? error_case
+ when 'multifamily-reference-water-heater'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.water_heating_systems[0].location = HPXML::LocationOtherNonFreezingSpace
- elsif ['negative-autosizing-factors'].include? error_case
+ when 'negative-autosizing-factors'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-autosize-factor.xml')
hpxml_bldg.heat_pumps[0].heating_autosizing_factor = -0.5
hpxml_bldg.heat_pumps[0].cooling_autosizing_factor = -1.2
hpxml_bldg.heat_pumps[0].backup_heating_autosizing_factor = -0.1
- elsif ['refrigerator-location'].include? error_case
+ when 'refrigerator-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.refrigerators[0].location = HPXML::LocationGarage
- elsif ['refrigerator-schedule'].include? error_case
+ when 'refrigerator-schedule'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.refrigerators[0].weekday_fractions = '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
hpxml_bldg.refrigerators[0].constant_coefficients = '-0.487, -0.340, -0.370, -0.361, -0.515, -0.684, -0.471, -0.159, -0.079, -0.417, -0.411, -0.386, -0.240, -0.314, -0.160, -0.121, -0.469, -0.412, -0.091, 0.077, -0.118, -0.247, -0.445, -0.544'
- elsif ['solar-fraction-one'].include? error_case
+ when 'solar-fraction-one'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-solar-fraction.xml')
hpxml_bldg.solar_thermal_systems[0].solar_fraction = 1.0
- elsif ['sum-space-floor-area'].include? error_case
+ when 'sum-space-floor-area'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.conditioned_spaces.each do |space|
space.floor_area /= 2.0
end
- elsif ['sum-space-floor-area2'].include? error_case
+ when 'sum-space-floor-area2'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.conditioned_spaces.each do |space|
space.floor_area *= 2.0
end
- elsif ['water-heater-location'].include? error_case
+ when 'water-heater-location'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.water_heating_systems[0].location = HPXML::LocationCrawlspaceVented
- elsif ['water-heater-location-other'].include? error_case
+ when 'water-heater-location-other'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.water_heating_systems[0].location = HPXML::LocationUnconditionedSpace
- elsif ['water-heater-recovery-efficiency'].include? error_case
+ when 'water-heater-recovery-efficiency'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-gas.xml')
hpxml_bldg.water_heating_systems[0].recovery_efficiency = hpxml_bldg.water_heating_systems[0].energy_factor
- elsif ['wrong-infiltration-method-blower-door'].include? error_case
+ when 'wrong-infiltration-method-blower-door'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-infil-leakiness-description.xml')
hpxml_bldg.header.manualj_infiltration_method = HPXML::ManualJInfiltrationMethodBlowerDoor
- elsif ['wrong-infiltration-method-default-table'].include? error_case
+ when 'wrong-infiltration-method-default-table'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.manualj_infiltration_method = HPXML::ManualJInfiltrationMethodDefaultTable
else
@@ -807,7 +808,7 @@ def test_schema_schematron_error_messages
hpxml_doc = hpxml.to_doc()
# Perform additional raw XML manipulation
- if ['invalid-id2'].include? error_case
+ if error_case == 'invalid-id2'
element = XMLHelper.get_element(hpxml_doc, '/HPXML/Building/BuildingDetails/Enclosure/Skylights/Skylight/SystemIdentifier')
XMLHelper.delete_attribute(element, 'id')
end
@@ -907,19 +908,20 @@ def test_schema_schematron_warning_messages
all_expected_warnings.each_with_index do |(warning_case, expected_warnings), i|
puts "[#{i + 1}/#{all_expected_warnings.size}] Testing #{warning_case}..."
# Create HPXML object
- if ['battery-pv-output-power-low'].include? warning_case
+ case warning_case
+ when 'battery-pv-output-power-low'
hpxml, hpxml_bldg = _create_hpxml('base-pv-battery.xml')
hpxml_bldg.batteries[0].rated_power_output = 0.1
hpxml_bldg.pv_systems[0].max_power_output = 0.1
hpxml_bldg.pv_systems[1].max_power_output = 0.1
- elsif ['dhw-capacities-low'].include? warning_case
+ when 'dhw-capacities-low'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-multiple.xml')
hpxml_bldg.water_heating_systems.each do |water_heating_system|
if [HPXML::WaterHeaterTypeStorage].include? water_heating_system.water_heater_type
water_heating_system.heating_capacity = 0.1
end
end
- elsif ['dhw-efficiencies-low'].include? warning_case
+ when 'dhw-efficiencies-low'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-multiple.xml')
hpxml_bldg.water_heating_systems.each do |water_heating_system|
if [HPXML::WaterHeaterTypeStorage,
@@ -927,33 +929,33 @@ def test_schema_schematron_warning_messages
water_heating_system.energy_factor = 0.1
end
end
- elsif ['dhw-setpoint-low'].include? warning_case
+ when 'dhw-setpoint-low'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.water_heating_systems[0].temperature = 100
- elsif ['erv-atre-low'].include? warning_case
+ when 'erv-atre-low'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-erv-atre-asre.xml')
hpxml_bldg.ventilation_fans[0].total_recovery_efficiency_adjusted = 0.1
- elsif ['fuel-load-type-other'].include? warning_case
+ when 'fuel-load-type-other'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.fuel_loads[0].fuel_load_type = HPXML::FuelLoadTypeOther
- elsif ['erv-tre-low'].include? warning_case
+ when 'erv-tre-low'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-erv.xml')
hpxml_bldg.ventilation_fans[0].total_recovery_efficiency = 0.1
- elsif ['garage-ventilation'].include? warning_case
+ when 'garage-ventilation'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.ventilation_fans.add(id: 'VentilationFan1',
used_for_garage_ventilation: true)
- elsif ['heat-pump-low-backup-switchover-temp'].include? warning_case
+ when 'heat-pump-low-backup-switchover-temp'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].backup_heating_switchover_temp = 25.0
- elsif ['heat-pump-low-backup-lockout-temp'].include? warning_case
+ when 'heat-pump-low-backup-lockout-temp'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml')
hpxml_bldg.heat_pumps[0].backup_heating_lockout_temp = 25.0
- elsif ['hvac-dse-low'].include? warning_case
+ when 'hvac-dse-low'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-dse.xml')
hpxml_bldg.hvac_distributions[0].annual_heating_dse = 0.1
hpxml_bldg.hvac_distributions[0].annual_cooling_dse = 0.1
- elsif ['hvac-capacities-low'].include? warning_case
+ when 'hvac-capacities-low'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-multiple.xml')
hpxml_bldg.hvac_systems.each do |hvac_system|
if hvac_system.is_a? HPXML::HeatingSystem
@@ -966,97 +968,100 @@ def test_schema_schematron_warning_messages
hvac_system.backup_heating_capacity = 0.1
end
end
- elsif ['hvac-efficiencies-low'].include? warning_case
+ when 'hvac-efficiencies-low'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-multiple.xml')
hpxml_bldg.hvac_systems.each do |hvac_system|
if hvac_system.is_a? HPXML::HeatingSystem
- if [HPXML::HVACTypeElectricResistance,
- HPXML::HVACTypeStove].include? hvac_system.heating_system_type
+ case hvac_system.heating_system_type
+ when HPXML::HVACTypeElectricResistance,
+ HPXML::HVACTypeStove
hvac_system.heating_efficiency_percent = 0.1
- elsif [HPXML::HVACTypeFurnace,
+ when HPXML::HVACTypeFurnace,
HPXML::HVACTypeWallFurnace,
- HPXML::HVACTypeBoiler].include? hvac_system.heating_system_type
+ HPXML::HVACTypeBoiler
hvac_system.heating_efficiency_afue = 0.1
end
elsif hvac_system.is_a? HPXML::CoolingSystem
- if [HPXML::HVACTypeCentralAirConditioner].include? hvac_system.cooling_system_type
+ case hvac_system.cooling_system_type
+ when HPXML::HVACTypeCentralAirConditioner
hvac_system.cooling_efficiency_seer = 0.1
- elsif [HPXML::HVACTypeRoomAirConditioner].include? hvac_system.cooling_system_type
+ when HPXML::HVACTypeRoomAirConditioner
hvac_system.cooling_efficiency_eer = 0.1
end
elsif hvac_system.is_a? HPXML::HeatPump
- if [HPXML::HVACTypeHeatPumpAirToAir,
- HPXML::HVACTypeHeatPumpMiniSplit].include? hvac_system.heat_pump_type
+ case hvac_system.heat_pump_type
+ when HPXML::HVACTypeHeatPumpAirToAir,
+ HPXML::HVACTypeHeatPumpMiniSplit
hvac_system.cooling_efficiency_seer = 0.1
hvac_system.heating_efficiency_hspf = 0.1
- elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? hvac_system.heat_pump_type
+ when HPXML::HVACTypeHeatPumpGroundToAir
hvac_system.cooling_efficiency_eer = 0.1
hvac_system.heating_efficiency_cop = 0.1
end
end
end
- elsif ['hvac-setpoints-high'].include? warning_case
+ when 'hvac-setpoints-high'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_controls[0].heating_setpoint_temp = 100
hpxml_bldg.hvac_controls[0].cooling_setpoint_temp = 100
- elsif ['hvac-setpoints-low'].include? warning_case
+ when 'hvac-setpoints-low'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_controls[0].heating_setpoint_temp = 0
hpxml_bldg.hvac_controls[0].cooling_setpoint_temp = 0
- elsif ['integrated-heating-efficiency-low'].include? warning_case
+ when 'integrated-heating-efficiency-low'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ptac-with-heating-electricity.xml')
hpxml_bldg.cooling_systems[0].integrated_heating_system_efficiency_percent = 0.4
- elsif ['lighting-groups-missing'].include? warning_case
+ when 'lighting-groups-missing'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
hpxml_bldg.lighting_groups.reverse_each do |lg|
lg.delete
end
- elsif ['missing-attached-surfaces'].include? warning_case
+ when 'missing-attached-surfaces'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.building_construction.residential_facility_type = HPXML::ResidentialTypeSFA
hpxml_bldg.air_infiltration_measurements[0].infiltration_type = HPXML::InfiltrationTypeUnitExterior
- elsif ['hvac-research-features-onoff-thermostat-temperature-capacitance-multiplier-one'].include? warning_case
+ when 'hvac-research-features-onoff-thermostat-temperature-capacitance-multiplier-one'
hpxml, _hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml.header.temperature_capacitance_multiplier = 1
- elsif ['plug-load-type-sauna'].include? warning_case
+ when 'plug-load-type-sauna'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeSauna
- elsif ['plug-load-type-aquarium'].include? warning_case
+ when 'plug-load-type-aquarium'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeAquarium
- elsif ['plug-load-type-water-bed'].include? warning_case
+ when 'plug-load-type-water-bed'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeWaterBed
- elsif ['plug-load-type-space-heater'].include? warning_case
+ when 'plug-load-type-space-heater'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeSpaceHeater
- elsif ['plug-load-type-computer'].include? warning_case
+ when 'plug-load-type-computer'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeComputer
- elsif ['plug-load-type-tv-crt'].include? warning_case
+ when 'plug-load-type-tv-crt'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeTelevisionCRT
- elsif ['plug-load-type-tv-plasma'].include? warning_case
+ when 'plug-load-type-tv-plasma'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[0].plug_load_type = HPXML::PlugLoadTypeTelevisionPlasma
- elsif ['portable-spa'].include? warning_case
+ when 'portable-spa'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.portable_spas.add(id: 'PorableSpa')
- elsif ['slab-zero-exposed-perimeter'].include? warning_case
+ when 'slab-zero-exposed-perimeter'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.slabs[0].exposed_perimeter = 0
- elsif ['slab-ext-horiz-insul-without-perim-insul'].include? warning_case
+ when 'slab-ext-horiz-insul-without-perim-insul'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-slab-exterior-horizontal-insulation.xml')
hpxml_bldg.slabs[0].perimeter_insulation_r_value = 0
- elsif ['slab-large-exposed-perimeter'].include? warning_case
+ when 'slab-large-exposed-perimeter'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.slabs[0].exposed_perimeter = hpxml_bldg.slabs[0].area * 2 + 1
- elsif ['unit-multiplier'].include? warning_case
+ when 'unit-multiplier'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.building_construction.number_of_units = 5
- elsif ['window-exterior-shading-types'].include? warning_case
+ when 'window-exterior-shading-types'
hpxml, _hpxml_bldg = _create_hpxml('base-enclosure-windows-shading-types-detailed.xml')
- elsif ['wrong-units'].include? warning_case
+ when 'wrong-units'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-overhangs.xml')
hpxml_bldg.slabs[0].thickness = 0.5
hpxml_bldg.foundation_walls[0].thickness = 72.0
@@ -1197,73 +1202,74 @@ def test_ruby_error_messages
puts "[#{i + 1}/#{all_expected_errors.size}] Testing #{error_case}..."
building_id = nil
# Create HPXML object
- if ['battery-bad-values-max-greater-than-one'].include? error_case
+ case error_case
+ when 'battery-bad-values-max-greater-than-one'
hpxml, hpxml_bldg = _create_hpxml('base-battery-scheduled.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
csv_data[1][0] = 1.1
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['battery-bad-values-min-less-than-neg-one'].include? error_case
+ when 'battery-bad-values-min-less-than-neg-one'
hpxml, hpxml_bldg = _create_hpxml('base-battery-scheduled.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
csv_data[1][0] = -1.1
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['cfis-with-hydronic-distribution'].include? error_case
+ when 'cfis-with-hydronic-distribution'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-boiler-gas-only.xml')
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
fan_type: HPXML::MechVentTypeCFIS,
used_for_whole_building_ventilation: true,
distribution_system_idref: hpxml_bldg.hvac_distributions[0].id)
- elsif ['cfis-invalid-supplemental-fan'].include? error_case
+ when 'cfis-invalid-supplemental-fan'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-supplemental-fan-exhaust.xml')
suppl_fan = hpxml_bldg.ventilation_fans.find { |f| f.is_cfis_supplemental_fan }
suppl_fan.fan_type = HPXML::MechVentTypeBalanced
- elsif ['cfis-invalid-supplemental-fan2'].include? error_case
+ when 'cfis-invalid-supplemental-fan2'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-supplemental-fan-exhaust.xml')
suppl_fan = hpxml_bldg.ventilation_fans.find { |f| f.is_cfis_supplemental_fan }
suppl_fan.used_for_whole_building_ventilation = false
suppl_fan.used_for_garage_ventilation = true
- elsif ['cfis-invalid-supplemental-fan3'].include? error_case
+ when 'cfis-invalid-supplemental-fan3'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-supplemental-fan-exhaust.xml')
suppl_fan = hpxml_bldg.ventilation_fans.find { |f| f.is_cfis_supplemental_fan }
suppl_fan.is_shared_system = true
suppl_fan.fraction_recirculation = 0.0
suppl_fan.in_unit_flow_rate = suppl_fan.tested_flow_rate / 2.0
- elsif ['cfis-invalid-supplemental-fan4'].include? error_case
+ when 'cfis-invalid-supplemental-fan4'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-supplemental-fan-exhaust.xml')
suppl_fan = hpxml_bldg.ventilation_fans.find { |f| f.is_cfis_supplemental_fan }
suppl_fan.hours_in_operation = 12.0
- elsif ['dehumidifier-setpoints'].include? error_case
+ when 'dehumidifier-setpoints'
hpxml, hpxml_bldg = _create_hpxml('base-appliances-dehumidifier-multiple.xml')
hpxml_bldg.dehumidifiers[-1].rh_setpoint = 0.55
- elsif ['desuperheater-with-detailed-setpoints'].include? error_case
+ when 'desuperheater-with-detailed-setpoints'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-detailed-setpoints.xml')
hpxml_bldg.water_heating_systems[0].uses_desuperheater = true
hpxml_bldg.water_heating_systems[0].related_hvac_idref = hpxml_bldg.cooling_systems[0].id
- elsif ['duplicate-id'].include? error_case
+ when 'duplicate-id'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.plug_loads[-1].id = hpxml_bldg.plug_loads[0].id
- elsif ['emissions-duplicate-names'].include? error_case
+ when 'emissions-duplicate-names'
hpxml, _hpxml_bldg = _create_hpxml('base-misc-emissions.xml')
hpxml.header.emissions_scenarios << hpxml.header.emissions_scenarios[0].dup
- elsif ['emissions-wrong-columns'].include? error_case
+ when 'emissions-wrong-columns'
hpxml, _hpxml_bldg = _create_hpxml('base-misc-emissions.xml')
scenario = hpxml.header.emissions_scenarios[1]
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), scenario.elec_schedule_filepath))
csv_data[10] = [431.0] * (scenario.elec_schedule_column_number - 1)
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml.header.emissions_scenarios[1].elec_schedule_filepath = @tmp_csv_path
- elsif ['emissions-wrong-filename'].include? error_case
+ when 'emissions-wrong-filename'
hpxml, _hpxml_bldg = _create_hpxml('base-misc-emissions.xml')
hpxml.header.emissions_scenarios[1].elec_schedule_filepath = 'invalid-wrong-filename.csv'
- elsif ['emissions-wrong-rows'].include? error_case
+ when 'emissions-wrong-rows'
hpxml, _hpxml_bldg = _create_hpxml('base-misc-emissions.xml')
scenario = hpxml.header.emissions_scenarios[1]
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), scenario.elec_schedule_filepath))
File.write(@tmp_csv_path, csv_data[0..-2].map(&:to_csv).join)
hpxml.header.emissions_scenarios[1].elec_schedule_filepath = @tmp_csv_path
- elsif ['geothermal-loop-multiple-attached-hps'].include? error_case
+ when 'geothermal-loop-multiple-attached-hps'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.heat_pumps[0].fraction_cool_load_served = 0.5
hpxml_bldg.heat_pumps[0].fraction_heat_load_served = 0.5
@@ -1276,35 +1282,35 @@ def test_ruby_error_messages
annual_cooling_dse: 1.0,
annual_heating_dse: 1.0)
hpxml_bldg.heat_pumps[1].distribution_system_idref = hpxml_bldg.hvac_distributions[1].id
- elsif ['heat-pump-backup-system-load-fraction'].include? error_case
+ when 'heat-pump-backup-system-load-fraction'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml')
hpxml_bldg.heating_systems[0].fraction_heat_load_served = 0.5
hpxml_bldg.heat_pumps[0].fraction_heat_load_served = 0.5
- elsif ['heat-pump-switchover-temp-elec-backup'].include? error_case
+ when 'heat-pump-switchover-temp-elec-backup'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].backup_heating_switchover_temp = 35.0
- elsif ['hvac-cooling-detailed-performance-incomplete-pair'].include? error_case
+ when 'hvac-cooling-detailed-performance-incomplete-pair'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-detailed-performance.xml')
hpxml_bldg.heat_pumps[0].cooling_detailed_performance_data[-1].outdoor_temperature -= 1.0
- elsif ['hvac-heating-detailed-performance-incomplete-pair'].include? error_case
+ when 'hvac-heating-detailed-performance-incomplete-pair'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-detailed-performance.xml')
hpxml_bldg.heat_pumps[0].heating_detailed_performance_data[-1].outdoor_temperature -= 1.0
- elsif ['heat-pump-lockout-temps-elec-backup'].include? error_case
+ when 'heat-pump-lockout-temps-elec-backup'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.heat_pumps[0].compressor_lockout_temp = 35.0
hpxml_bldg.heat_pumps[0].backup_heating_lockout_temp = 35.0
- elsif ['hvac-invalid-distribution-system-type'].include? error_case
+ when 'hvac-invalid-distribution-system-type'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions.add(id: "HVACDistribution#{hpxml_bldg.hvac_distributions.size + 1}",
distribution_system_type: HPXML::HVACDistributionTypeHydronic,
hydronic_type: HPXML::HydronicTypeBaseboard)
hpxml_bldg.heating_systems[-1].distribution_system_idref = hpxml_bldg.hvac_distributions[-1].id
- elsif ['hvac-attached-to-uncond-zone'].include? error_case
+ when 'hvac-attached-to-uncond-zone'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.hvac_systems.each do |hvac_system|
hvac_system.attached_to_zone_idref = hpxml_bldg.zones.find { |zone| zone.zone_type != HPXML::ZoneTypeConditioned }.id
end
- elsif ['hvac-distribution-different-zones'].include? error_case
+ when 'hvac-distribution-different-zones'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.zones.add(id: 'ConditionedZoneDup',
zone_type: HPXML::ZoneTypeConditioned)
@@ -1313,45 +1319,45 @@ def test_ruby_error_messages
floor_area: hpxml_bldg.zones[0].spaces[0].floor_area)
hpxml_bldg.heating_systems[0].attached_to_zone_idref = hpxml_bldg.conditioned_zones[0].id
hpxml_bldg.cooling_systems[0].attached_to_zone_idref = hpxml_bldg.conditioned_zones[-1].id
- elsif ['hvac-distribution-multiple-attached-cooling'].include? error_case
+ when 'hvac-distribution-multiple-attached-cooling'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-multiple.xml')
hpxml_bldg.heat_pumps[0].distribution_system_idref = 'HVACDistribution2'
- elsif ['hvac-distribution-multiple-attached-heating'].include? error_case
+ when 'hvac-distribution-multiple-attached-heating'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-multiple.xml')
hpxml_bldg.heat_pumps[0].distribution_system_idref = 'HVACDistribution1'
- elsif ['hvac-dse-multiple-attached-cooling'].include? error_case
+ when 'hvac-dse-multiple-attached-cooling'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-dse.xml')
hpxml_bldg.cooling_systems[0].fraction_cool_load_served = 0.5
hpxml_bldg.cooling_systems << hpxml_bldg.cooling_systems[0].dup
hpxml_bldg.cooling_systems[1].id = "CoolingSystem#{hpxml_bldg.cooling_systems.size}"
hpxml_bldg.cooling_systems[0].primary_system = false
- elsif ['hvac-dse-multiple-attached-heating'].include? error_case
+ when 'hvac-dse-multiple-attached-heating'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-dse.xml')
hpxml_bldg.heating_systems[0].fraction_heat_load_served = 0.5
hpxml_bldg.heating_systems << hpxml_bldg.heating_systems[0].dup
hpxml_bldg.heating_systems[1].id = "HeatingSystem#{hpxml_bldg.heating_systems.size}"
hpxml_bldg.heating_systems[0].primary_system = false
- elsif ['hvac-research-features-onoff-thermostat-num-speeds-greater-than-two'].include? error_case
+ when 'hvac-research-features-onoff-thermostat-num-speeds-greater-than-two'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeVariableSpeed
- elsif ['hvac-research-features-num-unit-greater-than-one'].include? error_case
+ when 'hvac-research-features-num-unit-greater-than-one'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml_bldg.building_construction.number_of_units = 2
- elsif ['hvac-gshp-invalid-bore-depth-autosized'].include? error_case
+ when 'hvac-gshp-invalid-bore-depth-autosized'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump.xml')
hpxml_bldg.site.ground_conductivity = 0.1
- elsif ['hvac-gshp-invalid-num-bore-holes'].include? error_case
+ when 'hvac-gshp-invalid-num-bore-holes'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.geothermal_loops[0].num_bore_holes = 5
- elsif ['hvac-gshp-invalid-num-bore-holes-autosized'].include? error_case
+ when 'hvac-gshp-invalid-num-bore-holes-autosized'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump.xml')
hpxml_bldg.heat_pumps[0].cooling_capacity *= 2
hpxml_bldg.site.ground_conductivity = 0.08
- elsif ['hvac-inconsistent-fan-powers'].include? error_case
+ when 'hvac-inconsistent-fan-powers'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.cooling_systems[0].fan_watts_per_cfm = 0.55
hpxml_bldg.heating_systems[0].fan_watts_per_cfm = 0.45
- elsif ['hvac-shared-boiler-multiple'].include? error_case
+ when 'hvac-shared-boiler-multiple'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml')
hpxml_bldg.hvac_distributions << hpxml_bldg.hvac_distributions[0].dup
hpxml_bldg.hvac_distributions[-1].id = "HVACDistribution#{hpxml_bldg.hvac_distributions.size}"
@@ -1361,7 +1367,7 @@ def test_ruby_error_messages
hpxml_bldg.heating_systems[1].id = "HeatingSystem#{hpxml_bldg.heating_systems.size}"
hpxml_bldg.heating_systems[1].distribution_system_idref = hpxml_bldg.hvac_distributions[-1].id
hpxml_bldg.heating_systems[1].primary_system = true
- elsif ['hvac-shared-chiller-multiple'].include? error_case
+ when 'hvac-shared-chiller-multiple'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-chiller-only-baseboard.xml')
hpxml_bldg.hvac_distributions << hpxml_bldg.hvac_distributions[0].dup
hpxml_bldg.hvac_distributions[-1].id = "HVACDistribution#{hpxml_bldg.hvac_distributions.size}"
@@ -1371,214 +1377,214 @@ def test_ruby_error_messages
hpxml_bldg.cooling_systems[1].id = "CoolingSystem#{hpxml_bldg.cooling_systems.size}"
hpxml_bldg.cooling_systems[1].distribution_system_idref = hpxml_bldg.hvac_distributions[-1].id
hpxml_bldg.cooling_systems[1].primary_system = true
- elsif ['hvac-shared-chiller-negative-seer-eq'].include? error_case
+ when 'hvac-shared-chiller-negative-seer-eq'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-chiller-only-baseboard.xml')
hpxml_bldg.cooling_systems[0].shared_loop_watts *= 100.0
- elsif ['inconsistent-belly-wing-skirt-present'].include? error_case
+ when 'inconsistent-belly-wing-skirt-present'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-belly-wing-skirt.xml')
fnd = hpxml_bldg.foundations.find { |f| f.foundation_type == HPXML::FoundationTypeBellyAndWing }
hpxml_bldg.foundations << fnd.dup
hpxml_bldg.foundations[-1].id = 'Duplicate'
hpxml_bldg.foundations[-1].belly_wing_skirt_present = false
- elsif ['inconsistent-cond-zone-assignment'].include? error_case
+ when 'inconsistent-cond-zone-assignment'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
grg_ceiling = hpxml_bldg.floors.find { |f| f.interior_adjacent_to == HPXML::LocationGarage && f.exterior_adjacent_to == HPXML::LocationAtticUnvented }
grg_ceiling.attached_to_space_idref = hpxml_bldg.conditioned_spaces[0].id
- elsif ['inconsistent-uncond-basement-within-infiltration-volume'].include? error_case
+ when 'inconsistent-uncond-basement-within-infiltration-volume'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-unconditioned-basement.xml')
fnd = hpxml_bldg.foundations.find { |f| f.foundation_type == HPXML::FoundationTypeBasementUnconditioned }
hpxml_bldg.foundations << fnd.dup
hpxml_bldg.foundations[-1].id = 'Duplicate'
hpxml_bldg.foundations[-1].within_infiltration_volume = true
- elsif ['inconsistent-unvented-attic-within-infiltration-volume'].include? error_case
+ when 'inconsistent-unvented-attic-within-infiltration-volume'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
attic = hpxml_bldg.attics.find { |a| a.attic_type == HPXML::AtticTypeUnvented }
hpxml_bldg.attics << attic.dup
hpxml_bldg.attics[-1].id = 'Duplicate'
hpxml_bldg.attics[-1].within_infiltration_volume = true
- elsif ['inconsistent-unvented-crawl-within-infiltration-volume'].include? error_case
+ when 'inconsistent-unvented-crawl-within-infiltration-volume'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-unvented-crawlspace.xml')
fnd = hpxml_bldg.foundations.find { |f| f.foundation_type == HPXML::FoundationTypeCrawlspaceUnvented }
hpxml_bldg.foundations << fnd.dup
hpxml_bldg.foundations[-1].id = 'Duplicate'
hpxml_bldg.foundations[-1].within_infiltration_volume = true
- elsif ['inconsistent-vented-attic-ventilation-rate'].include? error_case
+ when 'inconsistent-vented-attic-ventilation-rate'
hpxml, hpxml_bldg = _create_hpxml('base-atticroof-vented.xml')
attic = hpxml_bldg.attics.find { |a| a.attic_type == HPXML::AtticTypeVented }
hpxml_bldg.attics << attic.dup
hpxml_bldg.attics[-1].id = 'Duplicate'
hpxml_bldg.attics[-1].vented_attic_sla *= 2
- elsif ['inconsistent-vented-attic-ventilation-rate2'].include? error_case
+ when 'inconsistent-vented-attic-ventilation-rate2'
hpxml, hpxml_bldg = _create_hpxml('base-atticroof-vented.xml')
attic = hpxml_bldg.attics.find { |a| a.attic_type == HPXML::AtticTypeVented }
hpxml_bldg.attics << attic.dup
hpxml_bldg.attics[-1].id = 'Duplicate'
hpxml_bldg.attics[-1].vented_attic_sla = nil
hpxml_bldg.attics[-1].vented_attic_ach = 5.0
- elsif ['inconsistent-vented-crawl-ventilation-rate'].include? error_case
+ when 'inconsistent-vented-crawl-ventilation-rate'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-vented-crawlspace.xml')
fnd = hpxml_bldg.foundations.find { |f| f.foundation_type == HPXML::FoundationTypeCrawlspaceVented }
hpxml_bldg.foundations << fnd.dup
hpxml_bldg.foundations[-1].id = 'Duplicate'
hpxml_bldg.foundations[-1].vented_crawlspace_sla *= 2
- elsif ['invalid-battery-capacity-units'].include? error_case
+ when 'invalid-battery-capacity-units'
hpxml, hpxml_bldg = _create_hpxml('base-pv-battery.xml')
hpxml_bldg.batteries[0].usable_capacity_kwh = nil
hpxml_bldg.batteries[0].usable_capacity_ah = 200.0
- elsif ['invalid-battery-capacity-units2'].include? error_case
+ when 'invalid-battery-capacity-units2'
hpxml, hpxml_bldg = _create_hpxml('base-pv-battery-ah.xml')
hpxml_bldg.batteries[0].usable_capacity_kwh = 10.0
hpxml_bldg.batteries[0].usable_capacity_ah = nil
- elsif ['invalid-datatype-boolean'].include? error_case
+ when 'invalid-datatype-boolean'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.roofs[0].radiant_barrier = false
- elsif ['invalid-datatype-integer'].include? error_case
+ when 'invalid-datatype-integer'
hpxml, _hpxml_bldg = _create_hpxml('base.xml')
- elsif ['invalid-datatype-float'].include? error_case
+ when 'invalid-datatype-float'
hpxml, _hpxml_bldg = _create_hpxml('base-misc-emissions.xml')
- elsif ['invalid-daylight-saving'].include? error_case
+ when 'invalid-daylight-saving'
hpxml, hpxml_bldg = _create_hpxml('base-simcontrol-daylight-saving-custom.xml')
hpxml_bldg.dst_begin_month = 3
hpxml_bldg.dst_begin_day = 10
hpxml_bldg.dst_end_month = 4
hpxml_bldg.dst_end_day = 31
- elsif ['invalid-distribution-cfa-served'].include? error_case
+ when 'invalid-distribution-cfa-served'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[-1].conditioned_floor_area_served = 2701.1
- elsif ['invalid-epw-filepath'].include? error_case
+ when 'invalid-epw-filepath'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.climate_and_risk_zones.weather_station_epw_filepath = 'foo.epw'
- elsif ['invalid-holiday-lighting-dates'].include? error_case
+ when 'invalid-holiday-lighting-dates'
hpxml, hpxml_bldg = _create_hpxml('base-lighting-holiday.xml')
hpxml_bldg.lighting.holiday_period_begin_month = 11
hpxml_bldg.lighting.holiday_period_begin_day = 31
hpxml_bldg.lighting.holiday_period_end_month = 1
hpxml_bldg.lighting.holiday_period_end_day = 15
- elsif ['invalid-id'].include? error_case
+ when 'invalid-id'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-skylights.xml')
hpxml_bldg.skylights[0].id = ''
- elsif ['invalid-neighbor-shading-azimuth'].include? error_case
+ when 'invalid-neighbor-shading-azimuth'
hpxml, hpxml_bldg = _create_hpxml('base-misc-neighbor-shading.xml')
hpxml_bldg.neighbor_buildings[0].azimuth = 145
- elsif ['invalid-ptac-dse'].include? error_case
+ when 'invalid-ptac-dse'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ptac-cfis.xml')
hpxml_bldg.hvac_distributions[0].annual_cooling_dse = 0.9
- elsif ['invalid-pthp-dse'].include? error_case
+ when 'invalid-pthp-dse'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-pthp-cfis.xml')
hpxml_bldg.hvac_distributions[0].annual_heating_dse = 0.9
- elsif ['invalid-relatedhvac-dhw-indirect'].include? error_case
+ when 'invalid-relatedhvac-dhw-indirect'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-indirect.xml')
hpxml_bldg.water_heating_systems[0].related_hvac_idref = 'HeatingSystem_bad'
- elsif ['invalid-relatedhvac-desuperheater'].include? error_case
+ when 'invalid-relatedhvac-desuperheater'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-central-ac-only-1-speed.xml')
hpxml_bldg.water_heating_systems[0].uses_desuperheater = true
hpxml_bldg.water_heating_systems[0].related_hvac_idref = 'CoolingSystem_bad'
- elsif ['invalid-runperiod'].include? error_case
+ when 'invalid-runperiod'
hpxml, _hpxml_bldg = _create_hpxml('base.xml')
hpxml.header.sim_begin_month = 3
hpxml.header.sim_begin_day = 10
hpxml.header.sim_end_month = 4
hpxml.header.sim_end_day = 31
- elsif ['invalid-shading-season'].include? error_case
+ when 'invalid-shading-season'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.shading_summer_begin_month = 3
hpxml_bldg.header.shading_summer_begin_day = 10
hpxml_bldg.header.shading_summer_end_month = 4
hpxml_bldg.header.shading_summer_end_day = 31
- elsif ['invalid-unavailable-period'].include? error_case
+ when 'invalid-unavailable-period'
hpxml, _hpxml_bldg = _create_hpxml('base.xml')
hpxml.header.unavailable_periods.add(column_name: 'Power Outage',
begin_month: 3,
begin_day: 10,
end_month: 4,
end_day: 31)
- elsif ['invalid-schema-version'].include? error_case
+ when 'invalid-schema-version'
hpxml, _hpxml_bldg = _create_hpxml('base.xml')
- elsif ['invalid-skylights-physical-properties'].include? error_case
+ when 'invalid-skylights-physical-properties'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-skylights-physical-properties.xml')
hpxml_bldg.skylights[1].thermal_break = false
- elsif ['invalid-windows-physical-properties'].include? error_case
+ when 'invalid-windows-physical-properties'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-windows-physical-properties.xml')
hpxml_bldg.windows[2].thermal_break = false
- elsif ['inverter-unequal-efficiencies'].include? error_case
+ when 'inverter-unequal-efficiencies'
hpxml, hpxml_bldg = _create_hpxml('base-pv.xml')
hpxml_bldg.inverters.add(id: 'Inverter2',
inverter_efficiency: 0.5)
hpxml_bldg.pv_systems[1].inverter_idref = hpxml_bldg.inverters[-1].id
- elsif ['leap-year-TMY'].include? error_case
+ when 'leap-year-TMY'
hpxml, _hpxml_bldg = _create_hpxml('base-simcontrol-calendar-year-custom.xml')
hpxml.header.sim_calendar_year = 2008
- elsif ['net-area-negative-roof-floor'].include? error_case
+ when 'net-area-negative-roof-floor'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-skylights.xml')
hpxml_bldg.skylights[0].area = 4000
- elsif ['net-area-negative-wall'].include? error_case
+ when 'net-area-negative-wall'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.windows[0].area = 1000
- elsif ['orphaned-geothermal-loop'].include? error_case
+ when 'orphaned-geothermal-loop'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.heat_pumps[0].geothermal_loop_idref = nil
- elsif ['orphaned-hvac-distribution'].include? error_case
+ when 'orphaned-hvac-distribution'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-furnace-gas-room-ac.xml')
hpxml_bldg.heating_systems[0].delete
hpxml_bldg.hvac_controls[0].heating_setpoint_temp = nil
- elsif ['refrigerators-multiple-primary'].include? error_case
+ when 'refrigerators-multiple-primary'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.refrigerators[1].primary_indicator = true
- elsif ['refrigerators-no-primary'].include? error_case
+ when 'refrigerators-no-primary'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml_bldg.refrigerators[0].primary_indicator = false
- elsif ['repeated-relatedhvac-dhw-indirect'].include? error_case
+ when 'repeated-relatedhvac-dhw-indirect'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-indirect.xml')
hpxml_bldg.water_heating_systems[0].fraction_dhw_load_served = 0.5
hpxml_bldg.water_heating_systems << hpxml_bldg.water_heating_systems[0].dup
hpxml_bldg.water_heating_systems[1].id = "WaterHeatingSystem#{hpxml_bldg.water_heating_systems.size}"
- elsif ['repeated-relatedhvac-desuperheater'].include? error_case
+ when 'repeated-relatedhvac-desuperheater'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-central-ac-only-1-speed.xml')
hpxml_bldg.water_heating_systems[0].fraction_dhw_load_served = 0.5
hpxml_bldg.water_heating_systems[0].uses_desuperheater = true
hpxml_bldg.water_heating_systems[0].related_hvac_idref = 'CoolingSystem1'
hpxml_bldg.water_heating_systems << hpxml_bldg.water_heating_systems[0].dup
hpxml_bldg.water_heating_systems[1].id = "WaterHeatingSystem#{hpxml_bldg.water_heating_systems.size}"
- elsif ['schedule-detailed-bad-values-max-not-one'].include? error_case
+ when 'schedule-detailed-bad-values-max-not-one'
hpxml, hpxml_bldg = _create_hpxml('base-schedules-detailed-occupancy-stochastic.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
csv_data[1][1] = 1.1
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['schedule-detailed-bad-values-negative'].include? error_case
+ when 'schedule-detailed-bad-values-negative'
hpxml, hpxml_bldg = _create_hpxml('base-schedules-detailed-occupancy-stochastic.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
csv_data[1][1] = -0.5
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['schedule-detailed-bad-values-non-numeric'].include? error_case
+ when 'schedule-detailed-bad-values-non-numeric'
hpxml, hpxml_bldg = _create_hpxml('base-schedules-detailed-occupancy-stochastic.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
csv_data[1][1] = 'NA'
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['schedule-detailed-bad-values-mode-negative'].include? error_case
+ when 'schedule-detailed-bad-values-mode-negative'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-heat-pump-detailed-schedules.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[1]))
csv_data[1][0] = -0.5
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['schedule-detailed-duplicate-columns'].include? error_case
+ when 'schedule-detailed-duplicate-columns'
hpxml, hpxml_bldg = _create_hpxml('base-schedules-detailed-occupancy-stochastic.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = []
hpxml_bldg.header.schedules_filepaths << @tmp_csv_path
hpxml_bldg.header.schedules_filepaths << @tmp_csv_path
- elsif ['schedule-detailed-wrong-filename'].include? error_case
+ when 'schedule-detailed-wrong-filename'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.schedules_filepaths << 'invalid-wrong-filename.csv'
- elsif ['schedule-detailed-wrong-rows'].include? error_case
+ when 'schedule-detailed-wrong-rows'
hpxml, hpxml_bldg = _create_hpxml('base-schedules-detailed-occupancy-stochastic.xml')
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml_bldg.header.schedules_filepaths[0]))
File.write(@tmp_csv_path, csv_data[0..-2].map(&:to_csv).join)
hpxml_bldg.header.schedules_filepaths = [@tmp_csv_path]
- elsif ['skylight-not-connected-to-cond-space'].include? error_case
+ when 'skylight-not-connected-to-cond-space'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-garage.xml')
hpxml_bldg.skylights.add(id: 'Skylight1',
area: 15.0,
@@ -1589,7 +1595,7 @@ def test_ruby_error_messages
shaft_assembly_r_value: 6.25,
attached_to_roof_idref: 'Roof1',
attached_to_floor_idref: 'Floor1')
- elsif ['solar-thermal-system-with-combi-tankless'].include? error_case
+ when 'solar-thermal-system-with-combi-tankless'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-combi-tankless.xml')
hpxml_bldg.solar_thermal_systems.add(id: "SolarThermalSystem#{hpxml_bldg.solar_thermal_systems.size + 1}",
system_type: HPXML::SolarThermalSystemTypeHotWater,
@@ -1601,7 +1607,7 @@ def test_ruby_error_messages
collector_rated_optical_efficiency: 0.77,
collector_rated_thermal_losses: 0.793,
water_heating_system_idref: 'WaterHeatingSystem1')
- elsif ['solar-thermal-system-with-desuperheater'].include? error_case
+ when 'solar-thermal-system-with-desuperheater'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-desuperheater.xml')
hpxml_bldg.solar_thermal_systems.add(id: "SolarThermalSystem#{hpxml_bldg.solar_thermal_systems.size + 1}",
system_type: HPXML::SolarThermalSystemTypeHotWater,
@@ -1613,7 +1619,7 @@ def test_ruby_error_messages
collector_rated_optical_efficiency: 0.77,
collector_rated_thermal_losses: 0.793,
water_heating_system_idref: 'WaterHeatingSystem1')
- elsif ['solar-thermal-system-with-dhw-indirect'].include? error_case
+ when 'solar-thermal-system-with-dhw-indirect'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-combi-tankless.xml')
hpxml_bldg.solar_thermal_systems.add(id: "SolarThermalSystem#{hpxml_bldg.solar_thermal_systems.size + 1}",
system_type: HPXML::SolarThermalSystemTypeHotWater,
@@ -1625,88 +1631,88 @@ def test_ruby_error_messages
collector_rated_optical_efficiency: 0.77,
collector_rated_thermal_losses: 0.793,
water_heating_system_idref: 'WaterHeatingSystem1')
- elsif ['storm-windows-unexpected-window-ufactor'].include? error_case
+ when 'storm-windows-unexpected-window-ufactor'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.windows[0].storm_type = 'clear'
- elsif ['surface-attached-to-uncond-space'].include? error_case
+ when 'surface-attached-to-uncond-space'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.walls[-1].attached_to_space_idref = hpxml_bldg.zones.find { |zone| zone.zone_type != HPXML::ZoneTypeConditioned }.spaces[0].id
- elsif ['surface-attached-to-uncond-space2'].include? error_case
+ when 'surface-attached-to-uncond-space2'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.slabs[-1].attached_to_space_idref = hpxml_bldg.zones.find { |zone| zone.zone_type != HPXML::ZoneTypeConditioned }.spaces[0].id
- elsif ['unattached-cfis'].include? error_case
+ when 'unattached-cfis'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
fan_type: HPXML::MechVentTypeCFIS,
used_for_whole_building_ventilation: true,
distribution_system_idref: hpxml_bldg.hvac_distributions[0].id)
hpxml_bldg.ventilation_fans[0].distribution_system_idref = 'foobar'
- elsif ['unattached-door'].include? error_case
+ when 'unattached-door'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.doors[0].attached_to_wall_idref = 'foobar'
- elsif ['unattached-gshp'].include? error_case
+ when 'unattached-gshp'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump-detailed-geothermal-loop.xml')
hpxml_bldg.heat_pumps[0].geothermal_loop_idref = 'foobar'
hpxml_bldg.geothermal_loops[0].delete
- elsif ['unattached-hvac-distribution'].include? error_case
+ when 'unattached-hvac-distribution'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.heating_systems[0].distribution_system_idref = 'foobar'
- elsif ['unattached-pv-system'].include? error_case
+ when 'unattached-pv-system'
hpxml, hpxml_bldg = _create_hpxml('base-pv.xml')
hpxml_bldg.pv_systems[0].inverter_idref = 'foobar'
- elsif ['unattached-skylight'].include? error_case
+ when 'unattached-skylight'
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-skylights.xml')
hpxml_bldg.skylights[0].attached_to_roof_idref = 'foobar'
hpxml_bldg.skylights[0].attached_to_floor_idref = 'foobar'
- elsif ['unattached-solar-thermal-system'].include? error_case
+ when 'unattached-solar-thermal-system'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-solar-indirect-flat-plate.xml')
hpxml_bldg.solar_thermal_systems[0].water_heating_system_idref = 'foobar'
- elsif ['unattached-shared-clothes-washer-dhw-distribution'].include? error_case
+ when 'unattached-shared-clothes-washer-dhw-distribution'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-laundry-room.xml')
hpxml_bldg.clothes_washers[0].water_heating_system_idref = nil
hpxml_bldg.clothes_washers[0].hot_water_distribution_idref = 'foobar'
- elsif ['unattached-shared-clothes-washer-water-heater'].include? error_case
+ when 'unattached-shared-clothes-washer-water-heater'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-laundry-room.xml')
hpxml_bldg.clothes_washers[0].water_heating_system_idref = 'foobar'
- elsif ['unattached-shared-dishwasher-dhw-distribution'].include? error_case
+ when 'unattached-shared-dishwasher-dhw-distribution'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-laundry-room.xml')
hpxml_bldg.dishwashers[0].water_heating_system_idref = nil
hpxml_bldg.dishwashers[0].hot_water_distribution_idref = 'foobar'
- elsif ['unattached-shared-dishwasher-water-heater'].include? error_case
+ when 'unattached-shared-dishwasher-water-heater'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-laundry-room.xml')
hpxml_bldg.dishwashers[0].water_heating_system_idref = 'foobar'
- elsif ['unattached-window'].include? error_case
+ when 'unattached-window'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.windows[0].attached_to_wall_idref = 'foobar'
- elsif ['unattached-zone'].include? error_case
+ when 'unattached-zone'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.heating_systems[0].attached_to_zone_idref = 'foobar'
hpxml_bldg.cooling_systems[0].attached_to_zone_idref = 'foobar'
- elsif ['unavailable-period-missing-column'].include? error_case
+ when 'unavailable-period-missing-column'
hpxml, _hpxml_bldg = _create_hpxml('base-schedules-simple-vacancy.xml')
hpxml.header.unavailable_periods[0].column_name = 'foobar'
- elsif ['unique-objects-vary-across-units-epw'].include? error_case
+ when 'unique-objects-vary-across-units-epw'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-whole-building.xml', building_id: building_id)
hpxml_bldg.climate_and_risk_zones.weather_station_epw_filepath = 'USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw'
- elsif ['unique-objects-vary-across-units-dst'].include? error_case
+ when 'unique-objects-vary-across-units-dst'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-whole-building.xml', building_id: building_id)
hpxml_bldg.dst_begin_month = 3
hpxml_bldg.dst_begin_day = 15
hpxml_bldg.dst_end_month = 10
hpxml_bldg.dst_end_day = 15
- elsif ['unique-objects-vary-across-units-tmains'].include? error_case
+ when 'unique-objects-vary-across-units-tmains'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-whole-building.xml', building_id: building_id)
hpxml_bldg.hot_water_distributions[0].dwhr_facilities_connected = HPXML::DWHRFacilitiesConnectedOne
hpxml_bldg.hot_water_distributions[0].dwhr_equal_flow = true
hpxml_bldg.hot_water_distributions[0].dwhr_efficiency = 0.55
- elsif ['whole-mf-building-batteries'].include? error_case
+ when 'whole-mf-building-batteries'
hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-whole-building.xml', building_id: building_id)
hpxml_bldg.batteries.add(id: 'Battery1',
type: HPXML::BatteryTypeLithiumIon)
- elsif ['whole-mf-building-dehumidifiers-unit-multiplier'].include? error_case
+ when 'whole-mf-building-dehumidifiers-unit-multiplier'
hpxml, hpxml_bldg = _create_hpxml('base-appliances-dehumidifier.xml')
hpxml_bldg.building_construction.number_of_units = 2
- elsif ['whole-mf-building-gshps-unit-multiplier'].include? error_case
+ when 'whole-mf-building-gshps-unit-multiplier'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump.xml')
hpxml_bldg.building_construction.number_of_units = 2
else
@@ -1716,13 +1722,14 @@ def test_ruby_error_messages
hpxml_doc = hpxml.to_doc()
# Perform additional raw XML manipulation
- if ['invalid-datatype-boolean'].include? error_case
+ case error_case
+ when 'invalid-datatype-boolean'
XMLHelper.get_element(hpxml_doc, '/HPXML/Building/BuildingDetails/Enclosure/Roofs/Roof/RadiantBarrier').inner_text = 'FOOBAR'
- elsif ['invalid-datatype-integer'].include? error_case
+ when 'invalid-datatype-integer'
XMLHelper.get_element(hpxml_doc, '/HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction/NumberofBedrooms').inner_text = '2.5'
- elsif ['invalid-datatype-float'].include? error_case
+ when 'invalid-datatype-float'
XMLHelper.get_element(hpxml_doc, '/HPXML/SoftwareInfo/extension/EmissionsScenarios/EmissionsScenario/EmissionsFactor/Value').inner_text = 'FOOBAR'
- elsif ['invalid-schema-version'].include? error_case
+ when 'invalid-schema-version'
root = XMLHelper.get_element(hpxml_doc, '/HPXML')
XMLHelper.add_attribute(root, 'schemaVersion', '2.3')
end
@@ -1847,11 +1854,12 @@ def test_ruby_warning_messages
puts "[#{i + 1}/#{all_expected_warnings.size}] Testing #{warning_case}..."
building_id = nil
# Create HPXML object
- if ['cfis-undersized-supplemental-fan'].include? warning_case
+ case warning_case
+ when 'cfis-undersized-supplemental-fan'
hpxml, hpxml_bldg = _create_hpxml('base-mechvent-cfis-supplemental-fan-exhaust.xml')
suppl_fan = hpxml_bldg.ventilation_fans.find { |f| f.is_cfis_supplemental_fan }
suppl_fan.tested_flow_rate = 90.0
- elsif ['duct-lto-cfm25-cond-space'].include? warning_case
+ when 'duct-lto-cfm25-cond-space'
hpxml, hpxml_bldg = _create_hpxml('base-atticroof-conditioned.xml')
hpxml_bldg.hvac_distributions[0].conditioned_floor_area_served = hpxml_bldg.building_construction.conditioned_floor_area
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |dlm|
@@ -1862,12 +1870,12 @@ def test_ruby_warning_messages
duct.duct_surface_area = nil
duct.duct_location = nil
end
- elsif ['duct-lto-cfm25-uncond-space'].include? warning_case
+ when 'duct-lto-cfm25-uncond-space'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |dlm|
dlm.duct_leakage_value = 800.0
end
- elsif ['duct-lto-cfm50-cond-space'].include? warning_case
+ when 'duct-lto-cfm50-cond-space'
hpxml, hpxml_bldg = _create_hpxml('base-atticroof-conditioned.xml')
hpxml_bldg.hvac_distributions[0].conditioned_floor_area_served = hpxml_bldg.building_construction.conditioned_floor_area
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |dlm|
@@ -1878,12 +1886,12 @@ def test_ruby_warning_messages
duct.duct_surface_area = nil
duct.duct_location = nil
end
- elsif ['duct-lto-cfm50-uncond-space'].include? warning_case
+ when 'duct-lto-cfm50-uncond-space'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ducts-leakage-cfm50.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |dlm|
dlm.duct_leakage_value = 1600.0
end
- elsif ['duct-lto-percent-cond-space'].include? warning_case
+ when 'duct-lto-percent-cond-space'
hpxml, hpxml_bldg = _create_hpxml('base-atticroof-conditioned.xml')
hpxml_bldg.hvac_distributions[0].conditioned_floor_area_served = hpxml_bldg.building_construction.conditioned_floor_area
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |dlm|
@@ -1894,59 +1902,59 @@ def test_ruby_warning_messages
duct.duct_surface_area = nil
duct.duct_location = nil
end
- elsif ['duct-lto-percent-uncond-space'].include? warning_case
+ when 'duct-lto-percent-uncond-space'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ducts-leakage-percent.xml')
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |dlm|
dlm.duct_leakage_value = 0.25
end
- elsif ['floor-or-ceiling1'].include? warning_case
+ when 'floor-or-ceiling1'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.floors[0].floor_or_ceiling = HPXML::FloorOrCeilingFloor
- elsif ['floor-or-ceiling2'].include? warning_case
+ when 'floor-or-ceiling2'
hpxml, hpxml_bldg = _create_hpxml('base-foundation-unvented-crawlspace.xml')
hpxml_bldg.floors[0].floor_or_ceiling = HPXML::FloorOrCeilingCeiling
- elsif ['hvac-gshp-bore-depth-autosized-high'].include? warning_case
+ when 'hvac-gshp-bore-depth-autosized-high'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-ground-to-air-heat-pump.xml')
hpxml_bldg.site.ground_conductivity = 0.07
- elsif ['hvac-seasons'].include? warning_case
+ when 'hvac-seasons'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-seasons.xml')
- elsif ['hvac-setpoint-adjustments'].include? warning_case
+ when 'hvac-setpoint-adjustments'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.hvac_controls[0].heating_setpoint_temp = 76.0
hpxml_bldg.hvac_controls[0].cooling_setpoint_temp = 75.0
- elsif ['hvac-setpoint-adjustments-daily-setbacks'].include? warning_case
+ when 'hvac-setpoint-adjustments-daily-setbacks'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-setpoints-daily-setbacks.xml')
hpxml_bldg.hvac_controls[0].heating_setback_temp = 76.0
hpxml_bldg.hvac_controls[0].cooling_setpoint_temp = 75.0
- elsif ['hvac-setpoint-adjustments-daily-schedules'].include? warning_case
+ when 'hvac-setpoint-adjustments-daily-schedules'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-setpoints-daily-schedules.xml')
hpxml_bldg.hvac_controls[0].weekday_heating_setpoints = '64, 64, 64, 64, 64, 64, 64, 76, 70, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 68, 68, 64, 64'
- elsif ['manualj-sum-space-num-occupants'].include? warning_case
+ when 'manualj-sum-space-num-occupants'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.header.manualj_num_occupants = 4.8
hpxml_bldg.conditioned_spaces.each_with_index do |space, i|
space.manualj_num_occupants = (i == 0 ? hpxml_bldg.header.manualj_num_occupants.round : 0)
end
- elsif ['manualj-sum-space-internal-loads-sensible'].include? warning_case
+ when 'manualj-sum-space-internal-loads-sensible'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.header.manualj_internal_loads_sensible = 1000.0
hpxml_bldg.conditioned_spaces.each_with_index do |space, i|
space.manualj_internal_loads_sensible = (i == 0 ? 1200.0 : 0)
end
- elsif ['manualj-sum-space-internal-loads-latent'].include? warning_case
+ when 'manualj-sum-space-internal-loads-latent'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces.xml')
hpxml_bldg.header.manualj_internal_loads_latent = 200.0
hpxml_bldg.conditioned_spaces.each_with_index do |space, i|
space.manualj_internal_loads_latent = (i == 0 ? 100.0 : 0)
end
- elsif ['multiple-conditioned-zone'].include? warning_case
+ when 'multiple-conditioned-zone'
hpxml, hpxml_bldg = _create_hpxml('base-zones-spaces-multiple.xml')
- elsif ['power-outage'].include? warning_case
+ when 'power-outage'
hpxml, _hpxml_bldg = _create_hpxml('base-schedules-simple-power-outage.xml')
- elsif ['multistage-backup-more-than-4-stages'].include? warning_case
+ when 'multistage-backup-more-than-4-stages'
hpxml, _hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed-research-features.xml')
hpxml.header.heat_pump_backup_heating_capacity_increment = 5000
- elsif ['schedule-file-and-weekday-weekend-multipliers'].include? warning_case
+ when 'schedule-file-and-weekday-weekend-multipliers'
hpxml, hpxml_bldg = _create_hpxml('base-misc-loads-large-uncommon.xml')
hpxml.header.utility_bill_scenarios.clear # we don't want the propane warning
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/occupancy-stochastic.csv')
@@ -1956,7 +1964,7 @@ def test_ruby_warning_messages
hpxml_bldg.hot_water_distributions[0].recirculation_pump_weekday_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_no_control"]['RecirculationPumpWeekdayScheduleFractions']
hpxml_bldg.hot_water_distributions[0].recirculation_pump_weekend_fractions = @default_schedules_csv_data["#{SchedulesFile::Columns[:HotWaterRecirculationPump].name}_no_control"]['RecirculationPumpWeekendScheduleFractions']
hpxml_bldg.hot_water_distributions[0].recirculation_pump_monthly_multipliers = @default_schedules_csv_data[SchedulesFile::Columns[:HotWaterRecirculationPump].name]['RecirculationPumpMonthlyScheduleMultipliers']
- elsif ['schedule-file-and-refrigerators-freezer-coefficients'].include? warning_case
+ when 'schedule-file-and-refrigerators-freezer-coefficients'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/occupancy-stochastic.csv')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/occupancy-non-stochastic.csv')
@@ -1969,20 +1977,20 @@ def test_ruby_warning_messages
hpxml_bldg.freezers.add(id: "Freezer#{hpxml_bldg.freezers.size + 1}",
constant_coefficients: '-0.487, -0.340, -0.370, -0.361, -0.515, -0.684, -0.471, -0.159, -0.079, -0.417, -0.411, -0.386, -0.240, -0.314, -0.160, -0.121, -0.469, -0.412, -0.091, 0.077, -0.118, -0.247, -0.445, -0.544',
temperature_coefficients: '0.019, 0.016, 0.017, 0.016, 0.018, 0.021, 0.019, 0.015, 0.015, 0.019, 0.018, 0.018, 0.016, 0.017, 0.015, 0.015, 0.020, 0.020, 0.017, 0.014, 0.016, 0.017, 0.019, 0.020')
- elsif ['schedule-file-and-setpoints'].include? warning_case
+ when 'schedule-file-and-setpoints'
hpxml, hpxml_bldg = _create_hpxml('base.xml')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/setpoints.csv')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/water-heater-setpoints.csv')
- elsif ['schedule-file-and-operating-mode'].include? warning_case
+ when 'schedule-file-and-operating-mode'
hpxml, hpxml_bldg = _create_hpxml('base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/water-heater-operating-modes.csv')
- elsif ['schedule-file-max-power-ratio-with-single-speed-system'].include? warning_case
+ when 'schedule-file-max-power-ratio-with-single-speed-system'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/hvac-variable-system-maximum-power-ratios-varied.csv')
- elsif ['schedule-file-max-power-ratio-with-two-speed-system'].include? warning_case
+ when 'schedule-file-max-power-ratio-with-two-speed-system'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-2-speed.xml')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/hvac-variable-system-maximum-power-ratios-varied.csv')
- elsif ['schedule-file-max-power-ratio-with-separate-backup-system'].include? warning_case
+ when 'schedule-file-max-power-ratio-with-separate-backup-system'
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml')
hpxml_bldg.header.schedules_filepaths << File.join(File.dirname(__FILE__), '../resources/schedule_files/hvac-variable-system-maximum-power-ratios-varied.csv')
else
diff --git a/ReportSimulationOutput/measure.rb b/ReportSimulationOutput/measure.rb
index c342ba06c0..fcec01b1bd 100644
--- a/ReportSimulationOutput/measure.rb
+++ b/ReportSimulationOutput/measure.rb
@@ -657,13 +657,14 @@ def get_timestamps(msgpackData, hpxml_header, hpxml_bldgs, args)
# Convert from EnergyPlus default (end-of-timestep) to start-of-timestep convention
if args[:timeseries_timestamp_convention] == 'start'
- if args[:timeseries_frequency] == 'timestep'
+ case args[:timeseries_frequency]
+ when 'timestep'
ts_offset = hpxml_header.timestep * 60 # seconds
- elsif args[:timeseries_frequency] == 'hourly'
+ when 'hourly'
ts_offset = 60 * 60 # seconds
- elsif args[:timeseries_frequency] == 'daily'
+ when 'daily'
ts_offset = 60 * 60 * 24 # seconds
- elsif args[:timeseries_frequency] == 'monthly'
+ when 'monthly'
ts_offset = Calendar.num_days_in_months(year)[month - 1] * 60 * 60 * 24 # seconds
else
fail "Unexpected timeseries_frequency: #{args[:timeseries_frequency]}."
@@ -1836,13 +1837,14 @@ def report_timeseries_output_results(runner, outputs, timeseries_output_path, ar
year = @hpxml_header.sim_calendar_year
start_day = Calendar.get_day_num_from_month_day(year, @hpxml_header.sim_begin_month, @hpxml_header.sim_begin_day)
start_hr = (start_day - 1) * 24
- if args[:timeseries_frequency] == 'timestep'
+ case args[:timeseries_frequency]
+ when 'timestep'
interval_hrs = @hpxml_header.timestep / 60.0
- elsif args[:timeseries_frequency] == 'hourly'
+ when 'hourly'
interval_hrs = 1.0
- elsif args[:timeseries_frequency] == 'daily'
+ when 'daily'
interval_hrs = 24.0
- elsif args[:timeseries_frequency] == 'monthly'
+ when 'monthly'
interval_hrs = Calendar.num_days_in_year(year) * 24.0 / 12
end
header_data = [['wxDVFileHeaderVer.1'],
diff --git a/ReportSimulationOutput/measure.xml b/ReportSimulationOutput/measure.xml
index 92e37b1986..3d43e4ede3 100644
--- a/ReportSimulationOutput/measure.xml
+++ b/ReportSimulationOutput/measure.xml
@@ -3,8 +3,8 @@
3.1
report_simulation_output
df9d170c-c21a-4130-866d-0d46b06073fd
- 443dae63-bc28-4988-8cb0-5fc10c452c68
- 2024-10-13T19:48:30Z
+ 5e609cb1-8e83-479b-afda-c1de10cd62ea
+ 2024-11-27T02:33:41Z
9BF1E6AC
ReportSimulationOutput
HPXML Simulation Output Report
@@ -1929,7 +1929,7 @@
measure.rb
rb
script
- 45BFC7E3
+ 4C7478A8
test_report_sim_output.rb
diff --git a/ReportUtilityBills/measure.rb b/ReportUtilityBills/measure.rb
index e2819c9420..a4e6158b79 100644
--- a/ReportUtilityBills/measure.rb
+++ b/ReportUtilityBills/measure.rb
@@ -199,8 +199,7 @@ def energyPlusOutputRequests(runner, user_arguments)
FT::Coal => HPXML::FuelTypeCoal }
# Check for presence of fuels once
- has_fuel = hpxml.has_fuels(hpxml.to_doc)
- has_fuel[HPXML::FuelTypeElectricity] = true
+ has_fuel = hpxml.has_fuels()
# Has production
has_pv = @hpxml_buildings.count { |hpxml_bldg| !hpxml_bldg.pv_systems.empty? } > 0
@@ -543,7 +542,8 @@ def get_utility_rates(hpxml_path, fuels, utility_rates, bill_scenario, pv_monthl
utility_rates.each do |fuel_type, rate|
next if fuels[[fuel_type, false]].timeseries.sum == 0
- if fuel_type == FT::Elec
+ case fuel_type
+ when FT::Elec
if bill_scenario.elec_tariff_filepath.nil?
rate.fixed_charge_monthly = bill_scenario.elec_fixed_charge
rate.flat_rate = bill_scenario.elec_marginal_rate
@@ -618,22 +618,22 @@ def get_utility_rates(hpxml_path, fuels, utility_rates, bill_scenario, pv_monthl
# Feed-In Tariff
rate.feed_in_tariff_rate = bill_scenario.pv_feed_in_tariff_rate if bill_scenario.pv_compensation_type == HPXML::PVCompensationTypeFeedInTariff
- elsif fuel_type == FT::Gas
+ when FT::Gas
rate.fixed_charge_monthly = bill_scenario.natural_gas_fixed_charge
rate.flat_rate = bill_scenario.natural_gas_marginal_rate
- elsif fuel_type == FT::Oil
+ when FT::Oil
rate.fixed_charge_monthly = bill_scenario.fuel_oil_fixed_charge
rate.flat_rate = bill_scenario.fuel_oil_marginal_rate
- elsif fuel_type == FT::Propane
+ when FT::Propane
rate.fixed_charge_monthly = bill_scenario.propane_fixed_charge
rate.flat_rate = bill_scenario.propane_marginal_rate
- elsif fuel_type == FT::WoodCord
+ when FT::WoodCord
rate.fixed_charge_monthly = bill_scenario.wood_fixed_charge
rate.flat_rate = bill_scenario.wood_marginal_rate
- elsif fuel_type == FT::WoodPellets
+ when FT::WoodPellets
rate.fixed_charge_monthly = bill_scenario.wood_pellets_fixed_charge
rate.flat_rate = bill_scenario.wood_pellets_marginal_rate
- elsif fuel_type == FT::Coal
+ when FT::Coal
rate.fixed_charge_monthly = bill_scenario.coal_fixed_charge
rate.flat_rate = bill_scenario.coal_marginal_rate
end
diff --git a/ReportUtilityBills/measure.xml b/ReportUtilityBills/measure.xml
index cb75deec1e..eaca6d9b0e 100644
--- a/ReportUtilityBills/measure.xml
+++ b/ReportUtilityBills/measure.xml
@@ -3,8 +3,8 @@
3.1
report_utility_bills
ca88a425-e59a-4bc4-af51-c7e7d1e960fe
- 6b3c51ee-095b-455c-b1f1-a1cb47e3b4a8
- 2024-11-14T00:26:10Z
+ 3d7e2753-fab2-4d89-bfd9-208a59523248
+ 2024-11-27T02:33:42Z
15BF4E57
ReportUtilityBills
Utility Bills Report
@@ -180,7 +180,7 @@
measure.rb
rb
script
- 4D23174A
+ 48B476E1
detailed_rates/README.md
@@ -360,7 +360,7 @@
test_report_utility_bills.rb
rb
test
- 1D59A593
+ 5B90EFCE
diff --git a/ReportUtilityBills/tests/test_report_utility_bills.rb b/ReportUtilityBills/tests/test_report_utility_bills.rb
index b95a848dd5..84406d63e1 100644
--- a/ReportUtilityBills/tests/test_report_utility_bills.rb
+++ b/ReportUtilityBills/tests/test_report_utility_bills.rb
@@ -79,7 +79,7 @@ def setup
fuel_oil_marginal_rate: 3.495346153846154)
# Check for presence of fuels once
- has_fuel = @hpxml_bldg.has_fuels(@hpxml.to_doc)
+ has_fuel = @hpxml_bldg.has_fuels()
Defaults.apply_header(@hpxml_header, @hpxml_bldg, nil)
Defaults.apply_utility_bill_scenarios(nil, @hpxml_header, @hpxml_bldg, has_fuel)
@@ -1176,15 +1176,16 @@ def _load_timeseries(pv_size_kw, use_hourly_electricity)
values = col[1..-1].map { |v| Float(v) }
- if col_name == 'Electricity [kWh]'
+ case col_name
+ when 'Electricity [kWh]'
fuels[[FT::Elec, false]].timeseries = values
- elsif col_name == 'Gas [therm]'
+ when 'Gas [therm]'
fuels[[FT::Gas, false]].timeseries = values
- elsif col_name == 'Propane [gal]'
+ when 'Propane [gal]'
fuels[[FT::Propane, false]].timeseries = values
- elsif col_name == 'Oil [gal]'
+ when 'Oil [gal]'
fuels[[FT::Oil, false]].timeseries = values
- elsif col_name == "PV_#{pv_size_kw}kW [kWh]"
+ when "PV_#{pv_size_kw}kW [kWh]"
fuels[[FT::Elec, true]].timeseries = values
end
end
diff --git a/workflow/sample_files/base-location-detailed.xml b/workflow/sample_files/base-location-detailed.xml
index e53ed3915f..6bf985d616 100644
--- a/workflow/sample_files/base-location-detailed.xml
+++ b/workflow/sample_files/base-location-detailed.xml
@@ -62,6 +62,12 @@
21600.0
+
+
+ 2006
+ 5B
+
+