From 1f5a98e1b4148399cc956f18ad75112328babf21 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 15:03:01 -0600 Subject: [PATCH 01/10] Initial pass. Still need to resolve one diff and test further w/ shorter timesteps. --- HPXMLtoOpenStudio/measure.xml | 8 +- HPXMLtoOpenStudio/resources/airflow.rb | 182 +++--- HPXMLtoOpenStudio/resources/constants.rb | 2 +- tasks.rb | 1 + workflow/hpxml_inputs.json | 8 + workflow/run_simulation.rb | 2 +- .../base-mechvent-cfis-15-mins.xml | 567 +++++++++++++++++ ...-cfis-supplemental-fan-exhaust-15-mins.xml | 574 ++++++++++++++++++ 8 files changed, 1262 insertions(+), 82 deletions(-) create mode 100644 workflow/sample_files/base-mechvent-cfis-15-mins.xml create mode 100644 workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 2d7f57822c..a91b0fef67 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - a34fa4e4-deee-4e59-8f0b-8c1a2c574cdc - 2024-10-23T18:46:26Z + 73158f3c-9e6e-495b-8ea1-0ddc984403d6 + 2024-10-24T20:50:23Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - F2AD4FE1 + 27922237 battery.rb @@ -207,7 +207,7 @@ constants.rb rb resource - 8660B5E9 + 22E067E1 constructions.rb diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index 64df447128..3dbadc6015 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -725,7 +725,7 @@ def self.create_return_air_duct_zone(model, loop_name, unit_multiplier, adiabati # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [TODO] TODO def self.initialize_cfis(model, vent_fans, airloop_map, unavailable_periods) - cfis_data = { airloop: {}, t_sum_open_damper_var: {}, f_vent_only_mode_var: {} } + cfis_data = { airloop: {}, sum_oa_cfm_var: {}, f_vent_only_mode_var: {} } return cfis_data if vent_fans[:mech].empty? index = 0 @@ -742,9 +742,9 @@ def self.initialize_cfis(model, vent_fans, airloop_map, unavailable_periods) cfis_data[:airloop][vent_mech.id] = airloop_map[cfis_id] end - cfis_data[:t_sum_open_damper_var][vent_mech.id] = Model.add_ems_global_var( + cfis_data[:sum_oa_cfm_var][vent_mech.id] = Model.add_ems_global_var( model, - var_name: "#{Constants::ObjectTypeMechanicalVentilation} cfis t sum open damper #{index}" + var_name: "#{Constants::ObjectTypeMechanicalVentilation} cfis sum oa cfm #{index}" ) cfis_data[:f_vent_only_mode_var][vent_mech.id] = Model.add_ems_global_var( model, @@ -756,7 +756,7 @@ def self.initialize_cfis(model, vent_fans, airloop_map, unavailable_periods) model, name: "#{Constants::ObjectTypeMechanicalVentilation} cfis init program #{index}" ) - cfis_program.addLine("Set #{cfis_data[:t_sum_open_damper_var][vent_mech.id].name} = 0") + cfis_program.addLine("Set #{cfis_data[:sum_oa_cfm_var][vent_mech.id].name} = 0") cfis_program.addLine("Set #{cfis_data[:f_vent_only_mode_var][vent_mech.id].name} = 0") Model.add_ems_program_calling_manager( @@ -1966,6 +1966,8 @@ def self.calc_hrv_erv_effectiveness(vent_mech_fans) # @param fan_data [TODO] TODO # @return [nil] def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_actuator, cfis_suppl_fan_actuator, fan_data) + infil_program.addLine("Set #{cfis_fan_actuator.name} = 0.0") + infil_program.addLine("Set #{cfis_suppl_fan_actuator.name} = 0.0") unless cfis_suppl_fan_actuator.nil? infil_program.addLine('Set QWHV_cfis_sup = 0.0') # CFIS supply outdoor airflow rate infil_program.addLine('Set QWHV_cfis_suppl_sup = 0.0') # CFIS supplemental fan supply outdoor airflow rate infil_program.addLine('Set QWHV_cfis_suppl_exh = 0.0') # CFIS supplemental fan exhaust outdoor airflow rate @@ -1977,97 +1979,127 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine("Set fan_rtf_hvac = fan_rtf_hvac + #{rtf_sensor.name}") end - t_sum_open_damper_var = cfis_data[:t_sum_open_damper_var][vent_mech.id] + sum_oa_cfm_var = cfis_data[:sum_oa_cfm_var][vent_mech.id] f_vent_only_mode_var = cfis_data[:f_vent_only_mode_var][vent_mech.id] - infil_program.addLine('If @ABS(Minute - ZoneTimeStep*60) < 0.1') - infil_program.addLine(" Set #{t_sum_open_damper_var.name} = 0") # New hour, time on summation re-initializes to 0 - infil_program.addLine('EndIf') - - infil_program.addLine("Set t_min_hr_open = #{[vent_mech.hours_in_operation / 24.0 * 60.0, 59.999].min}") # Minimum CFIS damper open time in minutes - infil_program.addLine("Set Q_duct_oa = #{UnitConversions.convert(vent_mech.oa_unit_flow_rate, 'cfm', 'm^3/s')}") - infil_program.addLine("Set #{f_vent_only_mode_var.name} = 0") + infil_program.addLine("Set f_operation = #{[vent_mech.hours_in_operation / 24.0, 0.0001].max}") # Operation, fraction of hour + infil_program.addLine("Set oa_cfm_ah = #{UnitConversions.convert(vent_mech.oa_unit_flow_rate, 'cfm', 'm^3/s')}") if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan - infil_program.addLine("Set suppl_fan_w = #{vent_mech.cfis_supplemental_fan.unit_fan_power}") # W, fan power for additional ventilation only mode runtime + if vent_mech.cfis_supplemental_fan.oa_unit_flow_rate < vent_mech.average_unit_flow_rate + runner.registerWarning("CFIS supplemental fan '#{vent_mech.cfis_supplemental_fan.id}' is undersized (#{vent_mech.cfis_supplemental_fan.oa_unit_flow_rate} cfm) compared to the target hourly ventilation rate (#{vent_mech.average_unit_flow_rate} cfm).") + end + infil_program.addLine("Set suppl_fan_w = #{vent_mech.cfis_supplemental_fan.unit_fan_power}") # W, supplemental fan power + infil_program.addLine("Set oa_cfm_suppl = #{UnitConversions.convert(vent_mech.cfis_supplemental_fan.oa_unit_flow_rate, 'cfm', 'm^3/s')}") elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler - infil_program.addLine("Set ah_fan_w = #{vent_mech.unit_fan_power}") # W, fan power for additional ventilation only mode runtime + infil_program.addLine("Set ah_fan_w = #{vent_mech.unit_fan_power}") # W, air handler fan power end if vent_mech.cfis_control_type == HPXML::CFISControlTypeTimer # Ventilation occurs at fixed intervals regardless of HVAC operation - infil_program.addLine('Set f_open_damper_ah = t_min_hr_open/60') - infil_program.addLine("Set #{f_vent_only_mode_var.name} = f_open_damper_ah * (1 - fan_rtf_hvac)") # Fraction of the timestep with ventilation only mode runtime per ANSI 301-2022 Addendum E - infil_program.addLine("Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") # Fan energy associated with ventilation only mode runtime + + # Calculate outdoor air ventilation + infil_program.addLine('Set QWHV_cfis_sup = QWHV_cfis_sup + (oa_cfm_ah * f_operation)') + + # Calculate fraction of the timestep with ventilation only mode runtime per ANSI 301-2022 Addendum E + infil_program.addLine("Set #{f_vent_only_mode_var.name} = f_operation * (1 - fan_rtf_hvac)") + + # Calculate additional fan energy + infil_program.addLine("Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") + elsif vent_mech.cfis_control_type == HPXML::CFISControlTypeOptimized # Ventilation optimized to make use of HVAC operation - infil_program.addLine('Set f_open_damper = 0') - infil_program.addLine("Set has_additional_runtime = #{vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeNone ? 0 : 1}") - infil_program.addLine("If #{t_sum_open_damper_var.name} < t_min_hr_open") # Check whether we've met the minimum hourly runtime - infil_program.addLine(" Set t_damper_open = 60 - (t_min_hr_open - #{t_sum_open_damper_var.name})") # Minute of the hour at which the damper must be opened - infil_program.addLine(' If ((Minute+0.00001) >= t_damper_open) && (has_additional_runtime == 1)') # Check whether the damper must be opened to achieve target minutes per hour of operation - infil_program.addLine(' Set open_damper_runtime = @Max (@ABS(Minute - t_damper_open)) (fan_rtf_hvac * ZoneTimeStep * 60)') # How many minutes this timestep the damper is open - infil_program.addLine(" Set open_damper_runtime = @Min open_damper_runtime (t_min_hr_open - #{t_sum_open_damper_var.name})") # Make sure it's not exceeding target ventilation - infil_program.addLine(" Set #{t_sum_open_damper_var.name} = #{t_sum_open_damper_var.name} + open_damper_runtime") # How many minutes this hour the damper is open - infil_program.addLine(' Set f_open_damper = open_damper_runtime / (60.0 * ZoneTimeStep)') # Fraction of the timestep that the damper is open - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = @Max (f_open_damper - fan_rtf_hvac) 0.0") # Fraction of the timestep with ventilation only mode runtime + + infil_program.addLine("Set #{f_vent_only_mode_var.name} = 0") + infil_program.addLine('If @ABS(Minute - ZoneTimeStep*60) < 0.1') + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = 0") # New hour, re-initialize to 0 + infil_program.addLine('EndIf') + + # Calculate target outdoor air ventilation for the hour + infil_program.addLine('Set oa_cfm_target = f_operation * oa_cfm_ah') + + # Calculate outdoor air ventilation still needed for the hour + infil_program.addLine("Set oa_cfm_needed = oa_cfm_target - #{sum_oa_cfm_var.name}") + infil_program.addLine('If oa_cfm_needed > 0.00001') + + # Calculate available outdoor air ventilation during HVAC runtime + infil_program.addLine(' Set oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah') + + # Calculate actual outdoor air ventilation brought in during HVAC runtime + if vent_mech.cfis_has_outdoor_air_control + infil_program.addLine(' Set oa_cfm_during_hvac = @Min oa_cfm_during_hvac_avail oa_cfm_needed') + else + # Outdoor air is introduced for the entire time the HVAC system is running + infil_program.addLine(' Set oa_cfm_during_hvac = oa_cfm_during_hvac_avail') + end + infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + oa_cfm_during_hvac') + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_hvac") + + # Calculate additional outdoor air ventilation still needed for the hour after HVAC runtime + infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_needed - oa_cfm_during_hvac') + + # Calculate outdoor air ventilation that can be brought in during subsequent timesteps of the hour if needed + if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler + infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_ah)') + elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan + infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_suppl)') + elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeNone + infil_program.addLine(' Set oa_cfm_addtl_needed = 0') + end + infil_program.addLine(' If oa_cfm_addtl_needed > 0.00001') + if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler # Air handler meets additional runtime requirement - infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + ah_fan_w * #{f_vent_only_mode_var.name}") # Fan energy associated with ventilation only mode runtime + + # Calculate available outdoor air ventilation during non-HVAC runtime + infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah') + + # Calculate actual outdoor air ventilation brought in during non-HVAC runtime + infil_program.addLine(' Set oa_cfm_during_non_hvac = @Min oa_cfm_during_non_hvac_avail oa_cfm_addtl_needed') + infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + oa_cfm_during_non_hvac') + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_non_hvac") + + # Calculate fraction of the timestep with ventilation only mode runtime + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / (@Max oa_cfm_during_non_hvac_avail 0.00001)) * (1.0 - fan_rtf_hvac)") # @Max used to prevent divide be zero + + # Calculate additional fan energy + infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + ah_fan_w * #{f_vent_only_mode_var.name}") + elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan # Supplemental fan meets additional runtime requirement - if vent_mech.cfis_supplemental_fan.oa_unit_flow_rate < vent_mech.average_unit_flow_rate - runner.registerWarning("CFIS supplemental fan '#{vent_mech.cfis_supplemental_fan.id}' is undersized (#{vent_mech.cfis_supplemental_fan.oa_unit_flow_rate} cfm) compared to the target hourly ventilation rate (#{vent_mech.average_unit_flow_rate} cfm).") - end - infil_program.addLine(" Set suppl_Q_oa = #{UnitConversions.convert(vent_mech.cfis_supplemental_fan.oa_unit_flow_rate, 'cfm', 'm^3/s')}") - if vent_mech.cfis_supplemental_fan.oa_unit_flow_rate > 0 - infil_program.addLine(" Set suppl_f = #{f_vent_only_mode_var.name} / (suppl_Q_oa / Q_duct_oa)") # Calculate desired runtime for supplemental fan to provide remaining ventilation requirement - infil_program.addLine(' Set suppl_f = @Min suppl_f 1.0') # Ensure desired runtime does not exceed 100% (if the supplemental fan is undersized) - else - infil_program.addLine(' Set suppl_f = 0.0') - end - infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + suppl_fan_w * suppl_f") - if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (suppl_f * suppl_Q_oa)') - elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (suppl_f * suppl_Q_oa)') - end - end - infil_program.addLine(' Else') # No additional ventilation mode runtime - infil_program.addLine(' Set open_damper_runtime = fan_rtf_hvac * ZoneTimeStep * 60') # How many minutes this timestep the damper is open - infil_program.addLine(" If (#{t_sum_open_damper_var.name} + open_damper_runtime) > t_min_hr_open") # Damper is only open for a portion of this time step to achieve target ventilation - infil_program.addLine(" Set open_damper_runtime = t_min_hr_open - #{t_sum_open_damper_var.name}") - infil_program.addLine(' EndIf') - infil_program.addLine(' Set f_open_damper = open_damper_runtime / (ZoneTimeStep * 60)') # Fraction of the timestep that the damper is open - infil_program.addLine(" Set #{t_sum_open_damper_var.name} = #{t_sum_open_damper_var.name} + open_damper_runtime") # How many minutes this hour the damper is open - infil_program.addLine(' EndIf') - infil_program.addLine('EndIf') - # Calculate fraction of the timestep that the damper is open and the air handler fan is running - if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan - infil_program.addLine("Set f_open_damper_ah = @Max (f_open_damper - #{f_vent_only_mode_var.name}) 0.0") - else - infil_program.addLine('Set f_open_damper_ah = f_open_damper') - end + # Calculate available outdoor air ventilation during non-HVAC runtime + infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl') - if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan && vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan - # Additionally run supplemental fan when damper is open and HVAC system is running - infil_program.addLine("Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") + # Calculate actual outdoor air ventilation brought in during non-HVAC runtime + infil_program.addLine(' Set oa_cfm_during_non_hvac = @Min oa_cfm_during_non_hvac_avail oa_cfm_addtl_needed') if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine('Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * suppl_Q_oa)') + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + oa_cfm_during_non_hvac') elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine('Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * suppl_Q_oa)') + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + oa_cfm_during_non_hvac') + end + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_non_hvac") + + # Calculate fraction of the timestep with ventilation only mode runtime + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / (@Max oa_cfm_during_non_hvac_avail 0.00001)) * (1.0 - fan_rtf_hvac)") # @Max used to prevent divide be zero + + # Calculate additional fan energy + infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + suppl_fan_w * #{f_vent_only_mode_var.name}") + + # If specified, additionally run supplemental fan when damper is open and HVAC system is running + if vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan + infil_program.addLine(' Set f_open_damper_ah = (oa_cfm_during_hvac / (@Max oa_cfm_during_hvac_avail 0.00001)) * fan_rtf_hvac') # @Max used to prevent divide be zero + infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") + if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)') + elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)') + end end end - end - - # If no outdoor air control, then outdoor air is introduced for at least the entire time the HVAC system is running - infil_program.addLine("Set has_outdoor_air_control = #{vent_mech.cfis_has_outdoor_air_control ? 1 : 0}") - infil_program.addLine('If has_outdoor_air_control == 0') - infil_program.addLine(' Set f_open_damper_ah = @Max f_open_damper_ah fan_rtf_hvac') - infil_program.addLine('EndIf') - # Airflow brought in through air handler - infil_program.addLine('Set QWHV_cfis_sup = QWHV_cfis_sup + (f_open_damper_ah * Q_duct_oa)') + infil_program.addLine(' EndIf') + infil_program.addLine('EndIf') + end end end @@ -2592,8 +2624,6 @@ def self.apply_infiltration_ventilation_to_conditioned(runner, model, spaces, we fan_sens_load_actuator, fan_lat_load_actuator = setup_mech_vent_vars_actuators(model, spaces, infil_program, sensors) # Apply CFIS - infil_program.addLine("Set #{cfis_fan_actuator.name} = 0.0") - infil_program.addLine("Set #{cfis_suppl_fan_actuator.name} = 0.0") unless cfis_suppl_fan_actuator.nil? apply_cfis(runner, infil_program, vent_fans[:mech_cfis], cfis_data, cfis_fan_actuator, cfis_suppl_fan_actuator, fan_data) # Calculate combined air exchange (infiltration and mechanical ventilation) diff --git a/HPXMLtoOpenStudio/resources/constants.rb b/HPXMLtoOpenStudio/resources/constants.rb index 0321d7ca28..eb1528a7cf 100644 --- a/HPXMLtoOpenStudio/resources/constants.rb +++ b/HPXMLtoOpenStudio/resources/constants.rb @@ -86,7 +86,7 @@ module Constants # Arrays/Maps ERIVersions = ['2014', '2014A', '2014AE', '2014AEG', '2019', '2019A', - '2019AB', '2019ABC', '2019ABCD', '2022', '2022C'] + '2019AB', '2019ABC', '2019ABCD', '2022', '2022C', '2022CE'] IECCZones = ['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C', '4A', '4B', '4C', '5A', '5B', '5C', '6A', '6B', '6C', '7', '8'] StateCodesMap = { 'AK' => 'Alaska', diff --git a/tasks.rb b/tasks.rb index 6e758c7068..370f737f76 100644 --- a/tasks.rb +++ b/tasks.rb @@ -2282,6 +2282,7 @@ def apply_hpxml_modification_sample_files(hpxml_path, hpxml) elsif ['base-mechvent-cfis-no-outdoor-air-control.xml'].include? hpxml_file hpxml_bldg.ventilation_fans[0].cfis_has_outdoor_air_control = false elsif ['base-mechvent-cfis-supplemental-fan-exhaust.xml', + 'base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml', 'base-mechvent-cfis-supplemental-fan-supply.xml', 'base-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml'].include? hpxml_file hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}", diff --git a/workflow/hpxml_inputs.json b/workflow/hpxml_inputs.json index 954643115d..85f14ccdf4 100644 --- a/workflow/hpxml_inputs.json +++ b/workflow/hpxml_inputs.json @@ -3181,6 +3181,10 @@ "mech_vent_fan_power": 300, "mech_vent_num_units_served": 1 }, + "sample_files/base-mechvent-cfis-15-mins.xml": { + "parent_hpxml": "sample_files/base-mechvent-cfis.xml", + "simulation_control_timestep": 15 + }, "sample_files/base-mechvent-cfis-airflow-fraction-zero.xml": { "parent_hpxml": "sample_files/base-mechvent-cfis.xml" }, @@ -3218,6 +3222,10 @@ "parent_hpxml": "sample_files/base-mechvent-cfis.xml", "mech_vent_fan_power": null }, + "sample_files/base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml": { + "parent_hpxml": "sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml", + "simulation_control_timestep": 15 + }, "sample_files/base-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml": { "parent_hpxml": "sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml" }, diff --git a/workflow/run_simulation.rb b/workflow/run_simulation.rb index 3cd84a466f..83f1ce0066 100644 --- a/workflow/run_simulation.rb +++ b/workflow/run_simulation.rb @@ -179,7 +179,7 @@ def run_workflow(basedir, rundir, hpxml, debug, skip_validation, add_comp_loads, end options[:debug] = false - opts.on('-d', '--debug', 'Generate additional OpenStudio/EnergyPlus output files for debugging') do |_t| + opts.on('-d', '--debug', 'Generate additional OpenStudio and EnergyPlus files for debugging') do |_t| options[:debug] = true end diff --git a/workflow/sample_files/base-mechvent-cfis-15-mins.xml b/workflow/sample_files/base-mechvent-cfis-15-mins.xml new file mode 100644 index 0000000000..0f9f3834e1 --- /dev/null +++ b/workflow/sample_files/base-mechvent-cfis-15-mins.xml @@ -0,0 +1,567 @@ + + + + HPXML + tasks.rb + 2000-01-01T00:00:00-07:00 + create + + + + + 15 + + + + Bills + + + + + + + + +
+ CO +
+
+ + proposed workscope + + + + + suburban + stand-alone + no units above or below + 180 + + electricity + natural gas + + + + single-family detached + 2.0 + 1.0 + 8.0 + 3 + 2 + 2700.0 + 21600.0 + + + + + 2006 + 5B + + + + USA_CO_Denver.Intl.AP.725650_TMY3 + + USA_CO_Denver.Intl.AP.725650_TMY3.epw + + + + + + + + 50.0 + + ACH + 3.0 + + 21600.0 + + + + + + + + false + + + false + + + + + + + + + + + true + + + + + + + + + + + attic - unvented + 1509.3 + asphalt or fiberglass shingles + 0.7 + 0.92 + 6.0 + + + 2.3 + + + + + + + outside + basement - conditioned + 115.6 + wood siding + 0.7 + 0.92 + + + 23.0 + + + + + + + outside + conditioned space + + + + 1200.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 23.0 + + + + + outside + attic - unvented + gable + + + + 225.0 + wood siding + 0.7 + 0.92 + + + 4.0 + + + + + + + ground + basement - conditioned + 8.0 + 1200.0 + 8.0 + 7.0 + + gypsum board + + + + + continuous - exterior + 8.9 + 0.0 + 8.0 + + + continuous - interior + 0.0 + + + + + + + + attic - unvented + conditioned space + ceiling + + + + 1350.0 + + gypsum board + + + + 39.3 + + + + + + + basement - conditioned + 1350.0 + 4.0 + 150.0 + + + + 0.0 + 0.0 + + + + + + 0.0 + 0.0 + + + + 0.0 + 0.0 + + + + + + + 108.0 + 0 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + 72.0 + 90 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + 108.0 + 180 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + 72.0 + 270 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + + + + 40.0 + 180 + 4.4 + + + + + + + + + + + + + + + + + natural gas + 36000.0 + + AFUE + 0.92 + + 1.0 + + + + + central air conditioner + electricity + 24000.0 + single stage + 1.0 + + SEER + 13.0 + + 0.73 + + + + + 68.0 + 78.0 + + + + + + regular velocity + + supply + + CFM25 + 75.0 + to outside + + + + return + + CFM25 + 25.0 + to outside + + + + + supply + 4.0 + attic - unvented + 150.0 + + + + return + 0.0 + attic - unvented + 50.0 + + + + + + + + + + central fan integrated supply + + air handler fan + + 330.0 + 8.0 + true + 300.0 + + + + + + + + electricity + storage water heater + conditioned space + 40.0 + 1.0 + 18767.0 + 0.95 + 125.0 + + + + + + 50.0 + + + + 0.0 + + + + + shower head + true + + + + faucet + false + + + + + + + conditioned space + 1.21 + 380.0 + 0.12 + 1.09 + 27.0 + 6.0 + 3.2 + + + + conditioned space + electricity + 3.73 + true + 150.0 + + + + conditioned space + 307.0 + 12 + 0.12 + 1.09 + 22.32 + 4.0 + + + + conditioned space + 650.0 + + + + conditioned space + electricity + false + + + + false + + + + + + interior + 0.4 + + + + + + + interior + 0.1 + + + + + + + interior + 0.25 + + + + + + + exterior + 0.4 + + + + + + + exterior + 0.1 + + + + + + + exterior + 0.25 + + + + + + + + + TV other + + kWh/year + 620.0 + + + + + other + + kWh/year + 2457.0 + + + 0.855 + 0.045 + + + + +
+
\ No newline at end of file diff --git a/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml b/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml new file mode 100644 index 0000000000..fd7e0b0b07 --- /dev/null +++ b/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml @@ -0,0 +1,574 @@ + + + + HPXML + tasks.rb + 2000-01-01T00:00:00-07:00 + create + + + + + 15 + + + + Bills + + + + + + + + +
+ CO +
+
+ + proposed workscope + + + + + suburban + stand-alone + no units above or below + 180 + + electricity + natural gas + + + + single-family detached + 2.0 + 1.0 + 8.0 + 3 + 2 + 2700.0 + 21600.0 + + + + + 2006 + 5B + + + + USA_CO_Denver.Intl.AP.725650_TMY3 + + USA_CO_Denver.Intl.AP.725650_TMY3.epw + + + + + + + + 50.0 + + ACH + 3.0 + + 21600.0 + + + + + + + + false + + + false + + + + + + + + + + + true + + + + + + + + + + + attic - unvented + 1509.3 + asphalt or fiberglass shingles + 0.7 + 0.92 + 6.0 + + + 2.3 + + + + + + + outside + basement - conditioned + 115.6 + wood siding + 0.7 + 0.92 + + + 23.0 + + + + + + + outside + conditioned space + + + + 1200.0 + wood siding + 0.7 + 0.92 + + gypsum board + + + + 23.0 + + + + + outside + attic - unvented + gable + + + + 225.0 + wood siding + 0.7 + 0.92 + + + 4.0 + + + + + + + ground + basement - conditioned + 8.0 + 1200.0 + 8.0 + 7.0 + + gypsum board + + + + + continuous - exterior + 8.9 + 0.0 + 8.0 + + + continuous - interior + 0.0 + + + + + + + + attic - unvented + conditioned space + ceiling + + + + 1350.0 + + gypsum board + + + + 39.3 + + + + + + + basement - conditioned + 1350.0 + 4.0 + 150.0 + + + + 0.0 + 0.0 + + + + + + 0.0 + 0.0 + + + + 0.0 + 0.0 + + + + + + + 108.0 + 0 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + 72.0 + 90 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + 108.0 + 180 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + 72.0 + 270 + 0.33 + 0.45 + + + 0.7 + 0.85 + + 0.67 + + + + + + + + 40.0 + 180 + 4.4 + + + + + + + + + + + + + + + + + natural gas + 36000.0 + + AFUE + 0.92 + + 1.0 + + + + + central air conditioner + electricity + 24000.0 + single stage + 1.0 + + SEER + 13.0 + + 0.73 + + + + + 68.0 + 78.0 + + + + + + regular velocity + + supply + + CFM25 + 75.0 + to outside + + + + return + + CFM25 + 25.0 + to outside + + + + + supply + 4.0 + attic - unvented + 150.0 + + + + return + 0.0 + attic - unvented + 50.0 + + + + + + + + + + central fan integrated supply + + supplemental fan + + + 330.0 + 8.0 + true + + + + + exhaust only + 120.0 + true + 30.0 + + + + + + + electricity + storage water heater + conditioned space + 40.0 + 1.0 + 18767.0 + 0.95 + 125.0 + + + + + + 50.0 + + + + 0.0 + + + + + shower head + true + + + + faucet + false + + + + + + + conditioned space + 1.21 + 380.0 + 0.12 + 1.09 + 27.0 + 6.0 + 3.2 + + + + conditioned space + electricity + 3.73 + true + 150.0 + + + + conditioned space + 307.0 + 12 + 0.12 + 1.09 + 22.32 + 4.0 + + + + conditioned space + 650.0 + + + + conditioned space + electricity + false + + + + false + + + + + + interior + 0.4 + + + + + + + interior + 0.1 + + + + + + + interior + 0.25 + + + + + + + exterior + 0.4 + + + + + + + exterior + 0.1 + + + + + + + exterior + 0.25 + + + + + + + + + TV other + + kWh/year + 620.0 + + + + + other + + kWh/year + 2457.0 + + + 0.855 + 0.045 + + + + +
+
\ No newline at end of file From 8893f6b5b38f5280bdce36edd3a75ebfdae01929 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 15:20:12 -0600 Subject: [PATCH 02/10] Bugfix. --- HPXMLtoOpenStudio/measure.xml | 6 +++--- HPXMLtoOpenStudio/resources/airflow.rb | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index a91b0fef67..f4cef9c7b0 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 73158f3c-9e6e-495b-8ea1-0ddc984403d6 - 2024-10-24T20:50:23Z + a1580001-5f5d-4427-b46c-1d7485873922 + 2024-10-24T21:19:59Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - 27922237 + EC88B41A
battery.rb diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index 3dbadc6015..1dfde02663 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -2034,6 +2034,17 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + oa_cfm_during_hvac') infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_hvac") + # If specified, additionally run supplemental fan when ventilating during HVAC runtime + if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan && vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan + infil_program.addLine(' Set f_open_damper_ah = (oa_cfm_during_hvac / (@Max oa_cfm_during_hvac_avail 0.00001)) * fan_rtf_hvac') # @Max used to prevent divide be zero + infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") + if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)') + elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)') + end + end + # Calculate additional outdoor air ventilation still needed for the hour after HVAC runtime infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_needed - oa_cfm_during_hvac') @@ -2062,7 +2073,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / (@Max oa_cfm_during_non_hvac_avail 0.00001)) * (1.0 - fan_rtf_hvac)") # @Max used to prevent divide be zero # Calculate additional fan energy - infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + ah_fan_w * #{f_vent_only_mode_var.name}") + infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan # Supplemental fan meets additional runtime requirement @@ -2083,18 +2094,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / (@Max oa_cfm_during_non_hvac_avail 0.00001)) * (1.0 - fan_rtf_hvac)") # @Max used to prevent divide be zero # Calculate additional fan energy - infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + suppl_fan_w * #{f_vent_only_mode_var.name}") - - # If specified, additionally run supplemental fan when damper is open and HVAC system is running - if vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan - infil_program.addLine(' Set f_open_damper_ah = (oa_cfm_during_hvac / (@Max oa_cfm_during_hvac_avail 0.00001)) * fan_rtf_hvac') # @Max used to prevent divide be zero - infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") - if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)') - elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)') - end - end + infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * #{f_vent_only_mode_var.name})") end infil_program.addLine(' EndIf') From d86c05086a6197c8756f591e41c969b31c5fabff Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 17:13:29 -0600 Subject: [PATCH 03/10] Introduce ZoneTimestep into calculations. --- HPXMLtoOpenStudio/measure.xml | 6 +-- HPXMLtoOpenStudio/resources/airflow.rb | 68 +++++++++++++------------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index f4cef9c7b0..8473af312b 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - a1580001-5f5d-4427-b46c-1d7485873922 - 2024-10-24T21:19:59Z + 526e2dfb-4779-42fe-8e9e-9a4f568d480f + 2024-10-24T23:12:54Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - EC88B41A + 0A911A55 battery.rb diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index 1dfde02663..f5e170e6fb 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -2014,41 +2014,43 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine(" Set #{sum_oa_cfm_var.name} = 0") # New hour, re-initialize to 0 infil_program.addLine('EndIf') - # Calculate target outdoor air ventilation for the hour + # Calculate hourly-average target outdoor air ventilation infil_program.addLine('Set oa_cfm_target = f_operation * oa_cfm_ah') - # Calculate outdoor air ventilation still needed for the hour + # Calculate hourly-average outdoor air ventilation still needed for the hour infil_program.addLine("Set oa_cfm_needed = oa_cfm_target - #{sum_oa_cfm_var.name}") - infil_program.addLine('If oa_cfm_needed > 0.00001') + infil_program.addLine('If oa_cfm_needed > 0') - # Calculate available outdoor air ventilation during HVAC runtime - infil_program.addLine(' Set oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah') + # Calculate hourly-average available outdoor air ventilation during HVAC runtime + infil_program.addLine(' Set oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah * ZoneTimestep') - # Calculate actual outdoor air ventilation brought in during HVAC runtime + # Calculate hourly-average actual outdoor air ventilation brought in during HVAC runtime if vent_mech.cfis_has_outdoor_air_control infil_program.addLine(' Set oa_cfm_during_hvac = @Min oa_cfm_during_hvac_avail oa_cfm_needed') else # Outdoor air is introduced for the entire time the HVAC system is running infil_program.addLine(' Set oa_cfm_during_hvac = oa_cfm_during_hvac_avail') end - infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + oa_cfm_during_hvac') + infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (oa_cfm_during_hvac / ZoneTimestep)') # Converted to timestep cfm infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_hvac") # If specified, additionally run supplemental fan when ventilating during HVAC runtime if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan && vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan - infil_program.addLine(' Set f_open_damper_ah = (oa_cfm_during_hvac / (@Max oa_cfm_during_hvac_avail 0.00001)) * fan_rtf_hvac') # @Max used to prevent divide be zero - infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") + infil_program.addLine(' If oa_cfm_during_hvac > 0') + infil_program.addLine(' Set f_open_damper_ah = (oa_cfm_during_hvac / oa_cfm_during_hvac_avail) * fan_rtf_hvac') + infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)') + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl / ZoneTimestep)') # Converted to timestep cfm elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)') + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl / ZoneTimestep)') # Converted to timestep cfm end + infil_program.addLine('EndIf') end - # Calculate additional outdoor air ventilation still needed for the hour after HVAC runtime + # Calculate hourly-average additional outdoor air ventilation still needed for the hour after HVAC runtime infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_needed - oa_cfm_during_hvac') - # Calculate outdoor air ventilation that can be brought in during subsequent timesteps of the hour if needed + # Calculate hourly-average outdoor air ventilation that can be brought in during subsequent timesteps of the hour if needed if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_ah)') elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan @@ -2056,45 +2058,45 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeNone infil_program.addLine(' Set oa_cfm_addtl_needed = 0') end - infil_program.addLine(' If oa_cfm_addtl_needed > 0.00001') + infil_program.addLine(' If oa_cfm_addtl_needed > 0') if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler # Air handler meets additional runtime requirement - # Calculate available outdoor air ventilation during non-HVAC runtime - infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah') + # Calculate hourly-average available outdoor air ventilation during non-HVAC runtime + infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah * ZoneTimestep') - # Calculate actual outdoor air ventilation brought in during non-HVAC runtime + # Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime infil_program.addLine(' Set oa_cfm_during_non_hvac = @Min oa_cfm_during_non_hvac_avail oa_cfm_addtl_needed') - infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + oa_cfm_during_non_hvac') + infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (oa_cfm_during_non_hvac / ZoneTimestep)') # Converted to timestep cfm infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_non_hvac") - # Calculate fraction of the timestep with ventilation only mode runtime - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / (@Max oa_cfm_during_non_hvac_avail 0.00001)) * (1.0 - fan_rtf_hvac)") # @Max used to prevent divide be zero - - # Calculate additional fan energy - infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") + # Calculate fraction of the timestep with ventilation only mode runtime and additional fan energy + infil_program.addLine(' If oa_cfm_during_non_hvac > 0') + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") + infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") + infil_program.addLine(' EndIf') elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan # Supplemental fan meets additional runtime requirement - # Calculate available outdoor air ventilation during non-HVAC runtime - infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl') + # Calculate hourly-average available outdoor air ventilation during non-HVAC runtime + infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl * ZoneTimestep') - # Calculate actual outdoor air ventilation brought in during non-HVAC runtime + # Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime infil_program.addLine(' Set oa_cfm_during_non_hvac = @Min oa_cfm_during_non_hvac_avail oa_cfm_addtl_needed') if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + oa_cfm_during_non_hvac') + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (oa_cfm_during_non_hvac / ZoneTimestep)') # Converted to timestep cfm elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + oa_cfm_during_non_hvac') + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (oa_cfm_during_non_hvac / ZoneTimestep)') # Converted to timestep cfm end infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_non_hvac") - # Calculate fraction of the timestep with ventilation only mode runtime - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / (@Max oa_cfm_during_non_hvac_avail 0.00001)) * (1.0 - fan_rtf_hvac)") # @Max used to prevent divide be zero - - # Calculate additional fan energy - infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * #{f_vent_only_mode_var.name})") + # Calculate fraction of the timestep with ventilation only mode runtime and additional fan energy + infil_program.addLine(' If oa_cfm_during_non_hvac > 0') + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") + infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * #{f_vent_only_mode_var.name})") + infil_program.addLine(' EndIf') end infil_program.addLine(' EndIf') From be95d7ddd9d127ed89691f2cdf7ebf04852ae38f Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 17:23:16 -0600 Subject: [PATCH 04/10] Bugfix for SupplementalFanRunsWithAirHandlerFan=true. Rename variables for clarity. --- HPXMLtoOpenStudio/measure.xml | 6 +-- HPXMLtoOpenStudio/resources/airflow.rb | 60 +++++++++++++------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 8473af312b..89cbbd4c8a 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 526e2dfb-4779-42fe-8e9e-9a4f568d480f - 2024-10-24T23:12:54Z + d714bef0-d941-43a9-8711-fef604936605 + 2024-10-24T23:22:53Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - 0A911A55 + 4B818404 battery.rb diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index f5e170e6fb..0491c5a7b9 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -2015,65 +2015,65 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine('EndIf') # Calculate hourly-average target outdoor air ventilation - infil_program.addLine('Set oa_cfm_target = f_operation * oa_cfm_ah') + infil_program.addLine('Set hr_oa_cfm_target = f_operation * oa_cfm_ah') # Calculate hourly-average outdoor air ventilation still needed for the hour - infil_program.addLine("Set oa_cfm_needed = oa_cfm_target - #{sum_oa_cfm_var.name}") - infil_program.addLine('If oa_cfm_needed > 0') + infil_program.addLine("Set hr_oa_cfm_needed = hr_oa_cfm_target - #{sum_oa_cfm_var.name}") + infil_program.addLine('If hr_oa_cfm_needed > 0') # Calculate hourly-average available outdoor air ventilation during HVAC runtime - infil_program.addLine(' Set oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah * ZoneTimestep') + infil_program.addLine(' Set hr_hr_oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah * ZoneTimestep') # Calculate hourly-average actual outdoor air ventilation brought in during HVAC runtime if vent_mech.cfis_has_outdoor_air_control - infil_program.addLine(' Set oa_cfm_during_hvac = @Min oa_cfm_during_hvac_avail oa_cfm_needed') + infil_program.addLine(' Set hr_oa_cfm_during_hvac = @Min hr_hr_oa_cfm_during_hvac_avail hr_oa_cfm_needed') else # Outdoor air is introduced for the entire time the HVAC system is running - infil_program.addLine(' Set oa_cfm_during_hvac = oa_cfm_during_hvac_avail') + infil_program.addLine(' Set hr_oa_cfm_during_hvac = hr_hr_oa_cfm_during_hvac_avail') end - infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (oa_cfm_during_hvac / ZoneTimestep)') # Converted to timestep cfm - infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_hvac") + infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (hr_oa_cfm_during_hvac / ZoneTimestep)') + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + hr_oa_cfm_during_hvac") # If specified, additionally run supplemental fan when ventilating during HVAC runtime if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan && vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan - infil_program.addLine(' If oa_cfm_during_hvac > 0') - infil_program.addLine(' Set f_open_damper_ah = (oa_cfm_during_hvac / oa_cfm_during_hvac_avail) * fan_rtf_hvac') + infil_program.addLine(' If hr_oa_cfm_during_hvac > 0') + infil_program.addLine(' Set f_open_damper_ah = (hr_oa_cfm_during_hvac / hr_hr_oa_cfm_during_hvac_avail) * fan_rtf_hvac') infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl / ZoneTimestep)') # Converted to timestep cfm + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)') elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl / ZoneTimestep)') # Converted to timestep cfm + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)') end infil_program.addLine('EndIf') end # Calculate hourly-average additional outdoor air ventilation still needed for the hour after HVAC runtime - infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_needed - oa_cfm_during_hvac') + infil_program.addLine(' Set hr_oa_cfm_addtl_needed = hr_oa_cfm_needed - hr_oa_cfm_during_hvac') # Calculate hourly-average outdoor air ventilation that can be brought in during subsequent timesteps of the hour if needed if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler - infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_ah)') + infil_program.addLine(' Set hr_oa_cfm_addtl_needed = hr_oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_ah)') elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan - infil_program.addLine(' Set oa_cfm_addtl_needed = oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_suppl)') + infil_program.addLine(' Set hr_oa_cfm_addtl_needed = hr_oa_cfm_addtl_needed - (((60 - Minute) / 60) * oa_cfm_suppl)') elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeNone - infil_program.addLine(' Set oa_cfm_addtl_needed = 0') + infil_program.addLine(' Set hr_oa_cfm_addtl_needed = 0') end - infil_program.addLine(' If oa_cfm_addtl_needed > 0') + infil_program.addLine(' If hr_oa_cfm_addtl_needed > 0') if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler # Air handler meets additional runtime requirement # Calculate hourly-average available outdoor air ventilation during non-HVAC runtime - infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah * ZoneTimestep') + infil_program.addLine(' Set hr_hr_oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah * ZoneTimestep') # Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime - infil_program.addLine(' Set oa_cfm_during_non_hvac = @Min oa_cfm_during_non_hvac_avail oa_cfm_addtl_needed') - infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (oa_cfm_during_non_hvac / ZoneTimestep)') # Converted to timestep cfm - infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_non_hvac") + infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed') + infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (hr_oa_cfm_during_non_hvac / ZoneTimestep)') + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + hr_oa_cfm_during_non_hvac") # Calculate fraction of the timestep with ventilation only mode runtime and additional fan energy - infil_program.addLine(' If oa_cfm_during_non_hvac > 0') - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") + infil_program.addLine(' If hr_oa_cfm_during_non_hvac > 0') + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (hr_oa_cfm_during_non_hvac / hr_hr_oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") infil_program.addLine(' EndIf') @@ -2081,20 +2081,20 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a # Supplemental fan meets additional runtime requirement # Calculate hourly-average available outdoor air ventilation during non-HVAC runtime - infil_program.addLine(' Set oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl * ZoneTimestep') + infil_program.addLine(' Set hr_hr_oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl * ZoneTimestep') # Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime - infil_program.addLine(' Set oa_cfm_during_non_hvac = @Min oa_cfm_during_non_hvac_avail oa_cfm_addtl_needed') + infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed') if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply - infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (oa_cfm_during_non_hvac / ZoneTimestep)') # Converted to timestep cfm + infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (hr_oa_cfm_during_non_hvac / ZoneTimestep)') elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust - infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (oa_cfm_during_non_hvac / ZoneTimestep)') # Converted to timestep cfm + infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (hr_oa_cfm_during_non_hvac / ZoneTimestep)') end - infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + oa_cfm_during_non_hvac") + infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + hr_oa_cfm_during_non_hvac") # Calculate fraction of the timestep with ventilation only mode runtime and additional fan energy - infil_program.addLine(' If oa_cfm_during_non_hvac > 0') - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (oa_cfm_during_non_hvac / oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") + infil_program.addLine(' If hr_oa_cfm_during_non_hvac > 0') + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (hr_oa_cfm_during_non_hvac / hr_hr_oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * #{f_vent_only_mode_var.name})") infil_program.addLine(' EndIf') end From d32fcfa62102dc5a16e2c84729e2afdfd8b214ed Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 17:42:57 -0600 Subject: [PATCH 05/10] Bugfix when no outdoor air control. --- HPXMLtoOpenStudio/resources/airflow.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index 0491c5a7b9..b0aa920666 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -1993,6 +1993,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a elsif vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler infil_program.addLine("Set ah_fan_w = #{vent_mech.unit_fan_power}") # W, air handler fan power end + infil_program.addLine("Set has_outdoor_air_control = #{vent_mech.cfis_has_outdoor_air_control ? 1 : 0}") if vent_mech.cfis_control_type == HPXML::CFISControlTypeTimer # Ventilation occurs at fixed intervals regardless of HVAC operation @@ -2019,7 +2020,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a # Calculate hourly-average outdoor air ventilation still needed for the hour infil_program.addLine("Set hr_oa_cfm_needed = hr_oa_cfm_target - #{sum_oa_cfm_var.name}") - infil_program.addLine('If hr_oa_cfm_needed > 0') + infil_program.addLine('If (hr_oa_cfm_needed > 0) || (has_outdoor_air_control == 0)') # Calculate hourly-average available outdoor air ventilation during HVAC runtime infil_program.addLine(' Set hr_hr_oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah * ZoneTimestep') From 58ef08bb1544d4ba5a2770386aa50b7a22319f2a Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 17:47:57 -0600 Subject: [PATCH 06/10] Indent. --- HPXMLtoOpenStudio/resources/airflow.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index b0aa920666..24151d3005 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -2045,7 +2045,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust infil_program.addLine(' Set QWHV_cfis_suppl_exh = QWHV_cfis_suppl_exh + (f_open_damper_ah * oa_cfm_suppl)') end - infil_program.addLine('EndIf') + infil_program.addLine(' EndIf') end # Calculate hourly-average additional outdoor air ventilation still needed for the hour after HVAC runtime From 99e0201a4f27c051b9fb4bdfdd0413652cdaacf7 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 18:35:48 -0600 Subject: [PATCH 07/10] update measure.xml --- HPXMLtoOpenStudio/measure.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 89cbbd4c8a..b6c070fd3f 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - d714bef0-d941-43a9-8711-fef604936605 - 2024-10-24T23:22:53Z + dbf1a747-92c9-4b00-8830-e217c304fbc7 + 2024-10-25T00:35:35Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - 4B818404 + DBC418BB battery.rb From fd0b299af2b56bd5bc328536c03ae8916bc70153 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 18:38:40 -0600 Subject: [PATCH 08/10] Update changelog [ci skip] --- Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Changelog.md b/Changelog.md index f20fbcabea..25b127dca0 100644 --- a/Changelog.md +++ b/Changelog.md @@ -53,6 +53,7 @@ __Bugfixes__ - Fixes error if modeling a ground-to-air heat pump with a separate backup heating system. - Fixes default CFIS fan power during ventilation only mode. - Fixes a bug that potentially oversizes heat pumps when detailed performance capacity fractions are provided. +- For a CFIS system with a supplemental fan, fixes supplemental fan runtime when using sub-hourly timesteps. ## OpenStudio-HPXML v1.8.1 From 724ca3769a95fc0bdc8c182f983d5b582d1a700c Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 24 Oct 2024 18:52:06 -0600 Subject: [PATCH 09/10] Update tests, final cleanup. --- HPXMLtoOpenStudio/measure.xml | 8 ++++---- HPXMLtoOpenStudio/resources/airflow.rb | 20 +++++++++---------- HPXMLtoOpenStudio/tests/test_airflow.rb | 26 ++++++++++++------------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index b6c070fd3f..b0b0e9790e 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - dbf1a747-92c9-4b00-8830-e217c304fbc7 - 2024-10-25T00:35:35Z + 64c3bdea-b4b3-4254-9b2a-23987ae4e9f3 + 2024-10-25T00:51:54Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - DBC418BB + 87ABF972 battery.rb @@ -651,7 +651,7 @@ test_airflow.rb rb test - D4E42045 + 4366CDCD test_battery.rb diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index 24151d3005..16b83d830c 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -2023,14 +2023,14 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a infil_program.addLine('If (hr_oa_cfm_needed > 0) || (has_outdoor_air_control == 0)') # Calculate hourly-average available outdoor air ventilation during HVAC runtime - infil_program.addLine(' Set hr_hr_oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah * ZoneTimestep') + infil_program.addLine(' Set hr_oa_cfm_during_hvac_avail = fan_rtf_hvac * oa_cfm_ah * ZoneTimestep') # Calculate hourly-average actual outdoor air ventilation brought in during HVAC runtime if vent_mech.cfis_has_outdoor_air_control - infil_program.addLine(' Set hr_oa_cfm_during_hvac = @Min hr_hr_oa_cfm_during_hvac_avail hr_oa_cfm_needed') + infil_program.addLine(' Set hr_oa_cfm_during_hvac = @Min hr_oa_cfm_during_hvac_avail hr_oa_cfm_needed') else # Outdoor air is introduced for the entire time the HVAC system is running - infil_program.addLine(' Set hr_oa_cfm_during_hvac = hr_hr_oa_cfm_during_hvac_avail') + infil_program.addLine(' Set hr_oa_cfm_during_hvac = hr_oa_cfm_during_hvac_avail') end infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (hr_oa_cfm_during_hvac / ZoneTimestep)') infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + hr_oa_cfm_during_hvac") @@ -2038,7 +2038,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a # If specified, additionally run supplemental fan when ventilating during HVAC runtime if vent_mech.cfis_addtl_runtime_operating_mode == HPXML::CFISModeSupplementalFan && vent_mech.cfis_supplemental_fan_runs_with_air_handler_fan infil_program.addLine(' If hr_oa_cfm_during_hvac > 0') - infil_program.addLine(' Set f_open_damper_ah = (hr_oa_cfm_during_hvac / hr_hr_oa_cfm_during_hvac_avail) * fan_rtf_hvac') + infil_program.addLine(' Set f_open_damper_ah = (hr_oa_cfm_during_hvac / hr_oa_cfm_during_hvac_avail) * fan_rtf_hvac') infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * f_open_damper_ah)") if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (f_open_damper_ah * oa_cfm_suppl)') @@ -2065,16 +2065,16 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a # Air handler meets additional runtime requirement # Calculate hourly-average available outdoor air ventilation during non-HVAC runtime - infil_program.addLine(' Set hr_hr_oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah * ZoneTimestep') + infil_program.addLine(' Set hr_oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_ah * ZoneTimestep') # Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime - infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed') + infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed') infil_program.addLine(' Set QWHV_cfis_sup = QWHV_cfis_sup + (hr_oa_cfm_during_non_hvac / ZoneTimestep)') infil_program.addLine(" Set #{sum_oa_cfm_var.name} = #{sum_oa_cfm_var.name} + hr_oa_cfm_during_non_hvac") # Calculate fraction of the timestep with ventilation only mode runtime and additional fan energy infil_program.addLine(' If hr_oa_cfm_during_non_hvac > 0') - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (hr_oa_cfm_during_non_hvac / hr_hr_oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (hr_oa_cfm_during_non_hvac / hr_oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") infil_program.addLine(" Set #{cfis_fan_actuator.name} = #{cfis_fan_actuator.name} + (ah_fan_w * #{f_vent_only_mode_var.name})") infil_program.addLine(' EndIf') @@ -2082,10 +2082,10 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a # Supplemental fan meets additional runtime requirement # Calculate hourly-average available outdoor air ventilation during non-HVAC runtime - infil_program.addLine(' Set hr_hr_oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl * ZoneTimestep') + infil_program.addLine(' Set hr_oa_cfm_during_non_hvac_avail = (1.0 - fan_rtf_hvac) * oa_cfm_suppl * ZoneTimestep') # Calculate hourly-average actual outdoor air ventilation brought in during non-HVAC runtime - infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed') + infil_program.addLine(' Set hr_oa_cfm_during_non_hvac = @Min hr_oa_cfm_during_non_hvac_avail hr_oa_cfm_addtl_needed') if vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeSupply infil_program.addLine(' Set QWHV_cfis_suppl_sup = QWHV_cfis_suppl_sup + (hr_oa_cfm_during_non_hvac / ZoneTimestep)') elsif vent_mech.cfis_supplemental_fan.fan_type == HPXML::MechVentTypeExhaust @@ -2095,7 +2095,7 @@ def self.apply_cfis(runner, infil_program, vent_mech_fans, cfis_data, cfis_fan_a # Calculate fraction of the timestep with ventilation only mode runtime and additional fan energy infil_program.addLine(' If hr_oa_cfm_during_non_hvac > 0') - infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (hr_oa_cfm_during_non_hvac / hr_hr_oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") + infil_program.addLine(" Set #{f_vent_only_mode_var.name} = (hr_oa_cfm_during_non_hvac / hr_oa_cfm_during_non_hvac_avail) * (1.0 - fan_rtf_hvac)") infil_program.addLine(" Set #{cfis_suppl_fan_actuator.name} = #{cfis_suppl_fan_actuator.name} + (suppl_fan_w * #{f_vent_only_mode_var.name})") infil_program.addLine(' EndIf') end diff --git a/HPXMLtoOpenStudio/tests/test_airflow.rb b/HPXMLtoOpenStudio/tests/test_airflow.rb index 114a01234c..fa253f005b 100644 --- a/HPXMLtoOpenStudio/tests/test_airflow.rb +++ b/HPXMLtoOpenStudio/tests/test_airflow.rb @@ -377,15 +377,15 @@ def test_mechanical_ventilation_cfis vent_fan = hpxml_bldg.ventilation_fans.find { |f| f.used_for_whole_building_ventilation } vent_fan_cfm = vent_fan.oa_unit_flow_rate vent_fan_power = vent_fan.fan_power - vent_fan_mins = vent_fan.hours_in_operation / 24.0 * 60.0 + vent_fan_operation = vent_fan.hours_in_operation / 24.0 # Check infiltration/ventilation program program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{Constants::ObjectTypeInfiltration} program") - assert_in_epsilon(vent_fan_cfm, UnitConversions.convert(program_values['Q_duct_oa'].sum, 'm^3/s', 'cfm'), 0.01) + assert_in_epsilon(vent_fan_cfm, UnitConversions.convert(program_values['oa_cfm_ah'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['QWHV_sup'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['QWHV_exh'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(vent_fan_power, program_values['ah_fan_w'].sum, 0.01) - assert_in_epsilon(vent_fan_mins, program_values['t_min_hr_open'].sum, 0.01) + assert_in_epsilon(vent_fan_operation, program_values['f_operation'].sum, 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['Qrange'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['Qbath'].sum, 'm^3/s', 'cfm'), 0.01) # Load actuators @@ -401,18 +401,18 @@ def test_mechanical_ventilation_cfis_with_supplemental_fan # Get HPXML values vent_fan = hpxml_bldg.ventilation_fans.find { |f| f.used_for_whole_building_ventilation } vent_fan_cfm = vent_fan.oa_unit_flow_rate - vent_fan_mins = vent_fan.hours_in_operation / 24.0 * 60.0 + vent_fan_operation = vent_fan.hours_in_operation / 24.0 suppl_vent_fan_cfm = vent_fan.cfis_supplemental_fan.oa_unit_flow_rate suppl_vent_fan_power = vent_fan.cfis_supplemental_fan.fan_power # Check infiltration/ventilation program program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{Constants::ObjectTypeInfiltration} program") - assert_in_epsilon(vent_fan_cfm, UnitConversions.convert(program_values['Q_duct_oa'].sum, 'm^3/s', 'cfm'), 0.01) - assert_in_epsilon(suppl_vent_fan_cfm, UnitConversions.convert(program_values['suppl_Q_oa'].sum, 'm^3/s', 'cfm'), 0.01) + assert_in_epsilon(vent_fan_cfm, UnitConversions.convert(program_values['oa_cfm_ah'].sum, 'm^3/s', 'cfm'), 0.01) + assert_in_epsilon(suppl_vent_fan_cfm, UnitConversions.convert(program_values['oa_cfm_suppl'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['QWHV_sup'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['QWHV_exh'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(suppl_vent_fan_power, program_values['suppl_fan_w'].sum, 0.01) - assert_in_epsilon(vent_fan_mins, program_values['t_min_hr_open'].sum, 0.01) + assert_in_epsilon(vent_fan_operation, program_values['f_operation'].sum, 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['Qrange'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0.0, UnitConversions.convert(program_values['Qbath'].sum, 'm^3/s', 'cfm'), 0.01) # Load actuators @@ -497,7 +497,7 @@ def test_multiple_mechvent vent_fan_cfis = whole_fans.select { |f| f.fan_type == HPXML::MechVentTypeCFIS } vent_fan_cfm_cfis = vent_fan_cfis.map { |f| f.oa_unit_flow_rate }.sum(0.0) vent_fan_power_cfis = vent_fan_cfis.select { |f| f.cfis_addtl_runtime_operating_mode == HPXML::CFISModeAirHandler }.map { |f| f.fan_power }.sum(0.0) - vent_fan_mins_cfis = vent_fan_cfis.map { |f| f.hours_in_operation / 24.0 * 60.0 }.sum(0.0) + vent_fan_operation_cfis = vent_fan_cfis.map { |f| f.hours_in_operation / 24.0 }.sum(0.0) # total mech vent fan power excluding cfis total_mechvent_pow = vent_fan_power_sup + vent_fan_power_exh + vent_fan_power_bal + vent_fan_power_ervhrv @@ -511,7 +511,7 @@ def test_multiple_mechvent assert_in_epsilon(vent_fan_cfm_exh + vent_fan_cfm_bal + vent_fan_cfm_ervhrv, UnitConversions.convert(program_values['QWHV_exh'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(kitchen_fan_cfm, UnitConversions.convert(program_values['Qrange'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(bath_fan_cfm, UnitConversions.convert(program_values['Qbath'].sum, 'm^3/s', 'cfm'), 0.01) - assert_in_epsilon(vent_fan_cfm_cfis, UnitConversions.convert(program_values['Q_duct_oa'].sum, 'm^3/s', 'cfm'), 0.01) + assert_in_epsilon(vent_fan_cfm_cfis, UnitConversions.convert(program_values['oa_cfm_ah'].sum, 'm^3/s', 'cfm'), 0.01) # Fan power/load implementation assert_equal(1, get_eed_for_ventilation(model, Constants::ObjectTypeMechanicalVentilationHouseFan).size) assert_in_epsilon(total_mechvent_pow, get_eed_for_ventilation(model, Constants::ObjectTypeMechanicalVentilationHouseFan)[0].designLevel.get, 0.01) @@ -528,7 +528,7 @@ def test_multiple_mechvent assert_in_epsilon(1.0, bath_fan_eeds[0].fractionLost, 0.01) assert_in_epsilon(1.0, bath_fan_eeds[1].fractionLost, 0.01) # CFIS minutes - assert_in_epsilon(vent_fan_mins_cfis, program_values['t_min_hr_open'].sum, 0.01) + assert_in_epsilon(vent_fan_operation_cfis, program_values['f_operation'].sum, 0.01) # Load actuators assert_equal(1, get_oed_for_ventilation(model, "#{Constants::ObjectTypeMechanicalVentilationHouseFan} sensible load").size) assert_equal(1, get_oed_for_ventilation(model, "#{Constants::ObjectTypeMechanicalVentilationHouseFan} latent load").size) @@ -557,7 +557,7 @@ def test_shared_mechvent_multiple # CFIS vent_fans_cfm_oa_cfis = hpxml_bldg.ventilation_fans.select { |f| f.fan_type == HPXML::MechVentTypeCFIS }.map { |f| f.oa_unit_flow_rate }.sum(0.0) vent_fans_pow_cfis = hpxml_bldg.ventilation_fans.select { |f| f.fan_type == HPXML::MechVentTypeCFIS }.map { |f| f.unit_fan_power }.sum(0.0) - vent_fans_mins_cfis = hpxml_bldg.ventilation_fans.select { |f| f.fan_type == HPXML::MechVentTypeCFIS }.map { |f| f.hours_in_operation / 24.0 * 60.0 }.sum(0.0) + vent_fans_mins_cfis = hpxml_bldg.ventilation_fans.select { |f| f.fan_type == HPXML::MechVentTypeCFIS }.map { |f| f.hours_in_operation / 24.0 }.sum(0.0) # Load and energy eed assert_equal(1, get_oed_for_ventilation(model, "#{Constants::ObjectTypeMechanicalVentilationHouseFan} sensible load").size) @@ -574,8 +574,8 @@ def test_shared_mechvent_multiple assert_in_epsilon((vent_fans_cfm_oa_preheat_sup + vent_fans_cfm_oa_preheat_bal + vent_fans_cfm_oa_preheat_ervhrv), UnitConversions.convert(program_values['Qpreheat'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon((vent_fans_cfm_oa_precool_sup + vent_fans_cfm_oa_precool_bal + vent_fans_cfm_oa_precool_ervhrv), UnitConversions.convert(program_values['Qprecool'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(vent_fans_pow_cfis, program_values['ah_fan_w'].sum, 0.01) - assert_in_epsilon(vent_fans_mins_cfis, program_values['t_min_hr_open'].sum, 0.01) - assert_in_epsilon(vent_fans_cfm_oa_cfis, UnitConversions.convert(program_values['Q_duct_oa'].sum, 'm^3/s', 'cfm'), 0.01) + assert_in_epsilon(vent_fans_mins_cfis, program_values['f_operation'].sum, 0.01) + assert_in_epsilon(vent_fans_cfm_oa_cfis, UnitConversions.convert(program_values['oa_cfm_ah'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(vent_fans_cfm_tot_sup + vent_fans_cfm_tot_ervhrvbal, UnitConversions.convert(program_values['QWHV_sup'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(vent_fans_cfm_tot_exh + vent_fans_cfm_tot_ervhrvbal, UnitConversions.convert(program_values['QWHV_exh'].sum, 'm^3/s', 'cfm'), 0.01) assert_in_epsilon(0, UnitConversions.convert(program_values['Qrange'].sum, 'm^3/s', 'cfm'), 0.01) From 3d7ff588cf884780b295ad021da07ac82aab7053 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 25 Oct 2024 01:45:03 +0000 Subject: [PATCH 10/10] Latest results. --- workflow/tests/base_results/results_simulations_bills.csv | 2 ++ workflow/tests/base_results/results_simulations_energy.csv | 2 ++ workflow/tests/base_results/results_simulations_hvac.csv | 2 ++ workflow/tests/base_results/results_simulations_loads.csv | 2 ++ workflow/tests/base_results/results_simulations_misc.csv | 2 ++ 5 files changed, 10 insertions(+) diff --git a/workflow/tests/base_results/results_simulations_bills.csv b/workflow/tests/base_results/results_simulations_bills.csv index 1d0840593f..2b89143885 100644 --- a/workflow/tests/base_results/results_simulations_bills.csv +++ b/workflow/tests/base_results/results_simulations_bills.csv @@ -359,12 +359,14 @@ base-location-phoenix-az.xml,1632.46,144.0,1344.44,0.0,1488.44,144.0,0.02,144.02 base-location-portland-or.xml,1210.6,144.0,817.39,0.0,961.39,144.0,105.21,249.21,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-balanced.xml,2112.11,144.0,1376.02,0.0,1520.02,144.0,448.09,592.09,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-bath-kitchen-fans.xml,1863.27,144.0,1307.24,0.0,1451.24,144.0,268.03,412.03,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-15-mins.xml,2069.6,144.0,1372.13,0.0,1516.13,144.0,409.47,553.47,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-airflow-fraction-zero.xml,2042.44,144.0,1370.06,0.0,1514.06,144.0,384.38,528.38,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-control-type-timer.xml,2097.8,144.0,1404.85,0.0,1548.85,144.0,404.95,548.95,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-dse.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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-evap-cooler-only-ducted.xml,1366.37,144.0,1222.37,0.0,1366.37,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-no-additional-runtime.xml,1928.74,144.0,1312.33,0.0,1456.33,144.0,328.41,472.41,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-no-outdoor-air-control.xml,2106.53,144.0,1377.18,0.0,1521.18,144.0,441.35,585.35,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml,2001.92,144.0,1327.45,0.0,1471.45,144.0,386.47,530.47,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml,2006.02,144.0,1326.37,0.0,1470.37,144.0,391.65,535.65,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-exhaust.xml,1985.8,144.0,1320.96,0.0,1464.96,144.0,376.84,520.84,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-supply.xml,2002.27,144.0,1322.53,0.0,1466.53,144.0,391.74,535.74,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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 235d096603..4ed41d563b 100644 --- a/workflow/tests/base_results/results_simulations_energy.csv +++ b/workflow/tests/base_results/results_simulations_energy.csv @@ -359,12 +359,14 @@ base-location-phoenix-az.xml,38.486,38.486,38.485,38.485,0.001,0.0,0.0,0.0,0.0,0 base-location-portland-or.xml,37.945,37.945,27.21,27.21,10.734,0.0,0.0,0.0,0.0,0.0,0.0,0.069,0.0,0.0,2.796,0.406,8.935,0.0,0.0,2.646,0.0,0.238,0.0,0.0,0.0,0.0,2.088,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,4.192,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,10.734,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-balanced.xml,80.609,80.609,37.803,37.803,42.805,0.0,0.0,0.0,0.0,0.0,0.0,1.062,0.0,0.0,4.195,0.615,9.019,0.0,0.0,4.507,0.0,0.334,1.793,0.0,0.0,0.0,2.053,0.0,0.0,0.319,0.365,1.513,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,42.805,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-bath-kitchen-fans.xml,61.518,61.518,35.914,35.914,25.605,0.0,0.0,0.0,0.0,0.0,0.0,0.635,0.0,0.0,4.362,0.654,9.015,0.0,0.0,4.507,0.0,0.334,0.112,0.0,0.0,0.0,2.07,0.0,0.0,0.319,0.365,1.513,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,25.605,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-15-mins.xml,76.813,76.813,37.697,37.697,39.117,0.0,0.0,0.0,0.0,0.0,0.0,0.97,0.0,0.0,4.302,0.632,9.02,0.0,0.0,4.507,0.0,0.334,1.651,0.0,0.0,0.0,2.056,0.0,0.0,0.319,0.365,1.513,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,39.117,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-airflow-fraction-zero.xml,74.359,74.359,37.64,37.64,36.719,0.0,0.0,0.0,0.0,0.0,0.0,0.911,0.0,0.0,4.273,0.632,9.017,0.0,0.0,4.507,0.0,0.334,1.681,0.0,0.0,0.0,2.059,0.0,0.0,0.319,0.365,1.513,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,36.719,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-control-type-timer.xml,77.28,77.28,38.595,38.595,38.685,0.0,0.0,0.0,0.0,0.0,0.0,0.96,0.0,0.0,4.407,0.655,9.018,0.0,0.0,4.507,0.0,0.334,2.434,0.0,0.0,0.0,2.057,0.0,0.0,0.319,0.365,1.513,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,38.685,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-dse.xml,74.313,74.313,38.621,38.621,35.692,0.0,0.0,0.0,0.0,0.0,0.0,0.886,0.0,0.0,5.043,0.712,9.017,0.0,0.0,4.507,0.0,0.334,1.839,0.0,0.0,0.0,2.059,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,35.692,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-evap-cooler-only-ducted.xml,33.582,33.582,33.582,33.582,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.837,9.084,0.0,0.0,4.507,0.0,0.334,2.771,0.0,0.0,0.0,1.824,0.0,0.0,0.319,0.365,1.513,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-no-additional-runtime.xml,67.426,67.426,36.054,36.054,31.372,0.0,0.0,0.0,0.0,0.0,0.0,0.778,0.0,0.0,4.455,0.669,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,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,31.372,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-no-outdoor-air-control.xml,79.997,79.997,37.835,37.835,42.161,0.0,0.0,0.0,0.0,0.0,0.0,1.046,0.0,0.0,4.345,0.642,9.018,0.0,0.0,4.507,0.0,0.334,1.661,0.0,0.0,0.0,2.057,0.0,0.0,0.319,0.365,1.513,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,42.161,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml,73.388,73.388,36.469,36.469,36.919,0.0,0.0,0.0,0.0,0.0,0.0,0.916,0.0,0.0,4.309,0.634,9.02,0.0,0.0,4.507,0.0,0.334,0.47,0.0,0.0,0.0,2.055,0.0,0.0,0.319,0.365,1.513,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,36.919,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml,73.853,73.853,36.439,36.439,37.414,0.0,0.0,0.0,0.0,0.0,0.0,0.928,0.0,0.0,4.166,0.611,9.019,0.0,0.0,4.507,0.0,0.334,0.595,0.0,0.0,0.0,2.055,0.0,0.0,0.319,0.365,1.513,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,37.414,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-exhaust.xml,72.29,72.29,36.291,36.291,35.999,0.0,0.0,0.0,0.0,0.0,0.0,0.893,0.0,0.0,4.174,0.613,9.019,0.0,0.0,4.507,0.0,0.334,0.471,0.0,0.0,0.0,2.055,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,35.999,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-mechvent-cfis-supplemental-fan-supply.xml,73.756,73.756,36.334,36.334,37.423,0.0,0.0,0.0,0.0,0.0,0.0,0.928,0.0,0.0,4.188,0.615,9.018,0.0,0.0,4.507,0.0,0.334,0.461,0.0,0.0,0.0,2.057,0.0,0.0,0.319,0.365,1.513,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,37.423,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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 97ee0b80a9..01268d7c5b 100644 --- a/workflow/tests/base_results/results_simulations_hvac.csv +++ b/workflow/tests/base_results/results_simulations_hvac.csv @@ -359,12 +359,14 @@ base-location-phoenix-az.xml,41.36,108.14,24000.0,24000.0,0.0,13081.0,1054.0,340 base-location-portland-or.xml,28.58,87.08,24000.0,24000.0,0.0,17789.0,6513.0,4921.0,0.0,377.0,1441.0,0.0,1472.0,0.0,1423.0,1644.0,0.0,0.0,15800.0,2411.0,6585.0,0.0,210.0,292.0,0.0,429.0,0.0,2304.0,248.0,0.0,3320.0,0.0,0.0,957.0,90.0,67.0,0.0,800.0 base-mechvent-balanced.xml,6.8,91.76,36000.0,24000.0,0.0,38765.0,8862.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,4620.0,6372.0,0.0,21660.0,6043.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,622.0,1690.0,3320.0,0.0,0.0,-1656.0,0.0,-661.0,-1795.0,800.0 base-mechvent-bath-kitchen-fans.xml,6.8,91.76,36000.0,24000.0,0.0,32239.0,8709.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,4620.0,0.0,0.0,20039.0,6112.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,622.0,0.0,3320.0,0.0,0.0,139.0,0.0,-661.0,0.0,800.0 +base-mechvent-cfis-15-mins.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-airflow-fraction-zero.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-control-type-timer.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-dse.xml,6.8,91.76,36000.0,24000.0,0.0,25282.0,0.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,14995.0,0.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-evap-cooler-only-ducted.xml,6.8,91.76,0.0,24000.0,0.0,25282.0,0.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,17555.0,2561.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-no-additional-runtime.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-no-outdoor-air-control.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 +base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-supplemental-fan-exhaust.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 base-mechvent-cfis-supplemental-fan-supply.xml,6.8,91.76,36000.0,24000.0,0.0,33814.0,8531.0,7508.0,0.0,575.0,6918.0,0.0,0.0,1738.0,2171.0,0.0,6372.0,0.0,21135.0,6140.0,7037.0,0.0,207.0,448.0,0.0,0.0,0.0,2293.0,0.0,1690.0,3320.0,0.0,0.0,-995.0,0.0,0.0,-1795.0,800.0 diff --git a/workflow/tests/base_results/results_simulations_loads.csv b/workflow/tests/base_results/results_simulations_loads.csv index 78865b7d7b..75dd4621bb 100644 --- a/workflow/tests/base_results/results_simulations_loads.csv +++ b/workflow/tests/base_results/results_simulations_loads.csv @@ -359,12 +359,14 @@ base-location-phoenix-az.xml,0.001,0.0,52.569,4.866,0.556,0.0,0.0,0.0,0.164,0.13 base-location-portland-or.xml,9.941,0.0,8.005,8.724,0.78,0.0,0.0,0.0,3.137,2.898,0.0,0.0,0.627,7.236,-6.317,0.0,0.0,5.011,0.0,-0.259,1.389,0.0,0.674,0.0,2.023,-5.228,-1.338,0.0,-0.73,-1.092,0.0,0.0,-0.11,-2.022,12.184,0.0,0.0,-3.974,0.0,-0.257,-0.618,-2.989,-0.367,0.0,0.7,6.17,1.308 base-mechvent-balanced.xml,40.449,0.0,12.716,9.071,0.621,0.0,0.0,0.0,3.768,3.998,0.561,7.341,0.702,11.216,-14.601,0.0,0.0,0.0,8.3,-0.244,5.6,0.0,16.41,0.0,9.127,-9.184,-2.867,0.0,0.284,0.049,0.019,2.964,0.085,0.202,9.812,0.0,0.0,0.0,-5.701,-0.241,-0.525,-3.116,-2.142,0.0,3.075,6.384,1.641 base-mechvent-bath-kitchen-fans.xml,24.191,0.0,13.576,9.071,0.616,0.0,0.0,0.0,3.825,3.905,0.548,7.556,0.688,10.829,-13.686,0.0,0.0,0.0,8.336,-0.125,4.855,0.0,2.662,0.0,5.695,-8.56,-2.693,0.0,0.07,-0.152,-0.009,2.852,0.044,-0.522,10.727,0.0,0.0,0.0,-6.111,-0.121,-0.732,-3.793,-0.483,0.0,3.095,7.019,1.814 +base-mechvent-cfis-15-mins.xml,36.944,0.0,13.064,9.071,0.62,0.0,0.0,0.0,3.805,4.026,0.565,7.362,0.719,11.327,-14.409,0.0,0.0,0.0,8.174,-0.265,2.458,0.0,15.379,0.0,9.395,-9.1,-2.841,0.0,0.325,0.02,0.014,2.904,0.083,0.166,9.949,0.0,0.0,0.0,-5.871,-0.261,-0.365,-3.003,-1.746,0.0,2.814,6.47,1.666 base-mechvent-cfis-airflow-fraction-zero.xml,34.698,0.0,13.078,9.071,0.619,0.0,0.0,0.0,3.798,3.98,0.559,7.43,0.701,11.152,-14.238,0.0,0.0,0.0,8.232,-0.222,1.722,0.0,15.099,0.0,7.936,-8.963,-2.806,0.0,0.22,-0.013,0.011,2.929,0.074,0.004,10.175,0.0,0.0,0.0,-5.945,-0.218,-0.148,-3.365,-1.962,0.0,3.106,6.61,1.701 base-mechvent-cfis-control-type-timer.xml,36.555,0.0,13.551,9.071,0.619,0.0,0.0,0.0,3.691,3.999,0.561,7.372,0.704,11.209,-14.382,0.0,0.0,0.0,8.189,-0.264,1.732,0.0,14.668,0.0,10.625,-9.041,-2.826,0.0,0.281,0.02,0.015,2.911,0.08,0.106,10.031,0.0,0.0,0.0,-5.924,-0.261,-0.147,-3.26,-1.59,0.0,3.186,6.53,1.681 base-mechvent-cfis-dse.xml,26.959,0.0,10.124,9.071,0.619,0.0,0.0,0.0,4.221,3.977,0.558,7.419,0.701,11.142,-14.238,0.0,0.0,0.0,8.209,-0.222,1.666,0.0,14.975,0.0,0.0,-8.963,-2.806,0.0,0.368,-0.014,0.01,2.926,0.074,0.001,10.175,0.0,0.0,0.0,-5.953,-0.218,-0.15,-3.362,-1.929,0.0,0.0,6.61,1.701 base-mechvent-cfis-evap-cooler-only-ducted.xml,0.0,0.0,10.579,9.071,0.69,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.389,0.053,0.019,2.824,0.09,0.196,9.632,0.0,0.0,0.0,-6.055,-0.263,-0.14,-3.152,-1.452,0.0,0.66,6.271,1.619 base-mechvent-cfis-no-additional-runtime.xml,29.643,0.0,13.898,9.071,0.615,0.0,0.0,0.0,3.742,3.883,0.545,7.571,0.682,10.761,-13.574,0.0,0.0,0.0,8.367,-0.116,2.979,0.0,8.67,0.0,6.913,-8.475,-2.662,0.0,0.025,-0.187,-0.014,2.828,0.035,-0.631,10.839,0.0,0.0,0.0,-6.136,-0.112,-0.815,-3.874,-0.103,0.0,3.21,7.106,1.845 base-mechvent-cfis-no-outdoor-air-control.xml,39.835,0.0,13.324,9.071,0.62,0.0,0.0,0.0,3.733,3.996,0.561,7.365,0.703,11.202,-14.382,0.0,0.0,0.0,8.178,-0.265,1.538,0.0,18.718,0.0,10.039,-9.041,-2.826,0.0,0.291,0.02,0.015,2.91,0.08,0.105,10.031,0.0,0.0,0.0,-5.926,-0.261,-0.154,-3.258,-1.454,0.0,2.826,6.53,1.681 +base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml,34.875,0.0,13.124,9.071,0.62,0.0,0.0,0.0,3.853,4.023,0.565,7.418,0.712,11.269,-14.483,0.0,0.0,0.0,8.29,-0.198,2.723,0.0,14.295,0.0,8.045,-9.122,-2.848,0.0,0.291,0.021,0.014,2.972,0.078,0.121,9.875,0.0,0.0,0.0,-5.746,-0.194,-0.129,-3.02,-2.398,0.0,3.235,6.447,1.659 base-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml,35.354,0.0,12.647,9.071,0.62,0.0,0.0,0.0,3.813,3.994,0.56,7.388,0.7,11.183,-14.518,0.0,0.0,0.0,8.31,-0.217,2.992,0.0,14.725,0.0,8.074,-9.123,-2.852,0.0,0.267,0.032,0.016,2.977,0.081,0.13,9.895,0.0,0.0,0.0,-5.742,-0.214,-0.157,-3.187,-2.5,0.0,3.027,6.446,1.655 base-mechvent-cfis-supplemental-fan-exhaust.xml,34.018,0.0,12.692,9.071,0.62,0.0,0.0,0.0,3.826,3.994,0.56,7.388,0.7,11.183,-14.518,0.0,0.0,0.0,8.309,-0.217,2.58,0.0,14.066,0.0,7.796,-9.123,-2.852,0.0,0.267,0.032,0.016,2.977,0.081,0.13,9.895,0.0,0.0,0.0,-5.743,-0.214,-0.17,-3.19,-2.437,0.0,3.027,6.446,1.655 base-mechvent-cfis-supplemental-fan-supply.xml,35.363,0.0,12.728,9.071,0.62,0.0,0.0,0.0,3.805,3.988,0.56,7.403,0.702,11.181,-14.404,0.0,0.0,0.0,8.289,-0.227,1.759,0.0,15.823,0.0,8.069,-9.066,-2.834,0.0,0.248,0.014,0.014,2.956,0.079,0.091,10.009,0.0,0.0,0.0,-5.811,-0.223,-0.138,-3.248,-2.393,0.0,3.046,6.504,1.673 diff --git a/workflow/tests/base_results/results_simulations_misc.csv b/workflow/tests/base_results/results_simulations_misc.csv index 825546a4f7..1e16a7b970 100644 --- a/workflow/tests/base_results/results_simulations_misc.csv +++ b/workflow/tests/base_results/results_simulations_misc.csv @@ -359,12 +359,14 @@ base-location-phoenix-az.xml,0.0,0.0,1354.7,998.0,8260.5,2035.4,2321.4,3630.7,36 base-location-portland-or.xml,0.0,0.0,1354.7,998.0,11014.7,2714.0,1626.8,2923.0,2923.0,9.262,15.105,0.0 base-mechvent-balanced.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,2220.5,3787.6,3787.6,33.272,21.071,0.0 base-mechvent-bath-kitchen-fans.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2094.5,3719.8,3719.8,26.161,20.522,0.0 +base-mechvent-cfis-15-mins.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,3053.6,4775.9,4775.9,37.234,21.195,0.0 base-mechvent-cfis-airflow-fraction-zero.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2127.6,3702.5,3702.5,29.917,20.765,0.0 base-mechvent-cfis-control-type-timer.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2168.9,3768.8,3768.8,29.895,20.834,0.0 base-mechvent-cfis-dse.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2085.1,2926.2,2926.2,21.554,13.58,0.0 base-mechvent-cfis-evap-cooler-only-ducted.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,2018.6,2306.5,2306.5,0.0,16.216,0.0 base-mechvent-cfis-no-additional-runtime.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,2135.2,4049.8,4049.8,29.918,20.857,0.0 base-mechvent-cfis-no-outdoor-air-control.xml,49.0,5.0,1354.7,998.0,11171.5,2563.5,2230.6,3773.0,3773.0,37.835,21.601,0.0 +base-mechvent-cfis-supplemental-fan-exhaust-15-mins.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,2881.5,4775.8,4775.8,37.234,21.241,0.0 base-mechvent-cfis-supplemental-fan-exhaust-synchronized.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2150.8,3723.0,3723.0,30.62,20.864,0.0 base-mechvent-cfis-supplemental-fan-exhaust.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2135.7,3696.2,3696.2,29.918,20.705,0.0 base-mechvent-cfis-supplemental-fan-supply.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2135.6,3697.7,3697.7,29.918,20.72,0.0