diff --git a/HPXMLtoOpenStudio/measure.rb b/HPXMLtoOpenStudio/measure.rb index def3608faa..d9affd1788 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 e19880c03c..6879c7286b 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 630ef544-5cc2-45f5-8e47-f5e11aabdfda - 2025-10-21T15:47:00Z + ec93b84f-6f84-4abd-8ad0-a658cebe0fa5 + 2025-10-21T19:07:52Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -192,7 +192,7 @@ measure.rb rb script - B532C73E + ECA14D60 airflow.rb @@ -348,7 +348,7 @@ defaults.rb rb resource - 2C1F8D25 + F702337C electric_panel.rb @@ -384,7 +384,7 @@ hpxml.rb rb resource - DD8B41A6 + 401C729D hpxml_schema/HPXML.xsd @@ -402,7 +402,7 @@ hpxml_schematron/EPvalidator.sch sch resource - 1961EB81 + CEA3D253 hpxml_schematron/iso-schematron.xsd @@ -414,13 +414,13 @@ hvac.rb rb resource - C775FAF8 + 32303BFB hvac_sizing.rb rb resource - 4D1214E7 + 152A3B22 internal_gains.rb @@ -474,7 +474,7 @@ model.rb rb resource - 4FD33DD9 + A5625A01 output.rb @@ -696,7 +696,7 @@ waterheater.rb rb resource - 003609A7 + 46200810 weather.rb diff --git a/HPXMLtoOpenStudio/resources/defaults.rb b/HPXMLtoOpenStudio/resources/defaults.rb index 379406cb72..0ff9b70dab 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 @@ -1889,15 +1896,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 @@ -2422,13 +2429,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 @@ -2458,13 +2468,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 @@ -2578,19 +2588,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 @@ -2615,7 +2627,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 @@ -2857,8 +2869,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 @@ -4947,7 +4988,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 447b2ccd9a..501c05566e 100644 --- a/HPXMLtoOpenStudio/resources/hpxml.rb +++ b/HPXMLtoOpenStudio/resources/hpxml.rb @@ -410,6 +410,8 @@ class HPXML < Object ScheduleRegular = 'regular schedule' ScheduleAvailable = 'always available' ScheduleUnavailable = 'always unavailable' + SharedBoilerOperationSequenced = 'sequenced' + SharedBoilerOperationSimultaneous = 'simultaneous' ShieldingExposed = 'exposed' ShieldingNormal = 'normal' ShieldingWellShielded = 'well-shielded' @@ -783,6 +785,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. @@ -931,6 +955,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 @@ -995,6 +1020,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, @@ -1069,6 +1098,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) @@ -2125,24 +2155,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 @@ -6430,6 +6462,7 @@ def initialize(hpxml_element, *args, **kwargs) CLASS_ATTRS = [:heating_detailed_performance_data] # [HPXML::HeatingDetailedPerformanceData] ATTRS = [:primary_system, # [Boolean] ../PrimarySystems/PrimaryHeatingSystem/@id :id, # [String] SystemIdentifier/@id + :sameas_id, # [String] SystemIdentifier/@sameas :attached_to_zone_idref, # [String] AttachedToZone/@idref :location, # [String] UnitLocation (HPXML::LocationXXX) :year_installed, # [Integer] YearInstalled @@ -6552,6 +6585,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.parent_object, @sameas_id) + end + # Deletes the current object from the array. # # @return [nil] @@ -6587,6 +6649,7 @@ def to_doc(building) heating_system = XMLHelper.add_element(hvac_plant, 'HeatingSystem') sys_id = XMLHelper.add_element(heating_system, 'SystemIdentifier') XMLHelper.add_attribute(sys_id, 'id', @id) + XMLHelper.add_attribute(sys_id, 'sameas', @sameas_id) unless @sameas_id.nil? if not @attached_to_zone_idref.nil? zone_attached = XMLHelper.add_element(heating_system, 'AttachedToZone') XMLHelper.add_attribute(zone_attached, 'idref', @attached_to_zone_idref) @@ -6658,6 +6721,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) @@ -6745,6 +6809,7 @@ def initialize(hpxml_element, *args, **kwargs) CLASS_ATTRS = [:cooling_detailed_performance_data] # [HPXML::CoolingDetailedPerformanceData] ATTRS = [:primary_system, # [Boolean] ../PrimarySystems/PrimaryCoolingSystem/@idref :id, # [String] SystemIdentifier/@id + :sameas_id, # [String] SystemIdentifier/@sameas :attached_to_zone_idref, # [String] AttachedToZone/@idref :location, # [String] UnitLocation (HPXML::LocationXXX) :year_installed, # [Integer] YearInstalled @@ -6851,6 +6916,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.parent_object, @sameas_id) + end + # Deletes the current object from the array. # # @return [nil] @@ -6886,6 +6967,7 @@ def to_doc(building) cooling_system = XMLHelper.add_element(hvac_plant, 'CoolingSystem') sys_id = XMLHelper.add_element(cooling_system, 'SystemIdentifier') XMLHelper.add_attribute(sys_id, 'id', @id) + XMLHelper.add_attribute(sys_id, 'sameas', @sameas_id) unless @sameas_id.nil? if not @attached_to_zone_idref.nil? zone_attached = XMLHelper.add_element(cooling_system, 'AttachedToZone') XMLHelper.add_attribute(zone_attached, 'idref', @attached_to_zone_idref) @@ -6972,6 +7054,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) @@ -7067,6 +7150,7 @@ def initialize(hpxml_element, *args, **kwargs) ATTRS = [:primary_heating_system, # [Boolean] ../PrimarySystems/PrimaryHeatingSystem/@idref :primary_cooling_system, # [Boolean] ../PrimarySystems/PrimaryCoolingSystem/@idref :id, # [String] SystemIdentifier/@id + :sameas_id, # [String] SystemIdentifier/@sameas :attached_to_zone_idref, # [String] AttachedToZone/@idref :location, # [String] UnitLocation (HPXML::LocationXXX) :year_installed, # [Integer] YearInstalled @@ -7237,6 +7321,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.parent_object, @sameas_id) + end + # Deletes the current object from the array. # # @return [nil] @@ -7274,6 +7374,7 @@ def to_doc(building) heat_pump = XMLHelper.add_element(hvac_plant, 'HeatPump') sys_id = XMLHelper.add_element(heat_pump, 'SystemIdentifier') XMLHelper.add_attribute(sys_id, 'id', @id) + XMLHelper.add_attribute(sys_id, 'sameas', @sameas_id) unless @sameas_id.nil? if not @attached_to_zone_idref.nil? zone_attached = XMLHelper.add_element(heat_pump, 'AttachedToZone') XMLHelper.add_attribute(zone_attached, 'idref', @attached_to_zone_idref) @@ -7402,6 +7503,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) @@ -7829,11 +7931,16 @@ def initialize(hpxml_bldg, *args, **kwargs) :ducts, # [HPXML::Ducts] :manualj_duct_loads] # [HPXML::ManualJDuctLoads] ATTRS = [:id, # [String] SystemIdentifier/@id + :sameas_id, # [String] SystemIdentifier/@sameas :distribution_system_type, # [String] DistributionSystemType/* (HPXML::HVACDistributionTypeXXX) :number_of_return_registers, # [Integer] DistributionSystemType/AirDistribution/NumberofReturnRegisters :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) @@ -7868,16 +7975,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.parent_object, @sameas_id) + end + # Deletes the current object from the array. # # @return [nil] @@ -7919,6 +8035,7 @@ def to_doc(building) hvac_distribution = XMLHelper.add_element(hvac, 'HVACDistribution') sys_id = XMLHelper.add_element(hvac_distribution, 'SystemIdentifier') XMLHelper.add_attribute(sys_id, 'id', @id) + XMLHelper.add_attribute(sys_id, 'sameas', @sameas_id) unless @sameas_id.nil? if [HVACDistributionTypeAir, HVACDistributionTypeHydronic].include? @distribution_system_type distribution_system_type_el = XMLHelper.add_element(hvac_distribution, 'DistributionSystemType') XMLHelper.add_element(distribution_system_type_el, @distribution_system_type) @@ -7928,13 +8045,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) @@ -7962,6 +8084,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) @@ -7975,6 +8098,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? diff --git a/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch b/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch index c20e790d9f..0fee7e520e 100644 --- a/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch +++ b/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.sch @@ -1060,10 +1060,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 @@ -1178,10 +1178,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 @@ -1201,7 +1218,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 @@ -1209,7 +1226,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 @@ -2144,7 +2161,7 @@ [HVACDistribution] - + Expected 1 element(s) for xpath: DistributionSystemType[AirDistribution | HydronicDistribution | Other[text()="DSE"]] @@ -2219,6 +2236,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 61c3cc0a99..d76469eaf9 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,8 +1142,7 @@ 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 @@ -4856,6 +4856,176 @@ 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 + if distribution_system.hydronic_variable_speed_pump + pump_w = 1000.0 + pump = Model.add_pump_variable_speed( + model, + name: "#{obj_name} hydronic pump", + rated_power: pump_w + ) + else + pump = Model.add_pump_constant_speed( + model, + name: "#{obj_name} hydronic pump", + rated_power: 0, + rated_flow_rate: 0 + ) + 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 = OpenStudio::Model::CoilHeatingWaterBaseboard.new(model) + htg_coil.setName(obj_name + ' htg coil') + htg_coil.setConvergenceTolerance(0.001) + htg_coil.setHeatingDesignCapacity(UnitConversions.convert(zone_heating_capacity, 'Btu/hr', 'W')) + htg_coil.setUFactorTimesAreaValue(bb_ua) + htg_coil.setMaximumWaterFlowRate(max_water_flow) + htg_coil.setHeatingDesignCapacityMethod('HeatingDesignCapacity') + 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 +5036,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 5215a7248c..2139bdaa73 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 7bbae47989..6c6652b0ad 100644 --- a/HPXMLtoOpenStudio/resources/model.rb +++ b/HPXMLtoOpenStudio/resources/model.rb @@ -382,6 +382,26 @@ 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 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:, control_type: EPlus::PumpControlTypeIntermittent) + pump = OpenStudio::Model::PumpConstantSpeed.new(model) + pump.setName(name) + pump.setMotorEfficiency(0.3) + pump.setRatedPowerConsumption(rated_power) + pump.setRatedPumpHead(90000) + pump.setRatedFlowRate(rated_flow_rate) + 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 @@ -397,8 +417,8 @@ def self.add_pump_variable_speed(model, name:, rated_power:, control_type: EPlus 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) + rated_flow_rate = pump_eff * rated_power / pump.ratedPumpHead + pump.setRatedFlowRate([rated_flow_rate, 0.00001].max) else pump.setRatedPumpHead(1) pump.setRatedFlowRate(0.01) diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb index 85741a8137..f0e1d59943 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 72bf8b7984..19cdcc6fc3 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 6bdf577b43..d79bb4d483 100644 --- a/ReportSimulationOutput/measure.xml +++ b/ReportSimulationOutput/measure.xml @@ -3,8 +3,8 @@ 3.1 report_simulation_output df9d170c-c21a-4130-866d-0d46b06073fd - 293922f3-86f0-490e-a597-ded31eb1088d - 2025-09-12T22:30:55Z + 790a43e2-7ec9-484d-93de-07ce8d7e7971 + 2025-10-21T16:31:10Z 9BF1E6AC ReportSimulationOutput HPXML Simulation Output Report @@ -1991,7 +1991,7 @@ measure.rb rb script - 7C982932 + 11AB501F
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 74c72a06bc..5cfb2c9127 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 8d35f90d8f..388d793609 100644 --- a/ReportUtilityBills/measure.xml +++ b/ReportUtilityBills/measure.xml @@ -3,8 +3,8 @@ 3.1 report_utility_bills ca88a425-e59a-4bc4-af51-c7e7d1e960fe - 7bf598ce-eccb-4f17-abf2-1feafea64d88 - 2025-10-10T18:27:16Z + 36bcdfbd-3e7b-4a2e-a757-ae3041b1437d + 2025-10-21T16:31:12Z 15BF4E57 ReportUtilityBills Utility Bills Report @@ -180,7 +180,7 @@ measure.rb rb script - F00E41E9 + 1C71BC66
detailed_rates/README.md diff --git a/tasks.rb b/tasks.rb index 18637eca3a..fb39a759e6 100644 --- a/tasks.rb +++ b/tasks.rb @@ -67,18 +67,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 + num_mf_units = 1 + if hpxml_path.include? 'whole-building-common-spaces' + num_mf_units = 8 + elsif hpxml_path.include? 'whole-building' + num_mf_units = 6 end - for i in 1..num_apply_measures + for i in 1..num_mf_units build_residential_hpxml = measures['BuildResidentialHPXML'][0] build_residential_hpxml['existing_hpxml_path'] = hpxml_path if i > 1 - if hpxml_path.include?('whole-building-common-spaces') - suffix = "_#{i}" if i > 1 + suffix = "_#{i}" if i > 1 + + if hpxml_path.include? 'whole-building-common-spaces' build_residential_hpxml['schedules_filepaths'] = (i >= 7 ? nil : "../../HPXMLtoOpenStudio/resources/schedule_files/#{stochastic_sched_basename}-mf-unit#{suffix}.csv") build_residential_hpxml['geometry_foundation_type'] = (i <= 2 ? HPXML::FoundationTypeBasementUnconditioned : HPXML::FoundationTypeAboveApartment) build_residential_hpxml['geometry_attic_type'] = (i >= 7 ? HPXML::AtticTypeVented : HPXML::AtticTypeBelowApartment) @@ -87,10 +88,9 @@ def create_hpxmls build_residential_hpxml['geometry_unit_num_bathrooms'] = (i >= 7 ? 1 : 2) build_residential_hpxml['geometry_unit_height_above_grade'] = { 1 => -7.0, 2 => -7.0, 3 => 1.0, 4 => 1.0, 5 => 9.0, 6 => 9.0, 7 => 17.0, 8 => 17.0 }[i] # Partially conditioned basement + one unconditioned hallway each floor + unconditioned attic - build_residential_hpxml['heating_system_type'] = ([1, 4, 6].include?(i) ? HPXML::HVACTypeElectricResistance : 'none') - build_residential_hpxml['cooling_system_type'] = ([1, 4, 6].include?(i) ? HPXML::HVACTypeRoomAirConditioner : 'none') - elsif hpxml_path.include?('whole-building') - suffix = "_#{i}" if i > 1 + build_residential_hpxml['heating_system_type'] = { 1 => 'ElectricResistance', 2 => 'none', 3 => 'none', 4 => 'ElectricResistance', 5 => 'none', 6 => 'ElectricResistance', 7 => 'none', 8 => 'none' }[i] + build_residential_hpxml['cooling_system_type'] = { 1 => 'room air conditioner', 2 => 'none', 3 => 'none', 4 => 'room air conditioner', 5 => 'none', 6 => 'room air conditioner', 7 => 'none', 8 => 'none' }[i] + elsif hpxml_path.include? 'whole-building' build_residential_hpxml['schedules_filepaths'] = "../../HPXMLtoOpenStudio/resources/schedule_files/#{stochastic_sched_basename}-mf-unit#{suffix}.csv" build_residential_hpxml['geometry_foundation_type'] = (i <= 2 ? HPXML::FoundationTypeBasementUnconditioned : HPXML::FoundationTypeAboveApartment) build_residential_hpxml['geometry_attic_type'] = (i >= 5 ? HPXML::AtticTypeVented : HPXML::AtticTypeBelowApartment) @@ -1647,7 +1647,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?('whole-building') if hpxml_file.include? 'shared-boiler' hpxml_bldg.heating_systems[0].shared_loop_watts = 600 end @@ -2729,6 +2729,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 end diff --git a/workflow/hpxml_inputs.json b/workflow/hpxml_inputs.json index d99e86ebe3..a1245a6ab9 100644 --- a/workflow/hpxml_inputs.json +++ b/workflow/hpxml_inputs.json @@ -3776,6 +3776,12 @@ "electric_panel_service_feeders_load_calculation_types": "2023 Existing Dwelling Load-Based, 2023 Existing Dwelling Meter-Based", "electric_panel_baseline_peak_power": 4500 }, + "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_present": true, 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..1b3bd67124 --- /dev/null +++ b/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml @@ -0,0 +1,2556 @@ + + + + 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 + + 9600.0 + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + outside + basement - unconditioned + 77.1 + wood siding + 0.7 + 0.92 + + + 13.9 + + + + + basement - unconditioned + basement - unconditioned + 30.8 + 0.7 + 0.92 + + + 4.0 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + ground + basement - unconditioned + solid concrete + 8.0 + 800.0 + 7.0 + + none + + + + + continuous - exterior + 10.0 + + + continuous - interior + 0.0 + + + + + + basement - unconditioned + basement - unconditioned + solid concrete + 8.0 + 320.0 + 7.0 + + none + + + + + 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 + + gypsum board + + + + 2.1 + + + + + + + basement - unconditioned + 1200.0 + 100.0 + + + + 0.0 + 0.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 + + 9600.0 + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + outside + basement - unconditioned + 77.1 + wood siding + 0.7 + 0.92 + + + 13.9 + + + + + basement - unconditioned + basement - unconditioned + 30.8 + 0.7 + 0.92 + + + 4.0 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + ground + basement - unconditioned + solid concrete + 8.0 + 800.0 + 7.0 + + none + + + + + continuous - exterior + 10.0 + + + continuous - interior + 0.0 + + + + + + basement - unconditioned + basement - unconditioned + solid concrete + 8.0 + 320.0 + 7.0 + + none + + + + + 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 + + gypsum board + + + + 2.1 + + + + + + + basement - unconditioned + 1200.0 + 100.0 + + + + 0.0 + 0.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 + + 9600.0 + + + + + + + + + + + + + + + + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + other housing unit + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 + + 9600.0 + + + + + + + + + + + + + + + + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + other housing unit + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 + + 9600.0 + + + + + + + + true + + + + SLA + 0.003 + + + + + + + + + + + + + + + + + + + attic - vented + 1341.6 + asphalt or fiberglass shingles + 0.7 + 0.92 + 6.0 + + + 2.3 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + outside + attic - vented + gable + + + + 200.0 + wood siding + 0.7 + 0.92 + + + 4.0 + + + + + attic - vented + attic - vented + + + + 200.0 + 0.7 + 0.92 + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + attic - vented + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 + + 9600.0 + + + + + + + + true + + + + SLA + 0.003 + + + + + + + + + + + + + + + + + + + attic - vented + 1341.6 + asphalt or fiberglass shingles + 0.7 + 0.92 + 6.0 + + + 2.3 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + outside + attic - vented + gable + + + + 200.0 + wood siding + 0.7 + 0.92 + + + 4.0 + + + + + attic - vented + attic - vented + + + + 200.0 + 0.7 + 0.92 + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + attic - vented + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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..6f3fe7cded --- /dev/null +++ b/workflow/sample_files/base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml @@ -0,0 +1,2556 @@ + + + + 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 + + 9600.0 + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + outside + basement - unconditioned + 77.1 + wood siding + 0.7 + 0.92 + + + 13.9 + + + + + basement - unconditioned + basement - unconditioned + 30.8 + 0.7 + 0.92 + + + 4.0 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + ground + basement - unconditioned + solid concrete + 8.0 + 800.0 + 7.0 + + none + + + + + continuous - exterior + 10.0 + + + continuous - interior + 0.0 + + + + + + basement - unconditioned + basement - unconditioned + solid concrete + 8.0 + 320.0 + 7.0 + + none + + + + + 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 + + gypsum board + + + + 2.1 + + + + + + + basement - unconditioned + 1200.0 + 100.0 + + + + 0.0 + 0.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 + + 9600.0 + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + outside + basement - unconditioned + 77.1 + wood siding + 0.7 + 0.92 + + + 13.9 + + + + + basement - unconditioned + basement - unconditioned + 30.8 + 0.7 + 0.92 + + + 4.0 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + ground + basement - unconditioned + solid concrete + 8.0 + 800.0 + 7.0 + + none + + + + + continuous - exterior + 10.0 + + + continuous - interior + 0.0 + + + + + + basement - unconditioned + basement - unconditioned + solid concrete + 8.0 + 320.0 + 7.0 + + none + + + + + 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 + + gypsum board + + + + 2.1 + + + + + + + basement - unconditioned + 1200.0 + 100.0 + + + + 0.0 + 0.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 + + 9600.0 + + + + + + + + + + + + + + + + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + other housing unit + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 + + 9600.0 + + + + + + + + + + + + + + + + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + other housing unit + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 + + 9600.0 + + + + + + + + true + + + + SLA + 0.003 + + + + + + + + + + + + + + + + + + + attic - vented + 1341.6 + asphalt or fiberglass shingles + 0.7 + 0.92 + 6.0 + + + 2.3 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + outside + attic - vented + gable + + + + 200.0 + wood siding + 0.7 + 0.92 + + + 4.0 + + + + + attic - vented + attic - vented + + + + 200.0 + 0.7 + 0.92 + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + attic - vented + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 + + 9600.0 + + + + + + + + true + + + + SLA + 0.003 + + + + + + + + + + + + + + + + + + + attic - vented + 1341.6 + asphalt or fiberglass shingles + 0.7 + 0.92 + 6.0 + + + 2.3 + + + + + + + outside + conditioned space + + + + 800.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 22.7 + + + + + other housing unit + conditioned space + + + + 320.0 + 0.7 + 0.92 + + gypsum board + + + + 4.0 + + + + + outside + attic - vented + gable + + + + 200.0 + wood siding + 0.7 + 0.92 + + + 4.0 + + + + + attic - vented + attic - vented + + + + 200.0 + 0.7 + 0.92 + + + 4.0 + + + + + + + other housing unit + conditioned space + floor + + + + 1200.0 + + + 5.3 + + + + + attic - vented + conditioned space + ceiling + + + + 1200.0 + + gypsum board + + + + 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 abe86b8924..a7f7f1421a 100644 --- a/workflow/tests/base_results/results_simulations_bills.csv +++ b/workflow/tests/base_results/results_simulations_bills.csv @@ -67,6 +67,8 @@ base-bldgtype-mf-unit-shared-water-heater.xml,1016.68,144.0,569.22,0.0,713.22,14 base-bldgtype-mf-unit.xml,1278.22,144.0,980.51,0.0,1124.51,144.0,9.71,153.71,0.0,0.0,0.0,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,8190.24,1152.0,7038.24,0.0,8190.24,0.0,0.0,0.0,0.0,0.0,0.0,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,8481.29,864.0,7617.29,0.0,8481.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,8350.69,864.0,6050.98,0.0,6914.98,864.0,571.71,1435.71,0.0,0.0,0.0,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,8366.25,864.0,6050.98,0.0,6914.98,864.0,587.27,1451.27,0.0,0.0,0.0,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,8481.29,864.0,7617.29,0.0,8481.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, base-bldgtype-sfa-unit-2stories.xml,1874.87,144.0,1351.97,0.0,1495.97,144.0,234.9,378.9,0.0,0.0,0.0,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,2096.64,144.0,1370.91,0.0,1514.91,144.0,437.73,581.73,0.0,0.0,0.0,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 5dcbf72b68..2991113632 100644 --- a/workflow/tests/base_results/results_simulations_energy.csv +++ b/workflow/tests/base_results/results_simulations_energy.csv @@ -67,6 +67,8 @@ base-bldgtype-mf-unit-shared-water-heater.xml,30.871,30.871,15.638,15.638,15.233 base-bldgtype-mf-unit.xml,27.865,27.865,26.938,26.938,0.928,0.0,0.0,0.0,0.0,0.0,0.0,0.025,0.0,0.0,2.221,0.538,11.175,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.183,0.0,0.0,0.291,0.357,1.477,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.928,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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,193.361,193.361,193.361,193.361,0.0,0.0,0.0,0.0,0.0,0.0,32.577,0.0,0.0,0.0,11.554,0.0,67.405,0.0,0.0,19.519,0.0,1.819,0.0,0.0,0.0,0.0,12.382,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.269,209.269,209.269,209.269,0.0,0.0,0.0,0.0,0.0,0.0,43.037,0.0,0.0,0.0,22.201,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.612,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.853,220.853,166.238,166.238,54.615,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.201,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.612,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.615,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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.34,222.34,166.238,166.238,56.102,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.201,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.612,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,56.102,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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.269,209.269,209.269,209.269,0.0,0.0,0.0,0.0,0.0,0.0,43.037,0.0,0.0,0.0,22.201,0.0,67.308,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.612,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.582,59.582,37.143,37.143,22.439,0.0,0.0,0.0,0.0,0.0,0.0,0.689,0.0,0.0,3.858,0.815,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.439,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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,79.479,79.479,37.663,37.663,41.816,0.0,0.0,0.0,0.0,0.0,0.0,1.282,0.0,0.0,3.829,0.783,10.779,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.053,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.816,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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 67125ab576..ff6fbed30b 100644 --- a/workflow/tests/base_results/results_simulations_hvac.csv +++ b/workflow/tests/base_results/results_simulations_hvac.csv @@ -67,6 +67,8 @@ base-bldgtype-mf-unit-shared-water-heater.xml,6.8,91.76,10000.0,12000.0,0.0,5884 base-bldgtype-mf-unit.xml,6.8,91.76,10000.0,12000.0,0.0,5884.0,0.0,2732.0,0.0,287.0,1510.0,0.0,0.0,0.0,0.0,1354.0,0.0,0.0,7403.0,0.0,2731.0,0.0,103.0,193.0,0.0,0.0,0.0,0.0,183.0,0.0,3320.0,0.0,872.0,605.0,0.0,-195.0,0.0,800.0 base-bldgtype-mf-whole-building-common-spaces.xml,6.8,91.76,72000.0,36000.0,0.0,178233.0,0.0,12740.0,0.0,1148.0,27014.0,73730.0,9667.0,3495.0,0.0,50436.0,0.0,0.0,96718.0,0.0,12400.0,0.0,412.0,5576.0,38802.0,4050.0,0.0,0.0,6828.0,0.0,25180.0,0.0,3464.0,-2052.0,0.0,-7252.0,0.0,5200.0 base-bldgtype-mf-whole-building-detailed-electric-panel.xml,6.8,91.76,60000.0,72000.0,0.0,81802.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,81802.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,81802.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,81802.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,5654.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,4473.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 diff --git a/workflow/tests/base_results/results_simulations_loads.csv b/workflow/tests/base_results/results_simulations_loads.csv index 04469cf3d4..f74fd15546 100644 --- a/workflow/tests/base_results/results_simulations_loads.csv +++ b/workflow/tests/base_results/results_simulations_loads.csv @@ -67,6 +67,8 @@ base-bldgtype-mf-unit-shared-water-heater.xml,1.149,0.0,8.333,10.368,0.467,0.0,0 base-bldgtype-mf-unit.xml,0.876,0.0,8.841,10.368,0.803,0.0,0.0,0.0,-0.002,1.736,0.0,0.0,0.265,2.609,-1.716,0.0,0.0,-0.012,0.0,-0.238,0.815,0.0,0.298,0.0,0.0,-2.475,-0.488,0.0,0.002,-1.938,0.0,0.0,-0.237,-2.679,6.847,0.0,0.0,-0.007,0.0,-0.23,-0.945,-1.531,-0.395,0.0,0.0,8.611,1.537 base-bldgtype-mf-whole-building-common-spaces.xml,32.547,0.0,24.548,62.257,5.123,0.0,0.0,0.0,3.963,8.61,0.768,4.916,0.735,9.578,-9.538,0.0,0.0,7.877,5.207,-0.44,25.561,0.0,0.0,0.0,0.0,-20.803,-4.117,0.0,4.688,2.117,-0.031,1.688,-0.012,-0.65,10.424,0.0,0.0,-1.759,-5.067,-0.438,-4.989,-2.988,0.0,0.0,0.0,18.486,3.203 base-bldgtype-mf-whole-building-detailed-electric-panel.xml,42.979,0.0,45.97,62.257,5.026,0.0,0.0,0.0,7.623,18.745,0.0,0.0,2.328,28.836,-25.733,0.0,0.0,6.833,0.0,-2.245,50.885,0.0,0.0,0.0,0.0,-37.509,-7.209,0.0,-0.814,-3.686,0.0,0.0,-0.127,-3.337,34.102,0.0,0.0,-4.565,0.0,-2.223,-12.876,-8.694,0.0,0.0,0.0,41.182,7.431 +base-bldgtype-mf-whole-building-shared-boilers-sequenced.xml,0.0,0.0,45.97,62.257,5.026,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.814,-3.686,0.0,0.0,-0.127,-3.337,34.102,0.0,0.0,-4.565,0.0,-2.223,-12.876,-8.694,0.0,0.0,0.0,41.182,7.431 +base-bldgtype-mf-whole-building-shared-boilers-simultaneous.xml,0.0,0.0,45.97,62.257,5.026,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.814,-3.686,0.0,0.0,-0.127,-3.337,34.102,0.0,0.0,-4.565,0.0,-2.223,-12.876,-8.694,0.0,0.0,0.0,41.182,7.431 base-bldgtype-mf-whole-building.xml,42.979,0.0,45.97,62.257,5.026,0.0,0.0,0.0,7.623,18.745,0.0,0.0,2.328,28.836,-25.733,0.0,0.0,6.833,0.0,-2.245,50.885,0.0,0.0,0.0,0.0,-37.509,-7.209,0.0,-0.814,-3.686,0.0,0.0,-0.127,-3.337,34.102,0.0,0.0,-4.565,0.0,-2.223,-12.876,-8.694,0.0,0.0,0.0,41.182,7.431 base-bldgtype-sfa-unit-2stories.xml,21.328,0.0,13.673,9.917,0.849,0.0,0.0,0.0,2.397,5.442,0.516,4.083,0.683,8.17,-8.769,0.0,0.0,0.0,4.902,-0.14,7.469,0.0,0.513,0.0,6.996,-8.547,-2.657,0.0,-0.064,-0.351,-0.007,1.467,0.026,-0.297,8.453,0.0,0.0,0.0,-4.125,-0.135,-1.25,-3.063,-0.079,0.0,4.064,7.246,1.85 base-bldgtype-sfa-unit-atticroof-cathedral.xml,39.727,0.0,12.899,9.917,0.858,0.0,0.0,32.369,0.0,3.235,0.516,3.572,0.661,5.22,-5.792,0.0,0.0,0.0,3.872,-0.557,7.625,0.0,0.534,0.0,0.0,-9.233,-2.841,5.12,0.0,-0.005,0.039,1.379,0.085,0.228,5.11,0.0,0.0,0.0,-4.165,-0.524,-0.754,-1.466,-0.041,0.0,0.0,6.546,1.666 diff --git a/workflow/tests/base_results/results_simulations_misc.csv b/workflow/tests/base_results/results_simulations_misc.csv index d9eed0b72c..59afd1586b 100644 --- a/workflow/tests/base_results/results_simulations_misc.csv +++ b/workflow/tests/base_results/results_simulations_misc.csv @@ -67,6 +67,8 @@ base-bldgtype-mf-unit-shared-water-heater.xml,0.0,0.0,0.0,1323.0,910.6,12046.2,4 base-bldgtype-mf-unit.xml,0.0,0.0,0.0,1323.0,910.7,12046.2,4107.6,1704.1,2124.2,2124.2,1704.1,2124.2,2124.2,3.934,8.322,0.0 base-bldgtype-mf-whole-building-common-spaces.xml,0.0,1.0,0.0,7938.3,5463.9,72300.7,24653.5,18343.5,13889.9,18343.5,18343.5,13889.9,18343.5,34.206,23.542,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,22821.0,17023.0,22821.0,22821.0,17023.0,22821.0,56.702,55.778,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,12346.7,17023.0,17023.0,12346.7,17023.0,17023.0,0.0,55.778,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,12346.7,17023.0,17023.0,12346.7,17023.0,17023.0,0.0,55.778,0.0 base-bldgtype-mf-whole-building.xml,1.0,3.0,0.0,7938.3,5463.9,72300.4,24653.4,22821.0,17023.0,22821.0,22821.0,17023.0,22821.0,56.702,55.778,0.0 base-bldgtype-sfa-unit-2stories.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,2256.0,4063.6,4063.6,2256.0,4063.6,4063.6,24.136,22.99,0.0 base-bldgtype-sfa-unit-atticroof-cathedral.xml,0.0,0.0,0.0,1286.4,890.5,11468.5,3942.3,2348.5,4080.1,4080.1,2348.5,4080.1,4080.1,27.96,22.585,0.0 diff --git a/workflow/tests/base_results/results_simulations_panel.csv b/workflow/tests/base_results/results_simulations_panel.csv index 44103793d4..a4ef52f3f3 100644 --- a/workflow/tests/base_results/results_simulations_panel.csv +++ b/workflow/tests/base_results/results_simulations_panel.csv @@ -67,6 +67,8 @@ base-bldgtype-mf-unit-shared-water-heater.xml,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0. 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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-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 diff --git a/workflow/tests/util.rb b/workflow/tests/util.rb index 870c102099..93c1512910 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 # Also run with a 10x unit multiplier (2 identical dwelling units each with a 5x # unit multiplier) and check how the results compare to the original run @@ -81,18 +82,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" 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')