diff --git a/HPXMLtoOpenStudio/measure.rb b/HPXMLtoOpenStudio/measure.rb
index 98ccb29cf5..dc6f774f61 100644
--- a/HPXMLtoOpenStudio/measure.rb
+++ b/HPXMLtoOpenStudio/measure.rb
@@ -132,6 +132,14 @@ def run(model, runner, user_arguments)
# Write updated HPXML object (w/ defaults) to file for inspection
XMLHelper.write_file(hpxml.to_doc, args[:hpxml_defaults_path])
+ # When modeling whole SFA/MF buildings, remove shared systems upfront
+ # from the HPXML object; handle them at the end once the full model
+ # has been created.
+ shared_systems_map = {}
+ if hpxml.header.whole_sfa_or_mf_building_sim
+ shared_systems_map = hpxml.delete_shared_systems_serving_multiple_dwelling_units()
+ end
+
# Create OpenStudio unit model(s)
hpxml_osm_map = {}
hpxml.buildings.each do |hpxml_bldg|
@@ -147,9 +155,12 @@ def run(model, runner, user_arguments)
end
end
- # Merge unit models into final model
if hpxml.buildings.size > 1
+ # Merge unit models into final model
Model.merge_unit_models(model, hpxml_osm_map)
+
+ # Apply shared systems
+ HVAC.apply_shared_systems(runner, model, hpxml, hpxml_osm_map, shared_systems_map)
end
# Create EnergyPlus outputs
diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml
index 97c9ce3887..d672eb2d3b 100644
--- a/HPXMLtoOpenStudio/measure.xml
+++ b/HPXMLtoOpenStudio/measure.xml
@@ -3,8 +3,8 @@
3.1
hpxm_lto_openstudio
b1543b30-9465-45ff-ba04-1d1f85e763bc
- 3a95928b-a02e-48b4-aefa-bac6bce64107
- 2025-12-08T19:49:33Z
+ 6a58497e-cf9d-4695-b17d-dac4502b2ef0
+ 2025-12-08T19:51:39Z
D8922A73
HPXMLtoOpenStudio
HPXML to OpenStudio Translator
@@ -192,7 +192,7 @@
measure.rb
rb
script
- 4FAA1035
+ C22EA4EB
airflow.rb
@@ -348,7 +348,7 @@
defaults.rb
rb
resource
- 4F79DDF3
+ 79C0A74F
electric_panel.rb
@@ -384,7 +384,7 @@
hpxml.rb
rb
resource
- A0D34C5D
+ BAA2C690
hpxml_schema/HPXML.xsd
@@ -402,7 +402,7 @@
hpxml_schematron/EPvalidator.sch
sch
resource
- DBCF54E6
+ C390B44B
hpxml_schematron/iso-schematron.xsd
@@ -414,13 +414,13 @@
hvac.rb
rb
resource
- 01E3FE77
+ 073FE13E
hvac_sizing.rb
rb
resource
- 1A612353
+ D9D27767
internal_gains.rb
@@ -474,7 +474,7 @@
model.rb
rb
resource
- 88FDF17C
+ 535327BF
output.rb
@@ -696,7 +696,7 @@
waterheater.rb
rb
resource
- D373B68C
+ 225126E7
weather.rb
diff --git a/HPXMLtoOpenStudio/resources/defaults.rb b/HPXMLtoOpenStudio/resources/defaults.rb
index 128e45b4ec..f79c885190 100644
--- a/HPXMLtoOpenStudio/resources/defaults.rb
+++ b/HPXMLtoOpenStudio/resources/defaults.rb
@@ -70,7 +70,7 @@ def self.apply(runner, hpxml, hpxml_bldg, weather, schedules_file: nil, convert_
apply_doors(hpxml_bldg)
apply_partition_wall_mass(hpxml_bldg)
apply_furniture_mass(hpxml_bldg)
- apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_num, hpxml.header)
+ apply_hvac(runner, hpxml.header, hpxml_bldg, weather, convert_shared_systems, unit_num)
apply_hvac_control(hpxml_bldg, schedules_file, eri_version)
apply_hvac_distribution(hpxml_bldg)
apply_infiltration(hpxml_bldg, unit_num)
@@ -240,6 +240,13 @@ def self.apply_header(hpxml_header, hpxml_bldg, weather)
unavailable_period.natvent_availability_isdefaulted = true
end
end
+
+ if hpxml_header.shared_boiler_operation.nil?
+ if hpxml_bldg.heating_systems.select { |htg| htg.heating_system_type == HPXML::HVACTypeBoiler && htg.is_shared_system_serving_multiple_dwelling_units }.size > 0
+ hpxml_header.shared_boiler_operation = HPXML::SharedBoilerOperationSequenced
+ hpxml_header.shared_boiler_operation_isdefaulted = true
+ end
+ end
end
# Assigns default values for omitted optional inputs in the HPXML::BuildingHeader object
@@ -1891,15 +1898,15 @@ def self.apply_furniture_mass(hpxml_bldg)
# HPXML::CoolingSystem, and HPXML::HeatPump objects
#
# @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings
+ # @param hpxml_header [HPXML::Header] HPXML Header object (one per HPXML file)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param weather [WeatherFile] Weather object containing EPW information
# @param convert_shared_systems [Boolean] Whether to convert shared systems to equivalent in-unit systems per ANSI/RESNET/ICC 301
# @param unit_num [Integer] Dwelling unit number
- # @param hpxml_header [HPXML::Header] HPXML Header object
# @return [nil]
- def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_num, hpxml_header)
+ def self.apply_hvac(runner, hpxml_header, hpxml_bldg, weather, convert_shared_systems, unit_num)
if convert_shared_systems
- apply_shared_systems(hpxml_bldg)
+ convert_shared_systems_to_in_unit_systems(hpxml_bldg, hpxml_header)
end
# Convert negative values (e.g., -1) to nil as appropriate
@@ -2424,13 +2431,16 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
end
end
- # Converts shared systems to equivalent in-unit systems per ANSI/RESNET/ICC 301.
+ # Converts shared systems to equivalent in-unit systems when modeling individual dwelling units (or,
+ # when modeling a whole SFA/MF building, if OS-HPXML does not yet support explicitly modeling the
+ # shared system we fall back to these conversions).
#
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
+ # @param hpxml_header [HPXML::Header] HPXML Header object (one per HPXML file)
# @return [nil]
- def self.apply_shared_systems(hpxml_bldg)
- converted_clg = apply_shared_cooling_systems(hpxml_bldg)
- converted_htg = apply_shared_heating_systems(hpxml_bldg)
+ def self.convert_shared_systems_to_in_unit_systems(hpxml_bldg, hpxml_header)
+ converted_clg = convert_shared_cooling_systems_to_in_unit_systems(hpxml_bldg)
+ converted_htg = convert_shared_heating_systems_to_in_unit_systems(hpxml_bldg, hpxml_header)
return unless (converted_clg || converted_htg)
# Remove WLHP if not serving heating nor cooling
@@ -2460,13 +2470,13 @@ def self.apply_shared_systems(hpxml_bldg)
# Converts shared cooling systems to equivalent in-unit systems per ANSI/RESNET/ICC 301.
#
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
- # @return [Boolean] True if any shared systems were converted
- def self.apply_shared_cooling_systems(hpxml_bldg)
- converted = false
+ # @return [Boolean] Whether a shared cooling system was converted to an in-unit system
+ def self.convert_shared_cooling_systems_to_in_unit_systems(hpxml_bldg)
+ applied = false
hpxml_bldg.cooling_systems.each do |cooling_system|
next unless cooling_system.is_shared_system
- converted = true
+ applied = true
wlhp = nil
distribution_system = cooling_system.distribution_system
distribution_type = distribution_system.distribution_system_type
@@ -2580,19 +2590,21 @@ def self.apply_shared_cooling_systems(hpxml_bldg)
end
end
- return converted
+ return applied
end
# Converts shared heating systems to equivalent in-unit systems per ANSI/RESNET/ICC 301.
#
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
- # @return [Boolean] True if any shared systems were converted
- def self.apply_shared_heating_systems(hpxml_bldg)
- converted = false
+ # @param hpxml_header [HPXML::Header] HPXML Header object (one per HPXML file)
+ # @return [Boolean] Whether a shared heating system was converted to an in-unit system
+ def self.convert_shared_heating_systems_to_in_unit_systems(hpxml_bldg, hpxml_header)
+ applied = false
hpxml_bldg.heating_systems.each do |heating_system|
+ next if hpxml_header.whole_sfa_or_mf_building_sim # Central boilers are explicitly modeled for whole SFA/MF buildings
next unless heating_system.is_shared_system
- converted = true
+ applied = true
distribution_system = heating_system.distribution_system
hydronic_type = distribution_system.hydronic_type
@@ -2617,7 +2629,7 @@ def self.apply_shared_heating_systems(hpxml_bldg)
heating_system.heating_capacity = nil # Autosize the equipment
end
- return converted
+ return applied
end
# Assigns default values for omitted optional inputs in the HPXML::CoolingPerformanceDataPoint
@@ -2859,8 +2871,37 @@ def self.apply_hvac_control(hpxml_bldg, schedules_file, eri_version)
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @return [nil]
def self.apply_hvac_distribution(hpxml_bldg)
- ncfl = hpxml_bldg.building_construction.number_of_conditioned_floors
+ # Hydronic distribution
+ hpxml_bldg.hvac_distributions.each do |hvac_distribution|
+ next unless hvac_distribution.hvac_systems.any? { |h| h.is_a?(HPXML::HeatingSystem) && h.heating_system_type == HPXML::HVACTypeBoiler }
+
+ # Supply/return loop temperatures
+ default_delta_t = 20.0 # deg-F
+ if hvac_distribution.hydronic_supply_temp.nil?
+ if not hvac_distribution.hydronic_return_temp.nil?
+ hvac_distribution.hydronic_supply_temp = hvac_distribution.hydronic_return_temp + default_delta_t # deg-F
+ else
+ hvac_distribution.hydronic_supply_temp = 180.0 # deg-F
+ end
+ hvac_distribution.hydronic_supply_temp_isdefaulted = true
+ end
+ if hvac_distribution.hydronic_return_temp.nil?
+ hvac_distribution.hydronic_return_temp = hvac_distribution.hydronic_supply_temp - default_delta_t # deg-F
+ hvac_distribution.hydronic_return_temp_isdefaulted = true
+ end
+ if hvac_distribution.hydronic_trvs.nil?
+ hvac_distribution.hydronic_trvs = true
+ hvac_distribution.hydronic_trvs_isdefaulted = true
+ end
+ if hvac_distribution.hydronic_variable_speed_pump.nil?
+ hvac_distribution.hydronic_variable_speed_pump = false
+ hvac_distribution.hydronic_variable_speed_pump_isdefaulted = true
+ end
+ end
+
+ # Air distribution
ncfl_ag = hpxml_bldg.building_construction.number_of_conditioned_floors_above_grade
+ ncfl = hpxml_bldg.building_construction.number_of_conditioned_floors
hpxml_bldg.hvac_distributions.each do |hvac_distribution|
next unless hvac_distribution.distribution_system_type == HPXML::HVACDistributionTypeAir
@@ -4954,7 +4995,7 @@ def self.apply_fuel_loads(hpxml_bldg, schedules_file)
# @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
# @param weather [WeatherFile] Weather object containing EPW information
- # @param hpxml_header [HPXML::Header] HPXML Header object
+ # @param hpxml_header [HPXML::Header] HPXML Header object (one per HPXML file)
# @return [Array] Maps of HPXML::Zones => DesignLoadValues object, HPXML::Spaces => DesignLoadValues object
def self.apply_hvac_sizing(runner, hpxml_bldg, weather, hpxml_header)
hvac_systems = HVAC.get_hpxml_hvac_systems(hpxml_bldg)
diff --git a/HPXMLtoOpenStudio/resources/hpxml.rb b/HPXMLtoOpenStudio/resources/hpxml.rb
index be36e678b8..b06e1f8339 100644
--- a/HPXMLtoOpenStudio/resources/hpxml.rb
+++ b/HPXMLtoOpenStudio/resources/hpxml.rb
@@ -411,6 +411,8 @@ class HPXML < Object
ScheduleRegular = 'regular schedule'
ScheduleAvailable = 'always available'
ScheduleUnavailable = 'always unavailable'
+ SharedBoilerOperationSequenced = 'sequenced'
+ SharedBoilerOperationSimultaneous = 'simultaneous'
ShieldingExposed = 'exposed'
ShieldingNormal = 'normal'
ShieldingWellShielded = 'well-shielded'
@@ -784,6 +786,28 @@ def has_fuels(building_id = nil)
return has_fuel
end
+ # Delete any shared HVAC systems that are actually modeled as systems serving multiple dwelling units.
+ # Shared systems that are modeled as equivalent in-unit systems per ANSI 301 are not deleted.
+ #
+ # @return [Hash] Map of HPXML Building => [deleted_systems]
+ def delete_shared_systems_serving_multiple_dwelling_units()
+ deleted_systems_map = {}
+ buildings.each do |hpxml_bldg|
+ hpxml_bldg.hvac_systems.each do |hvac_system|
+ next unless hvac_system.is_shared_system_serving_multiple_dwelling_units
+
+ deleted_systems_map[hpxml_bldg] = [] if deleted_systems_map[hpxml_bldg].nil?
+ deleted_systems_map[hpxml_bldg] << hvac_system
+ end
+ end
+ deleted_systems_map.values.each do |deleted_systems|
+ deleted_systems.reverse_each do |deleted_system|
+ deleted_system.delete
+ end
+ end
+ return deleted_systems_map
+ end
+
# Object to store additional properties on an HPXML object that are not intended
# to end up in the HPXML file. For example, you can store the OpenStudio::Model::Space
# object for an appliance.
@@ -932,6 +956,7 @@ def initialize(hpxml_element, *args, **kwargs)
:software_program_version, # [String] SoftwareInfo/SoftwareProgramVersion
:apply_ashrae140_assumptions, # [Boolean] SoftwareInfo/extension/ApplyASHRAE140Assumptions
:whole_sfa_or_mf_building_sim, # [Boolean] SoftwareInfo/extension/WholeSFAorMFBuildingSimulation
+ :shared_boiler_operation, # [String] SoftwareInfo/extension/SharedHVACSizingControl/SharedBoilerOperation (HPXML::SharedBoilerXXX)
:eri_calculation_versions, # [Array] SoftwareInfo/extension/ERICalculation/Version
:co2index_calculation_versions, # [Array] SoftwareInfo/extension/CO2IndexCalculation/Version
:energystar_calculation_versions, # [Array] SoftwareInfo/extension/EnergyStarCalculation/Version
@@ -996,6 +1021,10 @@ def to_doc(hpxml_doc)
XMLHelper.add_element(software_info, 'SoftwareProgramVersion', @software_program_version, :string) unless @software_program_version.nil?
XMLHelper.add_extension(software_info, 'ApplyASHRAE140Assumptions', @apply_ashrae140_assumptions, :boolean) unless @apply_ashrae140_assumptions.nil?
XMLHelper.add_extension(software_info, 'WholeSFAorMFBuildingSimulation', @whole_sfa_or_mf_building_sim, :boolean) unless @whole_sfa_or_mf_building_sim.nil?
+ if not @shared_boiler_operation.nil?
+ hvac_sizing_control = XMLHelper.create_elements_as_needed(software_info, ['extension', 'SharedHVACSizingControl'])
+ XMLHelper.add_element(hvac_sizing_control, 'SharedBoilerOperation', @shared_boiler_operation, :string, @shared_boiler_operation_isdefaulted)
+ end
{ 'ERICalculation' => @eri_calculation_versions,
'CO2IndexCalculation' => @co2index_calculation_versions,
'EnergyStarCalculation' => @energystar_calculation_versions,
@@ -1070,6 +1099,7 @@ def from_doc(hpxml)
@ground_to_air_heat_pump_model_type = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/AdvancedResearchFeatures/GroundToAirHeatPumpModelType', :string)
@apply_ashrae140_assumptions = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ApplyASHRAE140Assumptions', :boolean)
@whole_sfa_or_mf_building_sim = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/WholeSFAorMFBuildingSimulation', :boolean)
+ @shared_boiler_operation = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SharedHVACSizingControl/SharedBoilerOperation', :string)
@service_feeders_load_calculation_types = XMLHelper.get_values(hpxml, 'SoftwareInfo/extension/ElectricPanelLoadCalculations/ServiceFeeders/Type', :string)
@emissions_scenarios.from_doc(hpxml)
@utility_bill_scenarios.from_doc(hpxml)
@@ -2134,24 +2164,26 @@ def check_for_errors
errors << 'More than one cooling system designated as the primary.'
end
- # Check for at most 1 shared heating system and 1 shared cooling system
- num_htg_shared = 0
- num_clg_shared = 0
- (@heating_systems + @heat_pumps).each do |hvac_system|
- next unless hvac_system.is_shared_system
+ if not @parent_object.header.whole_sfa_or_mf_building_sim
+ # Check for at most 1 shared heating system and 1 shared cooling system
+ num_htg_shared = 0
+ num_clg_shared = 0
+ (@heating_systems + @heat_pumps).each do |hvac_system|
+ next unless hvac_system.is_shared_system
- num_htg_shared += 1
- end
- (@cooling_systems + @heat_pumps).each do |hvac_system|
- next unless hvac_system.is_shared_system
+ num_htg_shared += 1
+ end
+ (@cooling_systems + @heat_pumps).each do |hvac_system|
+ next unless hvac_system.is_shared_system
- num_clg_shared += 1
- end
- if num_htg_shared > 1
- errors << 'More than one shared heating system found.'
- end
- if num_clg_shared > 1
- errors << 'More than one shared cooling system found.'
+ num_clg_shared += 1
+ end
+ if num_htg_shared > 1
+ errors << 'More than one shared heating system found.'
+ end
+ if num_clg_shared > 1
+ errors << 'More than one shared cooling system found.'
+ end
end
return errors
@@ -6581,6 +6613,35 @@ def is_heat_pump_backup_system
return !primary_heat_pump.nil?
end
+ # Returns whether if we are modeling a whole MF building and the shared system is explicitly modeled.
+ # Shared systems that are modeled as equivalent in-unit systems per ANSI 301 are not included.
+ #
+ # @return [Boolean] True if modeling a whole MF building and its a shared system
+ def is_shared_system_serving_multiple_dwelling_units
+ if @parent_object.parent_object.header.whole_sfa_or_mf_building_sim
+ actual_system = self
+ if !@sameas_id.nil?
+ actual_system = sameas
+ end
+
+ if actual_system.is_shared_system
+ # Currently central boilers are the only technology explicitly modeled as serving multiple dwelling units
+ if actual_system.is_a?(HPXML::HeatingSystem) && actual_system.heating_system_type == HPXML::HVACTypeBoiler
+ return true
+ end
+ end
+ end
+
+ return false
+ end
+
+ # Returns the shared object specified elsewhere in the HPXML.
+ #
+ # @return [HPXML::HeatingSystem] HeatingSystem object linked by sameas attribute
+ def sameas
+ return HPXML::get_sameas_obj(@parent_object, self)
+ end
+
# Deletes the current object from the array.
#
# @return [nil]
@@ -6688,6 +6749,7 @@ def from_doc(heating_system)
return if heating_system.nil?
@id = HPXML::get_id(heating_system)
+ @sameas_id = HPXML::get_sameas_id(heating_system)
@attached_to_zone_idref = HPXML::get_idref(XMLHelper.get_elements(heating_system, 'AttachedToZone')[0])
@location = XMLHelper.get_value(heating_system, 'UnitLocation', :string)
@year_installed = XMLHelper.get_value(heating_system, 'YearInstalled', :integer)
@@ -6882,6 +6944,22 @@ def has_integrated_heating
return true
end
+ # Returns whether if we are modeling a whole MF building and the shared system is explicitly modeled.
+ # Shared systems that are modeled as equivalent in-unit systems per ANSI 301 are not included.
+ #
+ # @return [Boolean] True if modeling a whole MF building and its a shared system
+ def is_shared_system_serving_multiple_dwelling_units
+ # Currently no shared cooling systems are explicitly modeled
+ return false
+ end
+
+ # Returns the shared object specified elsewhere in the HPXML.
+ #
+ # @return [HPXML::CoolingSystem] CoolingSystem object linked by sameas attribute
+ def sameas
+ return HPXML::get_sameas_obj(@parent_object, self)
+ end
+
# Deletes the current object from the array.
#
# @return [nil]
@@ -7004,6 +7082,7 @@ def from_doc(cooling_system)
return if cooling_system.nil?
@id = HPXML::get_id(cooling_system)
+ @sameas_id = HPXML::get_sameas_id(cooling_system)
@attached_to_zone_idref = HPXML::get_idref(XMLHelper.get_elements(cooling_system, 'AttachedToZone')[0])
@location = XMLHelper.get_value(cooling_system, 'UnitLocation', :string)
@year_installed = XMLHelper.get_value(cooling_system, 'YearInstalled', :integer)
@@ -7270,6 +7349,22 @@ def backup_system
end
end
+ # Returns whether if we are modeling a whole MF building and the shared system is explicitly modeled.
+ # Shared systems that are modeled as equivalent in-unit systems per ANSI 301 are not included.
+ #
+ # @return [Boolean] True if modeling a whole MF building and its a shared system
+ def is_shared_system_serving_multiple_dwelling_units
+ # Currently no shared heat pumps are explicitly modeled
+ return false
+ end
+
+ # Returns the shared object specified elsewhere in the HPXML.
+ #
+ # @return [HPXML::HeatPump] HeatPump object linked by sameas attribute
+ def sameas
+ return HPXML::get_sameas_obj(@parent_object, self)
+ end
+
# Deletes the current object from the array.
#
# @return [nil]
@@ -7436,6 +7531,7 @@ def from_doc(heat_pump)
return if heat_pump.nil?
@id = HPXML::get_id(heat_pump)
+ @sameas_id = HPXML::get_sameas_id(heat_pump)
@attached_to_zone_idref = HPXML::get_idref(XMLHelper.get_elements(heat_pump, 'AttachedToZone')[0])
@location = XMLHelper.get_value(heat_pump, 'UnitLocation', :string)
@year_installed = XMLHelper.get_value(heat_pump, 'YearInstalled', :integer)
@@ -7873,6 +7969,10 @@ def initialize(hpxml_bldg, *args, **kwargs)
:air_type, # [String] DistributionSystemType/AirDistribution/AirDistributionType (HPXML::AirTypeXXX)
:manualj_blower_fan_heat_btuh, # [Double] DistributionSystemType/AirDistribution/extension/ManualJInputs/BlowerFanHeatBtuh (Btu/hr)
:hydronic_type, # [String] DistributionSystemType/HydronicDistribution/HydronicDistributionType (HPXML::HydronicTypeXXX)
+ :hydronic_supply_temp, # [Double] DistributionSystemType/HydronicDistribution/SupplyTemperature (F)
+ :hydronic_return_temp, # [Double] DistributionSystemType/HydronicDistribution/ReturnTemperature (F)
+ :hydronic_trvs, # [Boolean] DistributionSystemType/HydronicDistribution/PumpandZoneValve/ThermostaticRadiatorValves
+ :hydronic_variable_speed_pump, # [Boolean] DistributionSystemType/HydronicDistribution/PumpandZoneValve/VariableSpeedPump
:manualj_hot_water_piping_btuh, # [Double] DistributionSystemType/HydronicDistribution/extension/ManualJInputs/HotWaterPipingBtuh (Btu/hr)
:annual_heating_dse, # [Double] DistributionSystemType/Other/AnnualHeatingDistributionSystemEfficiency (frac)
:annual_cooling_dse, # [Double] DistributionSystemType/Other/AnnualCoolingDistributionSystemEfficiency (frac)
@@ -7907,16 +8007,25 @@ def hvac_systems
end
end
- if num_clg > 1
- fail "Multiple cooling systems found attached to distribution system '#{@id}'."
- end
- if num_htg > 1
- fail "Multiple heating systems found attached to distribution system '#{@id}'."
+ if not @parent_object.parent_object.header.whole_sfa_or_mf_building_sim
+ if num_clg > 1
+ fail "Multiple cooling systems found attached to distribution system '#{@id}'."
+ end
+ if num_htg > 1
+ fail "Multiple heating systems found attached to distribution system '#{@id}'."
+ end
end
return list
end
+ # Returns the shared system object elsewhere in the HPXML.
+ #
+ # @return [HPXML::HVACDistribution] HVACDistribution object linked by sameas attribute
+ def sameas
+ return HPXML::get_sameas_obj(@parent_object, self)
+ end
+
# Deletes the current object from the array.
#
# @return [nil]
@@ -7968,13 +8077,18 @@ def to_doc(building)
XMLHelper.add_element(distribution_system_type_el, 'Other', @distribution_system_type, :string)
XMLHelper.add_element(hvac_distribution, 'AnnualHeatingDistributionSystemEfficiency', @annual_heating_dse, :float) unless @annual_heating_dse.nil?
XMLHelper.add_element(hvac_distribution, 'AnnualCoolingDistributionSystemEfficiency', @annual_cooling_dse, :float) unless @annual_cooling_dse.nil?
- else
- fail "Unexpected distribution_system_type '#{@distribution_system_type}'."
end
if [HPXML::HVACDistributionTypeHydronic].include? @distribution_system_type
hydronic_distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/HydronicDistribution')
XMLHelper.add_element(hydronic_distribution, 'HydronicDistributionType', @hydronic_type, :string) unless @hydronic_type.nil?
+ XMLHelper.add_element(hydronic_distribution, 'SupplyTemperature', @hydronic_supply_temp, :float, @hydronic_supply_temp_isdefaulted) unless @hydronic_supply_temp.nil?
+ XMLHelper.add_element(hydronic_distribution, 'ReturnTemperature', @hydronic_return_temp, :float, @hydronic_return_temp_isdefaulted) unless @hydronic_return_temp.nil?
+ if (not @hydronic_trvs.nil?) || (not @hydronic_variable_speed_pump.nil?)
+ pump_and_zone_valve = XMLHelper.add_element(hydronic_distribution, 'PumpandZoneValve')
+ XMLHelper.add_element(pump_and_zone_valve, 'ThermostaticRadiatorValves', @hydronic_trvs, :boolean, @hydronic_trvs_isdefaulted) unless @hydronic_trvs.nil?
+ XMLHelper.add_element(pump_and_zone_valve, 'VariableSpeedPump', @hydronic_variable_speed_pump, :boolean, @hydronic_variable_speed_pump_isdefaulted) unless @hydronic_variable_speed_pump.nil?
+ end
if not @manualj_hot_water_piping_btuh.nil?
manualj_inputs = XMLHelper.create_elements_as_needed(hydronic_distribution, ['extension', 'ManualJInputs'])
XMLHelper.add_element(manualj_inputs, 'HotWaterPipingBtuh', @manualj_hot_water_piping_btuh, :float, @manualj_hot_water_piping_btuh_isdefaulted)
@@ -8002,6 +8116,7 @@ def from_doc(hvac_distribution)
return if hvac_distribution.nil?
@id = HPXML::get_id(hvac_distribution)
+ @sameas_id = HPXML::get_sameas_id(hvac_distribution)
@distribution_system_type = XMLHelper.get_child_name(hvac_distribution, 'DistributionSystemType')
if @distribution_system_type == 'Other'
@distribution_system_type = XMLHelper.get_value(XMLHelper.get_element(hvac_distribution, 'DistributionSystemType'), 'Other', :string)
@@ -8015,6 +8130,10 @@ def from_doc(hvac_distribution)
if not hydronic_distribution.nil?
@hydronic_type = XMLHelper.get_value(hydronic_distribution, 'HydronicDistributionType', :string)
+ @hydronic_supply_temp = XMLHelper.get_value(hydronic_distribution, 'SupplyTemperature', :float)
+ @hydronic_return_temp = XMLHelper.get_value(hydronic_distribution, 'ReturnTemperature', :float)
+ @hydronic_trvs = XMLHelper.get_value(hydronic_distribution, 'PumpandZoneValve/ThermostaticRadiatorValves', :boolean)
+ @hydronic_variable_speed_pump = XMLHelper.get_value(hydronic_distribution, 'PumpandZoneValve/VariableSpeedPump', :boolean)
@manualj_hot_water_piping_btuh = XMLHelper.get_value(hydronic_distribution, 'extension/ManualJInputs/HotWaterPipingBtuh', :float)
end
if not air_distribution.nil?
@@ -12596,6 +12715,9 @@ def self.get_sameas_obj(parent_building, sameas_object)
hpxml = parent_building.parent_object
return unless hpxml.header.whole_sfa_or_mf_building_sim
+ is_surface = [HPXML::Wall, HPXML::RimJoist,
+ HPXML::FoundationWall, HPXML::Floor].include?(sameas_object.class)
+
hpxml.buildings.each do |building|
building.class::CLASS_ATTRS.each do |attr|
building_child = building.send(attr)
@@ -12612,12 +12734,14 @@ def self.get_sameas_obj(parent_building, sameas_object)
adjacent_ap = adjacent_obj.additional_properties
if not adjacent_ap.respond_to? :adjacent_hpxml_id
adjacent_ap.adjacent_hpxml_id = sameas_object.id
- adjacent_ap.adjacent_unit_number = hpxml.buildings.index(sameas_object.parent_object)
- # Note: sameas surface is assumed to have the same interior_adjacent_to as the adjacent surface.
- # If that's not the case, we would have to allow InteriorAdjacentTo to be provided for the sameas
- # surface. See https://github.com/NREL/OpenStudio-HPXML/pull/2105#discussion_r2583146171.
- adjacent_ap.adjacent_space_type = adjacent_obj.interior_adjacent_to
- elsif adjacent_ap.adjacent_hpxml_id != sameas_object.id
+ if is_surface
+ adjacent_ap.adjacent_unit_number = hpxml.buildings.index(sameas_object.parent_object)
+ # Note: sameas surface is assumed to have the same interior_adjacent_to as the adjacent surface.
+ # If that's not the case, we would have to allow InteriorAdjacentTo to be provided for the sameas
+ # surface. See https://github.com/NREL/OpenStudio-HPXML/pull/2105#discussion_r2583146171.
+ adjacent_ap.adjacent_space_type = adjacent_obj.interior_adjacent_to
+ end
+ elsif is_surface && adjacent_ap.adjacent_hpxml_id != sameas_object.id
fail "'#{adjacent_obj.id}' is referenced by multiple objects."
end
return adjacent_obj
diff --git a/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch b/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch
index 393a51c819..3500273343 100644
--- a/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch
+++ b/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch
@@ -1059,10 +1059,10 @@
[HeatingSystem]
-
+
Expected 0 or 1 element(s) for xpath: AttachedToZone
Expected 1 element(s) for xpath: ../../HVACControl
- Expected 1 element(s) for xpath: HeatingSystemType[ElectricResistance | Furnace | WallFurnace | FloorFurnace | Boiler | Stove | SpaceHeater | Fireplace]
+ Expected 1 element(s) for xpath: HeatingSystemType[ElectricResistance | Furnace | WallFurnace | FloorFurnace | Boiler | Stove | SpaceHeater | Fireplace]
Expected 0 or 1 element(s) for xpath: extension/HeatingAutosizingFactor
HeatingAutosizingFactor should be greater than 0.0
Expected 0 or 1 element(s) for xpath: extension/HeatingAutosizingLimit
@@ -1177,10 +1177,27 @@
- [HeatingSystemType=SharedBoiler]
-
+ [HeatingSystemType=SharedBoilerWholeBuilding]
+
Expected 1 element(s) for xpath: ../../../../BuildingSummary/BuildingConstruction[ResidentialFacilityType[text()="single-family attached" or text()="apartment unit"]]
- Expected 1 or more element(s) for xpath: ../../HVACDistribution/DistributionSystemType/HydronicDistribution/HydronicDistributionType[text()="radiator" or text()="baseboard" or text()="radiant floor" or text()="radiant ceiling" or text()="water loop"] | ../../HVACDistribution/DistributionSystemType/AirDistribution/AirDistributionType[text()="fan coil"]
+ Expected 1 or more element(s) for xpath: ../../HVACDistribution/DistributionSystemType/HydronicDistribution/HydronicDistributionType[text()="baseboard"]
+ Expected 1 element(s) for xpath: DistributionSystem
+ Expected 0 or 1 element(s) for xpath: HeatingSystemType/Boiler/PilotLight
+ Expected 1 element(s) for xpath: HeatingSystemFuel
+ Expected HeatingSystemFuel to be 'electricity' or 'natural gas' or 'fuel oil' or 'fuel oil 1' or 'fuel oil 2' or 'fuel oil 4' or 'fuel oil 5/6' or 'diesel' or 'propane' or 'kerosene' or 'coal' or 'coke' or 'bituminous coal' or 'wood' or 'wood pellets'
+ Expected 1 element(s) for xpath: HeatingCapacity
+ Expected 1 element(s) for xpath: AnnualHeatingEfficiency[Units="AFUE"]/Value
+ Expected AnnualHeatingEfficiency[Units="AFUE"]/Value to be less than or equal to 1
+
+ AFUE should typically be greater than or equal to 0.5.
+
+
+
+
+ [HeatingSystemType=SharedBoilerSingleUnit]
+
+ Expected 1 element(s) for xpath: ../../../../BuildingSummary/BuildingConstruction[ResidentialFacilityType[text()="single-family attached" or text()="apartment unit"]]
+ Expected 1 or more element(s) for xpath: ../../HVACDistribution/DistributionSystemType/HydronicDistribution/HydronicDistributionType[text()="radiator" or text()="baseboard" or text()="radiant floor" or text()="radiant ceiling" or text()="water loop"] | ../../HVACDistribution/DistributionSystemType/AirDistribution/AirDistributionType[text()="fan coil"]
Expected 0 or 1 element(s) for xpath: UnitLocation
Expected UnitLocation to be 'conditioned space' or 'basement - unconditioned' or 'basement - conditioned' or 'attic - unvented' or 'attic - vented' or 'garage' or 'crawlspace - unvented' or 'crawlspace - vented' or 'crawlspace - conditioned' or 'other exterior' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' or 'roof deck' or 'unconditioned space' or 'manufactured home belly'
Expected 1 element(s) for xpath: DistributionSystem
@@ -1200,7 +1217,7 @@
- [HeatingSystemType=SharedBoilerWthFanCoil]
+ [HeatingSystemType=SharedBoilerSingleUnitWithFanCoil]
Expected 0 or 1 element(s) for xpath: ElectricAuxiliaryEnergy | extension/FanCoilWatts
Expected extension/FanCoilWatts to be greater than or equal to 0
@@ -1208,7 +1225,7 @@
- [HeatingSystemType=SharedBoilerWithWLHP]
+ [HeatingSystemType=SharedBoilerSingleUnitWithWLHP]
Expected 0 or 1 element(s) for xpath: ../HeatPump[HeatPumpType="water-loop-to-air"]/HeatingCapacity
Expected 1 element(s) for xpath: ../HeatPump[HeatPumpType="water-loop-to-air"]/AnnualHeatingEfficiency[Units="COP"]/Value
@@ -2143,7 +2160,7 @@
[HVACDistribution]
-
+
Expected 1 element(s) for xpath: DistributionSystemType[AirDistribution | HydronicDistribution | Other[text()="DSE"]]
@@ -2218,6 +2235,10 @@
Expected 1 element(s) for xpath: HydronicDistributionType
Expected HydronicDistributionType to be 'radiator' or 'baseboard' or 'radiant floor' or 'radiant ceiling' or 'water loop'
+ Expected 0 or 1 element(s) for xpath: SupplyTemperature
+ Expected 0 or 1 element(s) for xpath: ReturnTemperature
+ Expected 0 or 1 element(s) for xpath: PumpandZoneValve/ThermostaticRadiatorValves
+ Expected 0 or 1 element(s) for xpath: PumpandZoneValve/VariableSpeedPump
Expected 0 or 1 element(s) for xpath: extension/ManualJInputs/HotWaterPipingBtuh
Expected extension/ManualJInputs/HotWaterPipingBtuh to be greater than or equal to 0
diff --git a/HPXMLtoOpenStudio/resources/hvac.rb b/HPXMLtoOpenStudio/resources/hvac.rb
index 3e1733dd90..816d1a334b 100644
--- a/HPXMLtoOpenStudio/resources/hvac.rb
+++ b/HPXMLtoOpenStudio/resources/hvac.rb
@@ -1030,7 +1030,8 @@ def self.apply_boiler(runner, model, heating_system, hvac_sequential_load_fracs,
oat_low = nil
oat_hwst_high = nil
oat_hwst_low = nil
- design_temp = 180.0 # F
+ supply_temp = heating_system.distribution_system.hydronic_supply_temp
+ return_temp = heating_system.distribution_system.hydronic_return_temp
if oat_reset_enabled
if oat_high.nil? || oat_low.nil? || oat_hwst_low.nil? || oat_hwst_high.nil?
@@ -1047,8 +1048,8 @@ def self.apply_boiler(runner, model, heating_system, hvac_sequential_load_fracs,
loop_sizing = plant_loop.sizingPlant
loop_sizing.setLoopType('Heating')
- loop_sizing.setDesignLoopExitTemperature(UnitConversions.convert(design_temp, 'F', 'C'))
- loop_sizing.setLoopDesignTemperatureDifference(UnitConversions.convert(20.0, 'deltaF', 'deltaC'))
+ loop_sizing.setDesignLoopExitTemperature(UnitConversions.convert(supply_temp, 'F', 'C'))
+ loop_sizing.setLoopDesignTemperatureDifference(UnitConversions.convert(supply_temp - return_temp, 'deltaF', 'deltaC'))
# Pump
pump_w = get_pump_power_watts(heating_system)
@@ -1069,7 +1070,7 @@ def self.apply_boiler(runner, model, heating_system, hvac_sequential_load_fracs,
boiler_RatedHWRT = UnitConversions.convert(80.0, 'F', 'C')
plr_Rated = 1.0
plr_Design = 1.0
- boiler_DesignHWRT = UnitConversions.convert(design_temp - 20.0, 'F', 'C')
+ boiler_DesignHWRT = UnitConversions.convert(return_temp, 'F', 'C')
# Efficiency curves are normalized using 80F return water temperature, at 0.254PLR
condBlr_TE_Coeff = [1.058343061, 0.052650153, 0.0087272, 0.001742217, 0.00000333715, 0.000513723]
boilerEff_Norm = heating_system.heating_efficiency_afue / (condBlr_TE_Coeff[0] - condBlr_TE_Coeff[1] * plr_Rated - condBlr_TE_Coeff[2] * plr_Rated**2 - condBlr_TE_Coeff[3] * boiler_RatedHWRT + condBlr_TE_Coeff[4] * boiler_RatedHWRT**2 + condBlr_TE_Coeff[5] * boiler_RatedHWRT * plr_Rated)
@@ -1120,7 +1121,7 @@ def self.apply_boiler(runner, model, heating_system, hvac_sequential_load_fracs,
supply_setpoint = Model.add_schedule_constant(
model,
name: "#{obj_name} hydronic heat supply setpoint",
- value: UnitConversions.convert(design_temp, 'F', 'C'),
+ value: UnitConversions.convert(supply_temp, 'F', 'C'),
limits: EPlus::ScheduleTypeLimitsTemperature
)
@@ -1141,20 +1142,20 @@ def self.apply_boiler(runner, model, heating_system, hvac_sequential_load_fracs,
pipe_demand_outlet.addToNode(plant_loop.demandOutletNode)
bb_ua = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(UnitConversions.convert(loop_sizing.designLoopExitTemperature, 'C', 'F') - 10.0 - 95.0, 'deltaF', 'deltaC') * 3.0 # W/K
- max_water_flow = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(20.0, 'deltaF', 'deltaC') / 4.186 / 998.2 / 1000.0 * 2.0 # m^3/s
-
+ max_water_flow = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / loop_sizing.loopDesignTemperatureDifference / 4.186 / 998.2 / 1000.0 * 2.0 # m^3/s
if heating_system.distribution_system.air_type.to_s == HPXML::AirTypeFanCoil
# Fan
fan_cfm = RatedCFMPerTon * UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'ton') # CFM
fan = create_supply_fan(model, obj_name, 0.0, [fan_cfm], heating_system) # fan energy included in above pump via Electric Auxiliary Energy (EAE)
# Heating Coil
- htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, model.alwaysOnDiscreteSchedule)
- htg_coil.setRatedCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
- htg_coil.setUFactorTimesAreaValue(bb_ua)
- htg_coil.setMaximumWaterFlowRate(max_water_flow)
- htg_coil.setPerformanceInputMethod('NominalCapacity')
- htg_coil.setName(obj_name + ' htg coil')
+ htg_coil = Model.add_coil_heating_water(
+ model,
+ name: "#{obj_name} htg coil",
+ capacity: UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'),
+ ua_value: bb_ua,
+ max_flow_rate: max_water_flow
+ )
plant_loop.addDemandBranchForComponent(htg_coil)
# Cooling Coil (always off)
@@ -1185,13 +1186,13 @@ def self.apply_boiler(runner, model, heating_system, hvac_sequential_load_fracs,
add_fan_pump_disaggregation_ems_program(model, pump, zone_hvac, nil, nil, heating_system)
else
# Heating Coil
- htg_coil = OpenStudio::Model::CoilHeatingWaterBaseboard.new(model)
- htg_coil.setName(obj_name + ' htg coil')
- htg_coil.setConvergenceTolerance(0.001)
- htg_coil.setHeatingDesignCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
- htg_coil.setUFactorTimesAreaValue(bb_ua)
- htg_coil.setMaximumWaterFlowRate(max_water_flow)
- htg_coil.setHeatingDesignCapacityMethod('HeatingDesignCapacity')
+ htg_coil = Model.add_coil_heating_water_baseboard(
+ model,
+ name: "#{obj_name} htg coil",
+ capacity: UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'),
+ ua_value: bb_ua,
+ max_flow_rate: max_water_flow
+ )
plant_loop.addDemandBranchForComponent(htg_coil)
# Baseboard
@@ -4856,6 +4857,178 @@ def self.apply_defrost_ems_program(model, htg_coil, conditioned_space, heat_pump
return program
end
+ # TODO
+ def self.apply_shared_systems(runner, model, hpxml, hpxml_osm_map, shared_systems_map)
+ hvac_unavailable_periods = { htg: Schedule.get_unavailable_periods(runner, SchedulesFile::Columns[:SpaceHeating].name, hpxml.header.unavailable_periods),
+ clg: Schedule.get_unavailable_periods(runner, SchedulesFile::Columns[:SpaceCooling].name, hpxml.header.unavailable_periods) }
+
+ # Create map of shared systems => (Map of hpxml_bldg => conditioned zone)
+ shared_systems_to_zones_map = {}
+ shared_systems_map.values.each do |hvac_systems|
+ shared_systems = hvac_systems.select { |h| h.sameas_id.nil? }
+ next if shared_systems.empty?
+
+ shared_systems_to_zones_map[shared_systems] = {}
+
+ # Populate zones
+ shared_system_ids = shared_systems.map { |h| h.id }
+ shared_systems_map.each do |hpxml_bldg, hvac_systems2|
+ next unless hvac_systems2.select { |h| !h.sameas_id.nil? && shared_system_ids.include?(h.sameas_id) }
+
+ unit_model = hpxml_osm_map[hpxml_bldg]
+ cond_zone_name = unit_model.getThermalZones.find { |z| z.additionalProperties.getFeatureAsString('ObjectType').to_s == HPXML::LocationConditionedSpace }.name.to_s
+ cond_zone = model.getThermalZones.find { |z| z.name.to_s == cond_zone_name }
+ shared_systems_to_zones_map[shared_systems][hpxml_bldg] = cond_zone
+ end
+ end
+
+ # Apply to model
+ shared_systems_to_zones_map.each do |shared_systems, cond_zones_map|
+ shared_boilers = shared_systems.select { |h| h.is_a?(HPXML::HeatingSystem) && h.heating_system_type == HPXML::HVACTypeBoiler }
+ if not shared_boilers.empty?
+ apply_shared_boiler(model, hpxml, shared_boilers, cond_zones_map, hvac_unavailable_periods)
+ else
+ fail 'Unexpected shared systems.'
+ end
+ end
+ end
+
+ # FIXME
+ def self.apply_shared_boiler(model, hpxml, hpxml_boilers, control_zones_map, hvac_unavailable_periods)
+ obj_name = Constants::ObjectTypeBoiler
+
+ # Get distribution system
+ check_distribution_system(hpxml_boilers[0], HPXML::HVACTypeBoiler)
+ distribution_system = hpxml_boilers[0].distribution_system
+ supply_temp = distribution_system.hydronic_supply_temp # deg-F
+ return_temp = distribution_system.hydronic_return_temp # deg-F
+
+ # Plant Loop
+ plant_loop = OpenStudio::Model::PlantLoop.new(model)
+ plant_loop.setName(obj_name + ' hydronic heat loop')
+ plant_loop.setFluidType('Water')
+ plant_loop.setMaximumLoopTemperature(100)
+ plant_loop.setMinimumLoopTemperature(0)
+ plant_loop.setMinimumLoopFlowRate(0)
+ plant_loop.autocalculatePlantLoopVolume()
+ # Set plant loop distribution scheme
+ if hpxml.header.shared_boiler_operation == HPXML::SharedBoilerOperationSequenced
+ plant_loop.setLoadDistributionScheme('SequentialLoad')
+ elsif hpxml.header.shared_boiler_operation == HPXML::SharedBoilerOperationSimultaneous
+ plant_loop.setLoadDistributionScheme('UniformLoad')
+ end
+
+ loop_sizing = plant_loop.sizingPlant
+ loop_sizing.setLoopType('Heating')
+ loop_sizing.setDesignLoopExitTemperature(UnitConversions.convert(supply_temp, 'F', 'C'))
+ loop_sizing.setLoopDesignTemperatureDifference(UnitConversions.convert(supply_temp - return_temp, 'deltaF', 'deltaC'))
+
+ # Pump
+ # FIXME
+ motor_efficiency = 0.9
+ if distribution_system.hydronic_variable_speed_pump
+ pump = Model.add_pump_variable_speed(
+ model,
+ name: "#{obj_name} hydronic pump",
+ rated_power: nil,
+ motor_efficiency: motor_efficiency
+ )
+ else
+ pump = Model.add_pump_constant_speed(
+ model,
+ name: "#{obj_name} hydronic pump",
+ rated_power: nil,
+ rated_flow_rate: nil,
+ motor_efficiency: motor_efficiency
+ )
+ end
+ pump.addToNode(plant_loop.supplyInletNode)
+
+ # Hot Water Boilers
+ total_heating_capacity = 0
+ hpxml_boilers.each do |heating_system|
+ boiler = OpenStudio::Model::BoilerHotWater.new(model)
+ boiler.setName(obj_name)
+ boiler.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
+ boiler.setNominalThermalEfficiency(heating_system.heating_efficiency_afue)
+ boiler.setEfficiencyCurveTemperatureEvaluationVariable('LeavingBoiler')
+ boiler_eff_curve = Model.add_curve_bicubic(
+ model,
+ name: 'NonCondensingBoilerEff',
+ coeff: [1.111720116, 0.078614078, -0.400425756, 0.0, -0.000156783, 0.009384599, 0.234257955, 1.32927e-06, -0.004446701, -1.22498e-05],
+ min_x: 0.1, max_x: 1.0, min_y: 20.0, max_y: 80.0
+ )
+ boiler.setNormalizedBoilerEfficiencyCurve(boiler_eff_curve)
+ boiler.setMinimumPartLoadRatio(0.0)
+ boiler.setMaximumPartLoadRatio(1.0)
+ boiler.setBoilerFlowMode('LeavingSetpointModulated')
+ boiler.setOptimumPartLoadRatio(1.0)
+ boiler.setWaterOutletUpperTemperatureLimit(99.9)
+ boiler.setOnCycleParasiticElectricLoad(0)
+ boiler.setNominalCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
+ boiler.setOffCycleParasiticFuelLoad(UnitConversions.convert(heating_system.pilot_light_btuh.to_f, 'Btu/hr', 'W'))
+ plant_loop.addSupplyBranchForComponent(boiler)
+ boiler.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
+
+ total_heating_capacity += heating_system.heating_capacity
+ end
+
+ supply_setpoint = Model.add_schedule_constant(
+ model,
+ name: "#{obj_name} hydronic heat supply setpoint",
+ value: UnitConversions.convert(supply_temp, 'F', 'C'),
+ limits: EPlus::ScheduleTypeLimitsTemperature
+ )
+
+ setpoint_manager_scheduled = OpenStudio::Model::SetpointManagerScheduled.new(model, supply_setpoint)
+ setpoint_manager_scheduled.setName(obj_name + ' hydronic heat loop setpoint manager')
+ setpoint_manager_scheduled.setControlVariable('Temperature')
+ setpoint_manager_scheduled.addToNode(plant_loop.supplyOutletNode)
+
+ pipe_supply_bypass = OpenStudio::Model::PipeAdiabatic.new(model)
+ plant_loop.addSupplyBranchForComponent(pipe_supply_bypass)
+ pipe_supply_outlet = OpenStudio::Model::PipeAdiabatic.new(model)
+ pipe_supply_outlet.addToNode(plant_loop.supplyOutletNode)
+ pipe_demand_bypass = OpenStudio::Model::PipeAdiabatic.new(model)
+ plant_loop.addDemandBranchForComponent(pipe_demand_bypass)
+ pipe_demand_inlet = OpenStudio::Model::PipeAdiabatic.new(model)
+ pipe_demand_inlet.addToNode(plant_loop.demandInletNode)
+ pipe_demand_outlet = OpenStudio::Model::PipeAdiabatic.new(model)
+ pipe_demand_outlet.addToNode(plant_loop.demandOutletNode)
+
+ # FIXME: Doesn't currently respond to Heating/Cooling seasons, if defined
+ # FIXME: Cannot currently be mixed with in-unit HVAC systems that serve a fraction of the load
+ hvac_sequential_load_fracs = { htg: [1], clg: [1] }
+
+ if distribution_system.distribution_system_type == HPXML::HVACDistributionTypeHydronic
+ total_heating_design_load = control_zones_map.keys.map { |hpxml_bldg| hpxml_bldg.hvac_plant.hdl_total }.sum
+ control_zones_map.each do |hpxml_bldg, control_zone|
+ # Apportion total boiler heating capacity to each zone based on the HPXML Building's heating design load
+ zone_heating_capacity = hpxml_bldg.hvac_plant.hdl_total / total_heating_design_load * total_heating_capacity
+
+ bb_ua = UnitConversions.convert(zone_heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(UnitConversions.convert(loop_sizing.designLoopExitTemperature, 'C', 'F') - 10.0 - 95.0, 'deltaF', 'deltaC') * 3.0 # W/K
+ max_water_flow = UnitConversions.convert(zone_heating_capacity, 'Btu/hr', 'W') / loop_sizing.loopDesignTemperatureDifference / 4.186 / 998.2 / 1000.0 * 2.0 # m^3/s
+
+ # Heating Coil
+ htg_coil = Model.add_coil_heating_water_baseboard(
+ model,
+ name: "#{obj_name} htg coil",
+ capacity: UnitConversions.convert(zone_heating_capacity, 'Btu/hr', 'W'),
+ ua_value: bb_ua,
+ max_flow_rate: max_water_flow
+ )
+ plant_loop.addDemandBranchForComponent(htg_coil)
+
+ # Baseboard
+ zone_hvac = OpenStudio::Model::ZoneHVACBaseboardConvectiveWater.new(model, model.alwaysOnDiscreteSchedule, htg_coil)
+ zone_hvac.setName(obj_name + ' baseboard')
+ zone_hvac.addToThermalZone(control_zone)
+
+ set_sequential_load_fractions(model, control_zone, zone_hvac, hvac_sequential_load_fracs, hvac_unavailable_periods)
+ end
+ end
+ end
+
# Calculates the rated airflow rate for a given speed.
#
# @param net_rated_capacity [Double] Net rated capacity for the given speed (Btu/hr)
@@ -4866,6 +5039,24 @@ def self.calc_rated_airflow(net_rated_capacity, rated_cfm_per_ton, output_units)
return UnitConversions.convert(net_rated_capacity, 'Btu/hr', 'ton') * UnitConversions.convert(rated_cfm_per_ton, 'cfm', output_units)
end
+ # TODO
+ #
+ # @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
+ # @param heating_system [TODO] TODO
+ # @param cooling_system [TODO] TODO
+ # @return [TODO] TODO
+ def self.is_attached_heating_and_cooling_systems(hpxml_bldg, heating_system, cooling_system)
+ # Now only allows furnace+AC
+ if not ((hpxml_bldg.heating_systems.include? heating_system) && (hpxml_bldg.cooling_systems.include? cooling_system))
+ return false
+ end
+ if not (heating_system.heating_system_type == HPXML::HVACTypeFurnace && cooling_system.cooling_system_type == HPXML::HVACTypeCentralAirConditioner)
+ return false
+ end
+
+ return true
+ end
+
# Returns a list of HPXML HVAC (heating/cooling) systems, incorporating whether multiple systems are
# connected to the same distribution system (e.g., a furnace + central air conditioner w/ the same ducts).
#
diff --git a/HPXMLtoOpenStudio/resources/hvac_sizing.rb b/HPXMLtoOpenStudio/resources/hvac_sizing.rb
index b230d55140..08a773ab0a 100644
--- a/HPXMLtoOpenStudio/resources/hvac_sizing.rb
+++ b/HPXMLtoOpenStudio/resources/hvac_sizing.rb
@@ -139,6 +139,14 @@ def self.is_system_to_skip(hvac_heating, hvac_cooling, zone)
return true
end
+ # Don't size shared systems serving multiple dwelling units for whole MF building models
+ if !hvac_heating.nil? && hvac_heating.is_shared_system_serving_multiple_dwelling_units
+ return true
+ end
+ if !hvac_cooling.nil? && hvac_cooling.is_shared_system_serving_multiple_dwelling_units
+ return true
+ end
+
return false
end
diff --git a/HPXMLtoOpenStudio/resources/model.rb b/HPXMLtoOpenStudio/resources/model.rb
index 7245a1afd1..997904c1cc 100644
--- a/HPXMLtoOpenStudio/resources/model.rb
+++ b/HPXMLtoOpenStudio/resources/model.rb
@@ -331,6 +331,43 @@ def self.add_coil_heating(model, name:, efficiency:, capacity:, fuel_type:, off_
return coil
end
+ # Adds a CoilHeatingWater to the OpenStudio model.
+ #
+ # @param model [OpenStudio::Model::Model] OpenStudio Model object
+ # @param name [String] Name for the OpenStudio object
+ # @param capacity [Double] Heating capacity (W)
+ # @param ua_value [Double] UA value (W/K)
+ # @param max_flow_rate [Double] Maximum water flow rate (m^3/s)
+ # @return [OpenStudio::Model::CoilHeatingWater] The model object
+ def self.add_coil_heating_water(model, name:, capacity:, ua_value:, max_flow_rate:)
+ coil = OpenStudio::Model::CoilHeatingWater.new(model, model.alwaysOnDiscreteSchedule)
+ coil.setRatedCapacity(capacity)
+ coil.setUFactorTimesAreaValue(ua_value)
+ coil.setMaximumWaterFlowRate(max_flow_rate)
+ coil.setPerformanceInputMethod('NominalCapacity')
+ coil.setName(name)
+ return coil
+ end
+
+ # Adds a CoilHeatingWaterBaseboard to the OpenStudio model.
+ #
+ # @param model [OpenStudio::Model::Model] OpenStudio Model object
+ # @param name [String] Name for the OpenStudio object
+ # @param capacity [Double] Heating capacity (W)
+ # @param ua_value [Double] UA value (W/K)
+ # @param max_flow_rate [Double] Maximum water flow rate (m^3/s)
+ # @return [OpenStudio::Model::CoilHeatingWaterBaseboard] The model object
+ def self.add_coil_heating_water_baseboard(model, name:, capacity:, ua_value:, max_flow_rate:)
+ coil = OpenStudio::Model::CoilHeatingWaterBaseboard.new(model)
+ coil.setName(name)
+ coil.setConvergenceTolerance(0.001)
+ coil.setHeatingDesignCapacity(capacity)
+ coil.setUFactorTimesAreaValue(ua_value)
+ coil.setMaximumWaterFlowRate(max_flow_rate)
+ coil.setHeatingDesignCapacityMethod('HeatingDesignCapacity')
+ return coil
+ end
+
# Adds a FanSystemModel object to the OpenStudio model.
#
# @param model [OpenStudio::Model::Model] OpenStudio Model object
@@ -382,26 +419,65 @@ def self.add_plant_loop(model, name:, fluid_type: EPlus::FluidWater, glycol_conc
return plant_loop
end
+ # Adds a PumpConstantSpeed object to the OpenStudio model.
+ #
+ # @param model [OpenStudio::Model::Model] OpenStudio Model object
+ # @param name [String] Name for the OpenStudio object
+ # @param rated_power [Double] Design power consumption (W)
+ # @param rated_flow_rate [Double] Design flow rate (m^3/s)
+ # @param rated_pump_head [Double] Design pump head (Pa)
+ # @param motor_efficiency [Double] Motor efficiency (frac)
+ # @param control_type [String] Pump control type (EPlus::PumpControlTypeXXX)
+ # @return [OpenStudio::Model::PumpConstantSpeed] The model object
+ def self.add_pump_constant_speed(model, name:, rated_power:, rated_flow_rate: nil, rated_pump_head: 90000, motor_efficiency: 0.3, control_type: EPlus::PumpControlTypeIntermittent)
+ pump = OpenStudio::Model::PumpConstantSpeed.new(model)
+ pump.setName(name)
+ pump.setMotorEfficiency(motor_efficiency)
+ if not rated_power.nil?
+ pump.setRatedPowerConsumption(rated_power)
+ end
+ if not rated_pump_head.nil?
+ pump.setRatedPumpHead(rated_pump_head)
+ end
+ if not rated_flow_rate.nil?
+ pump.setRatedFlowRate(rated_flow_rate)
+ end
+ pump.setFractionofMotorInefficienciestoFluidStream(0.2)
+ pump.setPumpControlType(control_type)
+ return pump
+ end
+
# Adds a PumpVariableSpeed object to the OpenStudio model.
#
# @param model [OpenStudio::Model::Model] OpenStudio Model object
# @param name [String] Name for the OpenStudio object
# @param rated_power [Double] Design power consumption (W)
+ # @param rated_flow_rate [Double] Design flow rate (m^3/s)
+ # @param rated_pump_head [Double] Design pump head (Pa)
+ # @param motor_efficiency [Double] Motor efficiency (frac)
# @param control_type [String] Pump control type (EPlus::PumpControlTypeXXX)
# @return [OpenStudio::Model::PumpVariableSpeed] The model object
- def self.add_pump_variable_speed(model, name:, rated_power:, control_type: EPlus::PumpControlTypeIntermittent)
+ def self.add_pump_variable_speed(model, name:, rated_power:, rated_flow_rate: nil, rated_pump_head: 20000, motor_efficiency: 0.85, control_type: EPlus::PumpControlTypeIntermittent)
pump = OpenStudio::Model::PumpVariableSpeed.new(model)
pump.setName(name)
- pump.setMotorEfficiency(0.85)
- pump.setRatedPowerConsumption(rated_power)
- pump_eff = 0.75 # Overall efficiency of the pump
- if rated_power > 0
- pump.setRatedPumpHead(20000)
- flow_rate = pump_eff * rated_power / pump.ratedPumpHead
- pump.setRatedFlowRate([flow_rate, 0.00001].max)
- else
- pump.setRatedPumpHead(1)
- pump.setRatedFlowRate(0.01)
+ pump.setMotorEfficiency(motor_efficiency)
+ if not rated_power.nil?
+ pump.setRatedPowerConsumption(rated_power)
+ if rated_power > 0
+ if not rated_pump_head.nil?
+ pump.setRatedPumpHead(20000)
+ if not rated_flow_rate.nil?
+ pump.setRatedFlowRate(rated_flow_rate)
+ else
+ pump_eff = 0.75 # Overall efficiency of the pump
+ rated_flow_rate = pump_eff * rated_power / pump.ratedPumpHead
+ pump.setRatedFlowRate([rated_flow_rate, 0.00001].max)
+ end
+ end
+ else
+ pump.setRatedPumpHead(1)
+ pump.setRatedFlowRate(0.01)
+ end
end
pump.setFractionofMotorInefficienciestoFluidStream(0)
pump.setCoefficient1ofthePartLoadPerformanceCurve(0)
diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb
index 5ee71ebcac..b3822d9004 100644
--- a/HPXMLtoOpenStudio/resources/waterheater.rb
+++ b/HPXMLtoOpenStudio/resources/waterheater.rb
@@ -698,14 +698,10 @@ def self.apply_solar_thermal(model, spaces, hpxml_bldg, plantloop_map)
setpoint_manager.setName(obj_name + ' setpoint mgr')
setpoint_manager.setControlVariable('Temperature')
- pump = OpenStudio::Model::PumpConstantSpeed.new(model)
- pump.setName(obj_name + ' pump')
- pump.setRatedPumpHead(90000)
- pump.setRatedPowerConsumption(pump_power)
- pump.setMotorEfficiency(0.3)
- pump.setFractionofMotorInefficienciestoFluidStream(0.2)
- pump.setPumpControlType(EPlus::PumpControlTypeIntermittent)
- pump.setRatedFlowRate(UnitConversions.convert(coll_flow, 'cfm', 'm^3/s'))
+ pump = Model.add_pump_constant_speed(model,
+ name: "#{obj_name} pump",
+ rated_power: pump_power,
+ rated_flow_rate: UnitConversions.convert(coll_flow, 'cfm', 'm^3/s'))
pump.addToNode(plant_loop.supplyInletNode)
pump.additionalProperties.setFeature('HPXML_ID', solar_thermal_system.water_heating_system.id) # Used by reporting measure
pump.additionalProperties.setFeature('ObjectType', Constants::ObjectTypeSolarHotWater) # Used by reporting measure
diff --git a/ReportSimulationOutput/README.md b/ReportSimulationOutput/README.md
index d103c3e0da..927aa9c601 100644
--- a/ReportSimulationOutput/README.md
+++ b/ReportSimulationOutput/README.md
@@ -1,819 +1,819 @@
-
-###### (Automatically generated documentation)
-
-# HPXML Simulation Output Report
-
-## Description
-Reports simulation outputs for residential HPXML-based models.
-
-Processes EnergyPlus simulation outputs in order to generate an annual output file and an optional timeseries output file.
-
-## Arguments
-
-
-**Output Format**
-
-The file format of the annual (and timeseries, if requested) outputs. If 'csv_dview' is selected, the timeseries CSV file will include header rows that facilitate opening the file in the DView application.
-
-- **Name:** ``output_format``
-- **Type:** ``Choice``
-
-- **Required:** ``false``
-
-- **Choices:** `csv`, `json`, `msgpack`, `csv_dview`
-
-
-
-**Generate Annual Output: Total Consumptions**
-
-Generates annual energy consumptions for the total building.
-
-- **Name:** ``include_annual_total_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Fuel Consumptions**
-
-Generates annual energy consumptions for each fuel type.
-
-- **Name:** ``include_annual_fuel_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: End Use Consumptions**
-
-Generates annual energy consumptions for each end use.
-
-- **Name:** ``include_annual_end_use_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: System Use Consumptions**
-
-Generates annual energy consumptions for each end use of each HVAC and water heating system.
-
-- **Name:** ``include_annual_system_use_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Emissions**
-
-Generates annual emissions. Requires the appropriate HPXML inputs to be specified.
-
-- **Name:** ``include_annual_emissions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Emission Fuel Uses**
-
-Generates annual emissions for each fuel type. Requires the appropriate HPXML inputs to be specified.
-
-- **Name:** ``include_annual_emission_fuels``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Emission End Uses**
-
-Generates annual emissions for each end use. Requires the appropriate HPXML inputs to be specified.
-
-- **Name:** ``include_annual_emission_end_uses``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Total Loads**
-
-Generates annual heating, cooling, and hot water loads.
-
-- **Name:** ``include_annual_total_loads``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Unmet Hours**
-
-Generates annual unmet hours for heating, cooling, and EV driving.
-
-- **Name:** ``include_annual_unmet_hours``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Peak Fuels**
-
-Generates annual/summer/winter electricity peaks.
-
-- **Name:** ``include_annual_peak_fuels``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Peak Loads**
-
-Generates annual peak loads for heating/cooling.
-
-- **Name:** ``include_annual_peak_loads``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Component Loads**
-
-Generates annual heating and cooling loads disaggregated by component type.
-
-- **Name:** ``include_annual_component_loads``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Hot Water Uses**
-
-Generates annual hot water usages for each end use.
-
-- **Name:** ``include_annual_hot_water_uses``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: HVAC Summary**
-
-Generates HVAC capacities, design temperatures, and design loads.
-
-- **Name:** ``include_annual_hvac_summary``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Annual Output: Resilience**
-
-Generates annual resilience outputs.
-
-- **Name:** ``include_annual_resilience``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Timeseries Reporting Frequency**
-
-The frequency at which to report timeseries output data. Using 'none' will disable timeseries outputs.
-
-- **Name:** ``timeseries_frequency``
-- **Type:** ``Choice``
-
-- **Required:** ``false``
-
-- **Choices:** `none`, `timestep`, `hourly`, `daily`, `monthly`
-
-
-
-**Generate Timeseries Output: Total Consumptions**
-
-Generates timeseries energy consumptions for the total building.
-
-- **Name:** ``include_timeseries_total_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Fuel Consumptions**
-
-Generates timeseries energy consumptions for each fuel type.
-
-- **Name:** ``include_timeseries_fuel_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: End Use Consumptions**
-
-Generates timeseries energy consumptions for each end use.
-
-- **Name:** ``include_timeseries_end_use_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: System Use Consumptions**
-
-Generates timeseries energy consumptions for each end use of each HVAC and water heating system.
-
-- **Name:** ``include_timeseries_system_use_consumptions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Emissions**
-
-Generates timeseries emissions. Requires the appropriate HPXML inputs to be specified.
-
-- **Name:** ``include_timeseries_emissions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Emission Fuel Uses**
-
-Generates timeseries emissions for each fuel type. Requires the appropriate HPXML inputs to be specified.
-
-- **Name:** ``include_timeseries_emission_fuels``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Emission End Uses**
-
-Generates timeseries emissions for each end use. Requires the appropriate HPXML inputs to be specified.
-
-- **Name:** ``include_timeseries_emission_end_uses``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Hot Water Uses**
-
-Generates timeseries hot water usages for each end use.
-
-- **Name:** ``include_timeseries_hot_water_uses``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Total Loads**
-
-Generates timeseries heating, cooling, and hot water loads.
-
-- **Name:** ``include_timeseries_total_loads``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Component Loads**
-
-Generates timeseries heating and cooling loads disaggregated by component type.
-
-- **Name:** ``include_timeseries_component_loads``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Unmet Hours**
-
-Generates timeseries unmet hours for heating, cooling, and EV driving.
-
-- **Name:** ``include_timeseries_unmet_hours``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Zone Temperatures**
-
-Generates timeseries temperatures for each thermal zone.
-
-- **Name:** ``include_timeseries_zone_temperatures``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Zone Conditions**
-
-Generates timeseries temperatures and humidities for each thermal zone.
-
-- **Name:** ``include_timeseries_zone_conditions``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Airflows**
-
-Generates timeseries airflows.
-
-- **Name:** ``include_timeseries_airflows``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Weather**
-
-Generates timeseries weather data.
-
-- **Name:** ``include_timeseries_weather``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Resilience**
-
-Generates timeseries resilience outputs.
-
-- **Name:** ``include_timeseries_resilience``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Timestamp Convention**
-
-Determines whether timeseries timestamps use the start-of-period or end-of-period convention. Doesn't apply if the output format is 'csv_dview'.
-
-- **Name:** ``timeseries_timestamp_convention``
-- **Type:** ``Choice``
-
-- **Required:** ``false``
-
-- **Choices:** `start`, `end`
-
-
-
-**Generate Timeseries Output: Number of Decimal Places**
-
-Allows overriding the default number of decimal places for timeseries outputs.
-
-- **Name:** ``timeseries_num_decimal_places``
-- **Type:** ``Integer``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Add TimeDST Column**
-
-Optionally add, in addition to the default local standard Time column, a local clock TimeDST column. Requires that daylight saving time is enabled.
-
-- **Name:** ``add_timeseries_dst_column``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: Add TimeUTC Column**
-
-Optionally add, in addition to the default local standard Time column, a local clock TimeUTC column. If the time zone UTC offset is not provided in the HPXML file, the time zone in the EPW header will be used.
-
-- **Name:** ``add_timeseries_utc_column``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: EnergyPlus Output Variables**
-
-Optionally generates timeseries EnergyPlus output variables. If multiple output variables are desired, use a comma-separated list. Do not include key values; by default all key values will be requested. Example: "Zone People Occupant Count, Zone People Total Heating Energy"
-
-- **Name:** ``user_output_variables``
-- **Type:** ``String``
-
-- **Required:** ``false``
-
-
-
-**Generate Timeseries Output: EnergyPlus Output Meters**
-
-Optionally generates timeseries EnergyPlus output meters. If multiple output meters are desired, use a comma-separated list. Example: "Electricity:Facility, HeatingCoils:EnergyTransfer"
-
-- **Name:** ``user_output_meters``
-- **Type:** ``String``
-
-- **Required:** ``false``
-
-
-
-**Annual Output File Name**
-
-If not provided, defaults to 'results_annual.csv' (or 'results_annual.json' or 'results_annual.msgpack').
-
-- **Name:** ``annual_output_file_name``
-- **Type:** ``String``
-
-- **Required:** ``false``
-
-
-
-**Timeseries Output File Name**
-
-If not provided, defaults to 'results_timeseries.csv' (or 'results_timeseries.json' or 'results_timeseries.msgpack').
-
-- **Name:** ``timeseries_output_file_name``
-- **Type:** ``String``
-
-- **Required:** ``false``
-
-
-
-
-
-
-
-## Outputs
-All possible measure outputs are listed below. Actual outputs depend on measure argument values provided.
-
-
-- ``energy_use_total_m_btu``
-
-- ``energy_use_net_m_btu``
-
-- ``fuel_use_electricity_total_m_btu``
-
-- ``fuel_use_electricity_net_m_btu``
-
-- ``fuel_use_natural_gas_total_m_btu``
-
-- ``fuel_use_fuel_oil_total_m_btu``
-
-- ``fuel_use_propane_total_m_btu``
-
-- ``fuel_use_wood_cord_total_m_btu``
-
-- ``fuel_use_wood_pellets_total_m_btu``
-
-- ``fuel_use_coal_total_m_btu``
-
-- ``end_use_electricity_heating_m_btu``
-
-- ``end_use_electricity_heating_fans_pumps_m_btu``
-
-- ``end_use_electricity_heating_heat_pump_backup_m_btu``
-
-- ``end_use_electricity_heating_heat_pump_backup_fans_pumps_m_btu``
-
-- ``end_use_electricity_cooling_m_btu``
-
-- ``end_use_electricity_cooling_fans_pumps_m_btu``
-
-- ``end_use_electricity_hot_water_m_btu``
-
-- ``end_use_electricity_hot_water_recirc_pump_m_btu``
-
-- ``end_use_electricity_hot_water_solar_thermal_pump_m_btu``
-
-- ``end_use_electricity_lighting_interior_m_btu``
-
-- ``end_use_electricity_lighting_garage_m_btu``
-
-- ``end_use_electricity_lighting_exterior_m_btu``
-
-- ``end_use_electricity_mech_vent_m_btu``
-
-- ``end_use_electricity_mech_vent_preheating_m_btu``
-
-- ``end_use_electricity_mech_vent_precooling_m_btu``
-
-- ``end_use_electricity_whole_house_fan_m_btu``
-
-- ``end_use_electricity_refrigerator_m_btu``
-
-- ``end_use_electricity_freezer_m_btu``
-
-- ``end_use_electricity_dehumidifier_m_btu``
-
-- ``end_use_electricity_dishwasher_m_btu``
-
-- ``end_use_electricity_clothes_washer_m_btu``
-
-- ``end_use_electricity_clothes_dryer_m_btu``
-
-- ``end_use_electricity_range_oven_m_btu``
-
-- ``end_use_electricity_ceiling_fan_m_btu``
-
-- ``end_use_electricity_television_m_btu``
-
-- ``end_use_electricity_plug_loads_m_btu``
-
-- ``end_use_electricity_well_pump_m_btu``
-
-- ``end_use_electricity_pool_heater_m_btu``
-
-- ``end_use_electricity_pool_pump_m_btu``
-
-- ``end_use_electricity_permanent_spa_heater_m_btu``
-
-- ``end_use_electricity_permanent_spa_pump_m_btu``
-
-- ``end_use_electricity_pv_m_btu``
-
-- ``end_use_electricity_generator_m_btu``
-
-- ``end_use_electricity_battery_m_btu``
-
-- ``end_use_electricity_electric_vehicle_charging_m_btu``
-
-- ``end_use_natural_gas_heating_m_btu``
-
-- ``end_use_natural_gas_heating_heat_pump_backup_m_btu``
-
-- ``end_use_natural_gas_hot_water_m_btu``
-
-- ``end_use_natural_gas_clothes_dryer_m_btu``
-
-- ``end_use_natural_gas_range_oven_m_btu``
-
-- ``end_use_natural_gas_mech_vent_preheating_m_btu``
-
-- ``end_use_natural_gas_pool_heater_m_btu``
-
-- ``end_use_natural_gas_permanent_spa_heater_m_btu``
-
-- ``end_use_natural_gas_grill_m_btu``
-
-- ``end_use_natural_gas_lighting_m_btu``
-
-- ``end_use_natural_gas_fireplace_m_btu``
-
-- ``end_use_natural_gas_generator_m_btu``
-
-- ``end_use_fuel_oil_heating_m_btu``
-
-- ``end_use_fuel_oil_heating_heat_pump_backup_m_btu``
-
-- ``end_use_fuel_oil_hot_water_m_btu``
-
-- ``end_use_fuel_oil_clothes_dryer_m_btu``
-
-- ``end_use_fuel_oil_range_oven_m_btu``
-
-- ``end_use_fuel_oil_mech_vent_preheating_m_btu``
-
-- ``end_use_fuel_oil_grill_m_btu``
-
-- ``end_use_fuel_oil_lighting_m_btu``
-
-- ``end_use_fuel_oil_fireplace_m_btu``
-
-- ``end_use_fuel_oil_generator_m_btu``
-
-- ``end_use_propane_heating_m_btu``
-
-- ``end_use_propane_heating_heat_pump_backup_m_btu``
-
-- ``end_use_propane_hot_water_m_btu``
-
-- ``end_use_propane_clothes_dryer_m_btu``
-
-- ``end_use_propane_range_oven_m_btu``
-
-- ``end_use_propane_mech_vent_preheating_m_btu``
-
-- ``end_use_propane_grill_m_btu``
-
-- ``end_use_propane_lighting_m_btu``
-
-- ``end_use_propane_fireplace_m_btu``
-
-- ``end_use_propane_generator_m_btu``
-
-- ``end_use_wood_cord_heating_m_btu``
-
-- ``end_use_wood_cord_heating_heat_pump_backup_m_btu``
-
-- ``end_use_wood_cord_hot_water_m_btu``
-
-- ``end_use_wood_cord_clothes_dryer_m_btu``
-
-- ``end_use_wood_cord_range_oven_m_btu``
-
-- ``end_use_wood_cord_mech_vent_preheating_m_btu``
-
-- ``end_use_wood_cord_grill_m_btu``
-
-- ``end_use_wood_cord_lighting_m_btu``
-
-- ``end_use_wood_cord_fireplace_m_btu``
-
-- ``end_use_wood_cord_generator_m_btu``
-
-- ``end_use_wood_pellets_heating_m_btu``
-
-- ``end_use_wood_pellets_heating_heat_pump_backup_m_btu``
-
-- ``end_use_wood_pellets_hot_water_m_btu``
-
-- ``end_use_wood_pellets_clothes_dryer_m_btu``
-
-- ``end_use_wood_pellets_range_oven_m_btu``
-
-- ``end_use_wood_pellets_mech_vent_preheating_m_btu``
-
-- ``end_use_wood_pellets_grill_m_btu``
-
-- ``end_use_wood_pellets_lighting_m_btu``
-
-- ``end_use_wood_pellets_fireplace_m_btu``
-
-- ``end_use_wood_pellets_generator_m_btu``
-
-- ``end_use_coal_heating_m_btu``
-
-- ``end_use_coal_heating_heat_pump_backup_m_btu``
-
-- ``end_use_coal_hot_water_m_btu``
-
-- ``end_use_coal_clothes_dryer_m_btu``
-
-- ``end_use_coal_range_oven_m_btu``
-
-- ``end_use_coal_mech_vent_preheating_m_btu``
-
-- ``end_use_coal_grill_m_btu``
-
-- ``end_use_coal_lighting_m_btu``
-
-- ``end_use_coal_fireplace_m_btu``
-
-- ``end_use_coal_generator_m_btu``
-
-- ``load_heating_delivered_m_btu``
-
-- ``load_heating_heat_pump_backup_m_btu``
-
-- ``load_cooling_delivered_m_btu``
-
-- ``load_hot_water_delivered_m_btu``
-
-- ``load_hot_water_tank_losses_m_btu``
-
-- ``load_hot_water_desuperheater_m_btu``
-
-- ``load_hot_water_solar_thermal_m_btu``
-
-- ``unmet_hours_heating_hr``
-
-- ``unmet_hours_cooling_hr``
-
-- ``unmet_hours_ev_driving_hr``
-
-- ``peak_electricity_winter_total_w``
-
-- ``peak_electricity_summer_total_w``
-
-- ``peak_electricity_annual_total_w``
-
-- ``peak_electricity_winter_net_w``
-
-- ``peak_electricity_summer_net_w``
-
-- ``peak_electricity_annual_net_w``
-
-- ``peak_load_heating_delivered_k_btu_hr``
-
-- ``peak_load_cooling_delivered_k_btu_hr``
-
-- ``component_load_heating_roofs_m_btu``
-
-- ``component_load_heating_ceilings_m_btu``
-
-- ``component_load_heating_walls_m_btu``
-
-- ``component_load_heating_rim_joists_m_btu``
-
-- ``component_load_heating_foundation_walls_m_btu``
-
-- ``component_load_heating_doors_m_btu``
-
-- ``component_load_heating_windows_conduction_m_btu``
-
-- ``component_load_heating_windows_solar_m_btu``
-
-- ``component_load_heating_skylights_conduction_m_btu``
-
-- ``component_load_heating_skylights_solar_m_btu``
-
-- ``component_load_heating_floors_m_btu``
-
-- ``component_load_heating_slabs_m_btu``
-
-- ``component_load_heating_internal_mass_m_btu``
-
-- ``component_load_heating_infiltration_m_btu``
-
-- ``component_load_heating_natural_ventilation_m_btu``
-
-- ``component_load_heating_mechanical_ventilation_m_btu``
-
-- ``component_load_heating_whole_house_fan_m_btu``
-
-- ``component_load_heating_ducts_m_btu``
-
-- ``component_load_heating_internal_gains_m_btu``
-
-- ``component_load_heating_lighting_m_btu``
-
-- ``component_load_cooling_roofs_m_btu``
-
-- ``component_load_cooling_ceilings_m_btu``
-
-- ``component_load_cooling_walls_m_btu``
-
-- ``component_load_cooling_rim_joists_m_btu``
-
-- ``component_load_cooling_foundation_walls_m_btu``
-
-- ``component_load_cooling_doors_m_btu``
-
-- ``component_load_cooling_windows_conduction_m_btu``
-
-- ``component_load_cooling_windows_solar_m_btu``
-
-- ``component_load_cooling_skylights_conduction_m_btu``
-
-- ``component_load_cooling_skylights_solar_m_btu``
-
-- ``component_load_cooling_floors_m_btu``
-
-- ``component_load_cooling_slabs_m_btu``
-
-- ``component_load_cooling_internal_mass_m_btu``
-
-- ``component_load_cooling_infiltration_m_btu``
-
-- ``component_load_cooling_natural_ventilation_m_btu``
-
-- ``component_load_cooling_mechanical_ventilation_m_btu``
-
-- ``component_load_cooling_whole_house_fan_m_btu``
-
-- ``component_load_cooling_ducts_m_btu``
-
-- ``component_load_cooling_internal_gains_m_btu``
-
-- ``component_load_cooling_lighting_m_btu``
-
-- ``hot_water_clothes_washer_gal``
-
-- ``hot_water_dishwasher_gal``
-
-- ``hot_water_fixtures_gal``
-
-- ``hot_water_distribution_waste_gal``
-
-- ``resilience_battery_hr``
-
-
+
+###### (Automatically generated documentation)
+
+# HPXML Simulation Output Report
+
+## Description
+Reports simulation outputs for residential HPXML-based models.
+
+Processes EnergyPlus simulation outputs in order to generate an annual output file and an optional timeseries output file.
+
+## Arguments
+
+
+**Output Format**
+
+The file format of the annual (and timeseries, if requested) outputs. If 'csv_dview' is selected, the timeseries CSV file will include header rows that facilitate opening the file in the DView application.
+
+- **Name:** ``output_format``
+- **Type:** ``Choice``
+
+- **Required:** ``false``
+
+- **Choices:** `csv`, `json`, `msgpack`, `csv_dview`
+
+
+
+**Generate Annual Output: Total Consumptions**
+
+Generates annual energy consumptions for the total building.
+
+- **Name:** ``include_annual_total_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Fuel Consumptions**
+
+Generates annual energy consumptions for each fuel type.
+
+- **Name:** ``include_annual_fuel_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: End Use Consumptions**
+
+Generates annual energy consumptions for each end use.
+
+- **Name:** ``include_annual_end_use_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: System Use Consumptions**
+
+Generates annual energy consumptions for each end use of each HVAC and water heating system.
+
+- **Name:** ``include_annual_system_use_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Emissions**
+
+Generates annual emissions. Requires the appropriate HPXML inputs to be specified.
+
+- **Name:** ``include_annual_emissions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Emission Fuel Uses**
+
+Generates annual emissions for each fuel type. Requires the appropriate HPXML inputs to be specified.
+
+- **Name:** ``include_annual_emission_fuels``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Emission End Uses**
+
+Generates annual emissions for each end use. Requires the appropriate HPXML inputs to be specified.
+
+- **Name:** ``include_annual_emission_end_uses``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Total Loads**
+
+Generates annual heating, cooling, and hot water loads.
+
+- **Name:** ``include_annual_total_loads``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Unmet Hours**
+
+Generates annual unmet hours for heating, cooling, and EV driving.
+
+- **Name:** ``include_annual_unmet_hours``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Peak Fuels**
+
+Generates annual/summer/winter electricity peaks.
+
+- **Name:** ``include_annual_peak_fuels``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Peak Loads**
+
+Generates annual peak loads for heating/cooling.
+
+- **Name:** ``include_annual_peak_loads``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Component Loads**
+
+Generates annual heating and cooling loads disaggregated by component type.
+
+- **Name:** ``include_annual_component_loads``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Hot Water Uses**
+
+Generates annual hot water usages for each end use.
+
+- **Name:** ``include_annual_hot_water_uses``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: HVAC Summary**
+
+Generates HVAC capacities, design temperatures, and design loads.
+
+- **Name:** ``include_annual_hvac_summary``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Annual Output: Resilience**
+
+Generates annual resilience outputs.
+
+- **Name:** ``include_annual_resilience``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Timeseries Reporting Frequency**
+
+The frequency at which to report timeseries output data. Using 'none' will disable timeseries outputs.
+
+- **Name:** ``timeseries_frequency``
+- **Type:** ``Choice``
+
+- **Required:** ``false``
+
+- **Choices:** `none`, `timestep`, `hourly`, `daily`, `monthly`
+
+
+
+**Generate Timeseries Output: Total Consumptions**
+
+Generates timeseries energy consumptions for the total building.
+
+- **Name:** ``include_timeseries_total_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Fuel Consumptions**
+
+Generates timeseries energy consumptions for each fuel type.
+
+- **Name:** ``include_timeseries_fuel_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: End Use Consumptions**
+
+Generates timeseries energy consumptions for each end use.
+
+- **Name:** ``include_timeseries_end_use_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: System Use Consumptions**
+
+Generates timeseries energy consumptions for each end use of each HVAC and water heating system.
+
+- **Name:** ``include_timeseries_system_use_consumptions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Emissions**
+
+Generates timeseries emissions. Requires the appropriate HPXML inputs to be specified.
+
+- **Name:** ``include_timeseries_emissions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Emission Fuel Uses**
+
+Generates timeseries emissions for each fuel type. Requires the appropriate HPXML inputs to be specified.
+
+- **Name:** ``include_timeseries_emission_fuels``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Emission End Uses**
+
+Generates timeseries emissions for each end use. Requires the appropriate HPXML inputs to be specified.
+
+- **Name:** ``include_timeseries_emission_end_uses``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Hot Water Uses**
+
+Generates timeseries hot water usages for each end use.
+
+- **Name:** ``include_timeseries_hot_water_uses``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Total Loads**
+
+Generates timeseries heating, cooling, and hot water loads.
+
+- **Name:** ``include_timeseries_total_loads``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Component Loads**
+
+Generates timeseries heating and cooling loads disaggregated by component type.
+
+- **Name:** ``include_timeseries_component_loads``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Unmet Hours**
+
+Generates timeseries unmet hours for heating, cooling, and EV driving.
+
+- **Name:** ``include_timeseries_unmet_hours``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Zone Temperatures**
+
+Generates timeseries temperatures for each thermal zone.
+
+- **Name:** ``include_timeseries_zone_temperatures``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Zone Conditions**
+
+Generates timeseries temperatures and humidities for each thermal zone.
+
+- **Name:** ``include_timeseries_zone_conditions``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Airflows**
+
+Generates timeseries airflows.
+
+- **Name:** ``include_timeseries_airflows``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Weather**
+
+Generates timeseries weather data.
+
+- **Name:** ``include_timeseries_weather``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Resilience**
+
+Generates timeseries resilience outputs.
+
+- **Name:** ``include_timeseries_resilience``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Timestamp Convention**
+
+Determines whether timeseries timestamps use the start-of-period or end-of-period convention. Doesn't apply if the output format is 'csv_dview'.
+
+- **Name:** ``timeseries_timestamp_convention``
+- **Type:** ``Choice``
+
+- **Required:** ``false``
+
+- **Choices:** `start`, `end`
+
+
+
+**Generate Timeseries Output: Number of Decimal Places**
+
+Allows overriding the default number of decimal places for timeseries outputs.
+
+- **Name:** ``timeseries_num_decimal_places``
+- **Type:** ``Integer``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Add TimeDST Column**
+
+Optionally add, in addition to the default local standard Time column, a local clock TimeDST column. Requires that daylight saving time is enabled.
+
+- **Name:** ``add_timeseries_dst_column``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: Add TimeUTC Column**
+
+Optionally add, in addition to the default local standard Time column, a local clock TimeUTC column. If the time zone UTC offset is not provided in the HPXML file, the time zone in the EPW header will be used.
+
+- **Name:** ``add_timeseries_utc_column``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: EnergyPlus Output Variables**
+
+Optionally generates timeseries EnergyPlus output variables. If multiple output variables are desired, use a comma-separated list. Do not include key values; by default all key values will be requested. Example: "Zone People Occupant Count, Zone People Total Heating Energy"
+
+- **Name:** ``user_output_variables``
+- **Type:** ``String``
+
+- **Required:** ``false``
+
+
+
+**Generate Timeseries Output: EnergyPlus Output Meters**
+
+Optionally generates timeseries EnergyPlus output meters. If multiple output meters are desired, use a comma-separated list. Example: "Electricity:Facility, HeatingCoils:EnergyTransfer"
+
+- **Name:** ``user_output_meters``
+- **Type:** ``String``
+
+- **Required:** ``false``
+
+
+
+**Annual Output File Name**
+
+If not provided, defaults to 'results_annual.csv' (or 'results_annual.json' or 'results_annual.msgpack').
+
+- **Name:** ``annual_output_file_name``
+- **Type:** ``String``
+
+- **Required:** ``false``
+
+
+
+**Timeseries Output File Name**
+
+If not provided, defaults to 'results_timeseries.csv' (or 'results_timeseries.json' or 'results_timeseries.msgpack').
+
+- **Name:** ``timeseries_output_file_name``
+- **Type:** ``String``
+
+- **Required:** ``false``
+
+
+
+
+
+
+
+## Outputs
+All possible measure outputs are listed below. Actual outputs depend on measure argument values provided.
+
+
+- ``energy_use_total_m_btu``
+
+- ``energy_use_net_m_btu``
+
+- ``fuel_use_electricity_total_m_btu``
+
+- ``fuel_use_electricity_net_m_btu``
+
+- ``fuel_use_natural_gas_total_m_btu``
+
+- ``fuel_use_fuel_oil_total_m_btu``
+
+- ``fuel_use_propane_total_m_btu``
+
+- ``fuel_use_wood_cord_total_m_btu``
+
+- ``fuel_use_wood_pellets_total_m_btu``
+
+- ``fuel_use_coal_total_m_btu``
+
+- ``end_use_electricity_heating_m_btu``
+
+- ``end_use_electricity_heating_fans_pumps_m_btu``
+
+- ``end_use_electricity_heating_heat_pump_backup_m_btu``
+
+- ``end_use_electricity_heating_heat_pump_backup_fans_pumps_m_btu``
+
+- ``end_use_electricity_cooling_m_btu``
+
+- ``end_use_electricity_cooling_fans_pumps_m_btu``
+
+- ``end_use_electricity_hot_water_m_btu``
+
+- ``end_use_electricity_hot_water_recirc_pump_m_btu``
+
+- ``end_use_electricity_hot_water_solar_thermal_pump_m_btu``
+
+- ``end_use_electricity_lighting_interior_m_btu``
+
+- ``end_use_electricity_lighting_garage_m_btu``
+
+- ``end_use_electricity_lighting_exterior_m_btu``
+
+- ``end_use_electricity_mech_vent_m_btu``
+
+- ``end_use_electricity_mech_vent_preheating_m_btu``
+
+- ``end_use_electricity_mech_vent_precooling_m_btu``
+
+- ``end_use_electricity_whole_house_fan_m_btu``
+
+- ``end_use_electricity_refrigerator_m_btu``
+
+- ``end_use_electricity_freezer_m_btu``
+
+- ``end_use_electricity_dehumidifier_m_btu``
+
+- ``end_use_electricity_dishwasher_m_btu``
+
+- ``end_use_electricity_clothes_washer_m_btu``
+
+- ``end_use_electricity_clothes_dryer_m_btu``
+
+- ``end_use_electricity_range_oven_m_btu``
+
+- ``end_use_electricity_ceiling_fan_m_btu``
+
+- ``end_use_electricity_television_m_btu``
+
+- ``end_use_electricity_plug_loads_m_btu``
+
+- ``end_use_electricity_well_pump_m_btu``
+
+- ``end_use_electricity_pool_heater_m_btu``
+
+- ``end_use_electricity_pool_pump_m_btu``
+
+- ``end_use_electricity_permanent_spa_heater_m_btu``
+
+- ``end_use_electricity_permanent_spa_pump_m_btu``
+
+- ``end_use_electricity_pv_m_btu``
+
+- ``end_use_electricity_generator_m_btu``
+
+- ``end_use_electricity_battery_m_btu``
+
+- ``end_use_electricity_electric_vehicle_charging_m_btu``
+
+- ``end_use_natural_gas_heating_m_btu``
+
+- ``end_use_natural_gas_heating_heat_pump_backup_m_btu``
+
+- ``end_use_natural_gas_hot_water_m_btu``
+
+- ``end_use_natural_gas_clothes_dryer_m_btu``
+
+- ``end_use_natural_gas_range_oven_m_btu``
+
+- ``end_use_natural_gas_mech_vent_preheating_m_btu``
+
+- ``end_use_natural_gas_pool_heater_m_btu``
+
+- ``end_use_natural_gas_permanent_spa_heater_m_btu``
+
+- ``end_use_natural_gas_grill_m_btu``
+
+- ``end_use_natural_gas_lighting_m_btu``
+
+- ``end_use_natural_gas_fireplace_m_btu``
+
+- ``end_use_natural_gas_generator_m_btu``
+
+- ``end_use_fuel_oil_heating_m_btu``
+
+- ``end_use_fuel_oil_heating_heat_pump_backup_m_btu``
+
+- ``end_use_fuel_oil_hot_water_m_btu``
+
+- ``end_use_fuel_oil_clothes_dryer_m_btu``
+
+- ``end_use_fuel_oil_range_oven_m_btu``
+
+- ``end_use_fuel_oil_mech_vent_preheating_m_btu``
+
+- ``end_use_fuel_oil_grill_m_btu``
+
+- ``end_use_fuel_oil_lighting_m_btu``
+
+- ``end_use_fuel_oil_fireplace_m_btu``
+
+- ``end_use_fuel_oil_generator_m_btu``
+
+- ``end_use_propane_heating_m_btu``
+
+- ``end_use_propane_heating_heat_pump_backup_m_btu``
+
+- ``end_use_propane_hot_water_m_btu``
+
+- ``end_use_propane_clothes_dryer_m_btu``
+
+- ``end_use_propane_range_oven_m_btu``
+
+- ``end_use_propane_mech_vent_preheating_m_btu``
+
+- ``end_use_propane_grill_m_btu``
+
+- ``end_use_propane_lighting_m_btu``
+
+- ``end_use_propane_fireplace_m_btu``
+
+- ``end_use_propane_generator_m_btu``
+
+- ``end_use_wood_cord_heating_m_btu``
+
+- ``end_use_wood_cord_heating_heat_pump_backup_m_btu``
+
+- ``end_use_wood_cord_hot_water_m_btu``
+
+- ``end_use_wood_cord_clothes_dryer_m_btu``
+
+- ``end_use_wood_cord_range_oven_m_btu``
+
+- ``end_use_wood_cord_mech_vent_preheating_m_btu``
+
+- ``end_use_wood_cord_grill_m_btu``
+
+- ``end_use_wood_cord_lighting_m_btu``
+
+- ``end_use_wood_cord_fireplace_m_btu``
+
+- ``end_use_wood_cord_generator_m_btu``
+
+- ``end_use_wood_pellets_heating_m_btu``
+
+- ``end_use_wood_pellets_heating_heat_pump_backup_m_btu``
+
+- ``end_use_wood_pellets_hot_water_m_btu``
+
+- ``end_use_wood_pellets_clothes_dryer_m_btu``
+
+- ``end_use_wood_pellets_range_oven_m_btu``
+
+- ``end_use_wood_pellets_mech_vent_preheating_m_btu``
+
+- ``end_use_wood_pellets_grill_m_btu``
+
+- ``end_use_wood_pellets_lighting_m_btu``
+
+- ``end_use_wood_pellets_fireplace_m_btu``
+
+- ``end_use_wood_pellets_generator_m_btu``
+
+- ``end_use_coal_heating_m_btu``
+
+- ``end_use_coal_heating_heat_pump_backup_m_btu``
+
+- ``end_use_coal_hot_water_m_btu``
+
+- ``end_use_coal_clothes_dryer_m_btu``
+
+- ``end_use_coal_range_oven_m_btu``
+
+- ``end_use_coal_mech_vent_preheating_m_btu``
+
+- ``end_use_coal_grill_m_btu``
+
+- ``end_use_coal_lighting_m_btu``
+
+- ``end_use_coal_fireplace_m_btu``
+
+- ``end_use_coal_generator_m_btu``
+
+- ``load_heating_delivered_m_btu``
+
+- ``load_heating_heat_pump_backup_m_btu``
+
+- ``load_cooling_delivered_m_btu``
+
+- ``load_hot_water_delivered_m_btu``
+
+- ``load_hot_water_tank_losses_m_btu``
+
+- ``load_hot_water_desuperheater_m_btu``
+
+- ``load_hot_water_solar_thermal_m_btu``
+
+- ``unmet_hours_heating_hr``
+
+- ``unmet_hours_cooling_hr``
+
+- ``unmet_hours_ev_driving_hr``
+
+- ``peak_electricity_winter_total_w``
+
+- ``peak_electricity_summer_total_w``
+
+- ``peak_electricity_annual_total_w``
+
+- ``peak_electricity_winter_net_w``
+
+- ``peak_electricity_summer_net_w``
+
+- ``peak_electricity_annual_net_w``
+
+- ``peak_load_heating_delivered_k_btu_hr``
+
+- ``peak_load_cooling_delivered_k_btu_hr``
+
+- ``component_load_heating_roofs_m_btu``
+
+- ``component_load_heating_ceilings_m_btu``
+
+- ``component_load_heating_walls_m_btu``
+
+- ``component_load_heating_rim_joists_m_btu``
+
+- ``component_load_heating_foundation_walls_m_btu``
+
+- ``component_load_heating_doors_m_btu``
+
+- ``component_load_heating_windows_conduction_m_btu``
+
+- ``component_load_heating_windows_solar_m_btu``
+
+- ``component_load_heating_skylights_conduction_m_btu``
+
+- ``component_load_heating_skylights_solar_m_btu``
+
+- ``component_load_heating_floors_m_btu``
+
+- ``component_load_heating_slabs_m_btu``
+
+- ``component_load_heating_internal_mass_m_btu``
+
+- ``component_load_heating_infiltration_m_btu``
+
+- ``component_load_heating_natural_ventilation_m_btu``
+
+- ``component_load_heating_mechanical_ventilation_m_btu``
+
+- ``component_load_heating_whole_house_fan_m_btu``
+
+- ``component_load_heating_ducts_m_btu``
+
+- ``component_load_heating_internal_gains_m_btu``
+
+- ``component_load_heating_lighting_m_btu``
+
+- ``component_load_cooling_roofs_m_btu``
+
+- ``component_load_cooling_ceilings_m_btu``
+
+- ``component_load_cooling_walls_m_btu``
+
+- ``component_load_cooling_rim_joists_m_btu``
+
+- ``component_load_cooling_foundation_walls_m_btu``
+
+- ``component_load_cooling_doors_m_btu``
+
+- ``component_load_cooling_windows_conduction_m_btu``
+
+- ``component_load_cooling_windows_solar_m_btu``
+
+- ``component_load_cooling_skylights_conduction_m_btu``
+
+- ``component_load_cooling_skylights_solar_m_btu``
+
+- ``component_load_cooling_floors_m_btu``
+
+- ``component_load_cooling_slabs_m_btu``
+
+- ``component_load_cooling_internal_mass_m_btu``
+
+- ``component_load_cooling_infiltration_m_btu``
+
+- ``component_load_cooling_natural_ventilation_m_btu``
+
+- ``component_load_cooling_mechanical_ventilation_m_btu``
+
+- ``component_load_cooling_whole_house_fan_m_btu``
+
+- ``component_load_cooling_ducts_m_btu``
+
+- ``component_load_cooling_internal_gains_m_btu``
+
+- ``component_load_cooling_lighting_m_btu``
+
+- ``hot_water_clothes_washer_gal``
+
+- ``hot_water_dishwasher_gal``
+
+- ``hot_water_fixtures_gal``
+
+- ``hot_water_distribution_waste_gal``
+
+- ``resilience_battery_hr``
+
+
diff --git a/ReportSimulationOutput/measure.rb b/ReportSimulationOutput/measure.rb
index 07718454d5..63e094fc08 100644
--- a/ReportSimulationOutput/measure.rb
+++ b/ReportSimulationOutput/measure.rb
@@ -915,7 +915,7 @@ def get_outputs(runner, args)
@hpxml_bldgs.each do |hpxml_bldg|
# Apply Heating/Cooling DSEs
(hpxml_bldg.heating_systems + hpxml_bldg.heat_pumps).each do |htg_system|
- next unless (htg_system.is_a?(HPXML::HeatingSystem) && htg_system.is_heat_pump_backup_system) || htg_system.fraction_heat_load_served > 0
+ next unless (htg_system.is_a?(HPXML::HeatingSystem) && htg_system.is_heat_pump_backup_system) || htg_system.fraction_heat_load_served.to_f > 0
next if htg_system.distribution_system_idref.nil?
next unless htg_system.distribution_system.distribution_system_type == HPXML::HVACDistributionTypeDSE
next if htg_system.distribution_system.annual_heating_dse.nil?
@@ -933,7 +933,7 @@ def get_outputs(runner, args)
end
end
(hpxml_bldg.cooling_systems + hpxml_bldg.heat_pumps).each do |clg_system|
- next unless clg_system.fraction_cool_load_served > 0
+ next unless clg_system.fraction_cool_load_served.to_f > 0
next if clg_system.distribution_system_idref.nil?
next unless clg_system.distribution_system.distribution_system_type == HPXML::HVACDistributionTypeDSE
next if clg_system.distribution_system.annual_cooling_dse.nil?
diff --git a/ReportSimulationOutput/measure.xml b/ReportSimulationOutput/measure.xml
index 2f511c614d..630f24145f 100644
--- a/ReportSimulationOutput/measure.xml
+++ b/ReportSimulationOutput/measure.xml
@@ -3,8 +3,8 @@
3.1
report_simulation_output
df9d170c-c21a-4130-866d-0d46b06073fd
- a47e5d33-f72f-463f-9f61-c2da806a5b25
- 2025-09-15T15:40:07Z
+ 85d47020-db66-48ab-9f69-c9e42e1f9889
+ 2025-11-26T16:26:17Z
9BF1E6AC
ReportSimulationOutput
HPXML Simulation Output Report
@@ -1991,7 +1991,7 @@
measure.rb
rb
script
- 41343519
+ D8B42F0C
test_report_sim_output.rb
diff --git a/ReportUtilityBills/README.md b/ReportUtilityBills/README.md
index cc85cd90d1..063dad948a 100644
--- a/ReportUtilityBills/README.md
+++ b/ReportUtilityBills/README.md
@@ -1,109 +1,109 @@
-
-###### (Automatically generated documentation)
-
-# Utility Bills Report
-
-## Description
-Calculates and reports utility bills for residential HPXML-based models.
-
-Calculate electric/gas utility bills based on monthly fixed charges and marginal rates. Calculate other utility bills based on marginal rates for oil, propane, wood cord, wood pellets, and coal. User can specify PV compensation types of 'Net-Metering' or 'Feed-In Tariff', along with corresponding rates and connection fees.
-
-## Arguments
-
-
-**Output Format**
-
-The file format of the annual (and timeseries, if requested) outputs.
-
-- **Name:** ``output_format``
-- **Type:** ``Choice``
-
-- **Required:** ``false``
-
-- **Choices:** `csv`, `json`, `msgpack`
-
-
-
-**Generate Annual Utility Bills**
-
-Generates output file containing annual utility bills.
-
-- **Name:** ``include_annual_bills``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Monthly Utility Bills**
-
-Generates output file containing monthly utility bills.
-
-- **Name:** ``include_monthly_bills``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Generate Monthly Output: Timestamp Convention**
-
-Determines whether monthly timestamps use the start-of-period or end-of-period convention.
-
-- **Name:** ``monthly_timestamp_convention``
-- **Type:** ``Choice``
-
-- **Required:** ``false``
-
-- **Choices:** `start`, `end`
-
-
-
-**Annual Output File Name**
-
-If not provided, defaults to 'results_bills.csv' (or 'results_bills.json' or 'results_bills.msgpack').
-
-- **Name:** ``annual_output_file_name``
-- **Type:** ``String``
-
-- **Required:** ``false``
-
-
-
-**Monthly Output File Name**
-
-If not provided, defaults to 'results_bills_monthly.csv' (or 'results_bills_monthly.json' or 'results_bills_monthly.msgpack').
-
-- **Name:** ``monthly_output_file_name``
-- **Type:** ``String``
-
-- **Required:** ``false``
-
-
-
-**Register Annual Utility Bills**
-
-Registers annual utility bills with the OpenStudio runner for downstream processing.
-
-- **Name:** ``register_annual_bills``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-**Register Monthly Utility Bills**
-
-Registers monthly utility bills with the OpenStudio runner for downstream processing.
-
-- **Name:** ``register_monthly_bills``
-- **Type:** ``Boolean``
-
-- **Required:** ``false``
-
-
-
-
-
-
-
+
+###### (Automatically generated documentation)
+
+# Utility Bills Report
+
+## Description
+Calculates and reports utility bills for residential HPXML-based models.
+
+Calculate electric/gas utility bills based on monthly fixed charges and marginal rates. Calculate other utility bills based on marginal rates for oil, propane, wood cord, wood pellets, and coal. User can specify PV compensation types of 'Net-Metering' or 'Feed-In Tariff', along with corresponding rates and connection fees.
+
+## Arguments
+
+
+**Output Format**
+
+The file format of the annual (and timeseries, if requested) outputs.
+
+- **Name:** ``output_format``
+- **Type:** ``Choice``
+
+- **Required:** ``false``
+
+- **Choices:** `csv`, `json`, `msgpack`
+
+
+
+**Generate Annual Utility Bills**
+
+Generates output file containing annual utility bills.
+
+- **Name:** ``include_annual_bills``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Monthly Utility Bills**
+
+Generates output file containing monthly utility bills.
+
+- **Name:** ``include_monthly_bills``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Generate Monthly Output: Timestamp Convention**
+
+Determines whether monthly timestamps use the start-of-period or end-of-period convention.
+
+- **Name:** ``monthly_timestamp_convention``
+- **Type:** ``Choice``
+
+- **Required:** ``false``
+
+- **Choices:** `start`, `end`
+
+
+
+**Annual Output File Name**
+
+If not provided, defaults to 'results_bills.csv' (or 'results_bills.json' or 'results_bills.msgpack').
+
+- **Name:** ``annual_output_file_name``
+- **Type:** ``String``
+
+- **Required:** ``false``
+
+
+
+**Monthly Output File Name**
+
+If not provided, defaults to 'results_bills_monthly.csv' (or 'results_bills_monthly.json' or 'results_bills_monthly.msgpack').
+
+- **Name:** ``monthly_output_file_name``
+- **Type:** ``String``
+
+- **Required:** ``false``
+
+
+
+**Register Annual Utility Bills**
+
+Registers annual utility bills with the OpenStudio runner for downstream processing.
+
+- **Name:** ``register_annual_bills``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+**Register Monthly Utility Bills**
+
+Registers monthly utility bills with the OpenStudio runner for downstream processing.
+
+- **Name:** ``register_monthly_bills``
+- **Type:** ``Boolean``
+
+- **Required:** ``false``
+
+
+
+
+
+
+
diff --git a/ReportUtilityBills/measure.rb b/ReportUtilityBills/measure.rb
index b0206ed106..9f20e0bddf 100644
--- a/ReportUtilityBills/measure.rb
+++ b/ReportUtilityBills/measure.rb
@@ -109,7 +109,7 @@ def check_for_return_type_warnings()
# Require not DSE
@hpxml_buildings.each do |hpxml_bldg|
(hpxml_bldg.heating_systems + hpxml_bldg.heat_pumps).each do |htg_system|
- next unless (htg_system.is_a?(HPXML::HeatingSystem) && htg_system.is_heat_pump_backup_system) || htg_system.fraction_heat_load_served > 0
+ next unless (htg_system.is_a?(HPXML::HeatingSystem) && htg_system.is_heat_pump_backup_system) || htg_system.fraction_heat_load_served.to_f > 0
next if htg_system.distribution_system_idref.nil?
next unless htg_system.distribution_system.distribution_system_type == HPXML::HVACDistributionTypeDSE
next if htg_system.distribution_system.annual_heating_dse.nil?
@@ -118,7 +118,7 @@ def check_for_return_type_warnings()
warnings << 'DSE is not currently supported when calculating utility bills.'
end
(hpxml_bldg.cooling_systems + hpxml_bldg.heat_pumps).each do |clg_system|
- next unless clg_system.fraction_cool_load_served > 0
+ next unless clg_system.fraction_cool_load_served.to_f > 0
next if clg_system.distribution_system_idref.nil?
next unless clg_system.distribution_system.distribution_system_type == HPXML::HVACDistributionTypeDSE
next if clg_system.distribution_system.annual_cooling_dse.nil?
diff --git a/ReportUtilityBills/measure.xml b/ReportUtilityBills/measure.xml
index e134bc77bd..22a281d2a5 100644
--- a/ReportUtilityBills/measure.xml
+++ b/ReportUtilityBills/measure.xml
@@ -3,8 +3,8 @@
3.1
report_utility_bills
ca88a425-e59a-4bc4-af51-c7e7d1e960fe
- c416e5a4-a1d8-442a-a26a-6f107ab47dc8
- 2025-10-29T23:32:35Z
+ 3dccabf7-a908-45f8-932e-17fd34cb4df3
+ 2025-11-26T16:26:18Z
15BF4E57
ReportUtilityBills
Utility Bills Report
@@ -180,7 +180,7 @@
measure.rb
rb
script
- 26A6E541
+ AE0DEFE5
detailed_rates/README.md
diff --git a/tasks.rb b/tasks.rb
index ec9b73358c..ca9d672156 100644
--- a/tasks.rb
+++ b/tasks.rb
@@ -72,19 +72,19 @@ def create_hpxmls
model = OpenStudio::Model::Model.new
runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
- num_apply_measures = 1
- if hpxml_path.include?('whole-building-common-spaces')
- num_apply_measures = 8
- elsif hpxml_path.include?('whole-building')
- num_apply_measures = 6
- elsif hpxml_path.include?('multiple-buildings')
- num_apply_measures = 2
+ num_mf_units = 1
+ if hpxml_path.include? 'mf-whole-building-common-spaces'
+ num_mf_units = 8
+ elsif hpxml_path.include? 'mf-whole-building'
+ num_mf_units = 6
+ elsif hpxml_path.include? 'multiple-buildings'
+ num_mf_units = 2
end
- for i in 1..num_apply_measures
+ for i in 1..num_mf_units
build_residential_hpxml = measures['BuildResidentialHPXML'][0]
- if hpxml_path.include?('whole-building-common-spaces')
- suffix = "_#{i}" if i > 1
+ suffix = "_#{i}" if i > 1
+ if hpxml_path.include? 'mf-whole-building-common-spaces'
build_residential_hpxml['schedules_paths'] = (i >= 7 ? nil : "../../HPXMLtoOpenStudio/resources/schedule_files/#{stochastic_sched_basename}-mf-unit#{suffix}.csv")
build_residential_hpxml['geometry_foundation_type'] = (i <= 2 ? 'Basement, Unconditioned' : 'Above Apartment')
build_residential_hpxml['geometry_attic_type'] = (i >= 7 ? 'Attic, Vented, Gable' : 'Below Apartment')
@@ -93,8 +93,7 @@ def create_hpxmls
# Partially conditioned basement + one unconditioned hallway each floor + unconditioned attic
build_residential_hpxml['hvac_heating_system'] = ([1, 4, 6].include?(i) ? 'Electric Resistance' : 'None')
build_residential_hpxml['hvac_cooling_system'] = ([1, 4, 6].include?(i) ? 'Room AC, CEER 8.4' : 'None')
- elsif hpxml_path.include?('whole-building')
- suffix = "_#{i}" if i > 1
+ elsif hpxml_path.include? 'mf-whole-building'
build_residential_hpxml['schedules_paths'] = "../../HPXMLtoOpenStudio/resources/schedule_files/#{stochastic_sched_basename}-mf-unit#{suffix}.csv"
build_residential_hpxml['geometry_foundation_type'] = (i <= 2 ? 'Basement, Unconditioned' : 'Above Apartment')
build_residential_hpxml['geometry_attic_type'] = (i >= 5 ? 'Attic, Vented, Gable' : 'Below Apartment')
@@ -103,8 +102,7 @@ def create_hpxmls
build_residential_hpxml['hvac_heating_system'] = ([1, 3, 5].include?(i) ? 'Electric Resistance' : 'None')
build_residential_hpxml['hvac_cooling_system'] = ([1, 3, 5].include?(i) ? 'Room AC, CEER 8.4' : 'None')
end
- elsif hpxml_path.include?('multiple-buildings')
- suffix = "_#{i}" if i > 1
+ elsif hpxml_path.include? 'multiple-buildings'
if i > 1
build_residential_hpxml['enclosure_window'] = 'Triple, Low-E, Insulated, Gas, High Gain'
end
@@ -1769,7 +1767,7 @@ def apply_hpxml_modification_sample_files(hpxml_path, hpxml)
hpxml_bldg.heat_pumps[0].number_of_units_served = 6
hpxml_bldg.heat_pumps[0].pump_watts_per_ton = 0.0
end
- if !hpxml_file.include? 'eae'
+ if !hpxml_file.include?('eae') && !hpxml_file.include?('mf-whole-building')
if hpxml_file.include? 'shared-boiler'
hpxml_bldg.heating_systems[0].shared_loop_watts = 600
end
@@ -3250,6 +3248,43 @@ def apply_hpxml_modification_sample_files(hpxml_path, hpxml)
plug_load.kwh_per_year = 0.0
end
end
+ elsif ['base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml',
+ 'base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml'].include? hpxml_file
+ if hpxml_file.include? 'sequenced'
+ hpxml.header.shared_boiler_operation = HPXML::SharedBoilerOperationSequenced
+ elsif hpxml_file.include? 'simultaneous'
+ hpxml.header.shared_boiler_operation = HPXML::SharedBoilerOperationSimultaneous
+ end
+ # Add two shared boilers to building1
+ hpxml.buildings[0].heating_systems.clear
+ for j in 1..2
+ hpxml.buildings[0].heating_systems.add(id: "HeatingSystem#{j}",
+ is_shared_system: true,
+ distribution_system_idref: 'HVACDistribution1',
+ heating_system_type: HPXML::HVACTypeBoiler,
+ heating_system_fuel: HPXML::FuelTypeNaturalGas,
+ heating_capacity: 30000,
+ heating_efficiency_afue: 0.8)
+ end
+ hpxml.buildings[0].hvac_distributions.clear
+ hpxml.buildings[0].hvac_distributions.add(id: 'HVACDistribution1',
+ distribution_system_type: HPXML::HVACDistributionTypeHydronic,
+ hydronic_type: HPXML::HydronicTypeBaseboard,
+ hydronic_supply_temp: 160,
+ hydronic_return_temp: 120,
+ hydronic_variable_speed_pump: true)
+ # Reference the shared boilers from all other buildings
+ for i in 1..hpxml.buildings.size - 1
+ hpxml.buildings[i].heating_systems.clear
+ for j in 1..2
+ hpxml.buildings[i].heating_systems.add(id: "HeatingSystem#{j}_#{i}",
+ distribution_system_idref: "HVACDistribution1_#{i}",
+ sameas_id: "HeatingSystem#{j}")
+ end
+ hpxml.buildings[i].hvac_distributions.clear
+ hpxml.buildings[i].hvac_distributions.add(id: "HVACDistribution1_#{i}",
+ sameas_id: 'HVACDistribution1')
+ end
end
# Logic to apply at whole building level, need to be outside hpxml_bldg loop
diff --git a/workflow/hpxml_inputs.json b/workflow/hpxml_inputs.json
index ab8ffb4a3c..4d89c07960 100644
--- a/workflow/hpxml_inputs.json
+++ b/workflow/hpxml_inputs.json
@@ -2424,6 +2424,12 @@
"sample_files/base-bldgtype-mf-whole-building-detailed-electric-panel.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-whole-building.xml"
},
+ "sample_files/base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml": {
+ "parent_hpxml": "sample_files/base-bldgtype-mf-whole-building.xml"
+ },
+ "sample_files/base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml": {
+ "parent_hpxml": "sample_files/base-bldgtype-mf-whole-building.xml"
+ },
"sample_files/base-pv.xml": {
"parent_hpxml": "sample_files/base.xml",
"pv_system": "4.0 kW",
diff --git a/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml b/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml
new file mode 100644
index 0000000000..dd13fe3f86
--- /dev/null
+++ b/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml
@@ -0,0 +1,2436 @@
+
+
+
+ HPXML
+ tasks.rb
+ 2000-01-01T00:00:00-07:00
+ create
+
+
+
+ true
+
+ sequenced
+
+
+
+ Default
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 0.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ basement - unconditioned
+ 77.1
+ wood siding
+ medium
+
+
+ 13.9
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ 30.8
+
+
+ 4.0
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ ground
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 800.0
+ 7.0
+
+
+
+ continuous - exterior
+ 10.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 320.0
+ 7.0
+
+
+
+ continuous - exterior
+ 0.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+
+
+ basement - unconditioned
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 22.6
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ basement - unconditioned
+ 1200.0
+ 100.0
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+ natural gas
+ 30000.0
+
+ AFUE
+ 0.8
+
+
+
+
+
+ true
+
+
+
+ natural gas
+ 30000.0
+
+ AFUE
+ 0.8
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+ baseboard
+ 160.0
+ 120.0
+
+ true
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 0.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_2.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ basement - unconditioned
+ 77.1
+ wood siding
+ medium
+
+
+ 13.9
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ 30.8
+
+
+ 4.0
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ ground
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 800.0
+ 7.0
+
+
+
+ continuous - exterior
+ 10.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 320.0
+ 7.0
+
+
+
+ continuous - exterior
+ 0.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+
+
+ basement - unconditioned
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 22.6
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ basement - unconditioned
+ 1200.0
+ 100.0
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above and below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 10.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_3.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above and below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 10.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_4.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 20.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_5.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ attic - vented
+ 1341.6
+ asphalt or fiberglass shingles
+ light
+ 6.0
+
+
+ 2.3
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+ outside
+ attic - vented
+ gable
+
+
+
+ 200.0
+ wood siding
+ medium
+
+
+ 4.0
+
+
+
+
+ attic - vented
+ attic - vented
+
+
+
+ 200.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ attic - vented
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 39.6
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 20.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_6.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ attic - vented
+ 1341.6
+ asphalt or fiberglass shingles
+ light
+ 6.0
+
+
+ 2.3
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+ outside
+ attic - vented
+ gable
+
+
+
+ 200.0
+ wood siding
+ medium
+
+
+ 4.0
+
+
+
+
+ attic - vented
+ attic - vented
+
+
+
+ 200.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ attic - vented
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 39.6
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
\ No newline at end of file
diff --git a/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml b/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml
new file mode 100644
index 0000000000..20e929461e
--- /dev/null
+++ b/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml
@@ -0,0 +1,2436 @@
+
+
+
+ HPXML
+ tasks.rb
+ 2000-01-01T00:00:00-07:00
+ create
+
+
+
+ true
+
+ simultaneous
+
+
+
+ Default
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 0.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ basement - unconditioned
+ 77.1
+ wood siding
+ medium
+
+
+ 13.9
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ 30.8
+
+
+ 4.0
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ ground
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 800.0
+ 7.0
+
+
+
+ continuous - exterior
+ 10.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 320.0
+ 7.0
+
+
+
+ continuous - exterior
+ 0.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+
+
+ basement - unconditioned
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 22.6
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ basement - unconditioned
+ 1200.0
+ 100.0
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+ natural gas
+ 30000.0
+
+ AFUE
+ 0.8
+
+
+
+
+
+ true
+
+
+
+ natural gas
+ 30000.0
+
+ AFUE
+ 0.8
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+ baseboard
+ 160.0
+ 120.0
+
+ true
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 0.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_2.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ basement - unconditioned
+ 77.1
+ wood siding
+ medium
+
+
+ 13.9
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ 30.8
+
+
+ 4.0
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ ground
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 800.0
+ 7.0
+
+
+
+ continuous - exterior
+ 10.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+ basement - unconditioned
+ basement - unconditioned
+ solid concrete
+ 8.0
+ 320.0
+ 7.0
+
+
+
+ continuous - exterior
+ 0.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+
+
+ basement - unconditioned
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 22.6
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ basement - unconditioned
+ 1200.0
+ 100.0
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above and below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 10.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_3.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit above and below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 10.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_4.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 2.1
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 20.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_5.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ attic - vented
+ 1341.6
+ asphalt or fiberglass shingles
+ light
+ 6.0
+
+
+ 2.3
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+ outside
+ attic - vented
+ gable
+
+
+
+ 200.0
+ wood siding
+ medium
+
+
+ 4.0
+
+
+
+
+ attic - vented
+ attic - vented
+
+
+
+ 200.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ attic - vented
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 39.6
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ attached on one side
+ unit below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 20.0
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 1200.0
+ 9600.0
+
+
+ ../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-mf-unit_6.csv
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+
+ ACHnatural
+ 0.375
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ attic - vented
+ 1341.6
+ asphalt or fiberglass shingles
+ light
+ 6.0
+
+
+ 2.3
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 800.0
+ wood siding
+ medium
+
+
+ 22.7
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 320.0
+
+
+ 4.0
+
+
+
+
+ outside
+ attic - vented
+ gable
+
+
+
+ 200.0
+ wood siding
+ medium
+
+
+ 4.0
+
+
+
+
+ attic - vented
+ attic - vented
+
+
+
+ 200.0
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 1200.0
+
+
+ 5.3
+
+
+
+
+ attic - vented
+ conditioned space
+ ceiling
+
+
+
+ 1200.0
+
+
+ 39.6
+
+
+
+
+
+
+ 43.2
+ 0
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 43.2
+ 180
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+ 57.6
+ 270
+ 0.35
+ 0.44
+
+
+ light curtains
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ room air conditioner
+ electricity
+ 12000.0
+ 1.0
+
+ CEER
+ 8.4
+
+
+
+
+
+ 68.0
+ 78.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 1.0
+ 0.94
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ false
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ 650.0
+
+
+
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+
+
+ other
+
+
+
+
+
\ No newline at end of file
diff --git a/workflow/tests/base_results/results_simulations_bills.csv b/workflow/tests/base_results/results_simulations_bills.csv
index 5afe5efbc6..207c1ff9f3 100644
--- a/workflow/tests/base_results/results_simulations_bills.csv
+++ b/workflow/tests/base_results/results_simulations_bills.csv
@@ -68,6 +68,8 @@ base-bldgtype-mf-unit.xml,1278.33,144.0,980.64,0.0,1124.64,144.0,9.69,153.69,0.0
base-bldgtype-mf-whole-building-common-spaces.xml,8183.89,1152.0,7031.89,0.0,8183.89,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-mf-whole-building-detailed-electric-panel.xml,8479.86,864.0,7615.86,0.0,8479.86,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-mf-whole-building-inter-unit-heat-transfer.xml,7502.49,864.0,6638.49,0.0,7502.49,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,8353.5,864.0,6056.05,0.0,6920.05,864.0,569.45,1433.45,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,8369.0,864.0,6056.03,0.0,6920.03,864.0,584.97,1448.97,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-mf-whole-building.xml,8479.86,864.0,7615.86,0.0,8479.86,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-sfa-unit-2stories.xml,1876.75,144.0,1355.45,0.0,1499.45,144.0,233.3,377.3,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-sfa-unit-atticroof-cathedral.xml,2098.79,144.0,1382.38,0.0,1526.38,144.0,428.41,572.41,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -417,6 +419,7 @@ base-misc-ground-conductivity.xml,2028.78,144.0,1423.79,0.0,1567.79,144.0,316.99
base-misc-loads-large-uncommon.xml,3860.4,144.0,2629.73,0.0,2773.73,144.0,813.37,957.37,0.0,0.0,0.0,0.0,66.6,66.6,0.0,62.7,62.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-loads-large-uncommon2.xml,3208.16,144.0,2500.54,0.0,2644.54,144.0,290.32,434.32,0.0,0.0,0.0,0.0,66.6,66.6,0.0,62.7,62.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-loads-none.xml,1722.3,144.0,1014.84,0.0,1158.84,144.0,419.46,563.46,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-misc-multiple-buildings.xml,1958.07,144.0,1420.47,0.0,1564.47,144.0,249.6,393.6,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-neighbor-shading.xml,2069.85,144.0,1409.78,0.0,1553.78,144.0,372.07,516.07,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-terrain-shielding.xml,2109.76,144.0,1392.2,0.0,1536.2,144.0,429.56,573.56,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-unit-multiplier-detailed-electric-panel.xml,20620.81,1440.0,14277.52,0.0,15717.52,1440.0,3463.29,4903.29,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
diff --git a/workflow/tests/base_results/results_simulations_energy.csv b/workflow/tests/base_results/results_simulations_energy.csv
index d98543b5c0..bf030d49b0 100644
--- a/workflow/tests/base_results/results_simulations_energy.csv
+++ b/workflow/tests/base_results/results_simulations_energy.csv
@@ -68,6 +68,8 @@ base-bldgtype-mf-unit.xml,27.867,27.867,26.941,26.941,0.926,0.0,0.0,0.0,0.0,0.0,
base-bldgtype-mf-whole-building-common-spaces.xml,193.187,193.187,193.187,193.187,0.0,0.0,0.0,0.0,0.0,0.0,32.167,0.0,0.0,0.0,11.778,0.0,67.396,0.0,0.0,19.519,0.0,1.819,0.0,0.0,0.0,0.0,12.402,0.0,0.0,1.745,2.141,0.0,9.172,0.0,12.693,22.356,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-whole-building-detailed-electric-panel.xml,209.23,209.23,209.23,209.23,0.0,0.0,0.0,0.0,0.0,0.0,42.905,0.0,0.0,0.0,22.292,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.614,0.0,0.0,1.745,2.141,0.0,9.172,0.0,12.693,22.356,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-whole-building-inter-unit-heat-transfer.xml,182.379,182.379,182.379,182.379,0.0,0.0,0.0,0.0,0.0,0.0,25.531,0.0,0.0,0.0,12.85,0.0,67.334,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.553,0.0,0.0,1.745,2.141,0.0,9.172,0.0,12.693,22.356,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,220.777,220.777,166.377,166.377,54.399,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.292,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.614,0.0,0.0,1.745,2.141,0.0,9.172,0.0,12.693,22.356,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,54.399,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,222.259,222.259,166.377,166.377,55.882,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.292,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.614,0.0,0.0,1.745,2.141,0.0,9.172,0.0,12.693,22.356,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,55.882,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-whole-building.xml,209.23,209.23,209.23,209.23,0.0,0.0,0.0,0.0,0.0,0.0,42.905,0.0,0.0,0.0,22.292,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.614,0.0,0.0,1.745,2.141,0.0,9.172,0.0,12.693,22.356,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-2stories.xml,59.525,59.525,37.238,37.238,22.287,0.0,0.0,0.0,0.0,0.0,0.0,0.684,0.0,0.0,3.938,0.834,10.77,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.075,0.0,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.287,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-atticroof-cathedral.xml,78.904,78.904,37.978,37.978,40.926,0.0,0.0,0.0,0.0,0.0,0.0,1.255,0.0,0.0,4.104,0.849,10.778,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.055,0.0,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,40.926,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
@@ -417,6 +419,7 @@ base-misc-ground-conductivity.xml,69.398,69.398,39.116,39.116,30.282,0.0,0.0,0.0
base-misc-loads-large-uncommon.xml,157.947,157.947,72.247,72.247,77.7,0.0,2.5,5.5,0.0,0.0,0.0,0.776,0.0,0.0,6.369,1.524,10.763,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,7.506,2.575,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,1.621,0.0,9.207,4.437,3.415,0.0,0.0,0.0,5.118,24.934,0.0,0.0,0.0,0.0,0.0,49.967,0.0,0.0,2.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-loads-large-uncommon2.xml,104.431,104.431,68.697,68.697,27.734,0.0,2.5,5.5,0.0,0.0,0.0,0.776,0.0,0.0,6.369,1.524,10.763,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,7.506,2.575,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,1.621,0.0,9.207,0.887,3.415,0.0,0.0,0.0,5.118,24.934,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-loads-none.xml,67.952,67.952,27.881,27.881,40.071,0.0,0.0,0.0,0.0,0.0,0.0,1.247,0.0,0.0,4.381,0.977,10.775,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.063,0.0,0.0,0.284,0.347,1.436,1.529,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,40.071,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-misc-multiple-buildings.xml,62.868,62.868,39.024,39.024,23.844,0.0,0.0,0.0,0.0,0.0,0.0,0.742,0.0,0.0,5.271,1.226,10.766,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.082,0.0,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.844,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-neighbor-shading.xml,74.275,74.275,38.731,38.731,35.544,0.0,0.0,0.0,0.0,0.0,0.0,1.106,0.0,0.0,4.765,1.081,10.772,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.069,0.0,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,35.544,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-terrain-shielding.xml,79.284,79.284,38.248,38.248,41.036,0.0,0.0,0.0,0.0,0.0,0.0,1.277,0.0,0.0,4.258,0.941,10.777,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.058,0.0,0.0,0.284,0.347,1.436,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,41.036,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-unit-multiplier-detailed-electric-panel.xml,723.091,723.091,392.246,392.246,330.845,0.0,0.0,0.0,0.0,0.0,0.0,10.299,0.0,0.0,52.128,12.009,107.703,0.0,0.0,45.072,0.0,3.339,0.0,0.0,0.0,0.0,20.742,0.0,0.0,2.843,3.469,14.364,15.286,0.0,21.155,83.836,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,330.845,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
diff --git a/workflow/tests/base_results/results_simulations_hvac.csv b/workflow/tests/base_results/results_simulations_hvac.csv
index 67c67c3c44..0767ec532e 100644
--- a/workflow/tests/base_results/results_simulations_hvac.csv
+++ b/workflow/tests/base_results/results_simulations_hvac.csv
@@ -68,6 +68,8 @@ base-bldgtype-mf-unit.xml,6.8,91.76,10000.0,12000.0,0.0,5884.0,0.0,2732.0,0.0,28
base-bldgtype-mf-whole-building-common-spaces.xml,6.8,91.76,75000.0,36000.0,0.0,184939.0,0.0,12740.0,0.0,1148.0,19546.0,73730.0,0.0,3495.0,0.0,74278.0,0.0,0.0,93826.0,0.0,12400.0,0.0,412.0,3532.0,38802.0,0.0,0.0,0.0,10032.0,0.0,25180.0,0.0,3464.0,-5456.0,0.0,-10656.0,0.0,5200.0
base-bldgtype-mf-whole-building-detailed-electric-panel.xml,6.8,91.76,60000.0,72000.0,0.0,81800.0,0.0,19110.0,0.0,1722.0,10626.0,0.0,2232.0,0.0,3830.0,44282.0,0.0,0.0,54508.0,0.0,18600.0,0.0,618.0,1356.0,0.0,592.0,0.0,2228.0,5992.0,0.0,19920.0,0.0,5196.0,-1564.0,0.0,-6364.0,0.0,4800.0
base-bldgtype-mf-whole-building-inter-unit-heat-transfer.xml,6.8,91.76,75000.0,36000.0,0.0,81800.0,0.0,19110.0,0.0,1722.0,10626.0,0.0,2232.0,0.0,3830.0,44282.0,0.0,0.0,54508.0,0.0,18600.0,0.0,618.0,1356.0,0.0,592.0,0.0,2228.0,5992.0,0.0,19920.0,0.0,5196.0,-1564.0,0.0,-6364.0,0.0,4800.0
+base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,6.8,91.76,60000.0,72000.0,0.0,81800.0,0.0,19110.0,0.0,1722.0,10626.0,0.0,2232.0,0.0,3830.0,44282.0,0.0,0.0,54508.0,0.0,18600.0,0.0,618.0,1356.0,0.0,592.0,0.0,2228.0,5992.0,0.0,19920.0,0.0,5196.0,-1564.0,0.0,-6364.0,0.0,4800.0
+base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,6.8,91.76,60000.0,72000.0,0.0,81800.0,0.0,19110.0,0.0,1722.0,10626.0,0.0,2232.0,0.0,3830.0,44282.0,0.0,0.0,54508.0,0.0,18600.0,0.0,618.0,1356.0,0.0,592.0,0.0,2228.0,5992.0,0.0,19920.0,0.0,5196.0,-1564.0,0.0,-6364.0,0.0,4800.0
base-bldgtype-mf-whole-building.xml,6.8,91.76,60000.0,72000.0,0.0,81800.0,0.0,19110.0,0.0,1722.0,10626.0,0.0,2232.0,0.0,3830.0,44282.0,0.0,0.0,54508.0,0.0,18600.0,0.0,618.0,1356.0,0.0,592.0,0.0,2228.0,5992.0,0.0,19920.0,0.0,5196.0,-1564.0,0.0,-6364.0,0.0,4800.0
base-bldgtype-sfa-unit-2stories.xml,6.8,91.76,50000.0,36000.0,0.0,37662.0,18108.0,5459.0,0.0,575.0,5653.0,0.0,0.0,1286.0,1436.0,5144.0,0.0,0.0,27802.0,14340.0,5459.0,0.0,207.0,513.0,0.0,0.0,0.0,1517.0,699.0,0.0,3320.0,0.0,1747.0,118.0,61.0,-743.0,0.0,800.0
base-bldgtype-sfa-unit-atticroof-cathedral.xml,6.8,91.76,50000.0,36000.0,0.0,32069.0,0.0,3404.0,0.0,575.0,4472.0,17187.0,0.0,1286.0,0.0,5144.0,0.0,0.0,19124.0,0.0,3759.0,0.0,207.0,362.0,9045.0,0.0,0.0,0.0,699.0,0.0,3320.0,0.0,1731.0,57.0,0.0,-743.0,0.0,800.0
@@ -417,6 +419,7 @@ base-misc-ground-conductivity.xml,6.8,91.76,35000.0,24000.0,0.0,41543.0,17659.0,
base-misc-loads-large-uncommon.xml,6.8,91.76,35000.0,24000.0,0.0,42791.0,17749.0,7963.0,0.0,575.0,6833.0,0.0,0.0,1738.0,2155.0,5779.0,0.0,0.0,29288.0,13405.0,7750.0,0.0,207.0,507.0,0.0,0.0,0.0,2276.0,622.0,0.0,4520.0,0.0,0.0,256.0,117.0,-661.0,0.0,800.0
base-misc-loads-large-uncommon2.xml,6.8,91.76,35000.0,24000.0,0.0,42791.0,17749.0,7963.0,0.0,575.0,6833.0,0.0,0.0,1738.0,2155.0,5779.0,0.0,0.0,29288.0,13405.0,7750.0,0.0,207.0,507.0,0.0,0.0,0.0,2276.0,622.0,0.0,4520.0,0.0,0.0,256.0,117.0,-661.0,0.0,800.0
base-misc-loads-none.xml,6.8,91.76,35000.0,24000.0,0.0,41543.0,17659.0,7963.0,0.0,575.0,6833.0,0.0,0.0,1738.0,2155.0,4620.0,0.0,0.0,27993.0,13311.0,7750.0,0.0,207.0,507.0,0.0,0.0,0.0,2276.0,622.0,0.0,3320.0,0.0,0.0,265.0,126.0,-661.0,0.0,800.0
+base-misc-multiple-buildings.xml,6.8,91.76,35000.0,24000.0,0.0,37337.0,17321.0,4095.0,0.0,575.0,6833.0,0.0,0.0,1738.0,2155.0,4620.0,0.0,0.0,26845.0,13220.0,6693.0,0.0,207.0,507.0,0.0,0.0,0.0,2276.0,622.0,0.0,3320.0,0.0,0.0,274.0,135.0,-661.0,0.0,800.0
base-misc-neighbor-shading.xml,6.8,91.76,35000.0,24000.0,0.0,41543.0,17659.0,7963.0,0.0,575.0,6833.0,0.0,0.0,1738.0,2155.0,4620.0,0.0,0.0,27993.0,13311.0,7750.0,0.0,207.0,507.0,0.0,0.0,0.0,2276.0,622.0,0.0,3320.0,0.0,0.0,265.0,126.0,-661.0,0.0,800.0
base-misc-terrain-shielding.xml,6.8,91.76,35000.0,24000.0,0.0,42977.0,17760.0,7963.0,0.0,575.0,6833.0,0.0,0.0,1738.0,2155.0,5954.0,0.0,0.0,28334.0,13477.0,7750.0,0.0,207.0,507.0,0.0,0.0,0.0,2276.0,797.0,0.0,3320.0,0.0,0.0,-89.0,-42.0,-847.0,0.0,800.0
base-misc-unit-multiplier-detailed-electric-panel.xml,6.8,91.76,350000.0,240000.0,0.0,415430.0,176590.0,79630.0,0.0,5750.0,68330.0,0.0,0.0,17380.0,21550.0,46200.0,0.0,0.0,279930.0,133110.0,77500.0,0.0,2070.0,5070.0,0.0,0.0,0.0,22760.0,6220.0,0.0,33200.0,0.0,0.0,2650.0,1260.0,-6610.0,0.0,8000.0
diff --git a/workflow/tests/base_results/results_simulations_loads.csv b/workflow/tests/base_results/results_simulations_loads.csv
index 9962d9bbdc..c42e7e972c 100644
--- a/workflow/tests/base_results/results_simulations_loads.csv
+++ b/workflow/tests/base_results/results_simulations_loads.csv
@@ -68,6 +68,8 @@ base-bldgtype-mf-unit.xml,0.874,0.0,8.855,10.368,0.803,0.0,0.0,0.0,-0.002,1.733,
base-bldgtype-mf-whole-building-common-spaces.xml,32.136,0.0,25.127,62.257,5.114,0.0,0.0,0.0,4.073,8.581,0.758,5.14,0.738,9.587,-9.488,0.0,0.0,7.496,4.742,-0.461,25.618,0.0,0.0,0.0,0.0,-20.749,-4.109,0.0,4.766,2.138,-0.017,1.549,-0.014,-0.676,10.472,0.0,0.0,-1.416,-4.844,-0.458,-4.982,-3.014,0.0,0.0,0.0,18.541,3.211
base-bldgtype-mf-whole-building-detailed-electric-panel.xml,42.848,0.0,46.206,62.257,5.025,0.0,0.0,0.0,7.506,18.678,0.0,0.0,2.332,28.808,-25.699,0.0,0.0,6.83,0.0,-2.246,50.84,0.0,0.0,0.0,0.0,-37.437,-7.196,0.0,-0.624,-3.615,0.0,0.0,-0.132,-3.394,34.136,0.0,0.0,-4.567,0.0,-2.224,-12.949,-8.713,0.0,0.0,0.0,41.256,7.445
base-bldgtype-mf-whole-building-inter-unit-heat-transfer.xml,25.499,0.0,27.485,62.257,5.051,0.0,0.0,0.0,3.507,14.838,0.0,0.0,1.139,14.466,-13.661,0.0,0.0,3.483,0.0,-0.846,25.725,0.0,0.0,0.0,0.0,-19.632,-3.789,0.0,-0.201,3.591,0.0,0.0,-0.076,-1.602,16.306,0.0,0.0,-2.615,0.0,-0.838,-5.935,-4.659,0.0,0.0,0.0,20.144,3.531
+base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,0.0,0.0,46.206,62.257,5.025,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.624,-3.615,0.0,0.0,-0.132,-3.394,34.136,0.0,0.0,-4.567,0.0,-2.224,-12.949,-8.713,0.0,0.0,0.0,41.256,7.445
+base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,0.0,0.0,46.206,62.257,5.025,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.624,-3.615,0.0,0.0,-0.132,-3.394,34.136,0.0,0.0,-4.567,0.0,-2.224,-12.949,-8.713,0.0,0.0,0.0,41.256,7.445
base-bldgtype-mf-whole-building.xml,42.848,0.0,46.206,62.257,5.025,0.0,0.0,0.0,7.506,18.678,0.0,0.0,2.332,28.808,-25.699,0.0,0.0,6.83,0.0,-2.246,50.84,0.0,0.0,0.0,0.0,-37.437,-7.196,0.0,-0.624,-3.615,0.0,0.0,-0.132,-3.394,34.136,0.0,0.0,-4.567,0.0,-2.224,-12.949,-8.713,0.0,0.0,0.0,41.256,7.445
base-bldgtype-sfa-unit-2stories.xml,21.184,0.0,14.036,9.917,0.848,0.0,0.0,0.0,2.32,5.42,0.513,4.086,0.685,8.173,-8.762,0.0,0.0,0.0,4.908,-0.141,7.469,0.0,0.513,0.0,6.928,-8.542,-2.656,0.0,0.04,-0.332,-0.004,1.463,0.025,-0.305,8.46,0.0,0.0,0.0,-4.13,-0.136,-1.253,-3.076,-0.08,0.0,4.325,7.25,1.851
base-bldgtype-sfa-unit-atticroof-cathedral.xml,38.881,0.0,14.043,9.917,0.857,0.0,0.0,31.429,0.0,3.219,0.515,3.553,0.669,5.248,-5.69,0.0,0.0,0.0,3.796,-0.61,7.622,0.0,0.533,0.0,0.0,-9.144,-2.814,6.478,0.0,-0.022,0.039,1.32,0.082,0.208,5.213,0.0,0.0,0.0,-4.317,-0.577,-0.781,-1.509,-0.044,0.0,0.0,6.637,1.694
@@ -417,6 +419,7 @@ base-misc-ground-conductivity.xml,28.801,0.0,20.34,9.917,0.848,0.0,0.0,0.0,3.321
base-misc-loads-large-uncommon.xml,23.712,0.0,26.006,9.917,0.843,0.0,0.0,0.0,3.37,3.845,0.872,7.23,0.67,11.447,-12.401,0.0,0.0,0.0,8.569,-0.066,5.371,0.0,0.504,0.0,10.576,-14.081,-2.561,0.0,-0.339,-0.442,-0.069,2.213,-0.028,-0.983,13.097,0.0,0.0,0.0,-6.803,-0.062,-1.131,-4.915,-0.104,0.0,10.233,13.52,1.946
base-misc-loads-large-uncommon2.xml,23.712,0.0,26.006,9.917,0.843,0.0,0.0,0.0,3.37,3.845,0.872,7.23,0.67,11.447,-12.401,0.0,0.0,0.0,8.569,-0.066,5.371,0.0,0.504,0.0,10.576,-14.081,-2.561,0.0,-0.339,-0.442,-0.069,2.213,-0.028,-0.983,13.097,0.0,0.0,0.0,-6.803,-0.062,-1.131,-4.915,-0.104,0.0,10.233,13.52,1.946
base-misc-loads-none.xml,38.118,0.0,16.544,9.917,0.854,0.0,0.0,0.0,3.196,3.918,0.896,6.832,0.688,11.704,-13.415,0.0,0.0,0.0,8.081,-0.165,5.678,0.0,0.519,0.0,16.184,-3.635,-2.737,0.0,0.163,-0.06,0.026,2.649,0.065,0.227,12.083,0.0,0.0,0.0,-5.989,-0.16,-0.725,-3.554,-0.064,0.0,7.363,2.867,1.77
+base-misc-multiple-buildings.xml,22.677,0.0,20.901,9.917,0.845,0.0,0.0,0.0,3.335,3.806,0.86,7.193,0.656,4.029,-11.135,0.0,0.0,0.0,8.613,-0.038,5.306,0.0,0.498,0.0,10.132,-8.228,-2.571,0.0,-0.255,-0.413,-0.065,2.424,-0.024,1.88,11.481,0.0,0.0,0.0,-6.346,-0.036,-1.119,-4.599,-0.101,0.0,8.657,7.568,1.936
base-misc-neighbor-shading.xml,33.808,0.0,18.331,9.917,0.851,0.0,0.0,0.0,3.23,3.975,0.914,6.944,0.679,11.819,-11.45,0.0,0.0,0.0,8.124,-0.131,5.557,0.0,0.511,0.0,14.549,-8.61,-2.665,0.0,0.027,-0.283,-0.046,2.561,0.038,-0.484,10.783,0.0,0.0,0.0,-6.144,-0.127,-0.857,-3.893,-0.077,0.0,7.915,7.179,1.843
base-misc-terrain-shielding.xml,39.032,0.0,15.689,9.917,0.855,0.0,0.0,0.0,3.373,4.164,0.969,7.729,0.81,12.312,-13.455,0.0,0.0,0.0,7.778,-0.211,9.789,0.0,0.523,0.0,16.543,-8.921,-2.753,0.0,0.019,-0.208,-0.016,1.488,0.018,0.356,12.043,0.0,0.0,0.0,-6.422,-0.205,-1.388,-5.168,-0.056,0.0,6.73,6.861,1.755
base-misc-unit-multiplier-detailed-electric-panel.xml,314.684,0.0,204.383,99.17,8.488,0.0,0.0,0.0,32.539,38.712,8.805,70.245,6.758,115.374,-128.347,0.0,0.0,0.0,82.46,-1.158,55.105,0.0,5.088,0.0,136.653,-84.889,-26.358,0.0,-0.764,-2.428,-0.204,24.673,0.199,-3.592,126.63,0.0,0.0,0.0,-64.036,-1.114,-9.23,-41.554,-0.841,0.0,86.133,73.028,18.713
diff --git a/workflow/tests/base_results/results_simulations_misc.csv b/workflow/tests/base_results/results_simulations_misc.csv
index 40133f1a28..bf0981a1d8 100644
--- a/workflow/tests/base_results/results_simulations_misc.csv
+++ b/workflow/tests/base_results/results_simulations_misc.csv
@@ -68,6 +68,8 @@ base-bldgtype-mf-unit.xml,0.0,0.0,0.0,1323.0,910.7,12046.2,4107.6,1704.3,2124.6,
base-bldgtype-mf-whole-building-common-spaces.xml,0.0,1.0,0.0,7938.3,5463.9,72300.7,24653.5,18292.3,14055.5,18292.3,18292.3,14055.5,18292.3,34.285,23.944,0.0
base-bldgtype-mf-whole-building-detailed-electric-panel.xml,1.0,3.0,0.0,7938.3,5463.9,72300.4,24653.4,22806.9,17029.8,22806.9,22806.9,17029.8,22806.9,56.7,55.826,0.0
base-bldgtype-mf-whole-building-inter-unit-heat-transfer.xml,0.0,13.0,0.0,7938.3,5463.9,72301.2,24653.7,17487.1,13311.0,17487.1,17487.1,13311.0,17487.1,33.045,29.122,0.0
+base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,0.0,3.0,0.0,7938.3,5463.9,72300.4,24653.4,12351.1,17029.8,17029.8,12351.1,17029.8,17029.8,0.0,55.826,0.0
+base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,0.0,3.0,0.0,7938.3,5463.9,72300.4,24653.4,12351.1,17029.8,17029.8,12351.1,17029.8,17029.8,0.0,55.826,0.0
base-bldgtype-mf-whole-building.xml,1.0,3.0,0.0,7938.3,5463.9,72300.4,24653.4,22806.9,17029.8,22806.9,22806.9,17029.8,22806.9,56.7,55.826,0.0
base-bldgtype-sfa-unit-2stories.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,2284.6,4135.4,4135.4,2284.6,4135.4,4135.4,24.119,23.735,0.0
base-bldgtype-sfa-unit-atticroof-cathedral.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,2348.4,4189.9,4189.9,2348.4,4189.9,4189.9,27.94,23.668,0.0
@@ -334,7 +336,7 @@ base-hvac-mini-split-heat-pump-ductless-detailed-performance-autosize.xml,116.0,
base-hvac-mini-split-heat-pump-ductless-detailed-performance.xml,2.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,4884.6,3158.5,4884.6,4884.6,3158.5,4884.6,16.237,13.202,0.0
base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,4517.0,2597.7,4517.0,4517.0,2597.7,4517.0,16.761,13.202,0.0
base-hvac-mini-split-heat-pump-ductless.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,4642.1,2597.7,4642.1,4642.1,2597.7,4642.1,17.103,13.202,0.0
-base-hvac-multiple.xml,0.0,68.0,0.0,1286.4,890.5,11468.6,3942.3,9092.5,4347.1,9092.5,9092.5,4347.1,9092.5,48.101,24.037,0.0
+base-hvac-multiple.xml,0.0,68.0,0.0,1286.4,890.5,11468.6,3942.3,9092.6,4347.1,9092.6,9092.6,4347.1,9092.6,48.101,24.037,0.0
base-hvac-none.xml,0.0,0.0,0.0,1286.4,890.5,8592.4,2953.6,1350.0,1270.8,1350.0,1350.0,1270.8,1350.0,0.0,0.0,0.0
base-hvac-ptac-cfis.xml,0.0,0.0,0.0,1286.4,890.5,11468.6,3942.3,2154.4,3284.2,3284.2,2154.4,3284.2,3284.2,0.0,13.289,0.0
base-hvac-ptac-with-heating-electricity.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,6197.0,3272.4,6197.0,6197.0,3272.4,6197.0,17.103,13.202,0.0
@@ -417,6 +419,7 @@ base-misc-ground-conductivity.xml,0.0,91.0,0.0,1286.4,890.5,11468.6,3942.3,2279.
base-misc-loads-large-uncommon.xml,0.0,195.0,0.0,1286.4,890.5,11468.6,3942.3,3477.5,5303.7,5303.7,3477.5,5303.7,5303.7,31.972,23.111,0.0
base-misc-loads-large-uncommon2.xml,0.0,195.0,0.0,1286.4,890.5,11468.6,3942.3,3427.4,4901.2,4901.2,3427.4,4901.2,4901.2,31.972,23.111,0.0
base-misc-loads-none.xml,0.0,37.0,0.0,1286.4,890.5,11468.5,3942.3,1817.8,3504.9,3504.9,1817.8,3504.9,3504.9,34.854,22.489,0.0
+base-misc-multiple-buildings.xml,0.0,52.0,0.0,1286.4,890.5,11468.5,3942.3,2254.7,3776.4,3776.4,2254.7,3776.4,3776.4,28.872,22.642,0.0
base-misc-neighbor-shading.xml,0.0,56.0,0.0,1286.4,890.5,11468.6,3942.3,2296.8,3777.2,3777.2,2296.8,3777.2,3777.2,33.624,22.643,0.0
base-misc-terrain-shielding.xml,0.0,48.0,0.0,1286.4,890.5,11468.6,3942.3,2335.3,3947.9,3947.9,2335.3,3947.9,3947.9,33.781,22.513,0.0
base-misc-unit-multiplier-detailed-electric-panel.xml,0.0,97.0,0.0,12864.4,8904.9,114685.2,39422.7,23191.0,37767.2,37767.2,23191.0,37767.2,37767.2,336.001,228.831,0.0
diff --git a/workflow/tests/base_results/results_simulations_panel.csv b/workflow/tests/base_results/results_simulations_panel.csv
index ba0b7e9386..a5eaf5f4a6 100644
--- a/workflow/tests/base_results/results_simulations_panel.csv
+++ b/workflow/tests/base_results/results_simulations_panel.csv
@@ -68,6 +68,8 @@ base-bldgtype-mf-unit.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.
base-bldgtype-mf-whole-building-common-spaces.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-whole-building-detailed-electric-panel.xml,17584.2,6614.4,33000.6,0.0,7200.0,72000.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,48600.0,100153.8,417.6,782.4,33750.0,140.4,1059.6,12.0,0.0,12.0,0.0,6.0,12.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,36.0,96.0,78.0,18.0
base-bldgtype-mf-whole-building-inter-unit-heat-transfer.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-whole-building.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-2stories.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-atticroof-cathedral.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
@@ -417,6 +419,7 @@ base-misc-ground-conductivity.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.
base-misc-loads-large-uncommon.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-loads-large-uncommon2.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-loads-none.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-misc-multiple-buildings.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-neighbor-shading.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-terrain-shielding.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-misc-unit-multiplier-detailed-electric-panel.xml,3500.0,43822.0,55001.0,57600.0,12000.0,120000.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,126000.0,213769.0,891.0,1109.0,56250.0,234.0,1766.0,10.0,20.0,20.0,20.0,10.0,20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,60.0,190.0,160.0,30.0
diff --git a/workflow/tests/util.rb b/workflow/tests/util.rb
index c1c930a372..55da36f3b6 100644
--- a/workflow/tests/util.rb
+++ b/workflow/tests/util.rb
@@ -15,6 +15,7 @@ def run_simulation_tests(xmls)
next unless xml.include?('sample_files') || xml.include?('real_homes') # Exclude e.g. ASHRAE 140 files
next if xml.include? 'base-bldgtype-mf-whole-building' # Already has multiple dwelling units
+ next if xml.include? 'base-bldgtype-mf-unit-shared' # FUTURE: Allow someday, but need to use @sameas attribute and size the shared HVAC equipment
next if xml.include? 'base-misc-multiple-buildings.xml' # Already has multiple building elements
# Also run with a 10x unit multiplier (2 identical dwelling units each with a 5x
@@ -83,18 +84,18 @@ def _run_xml(xml, worker_num, apply_unit_multiplier = false, annual_results_1x =
command = "\"#{cli_path}\" \"#{File.join(File.dirname(__FILE__), '../run_simulation.rb')}\" -x \"#{xml}\" --add-component-loads -o \"#{rundir}\" --debug --monthly ALL#{building_id_str}"
success = system(command)
- if unit_multiplier > 1
- # Clean up
- File.delete(xml)
- xml.gsub!('-10x.xml', '.xml')
- end
-
rundir = File.join(rundir, 'run')
# Check results
print "Simulation failed: #{xml}.\n" unless success
assert_equal(true, success)
+ if unit_multiplier > 1
+ # Clean up
+ File.delete(xml)
+ xml.gsub!('-10x.xml', '.xml')
+ end
+
# Check for output files
annual_csv_path = File.join(rundir, 'results_annual.csv')
monthly_csv_path = File.join(rundir, 'results_timeseries.csv')