Skip to content

Commit

Permalink
Merge pull request #1028 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 Feb 9, 2023
2 parents 5b03beb + 7d7a66c commit 3cf5003
Show file tree
Hide file tree
Showing 37 changed files with 16,635 additions and 20,190 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## ResStock v3.1.0 (pending)

Features
-

Fixes
-

## ResStock v3.0.0
###### February 3, 2023 - [Diff](https://github.com/NREL/resstock/compare/v2.5.0...v3.0.0)

Expand Down
4 changes: 2 additions & 2 deletions measures/ServerDirectoryCleanup/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.0</schema_version>
<name>server_directory_cleanup</name>
<uid>ec7d04ad-0b7b-495b-825a-e1b6d28d1d3f</uid>
<version_id>6fb5a110-81aa-473c-b742-9ae23cd54d16</version_id>
<version_modified>20230201T201058Z</version_modified>
<version_id>c158e249-51d2-4197-8dec-9f2ea57222f3</version_id>
<version_modified>20230207T212145Z</version_modified>
<xml_checksum>5F1EDF75</xml_checksum>
<class_name>ServerDirectoryCleanup</class_name>
<display_name>Server Directory Cleanup</display_name>
Expand Down
60 changes: 32 additions & 28 deletions resources/hpxml-measures/BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,8 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
air_leakage_units_choices << HPXML::UnitsACH
air_leakage_units_choices << HPXML::UnitsCFM
air_leakage_units_choices << HPXML::UnitsACHNatural
air_leakage_units_choices << HPXML::UnitsCFMNatural
air_leakage_units_choices << HPXML::UnitsELA

arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('air_leakage_units', air_leakage_units_choices, true)
arg.setDisplayName('Air Leakage: Units')
Expand All @@ -973,7 +975,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('air_leakage_value', true)
arg.setDisplayName('Air Leakage: Value')
arg.setDescription('Air exchange rate value.')
arg.setDescription("Air exchange rate value. For '#{HPXML::UnitsELA}', provide value in sq. in.")
arg.setDefaultValue(3)
args << arg

Expand Down Expand Up @@ -1245,6 +1247,12 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(1)
args << arg

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_compressor_lockout_temp', false)
arg.setDisplayName('Heat Pump: Compressor Lockout Temperature')
arg.setDescription("The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than #{HPXML::HVACTypeHeatPumpGroundToAir}. If not provided, the OS-HPXML default is used.")
arg.setUnits('deg-F')
args << arg

arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_backup_type', heat_pump_backup_type_choices, true)
arg.setDisplayName('Heat Pump: Backup Type')
arg.setDescription("The backup type of the heat pump. If '#{HPXML::HeatPumpBackupTypeIntegrated}', represents e.g. built-in electric strip heat or dual-fuel integrated furnace. If '#{HPXML::HeatPumpBackupTypeSeparate}', represents e.g. electric baseboard or boiler based on the Heating System 2 specified below. Use 'none' if there is no backup heating.")
Expand All @@ -1269,15 +1277,9 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setUnits('Btu/hr')
args << arg

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_switchover_temp', false)
arg.setDisplayName('Heat Pump: Backup Heating Switchover Temperature')
arg.setDescription("The temperature at which the heat pump stops operating and the backup heating system starts running. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}. If not provided, backup heating will operate as needed when heat pump capacity is insufficient. Applies if Backup Type is either '#{HPXML::HeatPumpBackupTypeIntegrated}' or '#{HPXML::HeatPumpBackupTypeSeparate}'. Both Switchover Temperature and Lockout Temperature cannot be specified.")
arg.setUnits('deg-F')
args << arg

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_lockout_temp', false)
arg.setDisplayName('Heat Pump: Backup Heating Lockout Temperature')
arg.setDescription("The temperature above which the backup system is disabled in order to prevent backup heating operation during, e.g., a thermostat heating setback recovery event. If not provided, backup heating will operate as needed when heat pump capacity is insufficient. Only applies if Backup Type is '#{HPXML::HeatPumpBackupTypeIntegrated}'. Both Switchover Temperature and Lockout Temperature cannot be specified.")
arg.setDescription("The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of '#{HPXML::HeatPumpBackupTypeIntegrated}' and '#{HPXML::HeatPumpBackupTypeSeparate}'. If not provided, the OS-HPXML default is used.")
arg.setUnits('deg-F')
args << arg

Expand Down Expand Up @@ -3906,22 +3908,22 @@ def self.set_climate_and_risk_zones(hpxml, args)
end

def self.set_air_infiltration_measurements(hpxml, args)
if args[:air_leakage_units] == HPXML::UnitsACH
house_pressure = args[:air_leakage_house_pressure]
unit_of_measure = HPXML::UnitsACH
elsif args[:air_leakage_units] == HPXML::UnitsCFM
house_pressure = args[:air_leakage_house_pressure]
unit_of_measure = HPXML::UnitsCFM
elsif args[:air_leakage_units] == HPXML::UnitsACHNatural
house_pressure = nil
unit_of_measure = HPXML::UnitsACHNatural
if args[:air_leakage_units] == HPXML::UnitsELA
effective_leakage_area = args[:air_leakage_value]
else
unit_of_measure = args[:air_leakage_units]
air_leakage = args[:air_leakage_value]
if [HPXML::UnitsACH, HPXML::UnitsCFM].include? args[:air_leakage_units]
house_pressure = args[:air_leakage_house_pressure]
end
end
infiltration_volume = hpxml.building_construction.conditioned_building_volume

hpxml.air_infiltration_measurements.add(id: "AirInfiltrationMeasurement#{hpxml.air_infiltration_measurements.size + 1}",
house_pressure: house_pressure,
unit_of_measure: unit_of_measure,
air_leakage: args[:air_leakage_value],
air_leakage: air_leakage,
effective_leakage_area: effective_leakage_area,
infiltration_volume: infiltration_volume)
end

Expand Down Expand Up @@ -4717,18 +4719,19 @@ def self.set_heat_pumps(hpxml, args)
backup_system_idref = "HeatingSystem#{hpxml.heating_systems.size + 1}"
end

if args[:heat_pump_backup_type] != 'none'
if args[:heat_pump_backup_heating_switchover_temp].is_initialized
if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump_type
backup_heating_switchover_temp = args[:heat_pump_backup_heating_switchover_temp].get
end
end
if args[:heat_pump_compressor_lockout_temp].is_initialized
compressor_lockout_temp = args[:heat_pump_compressor_lockout_temp].get
end

if args[:heat_pump_backup_type] == HPXML::HeatPumpBackupTypeIntegrated
if args[:heat_pump_backup_heating_lockout_temp].is_initialized
backup_heating_lockout_temp = args[:heat_pump_backup_heating_lockout_temp].get
end
if args[:heat_pump_backup_heating_lockout_temp].is_initialized
backup_heating_lockout_temp = args[:heat_pump_backup_heating_lockout_temp].get
end

if compressor_lockout_temp == backup_heating_lockout_temp && backup_heating_fuel != HPXML::FuelTypeElectricity
# Translate to HPXML as switchover temperature instead
backup_heating_switchover_temp = compressor_lockout_temp
compressor_lockout_temp = nil
backup_heating_lockout_temp = nil
end

if args[:heat_pump_cooling_capacity].is_initialized
Expand Down Expand Up @@ -4800,6 +4803,7 @@ def self.set_heat_pumps(hpxml, args)
heating_capacity: heating_capacity,
heating_capacity_17F: heating_capacity_17F,
compressor_type: compressor_type,
compressor_lockout_temp: compressor_lockout_temp,
cooling_shr: cooling_shr,
cooling_capacity: cooling_capacity,
fraction_heat_load_served: fraction_heat_load_served,
Expand Down
36 changes: 22 additions & 14 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.0</schema_version>
<name>build_residential_hpxml</name>
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
<version_id>b0dca314-cc14-441d-aaa0-47518b1667bc</version_id>
<version_modified>20230120T202028Z</version_modified>
<version_id>69c5d704-9fef-4705-9338-a3ad8210af52</version_id>
<version_modified>20230207T013302Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -1977,6 +1977,14 @@
<value>ACHnatural</value>
<display_name>ACHnatural</display_name>
</choice>
<choice>
<value>CFMnatural</value>
<display_name>CFMnatural</display_name>
</choice>
<choice>
<value>EffectiveLeakageArea</value>
<display_name>EffectiveLeakageArea</display_name>
</choice>
</choices>
</argument>
<argument>
Expand All @@ -1992,7 +2000,7 @@
<argument>
<name>air_leakage_value</name>
<display_name>Air Leakage: Value</display_name>
<description>Air exchange rate value.</description>
<description>Air exchange rate value. For 'EffectiveLeakageArea', provide value in sq. in.</description>
<type>Double</type>
<required>true</required>
<model_dependent>false</model_dependent>
Expand Down Expand Up @@ -2538,6 +2546,15 @@
<model_dependent>false</model_dependent>
<default_value>1</default_value>
</argument>
<argument>
<name>heat_pump_compressor_lockout_temp</name>
<display_name>Heat Pump: Compressor Lockout Temperature</display_name>
<description>The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than ground-to-air. If not provided, the OS-HPXML default is used.</description>
<type>Double</type>
<units>deg-F</units>
<required>false</required>
<model_dependent>false</model_dependent>
</argument>
<argument>
<name>heat_pump_backup_type</name>
<display_name>Heat Pump: Backup Type</display_name>
Expand Down Expand Up @@ -2606,19 +2623,10 @@
<required>false</required>
<model_dependent>false</model_dependent>
</argument>
<argument>
<name>heat_pump_backup_heating_switchover_temp</name>
<display_name>Heat Pump: Backup Heating Switchover Temperature</display_name>
<description>The temperature at which the heat pump stops operating and the backup heating system starts running. Only applies to air-to-air and mini-split. If not provided, backup heating will operate as needed when heat pump capacity is insufficient. Applies if Backup Type is either 'integrated' or 'separate'. Both Switchover Temperature and Lockout Temperature cannot be specified.</description>
<type>Double</type>
<units>deg-F</units>
<required>false</required>
<model_dependent>false</model_dependent>
</argument>
<argument>
<name>heat_pump_backup_heating_lockout_temp</name>
<display_name>Heat Pump: Backup Heating Lockout Temperature</display_name>
<description>The temperature above which the backup system is disabled in order to prevent backup heating operation during, e.g., a thermostat heating setback recovery event. If not provided, backup heating will operate as needed when heat pump capacity is insufficient. Only applies if Backup Type is 'integrated'. Both Switchover Temperature and Lockout Temperature cannot be specified.</description>
<description>The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of 'integrated' and 'separate'. If not provided, the OS-HPXML default is used.</description>
<type>Double</type>
<units>deg-F</units>
<required>false</required>
Expand Down Expand Up @@ -6530,7 +6538,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>B18289BF</checksum>
<checksum>92F3436B</checksum>
</file>
</files>
</measure>
6 changes: 6 additions & 0 deletions resources/hpxml-measures/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ __New Features__
- Updates to newer proposed HPXML v4.0:
- **Breaking change**: Replaces `VentilationFan/Quantity` and `CeilingFan/Quantity` with `Count`.
- **Breaking change**: Replaces `PVSystem/InverterEfficiency` with `PVSystem/AttachedToInverter` and `Inverter/InverterEfficiency`.
- Heat pump enhancements:
- Allows `CompressorLockoutTemperature` as an optional input to control the minimum temperature the compressor can operate at.
- Updates defaults for `CompressorLockoutTemperature` and `BackupHeatingLockoutTemperature`.
- Provides a warning if `BackupHeatingSwitchoverTemperature` or `BackupHeatingLockoutTemperature` are low and may cause unmet hours.
- LightingGroups can now be specified using kWh/year annual consumption values as an alternative to fractions of different lighting types.
- Allows building air leakage to be specified using CFMnatural or EffectiveLeakageArea.
- Allows modeling one or more occupant vacancy periods (`VacancyPeriods` in the HPXML file).
- ReportSimulationOutput measure:
- Allows specifying the number of decimal places for timeseries output.
Expand All @@ -14,6 +19,7 @@ __New Features__
- Disaggregates `Lighting` from `Internal Gains`.

__Bugfixes__
- Fixes `BackupHeatingSwitchoverTemperature` for a heat pump w/ *separate* backup system; now correctly ceases backup operation above this temperature.
- Fixes error if calculating utility bills for an all-electric home with a detailed JSON utility rate.
- BuildResidentialScheduleFile measure now excludes columns for end uses that are not stochastically generated.
- Fixes operational calculation when the number of residents is set to zero.
Expand Down
1 change: 1 addition & 0 deletions resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2414,6 +2414,7 @@ def self.set_output_files(model)
ocf.setOutputMTR(@debug)
ocf.setOutputRDD(@debug)
ocf.setOutputSHD(@debug)
ocf.setOutputSQLite(@debug)
ocf.setOutputPerfLog(@debug)
end

Expand Down

0 comments on commit 3cf5003

Please sign in to comment.