Skip to content

Commit baaa57c

Browse files
committed
MINHERS -> HERS
1 parent d15c98c commit baaa57c

6 files changed

Lines changed: 42 additions & 42 deletions

File tree

Changelog.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
__New Features__
44
- Updates to OpenStudio 3.10/EnergyPlus 25.1/HPXML v4.2-rc2.
5-
- HVAC modeling updates per RESNET MINHERS Addendum 82:
5+
- HVAC modeling updates per RESNET HERS Addendum 82:
66
- **Breaking change**: `CompressorType` required for central and mini-split air conditioners and heat pumps as well as ground-to-air heat pumps.
77
- **Breaking change**: Replaces `HeatingCapacityRetention[Fraction | Temperature]` with `HeatingCapacityFraction17F`.
88
- Optional input `SimulationControl/AdvancedResearchFeatures/GroundToAirHeatPumpModelType` to choose "standard" (default) or "experimental"; "experimental" ground-to-air heat pump model better accounts for coil staging.
@@ -21,7 +21,7 @@ __New Features__
2121
- **Breaking change**: Updated requirements for allowed combinations of `CapacityDescription` and `OutdoorTemperature`; see the [documentation](https://openstudio-hpxml.readthedocs.io/en/latest/workflow_inputs.html#hpxml-hvac-detailed-perf-data) for more details.
2222
- Detailed performance datapoints can now be specified for single stage and two stage equipment too.
2323
- Adds more error-checking to ensure appropriate data inputs.
24-
- Updates asset calculations for dishwashers, clothes washers, fixtures, and hot water waste per RESNET MINHERS Addenda 81 and 90f.
24+
- Updates asset calculations for dishwashers, clothes washers, fixtures, and hot water waste per RESNET HERS Addenda 81 and 90f.
2525
- Allows optional `ClothesDryer/DryingMethod` input to inform whether the appliance is vented or ventless.
2626
- Infiltration improvements:
2727
- Improves defaults for `InfiltrationVolume`, `InfiltrationHeight`, and `AverageCeilingHeight`.

HPXMLtoOpenStudio/measure.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.1</schema_version>
44
<name>hpxm_lto_openstudio</name>
55
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
6-
<version_id>6bd91023-9aea-4434-9777-4ae48e3b8a3b</version_id>
7-
<version_modified>2025-06-27T21:07:47Z</version_modified>
6+
<version_id>669d3120-0a96-475d-ae87-ffc2346c8ea8</version_id>
7+
<version_modified>2025-06-27T21:11:41Z</version_modified>
88
<xml_checksum>D8922A73</xml_checksum>
99
<class_name>HPXMLtoOpenStudio</class_name>
1010
<display_name>HPXML to OpenStudio Translator</display_name>
@@ -348,7 +348,7 @@
348348
<filename>defaults.rb</filename>
349349
<filetype>rb</filetype>
350350
<usage_type>resource</usage_type>
351-
<checksum>A7E3E8D2</checksum>
351+
<checksum>45421D2F</checksum>
352352
</file>
353353
<file>
354354
<filename>electric_panel.rb</filename>
@@ -378,7 +378,7 @@
378378
<filename>hotwater_appliances.rb</filename>
379379
<filetype>rb</filetype>
380380
<usage_type>resource</usage_type>
381-
<checksum>CCAAE4CD</checksum>
381+
<checksum>0808DD47</checksum>
382382
</file>
383383
<file>
384384
<filename>hpxml.rb</filename>
@@ -414,7 +414,7 @@
414414
<filename>hvac.rb</filename>
415415
<filetype>rb</filetype>
416416
<usage_type>resource</usage_type>
417-
<checksum>04E08240</checksum>
417+
<checksum>7475293B</checksum>
418418
</file>
419419
<file>
420420
<filename>hvac_sizing.rb</filename>

HPXMLtoOpenStudio/resources/defaults.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2268,14 +2268,14 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
22682268
when HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit
22692269
if heat_pump.pan_heater_watts.nil?
22702270
if heat_pump.fraction_heat_load_served > 0
2271-
heat_pump.pan_heater_watts = 150.0 # W, per RESNET MINHERS Addendum 82
2271+
heat_pump.pan_heater_watts = 150.0 # W, per RESNET HERS Addendum 82
22722272
else
22732273
heat_pump.pan_heater_watts = 0.0
22742274
end
22752275
heat_pump.pan_heater_watts_isdefaulted = true
22762276
end
22772277
if heat_pump.pan_heater_control_type.nil? && heat_pump.pan_heater_watts > 0
2278-
heat_pump.pan_heater_control_type = HPXML::HVACPanHeaterControlTypeContinuous # Per RESNET MINHERS Addendum 82
2278+
heat_pump.pan_heater_control_type = HPXML::HVACPanHeaterControlTypeContinuous # Per RESNET HERS Addendum 82
22792279
heat_pump.pan_heater_control_type_isdefaulted = true
22802280
end
22812281
end
@@ -3238,7 +3238,7 @@ def self.apply_crankcase_heating(hpxml_bldg)
32383238
if HVAC.is_room_dx_hvac_system(hvac_system)
32393239
hvac_system.crankcase_heater_watts = 0.0
32403240
else
3241-
# 10 W/ton of cooling capacity per RESNET MINHERS Addendum 82
3241+
# 10 W/ton of cooling capacity per RESNET HERS Addendum 82
32423242
if hvac_system.is_a?(HPXML::HeatPump) && (hvac_system.fraction_cool_load_served == 0)
32433243
# Heat pump only provides heating, use heating capacity instead
32443244
hvac_system.crankcase_heater_watts = 10.0 * UnitConversions.convert(hvac_system.heating_capacity, 'Btu/hr', 'ton')
@@ -7592,7 +7592,7 @@ def self.set_hvac_fan_power_rated(hvac_system)
75927592
# Fan not separately modeled
75937593
hvac_ap.fan_power_rated = 0.0
75947594
else
7595-
# Based on RESNET MINHERS Addendum 82
7595+
# Based on RESNET HERS Addendum 82
75967596
psc_ducted_watts_per_cfm = 0.414 # W/cfm, PSC fan
75977597
psc_ductless_watts_per_cfm = 0.414 # W/cfm, PSC fan
75987598
bpm_ducted_watts_per_cfm = 0.281 # W/cfm, BPM fan
@@ -7654,7 +7654,7 @@ def self.set_hvac_degradation_coefficient(hvac_system)
76547654
if HVAC.is_room_dx_hvac_system(hvac_system)
76557655
hvac_ap.c_d = 0.22
76567656
else
7657-
# Per RESNET MINHERS Addendum 82
7657+
# Per RESNET HERS Addendum 82
76587658
case hvac_system.compressor_type
76597659
when HPXML::HVACCompressorTypeSingleStage, HPXML::HVACCompressorTypeTwoStage
76607660
hvac_ap.c_d = 0.08
@@ -7728,12 +7728,12 @@ def self.interpolate_seer2(seer2, eer2, seer2_array, seer2_eer2_ratio_array, cop
77287728
end
77297729
clg_ap.cool_ff_chg_values = [26.67, 35.0]
77307730

7731-
# Coefficients for HVAC installation quality per RESNET MINHERS Addendum 82
7731+
# Coefficients for HVAC installation quality per RESNET HERS Addendum 82
77327732
clg_ap.cool_cap_fflow_spec_iq = [0.718664047, 0.41797409, -0.136638137]
77337733
clg_ap.cool_eir_fflow_spec_iq = [1.143487507, -0.13943972, -0.004047787]
77347734

77357735
if cooling_system.is_a?(HPXML::HeatPump) && cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
7736-
# Based on RESNET MINHERS Addendum 82
7736+
# Based on RESNET HERS Addendum 82
77377737
clg_ap.cool_rated_shr_gross = 0.708
77387738
clg_ap.cool_rated_cfm_per_ton = HVAC::RatedCFMPerTon
77397739

@@ -7824,7 +7824,7 @@ def self.interpolate_seer2(seer2, eer2, seer2_array, seer2_eer2_ratio_array, cop
78247824
return
78257825
end
78267826

7827-
# Based on RESNET MINHERS Addendum 82
7827+
# Based on RESNET HERS Addendum 82
78287828
clg_ap.cool_cap_fflow_spec = clg_ap.cool_cap_fflow_spec_iq
78297829
clg_ap.cool_eir_fflow_spec = clg_ap.cool_eir_fflow_spec_iq
78307830
set_hvac_degradation_coefficient(cooling_system)
@@ -7847,7 +7847,7 @@ def self.interpolate_seer2(seer2, eer2, seer2_array, seer2_eer2_ratio_array, cop
78477847

78487848
clg_ap.cop95full = UnitConversions.convert(cooling_system.cooling_efficiency_eer2, 'Btu/hr', 'W')
78497849

7850-
# Based on RESNET MINHERS Addendum 82
7850+
# Based on RESNET HERS Addendum 82
78517851
case compressor_type
78527852
when HPXML::HVACCompressorTypeSingleStage
78537853
clg_ap.qm95full = 0.936 # Q95full/Q82full
@@ -7902,7 +7902,7 @@ def self.interpolate_seer2(seer2, eer2, seer2_array, seer2_eer2_ratio_array, cop
79027902
clg_ap.cool_rated_shr_gross = 0.708
79037903
end
79047904

7905-
# Sets heating performance factors based on RESNET MINHERS Addendum 82.
7905+
# Sets heating performance factors based on RESNET HERS Addendum 82.
79067906
#
79077907
#
79087908
# @param heating_system [HPXML::HeatingSystem or HPXML::HeatPump] The HPXML heating system or heat pump of interest
@@ -7935,12 +7935,12 @@ def self.interpolate_hspf2(hspf2, qm17full, hspf2_array, qm17full_array, cop47fu
79357935
end
79367936
htg_ap.heat_ff_chg_values = [0.0, 8.33] # Add a zero term to combine cooling and heating calculation
79377937

7938-
# Coefficients for HVAC installation quality per RESNET MINHERS Addendum 82
7938+
# Coefficients for HVAC installation quality per RESNET HERS Addendum 82
79397939
htg_ap.heat_cap_fflow_spec_iq = [0.694045465, 0.474207981, -0.168253446]
79407940
htg_ap.heat_eir_fflow_spec_iq = [2.185418751, -1.942827919, 0.757409168]
79417941

79427942
if heating_system.is_a?(HPXML::HeatPump) && heating_system.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
7943-
# Based on RESNET MINHERS Addendum 82
7943+
# Based on RESNET HERS Addendum 82
79447944
htg_ap.heat_rated_cfm_per_ton = HVAC::RatedCFMPerTon
79457945

79467946
case hpxml_header.ground_to_air_heat_pump_model_type
@@ -8080,7 +8080,7 @@ def self.interpolate_hspf2(hspf2, qm17full, hspf2_array, qm17full_array, cop47fu
80808080
hspf2 = heating_system.heating_efficiency_hspf2
80818081
compressor_type = heating_system.compressor_type
80828082

8083-
# Based on RESNET MINHERS Addendum 82
8083+
# Based on RESNET HERS Addendum 82
80848084
case compressor_type
80858085
when HPXML::HVACCompressorTypeSingleStage
80868086
htg_ap.eirm17full = 1.356 # (P17full/Q17full)/(P47full/Q47full)
@@ -8150,7 +8150,7 @@ def self.interpolate_hspf2(hspf2, qm17full, hspf2_array, qm17full_array, cop47fu
81508150
htg_ap.heat_eir_ft_spec = [0.722917608, 0.003520184, 0.000143097, -0.005760341, 0.000141736, -0.000216676]
81518151
end
81528152

8153-
# Adds default heat pump detailed performance datapoints based on RESNET MINHERS Addendum 82.
8153+
# Adds default heat pump detailed performance datapoints based on RESNET HERS Addendum 82.
81548154
#
81558155
# @param heat_pump [HPXML::HeatPump] The HPXML heat pump of interest
81568156
# @return [nil]
@@ -8341,7 +8341,7 @@ def self.set_detailed_performance_data_heating(heat_pump)
83418341
isdefaulted: true) unless capacityLCTmin.nil?
83428342
end
83438343

8344-
# Adds default heat pump or air conditioner detailed performance datapoints based on RESNET MINHERS Addendum 82.
8344+
# Adds default heat pump or air conditioner detailed performance datapoints based on RESNET HERS Addendum 82.
83458345
#
83468346
# @param cooling_system [HPXML::CoolingSystem or HPXML::HeatPump] The HPXML cooling system or heat pump of interest
83478347
# @return [nil]

HPXMLtoOpenStudio/resources/hotwater_appliances.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ def self.calc_dishwasher_energy_gpd(runner, eri_version, hpxml_bldg, dishwasher,
618618
kwh_per_cyc = ((dishwasher.label_annual_gas_cost * 0.5497 / dishwasher.label_gas_rate - dishwasher.rated_annual_kwh * dishwasher.label_electric_rate * 0.02504 / dishwasher.label_electric_rate) / (dishwasher.label_electric_rate * 0.5497 / dishwasher.label_gas_rate - 0.02504)) / lcy
619619
if n_occ.nil? # Asset calculation
620620
if Constants::ERIVersions.index(eri_version) >= Constants::ERIVersions.index('latest') # FIXME: Change from 'latest' when incorporated in 301 standard
621-
# RESNET MINHERS Addendum 81 Eq. 4.2-36a
621+
# RESNET HERS Addendum 81 Eq. 4.2-36a
622622
if unit_type == HPXML::ResidentialTypeApartment
623623
scy = 135.7 + 13.5 * nbeds
624624
else
@@ -719,7 +719,7 @@ def self.calc_clothes_dryer_energy(runner, eri_version, hpxml_bldg, clothes_drye
719719
rmc = (0.97 * (clothes_washer.capacity / clothes_washer.integrated_modified_energy_factor) - clothes_washer.rated_annual_kwh / 312.0) / ((2.0104 * clothes_washer.capacity + 1.4242) * 0.455) + 0.04
720720
if n_occ.nil? # Asset calculation
721721
if Constants::ERIVersions.index(eri_version) >= Constants::ERIVersions.index('latest') # FIXME: Change from 'latest' when incorporated in 301 standard
722-
# RESNET MINHERS Addendum 81 Eq. 4.2-34
722+
# RESNET HERS Addendum 81 Eq. 4.2-34
723723
if unit_type == HPXML::ResidentialTypeApartment
724724
scy = 213.9 + 27.5 * nbeds
725725
else
@@ -833,7 +833,7 @@ def self.calc_clothes_washer_energy_gpd(runner, eri_version, hpxml_bldg, clothes
833833
lcy = clothes_washer.label_usage * 52.0 # label cycles per year
834834
if n_occ.nil? # Asset calculation
835835
if Constants::ERIVersions.index(eri_version) >= Constants::ERIVersions.index('latest') # FIXME: Change from 'latest' when incorporated in 301 standard
836-
# RESNET MINHERS Addendum 81 Eq. 4.2-34
836+
# RESNET HERS Addendum 81 Eq. 4.2-34
837837
if unit_type == HPXML::ResidentialTypeApartment
838838
scy = 213.9 + 27.5 * nbeds
839839
else
@@ -1191,7 +1191,7 @@ def self.get_fixtures_gpd(eri_version, hpxml_bldg, daily_mw_fractions)
11911191
if Constants::ERIVersions.index(eri_version) >= Constants::ERIVersions.index('2014A')
11921192
if n_occ.nil? # Asset calculation
11931193
if Constants::ERIVersions.index(eri_version) >= Constants::ERIVersions.index('latest') # FIXME: Change from 'latest' when incorporated in 301 standard
1194-
# RESNET MINHERS Addendum 90f Eq. 4.2-29 (refFgpd)
1194+
# RESNET HERS Addendum 90f Eq. 4.2-29 (refFgpd)
11951195
if unit_type == HPXML::ResidentialTypeApartment
11961196
ref_f_gpd = 21.75 + 8.46 * nbeds
11971197
else
@@ -1256,7 +1256,7 @@ def self.get_dist_waste_gpd(eri_version, hpxml_bldg)
12561256

12571257
if n_occ.nil? # Asset calculation
12581258
if Constants::ERIVersions.index(eri_version) >= Constants::ERIVersions.index('latest') # FIXME: Change from 'latest' when incorporated in 301 standard
1259-
# RESNET MINHERS Addendum 81 Eq. 4.2-29 (refWgpd)
1259+
# RESNET HERS Addendum 81 Eq. 4.2-29 (refWgpd)
12601260
if unit_type == HPXML::ResidentialTypeApartment
12611261
ref_w_gpd = 11.27 * (nbeds**0.323)
12621262
else

HPXMLtoOpenStudio/resources/hvac.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ module HVAC
88
AirSourceCoolRatedOWB = 75.0 # degF, Rated outdoor wetbulb for air-source systems, cooling
99
AirSourceCoolRatedIDB = 80.0 # degF, Rated indoor drybulb for air-source systems, cooling
1010
AirSourceCoolRatedIWB = 67.0 # degF, Rated indoor wetbulb for air-source systems, cooling
11-
RatedCFMPerTon = 400.0 # cfm/ton of rated capacity, RESNET MINHERS Addendum 82
12-
CrankcaseHeaterTemp = 50.0 # degF, RESNET MINHERS Addendum 82
11+
RatedCFMPerTon = 400.0 # cfm/ton of rated capacity, RESNET HERS Addendum 82
12+
CrankcaseHeaterTemp = 50.0 # degF, RESNET HERS Addendum 82
1313
MinCapacity = 1.0 # Btuh
1414
MinAirflow = 3.0 # cfm; E+ min airflow is 0.001 m3/s
1515
GroundSourceHeatRatedWET = 70.0 # degF, Rated water entering temperature for ground-source systems, heating
@@ -2412,7 +2412,7 @@ def self.calculate_fan_power(max_fan_power, fan_ratio, hvac_system)
24122412

24132413
return max_fan_power
24142414
else
2415-
# Based on RESNET MINHERS Addendum 82
2415+
# Based on RESNET HERS Addendum 82
24162416
if hvac_system.fan_motor_type == HPXML::HVACFanMotorTypeBPM
24172417
pow = hvac_system.distribution_system_idref.nil? ? 3 : 2.75
24182418
return max_fan_power * (fan_ratio**pow)
@@ -2641,7 +2641,7 @@ def self.convert_datapoint_net_to_gross(dp, mode, speed_index, hvac_system)
26412641
end
26422642

26432643
# Extrapolate data points at the min/max outdoor drybulb temperatures to cover the full range of
2644-
# equipment operation. Extrapolates net capacity and input power per RESNET MINHERS Addendum 82:
2644+
# equipment operation. Extrapolates net capacity and input power per RESNET HERS Addendum 82:
26452645
# - Cooling, Min ODB: Linear from 82F and 95F, but no less than 50% power of the 82F value
26462646
# - Cooling, Max ODB: Linear from 82F and 95F
26472647
# - Heating, Min ODB: Linear from lowest two temperatures
@@ -2837,7 +2837,7 @@ def self.add_datapoint_adaptive_step_size(datapoints_by_speed, mode, hvac_system
28372837
else
28382838
new_dp = HPXML::HeatingPerformanceDataPoint.new(nil)
28392839
end
2840-
# Interpolate based on net power and capacity per RESNET MINHERS Addendum 82.
2840+
# Interpolate based on net power and capacity per RESNET HERS Addendum 82.
28412841
new_dp.input_power = dp.input_power + Float(j) / (n_pt + 1) * (dp2.input_power - dp.input_power)
28422842
new_dp.capacity = (dp.capacity + Float(j) / (n_pt + 1) * (dp2.capacity - dp.capacity)).round
28432843
new_dp.outdoor_temperature = dp.outdoor_temperature + Float(j) / (n_pt + 1) * (dp2.outdoor_temperature - dp.outdoor_temperature)
@@ -2851,7 +2851,7 @@ def self.add_datapoint_adaptive_step_size(datapoints_by_speed, mode, hvac_system
28512851
end
28522852

28532853
# Adds detailed performance datapoints to include sensitivity to indoor temperatures.
2854-
# Based on RESNET MINHERS Addendum 82.
2854+
# Based on RESNET HERS Addendum 82.
28552855
#
28562856
# @param hvac_system [HPXML::HeatingSystem or HPXML::CoolingSystem or HPXML::HeatPump] The HPXML HVAC system of interest
28572857
# @param datapoints_by_speed [Hash] Map of capacity description => array of detailed performance datapoints
@@ -4717,7 +4717,7 @@ def self.apply_pan_heater_ems_program(model, ems_program, htg_coil, conditioned_
47174717
end
47184718

47194719
# Create EMS program and Other equipment objects to account for delivered cooling load and supplemental heating energy during defrost.
4720-
# The defrost model is defined per RESNET MINHERS Addendum 82.
4720+
# The defrost model is defined per RESNET HERS Addendum 82.
47214721
#
47224722
# @param model [OpenStudio::Model::Model] OpenStudio Model object
47234723
# @param htg_coil [OpenStudio::Model::CoilHeatingDXSingleSpeed or OpenStudio::Model::CoilHeatingDXMultiSpeed] OpenStudio Heating Coil object

0 commit comments

Comments
 (0)