Skip to content

Commit

Permalink
Add/update tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
shorowit committed Feb 22, 2025
1 parent c596e2f commit 6b88c50
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 46 deletions.
8 changes: 4 additions & 4 deletions 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>75c1f91d-8a6f-4966-89c2-c325a24a1d08</version_id>
<version_modified>2025-02-22T03:35:49Z</version_modified>
<version_id>10eab0f1-5963-4212-98d9-53b8435f14ba</version_id>
<version_modified>2025-02-22T16:08:18Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -699,7 +699,7 @@
<filename>test_defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>F6DB48EE</checksum>
<checksum>B276F3F7</checksum>
</file>
<file>
<filename>test_enclosure.rb</filename>
Expand All @@ -723,7 +723,7 @@
<filename>test_hvac.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>B6D40D94</checksum>
<checksum>2B3DFCD2</checksum>
</file>
<file>
<filename>test_hvac_sizing.rb</filename>
Expand Down
42 changes: 12 additions & 30 deletions HPXMLtoOpenStudio/tests/test_defaults.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2194,10 +2194,11 @@ def test_air_source_heat_pumps
def test_default_detailed_performance_data
# Test to verify the default detailed performance data points are consistent with RESNET's NEEP-Statistical-Model.xlsm

# Variable Speed
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed.xml')
# ============== #
# Variable Speed #
# ============== #

# Configure the same capacities, efficiencies, etc.
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed.xml')
hpxml_bldg.heat_pumps[0].cooling_capacity = 6000.0
hpxml_bldg.heat_pumps[0].heating_capacity = 8700.0
hpxml_bldg.heat_pumps[0].heating_capacity_17F = 7500.0
Expand Down Expand Up @@ -2271,21 +2272,11 @@ def test_default_detailed_performance_data
assert_in_epsilon(3.11, nom_dp_82f.efficiency_cop, 0.01)
assert_in_epsilon(7.19, min_dp_82f.efficiency_cop, 0.01)

# Two Stage
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-2-speed.xml')
# ========= #
# Two Stage #
# ========= #

# Configure the same capacities, efficiencies, etc.
hpxml_bldg.heat_pumps[0].cooling_capacity = 6000.0
hpxml_bldg.heat_pumps[0].heating_capacity = 8700.0
hpxml_bldg.heat_pumps[0].heating_capacity_17F = 7500.0
hpxml_bldg.heat_pumps[0].cooling_efficiency_seer = nil
hpxml_bldg.heat_pumps[0].cooling_efficiency_seer2 = 14.3
hpxml_bldg.heat_pumps[0].cooling_efficiency_eer = nil
hpxml_bldg.heat_pumps[0].cooling_efficiency_eer2 = 8.0
hpxml_bldg.heat_pumps[0].heating_efficiency_hspf = nil
hpxml_bldg.heat_pumps[0].heating_efficiency_hspf2 = 7.5
hpxml_bldg.heat_pumps[0].heating_capacity_fraction_17F = nil
hpxml_bldg.heat_pumps[0].fan_motor_type = HPXML::HVACFanMotorTypeBPM
hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeTwoStage
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
_default_hpxml, default_hpxml_bldg = _test_measure()

Expand Down Expand Up @@ -2325,20 +2316,11 @@ def test_default_detailed_performance_data
assert_in_epsilon(2.92, nom_dp_82f.efficiency_cop, 0.01)
assert_in_epsilon(4.67, min_dp_82f.efficiency_cop, 0.01)

# Single Stage
hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-1-speed.xml')
# ============ #
# Single Stage #
# ============ #

# Configure the same capacities, efficiencies, etc.
hpxml_bldg.heat_pumps[0].cooling_capacity = 6000.0
hpxml_bldg.heat_pumps[0].heating_capacity = 8700.0
hpxml_bldg.heat_pumps[0].heating_capacity_17F = 7500.0
hpxml_bldg.heat_pumps[0].cooling_efficiency_seer = nil
hpxml_bldg.heat_pumps[0].cooling_efficiency_seer2 = 14.3
hpxml_bldg.heat_pumps[0].cooling_efficiency_eer = nil
hpxml_bldg.heat_pumps[0].cooling_efficiency_eer2 = 8.0
hpxml_bldg.heat_pumps[0].heating_efficiency_hspf = nil
hpxml_bldg.heat_pumps[0].heating_efficiency_hspf2 = 7.5
hpxml_bldg.heat_pumps[0].heating_capacity_fraction_17F = nil
hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeSingleStage
hpxml_bldg.heat_pumps[0].fan_motor_type = HPXML::HVACFanMotorTypePSC
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
_default_hpxml, default_hpxml_bldg = _test_measure()
Expand Down
137 changes: 125 additions & 12 deletions HPXMLtoOpenStudio/tests/test_hvac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,119 @@ def teardown
File.delete(File.join(File.dirname(__FILE__), 'results_design_load_details.csv')) if File.exist? File.join(File.dirname(__FILE__), 'results_design_load_details.csv')
end

def test_resnet_model
# Test to verify the model is consistent with RESNET's NEEP-Statistical-Model.xlsm

# ============== #
# Variable Speed #
# ============== #

hpxml, hpxml_bldg = _create_hpxml('base-hvac-air-to-air-heat-pump-var-speed.xml')
hpxml_bldg.heat_pumps[0].cooling_capacity = 6000.0
hpxml_bldg.heat_pumps[0].heating_capacity = 8700.0
hpxml_bldg.heat_pumps[0].heating_capacity_17F = 7500.0
hpxml_bldg.heat_pumps[0].cooling_efficiency_seer = nil
hpxml_bldg.heat_pumps[0].cooling_efficiency_seer2 = 14.3
hpxml_bldg.heat_pumps[0].cooling_efficiency_eer = nil
hpxml_bldg.heat_pumps[0].cooling_efficiency_eer2 = 8.0
hpxml_bldg.heat_pumps[0].heating_efficiency_hspf = nil
hpxml_bldg.heat_pumps[0].heating_efficiency_hspf2 = 7.5
hpxml_bldg.heat_pumps[0].heating_capacity_fraction_17F = nil
hpxml_bldg.heat_pumps[0].fan_motor_type = HPXML::HVACFanMotorTypeBPM
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)

args_hash = {}
args_hash['hpxml_path'] = @tmp_hpxml_path
model, _hpxml, _hpxml_bldg = _test_measure(args_hash)

# Check cooling coil
assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
assert_equal(3, clg_coil.stages.size)
[5.50, 2.48, 2.31].each_with_index do |cop, i|
assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
end
[1135.1, 6100.1, 6546.8].each_with_index do |capacity_btuh, i|
assert_in_epsilon(capacity_btuh, UnitConversions.convert(clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 'W', 'Btu/hr'), 0.01)
end
[37.8, 200.0, 214.2].each_with_index do |cfm, i|
assert_in_epsilon(cfm, UnitConversions.convert(clg_coil.stages[i].ratedAirFlowRate.get, 'm^3/s', 'cfm'), 0.01)
end

# Check heating coil
assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
assert_equal(3, htg_coil.stages.size)
[3.23, 2.62, 2.47].each_with_index do |cop, i|
assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
end
[2591.2, 8421.9, 9214.5].each_with_index do |capacity_btuh, i|
assert_in_epsilon(capacity_btuh, UnitConversions.convert(htg_coil.stages[i].grossRatedHeatingCapacity.get, 'W', 'Btu/hr'), 0.01)
end
[86.7, 290.0, 319.2].each_with_index do |cfm, i|
assert_in_epsilon(cfm, UnitConversions.convert(htg_coil.stages[i].ratedAirFlowRate.get, 'm^3/s', 'cfm'), 0.01)
end

# ========= #
# Two Stage #
# ========= #

hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeTwoStage
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
model, _hpxml, _hpxml_bldg = _test_measure(args_hash)

# Check cooling coil
assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
assert_equal(2, clg_coil.stages.size)
[3.94, 2.48].each_with_index do |cop, i|
assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
end
[4406.9, 6100.1].each_with_index do |capacity_btuh, i|
assert_in_epsilon(capacity_btuh, UnitConversions.convert(clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 'W', 'Btu/hr'), 0.01)
end
[145.5, 200.0].each_with_index do |cfm, i|
assert_in_epsilon(cfm, UnitConversions.convert(clg_coil.stages[i].ratedAirFlowRate.get, 'm^3/s', 'cfm'), 0.01)
end

# Check heating coil
assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
assert_equal(2, htg_coil.stages.size)
[3.23, 2.79].each_with_index do |cop, i|
assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
end
[6081.8, 8421.9].each_with_index do |capacity_btuh, i|
assert_in_epsilon(capacity_btuh, UnitConversions.convert(htg_coil.stages[i].grossRatedHeatingCapacity.get, 'W', 'Btu/hr'), 0.01)
end
[206.4, 290.0].each_with_index do |cfm, i|
assert_in_epsilon(cfm, UnitConversions.convert(htg_coil.stages[i].ratedAirFlowRate.get, 'm^3/s', 'cfm'), 0.01)
end

# ============ #
# Single Stage #
# ============ #

hpxml_bldg.heat_pumps[0].compressor_type = HPXML::HVACCompressorTypeSingleStage
hpxml_bldg.heat_pumps[0].fan_motor_type = HPXML::HVACFanMotorTypePSC
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
model, _hpxml, _hpxml_bldg = _test_measure(args_hash)

# Check cooling coil
assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
assert_in_epsilon(2.72, clg_coil.ratedCOP, 0.01)
assert_in_epsilon(6256.2, UnitConversions.convert(clg_coil.ratedTotalCoolingCapacity.get, 'W', 'Btu/hr'), 0.01)
assert_in_epsilon(200.0, UnitConversions.convert(clg_coil.ratedAirFlowRate.get, 'm^3/s', 'cfm'), 0.01)

# Check heating coil
assert_equal(1, model.getCoilHeatingDXSingleSpeeds.size)
htg_coil = model.getCoilHeatingDXSingleSpeeds[0]
assert_in_epsilon(3.32, htg_coil.ratedCOP, 0.01)
assert_in_epsilon(8290.3, UnitConversions.convert(htg_coil.ratedTotalHeatingCapacity.get, 'W', 'Btu/hr'), 0.01)
assert_in_epsilon(290.0, UnitConversions.convert(htg_coil.ratedAirFlowRate.get, 'm^3/s', 'cfm'), 0.01)
end

def test_central_air_conditioner_1_speed
['base-hvac-central-ac-only-1-speed.xml',
'base-hvac-central-ac-only-1-speed-seer2.xml'].each do |hpxml_path|
Expand Down Expand Up @@ -52,10 +165,10 @@ def test_central_air_conditioner_2_speed
assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
assert_equal(2, clg_coil.stages.size)
[4.95, 4.53].each_with_index do |cop, i|
[4.62, 4.44].each_with_index do |cop, i|
assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
end
[5252, 7259].each_with_index do |capacity, i|
[5204, 7234].each_with_index do |capacity, i|
assert_in_epsilon(capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
end

Expand Down Expand Up @@ -495,13 +608,13 @@ def test_air_to_air_heat_pump_1_speed
# Check cooling coil
assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
assert_in_epsilon(3.77, clg_coil.ratedCOP, 0.01)
assert_in_epsilon(4.51, clg_coil.ratedCOP, 0.01)
assert_in_epsilon(11040, clg_coil.ratedTotalCoolingCapacity.get, 0.01)

# Check heating coil
assert_equal(1, model.getCoilHeatingDXSingleSpeeds.size)
htg_coil = model.getCoilHeatingDXSingleSpeeds[0]
assert_in_epsilon(3.29, htg_coil.ratedCOP, 0.01)
assert_in_epsilon(2.99, htg_coil.ratedCOP, 0.01)
assert_in_epsilon(10077, htg_coil.ratedTotalHeatingCapacity.get, 0.01)

# Check supp heating coil
Expand Down Expand Up @@ -609,21 +722,21 @@ def test_air_to_air_heat_pump_2_speed
assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
assert_equal(2, clg_coil.stages.size)
[4.95, 4.53].each_with_index do |cop, i|
[4.62, 4.44].each_with_index do |cop, i|
assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
end
[7870, 10888].each_with_index do |clg_capacity, i|
[7806, 10851].each_with_index do |clg_capacity, i|
assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
end

# Check heating coil
assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
assert_equal(2, htg_coil.stages.size)
[4.52, 3.93].each_with_index do |cop, i|
[3.96, 3.44].each_with_index do |cop, i|
assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
end
[7356, 10254].each_with_index do |htg_capacity, i|
[7394, 10250].each_with_index do |htg_capacity, i|
assert_in_epsilon(htg_capacity, htg_coil.stages[i].grossRatedHeatingCapacity.get, 0.01)
end

Expand Down Expand Up @@ -882,7 +995,7 @@ def test_heat_pump_advanced_defrost
assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
# q_dot smaller than backup capacity
_check_advanced_defrost(model, htg_coil, supp_htg_power, 4747.75, backup_fuel, 0.06667, 1224)
_check_advanced_defrost(model, htg_coil, supp_htg_power, 4747.75, backup_fuel, 0.06667, 1249)

# Separate backup heat pump test
args_hash = {}
Expand Down Expand Up @@ -1197,7 +1310,7 @@ def test_shared_chiller_fan_coil
# Check cooling coil
assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
assert_in_epsilon(3.31, clg_coil.ratedCOP, 0.01)
assert_in_epsilon(3.26, clg_coil.ratedCOP, 0.01)
refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
end

Expand All @@ -1213,7 +1326,7 @@ def test_shared_chiller_water_loop_heat_pump
# Check cooling coil
assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
assert_in_epsilon(1.50, clg_coil.ratedCOP, 0.01)
assert_in_epsilon(1.41, clg_coil.ratedCOP, 0.01)
refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
end

Expand All @@ -1229,7 +1342,7 @@ def test_shared_cooling_tower_water_loop_heat_pump
# Check cooling coil
assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
assert_in_epsilon(3.50, clg_coil.ratedCOP, 0.01)
assert_in_epsilon(3.46, clg_coil.ratedCOP, 0.01)
refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
end

Expand Down

0 comments on commit 6b88c50

Please sign in to comment.