diff --git a/BuildResidentialHPXML/README.md b/BuildResidentialHPXML/README.md
index dca9f0d101..ae54157782 100644
--- a/BuildResidentialHPXML/README.md
+++ b/BuildResidentialHPXML/README.md
@@ -3806,7 +3806,7 @@ The type of the hot water distribution system.
**Hot Water Distribution: Standard Piping Length**
-If the distribution system is Standard, the length of the piping. If not provided, the OS-HPXML default (see Standard) is used.
+If the distribution system is Standard or Recirculation (Shared), the length of the piping. If not provided, the OS-HPXML default (see Standard or Recirculation (Shared)) is used.
- **Name:** ``hot_water_distribution_standard_piping_length``
- **Type:** ``Double``
@@ -3858,7 +3858,7 @@ If the distribution system is Recirculation, the length of the recirculation bra
**Hot Water Distribution: Recirculation Pump Power**
-If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.
+If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see Recirculation (In-Unit) or Recirculation (Shared)) is used.
- **Name:** ``hot_water_distribution_recirc_pump_power``
- **Type:** ``Double``
@@ -3869,6 +3869,19 @@ If the distribution system is Recirculation, the recirculation pump power. If no
+**Hot Water Distribution: Recirculation Number of Bedrooms Served**
+
+If the distribution system is Recirculation, number of bedrooms served by the recirculation system. Only needed if single-family attached or apartment unit and it is a shared recirculation system serving multiple dwelling units. Used to apportion recirculation pump power to the unit.
+
+- **Name:** ``hot_water_distribution_recirc_num_bedrooms_served``
+- **Type:** ``Integer``
+
+- **Units:** ``#``
+
+- **Required:** ``false``
+
+
+
**Hot Water Distribution: Pipe Insulation Nominal R-Value**
Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default (see HPXML Hot Water Distribution) is used.
diff --git a/BuildResidentialHPXML/measure.rb b/BuildResidentialHPXML/measure.rb
index 8898160b7f..0f7e883cfa 100644
--- a/BuildResidentialHPXML/measure.rb
+++ b/BuildResidentialHPXML/measure.rb
@@ -2268,7 +2268,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_standard_piping_length', false)
arg.setDisplayName('Hot Water Distribution: Standard Piping Length')
arg.setUnits('ft')
- arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeStandard}, the length of the piping. If not provided, the OS-HPXML default (see Standard) is used.")
+ arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeStandard} or #{HPXML::DHWDistTypeRecirc} (Shared), the length of the piping. If not provided, the OS-HPXML default (see Standard or Recirculation (Shared)) is used.")
args << arg
recirculation_control_type_choices = OpenStudio::StringVector.new
@@ -2299,7 +2299,13 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_pump_power', false)
arg.setDisplayName('Hot Water Distribution: Recirculation Pump Power')
arg.setUnits('W')
- arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the recirculation pump power. If not provided, the OS-HPXML default (see Recirculation (In-Unit)) is used.")
+ arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the recirculation pump power. If not provided, the OS-HPXML default (see Recirculation (In-Unit) or Recirculation (Shared)) is used.")
+ args << arg
+
+ arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('hot_water_distribution_recirc_num_bedrooms_served', false)
+ arg.setDisplayName('Hot Water Distribution: Recirculation Number of Bedrooms Served')
+ arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, number of bedrooms served by the recirculation system. Only needed if #{HPXML::ResidentialTypeSFA} or #{HPXML::ResidentialTypeApartment} and it is a shared recirculation system serving multiple dwelling units. Used to apportion recirculation pump power to the unit.")
+ arg.setUnits('#')
args << arg
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_pipe_r', false)
@@ -6552,17 +6558,29 @@ def self.set_hot_water_distribution(hpxml_bldg, args)
dwhr_efficiency = args[:dwhr_efficiency]
end
- if args[:hot_water_distribution_system_type] == HPXML::DHWDistTypeStandard
+ system_type = args[:hot_water_distribution_system_type]
+ if system_type == HPXML::DHWDistTypeStandard
standard_piping_length = args[:hot_water_distribution_standard_piping_length]
+ elsif system_type == HPXML::DHWDistTypeRecirc
+ if ([HPXML::ResidentialTypeSFA, HPXML::ResidentialTypeApartment].include? args[:geometry_unit_type]) && (args[:hot_water_distribution_recirc_num_bedrooms_served].to_f > args[:geometry_unit_num_bedrooms])
+ system_type = HPXML::DHWDistTypeStandard
+ standard_piping_length = args[:hot_water_distribution_standard_piping_length]
+ has_shared_recirculation = true
+ shared_recirculation_number_of_bedrooms_served = args[:hot_water_distribution_recirc_num_bedrooms_served]
+ shared_recirculation_control_type = args[:hot_water_distribution_recirc_control_type]
+ shared_recirculation_pump_power = args[:hot_water_distribution_recirc_pump_power]
+ else
+ recirculation_control_type = args[:hot_water_distribution_recirc_control_type]
+ recirculation_piping_length = args[:hot_water_distribution_recirc_piping_length]
+ recirculation_branch_piping_length = args[:hot_water_distribution_recirc_branch_piping_length]
+ recirculation_pump_power = args[:hot_water_distribution_recirc_pump_power]
+ end
else
- recirculation_control_type = args[:hot_water_distribution_recirc_control_type]
- recirculation_piping_length = args[:hot_water_distribution_recirc_piping_length]
- recirculation_branch_piping_length = args[:hot_water_distribution_recirc_branch_piping_length]
- recirculation_pump_power = args[:hot_water_distribution_recirc_pump_power]
+ fail 'Unexpected hot water distribution system type.'
end
hpxml_bldg.hot_water_distributions.add(id: "HotWaterDistribution#{hpxml_bldg.hot_water_distributions.size + 1}",
- system_type: args[:hot_water_distribution_system_type],
+ system_type: system_type,
standard_piping_length: standard_piping_length,
recirculation_control_type: recirculation_control_type,
recirculation_piping_length: recirculation_piping_length,
@@ -6571,7 +6589,11 @@ def self.set_hot_water_distribution(hpxml_bldg, args)
pipe_r_value: args[:hot_water_distribution_pipe_r],
dwhr_facilities_connected: dwhr_facilities_connected,
dwhr_equal_flow: dwhr_equal_flow,
- dwhr_efficiency: dwhr_efficiency)
+ dwhr_efficiency: dwhr_efficiency,
+ has_shared_recirculation: has_shared_recirculation,
+ shared_recirculation_number_of_bedrooms_served: shared_recirculation_number_of_bedrooms_served,
+ shared_recirculation_pump_power: shared_recirculation_pump_power,
+ shared_recirculation_control_type: shared_recirculation_control_type)
end
# Set the water fixtures properties, including:
diff --git a/BuildResidentialHPXML/measure.xml b/BuildResidentialHPXML/measure.xml
index 55f931ca7b..b0319d2925 100644
--- a/BuildResidentialHPXML/measure.xml
+++ b/BuildResidentialHPXML/measure.xml
@@ -3,8 +3,8 @@
3.1
build_residential_hpxml
a13a8983-2b01-4930-8af2-42030b6e4233
- 1cf787b3-6890-4f06-a3b0-38e992fa387b
- 2024-07-03T22:55:11Z
+ 81b606f5-3522-4b9b-ba02-f97e2c7c3834
+ 2024-07-08T15:47:50Z
2C38F48B
BuildResidentialHPXML
HPXML Builder
@@ -4657,7 +4657,7 @@
hot_water_distribution_standard_piping_length
Hot Water Distribution: Standard Piping Length
- If the distribution system is Standard, the length of the piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#standard'>Standard</a>) is used.
+ If the distribution system is Standard or Recirculation (Shared), the length of the piping. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#standard'>Standard</a> or <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-shared'>Recirculation (Shared)</a>) is used.
Double
ft
false
@@ -4715,12 +4715,21 @@
hot_water_distribution_recirc_pump_power
Hot Water Distribution: Recirculation Pump Power
- If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a>) is used.
+ If the distribution system is Recirculation, the recirculation pump power. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-in-unit'>Recirculation (In-Unit)</a> or <a href='https://openstudio-hpxml.readthedocs.io/en/v1.8.1/workflow_inputs.html#recirculation-shared'>Recirculation (Shared)</a>) is used.
Double
W
false
false
+
+ hot_water_distribution_recirc_num_bedrooms_served
+ Hot Water Distribution: Recirculation Number of Bedrooms Served
+ If the distribution system is Recirculation, number of bedrooms served by the recirculation system. Only needed if single-family attached or apartment unit and it is a shared recirculation system serving multiple dwelling units. Used to apportion recirculation pump power to the unit.
+ Integer
+ #
+ false
+ false
+
hot_water_distribution_pipe_r
Hot Water Distribution: Pipe Insulation Nominal R-Value
@@ -7361,7 +7370,7 @@
README.md
md
readme
- 38C93847
+ A729C48B
README.md.erb
@@ -7378,7 +7387,7 @@
measure.rb
rb
script
- EA194ADD
+ E1BF8309
geometry.rb
diff --git a/Changelog.md b/Changelog.md
index f41dcde26c..8adca08035 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -90,6 +90,7 @@ __New Features__
- Add soil and moisture type arguments (for determining ground conductivity and diffusivity) and optional geothermal loop arguments for ground source heat pumps.
- The "Geometry: Building Number of Units" input is now written to the HPXML `NumberofUnitsInBuilding` element.
- Adds a blower fan efficiency input for specifying fan power W/cfm at maximum speed.
+ - Allows specifying number of bedrooms served by the recirculation system which is used for apportioning recirculation pump power.
- BuildResidentialScheduleFile measure:
- Allows appending columns to an existing CSV file rather than overwriting.
- Other plug load schedules now use Other schedule fractions per ANSI/RESNET/ICC 301-2022 Addendum C.
diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml
index 9f0e82e72d..ad218606ff 100644
--- a/HPXMLtoOpenStudio/measure.xml
+++ b/HPXMLtoOpenStudio/measure.xml
@@ -3,8 +3,8 @@
3.1
hpxm_lto_openstudio
b1543b30-9465-45ff-ba04-1d1f85e763bc
- 657677c3-58a6-4357-bfe1-fcd7f6b039eb
- 2024-07-06T05:17:52Z
+ 06ff6e91-3d2e-4cc1-86a9-db930b3f21f3
+ 2024-07-08T15:47:52Z
D8922A73
HPXMLtoOpenStudio
HPXML to OpenStudio Translator
@@ -623,24 +623,6 @@
resource
E12E2D75
-
- in.schedules.csv
- csv
- test
- 2B9C5C95
-
-
- results_annual.csv
- csv
- test
- 3C4C7BF6
-
-
- results_design_load_details.csv
- csv
- test
- 0892DD62
-
test_airflow.rb
rb
diff --git a/tasks.rb b/tasks.rb
index f9fa1868bc..7f64fe644f 100644
--- a/tasks.rb
+++ b/tasks.rb
@@ -1955,16 +1955,6 @@ def apply_hpxml_modification_sample_files(hpxml_path, hpxml)
hpxml_bldg.water_heating.water_fixtures_weekday_fractions = '0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.087, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.039, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026'
hpxml_bldg.water_heating.water_fixtures_weekend_fractions = '0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.087, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.039, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026'
hpxml_bldg.water_heating.water_fixtures_monthly_multipliers = '1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0'
- elsif ['base-bldgtype-mf-unit-shared-water-heater-recirc.xml',
- 'base-bldgtype-mf-unit-shared-water-heater-recirc-beds-0.xml',
- 'base-bldgtype-mf-unit-shared-water-heater-recirc-scheduled.xml'].include? hpxml_file
- hpxml_bldg.hot_water_distributions[0].has_shared_recirculation = true
- hpxml_bldg.hot_water_distributions[0].shared_recirculation_number_of_bedrooms_served = 18
- hpxml_bldg.hot_water_distributions[0].shared_recirculation_pump_power = 220
- hpxml_bldg.hot_water_distributions[0].shared_recirculation_control_type = HPXML::DHWRecircControlTypeTimer
- if hpxml_file == 'base-bldgtype-mf-unit-shared-water-heater-recirc-beds-0.xml'
- hpxml_bldg.hot_water_distributions[0].shared_recirculation_number_of_bedrooms_served = 6
- end
elsif ['base-bldgtype-mf-unit-shared-laundry-room.xml',
'base-bldgtype-mf-unit-shared-laundry-room-multiple-water-heaters.xml'].include? hpxml_file
hpxml_bldg.water_heating_systems.reverse_each do |water_heating_system|
diff --git a/workflow/hpxml_inputs.json b/workflow/hpxml_inputs.json
index 1358265b64..1310467e7c 100644
--- a/workflow/hpxml_inputs.json
+++ b/workflow/hpxml_inputs.json
@@ -1266,15 +1266,27 @@
"water_heater_num_bedrooms_served": 18
},
"sample_files/base-bldgtype-mf-unit-shared-water-heater-recirc.xml": {
- "parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-water-heater.xml"
+ "parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-water-heater.xml",
+ "hot_water_distribution_system_type": "Recirculation",
+ "hot_water_distribution_recirc_control_type": "timer",
+ "hot_water_distribution_recirc_pump_power": 220.0,
+ "hot_water_distribution_recirc_num_bedrooms_served": 18
},
"sample_files/base-bldgtype-mf-unit-shared-water-heater-recirc-beds-0.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-water-heater.xml",
"geometry_unit_num_bedrooms": 0,
- "water_heater_num_bedrooms_served": 6
+ "water_heater_num_bedrooms_served": 6,
+ "hot_water_distribution_system_type": "Recirculation",
+ "hot_water_distribution_recirc_control_type": "timer",
+ "hot_water_distribution_recirc_pump_power": 220.0,
+ "hot_water_distribution_recirc_num_bedrooms_served": 6
},
"sample_files/base-bldgtype-mf-unit-shared-water-heater-recirc-scheduled.xml": {
- "parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-water-heater-recirc.xml"
+ "parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-water-heater-recirc.xml",
+ "hot_water_distribution_system_type": "Recirculation",
+ "hot_water_distribution_recirc_control_type": "timer",
+ "hot_water_distribution_recirc_pump_power": 220.0,
+ "hot_water_distribution_recirc_num_bedrooms_served": 18
},
"sample_files/base-dhw-combi-tankless.xml": {
"parent_hpxml": "sample_files/base-dhw-indirect.xml",