Skip to content

Commit f62df2c

Browse files
authored
Merge pull request #1183 from NREL/ground_conductivity
Optional `GroundConductivity` input
2 parents 513bfaa + a7fffdf commit f62df2c

21 files changed

Lines changed: 749 additions & 130 deletions

BuildResidentialHPXML/measure.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
137137
arg.setDescription('Presence of nearby buildings, trees, obstructions for infiltration model. If not provided, the OS-HPXML default is used.')
138138
args << arg
139139

140+
arg = OpenStudio::Measure::OSArgument.makeDoubleArgument('site_ground_conductivity', false)
141+
arg.setDisplayName('Site: Ground Conductivity')
142+
arg.setDescription('Conductivity of the ground soil. If not provided, the OS-HPXML default is used.')
143+
arg.setUnits('Btu/hr-ft-F')
144+
args << arg
145+
140146
arg = OpenStudio::Measure::OSArgument.makeStringArgument('site_zip_code', false)
141147
arg.setDisplayName('Site: Zip Code')
142148
arg.setDescription('Zip code of the home address.')
@@ -3724,7 +3730,11 @@ def self.set_header(hpxml, args)
37243730

37253731
def self.set_site(hpxml, args)
37263732
if args[:site_shielding_of_home].is_initialized
3727-
shielding_of_home = args[:site_shielding_of_home].get
3733+
hpxml.site.shielding_of_home = args[:site_shielding_of_home].get
3734+
end
3735+
3736+
if args[:site_ground_conductivity].is_initialized
3737+
hpxml.site.ground_conductivity = args[:site_ground_conductivity].get
37283738
end
37293739

37303740
if args[:site_type].is_initialized
@@ -3763,7 +3773,6 @@ def self.set_site(hpxml, args)
37633773
end
37643774

37653775
hpxml.site.azimuth_of_front_of_home = args[:geometry_unit_orientation]
3766-
hpxml.site.shielding_of_home = shielding_of_home
37673776
end
37683777

37693778
def self.set_neighbor_buildings(hpxml, args)

BuildResidentialHPXML/measure.xml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.0</schema_version>
44
<name>build_residential_hpxml</name>
55
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
6-
<version_id>03a79ea8-0073-4958-a3bb-423259bbcdf9</version_id>
7-
<version_modified>20220915T153454Z</version_modified>
6+
<version_id>1d0058f9-2963-443a-a959-78e5f088e7d2</version_id>
7+
<version_modified>20220926T172603Z</version_modified>
88
<xml_checksum>2C38F48B</xml_checksum>
99
<class_name>BuildResidentialHPXML</class_name>
1010
<display_name>HPXML Builder</display_name>
@@ -165,6 +165,15 @@
165165
</choice>
166166
</choices>
167167
</argument>
168+
<argument>
169+
<name>site_ground_conductivity</name>
170+
<display_name>Site: Ground Conductivity</display_name>
171+
<description>Conductivity of the ground soil. If not provided, the OS-HPXML default is used.</description>
172+
<type>Double</type>
173+
<units>Btu/hr-ft-F</units>
174+
<required>false</required>
175+
<model_dependent>false</model_dependent>
176+
</argument>
168177
<argument>
169178
<name>site_zip_code</name>
170179
<display_name>Site: Zip Code</display_name>
@@ -6404,7 +6413,7 @@
64046413
<filename>measure.rb</filename>
64056414
<filetype>rb</filetype>
64066415
<usage_type>script</usage_type>
6407-
<checksum>522E2920</checksum>
6416+
<checksum>470336B9</checksum>
64086417
</file>
64096418
</files>
64106419
</measure>

Changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ __New Features__
77
- Allows heating/cooling seasons that don't span the entire year.
88
- Allows calculating one or more utility bill scenarios (e.g., net metering vs feed-in tariff compensation types for a simulation with PV).
99
- Allows setting the EnergyPlus temperature capacitance multiplier.
10+
- Allows setting the ground soil conductivity used for foundation heat transfer and ground source heat pumps.
1011
- Allows setting the natural ventilation availability (days/week that operable windows can be opened); default changed from 7 to 3 (M/W/F).
1112
- Allows specifying duct surface area multipliers.
1213
- EnergyPlus modeling changes:

HPXMLtoOpenStudio/measure.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -963,9 +963,12 @@ def self.add_foundation_wall(runner, model, spaces, foundation_wall, slab_frac,
963963
int_rigid_r = foundation_wall.insulation_interior_r_value
964964
end
965965

966+
soil_k_in = UnitConversions.convert(@hpxml.site.ground_conductivity, 'ft', 'in')
967+
966968
Constructions.apply_foundation_wall(model, [surface], "#{foundation_wall.id} construction",
967969
ext_rigid_offset, int_rigid_offset, ext_rigid_height, int_rigid_height,
968-
ext_rigid_r, int_rigid_r, mat_int_finish, mat_wall, height_ag)
970+
ext_rigid_r, int_rigid_r, mat_int_finish, mat_wall, height_ag,
971+
soil_k_in)
969972

970973
if not assembly_r.nil?
971974
Constructions.check_surface_assembly_rvalue(runner, [surface], inside_film, nil, assembly_r, match)
@@ -1028,11 +1031,12 @@ def self.add_foundation_slab(model, spaces, slab, slab_exp_perim,
10281031
mat_carpet = Material.CoveringBare(slab.carpet_fraction,
10291032
slab.carpet_r_value)
10301033
end
1034+
soil_k_in = UnitConversions.convert(@hpxml.site.ground_conductivity, 'ft', 'in')
10311035

10321036
Constructions.apply_foundation_slab(model, surface, "#{slab.id} construction",
10331037
slab_under_r, slab_under_width, slab_gap_r, slab_perim_r,
10341038
slab_perim_depth, slab_whole_r, slab.thickness,
1035-
slab_exp_perim, mat_carpet, kiva_foundation)
1039+
slab_exp_perim, mat_carpet, soil_k_in, kiva_foundation)
10361040

10371041
return surface.adjacentFoundation.get
10381042
end
@@ -1557,7 +1561,7 @@ def self.add_heat_pump(runner, model, weather, spaces, airloop_map)
15571561

15581562
airloop_map[sys_id] = HVAC.apply_ground_to_air_heat_pump(model, runner, weather, heat_pump,
15591563
sequential_heat_load_fracs, sequential_cool_load_fracs,
1560-
living_zone)
1564+
living_zone, @hpxml.site.ground_conductivity)
15611565

15621566
end
15631567

HPXMLtoOpenStudio/measure.xml

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.0</schema_version>
44
<name>hpxm_lto_openstudio</name>
55
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
6-
<version_id>10580b32-165f-42f6-9cac-c78f14da333c</version_id>
7-
<version_modified>20220921T182550Z</version_modified>
6+
<version_id>0be40881-8b15-4dd9-a51f-432b4fec76cd</version_id>
7+
<version_modified>20220927T180626Z</version_modified>
88
<xml_checksum>D8922A73</xml_checksum>
99
<class_name>HPXMLtoOpenStudio</class_name>
1010
<display_name>HPXML to OpenStudio Translator</display_name>
@@ -229,12 +229,6 @@
229229
<usage_type>resource</usage_type>
230230
<checksum>1D3AE970</checksum>
231231
</file>
232-
<file>
233-
<filename>materials.rb</filename>
234-
<filetype>rb</filetype>
235-
<usage_type>resource</usage_type>
236-
<checksum>868FE0BE</checksum>
237-
</file>
238232
<file>
239233
<filename>schedule_files/setpoints.csv</filename>
240234
<filetype>csv</filetype>
@@ -403,24 +397,12 @@
403397
<usage_type>resource</usage_type>
404398
<checksum>FC171B98</checksum>
405399
</file>
406-
<file>
407-
<filename>hvac.rb</filename>
408-
<filetype>rb</filetype>
409-
<usage_type>resource</usage_type>
410-
<checksum>31912131</checksum>
411-
</file>
412400
<file>
413401
<filename>simcontrols.rb</filename>
414402
<filetype>rb</filetype>
415403
<usage_type>resource</usage_type>
416404
<checksum>3AFD26FF</checksum>
417405
</file>
418-
<file>
419-
<filename>constructions.rb</filename>
420-
<filetype>rb</filetype>
421-
<usage_type>resource</usage_type>
422-
<checksum>D8D5DE4D</checksum>
423-
</file>
424406
<file>
425407
<filename>schedules.rb</filename>
426408
<filetype>rb</filetype>
@@ -493,12 +475,6 @@
493475
<usage_type>test</usage_type>
494476
<checksum>D8E236C3</checksum>
495477
</file>
496-
<file>
497-
<filename>test_hvac_sizing.rb</filename>
498-
<filetype>rb</filetype>
499-
<usage_type>test</usage_type>
500-
<checksum>DFD1B298</checksum>
501-
</file>
502478
<file>
503479
<filename>test_weather.rb</filename>
504480
<filetype>rb</filetype>
@@ -523,12 +499,6 @@
523499
<usage_type>resource</usage_type>
524500
<checksum>0D0399FA</checksum>
525501
</file>
526-
<file>
527-
<filename>hvac_sizing.rb</filename>
528-
<filetype>rb</filetype>
529-
<usage_type>resource</usage_type>
530-
<checksum>4D0D827D</checksum>
531-
</file>
532502
<file>
533503
<filename>test_airflow.rb</filename>
534504
<filetype>rb</filetype>
@@ -548,40 +518,58 @@
548518
<checksum>A2B7F8E1</checksum>
549519
</file>
550520
<file>
551-
<filename>test_defaults.rb</filename>
521+
<filename>hotwater_appliances.rb</filename>
552522
<filetype>rb</filetype>
553-
<usage_type>test</usage_type>
554-
<checksum>7950A1A2</checksum>
523+
<usage_type>resource</usage_type>
524+
<checksum>1BAC39B2</checksum>
555525
</file>
556526
<file>
557-
<filename>hpxml_defaults.rb</filename>
527+
<filename>materials.rb</filename>
558528
<filetype>rb</filetype>
559529
<usage_type>resource</usage_type>
560-
<checksum>6ED20DA1</checksum>
530+
<checksum>24DCB986</checksum>
561531
</file>
562532
<file>
563-
<filename>hotwater_appliances.rb</filename>
533+
<filename>constructions.rb</filename>
564534
<filetype>rb</filetype>
565535
<usage_type>resource</usage_type>
566-
<checksum>1BAC39B2</checksum>
536+
<checksum>6F6B5865</checksum>
537+
</file>
538+
<file>
539+
<filename>test_defaults.rb</filename>
540+
<filetype>rb</filetype>
541+
<usage_type>test</usage_type>
542+
<checksum>069B537F</checksum>
543+
</file>
544+
<file>
545+
<filename>hpxml_defaults.rb</filename>
546+
<filetype>rb</filetype>
547+
<usage_type>resource</usage_type>
548+
<checksum>F954FBA8</checksum>
567549
</file>
568550
<file>
569551
<filename>hpxml_schematron/EPvalidator.xml</filename>
570552
<filetype>xml</filetype>
571553
<usage_type>resource</usage_type>
572-
<checksum>D133B230</checksum>
554+
<checksum>A482C431</checksum>
573555
</file>
574556
<file>
575557
<filename>test_validation.rb</filename>
576558
<filetype>rb</filetype>
577559
<usage_type>test</usage_type>
578-
<checksum>F01525B5</checksum>
560+
<checksum>675AC983</checksum>
579561
</file>
580562
<file>
581563
<filename>hpxml.rb</filename>
582564
<filetype>rb</filetype>
583565
<usage_type>resource</usage_type>
584-
<checksum>FBEFBFF9</checksum>
566+
<checksum>CD5019F4</checksum>
567+
</file>
568+
<file>
569+
<filename>hvac.rb</filename>
570+
<filetype>rb</filetype>
571+
<usage_type>resource</usage_type>
572+
<checksum>41063A6B</checksum>
585573
</file>
586574
<file>
587575
<version>
@@ -592,7 +580,19 @@
592580
<filename>measure.rb</filename>
593581
<filetype>rb</filetype>
594582
<usage_type>script</usage_type>
595-
<checksum>DCA18258</checksum>
583+
<checksum>927B84D4</checksum>
584+
</file>
585+
<file>
586+
<filename>test_hvac_sizing.rb</filename>
587+
<filetype>rb</filetype>
588+
<usage_type>test</usage_type>
589+
<checksum>CEA9E398</checksum>
590+
</file>
591+
<file>
592+
<filename>hvac_sizing.rb</filename>
593+
<filetype>rb</filetype>
594+
<usage_type>resource</usage_type>
595+
<checksum>42C2E302</checksum>
596596
</file>
597597
</files>
598598
</measure>

HPXMLtoOpenStudio/resources/constructions.rb

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -758,13 +758,13 @@ def self.apply_floor(model, surfaces, constr_name,
758758
def self.apply_foundation_wall(model, surfaces, constr_name,
759759
ext_rigid_ins_offset, int_rigid_ins_offset, ext_rigid_ins_height,
760760
int_rigid_ins_height, ext_rigid_r, int_rigid_r, mat_int_finish,
761-
mat_wall, height_above_grade)
761+
mat_wall, height_above_grade, soil_k_in)
762762

763763
# Create Kiva foundation
764764
foundation = apply_kiva_walled_foundation(model, ext_rigid_r, int_rigid_r, ext_rigid_ins_offset,
765765
int_rigid_ins_offset, ext_rigid_ins_height,
766766
int_rigid_ins_height, height_above_grade,
767-
mat_wall.thick_in, mat_int_finish)
767+
mat_wall.thick_in, mat_int_finish, soil_k_in)
768768

769769
# Define construction
770770
constr = Construction.new(constr_name, [1])
@@ -786,7 +786,7 @@ def self.apply_foundation_slab(model, surface, constr_name,
786786
under_r, under_width, gap_r,
787787
perimeter_r, perimeter_depth,
788788
whole_r, concrete_thick_in, exposed_perimeter,
789-
mat_carpet, foundation)
789+
mat_carpet, soil_k_in, foundation)
790790

791791
return if surface.nil?
792792

@@ -795,7 +795,7 @@ def self.apply_foundation_slab(model, surface, constr_name,
795795
thick = UnitConversions.convert(concrete_thick_in, 'in', 'ft')
796796
foundation = create_kiva_slab_foundation(model, under_r, under_width,
797797
gap_r, thick, perimeter_r, perimeter_depth,
798-
concrete_thick_in)
798+
concrete_thick_in, soil_k_in)
799799
else
800800
# Kiva foundation (for crawlspace/basement) exists
801801
if (under_r > 0) && (under_width > 0)
@@ -813,7 +813,7 @@ def self.apply_foundation_slab(model, surface, constr_name,
813813
mat_concrete = Material.Concrete(concrete_thick_in)
814814
else
815815
# Use 0.5 - 1.0 inches of soil, per Neal Kruis recommendation
816-
mat_soil = Material.Soil(0.5)
816+
mat_soil = Material.Soil(0.5, soil_k_in)
817817
end
818818
mat_rigid = nil
819819
if whole_r > 0
@@ -1214,7 +1214,7 @@ def self.get_gap_factor(install_grade, framing_factor, cavity_r)
12141214

12151215
def self.create_kiva_slab_foundation(model, int_horiz_r, int_horiz_width, int_vert_r,
12161216
int_vert_depth, ext_vert_r, ext_vert_depth,
1217-
concrete_thick_in)
1217+
concrete_thick_in, soil_k_in)
12181218

12191219
# Create the Foundation:Kiva object for slab foundations
12201220
foundation = OpenStudio::Model::FoundationKiva.new(model)
@@ -1244,14 +1244,15 @@ def self.create_kiva_slab_foundation(model, int_horiz_r, int_horiz_width, int_ve
12441244
foundation.setWallHeightAboveGrade(UnitConversions.convert(concrete_thick_in, 'in', 'm'))
12451245
foundation.setWallDepthBelowSlab(UnitConversions.convert(8.0, 'in', 'm'))
12461246

1247-
apply_kiva_settings(model)
1247+
apply_kiva_settings(model, soil_k_in)
12481248

12491249
return foundation
12501250
end
12511251

12521252
def self.apply_kiva_walled_foundation(model, ext_vert_r, int_vert_r,
12531253
ext_vert_offset, int_vert_offset, ext_vert_depth, int_vert_depth,
1254-
wall_height_above_grade, wall_material_thick_in, wall_mat_int_finish)
1254+
wall_height_above_grade, wall_material_thick_in, wall_mat_int_finish,
1255+
soil_k_in)
12551256

12561257
# Create the Foundation:Kiva object for crawl/basement foundations
12571258
foundation = OpenStudio::Model::FoundationKiva.new(model)
@@ -1289,14 +1290,14 @@ def self.apply_kiva_walled_foundation(model, ext_vert_r, int_vert_r,
12891290
foundation.setWallHeightAboveGrade(UnitConversions.convert(wall_height_above_grade, 'ft', 'm'))
12901291
foundation.setWallDepthBelowSlab(UnitConversions.convert(8.0, 'in', 'm'))
12911292

1292-
apply_kiva_settings(model)
1293+
apply_kiva_settings(model, soil_k_in)
12931294

12941295
return foundation
12951296
end
12961297

1297-
def self.apply_kiva_settings(model)
1298+
def self.apply_kiva_settings(model, soil_k_in)
12981299
# Set the Foundation:Kiva:Settings object
1299-
soil_mat = BaseMaterial.Soil
1300+
soil_mat = BaseMaterial.Soil(soil_k_in)
13001301
settings = model.getFoundationKivaSettings
13011302
settings.setSoilConductivity(UnitConversions.convert(soil_mat.k_in, 'Btu*in/(hr*ft^2*R)', 'W/(m*K)'))
13021303
settings.setSoilDensity(UnitConversions.convert(soil_mat.rho, 'lbm/ft^3', 'kg/m^3'))
@@ -1589,7 +1590,7 @@ def self.apply_wall_construction(runner, model, surfaces, wall_id, wall_type, as
15891590
base_mat = BaseMaterial.Brick
15901591
elsif wall_type == HPXML::WallTypeAdobe
15911592
thick_in = 10.0
1592-
base_mat = BaseMaterial.Soil
1593+
base_mat = BaseMaterial.Soil(12.0)
15931594
elsif wall_type == HPXML::WallTypeStrawBale
15941595
thick_in = 23.0
15951596
base_mat = BaseMaterial.StrawBale

0 commit comments

Comments
 (0)