diff --git a/BuildResidentialHPXML/README.md b/BuildResidentialHPXML/README.md
index 0c470bdac2..1d15af1727 100644
--- a/BuildResidentialHPXML/README.md
+++ b/BuildResidentialHPXML/README.md
@@ -1150,29 +1150,16 @@ Assembly R-value for the ceiling (attic floor).
-**Roof: Material Type**
+**Enclosure: Roof Material**
-The material type of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
+The material type/color of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
-- **Name:** ``roof_material_type``
+- **Name:** ``enclosure_roof_material``
- **Type:** ``Choice``
- **Required:** ``false``
-- **Choices:** `asphalt or fiberglass shingles`, `concrete`, `cool roof`, `slate or tile shingles`, `expanded polystyrene sheathing`, `metal surfacing`, `plastic/rubber/synthetic sheeting`, `shingles`, `wood shingles or shakes`
-
-
-
-**Roof: Color**
-
-The color of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.
-
-- **Name:** ``roof_color``
-- **Type:** ``Choice``
-
-- **Required:** ``false``
-
-- **Choices:** `dark`, `light`, `medium`, `medium dark`, `reflective`
+- **Choices:** `Asphalt/Fiberglass Shingles, Dark`, `Asphalt/Fiberglass Shingles, Medium Dark`, `Asphalt/Fiberglass Shingles, Medium`, `Asphalt/Fiberglass Shingles, Light`, `Asphalt/Fiberglass Shingles, Reflective`, `Tile/Slate, Dark`, `Tile/Slate, Medium Dark`, `Tile/Slate, Medium`, `Tile/Slate, Light`, `Tile/Slate, Reflective`, `Metal, Dark`, `Metal, Medium Dark`, `Metal, Medium`, `Metal, Light`, `Metal, Reflective`, `Wood Shingles/Shakes, Dark`, `Wood Shingles/Shakes, Medium Dark`, `Wood Shingles/Shakes, Medium`, `Wood Shingles/Shakes, Light`, `Wood Shingles/Shakes, Reflective`, `Shingles, Dark`, `Shingles, Medium Dark`, `Shingles, Medium`, `Shingles, Light`, `Shingles, Reflective`, `Synthetic Sheeting, Dark`, `Synthetic Sheeting, Medium Dark`, `Synthetic Sheeting, Medium`, `Synthetic Sheeting, Light`, `Synthetic Sheeting, Reflective`, `EPS Sheathing, Dark`, `EPS Sheathing, Medium Dark`, `EPS Sheathing, Medium`, `EPS Sheathing, Light`, `EPS Sheathing, Reflective`, `Concrete, Dark`, `Concrete, Medium Dark`, `Concrete, Medium`, `Concrete, Light`, `Concrete, Reflective`, `Cool Roof`
@@ -1894,16 +1881,16 @@ Presence of flue or chimney with combustion air from conditioned space; used for
-**Heating System: Type**
+**Heating System**
-The type of heating system. Use 'none' if there is no heating system or if there is a heat pump serving a heating load.
+The heating system type/efficiency. Efficiency is Rated AFUE or Percent as a Fraction. Use 'none' if there is no heating system or if there is a heat pump serving a heating load.
-- **Name:** ``heating_system_type``
+- **Name:** ``heating_system``
- **Type:** ``Choice``
- **Required:** ``true``
-- **Choices:** `none`, `Furnace`, `WallFurnace`, `FloorFurnace`, `Boiler`, `ElectricResistance`, `Stove`, `SpaceHeater`, `Fireplace`, `Shared Boiler w/ Baseboard`, `Shared Boiler w/ Ductless Fan Coil`
+- **Choices:** `Electric Furnace, 98% AFUE`, `Electric Furnace, 100% AFUE`, `Electric Baseboard, 100% Efficiency`, `Electric Boiler, 98% AFUE`, `Electric Boiler, 100% AFUE`, `Electric Wall Furnace, 100% AFUE`, `Fuel Boiler, 72% AFUE`, `Fuel Boiler, 76% AFUE`, `Fuel Boiler, 80% AFUE`, `Fuel Boiler, 82% AFUE`, `Fuel Boiler, 85% AFUE`, `Fuel Boiler, 90% AFUE`, `Fuel Boiler, 92% AFUE`, `Fuel Boiler, 92% AFUE, 600 BTUh Pilot Light`, `Fuel Boiler, 95% AFUE`, `Fuel Boiler, 96% AFUE`, `Fuel Furnace, 60% AFUE`, `Fuel Furnace, 68% AFUE`, `Fuel Furnace, 72% AFUE`, `Fuel Furnace, 76% AFUE`, `Fuel Furnace, 78% AFUE`, `Fuel Furnace, 80% AFUE`, `Fuel Furnace, 85% AFUE`, `Fuel Furnace, 90% AFUE`, `Fuel Furnace, 92% AFUE`, `Fuel Furnace, 92% AFUE, Airflow Defect Ratio`, `Fuel Furnace, 92% AFUE, 600 BTUh Pilot Light`, `Fuel Furnace, 92.5% AFUE`, `Fuel Furnace, 96% AFUE`, `Fuel Wall Furnace, 60% AFUE`, `Fuel Wall Furnace, 68% AFUE`, `Electric Wall Furnace, 98% AFUE`, `Electric Wall Furnace, 100% AFUE`, `None`, `Fuel Boiler w/ Baseboard, 78% AFUE`, `Fuel Boiler w/ Baseboard, 92% AFUE`, `Electric Boiler w/ Baseboard, 100% AFUE`, `Fuel Fan Coil Heating, 78% AFUE`, `Fuel Fan Coil Heating, 92% AFUE`, `Electric Fan Coil Heating, 100% AFUE`, `Fireplace, 80% Efficiency`, `Stove, 80% Efficiency`, `Fuel Floor Furnace, 80% AFUE, 600 BTUh Pilot Light`, `Space Heater, 100% Efficiency`, `Space Heater, 92% Efficiency`
@@ -1920,19 +1907,6 @@ The fuel type of the heating system. Ignored for ElectricResistance.
-**Heating System: Rated AFUE or Percent**
-
-The rated heating efficiency value of the heating system.
-
-- **Name:** ``heating_system_heating_efficiency``
-- **Type:** ``Double``
-
-- **Units:** ``Frac``
-
-- **Required:** ``true``
-
-
-
**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.
@@ -1983,32 +1957,6 @@ The heating load served by the heating system.
-**Heating System: Pilot Light**
-
-The fuel usage of the pilot light. Applies only to Furnace, WallFurnace, FloorFurnace, Stove, Boiler, and Fireplace with non-electric fuel type. If not provided, assumes no pilot light.
-
-- **Name:** ``heating_system_pilot_light``
-- **Type:** ``Double``
-
-- **Units:** ``Btuh``
-
-- **Required:** ``false``
-
-
-
-**Heating System: Airflow Defect Ratio**
-
-The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heating system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to Furnace. If not provided, assumes no defect.
-
-- **Name:** ``heating_system_airflow_defect_ratio``
-- **Type:** ``Double``
-
-- **Units:** ``Frac``
-
-- **Required:** ``false``
-
-
-
**Cooling System: Type**
The type of cooling system. Use 'none' if there is no cooling system or if there is a heat pump serving a cooling load.
diff --git a/BuildResidentialHPXML/measure.rb b/BuildResidentialHPXML/measure.rb
index 1ad6f2d301..98aaf32476 100644
--- a/BuildResidentialHPXML/measure.rb
+++ b/BuildResidentialHPXML/measure.rb
@@ -696,32 +696,11 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(31.6)
args << arg
- roof_material_type_choices = OpenStudio::StringVector.new
- roof_material_type_choices << HPXML::RoofTypeAsphaltShingles
- roof_material_type_choices << HPXML::RoofTypeConcrete
- roof_material_type_choices << HPXML::RoofTypeCool
- roof_material_type_choices << HPXML::RoofTypeClayTile
- roof_material_type_choices << HPXML::RoofTypeEPS
- roof_material_type_choices << HPXML::RoofTypeMetal
- roof_material_type_choices << HPXML::RoofTypePlasticRubber
- roof_material_type_choices << HPXML::RoofTypeShingles
- roof_material_type_choices << HPXML::RoofTypeWoodShingles
-
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_material_type', roof_material_type_choices, false)
- arg.setDisplayName('Roof: Material Type')
- arg.setDescription("The material type of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.")
- args << arg
+ enclosure_roof_material_choices = get_option_names('roof_material.tsv')
- color_choices = OpenStudio::StringVector.new
- color_choices << HPXML::ColorDark
- color_choices << HPXML::ColorLight
- color_choices << HPXML::ColorMedium
- color_choices << HPXML::ColorMediumDark
- color_choices << HPXML::ColorReflective
-
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_color', color_choices, false)
- arg.setDisplayName('Roof: Color')
- arg.setDescription("The color of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.")
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('enclosure_roof_material', enclosure_roof_material_choices, false)
+ arg.setDisplayName('Enclosure: Roof Material')
+ arg.setDescription("The material type/color of the roof. If not provided, the OS-HPXML default (see HPXML Roofs) is used.")
args << arg
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('roof_assembly_r', true)
@@ -771,6 +750,15 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(HPXML::WallTypeWoodStud)
args << arg
+ # TODO: wall color + wall siding type --> enclosure_wall_siding
+
+ # enclosure_wall_siding_choices = get_option_names('wall_siding.tsv')
+
+ # arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('enclosure_wall_siding', enclosure_wall_siding_choices, false)
+ # arg.setDisplayName('Enclosure: Wall Siding')
+ # arg.setDescription("The siding type/color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.")
+ # args << arg
+
wall_siding_type_choices = OpenStudio::StringVector.new
wall_siding_type_choices << HPXML::SidingTypeAluminum
wall_siding_type_choices << HPXML::SidingTypeAsbestos
@@ -789,6 +777,13 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDescription("The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.")
args << arg
+ color_choices = OpenStudio::StringVector.new
+ color_choices << HPXML::ColorDark
+ color_choices << HPXML::ColorLight
+ color_choices << HPXML::ColorMedium
+ color_choices << HPXML::ColorMediumDark
+ color_choices << HPXML::ColorReflective
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_color', color_choices, false)
arg.setDisplayName('Wall: Color')
arg.setDescription("The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see HPXML Walls) is used.")
@@ -1162,19 +1157,6 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDescription("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.")
args << arg
- heating_system_type_choices = OpenStudio::StringVector.new
- heating_system_type_choices << Constants::None
- heating_system_type_choices << HPXML::HVACTypeFurnace
- heating_system_type_choices << HPXML::HVACTypeWallFurnace
- heating_system_type_choices << HPXML::HVACTypeFloorFurnace
- heating_system_type_choices << HPXML::HVACTypeBoiler
- heating_system_type_choices << HPXML::HVACTypeElectricResistance
- heating_system_type_choices << HPXML::HVACTypeStove
- heating_system_type_choices << HPXML::HVACTypeSpaceHeater
- heating_system_type_choices << HPXML::HVACTypeFireplace
- heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Baseboard"
- heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Ductless Fan Coil"
-
heating_system_fuel_choices = OpenStudio::StringVector.new
heating_system_fuel_choices << HPXML::FuelTypeElectricity
heating_system_fuel_choices << HPXML::FuelTypeNaturalGas
@@ -1203,10 +1185,12 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
compressor_type_choices << HPXML::HVACCompressorTypeTwoStage
compressor_type_choices << HPXML::HVACCompressorTypeVariableSpeed
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_type', heating_system_type_choices, true)
- arg.setDisplayName('Heating System: Type')
- arg.setDescription("The type of heating system. Use '#{Constants::None}' if there is no heating system or if there is a heat pump serving a heating load.")
- arg.setDefaultValue(HPXML::HVACTypeFurnace)
+ heating_system_choices = get_option_names('heating_system.tsv')
+
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system', heating_system_choices, true)
+ arg.setDisplayName('Heating System')
+ arg.setDescription("The heating system type/efficiency. Efficiency is Rated AFUE or Percent as a Fraction. Use '#{Constants::None}' if there is no heating system or if there is a heat pump serving a heating load.")
+ arg.setDefaultValue('Fuel Furnace, 78% AFUE')
args << arg
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_fuel', heating_system_fuel_choices, true)
@@ -1215,13 +1199,6 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(HPXML::FuelTypeNaturalGas)
args << arg
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_efficiency', true)
- arg.setDisplayName('Heating System: Rated AFUE or Percent')
- arg.setUnits('Frac')
- arg.setDescription('The rated heating efficiency value of the heating system.')
- arg.setDefaultValue(0.78)
- args << arg
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_capacity', false)
arg.setDisplayName('Heating System: Heating Capacity')
arg.setDescription("The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default (see HPXML Heating Systems) is used.")
@@ -1246,18 +1223,6 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(1)
args << arg
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_pilot_light', false)
- arg.setDisplayName('Heating System: Pilot Light')
- arg.setDescription("The fuel usage of the pilot light. Applies only to #{HPXML::HVACTypeFurnace}, #{HPXML::HVACTypeWallFurnace}, #{HPXML::HVACTypeFloorFurnace}, #{HPXML::HVACTypeStove}, #{HPXML::HVACTypeBoiler}, and #{HPXML::HVACTypeFireplace} with non-electric fuel type. If not provided, assumes no pilot light.")
- arg.setUnits('Btuh')
- args << arg
-
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_airflow_defect_ratio', false)
- arg.setDisplayName('Heating System: Airflow Defect Ratio')
- arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heating system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeFurnace}. If not provided, assumes no defect.")
- arg.setUnits('Frac')
- args << arg
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_type', cooling_system_type_choices, true)
arg.setDisplayName('Cooling System: Type')
arg.setDescription("The type of cooling system. Use '#{Constants::None}' if there is no cooling system or if there is a heat pump serving a cooling load.")
@@ -3668,7 +3633,7 @@ def run(model, runner, user_arguments)
end
end
- hpxml_doc = HPXMLFile.create(runner, model, args, hpxml_path, existing_hpxml_path)
+ hpxml_doc = create(runner, model, args, hpxml_path, existing_hpxml_path)
if not hpxml_doc
runner.registerError('Unsuccessful creation of HPXML file.')
return false
@@ -3740,6 +3705,8 @@ def argument_warnings(args)
def argument_errors(args)
errors = []
+ get_option_properties(args, 'heating_system.tsv', args[:heating_system])
+
error = (args[:heating_system_type] != Constants::None) && (args[:heat_pump_type] != Constants::None) && (args[:heating_system_fraction_heat_load_served] > 0) && (args[:heat_pump_fraction_heat_load_served] > 0)
errors << 'Multiple central heating systems are not currently supported.' if error
@@ -3941,10 +3908,7 @@ def argument_errors(args)
return errors
end
-end
-# Collection of methods for creating the HPXML file and setting properties based on user arguments
-module HPXMLFile
# Create the closed-form geometry, and then call individual set_xxx methods
#
# @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings
@@ -3953,7 +3917,7 @@ module HPXMLFile
# @param hpxml_path [String] Path to the created HPXML file
# @param existing_hpxml_path [String] Path to the existing HPXML file
# @return [Oga::XML::Element] Root XML element of the updated HPXML document
- def self.create(runner, model, args, hpxml_path, existing_hpxml_path)
+ def create(runner, model, args, hpxml_path, existing_hpxml_path)
weather = get_weather_if_needed(args)
success = create_geometry_envelope(runner, model, args)
@@ -4058,7 +4022,7 @@ def self.create(runner, model, args, hpxml_path, existing_hpxml_path)
#
# @param args [Hash] Map of :argument_name => value
# @return [WeatherFile] Weather object containing EPW information
- def self.get_weather_if_needed(args)
+ def get_weather_if_needed(args)
if (args[:hvac_control_heating_season_period].to_s == Constants::BuildingAmerica) ||
(args[:hvac_control_cooling_season_period].to_s == Constants::BuildingAmerica) ||
(args[:solar_thermal_system_type] != Constants::None && args[:solar_thermal_collector_tilt].start_with?('latitude')) ||
@@ -4093,7 +4057,7 @@ def self.get_weather_if_needed(args)
# @param hpxml_doc [Oga::XML::Element] Root XML element of the HPXML document
# @param hpxml_path [String] Path to the created HPXML file
# @return [Boolean] True if the HPXML is valid
- def self.validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
+ def validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
# Check for errors in the HPXML object
errors = []
hpxml.buildings.each do |hpxml_bldg|
@@ -4133,7 +4097,7 @@ def self.validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
# @param model [OpenStudio::Model::Model] OpenStudio Model object
# @param args [Hash] Map of :argument_name => value
# @return [Boolean] True if successful
- def self.create_geometry_envelope(runner, model, args)
+ def create_geometry_envelope(runner, model, args)
args[:geometry_roof_pitch] = { '1:12' => 1.0 / 12.0,
'2:12' => 2.0 / 12.0,
'3:12' => 3.0 / 12.0,
@@ -4195,7 +4159,7 @@ def self.create_geometry_envelope(runner, model, args)
# @param end_hour [Integer] Unavailable period end hour
# @param natvent_availability [String] Natural ventilation availability (HXPML::ScheduleXXX)
# @return [Boolean] True if the unavailability period already exists
- def self.unavailable_period_exists(hpxml, column_name, begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability = nil)
+ def unavailable_period_exists(hpxml, column_name, begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability = nil)
natvent_availability = HPXML::ScheduleUnavailable if natvent_availability.nil?
hpxml.header.unavailable_periods.each do |unavailable_period|
@@ -4228,7 +4192,7 @@ def self.unavailable_period_exists(hpxml, column_name, begin_month, begin_day, b
# @param hpxml [HPXML] HPXML object
# @param args [Hash] Map of :argument_name => value
# @return [Boolean] true if no errors, otherwise false
- def self.set_header(runner, hpxml, args)
+ def set_header(runner, hpxml, args)
errors = []
hpxml.header.xml_type = 'HPXML'
@@ -4641,7 +4605,7 @@ def self.set_header(runner, hpxml, args)
# @param hpxml [HPXML] HPXML object
# @param args [Hash] Map of :argument_name => value
# @return [HPXML::Building] HPXML Building object representing an individual dwelling unit
- def self.add_building(hpxml, args)
+ def add_building(hpxml, args)
if not args[:simulation_control_daylight_saving_period].nil?
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Calendar.parse_date_time_range(args[:simulation_control_daylight_saving_period])
dst_begin_month = begin_month
@@ -4678,7 +4642,7 @@ def self.add_building(hpxml, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_site(hpxml_bldg, args)
+ def set_site(hpxml_bldg, args)
hpxml_bldg.site.shielding_of_home = args[:site_shielding_of_home]
hpxml_bldg.site.ground_conductivity = args[:site_ground_conductivity]
hpxml_bldg.site.ground_diffusivity = args[:site_ground_diffusivity]
@@ -4734,7 +4698,7 @@ def self.set_site(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_neighbor_buildings(hpxml_bldg, args)
+ def set_neighbor_buildings(hpxml_bldg, args)
nbr_map = { Constants::FacadeFront => [args[:neighbor_front_distance], args[:neighbor_front_height]],
Constants::FacadeBack => [args[:neighbor_back_distance], args[:neighbor_back_height]],
Constants::FacadeLeft => [args[:neighbor_left_distance], args[:neighbor_left_height]],
@@ -4763,7 +4727,7 @@ def self.set_neighbor_buildings(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_building_occupancy(hpxml_bldg, args)
+ def set_building_occupancy(hpxml_bldg, args)
hpxml_bldg.building_occupancy.number_of_residents = args[:geometry_unit_num_occupants]
hpxml_bldg.building_occupancy.general_water_use_usage_multiplier = args[:general_water_use_usage_multiplier]
end
@@ -4781,7 +4745,7 @@ def self.set_building_occupancy(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_building_construction(hpxml_bldg, args)
+ def set_building_construction(hpxml_bldg, args)
if args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
args[:geometry_unit_num_floors_above_grade] = 1
end
@@ -4815,7 +4779,7 @@ def self.set_building_construction(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_building_header(hpxml_bldg, args)
+ def set_building_header(hpxml_bldg, args)
if not args[:schedules_filepaths].nil?
hpxml_bldg.header.schedules_filepaths = args[:schedules_filepaths].split(',').map(&:strip)
end
@@ -4848,7 +4812,7 @@ def self.set_building_header(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_climate_and_risk_zones(hpxml_bldg, args)
+ def set_climate_and_risk_zones(hpxml_bldg, args)
if not args[:site_iecc_zone].nil?
hpxml_bldg.climate_and_risk_zones.climate_zone_ieccs.add(zone: args[:site_iecc_zone],
year: 2006)
@@ -4870,7 +4834,7 @@ def self.set_climate_and_risk_zones(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_air_infiltration_measurements(hpxml_bldg, args)
+ def set_air_infiltration_measurements(hpxml_bldg, args)
if args[:air_leakage_value]
if args[:air_leakage_units] == HPXML::UnitsELA
effective_leakage_area = args[:air_leakage_value]
@@ -4916,7 +4880,7 @@ def self.set_air_infiltration_measurements(hpxml_bldg, args)
# @param args [Hash] Map of :argument_name => value
# @param sorted_surfaces [Array] surfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_roofs(hpxml_bldg, args, sorted_surfaces)
+ def set_roofs(hpxml_bldg, args, sorted_surfaces)
args[:geometry_roof_pitch] *= 12.0
if (args[:geometry_attic_type] == HPXML::AtticTypeFlatRoof) || (args[:geometry_attic_type] == HPXML::AtticTypeBelowApartment)
args[:geometry_roof_pitch] = 0.0
@@ -4935,6 +4899,8 @@ def self.set_roofs(hpxml_bldg, args, sorted_surfaces)
azimuth = Geometry.get_surface_azimuth(surface, args[:geometry_unit_orientation])
end
+ get_option_properties(args, 'roof_material.tsv', args[:enclosure_roof_material])
+
hpxml_bldg.roofs.add(id: "Roof#{hpxml_bldg.roofs.size + 1}",
interior_adjacent_to: Geometry.get_surface_adjacent_to(surface),
azimuth: azimuth,
@@ -4965,7 +4931,7 @@ def self.set_roofs(hpxml_bldg, args, sorted_surfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_surfaces [Array] surfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
+ def set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
sorted_surfaces.each do |surface|
next if surface.surfaceType != EPlus::SurfaceTypeWall
next unless [EPlus::BoundaryConditionOutdoors, EPlus::BoundaryConditionAdiabatic].include? surface.outsideBoundaryCondition
@@ -4993,6 +4959,9 @@ def self.set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
end
end
+ # TODO: wall color + wall siding type --> enclosure_wall_siding
+ # get_option_properties(args, 'wall_siding.tsv', args[:enclosure_wall_siding])
+
if exterior_adjacent_to == HPXML::LocationOutside
siding = args[:wall_siding_type]
end
@@ -5028,7 +4997,7 @@ def self.set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_surfaces [Array] surfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_walls(hpxml_bldg, model, args, sorted_surfaces)
+ def set_walls(hpxml_bldg, model, args, sorted_surfaces)
sorted_surfaces.each do |surface|
next if surface.surfaceType != EPlus::SurfaceTypeWall
next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
@@ -5064,6 +5033,9 @@ def self.set_walls(hpxml_bldg, model, args, sorted_surfaces)
wall_type = HPXML::WallTypeWoodStud
end
+ # wall color + wall siding type --> enclosure_wall_siding
+ # get_option_properties(args, 'wall_siding.tsv', args[:enclosure_wall_siding])
+
if exterior_adjacent_to == HPXML::LocationOutside && (not args[:wall_siding_type].nil?)
if (attic_locations.include? interior_adjacent_to) && (args[:wall_siding_type] == HPXML::SidingTypeNone)
siding = nil
@@ -5122,7 +5094,7 @@ def self.set_walls(hpxml_bldg, model, args, sorted_surfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_surfaces [Array] surfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_foundation_walls(hpxml_bldg, model, args, sorted_surfaces)
+ def set_foundation_walls(hpxml_bldg, model, args, sorted_surfaces)
sorted_surfaces.each do |surface|
next if surface.surfaceType != EPlus::SurfaceTypeWall
next unless [EPlus::BoundaryConditionFoundation, EPlus::BoundaryConditionAdiabatic].include? surface.outsideBoundaryCondition
@@ -5209,7 +5181,7 @@ def self.set_foundation_walls(hpxml_bldg, model, args, sorted_surfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_surfaces [Array] surfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_floors(hpxml_bldg, args, sorted_surfaces)
+ def set_floors(hpxml_bldg, args, sorted_surfaces)
if [HPXML::FoundationTypeBasementConditioned,
HPXML::FoundationTypeCrawlspaceConditioned].include?(args[:geometry_foundation_type]) && (args[:floor_over_foundation_assembly_r] > 2.1)
args[:floor_over_foundation_assembly_r] = 2.1 # Uninsulated
@@ -5293,7 +5265,7 @@ def self.set_floors(hpxml_bldg, args, sorted_surfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_surfaces [Array] surfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_slabs(hpxml_bldg, model, args, sorted_surfaces)
+ def set_slabs(hpxml_bldg, model, args, sorted_surfaces)
sorted_surfaces.each do |surface|
next unless [EPlus::BoundaryConditionFoundation].include? surface.outsideBoundaryCondition
next if surface.surfaceType != EPlus::SurfaceTypeFloor
@@ -5363,7 +5335,7 @@ def self.set_slabs(hpxml_bldg, model, args, sorted_surfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_subsurfaces [Array] subsurfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_windows(hpxml_bldg, model, args, sorted_subsurfaces)
+ def set_windows(hpxml_bldg, model, args, sorted_subsurfaces)
sorted_subsurfaces.each do |sub_surface|
next if sub_surface.subSurfaceType != EPlus::SubSurfaceTypeWindow
@@ -5449,7 +5421,7 @@ def self.set_windows(hpxml_bldg, model, args, sorted_subsurfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_subsurfaces [Array] subsurfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_skylights(hpxml_bldg, args, sorted_subsurfaces)
+ def set_skylights(hpxml_bldg, args, sorted_subsurfaces)
sorted_subsurfaces.each do |sub_surface|
next if sub_surface.subSurfaceType != 'Skylight'
@@ -5490,7 +5462,7 @@ def self.set_skylights(hpxml_bldg, args, sorted_subsurfaces)
# @param args [Hash] Map of :argument_name => value
# @param sorted_subsurfaces [Array] subsurfaces sorted by deterministically assigned Index
# @return [nil]
- def self.set_doors(hpxml_bldg, model, args, sorted_subsurfaces)
+ def set_doors(hpxml_bldg, model, args, sorted_subsurfaces)
sorted_subsurfaces.each do |sub_surface|
next if sub_surface.subSurfaceType != EPlus::SubSurfaceTypeDoor
@@ -5521,7 +5493,7 @@ def self.set_doors(hpxml_bldg, model, args, sorted_subsurfaces)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_attics(hpxml_bldg, args)
+ def set_attics(hpxml_bldg, args)
surf_ids = { 'roofs' => { 'surfaces' => hpxml_bldg.roofs, 'ids' => [] },
'walls' => { 'surfaces' => hpxml_bldg.walls, 'ids' => [] },
'floors' => { 'surfaces' => hpxml_bldg.floors, 'ids' => [] } }
@@ -5559,7 +5531,7 @@ def self.set_attics(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_foundations(hpxml_bldg, args)
+ def set_foundations(hpxml_bldg, args)
surf_ids = { 'slabs' => { 'surfaces' => hpxml_bldg.slabs, 'ids' => [] },
'floors' => { 'surfaces' => hpxml_bldg.floors, 'ids' => [] },
'foundation_walls' => { 'surfaces' => hpxml_bldg.foundation_walls, 'ids' => [] },
@@ -5618,7 +5590,7 @@ def self.set_foundations(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_heating_systems(hpxml_bldg, args)
+ def set_heating_systems(hpxml_bldg, args)
heating_system_type = args[:heating_system_type]
return if heating_system_type == Constants::None
@@ -5692,7 +5664,7 @@ def self.set_heating_systems(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_cooling_systems(hpxml_bldg, args)
+ def set_cooling_systems(hpxml_bldg, args)
cooling_system_type = args[:cooling_system_type]
return if cooling_system_type == Constants::None
@@ -5813,7 +5785,7 @@ def self.set_cooling_systems(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_heat_pumps(hpxml_bldg, args)
+ def set_heat_pumps(hpxml_bldg, args)
heat_pump_type = args[:heat_pump_type]
return if heat_pump_type == Constants::None
@@ -6007,7 +5979,7 @@ def self.set_heat_pumps(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_geothermal_loop(hpxml_bldg, args)
+ def set_geothermal_loop(hpxml_bldg, args)
return if hpxml_bldg.heat_pumps.count { |hp| hp.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir } == 0
return if args[:geothermal_loop_configuration].nil? || args[:geothermal_loop_configuration] == Constants::None
@@ -6046,7 +6018,7 @@ def self.set_geothermal_loop(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_secondary_heating_systems(hpxml_bldg, args)
+ def set_secondary_heating_systems(hpxml_bldg, args)
heating_system_type = args[:heating_system_2_type]
heating_system_is_heatpump_backup = (args[:heat_pump_type] != Constants::None && args[:heat_pump_backup_type] == HPXML::HeatPumpBackupTypeSeparate)
@@ -6089,7 +6061,7 @@ def self.set_secondary_heating_systems(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_hvac_distribution(hpxml_bldg, args)
+ def set_hvac_distribution(hpxml_bldg, args)
# HydronicDistribution?
hpxml_bldg.heating_systems.each do |heating_system|
next unless [heating_system.heating_system_type].include?(HPXML::HVACTypeBoiler)
@@ -6173,7 +6145,7 @@ def self.set_hvac_distribution(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_hvac_blower(hpxml_bldg, args)
+ def 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) ||
@@ -6207,7 +6179,7 @@ def self.set_hvac_blower(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_duct_leakages(args, hvac_distribution)
+ def set_duct_leakages(args, hvac_distribution)
hvac_distribution.duct_leakage_measurements.add(duct_type: HPXML::DuctTypeSupply,
duct_leakage_units: args[:ducts_leakage_units],
duct_leakage_value: args[:ducts_supply_leakage_to_outside_value],
@@ -6225,7 +6197,7 @@ def self.set_duct_leakages(args, hvac_distribution)
# @param foundation_type [String] the specific HPXML foundation type (unvented crawlspace, vented crawlspace, conditioned crawlspace)
# @param attic_type [String] the specific HPXML attic type (unvented attic, vented attic, conditioned attic)
# @return [nil]
- def self.get_location(location, foundation_type, attic_type)
+ def get_location(location, foundation_type, attic_type)
return if location.nil?
if location == HPXML::LocationCrawlspace
@@ -6264,7 +6236,7 @@ def self.get_location(location, foundation_type, attic_type)
# @param args [Hash] Map of :argument_name => value
# @param hvac_distribution [HPXML::HVACDistribution] HPXML HVAC Distribution object
# @return [nil]
- def self.set_ducts(hpxml_bldg, args, hvac_distribution)
+ def set_ducts(hpxml_bldg, args, hvac_distribution)
ducts_supply_location = get_location(args[:ducts_supply_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
ducts_return_location = get_location(args[:ducts_return_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
@@ -6382,7 +6354,7 @@ def self.set_ducts(hpxml_bldg, args, hvac_distribution)
# @param args [Hash] Map of :argument_name => value
# @param weather [WeatherFile] Weather object containing EPW information
# @return [nil]
- def self.set_hvac_control(hpxml, hpxml_bldg, args, weather)
+ def set_hvac_control(hpxml, hpxml_bldg, args, weather)
return if (args[:heating_system_type] == Constants::None) && (args[:cooling_system_type] == Constants::None) && (args[:heat_pump_type] == Constants::None)
latitude = Defaults.get_latitude(args[:site_latitude], weather) unless weather.nil?
@@ -6483,7 +6455,7 @@ def self.set_hvac_control(hpxml, hpxml_bldg, args, weather)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_ventilation_fans(hpxml_bldg, args)
+ def set_ventilation_fans(hpxml_bldg, args)
if args[:mech_vent_fan_type] != Constants::None
distribution_system_idref = nil
@@ -6646,7 +6618,7 @@ def self.set_ventilation_fans(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_water_heating_systems(hpxml_bldg, args)
+ def set_water_heating_systems(hpxml_bldg, args)
water_heater_type = args[:water_heater_type]
return if water_heater_type == Constants::None
@@ -6768,7 +6740,7 @@ def self.set_water_heating_systems(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_hot_water_distribution(hpxml_bldg, args)
+ def set_hot_water_distribution(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
if args[:dwhr_facilities_connected] != Constants::None
@@ -6806,7 +6778,7 @@ def self.set_hot_water_distribution(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_water_fixtures(hpxml_bldg, args)
+ def set_water_fixtures(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
hpxml_bldg.water_fixtures.add(id: "WaterFixture#{hpxml_bldg.water_fixtures.size + 1}",
@@ -6830,7 +6802,7 @@ def self.set_water_fixtures(hpxml_bldg, args)
# @param args [Hash] Map of :argument_name => value
# @param weather [WeatherFile] Weather object containing EPW information
# @return [nil]
- def self.set_solar_thermal(hpxml_bldg, args, weather)
+ def set_solar_thermal(hpxml_bldg, args, weather)
return if args[:solar_thermal_system_type] == Constants::None
if args[:solar_thermal_solar_fraction] > 0
@@ -6880,7 +6852,7 @@ def self.set_solar_thermal(hpxml_bldg, args, weather)
# @param args [Hash] Map of :argument_name => value
# @param weather [WeatherFile] Weather object containing EPW information
# @return [nil]
- def self.set_pv_systems(hpxml_bldg, args, weather)
+ def set_pv_systems(hpxml_bldg, args, weather)
return unless args[:pv_system_present]
if [HPXML::ResidentialTypeSFA, HPXML::ResidentialTypeApartment].include? args[:geometry_unit_type]
@@ -6934,7 +6906,7 @@ def self.set_pv_systems(hpxml_bldg, args, weather)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_battery(hpxml_bldg, args)
+ def set_battery(hpxml_bldg, args)
return unless args[:battery_present]
location = get_location(args[:battery_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
@@ -6971,7 +6943,7 @@ def self.set_battery(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_vehicle(hpxml_bldg, args)
+ def set_vehicle(hpxml_bldg, args)
return unless args[:vehicle_type] || args[:ev_charger_present]
charger_id = nil
@@ -7005,7 +6977,7 @@ def self.set_vehicle(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_lighting(hpxml_bldg, args)
+ def set_lighting(hpxml_bldg, args)
if args[:lighting_present]
has_garage = (args[:geometry_garage_width] * args[:geometry_garage_depth] > 0)
@@ -7090,7 +7062,7 @@ def self.set_lighting(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_dehumidifier(hpxml_bldg, args)
+ def set_dehumidifier(hpxml_bldg, args)
return if args[:dehumidifier_type] == Constants::None
case args[:dehumidifier_efficiency_type]
@@ -7122,7 +7094,7 @@ def self.set_dehumidifier(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_clothes_washer(hpxml_bldg, args)
+ def set_clothes_washer(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
return unless args[:clothes_washer_present]
@@ -7156,7 +7128,7 @@ def self.set_clothes_washer(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_clothes_dryer(hpxml_bldg, args)
+ def set_clothes_dryer(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
return unless args[:clothes_washer_present]
return unless args[:clothes_dryer_present]
@@ -7198,7 +7170,7 @@ def self.set_clothes_dryer(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_dishwasher(hpxml_bldg, args)
+ def set_dishwasher(hpxml_bldg, args)
return if args[:water_heater_type] == Constants::None
return unless args[:dishwasher_present]
@@ -7229,7 +7201,7 @@ def self.set_dishwasher(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_refrigerator(hpxml_bldg, args)
+ def set_refrigerator(hpxml_bldg, args)
return unless args[:refrigerator_present]
hpxml_bldg.refrigerators.add(id: "Refrigerator#{hpxml_bldg.refrigerators.size + 1}",
@@ -7246,7 +7218,7 @@ def self.set_refrigerator(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_extra_refrigerator(hpxml_bldg, args)
+ def set_extra_refrigerator(hpxml_bldg, args)
return unless args[:extra_refrigerator_present]
hpxml_bldg.refrigerators.add(id: "Refrigerator#{hpxml_bldg.refrigerators.size + 1}",
@@ -7265,7 +7237,7 @@ def self.set_extra_refrigerator(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_freezer(hpxml_bldg, args)
+ def set_freezer(hpxml_bldg, args)
return unless args[:freezer_present]
hpxml_bldg.freezers.add(id: "Freezer#{hpxml_bldg.freezers.size + 1}",
@@ -7282,7 +7254,7 @@ def self.set_freezer(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_cooking_range_oven(hpxml_bldg, args)
+ def set_cooking_range_oven(hpxml_bldg, args)
return unless args[:cooking_range_oven_present]
hpxml_bldg.cooking_ranges.add(id: "CookingRange#{hpxml_bldg.cooking_ranges.size + 1}",
@@ -7303,7 +7275,7 @@ def self.set_cooking_range_oven(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_ceiling_fans(hpxml_bldg, args)
+ def set_ceiling_fans(hpxml_bldg, args)
return unless args[:ceiling_fan_present]
hpxml_bldg.ceiling_fans.add(id: "CeilingFan#{hpxml_bldg.ceiling_fans.size + 1}",
@@ -7319,7 +7291,7 @@ def self.set_ceiling_fans(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_plug_loads_television(hpxml_bldg, args)
+ def set_misc_plug_loads_television(hpxml_bldg, args)
return unless args[:misc_plug_loads_television_present]
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
@@ -7336,7 +7308,7 @@ def self.set_misc_plug_loads_television(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_plug_loads_other(hpxml_bldg, args)
+ def set_misc_plug_loads_other(hpxml_bldg, args)
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
plug_load_type: HPXML::PlugLoadTypeOther,
kwh_per_year: args[:misc_plug_loads_other_annual_kwh],
@@ -7352,7 +7324,7 @@ def self.set_misc_plug_loads_other(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_plug_loads_well_pump(hpxml_bldg, args)
+ def set_misc_plug_loads_well_pump(hpxml_bldg, args)
return unless args[:misc_plug_loads_well_pump_present]
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
@@ -7368,7 +7340,7 @@ def self.set_misc_plug_loads_well_pump(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_plug_loads_vehicle(hpxml_bldg, args)
+ def set_misc_plug_loads_vehicle(hpxml_bldg, args)
return unless args[:misc_plug_loads_vehicle_present]
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
@@ -7385,7 +7357,7 @@ def self.set_misc_plug_loads_vehicle(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_fuel_loads_grill(hpxml_bldg, args)
+ def set_misc_fuel_loads_grill(hpxml_bldg, args)
return unless args[:misc_fuel_loads_grill_present]
hpxml_bldg.fuel_loads.add(id: "FuelLoad#{hpxml_bldg.fuel_loads.size + 1}",
@@ -7403,7 +7375,7 @@ def self.set_misc_fuel_loads_grill(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_fuel_loads_lighting(hpxml_bldg, args)
+ def set_misc_fuel_loads_lighting(hpxml_bldg, args)
return unless args[:misc_fuel_loads_lighting_present]
hpxml_bldg.fuel_loads.add(id: "FuelLoad#{hpxml_bldg.fuel_loads.size + 1}",
@@ -7422,7 +7394,7 @@ def self.set_misc_fuel_loads_lighting(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_misc_fuel_loads_fireplace(hpxml_bldg, args)
+ def set_misc_fuel_loads_fireplace(hpxml_bldg, args)
return unless args[:misc_fuel_loads_fireplace_present]
hpxml_bldg.fuel_loads.add(id: "FuelLoad#{hpxml_bldg.fuel_loads.size + 1}",
@@ -7444,7 +7416,7 @@ def self.set_misc_fuel_loads_fireplace(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_pool(hpxml_bldg, args)
+ def set_pool(hpxml_bldg, args)
return unless args[:pool_present]
case args[:pool_heater_type]
@@ -7481,7 +7453,7 @@ def self.set_pool(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.set_permanent_spa(hpxml_bldg, args)
+ def set_permanent_spa(hpxml_bldg, args)
return unless args[:permanent_spa_present]
case args[:permanent_spa_heater_type]
@@ -7513,7 +7485,7 @@ def self.set_permanent_spa(hpxml_bldg, args)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param args [Hash] Map of :argument_name => value
# @return [nil]
- def self.collapse_surfaces(hpxml_bldg, args)
+ def collapse_surfaces(hpxml_bldg, args)
if args[:combine_like_surfaces]
# Collapse some surfaces whose azimuth is a minor effect to simplify HPXMLs.
(hpxml_bldg.roofs + hpxml_bldg.rim_joists + hpxml_bldg.walls + hpxml_bldg.foundation_walls).each do |surface|
@@ -7538,7 +7510,7 @@ def self.collapse_surfaces(hpxml_bldg, args)
#
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @return [nil]
- def self.renumber_hpxml_ids(hpxml_bldg)
+ def renumber_hpxml_ids(hpxml_bldg)
# Renumber surfaces
indexes = {}
(hpxml_bldg.surfaces + hpxml_bldg.subsurfaces).each do |surf|
@@ -7590,6 +7562,110 @@ def self.renumber_hpxml_ids(hpxml_bldg)
end
end
end
+
+ # Reads the data (or retrieves the cached data) from the given TSV resource file.
+ # Uses a global variable so the data is only read once.
+ #
+ # @return [CSV::Table] CSV data for the TSV file
+ def get_csv_data_for_tsv_file(tsv_file_name)
+ if $csv_data.nil?
+ $csv_data = {}
+ end
+
+ if $csv_data[tsv_file_name].nil?
+ tsv_dir = File.join(File.dirname(__FILE__), 'resources', 'options')
+ $csv_data[tsv_file_name] = CSV.read(File.join(tsv_dir, tsv_file_name), col_sep: "\t", headers: true)
+
+ # Automatically determine column data types from values
+ column_datatype = {}
+ $csv_data[tsv_file_name][0].headers.each do |key|
+ datatypes = []
+ $csv_data[tsv_file_name].each do |row|
+ next if row[key].nil? || row[key].empty?
+
+ begin
+ val = Float(row[key])
+ if val % 1 == 0
+ datatypes << 'integer'
+ else
+ datatypes << 'float'
+ end
+ rescue
+ if ['TRUE', 'FALSE'].include? row[key].upcase
+ datatypes << 'boolean'
+ else
+ datatypes << 'string'
+ end
+ end
+ end
+ if datatypes.uniq.sort == ['float', 'integer']
+ column_datatype[key] = 'float'
+ elsif datatypes.uniq.size != 1
+ column_datatype[key] = 'string'
+ else
+ column_datatype[key] = datatypes.uniq[0]
+ end
+ end
+
+ # Convert data to appropriate data Types
+ $csv_data[tsv_file_name].each do |row|
+ row.each do |key, value|
+ next if row[key].nil? || row[key].empty?
+
+ case column_datatype[key]
+ when 'integer'
+ row[key] = Integer(Float(value))
+ when 'float'
+ row[key] = Float(value)
+ when 'boolean'
+ row[key] = { 'TRUE' => true, 'FALSE' => false }[value.upcase]
+ end
+ end
+ end
+ end
+
+ return $csv_data[tsv_file_name]
+ end
+
+ # Returns the list of option names specified in the given TSV resource file.
+ #
+ # @param tsv_file_name [String] Name of the TSV resource file
+ # @return [OpenStudio::StringVector] List of option names
+ def get_option_names(tsv_file_name)
+ csv_data = get_csv_data_for_tsv_file(tsv_file_name)
+ option_names = OpenStudio::StringVector.new
+ csv_data.map { |row| row['Option Name'] }.each do |option_name|
+ option_names << option_name
+ end
+ return option_names
+ end
+
+ # Updates the args hash with key-value detailed properties for the
+ # given option name and TSV resource file.
+ #
+ # @param args [Hash] Map of :argument_name => value
+ # @param tsv_file_name [String] Name of the TSV resource file
+ # @param option_name [String] Name of the option in the TSV resource file
+ # @return [nil]
+ def get_option_properties(args, tsv_file_name, option_name)
+ return if option_name.nil?
+
+ csv_data = get_csv_data_for_tsv_file(tsv_file_name)
+
+ csv_data.each do |row|
+ next if row['Option Name'] != option_name
+
+ # Match, add detailed properties to args hash
+ row.each do |key, value|
+ next if key == 'Option Name'
+
+ args[key.to_sym] = value
+ end
+ return
+ end
+
+ fail "Unexpected error: Could not look up #{option_name} in #{tsv_file_name}."
+ end
end
# register the measure to be used by the application
diff --git a/BuildResidentialHPXML/measure.xml b/BuildResidentialHPXML/measure.xml
index 761aaa9fcc..c912205aab 100644
--- a/BuildResidentialHPXML/measure.xml
+++ b/BuildResidentialHPXML/measure.xml
@@ -1505,78 +1505,176 @@
31.6
- 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.10.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
+ enclosure_roof_material
+ Enclosure: Roof Material
+ The material type/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
- asphalt or fiberglass shingles
- asphalt or fiberglass shingles
+ Asphalt/Fiberglass Shingles, Dark
+ Asphalt/Fiberglass Shingles, Dark
- concrete
- concrete
+ Asphalt/Fiberglass Shingles, Medium Dark
+ Asphalt/Fiberglass Shingles, Medium Dark
- cool roof
- cool roof
+ Asphalt/Fiberglass Shingles, Medium
+ Asphalt/Fiberglass Shingles, Medium
- slate or tile shingles
- slate or tile shingles
+ Asphalt/Fiberglass Shingles, Light
+ Asphalt/Fiberglass Shingles, Light
- expanded polystyrene sheathing
- expanded polystyrene sheathing
+ Asphalt/Fiberglass Shingles, Reflective
+ Asphalt/Fiberglass Shingles, Reflective
- metal surfacing
- metal surfacing
+ Tile/Slate, Dark
+ Tile/Slate, Dark
- plastic/rubber/synthetic sheeting
- plastic/rubber/synthetic sheeting
+ Tile/Slate, Medium Dark
+ Tile/Slate, Medium Dark
- shingles
- shingles
+ Tile/Slate, Medium
+ Tile/Slate, Medium
- wood shingles or shakes
- wood shingles or shakes
+ Tile/Slate, Light
+ Tile/Slate, Light
-
-
-
- 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.10.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
- Choice
- false
- false
-
- dark
- dark
+ Tile/Slate, Reflective
+ Tile/Slate, Reflective
- light
- light
+ Metal, Dark
+ Metal, Dark
- medium
- medium
+ Metal, Medium Dark
+ Metal, Medium Dark
- medium dark
- medium dark
+ Metal, Medium
+ Metal, Medium
- reflective
- reflective
+ Metal, Light
+ Metal, Light
+
+
+ Metal, Reflective
+ Metal, Reflective
+
+
+ Wood Shingles/Shakes, Dark
+ Wood Shingles/Shakes, Dark
+
+
+ Wood Shingles/Shakes, Medium Dark
+ Wood Shingles/Shakes, Medium Dark
+
+
+ Wood Shingles/Shakes, Medium
+ Wood Shingles/Shakes, Medium
+
+
+ Wood Shingles/Shakes, Light
+ Wood Shingles/Shakes, Light
+
+
+ Wood Shingles/Shakes, Reflective
+ Wood Shingles/Shakes, Reflective
+
+
+ Shingles, Dark
+ Shingles, Dark
+
+
+ Shingles, Medium Dark
+ Shingles, Medium Dark
+
+
+ Shingles, Medium
+ Shingles, Medium
+
+
+ Shingles, Light
+ Shingles, Light
+
+
+ Shingles, Reflective
+ Shingles, Reflective
+
+
+ Synthetic Sheeting, Dark
+ Synthetic Sheeting, Dark
+
+
+ Synthetic Sheeting, Medium Dark
+ Synthetic Sheeting, Medium Dark
+
+
+ Synthetic Sheeting, Medium
+ Synthetic Sheeting, Medium
+
+
+ Synthetic Sheeting, Light
+ Synthetic Sheeting, Light
+
+
+ Synthetic Sheeting, Reflective
+ Synthetic Sheeting, Reflective
+
+
+ EPS Sheathing, Dark
+ EPS Sheathing, Dark
+
+
+ EPS Sheathing, Medium Dark
+ EPS Sheathing, Medium Dark
+
+
+ EPS Sheathing, Medium
+ EPS Sheathing, Medium
+
+
+ EPS Sheathing, Light
+ EPS Sheathing, Light
+
+
+ EPS Sheathing, Reflective
+ EPS Sheathing, Reflective
+
+
+ Concrete, Dark
+ Concrete, Dark
+
+
+ Concrete, Medium Dark
+ Concrete, Medium Dark
+
+
+ Concrete, Medium
+ Concrete, Medium
+
+
+ Concrete, Light
+ Concrete, Light
+
+
+ Concrete, Reflective
+ Concrete, Reflective
+
+
+ Cool Roof
+ Cool Roof
@@ -2402,57 +2500,193 @@
- heating_system_type
- Heating System: Type
- The type of heating system. Use 'none' if there is no heating system or if there is a heat pump serving a heating load.
+ heating_system
+ Heating System
+ The heating system type/efficiency. Efficiency is Rated AFUE or Percent as a Fraction. Use 'none' if there is no heating system or if there is a heat pump serving a heating load.
Choice
true
false
- Furnace
+ Fuel Furnace, 78% AFUE
- none
- none
+ Electric Furnace, 98% AFUE
+ Electric Furnace, 98% AFUE
- Furnace
- Furnace
+ Electric Furnace, 100% AFUE
+ Electric Furnace, 100% AFUE
- WallFurnace
- WallFurnace
+ Electric Baseboard, 100% Efficiency
+ Electric Baseboard, 100% Efficiency
- FloorFurnace
- FloorFurnace
+ Electric Boiler, 98% AFUE
+ Electric Boiler, 98% AFUE
- Boiler
- Boiler
+ Electric Boiler, 100% AFUE
+ Electric Boiler, 100% AFUE
- ElectricResistance
- ElectricResistance
+ Electric Wall Furnace, 100% AFUE
+ Electric Wall Furnace, 100% AFUE
- Stove
- Stove
+ Fuel Boiler, 72% AFUE
+ Fuel Boiler, 72% AFUE
- SpaceHeater
- SpaceHeater
+ Fuel Boiler, 76% AFUE
+ Fuel Boiler, 76% AFUE
- Fireplace
- Fireplace
+ Fuel Boiler, 80% AFUE
+ Fuel Boiler, 80% AFUE
- Shared Boiler w/ Baseboard
- Shared Boiler w/ Baseboard
+ Fuel Boiler, 82% AFUE
+ Fuel Boiler, 82% AFUE
- Shared Boiler w/ Ductless Fan Coil
- Shared Boiler w/ Ductless Fan Coil
+ Fuel Boiler, 85% AFUE
+ Fuel Boiler, 85% AFUE
+
+
+ Fuel Boiler, 90% AFUE
+ Fuel Boiler, 90% AFUE
+
+
+ Fuel Boiler, 92% AFUE
+ Fuel Boiler, 92% AFUE
+
+
+ Fuel Boiler, 92% AFUE, 600 BTUh Pilot Light
+ Fuel Boiler, 92% AFUE, 600 BTUh Pilot Light
+
+
+ Fuel Boiler, 95% AFUE
+ Fuel Boiler, 95% AFUE
+
+
+ Fuel Boiler, 96% AFUE
+ Fuel Boiler, 96% AFUE
+
+
+ Fuel Furnace, 60% AFUE
+ Fuel Furnace, 60% AFUE
+
+
+ Fuel Furnace, 68% AFUE
+ Fuel Furnace, 68% AFUE
+
+
+ Fuel Furnace, 72% AFUE
+ Fuel Furnace, 72% AFUE
+
+
+ Fuel Furnace, 76% AFUE
+ Fuel Furnace, 76% AFUE
+
+
+ Fuel Furnace, 78% AFUE
+ Fuel Furnace, 78% AFUE
+
+
+ Fuel Furnace, 80% AFUE
+ Fuel Furnace, 80% AFUE
+
+
+ Fuel Furnace, 85% AFUE
+ Fuel Furnace, 85% AFUE
+
+
+ Fuel Furnace, 90% AFUE
+ Fuel Furnace, 90% AFUE
+
+
+ Fuel Furnace, 92% AFUE
+ Fuel Furnace, 92% AFUE
+
+
+ Fuel Furnace, 92% AFUE, Airflow Defect Ratio
+ Fuel Furnace, 92% AFUE, Airflow Defect Ratio
+
+
+ Fuel Furnace, 92% AFUE, 600 BTUh Pilot Light
+ Fuel Furnace, 92% AFUE, 600 BTUh Pilot Light
+
+
+ Fuel Furnace, 92.5% AFUE
+ Fuel Furnace, 92.5% AFUE
+
+
+ Fuel Furnace, 96% AFUE
+ Fuel Furnace, 96% AFUE
+
+
+ Fuel Wall Furnace, 60% AFUE
+ Fuel Wall Furnace, 60% AFUE
+
+
+ Fuel Wall Furnace, 68% AFUE
+ Fuel Wall Furnace, 68% AFUE
+
+
+ Electric Wall Furnace, 98% AFUE
+ Electric Wall Furnace, 98% AFUE
+
+
+ Electric Wall Furnace, 100% AFUE
+ Electric Wall Furnace, 100% AFUE
+
+
+ None
+ None
+
+
+ Fuel Boiler w/ Baseboard, 78% AFUE
+ Fuel Boiler w/ Baseboard, 78% AFUE
+
+
+ Fuel Boiler w/ Baseboard, 92% AFUE
+ Fuel Boiler w/ Baseboard, 92% AFUE
+
+
+ Electric Boiler w/ Baseboard, 100% AFUE
+ Electric Boiler w/ Baseboard, 100% AFUE
+
+
+ Fuel Fan Coil Heating, 78% AFUE
+ Fuel Fan Coil Heating, 78% AFUE
+
+
+ Fuel Fan Coil Heating, 92% AFUE
+ Fuel Fan Coil Heating, 92% AFUE
+
+
+ Electric Fan Coil Heating, 100% AFUE
+ Electric Fan Coil Heating, 100% AFUE
+
+
+ Fireplace, 80% Efficiency
+ Fireplace, 80% Efficiency
+
+
+ Stove, 80% Efficiency
+ Stove, 80% Efficiency
+
+
+ Fuel Floor Furnace, 80% AFUE, 600 BTUh Pilot Light
+ Fuel Floor Furnace, 80% AFUE, 600 BTUh Pilot Light
+
+
+ Space Heater, 100% Efficiency
+ Space Heater, 100% Efficiency
+
+
+ Space Heater, 92% Efficiency
+ Space Heater, 92% Efficiency
@@ -2495,16 +2729,6 @@
-
- heating_system_heating_efficiency
- Heating System: Rated AFUE or Percent
- The rated heating efficiency value of the heating system.
- Double
- Frac
- true
- false
- 0.78
-
heating_system_heating_capacity
Heating System: Heating Capacity
@@ -2541,24 +2765,6 @@
false
1
-
- heating_system_pilot_light
- Heating System: Pilot Light
- The fuel usage of the pilot light. Applies only to Furnace, WallFurnace, FloorFurnace, Stove, Boiler, and Fireplace with non-electric fuel type. If not provided, assumes no pilot light.
- Double
- Btuh
- false
- false
-
-
- heating_system_airflow_defect_ratio
- Heating System: Airflow Defect Ratio
- The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heating system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to Furnace. If not provided, assumes no defect.
- Double
- Frac
- false
- false
-
cooling_system_type
Cooling System: Type
@@ -7682,7 +7888,7 @@
README.md
md
readme
- 4D1FBA76
+ 57AB644D
README.md.erb
@@ -7713,6 +7919,24 @@
resource
C905753A
+
+ options/heating_system.tsv
+ tsv
+ resource
+ DAF2DDBB
+
+
+ options/roof_material.tsv
+ tsv
+ resource
+ 1DE7CA79
+
+
+ options/wall_siding.tsv
+ tsv
+ resource
+ B1730110
+
version.txt
txt
@@ -7723,7 +7947,7 @@
test_build_residential_hpxml.rb
rb
test
- BAC58C3D
+ 80DD6DF8
diff --git a/BuildResidentialHPXML/resources/options/heating_system.tsv b/BuildResidentialHPXML/resources/options/heating_system.tsv
new file mode 100644
index 0000000000..1efda2bcc2
--- /dev/null
+++ b/BuildResidentialHPXML/resources/options/heating_system.tsv
@@ -0,0 +1,46 @@
+Option Name heating_system_type heating_system_heating_efficiency heating_system_pilot_light heating_system_airflow_defect_ratio
+"Electric Furnace, 98% AFUE" Furnace 0.98
+"Electric Furnace, 100% AFUE" Furnace 1
+"Electric Baseboard, 100% Efficiency" ElectricResistance 1
+"Electric Boiler, 98% AFUE" Boiler 0.98
+"Electric Boiler, 100% AFUE" Boiler 1
+"Electric Wall Furnace, 100% AFUE" WallFurnace 1
+"Fuel Boiler, 72% AFUE" Boiler 0.72
+"Fuel Boiler, 76% AFUE" Boiler 0.76
+"Fuel Boiler, 80% AFUE" Boiler 0.8
+"Fuel Boiler, 82% AFUE" Boiler 0.82
+"Fuel Boiler, 85% AFUE" Boiler 0.85
+"Fuel Boiler, 90% AFUE" Boiler 0.9
+"Fuel Boiler, 92% AFUE" Boiler 0.92
+"Fuel Boiler, 92% AFUE, 600 BTUh Pilot Light" Boiler 0.92 600
+"Fuel Boiler, 95% AFUE" Boiler 0.95
+"Fuel Boiler, 96% AFUE" Boiler 0.96
+"Fuel Furnace, 60% AFUE" Furnace 0.6
+"Fuel Furnace, 68% AFUE" Furnace 0.68
+"Fuel Furnace, 72% AFUE" Furnace 0.72
+"Fuel Furnace, 76% AFUE" Furnace 0.76
+"Fuel Furnace, 78% AFUE" Furnace 0.78
+"Fuel Furnace, 80% AFUE" Furnace 0.8
+"Fuel Furnace, 85% AFUE" Furnace 0.85
+"Fuel Furnace, 90% AFUE" Furnace 0.9
+"Fuel Furnace, 92% AFUE" Furnace 0.92
+"Fuel Furnace, 92% AFUE, Airflow Defect Ratio" Furnace 0.92 -0.25
+"Fuel Furnace, 92% AFUE, 600 BTUh Pilot Light" Furnace 0.92 600
+"Fuel Furnace, 92.5% AFUE" Furnace 0.925
+"Fuel Furnace, 96% AFUE" Furnace 0.96
+"Fuel Wall Furnace, 60% AFUE" WallFurnace 0.6
+"Fuel Wall Furnace, 68% AFUE" WallFurnace 0.68
+"Electric Wall Furnace, 98% AFUE" WallFurnace 0.98
+"Electric Wall Furnace, 100% AFUE" WallFurnace 1
+None none
+"Fuel Boiler w/ Baseboard, 78% AFUE" Shared Boiler w/ Baseboard 0.78
+"Fuel Boiler w/ Baseboard, 92% AFUE" Shared Boiler w/ Baseboard 0.92
+"Electric Boiler w/ Baseboard, 100% AFUE" Shared Boiler w/ Baseboard 1
+"Fuel Fan Coil Heating, 78% AFUE" Shared Boiler w/ Ductless Fan Coil 0.78
+"Fuel Fan Coil Heating, 92% AFUE" Shared Boiler w/ Ductless Fan Coil 0.92
+"Electric Fan Coil Heating, 100% AFUE" Shared Boiler w/ Ductless Fan Coil 1
+"Fireplace, 80% Efficiency" Fireplace 0.8
+"Stove, 80% Efficiency" Stove 0.8
+"Fuel Floor Furnace, 80% AFUE, 600 BTUh Pilot Light" FloorFurnace 0.8 600
+"Space Heater, 100% Efficiency" SpaceHeater 1
+"Space Heater, 92% Efficiency" SpaceHeater 0.92
diff --git a/BuildResidentialHPXML/resources/options/roof_material.tsv b/BuildResidentialHPXML/resources/options/roof_material.tsv
new file mode 100644
index 0000000000..f83aa80fdc
--- /dev/null
+++ b/BuildResidentialHPXML/resources/options/roof_material.tsv
@@ -0,0 +1,42 @@
+Option Name roof_material_type roof_color
+"Asphalt/Fiberglass Shingles, Dark" asphalt or fiberglass shingles dark
+"Asphalt/Fiberglass Shingles, Medium Dark" asphalt or fiberglass shingles medium dark
+"Asphalt/Fiberglass Shingles, Medium" asphalt or fiberglass shingles medium
+"Asphalt/Fiberglass Shingles, Light" asphalt or fiberglass shingles light
+"Asphalt/Fiberglass Shingles, Reflective" asphalt or fiberglass shingles reflective
+"Tile/Slate, Dark" slate or tile shingles dark
+"Tile/Slate, Medium Dark" slate or tile shingles medium dark
+"Tile/Slate, Medium" slate or tile shingles medium
+"Tile/Slate, Light" slate or tile shingles light
+"Tile/Slate, Reflective" slate or tile shingles reflective
+"Metal, Dark" metal surfacing dark
+"Metal, Medium Dark" metal surfacing medium dark
+"Metal, Medium" metal surfacing medium
+"Metal, Light" metal surfacing light
+"Metal, Reflective" metal surfacing reflective
+"Wood Shingles/Shakes, Dark" wood shingles or shakes dark
+"Wood Shingles/Shakes, Medium Dark" wood shingles or shakes medium dark
+"Wood Shingles/Shakes, Medium" wood shingles or shakes medium
+"Wood Shingles/Shakes, Light" wood shingles or shakes light
+"Wood Shingles/Shakes, Reflective" wood shingles or shakes reflective
+"Shingles, Dark" shingles dark
+"Shingles, Medium Dark" shingles medium dark
+"Shingles, Medium" shingles medium
+"Shingles, Light" shingles light
+"Shingles, Reflective" shingles reflective
+"Synthetic Sheeting, Dark" plastic/rubber/synthetic sheeting dark
+"Synthetic Sheeting, Medium Dark" plastic/rubber/synthetic sheeting medium dark
+"Synthetic Sheeting, Medium" plastic/rubber/synthetic sheeting medium
+"Synthetic Sheeting, Light" plastic/rubber/synthetic sheeting light
+"Synthetic Sheeting, Reflective" plastic/rubber/synthetic sheeting reflective
+"EPS Sheathing, Dark" expanded polystyrene sheathing dark
+"EPS Sheathing, Medium Dark" expanded polystyrene sheathing medium dark
+"EPS Sheathing, Medium" expanded polystyrene sheathing medium
+"EPS Sheathing, Light" expanded polystyrene sheathing light
+"EPS Sheathing, Reflective" expanded polystyrene sheathing reflective
+"Concrete, Dark" concrete dark
+"Concrete, Medium Dark" concrete medium dark
+"Concrete, Medium" concrete medium
+"Concrete, Light" concrete light
+"Concrete, Reflective" concrete reflective
+Cool Roof cool roof reflective
diff --git a/BuildResidentialHPXML/resources/options/wall_siding.tsv b/BuildResidentialHPXML/resources/options/wall_siding.tsv
new file mode 100644
index 0000000000..bfa35a8dce
--- /dev/null
+++ b/BuildResidentialHPXML/resources/options/wall_siding.tsv
@@ -0,0 +1,52 @@
+Option Name wall_siding_type wall_color
+"Aluminum, Dark" aluminum siding dark
+"Aluminum, Medium" aluminum siding medium
+"Aluminum, Medium Dark" aluminum siding medium dark
+"Aluminum, Light" aluminum siding light
+"Aluminum, Reflective" aluminum siding reflective
+"Brick, Dark" brick veneer dark
+"Brick, Medium" brick veneer medium
+"Brick, Medium Dark" brick veneer medium dark
+"Brick, Light" brick veneer light
+"Brick, Reflective" brick veneer reflective
+"Fiber-Cement, Dark" fiber cement siding dark
+"Fiber-Cement, Medium" fiber cement siding medium
+"Fiber-Cement, Medium Dark" fiber cement siding medium dark
+"Fiber-Cement, Light" fiber cement siding light
+"Fiber-Cement, Reflective" fiber cement siding reflective
+"Shingle, Asbestos, Dark" asbestos siding dark
+"Shingle, Asbestos, Medium" asbestos siding medium
+"Shingle, Asbestos, Medium Dark" asbestos siding medium dark
+"Shingle, Asbestos, Light" asbestos siding light
+"Shingle, Asbestos, Reflective" asbestos siding reflective
+"Shingle, Composition, Dark" composite shingle siding dark
+"Shingle, Composition, Medium" composite shingle siding medium
+"Shingle, Composition, Medium Dark" composite shingle siding medium dark
+"Shingle, Composition, Light" composite shingle siding light
+"Shingle, Composition, Reflective" composite shingle siding reflective
+"Stucco, Dark" stucco dark
+"Stucco, Medium" stucco medium
+"Stucco, Medium Dark" stucco medium dark
+"Stucco, Light" stucco light
+"Stucco, Reflective" stucco reflective
+"Vinyl, Dark" vinyl siding dark
+"Vinyl, Medium" vinyl siding medium
+"Vinyl, Medium Dark" vinyl siding medium dark
+"Vinyl, Light" vinyl siding light
+"Vinyl, Reflective" vinyl siding reflective
+"Wood, Dark" wood siding dark
+"Wood, Medium" wood siding medium
+"Wood, Medium Dark" wood siding medium dark
+"Wood, Light" wood siding light
+"Wood, Reflective" wood siding reflective
+"Synthetic Stucco, Dark" synthetic stucco dark
+"Synthetic Stucco, Medium" synthetic stucco medium
+"Synthetic Stucco, Medium Dark" synthetic stucco medium dark
+"Synthetic Stucco, Light" synthetic stucco light
+"Synthetic Stucco, Reflective" synthetic stucco reflective
+"Masonite, Dark" masonite siding dark
+"Masonite, Medium" masonite siding medium
+"Masonite, Medium Dark" masonite siding medium dark
+"Masonite, Light" masonite siding light
+"Masonite, Reflective" masonite siding reflective
+None none medium
diff --git a/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb b/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
index 866602fc4e..1eed7c30af 100644
--- a/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
+++ b/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
@@ -445,8 +445,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['slab_carpet_fraction'] = 0.0
args['slab_carpet_r'] = 0.0
args['ceiling_assembly_r'] = 39.3
- args['roof_material_type'] = HPXML::RoofTypeAsphaltShingles
- args['roof_color'] = HPXML::ColorMedium
+ args['enclosure_roof_material'] = 'Asphalt/Fiberglass Shingles, Medium'
args['roof_assembly_r'] = 2.3
args['radiant_barrier_attic_location'] = Constants::None
args['radiant_barrier_grade'] = 1
@@ -495,9 +494,8 @@ def _set_measure_argument_values(hpxml_file, args)
args['air_leakage_units'] = HPXML::UnitsACH
args['air_leakage_house_pressure'] = 50
args['air_leakage_value'] = 3
- args['heating_system_type'] = HPXML::HVACTypeFurnace
args['heating_system_fuel'] = HPXML::FuelTypeNaturalGas
- args['heating_system_heating_efficiency'] = 0.92
+ args['heating_system'] = 'Fuel Furnace, 92% AFUE'
args['heating_system_heating_capacity'] = 36000.0
args['heating_system_fraction_heat_load_served'] = 1
args['cooling_system_type'] = HPXML::HVACTypeCentralAirConditioner
@@ -788,20 +786,19 @@ def _set_measure_argument_values(hpxml_file, args)
args['heating_system_2_type'] = HPXML::HVACTypeSpaceHeater
args['heating_system_2_heating_capacity'] = 16000.0
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
+ args['heating_system'] = 'Electric Baseboard, 100% Efficiency'
args['heating_system_heating_capacity'] = 48000.0
args['heating_system_fraction_heat_load_served'] = 0.75
args['cooling_system_type'] = Constants::None
args['heating_system_2_type'] = HPXML::HVACTypeFireplace
args['heating_system_2_heating_capacity'] = 16000.0
when 'extra-second-heating-system-boiler-to-heating-system.xml'
- args['heating_system_type'] = HPXML::HVACTypeBoiler
+ args['heating_system'] = 'Fuel Boiler, 92% AFUE'
args['heating_system_fraction_heat_load_served'] = 0.75
args['heating_system_2_type'] = HPXML::HVACTypeBoiler
when 'extra-second-heating-system-portable-heater-to-heat-pump.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
args['heat_pump_backup_type'] = HPXML::HeatPumpBackupTypeIntegrated
@@ -815,7 +812,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['heating_system_2_type'] = HPXML::HVACTypeSpaceHeater
args['heating_system_2_heating_capacity'] = 16000.0
when 'extra-second-heating-system-fireplace-to-heat-pump.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpMiniSplit
args.delete('heat_pump_cooling_compressor_type')
@@ -827,7 +824,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['heating_system_2_type'] = HPXML::HVACTypeFireplace
args['heating_system_2_heating_capacity'] = 16000.0
when 'extra-second-heating-system-boiler-to-heat-pump.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpGroundToAir
args['heat_pump_heating_efficiency_type'] = HPXML::UnitsCOP
@@ -950,7 +947,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['battery_present'] = true
args['battery_location'] = HPXML::LocationAttic
when 'extra-detailed-performance-autosize.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
args['heat_pump_heating_efficiency'] = 10.0
@@ -1146,7 +1143,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
when 'error-cooling-system-and-heat-pump.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
when 'error-sfd-conditioned-basement-zero-foundation-height.xml'
args['geometry_foundation_height'] = 0.0
@@ -1163,10 +1160,10 @@ def _set_measure_argument_values(hpxml_file, args)
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
args.delete('foundation_wall_insulation_distance_to_bottom')
when 'error-second-heating-system-but-no-primary-heating.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['heating_system_2_type'] = HPXML::HVACTypeFireplace
when 'error-second-heating-system-ducted-with-ducted-primary-heating.xml'
- args['heating_system_type'] = Constants::None
+ args['heating_system'] = 'None'
args['cooling_system_type'] = Constants::None
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpMiniSplit
args.delete('heat_pump_cooling_compressor_type')
@@ -1201,7 +1198,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['geometry_attic_type'] = HPXML::AtticTypeConditioned
args['ceiling_assembly_r'] = 0.0
when 'error-sfd-with-shared-system.xml'
- args['heating_system_type'] = "Shared #{HPXML::HVACTypeBoiler} w/ Baseboard"
+ args['heating_system'] = 'Fuel Boiler w/ Baseboard, 92% AFUE'
when 'error-rim-joist-height-but-no-assembly-r.xml'
args.delete('rim_joist_assembly_r')
when 'error-rim-joist-assembly-r-but-no-height.xml'
diff --git a/tasks.rb b/tasks.rb
index 7a71314126..7e6e1f2043 100644
--- a/tasks.rb
+++ b/tasks.rb
@@ -11,10 +11,10 @@
def create_hpxmls
this_dir = File.dirname(__FILE__)
workflow_dir = File.join(this_dir, 'workflow')
- hpxml_inputs_tsv_path = File.join(workflow_dir, 'hpxml_inputs.json')
+ hpxml_inputs_json_path = File.join(workflow_dir, 'hpxml_inputs.json')
require 'json'
- json_inputs = JSON.parse(File.read(hpxml_inputs_tsv_path))
+ json_inputs = JSON.parse(File.read(hpxml_inputs_json_path))
abs_hpxml_files = []
dirs = json_inputs.keys.map { |file_path| File.dirname(file_path) }.uniq
diff --git a/workflow/hpxml_inputs.json b/workflow/hpxml_inputs.json
index e5e7c73403..6ecfacc004 100644
--- a/workflow/hpxml_inputs.json
+++ b/workflow/hpxml_inputs.json
@@ -42,8 +42,7 @@
"slab_carpet_fraction": 0,
"slab_carpet_r": 0,
"ceiling_assembly_r": 18.45,
- "roof_material_type": "asphalt or fiberglass shingles",
- "roof_color": "medium",
+ "enclosure_roof_material": "Asphalt/Fiberglass Shingles, Medium",
"roof_assembly_r": 1.99,
"radiant_barrier_grade": 2,
"radiant_barrier_attic_location": "none",
@@ -88,9 +87,8 @@
"air_leakage_units": "ACHnatural",
"air_leakage_house_pressure": 50,
"air_leakage_value": 0.67,
- "heating_system_type": "none",
+ "heating_system": "None",
"heating_system_fuel": "natural gas",
- "heating_system_heating_efficiency": 0,
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency_type": "SEER",
@@ -268,7 +266,7 @@
},
"tests/ASHRAE_Standard_140/L202AC.xml": {
"parent_hpxml": "tests/ASHRAE_Standard_140/L200AC.xml",
- "roof_color": "reflective",
+ "enclosure_roof_material": "Asphalt/Fiberglass Shingles, Reflective",
"wall_color": "reflective"
},
"tests/ASHRAE_Standard_140/L302XC.xml": {
@@ -357,15 +355,14 @@
},
"tests/ASHRAE_Standard_140/L202AL.xml": {
"parent_hpxml": "tests/ASHRAE_Standard_140/L200AL.xml",
- "roof_color": "reflective",
+ "enclosure_roof_material": "Asphalt/Fiberglass Shingles, Reflective",
"wall_color": "reflective"
},
"tests/HERS_HVAC/HVAC1a.xml": {
"parent_hpxml": "tests/ASHRAE_Standard_140/L100AL.xml",
- "heating_system_type": "Furnace",
+ "heating_system": "Fuel Furnace, 78% AFUE",
"heating_system_fuel": "natural gas",
"heating_system_heating_capacity": 56100,
- "heating_system_heating_efficiency": 0.78,
"heating_system_fraction_heat_load_served": 1.0,
"cooling_system_type": "central air conditioner",
"cooling_system_cooling_capacity": 38300,
@@ -384,11 +381,11 @@
},
"tests/HERS_HVAC/HVAC2b.xml": {
"parent_hpxml": "tests/HERS_HVAC/HVAC2a.xml",
- "heating_system_heating_efficiency": 0.9
+ "heating_system": "Fuel Furnace, 90% AFUE"
},
"tests/HERS_HVAC/HVAC2c.xml": {
"parent_hpxml": "tests/HERS_HVAC/HVAC2a.xml",
- "heating_system_type": "none",
+ "heating_system": "None",
"cooling_system_type": "none",
"heat_pump_type": "air-to-air",
"heat_pump_cooling_capacity": 56100,
@@ -412,7 +409,7 @@
"tests/HERS_HVAC/HVAC2e.xml": {
"parent_hpxml": "tests/HERS_HVAC/HVAC2a.xml",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 1.0
+ "heating_system": "Electric Furnace, 100% AFUE"
},
"tests/HERS_DSE/HVAC3a.xml": {
"parent_hpxml": "tests/ASHRAE_Standard_140/L322XC.xml",
@@ -420,10 +417,9 @@
"geometry_unit_cfa": 1539,
"air_leakage_value": 0.67,
"floor_over_foundation_assembly_r": 13.85,
- "heating_system_type": "Furnace",
"heating_system_fuel": "natural gas",
"heating_system_heating_capacity": 46600,
- "heating_system_heating_efficiency": 0.78,
+ "heating_system": "Fuel Furnace, 78% AFUE",
"heating_system_fraction_heat_load_served": 1.0,
"cooling_system_type": "central air conditioner",
"cooling_system_cooling_capacity": 38400,
@@ -458,10 +454,9 @@
},
"tests/HERS_DSE/HVAC3e.xml": {
"parent_hpxml": "tests/ASHRAE_Standard_140/L100AL.xml",
- "heating_system_type": "Furnace",
"heating_system_fuel": "natural gas",
"heating_system_heating_capacity": 46600,
- "heating_system_heating_efficiency": 0.78,
+ "heating_system": "Fuel Furnace, 78% AFUE",
"heating_system_fraction_heat_load_served": 1.0,
"cooling_system_type": "central air conditioner",
"cooling_system_cooling_capacity": 38400,
@@ -509,9 +504,8 @@
"window_ufactor": 0.35,
"window_interior_shading_winter": null,
"window_interior_shading_summer": null,
- "heating_system_type": "Furnace",
"heating_system_fuel": "natural gas",
- "heating_system_heating_efficiency": 0.78,
+ "heating_system":"Fuel Furnace, 78% AFUE",
"heating_system_fraction_heat_load_served": 1.0,
"cooling_system_type": "central air conditioner",
"cooling_system_cooling_efficiency": 13,
@@ -648,8 +642,7 @@
"slab_carpet_fraction": 0,
"slab_carpet_r": 0,
"ceiling_assembly_r": 39.3,
- "roof_material_type": "asphalt or fiberglass shingles",
- "roof_color": "medium",
+ "enclosure_roof_material": "Asphalt/Fiberglass Shingles, Medium",
"roof_assembly_r": 2.3,
"radiant_barrier_grade": 2,
"radiant_barrier_attic_location": "none",
@@ -694,9 +687,8 @@
"air_leakage_units": "ACH",
"air_leakage_house_pressure": 50,
"air_leakage_value": 3,
- "heating_system_type": "Furnace",
"heating_system_fuel": "natural gas",
- "heating_system_heating_efficiency": 0.92,
+ "heating_system": "Fuel Furnace, 92% AFUE",
"heating_system_heating_capacity": 36000,
"heating_system_fraction_heat_load_served": 1,
"cooling_system_type": "central air conditioner",
@@ -1154,7 +1146,7 @@
},
"sample_files/base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-adjacent-to-multiple.xml",
- "heating_system_type": "none",
+ "heating_system": "None",
"cooling_system_type": "none"
},
"sample_files/base-bldgtype-mf-unit-adjacent-to-other-housing-unit.xml": {
@@ -1191,14 +1183,14 @@
},
"sample_files/base-bldgtype-mf-unit-shared-boiler-chiller-baseboard.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit.xml",
- "heating_system_type": "Shared Boiler w/ Baseboard",
+ "heating_system": "Fuel Boiler w/ Baseboard, 92% AFUE",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
},
"sample_files/base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-chiller-baseboard.xml",
- "heating_system_type": "Shared Boiler w/ Ductless Fan Coil"
+ "heating_system": "Fuel Fan Coil Heating, 92% AFUE"
},
"sample_files/base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil-ducted.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil.xml"
@@ -1211,14 +1203,14 @@
},
"sample_files/base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit.xml",
- "heating_system_type": "Shared Boiler w/ Baseboard",
+ "heating_system": "Fuel Boiler w/ Baseboard, 92% AFUE",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
},
"sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml",
- "heating_system_type": "Shared Boiler w/ Ductless Fan Coil"
+ "heating_system": "Fuel Fan Coil Heating, 92% AFUE"
},
"sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-fireplace-elec.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml",
@@ -1238,8 +1230,7 @@
},
"sample_files/base-bldgtype-mf-unit-shared-chiller-only-baseboard.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
@@ -1262,8 +1253,7 @@
},
"sample_files/base-bldgtype-mf-unit-shared-ground-loop-ground-to-air-heat-pump.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
@@ -2060,8 +2050,7 @@
},
"sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
@@ -2281,27 +2270,26 @@
},
"sample_files/base-hvac-boiler-elec-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "Boiler",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 0.98,
+ "heating_system": "Electric Boiler, 98% AFUE",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
},
"sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "Boiler"
+ "heating_system": "Fuel Boiler, 92% AFUE"
},
"sample_files/base-hvac-boiler-gas-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "Boiler",
+ "heating_system":"Fuel Boiler, 92% AFUE",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
},
"sample_files/base-hvac-boiler-gas-only-pilot.xml": {
"parent_hpxml": "sample_files/base-hvac-boiler-gas-only.xml",
- "heating_system_pilot_light": 600
+ "heating_system": "Fuel Boiler, 92% AFUE, 600 BTUh Pilot Light"
},
"sample_files/base-hvac-boiler-oil-only.xml": {
"parent_hpxml": "sample_files/base-hvac-boiler-gas-only.xml",
@@ -2317,8 +2305,7 @@
},
"sample_files/base-hvac-central-ac-only-1-speed.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0
},
"sample_files/base-hvac-central-ac-only-1-speed-autosize-factor.xml": {
@@ -2482,9 +2469,8 @@
},
"sample_files/base-hvac-elec-resistance-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "ElectricResistance",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 1,
+ "heating_system": "Electric Baseboard, 100% Efficiency",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
@@ -2496,8 +2482,7 @@
},
"sample_files/base-hvac-evap-cooler-only.xml": {
"parent_hpxml": "sample_files/base-hvac-evap-cooler-furnace-gas.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0
},
"sample_files/base-hvac-evap-cooler-only-ducted.xml": {
@@ -2507,14 +2492,13 @@
},
"sample_files/base-hvac-fireplace-wood-only.xml": {
"parent_hpxml": "sample_files/base-hvac-stove-oil-only.xml",
- "heating_system_type": "Fireplace",
+ "heating_system": "Fireplace, 80% Efficiency",
"heating_system_fuel": "wood"
},
"sample_files/base-hvac-floor-furnace-propane-only.xml": {
"parent_hpxml": "sample_files/base-hvac-stove-oil-only.xml",
- "heating_system_type": "FloorFurnace",
"heating_system_fuel": "propane",
- "heating_system_pilot_light": 600
+ "heating_system": "Fuel Floor Furnace, 80% AFUE, 600 BTUh Pilot Light"
},
"sample_files/base-hvac-furnace-coal-only.xml": {
"parent_hpxml": "sample_files/base-hvac-furnace-gas-only.xml",
@@ -2523,12 +2507,12 @@
"sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml": {
"parent_hpxml": "sample_files/base.xml",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 1
+ "heating_system": "Electric Furnace, 100% AFUE"
},
"sample_files/base-hvac-furnace-elec-only.xml": {
"parent_hpxml": "sample_files/base.xml",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 0.98,
+ "heating_system": "Electric Furnace, 98% AFUE",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
@@ -2562,7 +2546,7 @@
},
"sample_files/base-hvac-furnace-gas-only-pilot.xml": {
"parent_hpxml": "sample_files/base-hvac-furnace-gas-only.xml",
- "heating_system_pilot_light": 600
+ "heating_system": "Fuel Furnace, 92% AFUE, 600 BTUh Pilot Light"
},
"sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml": {
"parent_hpxml": "sample_files/base-hvac-furnace-gas-only.xml",
@@ -2607,8 +2591,7 @@
},
"sample_files/base-hvac-ground-to-air-heat-pump.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
@@ -2692,28 +2675,28 @@
},
"sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_airflow_defect_ratio": -0.25,
+ "heating_system": "Fuel Furnace, 92% AFUE, Airflow Defect Ratio",
"cooling_system_airflow_defect_ratio": -0.25,
"cooling_system_charge_defect_ratio": -0.25,
"hvac_blower_fan_watts_per_cfm": 0.365
},
"sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml": {
"parent_hpxml": "sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml",
- "heating_system_airflow_defect_ratio": -0.25,
+ "heating_system": "Fuel Furnace, 92% AFUE, Airflow Defect Ratio",
"cooling_system_airflow_defect_ratio": -0.25,
"cooling_system_charge_defect_ratio": -0.25,
"hvac_blower_fan_watts_per_cfm": 0.365
},
"sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml": {
"parent_hpxml": "sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml",
- "heating_system_airflow_defect_ratio": -0.25,
+ "heating_system": "Fuel Furnace, 92% AFUE, Airflow Defect Ratio",
"cooling_system_airflow_defect_ratio": -0.25,
"cooling_system_charge_defect_ratio": -0.25,
"hvac_blower_fan_watts_per_cfm": 0.365
},
"sample_files/base-hvac-install-quality-furnace-gas-only.xml": {
"parent_hpxml": "sample_files/base-hvac-furnace-gas-only.xml",
- "heating_system_airflow_defect_ratio": -0.25,
+ "heating_system": "Fuel Furnace, 92% AFUE, Airflow Defect Ratio",
"hvac_blower_fan_watts_per_cfm": 0.365
},
"sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml": {
@@ -2736,8 +2719,7 @@
},
"sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "mini-split",
"cooling_system_cooling_compressor_type": null,
@@ -2775,8 +2757,7 @@
},
"sample_files/base-hvac-mini-split-heat-pump-ducted.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
@@ -2945,8 +2926,7 @@
},
"sample_files/base-hvac-none.xml": {
"parent_hpxml": "sample_files/base-location-honolulu-hi.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
@@ -2954,8 +2934,7 @@
},
"sample_files/base-hvac-ptac.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "packaged terminal air conditioner",
"cooling_system_cooling_efficiency_type": "EER",
@@ -3012,8 +2991,7 @@
},
"sample_files/base-hvac-room-ac-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "none",
- "heating_system_heating_efficiency": 0,
+ "heating_system": "None",
"heating_system_fraction_heat_load_served": 0,
"cooling_system_type": "room air conditioner",
"cooling_system_cooling_efficiency_type": "EER",
@@ -3078,17 +3056,15 @@
},
"sample_files/base-hvac-space-heater-gas-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "SpaceHeater",
- "heating_system_heating_efficiency": 1,
+ "heating_system": "Space Heater, 100% Efficiency",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
},
"sample_files/base-hvac-stove-oil-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "Stove",
"heating_system_fuel": "fuel oil",
- "heating_system_heating_efficiency": 0.8,
+ "heating_system": "Stove, 80% Efficiency",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
@@ -3106,9 +3082,8 @@
},
"sample_files/base-hvac-wall-furnace-elec-only.xml": {
"parent_hpxml": "sample_files/base.xml",
- "heating_system_type": "WallFurnace",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 0.98,
+ "heating_system": "Electric Wall Furnace, 98% AFUE",
"cooling_system_type": "none",
"cooling_system_cooling_efficiency": 0,
"cooling_system_fraction_cool_load_served": 0
@@ -3428,8 +3403,7 @@
"foundation_wall_insulation_distance_to_bottom": null,
"slab_thickness": null,
"slab_carpet_fraction": null,
- "roof_material_type": null,
- "roof_color": "light",
+ "enclosure_roof_material": null,
"wall_siding_type": null,
"window_fraction_operable": null,
"window_interior_shading_winter": null,
@@ -3659,9 +3633,8 @@
"cooling_system_cooling_efficiency_type": "EER",
"cooling_system_cooling_efficiency": 8.5,
"cooling_system_cooling_capacity": 12000,
- "heating_system_type": "ElectricResistance",
"heating_system_fuel": "electricity",
- "heating_system_heating_efficiency": 1,
+ "heating_system": "Electric Baseboard, 100% Efficiency",
"heating_system_heating_capacity": 12000,
"clothes_dryer_present": false
},
diff --git a/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw b/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw
index ef48e709fb..06430d5b90 100644
--- a/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw
+++ b/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw
@@ -50,8 +50,7 @@
"geometry_unit_back_wall_is_adiabatic": false,
"heating_system_fuel": "natural gas",
"heating_system_heating_capacity": 36000.0,
- "heating_system_heating_efficiency": 0.92,
- "heating_system_type": "Furnace",
+ "heating_system": "Fuel Furnace, 92% AFUE",
"hpxml_path": "../built.xml",
"hvac_control_cooling_weekday_setpoint": "78",
"hvac_control_cooling_weekend_setpoint": "78",