Skip to content

Commit

Permalink
Merge pull request #1317 from NREL/heat_pump_detailed_performance
Browse files Browse the repository at this point in the history
Heat pump detailed performance inputs
  • Loading branch information
shorowit authored Nov 13, 2023
2 parents 87bfe1a + 10f4505 commit d741ae7
Show file tree
Hide file tree
Showing 33 changed files with 7,243 additions and 2,303 deletions.
4 changes: 2 additions & 2 deletions BuildResidentialHPXML/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1794,7 +1794,7 @@ The rated efficiency value of the cooling system. Ignored for evaporative cooler

**Cooling System: Cooling Compressor Type**

The compressor type of the cooling system. Only applies to central air conditioner. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>) is used.
The compressor type of the cooling system. Only applies to central air conditioner and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#central-air-conditioner'>Central Air Conditioner</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.

- **Name:** ``cooling_system_cooling_compressor_type``
- **Type:** ``Choice``
Expand Down Expand Up @@ -2009,7 +2009,7 @@ The rated cooling efficiency value of the heat pump.

**Heat Pump: Cooling Compressor Type**

The compressor type of the heat pump. Only applies to air-to-air. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>) is used.
The compressor type of the heat pump. Only applies to air-to-air and mini-split. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#mini-split-heat-pump'>Mini-Split Heat Pump</a>) is used.

- **Name:** ``heat_pump_cooling_compressor_type``
- **Type:** ``Choice``
Expand Down
8 changes: 4 additions & 4 deletions BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1118,7 +1118,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument

arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_compressor_type', compressor_type_choices, false)
arg.setDisplayName('Cooling System: Cooling Compressor Type')
arg.setDescription("The compressor type of the cooling system. Only applies to #{HPXML::HVACTypeCentralAirConditioner}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#central-air-conditioner'>Central Air Conditioner</a>) is used.")
arg.setDescription("The compressor type of the cooling system. Only applies to #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#central-air-conditioner'>Central Air Conditioner</a>, <a href='#{docs_base_url}#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.")
args << arg

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_sensible_heat_fraction', false)
Expand Down Expand Up @@ -1248,7 +1248,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument

arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_compressor_type', compressor_type_choices, false)
arg.setDisplayName('Heat Pump: Cooling Compressor Type')
arg.setDescription("The compressor type of the heat pump. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>) is used.")
arg.setDescription("The compressor type of the heat pump. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>) is used.")
args << arg

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_sensible_heat_fraction', false)
Expand Down Expand Up @@ -4893,7 +4893,7 @@ def self.set_cooling_systems(hpxml_bldg, args)
end

if args[:cooling_system_cooling_compressor_type].is_initialized
if cooling_system_type == HPXML::HVACTypeCentralAirConditioner
if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system_type
compressor_type = args[:cooling_system_cooling_compressor_type].get
end
end
Expand Down Expand Up @@ -5032,7 +5032,7 @@ def self.set_heat_pumps(hpxml_bldg, args)
end

if args[:heat_pump_cooling_compressor_type].is_initialized
if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump_type
if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump_type
compressor_type = args[:heat_pump_cooling_compressor_type].get
end
end
Expand Down
14 changes: 7 additions & 7 deletions 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>5ab26be1-2727-4c13-b94e-8d91fc337d0a</version_id>
<version_modified>2023-11-07T21:59:39Z</version_modified>
<version_id>73f05c97-2d2b-4e1e-8709-67b264ec605e</version_id>
<version_modified>2023-11-13T20:11:04Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -2286,7 +2286,7 @@
<argument>
<name>cooling_system_cooling_compressor_type</name>
<display_name>Cooling System: Cooling Compressor Type</display_name>
<description>The compressor type of the cooling system. Only applies to central air conditioner. If not provided, the OS-HPXML default (see &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#central-air-conditioner'&gt;Central Air Conditioner&lt;/a&gt;) is used.</description>
<description>The compressor type of the cooling system. Only applies to central air conditioner and mini-split. If not provided, the OS-HPXML default (see &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#central-air-conditioner'&gt;Central Air Conditioner&lt;/a&gt;, &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#mini-split-air-conditioner'&gt;Mini-Split Air Conditioner&lt;/a&gt;) is used.</description>
<type>Choice</type>
<required>false</required>
<model_dependent>false</model_dependent>
Expand Down Expand Up @@ -2550,7 +2550,7 @@
<argument>
<name>heat_pump_cooling_compressor_type</name>
<display_name>Heat Pump: Cooling Compressor Type</display_name>
<description>The compressor type of the heat pump. Only applies to air-to-air. If not provided, the OS-HPXML default (see &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#air-to-air-heat-pump'&gt;Air-to-Air Heat Pump&lt;/a&gt;) is used.</description>
<description>The compressor type of the heat pump. Only applies to air-to-air and mini-split. If not provided, the OS-HPXML default (see &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#air-to-air-heat-pump'&gt;Air-to-Air Heat Pump&lt;/a&gt;, &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#mini-split-heat-pump'&gt;Mini-Split Heat Pump&lt;/a&gt;) is used.</description>
<type>Choice</type>
<required>false</required>
<model_dependent>false</model_dependent>
Expand Down Expand Up @@ -6751,7 +6751,7 @@
<filename>README.md</filename>
<filetype>md</filetype>
<usage_type>readme</usage_type>
<checksum>70365868</checksum>
<checksum>92C872C5</checksum>
</file>
<file>
<filename>README.md.erb</filename>
Expand All @@ -6768,7 +6768,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>E883FD4E</checksum>
<checksum>DEA666BB</checksum>
</file>
<file>
<filename>geometry.rb</filename>
Expand All @@ -6780,7 +6780,7 @@
<filename>test_build_residential_hpxml.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>F24631AD</checksum>
<checksum>5018D51F</checksum>
</file>
</files>
</measure>
2 changes: 2 additions & 0 deletions BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['heating_system_type'] = 'none'
args['cooling_system_type'] = 'none'
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpMiniSplit
args.delete('heat_pump_cooling_compressor_type')
args['heat_pump_heating_efficiency'] = 10.0
args['heat_pump_cooling_efficiency'] = 19.0
args['heat_pump_heating_capacity'] = 48000.0
Expand Down Expand Up @@ -1111,6 +1112,7 @@ def _set_measure_argument_values(hpxml_file, args)
args['heating_system_type'] = 'none'
args['cooling_system_type'] = 'none'
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpMiniSplit
args.delete('heat_pump_cooling_compressor_type')
args['heat_pump_is_ducted'] = true
args['heat_pump_backup_type'] = HPXML::HeatPumpBackupTypeSeparate
args['heating_system_2_type'] = HPXML::HVACTypeFurnace
Expand Down
12 changes: 7 additions & 5 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,26 @@ __New Features__
- `NaturalVentilationAvailabilityDaysperWeek`
- Allows `NumberofUnits` to be used as a multiplier on dwelling unit simulation results to reduce simulation runtime.
- See the [OpenStudio-HPXML documentation](https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#whole-sfa-mf-buildings) for more detail.
- Adds manufactured home belly as a foundation type and allows modeling ducts in a manufactured home belly.
- HVAC modeling updates:
- Updated assumptions for variable-speed air conditioners, heat pumps, and mini-splits.
- Allows detailed heating and cooling performance data (min/max COPs and capacities at different outdoor temperatures) for variable-speed systems.
- Updates deep ground temperatures (used for modeling ground-source heat pumps) using L. Xing's simplified design model (2014).
- Output updates:
- **Breaking change**: "Hot Tub" outputs renamed to "Permanent Spa".
- Adds "Peak Electricity: Annual Total (W)" output.
- Adds battery resilience hours output; allows requesting timeseries output.
- ReportUtilityBills measure: Allows reporting monthly utility bills in addition to (or instead of) annual bills.
- Update to 2022 EIA energy costs.
- BuildResidentialHPXML measure:
- 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.
- Adds manufactured home belly as a foundation type and allows modeling ducts in a manufactured home belly.
- Battery losses now split between charging and discharging.
- Interior/exterior window shading multipliers are now modeled using the EnergyPlus incident solar multiplier.
- Updates deep ground temperatures (used for modeling ground-source heat pumps) using L. Xing's simplified design model (2014).
- Improvements to HERS & MaxLoad heat pump sizing methodologies.
- Allows `WaterFixture/FlowRate` as an alternative to `LowFlow`; hot water credit is now calculated based on fraction of low flow fixtures.
- Allows above-grade basements/crawlspaces defined solely with Wall (not FoundationWall) elements.
- Updates to 2022 EIA energy costs.
- Added README.md documentation for all OpenStudio measures.

__Bugfixes__
Expand All @@ -46,8 +48,8 @@ __Bugfixes__
- Fixes error if conditioned basement has `InsulationSpansEntireSlab=true`.
- Fixes ReportSimulationOutput outputs for the Parametric Analysis Tool (PAT).
- Fixes missing radiation exchange between window and sky when an interior/exterior window shading multiplier less than 1 exists.
- Fixes AC/HP cooling bug when applying cooling equipment adjustment.
- Fixes monthly shallow ground temperatures (used primarily in HVAC autosizing) for the southern hemisphere.
- Various HVAC sizing bugfixes and improvements.
- BuildResidentialHPXML measure: Fixes air distribution CFA served when there is not a central system that meets 100% of the load.

## OpenStudio-HPXML v1.6.0
Expand Down
21 changes: 11 additions & 10 deletions HPXMLtoOpenStudio/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -448,8 +448,8 @@ def create_unit_model(hpxml, hpxml_bldg, runner, model, epw_path, epw_file, weat
@hvac_unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::ColumnHVAC, @hpxml_header.unavailable_periods)
airloop_map = {} # Map of HPXML System ID -> AirLoopHVAC (or ZoneHVACFourPipeFanCoil)
add_ideal_system(model, spaces, epw_path)
add_cooling_system(model, spaces, airloop_map)
add_heating_system(runner, model, spaces, airloop_map)
add_cooling_system(model, weather, spaces, airloop_map)
add_heating_system(runner, model, weather, spaces, airloop_map)
add_heat_pump(runner, model, weather, spaces, airloop_map)
add_dehumidifiers(runner, model, spaces)
add_ceiling_fans(runner, model, weather, spaces)
Expand Down Expand Up @@ -1544,7 +1544,7 @@ def add_hot_water_and_appliances(runner, model, weather, spaces)
Waterheater.apply_combi_system_EMS(model, @hpxml_bldg.water_heating_systems, plantloop_map)
end

def add_cooling_system(model, spaces, airloop_map)
def add_cooling_system(model, weather, spaces, airloop_map)
conditioned_zone = spaces[HPXML::LocationConditionedSpace].thermalZone.get

HVAC.get_hpxml_hvac_systems(@hpxml_bldg).each do |hvac_system|
Expand Down Expand Up @@ -1577,8 +1577,8 @@ def add_cooling_system(model, spaces, airloop_map)
HPXML::HVACTypeMiniSplitAirConditioner,
HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type

airloop_map[sys_id] = HVAC.apply_air_source_hvac_systems(model, cooling_system, heating_system,
sequential_cool_load_fracs, sequential_heat_load_fracs,
airloop_map[sys_id] = HVAC.apply_air_source_hvac_systems(model, cooling_system, heating_system, sequential_cool_load_fracs, sequential_heat_load_fracs,
weather.data.AnnualMaxDrybulb, weather.data.AnnualMinDrybulb,
conditioned_zone, @hvac_unavailable_periods)

elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
Expand All @@ -1590,7 +1590,7 @@ def add_cooling_system(model, spaces, airloop_map)
end
end

def add_heating_system(runner, model, spaces, airloop_map)
def add_heating_system(runner, model, weather, spaces, airloop_map)
conditioned_zone = spaces[HPXML::LocationConditionedSpace].thermalZone.get

HVAC.get_hpxml_hvac_systems(@hpxml_bldg).each do |hvac_system|
Expand Down Expand Up @@ -1622,8 +1622,8 @@ def add_heating_system(runner, model, spaces, airloop_map)
sys_id = heating_system.id
if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type

airloop_map[sys_id] = HVAC.apply_air_source_hvac_systems(model, nil, heating_system,
[0], sequential_heat_load_fracs,
airloop_map[sys_id] = HVAC.apply_air_source_hvac_systems(model, nil, heating_system, [0], sequential_heat_load_fracs,
weather.data.AnnualMaxDrybulb, weather.data.AnnualMinDrybulb,
conditioned_zone, @hvac_unavailable_periods)

elsif [HPXML::HVACTypeBoiler].include? heating_system.heating_system_type
Expand Down Expand Up @@ -1684,8 +1684,8 @@ def add_heat_pump(runner, model, weather, spaces, airloop_map)
HPXML::HVACTypeHeatPumpMiniSplit,
HPXML::HVACTypeHeatPumpPTHP,
HPXML::HVACTypeHeatPumpRoom].include? heat_pump.heat_pump_type
airloop_map[sys_id] = HVAC.apply_air_source_hvac_systems(model, heat_pump, heat_pump,
sequential_cool_load_fracs, sequential_heat_load_fracs,
airloop_map[sys_id] = HVAC.apply_air_source_hvac_systems(model, heat_pump, heat_pump, sequential_cool_load_fracs, sequential_heat_load_fracs,
weather.data.AnnualMaxDrybulb, weather.data.AnnualMinDrybulb,
conditioned_zone, @hvac_unavailable_periods)
elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type

Expand Down Expand Up @@ -2638,6 +2638,7 @@ def set_output_files(model)
ocf.setOutputMTR(@debug)
ocf.setOutputRDD(@debug)
ocf.setOutputSHD(@debug)
ocf.setOutputCSV(@debug)
ocf.setOutputSQLite(@debug)
ocf.setOutputPerfLog(@debug)
end
Expand Down
Loading

0 comments on commit d741ae7

Please sign in to comment.