Skip to content

Commit

Permalink
Merge pull request #1124 from NREL/latest-os-hpxml
Browse files Browse the repository at this point in the history
Latest OS-HPXML
  • Loading branch information
joseph-robertson committed Aug 23, 2023
2 parents e346c36 + d794fcb commit cc0133b
Show file tree
Hide file tree
Showing 12 changed files with 102 additions and 56 deletions.
39 changes: 19 additions & 20 deletions measures/ApplyUpgrade/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,9 @@ def run(model, runner, user_arguments)
return false
end

# Initialize measure keys with hpxml_path arguments
# Set BuildResidentialHPXML arguments
hpxml_path = File.expand_path('../upgraded.xml')
measures['BuildResidentialHPXML'] = [{ 'hpxml_path' => hpxml_path }]
measures['BuildResidentialScheduleFile'] = [{ 'hpxml_path' => hpxml_path, 'hpxml_output_path' => hpxml_path }]

new_runner.result.stepValues.each do |step_value|
value = get_value_from_workflow_step_value(step_value)
Expand All @@ -331,14 +330,29 @@ def run(model, runner, user_arguments)
measures['BuildResidentialHPXML'][0][step_value.name] = value
end

# Set additional properties
additional_properties = []
['ceiling_insulation_r'].each do |arg_name|
arg_value = measures['ResStockArguments'][0][arg_name]
additional_properties << "#{arg_name}=#{arg_value}"
end
measures['BuildResidentialHPXML'][0]['additional_properties'] = additional_properties.join('|') unless additional_properties.empty?

measures['BuildResidentialHPXML'][0]['software_info_program_used'] = 'ResStock'
measures['BuildResidentialHPXML'][0]['software_info_program_version'] = Version::ResStock_Version

measures['BuildResidentialHPXML'][0]['simulation_control_timestep'] = values['simulation_control_timestep']
if !values['simulation_control_run_period_begin_month'].nil? && !values['simulation_control_run_period_begin_day_of_month'].nil? && !values['simulation_control_run_period_end_month'].nil? && !values['simulation_control_run_period_end_day_of_month'].nil?
begin_month = "#{Date::ABBR_MONTHNAMES[values['simulation_control_run_period_begin_month']]}"
begin_day = values['simulation_control_run_period_begin_day_of_month']
end_month = "#{Date::ABBR_MONTHNAMES[values['simulation_control_run_period_end_month']]}"
end_day = values['simulation_control_run_period_end_day_of_month']
measures['BuildResidentialHPXML'][0]['simulation_control_run_period'] = "#{begin_month} #{begin_day} - #{end_month} #{end_day}"
end
measures['BuildResidentialHPXML'][0]['simulation_control_run_period_calendar_year'] = values['simulation_control_run_period_calendar_year']

measures['BuildResidentialHPXML'][0]['apply_defaults'] = true # we don't need this, but otherwise upgraded home.xml doesn't look like baseline home.xml
measures['BuildResidentialHPXML'][0]['apply_validation'] = true

# Retain HVAC capacities
capacities = get_system_capacities(hpxml, system_upgrades)
measures['BuildResidentialHPXML'][0]['heating_system_heating_capacity'] = capacities['heating_system_heating_capacity']
Expand Down Expand Up @@ -402,21 +416,6 @@ def run(model, runner, user_arguments)
end
end

# Get software program used and version
measures['BuildResidentialHPXML'][0]['software_info_program_used'] = 'ResStock'
measures['BuildResidentialHPXML'][0]['software_info_program_version'] = Version::ResStock_Version

# Get registered values and pass them to BuildResidentialHPXML
measures['BuildResidentialHPXML'][0]['simulation_control_timestep'] = values['simulation_control_timestep']
if !values['simulation_control_run_period_begin_month'].nil? && !values['simulation_control_run_period_begin_day_of_month'].nil? && !values['simulation_control_run_period_end_month'].nil? && !values['simulation_control_run_period_end_day_of_month'].nil?
begin_month = "#{Date::ABBR_MONTHNAMES[values['simulation_control_run_period_begin_month']]}"
begin_day = values['simulation_control_run_period_begin_day_of_month']
end_month = "#{Date::ABBR_MONTHNAMES[values['simulation_control_run_period_end_month']]}"
end_day = values['simulation_control_run_period_end_day_of_month']
measures['BuildResidentialHPXML'][0]['simulation_control_run_period'] = "#{begin_month} #{begin_day} - #{end_month} #{end_day}"
end
measures['BuildResidentialHPXML'][0]['simulation_control_run_period_calendar_year'] = values['simulation_control_run_period_calendar_year']

# Emissions
if values.keys.include?('emissions_electricity_values_or_filepaths')
measures['BuildResidentialHPXML'][0]['emissions_scenario_names'] = values['emissions_scenario_names']
Expand Down Expand Up @@ -449,12 +448,12 @@ def run(model, runner, user_arguments)
measures['BuildResidentialHPXML'][0]['utility_bill_pv_monthly_grid_connection_fee_units'] = values['utility_bill_pv_monthly_grid_connection_fee_units']
measures['BuildResidentialHPXML'][0]['utility_bill_pv_monthly_grid_connection_fees'] = values['utility_bill_pv_monthly_grid_connection_fees']

# Get registered values and pass them to BuildResidentialScheduleFile
# Set BuildResidentialScheduleFile arguments
measures['BuildResidentialScheduleFile'] = [{ 'hpxml_path' => hpxml_path, 'hpxml_output_path' => hpxml_path }]
measures['BuildResidentialScheduleFile'][0]['schedules_random_seed'] = values['building_id']
measures['BuildResidentialScheduleFile'][0]['output_csv_path'] = File.expand_path('../schedules.csv')

# Specify measures to run
measures['BuildResidentialHPXML'][0]['apply_defaults'] = true
measures_to_apply_hash = { hpxml_measures_dir => { 'BuildResidentialHPXML' => measures['BuildResidentialHPXML'], 'BuildResidentialScheduleFile' => measures['BuildResidentialScheduleFile'] },
measures_dir => {} }

Expand Down
6 changes: 3 additions & 3 deletions measures/ApplyUpgrade/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>apply_upgrade</name>
<uid>33f1654c-f734-43d1-b35d-9d2856e41b5a</uid>
<version_id>e4c3bd24-2fb7-4810-8416-8df29a622c4a</version_id>
<version_modified>2023-07-26T22:17:02Z</version_modified>
<version_id>4ecb5790-01ae-4240-a5b8-21fb64c40dcf</version_id>
<version_modified>2023-08-21T22:19:47Z</version_modified>
<xml_checksum>9339BE01</xml_checksum>
<class_name>ApplyUpgrade</class_name>
<display_name>Apply Upgrade</display_name>
Expand Down Expand Up @@ -6330,7 +6330,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>4AA761B5</checksum>
<checksum>FD9488A5</checksum>
</file>
<file>
<filename>constants.rb</filename>
Expand Down
13 changes: 6 additions & 7 deletions measures/BuildExistingModel/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -324,10 +324,9 @@ def run(model, runner, user_arguments)
return false
end

# Initialize measure keys with hpxml_path arguments
# Set BuildResidentialHPXML arguments
hpxml_path = File.expand_path('../existing.xml')
measures['BuildResidentialHPXML'] = [{ 'hpxml_path' => hpxml_path }]
measures['BuildResidentialScheduleFile'] = [{ 'hpxml_path' => hpxml_path, 'hpxml_output_path' => hpxml_path }]

new_runner.result.stepValues.each do |step_value|
value = get_value_from_workflow_step_value(step_value)
Expand All @@ -336,19 +335,16 @@ def run(model, runner, user_arguments)
measures['BuildResidentialHPXML'][0][step_value.name] = value
end

# Set additional properties
additional_properties = []
['ceiling_insulation_r'].each do |arg_name|
arg_value = measures['ResStockArguments'][0][arg_name]
additional_properties << "#{arg_name}=#{arg_value}"
end
measures['BuildResidentialHPXML'][0]['additional_properties'] = additional_properties.join('|') unless additional_properties.empty?

# Get software program used and version
measures['BuildResidentialHPXML'][0]['software_info_program_used'] = 'ResStock'
measures['BuildResidentialHPXML'][0]['software_info_program_version'] = Version::ResStock_Version

# Get registered values and pass them to BuildResidentialHPXML
measures['BuildResidentialHPXML'][0]['simulation_control_timestep'] = args[:simulation_control_timestep].get if args[:simulation_control_timestep].is_initialized
if args[:simulation_control_run_period_begin_month].is_initialized && args[:simulation_control_run_period_begin_day_of_month].is_initialized && args[:simulation_control_run_period_end_month].is_initialized && args[:simulation_control_run_period_end_day_of_month].is_initialized
begin_month = "#{Date::ABBR_MONTHNAMES[args[:simulation_control_run_period_begin_month].get]}"
Expand All @@ -359,6 +355,9 @@ def run(model, runner, user_arguments)
end
measures['BuildResidentialHPXML'][0]['simulation_control_run_period_calendar_year'] = args[:simulation_control_run_period_calendar_year].get if args[:simulation_control_run_period_calendar_year].is_initialized

measures['BuildResidentialHPXML'][0]['apply_defaults'] = true # for apply_hvac_sizing since ApplyUpgrade sets HVAC capacities
measures['BuildResidentialHPXML'][0]['apply_validation'] = true

# Emissions
if args[:emissions_scenario_names].is_initialized
if !bldg_data.keys.include?('Generation And Emissions Assessment Region')
Expand Down Expand Up @@ -611,12 +610,12 @@ def run(model, runner, user_arguments)
measures['BuildResidentialHPXML'][0]['utility_bill_pv_monthly_grid_connection_fees'] = utility_bill_pv_monthly_grid_connection_fees
end

# Get registered values and pass them to BuildResidentialScheduleFile
# Set BuildResidentialScheduleFile arguments
measures['BuildResidentialScheduleFile'] = [{ 'hpxml_path' => hpxml_path, 'hpxml_output_path' => hpxml_path }]
measures['BuildResidentialScheduleFile'][0]['schedules_random_seed'] = args[:building_id]
measures['BuildResidentialScheduleFile'][0]['output_csv_path'] = File.expand_path('../schedules.csv')

# Specify measures to run
measures['BuildResidentialHPXML'][0]['apply_defaults'] = true # for apply_hvac_sizing
if run_hescore_workflow
measures_hash = { 'BuildResidentialHPXML' => measures['BuildResidentialHPXML'] }
else
Expand Down
6 changes: 3 additions & 3 deletions measures/BuildExistingModel/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>build_existing_model</name>
<uid>dedf59bb-3b88-4f16-8755-2c1ff5519cbf</uid>
<version_id>11f19e97-df3d-4923-b8ab-5517e0bdda15</version_id>
<version_modified>2023-06-16T15:53:01Z</version_modified>
<version_id>19530200-5208-43e5-8657-f0f1df6ea696</version_id>
<version_modified>2023-08-21T22:09:39Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildExistingModel</class_name>
<display_name>Build Existing Model</display_name>
Expand Down Expand Up @@ -320,7 +320,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>8AA0977A</checksum>
<checksum>BDE2501B</checksum>
</file>
</files>
</measure>
46 changes: 44 additions & 2 deletions measures/UpgradeCosts/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>upgrade_costs</name>
<uid>ef51212c-acc4-48d7-9b29-cf2a5c6c4449</uid>
<version_id>510b2ab3-8f45-4f46-a902-9d36ad003999</version_id>
<version_modified>2023-08-01T18:01:52Z</version_modified>
<version_id>c1701f5c-37ad-4148-aff8-70f5e42e8a60</version_id>
<version_modified>2023-08-21T22:09:39Z</version_modified>
<xml_checksum>9BF1E6AC</xml_checksum>
<class_name>UpgradeCosts</class_name>
<display_name>Upgrade Costs</display_name>
Expand Down Expand Up @@ -119,6 +119,12 @@
<usage_type>test</usage_type>
<checksum>B9183037</checksum>
</file>
<file>
<filename>SFD_1story_FB_UA_GRG_MSHP_FuelTanklessWH.xml</filename>
<filetype>xml</filetype>
<usage_type>test</usage_type>
<checksum>65449877</checksum>
</file>
<file>
<filename>SFD_1story_FB_UA_GRG_RoomAC_ElecBoiler_FuelTanklessWH.osw</filename>
<filetype>osw</filetype>
Expand All @@ -143,12 +149,24 @@
<usage_type>test</usage_type>
<checksum>ABFCA3DB</checksum>
</file>
<file>
<filename>SFD_1story_UB_UA_GRG_ACV_FuelFurnace_PortableHeater_HPWH.xml</filename>
<filetype>xml</filetype>
<usage_type>test</usage_type>
<checksum>076668CA</checksum>
</file>
<file>
<filename>SFD_2story_CS_UA_AC2_FuelBoiler_FuelTankWH.osw</filename>
<filetype>osw</filetype>
<usage_type>test</usage_type>
<checksum>B57303D3</checksum>
</file>
<file>
<filename>SFD_2story_CS_UA_AC2_FuelBoiler_FuelTankWH.xml</filename>
<filetype>xml</filetype>
<usage_type>test</usage_type>
<checksum>451F9215</checksum>
</file>
<file>
<filename>SFD_2story_CS_UA_GRG_ASHPV_FuelTanklessWH.osw</filename>
<filetype>osw</filetype>
Expand All @@ -161,6 +179,12 @@
<usage_type>test</usage_type>
<checksum>986E1AAD</checksum>
</file>
<file>
<filename>SFD_2story_FB_UA_GRG_AC1_ElecBaseboard_FuelTankWH.xml</filename>
<filetype>xml</filetype>
<usage_type>test</usage_type>
<checksum>DDDC28CD</checksum>
</file>
<file>
<filename>SFD_2story_FB_UA_GRG_AC1_UnitHeater_FuelTankWH.osw</filename>
<filetype>osw</filetype>
Expand Down Expand Up @@ -197,6 +221,24 @@
<usage_type>test</usage_type>
<checksum>B165DD4B</checksum>
</file>
<file>
<filename>in.epw</filename>
<filetype>epw</filetype>
<usage_type>test</usage_type>
<checksum>E23378AA</checksum>
</file>
<file>
<filename>in.osm</filename>
<filetype>osm</filetype>
<usage_type>test</usage_type>
<checksum>06875597</checksum>
</file>
<file>
<filename>in.xml</filename>
<filetype>xml</filetype>
<usage_type>test</usage_type>
<checksum>BD7C5A72</checksum>
</file>
<file>
<filename>upgrade_costs_test.rb</filename>
<filetype>rb</filetype>
Expand Down
19 changes: 10 additions & 9 deletions resources/hpxml-measures/BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3131,7 +3131,6 @@ def run(model, runner, user_arguments)

args[:apply_validation] = args[:apply_validation].is_initialized ? args[:apply_validation].get : false
args[:apply_defaults] = args[:apply_defaults].is_initialized ? args[:apply_defaults].get : false
args[:apply_validation] = true if args[:apply_defaults]
args[:geometry_unit_left_wall_is_adiabatic] = (args[:geometry_unit_left_wall_is_adiabatic].is_initialized && args[:geometry_unit_left_wall_is_adiabatic].get)
args[:geometry_unit_right_wall_is_adiabatic] = (args[:geometry_unit_right_wall_is_adiabatic].is_initialized && args[:geometry_unit_right_wall_is_adiabatic].get)
args[:geometry_unit_front_wall_is_adiabatic] = (args[:geometry_unit_front_wall_is_adiabatic].is_initialized && args[:geometry_unit_front_wall_is_adiabatic].get)
Expand Down Expand Up @@ -3175,10 +3174,6 @@ def run(model, runner, user_arguments)
return false
end

# Write HPXML file again if defaults applied
if args[:apply_defaults]
XMLHelper.write_file(hpxml_doc, hpxml_path)
end
runner.registerInfo("Wrote file: #{hpxml_path}")

# Uncomment for debugging purposes
Expand Down Expand Up @@ -3443,17 +3438,23 @@ def self.create(runner, model, args, epw_path, hpxml_path)
hpxml_doc = hpxml.to_oga()
XMLHelper.write_file(hpxml_doc, hpxml_path)

if args[:apply_validation]
# Check for invalid HPXML file
if args[:apply_defaults]
# Always check for invalid HPXML file before applying defaults
if not validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
return false
end
end

if args[:apply_defaults]
eri_version = Constants.ERIVersions[-1]
HPXMLDefaults.apply(runner, hpxml, eri_version, weather, epw_file: epw_file)
hpxml_doc = hpxml.to_oga()
XMLHelper.write_file(hpxml_doc, hpxml_path)
end

if args[:apply_validation]
# Optionally check for invalid HPXML file (with or without defaults applied)
if not validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
return false
end
end

return hpxml_doc
Expand Down
8 changes: 4 additions & 4 deletions resources/hpxml-measures/BuildResidentialHPXML/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>build_residential_hpxml</name>
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
<version_id>093be6a0-b0ee-4df4-aa77-2a9827f24028</version_id>
<version_modified>2023-08-15T14:05:14Z</version_modified>
<version_id>454be750-6a0b-4acf-9ab5-53b386e8d9f1</version_id>
<version_modified>2023-08-18T19:24:49Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -6741,7 +6741,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>41B0EEFA</checksum>
<checksum>EB330C72</checksum>
</file>
<file>
<filename>geometry.rb</filename>
Expand All @@ -6753,7 +6753,7 @@
<filename>build_residential_hpxml_test.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>4D646B5D</checksum>
<checksum>9CC9525F</checksum>
</file>
</files>
</measure>
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ def test_workflows
def _set_measure_argument_values(hpxml_file, args)
args['hpxml_path'] = File.join(File.dirname(__FILE__), "extra_files/#{hpxml_file}")
args['apply_defaults'] = true
args['apply_validation'] = true

# Base
if ['base-sfd.xml'].include? hpxml_file
Expand Down
1 change: 1 addition & 0 deletions resources/hpxml-measures/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ __New Features__
- Allow duct area fractions (as an alternative to duct areas in ft^2).
- Allow duct locations to be provided while defaulting duct areas (i.e., without providing duct area/fraction inputs).
- Add generic "attic" and "crawlspace" location choices for supply/return ducts, water heater, and battery.
- Always validate the HPXML file before applying defaults and only optionally validate the final HPXML file.

__Bugfixes__
- Fixes lighting multipliers not being applied when kWh/yr inputs are used.
Expand Down
10 changes: 5 additions & 5 deletions resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>hpxm_lto_openstudio</name>
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
<version_id>2a50aafc-36c4-4030-831e-1423f8406746</version_id>
<version_modified>2023-08-14T17:53:43Z</version_modified>
<version_id>5ff9587f-553e-4a7d-9c53-0b4524a0b615</version_id>
<version_modified>2023-08-16T14:45:08Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -130,7 +130,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>9F4FD400</checksum>
<checksum>E8D802F6</checksum>
</file>
<file>
<filename>airflow.rb</filename>
Expand All @@ -142,7 +142,7 @@
<filename>battery.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>14852A93</checksum>
<checksum>25CBA96D</checksum>
</file>
<file>
<filename>constants.rb</filename>
Expand Down Expand Up @@ -274,7 +274,7 @@
<filename>hvac.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>344197E3</checksum>
<checksum>4B2BF987</checksum>
</file>
<file>
<filename>hvac_sizing.rb</filename>
Expand Down

0 comments on commit cc0133b

Please sign in to comment.