Skip to content

Commit

Permalink
Merge pull request #1007 from NREL/os-hpxml-v150
Browse files Browse the repository at this point in the history
OS-HPXML v1.5.0
  • Loading branch information
joseph-robertson committed Nov 28, 2022
2 parents 770eb46 + 1850ac5 commit 02e0813
Show file tree
Hide file tree
Showing 53 changed files with 16,024 additions and 3,215 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Features
- Modeled floor area based on AHS 2021 and AHS 2019 ([#978](https://github.com/NREL/resstock/pull/978))
- Add area median income ([#1004](https://github.com/NREL/resstock/pull/1004))
- Update to OpenStudio v3.5.0 ([#1006](https://github.com/NREL/resstock/pull/1006))
- Update to OpenStudio-HPXML v1.5.0 ([#1007](https://github.com/NREL/resstock/pull/1007))

Fixes
- Clean up option names for natural ventilation and hot water distribution ([#828](https://github.com/NREL/resstock/pull/828))
Expand Down
13 changes: 12 additions & 1 deletion resources/hpxml-measures/BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2185,6 +2185,12 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setUnits('kWh')
args << arg

arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_round_trip_efficiency', false)
arg.setDisplayName('Battery: Round Trip Efficiency')
arg.setDescription('The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default is used.')
arg.setUnits('Frac')
args << arg

arg = OpenStudio::Measure::OSArgument::makeBoolArgument('lighting_present', true)
arg.setDisplayName('Lighting: Present')
arg.setDescription('Whether there is lighting energy use.')
Expand Down Expand Up @@ -5551,12 +5557,17 @@ def self.set_battery(hpxml, args)
usable_capacity_kwh = args[:battery_usable_capacity].get
end

if args[:battery_round_trip_efficiency].is_initialized
round_trip_efficiency = args[:battery_round_trip_efficiency].get
end

hpxml.batteries.add(id: "Battery#{hpxml.batteries.size + 1}",
type: HPXML::BatteryTypeLithiumIon,
location: location,
rated_power_output: rated_power_output,
nominal_capacity_kwh: nominal_capacity_kwh,
usable_capacity_kwh: usable_capacity_kwh)
usable_capacity_kwh: usable_capacity_kwh,
round_trip_efficiency: round_trip_efficiency)
end

def self.set_lighting(hpxml, args)
Expand Down
15 changes: 12 additions & 3 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>38ad8438-274c-47d0-aab3-0bbcb5a15754</version_id>
<version_modified>20221111T164102Z</version_modified>
<version_id>fbb5e3c4-cf56-4831-8a0e-72df11c94c02</version_id>
<version_modified>20221117T175832Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -4516,6 +4516,15 @@
<required>false</required>
<model_dependent>false</model_dependent>
</argument>
<argument>
<name>battery_round_trip_efficiency</name>
<display_name>Battery: Round Trip Efficiency</display_name>
<description>The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default is used.</description>
<type>Double</type>
<units>Frac</units>
<required>false</required>
<model_dependent>false</model_dependent>
</argument>
<argument>
<name>lighting_present</name>
<display_name>Lighting: Present</display_name>
Expand Down Expand Up @@ -6513,7 +6522,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>6C8A5852</checksum>
<checksum>9D41E280</checksum>
</file>
</files>
</measure>
51 changes: 28 additions & 23 deletions resources/hpxml-measures/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,48 @@

__New Features__
- Updates to OpenStudio 3.5.0/EnergyPlus 22.2.
- Updates to newer proposed HPXML v4.0:
- **Breaking Change**: Replaces `FrameFloors/FrameFloor` with `Floors/Floor`.
- **Breaking change**: `Floor/FloorType` (WoodFrame, StructuralInsulatedPanel, SteelFrame, or SolidConcrete) is a required input.
- **Breaking Change**: All `Ducts` must now have a `SystemIdentifier`.
- **Breaking Change**: Replaces `WallType/StructurallyInsulatedPanel` with `WallType/StructuralInsulatedPanel`.
- **Breaking change**: Replaces `SoftwareInfo/extension/SimulationControl/DaylightSaving/Enabled` with `Building/Site/TimeZone/DSTObserved`.
- **Breaking Change**: Replaces `StandbyLoss` with `StandbyLoss[Units="F/hr"]/Value` for an indirect water heater.
- **Breaking Change**: Replaces `BranchPipingLoopLength` with `BranchPipingLength` for a hot water recirculation system.
- **Breaking Change**: Replaces `Floor/extension/OtherSpaceAboveOrBelow` with `Floor/FloorOrCeiling`.
- **Breaking change**: For PTAC with heating, replaces `HeatingSystem` of type PackagedTerminalAirConditionerHeating with `CoolingSystem/IntegratedHeating*` elements.
- **Breaking Change**: Now performs full HPXML XSD schema validation (previously just limited checks); yields runtime speed improvements.
- **Breaking Change**: Replaces `FrameFloors/FrameFloor` with `Floors/Floor`.
- **Breaking change**: `Floor/FloorType` (WoodFrame, StructuralInsulatedPanel, SteelFrame, or SolidConcrete) is a required input.
- **Breaking Change**: All `Ducts` must now have a `SystemIdentifier`.
- **Breaking Change**: Replaces `WallType/StructurallyInsulatedPanel` with `WallType/StructuralInsulatedPanel`.
- **Breaking change**: Replaces `SoftwareInfo/extension/SimulationControl/DaylightSaving/Enabled` with `Building/Site/TimeZone/DSTObserved`.
- **Breaking Change**: Replaces `StandbyLoss` with `StandbyLoss[Units="F/hr"]/Value` for an indirect water heater.
- **Breaking Change**: Replaces `BranchPipingLoopLength` with `BranchPipingLength` for a hot water recirculation system.
- **Breaking Change**: Replaces `Floor/extension/OtherSpaceAboveOrBelow` with `Floor/FloorOrCeiling`.
- **Breaking Change**: HVAC/DHW equipment efficiencies can no longer be defaulted (e.g., based on age of equipment); they are now required.
- **Breaking Change**: Deprecates ReportHPXMLOutput measure; HVAC autosized capacities & design loads moved to `results_annual.csv`.
- **Breaking change**: BuildResidentialHPXML measure: Replaces arguments using 'auto' for defaults with optional arguments of the appropriate data type.
- Utility bill calculations:
- **Breaking change**: Removes utility rate and PV related arguments from the ReportUtilityBills measure in lieu of HPXML file inputs.
- Allows calculating one or more utility bill scenarios (e.g., net metering vs feed-in tariff compensation types for a simulation with PV).
- Adds detailed calculations for tiered, time-of-use, or real-time pricing electric rates using OpenEI tariff files.
- Lithium ion battery:
- Allows detailed charging/discharging schedules via CSV files.
- Allows setting round trip efficiency.
- **Breaking change**: Lifetime model is temporarily disabled; `Battery/extension/LifetimeModel` is not allowed.
- Allows SEER2/HSPF2 efficiency types for central air conditioners and heat pumps.
- Allows heating/cooling seasons that don't span the entire year.
- Allows calculating one or more utility bill scenarios (e.g., net metering vs feed-in tariff compensation types for a simulation with PV).
- Allows setting the EnergyPlus temperature capacitance multiplier.
- Allows setting the ground soil conductivity used for foundation heat transfer and ground source heat pumps.
- Allows setting the natural ventilation availability (days/week that operable windows can be opened); default changed from 7 to 3 (M/W/F).
- Allows specifying duct surface area multipliers.
- Allows modeling CFIS ventilation systems with supplemental fans.
- Allows shared dishwasher/clothes washer to be attached to a hot water distribution system instead of a single water heater.
- Design temperatures, used to calculate design loads for HVAC equipment autosizing, are now output in `in.xml` and `results_annual.csv`.
- Allows heating/cooling seasons that don't span the entire year.
- Allows modeling room air conditioners with heating or reverse cycle.
- Allows setting the ground soil conductivity used for foundation heat transfer and ground source heat pumps.
- Allows setting the EnergyPlus temperature capacitance multiplier.
- EnergyPlus modeling changes:
- Switches Kiva foundation model timestep from 'Hourly' to 'Timestep'; small increase in runtime for sub-hourly simulations.
- Improves Kiva foundation model heat transfer by providing better initial temperature assumptions based on foundation type and insulation levels.
- Annual/timeseries outputs:
- Allows timeseries timestamps to be start or end of timestep convention; **Breaking change**: now defaults to start of timestep.
- Adds annual emission outputs disaggregated by end use; timeseries emission outputs disaggregated by end use can be requested.
- Allows generating timeseries unmet hours for heating and cooling.
- Allows CSV timeseries output to be formatted for use with the DView application.
- Adds heating/cooling setpoints to timeseries outputs when requesting zone temperatures.
- Allows modeling room air conditioners with heating or reverse cycle.
- **Breaking change**: For PTAC with heating, replaces `HeatingSystem` of type PackagedTerminalAirConditionerHeating with `CoolingSystem/IntegratedHeating*` elements.
- BuildResidentialHPXML measure:
- **Breaking change**: Replaces arguments using 'auto' for defaults with optional arguments of the appropriate data type. New `heat_pump_sizing_methodology` argument and new boolean `foo_present` arguments for lighting, appliances, etc.
- Adds optional arguments for utility bill scenarios.
- ReportUtilityBills measure:
- Removes utility rate and PV related arguments in lieu of new utility bill scenarios described inside the HPXML file.
- Adds detailed calculations for tiered, time-of-use, or real-time pricing electric rates using OpenEI tariff files.
- Improves Kiva foundation model heat transfer by providing better initial temperature assumptions based on foundation type and insulation levels.
- Disaggregates Battery outputs from PV outputs.
- Design temperatures, used to calculate design loads for HVAC equipment autosizing, are now output in `in.xml` and `results_annual.csv`.

__Bugfixes__
- Fixes possible incorrect autosizing of heat pump *separate* backup systems with respect to duct loads.
Expand All @@ -55,7 +59,8 @@ __Bugfixes__
- Fixes possible simulation error if a slab has an ExposedPerimeter near zero.
- Fixes possible "Could not identify surface type for surface" error.
- Fixes possible ruby error when defaulting water heater location.
- BuildResidentialHPXML measure:
- Battery round trip efficiency now correctly affects results.
- BuildResidentialHPXML measure:
- Fixes aspect ratio convention for single-family attached and multifamily dwelling units.

## OpenStudio-HPXML v1.4.0
Expand Down
10 changes: 4 additions & 6 deletions resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ def self.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_d
add_airflow(runner, model, weather, spaces, airloop_map)
add_photovoltaics(model)
add_generators(model)
add_batteries(model, spaces)
add_batteries(runner, model, spaces)
add_additional_properties(model, hpxml_path, building_id)

# Output
Expand Down Expand Up @@ -995,7 +995,7 @@ def self.add_foundation_slab(model, weather, spaces, slab, slab_exp_perim,
Constructions.apply_kiva_initial_temp(kiva_foundation, slab, weather,
spaces[HPXML::LocationLivingSpace].thermalZone.get,
@hpxml.header.sim_begin_month, @hpxml.header.sim_begin_day,
@hpxml.header.sim_calendar_year,
@hpxml.header.sim_calendar_year, @schedules_file,
foundation_walls_insulated, foundation_ceiling_insulated)

return kiva_foundation
Expand Down Expand Up @@ -1811,13 +1811,11 @@ def self.add_generators(model)
end
end

def self.add_batteries(model, spaces)
return if @hpxml.pv_systems.empty?

def self.add_batteries(runner, model, spaces)
@hpxml.batteries.each do |battery|
# Assign space
battery.additional_properties.space = get_space_from_location(battery.location, spaces)
Battery.apply(model, battery)
Battery.apply(runner, model, @hpxml.pv_systems, battery, @schedules_file)
end
end

Expand Down

0 comments on commit 02e0813

Please sign in to comment.