diff --git a/Changelog.md b/Changelog.md
index 2a059e50ed..637665ac61 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -8,6 +8,7 @@ __New Features__
- Adds an `--ep-input-format` argument to run_simulation.rb to choose epJSON as the EnergyPlus input file format instead of IDF.
- Allows `HeatingSeason` & `CoolingSeason` to be specified for defining heating and cooling equipment availability.
- Removes error-check for number of bedrooms based on conditioned floor area, per RESNET guidance.
+- Revises shared mechanical ventilation preconditioning control logic to operate less often.
__Bugfixes__
- Improves ground reflectance when there is shading of windows/skylights.
diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml
index b84d1cefac..303f4b19d7 100644
--- a/HPXMLtoOpenStudio/measure.xml
+++ b/HPXMLtoOpenStudio/measure.xml
@@ -4,8 +4,8 @@
Unable to extract OpenStudio::Measure::OSMeasure object from /mnt/c/git/openstudio-hpxml/HPXMLtoOpenStudio/measure.rb. The script should contain a class that derives from OpenStudio::Measure::OSMeasure and should close with a line stating the class name followed by .new.registerWithApplication.
hpxm_lto_openstudio
b1543b30-9465-45ff-ba04-1d1f85e763bc
- c929f134-7b14-43a4-a9ee-11bb8d27da1f
- 20210513T171148Z
+ 9d668d73-be14-4a65-b206-764f86eca574
+ 20210514T182320Z
D8922A73
HPXMLtoOpenStudio
HPXML to OpenStudio Translator
@@ -407,12 +407,6 @@
test
4C662AE0
-
- airflow.rb
- rb
- resource
- 99EB6060
-
geometry.rb
rb
@@ -586,5 +580,11 @@
resource
4BBE084E
+
+ airflow.rb
+ rb
+ resource
+ E5C505B7
+
diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb
index 8d56d39835..7c4f991da3 100644
--- a/HPXMLtoOpenStudio/resources/airflow.rb
+++ b/HPXMLtoOpenStudio/resources/airflow.rb
@@ -2,7 +2,7 @@
class Airflow
def self.apply(model, runner, weather, spaces, hpxml, cfa, nbeds,
- ncfl_ag, duct_systems, nv_clg_ssn_sensor, hvac_map, eri_version,
+ ncfl_ag, duct_systems, clg_ssn_sensor, hvac_map, eri_version,
frac_windows_operable, apply_ashrae140_assumptions)
# Global variables
@@ -106,10 +106,10 @@ def self.apply(model, runner, weather, spaces, hpxml, cfa, nbeds,
vented_crawl = foundation
end
- apply_natural_ventilation_and_whole_house_fan(model, weather, hpxml.site, vent_fans_whf, open_window_area, nv_clg_ssn_sensor)
+ apply_natural_ventilation_and_whole_house_fan(model, weather, hpxml.site, vent_fans_whf, open_window_area, clg_ssn_sensor)
apply_infiltration_and_ventilation_fans(model, weather, hpxml.site, vent_fans_mech, vent_fans_kitchen, vent_fans_bath, vented_dryers,
hpxml.building_construction.has_flue_or_chimney, hpxml.air_infiltration_measurements,
- vented_attic, vented_crawl, hvac_map)
+ vented_attic, vented_crawl, hvac_map, clg_ssn_sensor)
end
def self.get_default_fraction_of_windows_operable()
@@ -1486,6 +1486,8 @@ def self.calculate_fan_loads(model, infil_program, vent_mech_erv_hrv_tot, hrv_er
# Calculate mass flow rate based on outdoor air density
# Address load with flow-weighted combined effectiveness
infil_program.addLine("Set Fan_MFR = #{q_var} * OASupRho")
+ infil_program.addLine('Set ZoneInEnth = OASupInEnth')
+ infil_program.addLine('Set ZoneInTemp = OASupInTemp')
if not vent_mech_erv_hrv_tot.empty?
# ERV/HRV EMS load model
# E+ ERV model is using standard density for MFR calculation, caused discrepancy with other system types.
@@ -1502,14 +1504,12 @@ def self.calculate_fan_loads(model, infil_program, vent_mech_erv_hrv_tot, hrv_er
infil_program.addLine('Set ERVTotalHeatTrans = Fan_MFR * (ERVSupOutEnth - OASupInEnth)')
infil_program.addLine('Set ERVLatHeatTrans = ERVTotalHeatTrans - ERVSensHeatTrans')
# ERV/HRV Load calculation
- infil_program.addLine('Set FanTotalToLv = Fan_MFR * (ERVSupOutEnth - ZoneAirEnth)')
- infil_program.addLine('Set FanSensToLv = Fan_MFR * ZoneCp * (ERVSupOutTemp - ZoneTemp)')
- infil_program.addLine('Set FanLatToLv = FanTotalToLv - FanSensToLv')
- else
- infil_program.addLine('Set FanTotalToLv = Fan_MFR * (OASupInEnth - ZoneAirEnth)')
- infil_program.addLine('Set FanSensToLv = Fan_MFR * ZoneCp * (OASupInTemp - ZoneTemp)')
- infil_program.addLine('Set FanLatToLv = FanTotalToLv - FanSensToLv')
+ infil_program.addLine('Set ZoneInEnth = ERVSupOutEnth')
+ infil_program.addLine('Set ZoneInTemp = ERVSupOutTemp')
end
+ infil_program.addLine('Set FanTotalToLv = Fan_MFR * (ZoneInEnth - ZoneAirEnth)')
+ infil_program.addLine('Set FanSensToLv = Fan_MFR * ZoneCp * (ZoneInTemp - ZoneTemp)')
+ infil_program.addLine('Set FanLatToLv = FanTotalToLv - FanSensToLv')
# Actuator,
# If preconditioned, handle actuators later in calculate_precond_loads
@@ -1519,11 +1519,23 @@ def self.calculate_fan_loads(model, infil_program, vent_mech_erv_hrv_tot, hrv_er
end
end
- def self.calculate_precond_loads(model, infil_program, vent_mech_preheat, vent_mech_precool, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, hvac_map)
+ def self.calculate_precond_loads(model, infil_program, vent_mech_preheat, vent_mech_precool, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, hvac_map, clg_ssn_sensor)
# Preconditioning
# Assume introducing no sensible loads to zone if preconditioned
+ if not vent_mech_preheat.empty?
+ htg_stp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Thermostat Heating Setpoint Temperature')
+ htg_stp_sensor.setName("#{Constants.ObjectNameAirflow} htg stp s")
+ htg_stp_sensor.setKeyName(@living_zone.name.to_s)
+ infil_program.addLine("Set HtgStp = #{htg_stp_sensor.name}") # heating thermostat setpoint
+ end
+ if not vent_mech_precool.empty?
+ clg_stp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Thermostat Cooling Setpoint Temperature')
+ clg_stp_sensor.setName("#{Constants.ObjectNameAirflow} clg stp s")
+ clg_stp_sensor.setKeyName(@living_zone.name.to_s)
+ infil_program.addLine("Set ClgStp = #{clg_stp_sensor.name}") # cooling thermostat setpoint
+ end
vent_mech_preheat.each_with_index do |f_preheat, i|
- infil_program.addLine('If OASupInTemp < ZoneTemp')
+ infil_program.addLine("If (OASupInTemp < HtgStp) && (#{clg_ssn_sensor.name} < 1)")
htg_energy_actuator = create_other_equipment_object_and_actuator(model: model, name: "shared mech vent preheating energy #{i}", space: @living_space, frac_lat: 0.0, frac_lost: 1.0, hpxml_fuel_type: f_preheat.preheating_fuel, end_use: Constants.ObjectNameMechanicalVentilationPreconditioning)
hvac_map["#{f_preheat.id}_preheat"] = [htg_energy_actuator.actuatedComponent.get]
infil_program.addLine(" Set Qpreheat = #{UnitConversions.convert(f_preheat.average_oa_unit_flow_rate, 'cfm', 'm^3/s').round(4)}")
@@ -1534,16 +1546,21 @@ def self.calculate_precond_loads(model, infil_program, vent_mech_preheat, vent_m
end
calculate_fan_loads(model, infil_program, vent_mech_erv_hrv_tot, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, 'Qpreheat', true)
- infil_program.addLine(" Set PreHeatingEnergy = (-FanSensToLv) * #{f_preheat.preheating_fraction_load_served}")
- infil_program.addLine(" Set #{fan_sens_load_actuator.name} = #{fan_sens_load_actuator.name} + PreHeatingEnergy")
- infil_program.addLine(" Set #{fan_lat_load_actuator.name} = #{fan_lat_load_actuator.name} - FanLatToLv")
- infil_program.addLine(" Set #{htg_energy_actuator.name} = PreHeatingEnergy / #{f_preheat.preheating_efficiency_cop}")
+ infil_program.addLine(' If ZoneInTemp < HtgStp')
+ infil_program.addLine(' Set FanSensToSpt = Fan_MFR * ZoneCp * (ZoneInTemp - HtgStp)')
+ infil_program.addLine(" Set PreHeatingWatt = (-FanSensToSpt) * #{f_preheat.preheating_fraction_load_served}")
+ infil_program.addLine(" Set #{fan_sens_load_actuator.name} = #{fan_sens_load_actuator.name} + PreHeatingWatt")
+ infil_program.addLine(" Set #{fan_lat_load_actuator.name} = #{fan_lat_load_actuator.name} - FanLatToLv") # Fixme:Does this assumption still apply?
+ infil_program.addLine(' Else')
+ infil_program.addLine(' Set PreHeatingWatt = 0.0')
+ infil_program.addLine(' EndIf')
infil_program.addLine('Else')
- infil_program.addLine(" Set #{htg_energy_actuator.name} = 0.0")
+ infil_program.addLine(' Set PreHeatingWatt = 0.0')
infil_program.addLine('EndIf')
+ infil_program.addLine("Set #{htg_energy_actuator.name} = PreHeatingWatt / #{f_preheat.preheating_efficiency_cop}")
end
vent_mech_precool.each_with_index do |f_precool, i|
- infil_program.addLine('If OASupInTemp > ZoneTemp')
+ infil_program.addLine("If (OASupInTemp > ClgStp) && (#{clg_ssn_sensor.name} > 0)")
clg_energy_actuator = create_other_equipment_object_and_actuator(model: model, name: "shared mech vent precooling energy #{i}", space: @living_space, frac_lat: 0.0, frac_lost: 1.0, hpxml_fuel_type: f_precool.precooling_fuel, end_use: Constants.ObjectNameMechanicalVentilationPreconditioning)
hvac_map["#{f_precool.id}_precool"] = [clg_energy_actuator.actuatedComponent.get]
infil_program.addLine(" Set Qprecool = #{UnitConversions.convert(f_precool.average_oa_unit_flow_rate, 'cfm', 'm^3/s').round(4)}")
@@ -1554,18 +1571,23 @@ def self.calculate_precond_loads(model, infil_program, vent_mech_preheat, vent_m
end
calculate_fan_loads(model, infil_program, vent_mech_erv_hrv_tot, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, 'Qprecool', true)
- infil_program.addLine(" Set PreCoolingEnergy = FanSensToLv * #{f_precool.precooling_fraction_load_served}")
- infil_program.addLine(" Set #{fan_sens_load_actuator.name} = #{fan_sens_load_actuator.name} - PreCoolingEnergy")
- infil_program.addLine(" Set #{fan_lat_load_actuator.name} = #{fan_lat_load_actuator.name} - FanLatToLv")
- infil_program.addLine(" Set #{clg_energy_actuator.name} = PreCoolingEnergy / #{f_precool.precooling_efficiency_cop}")
+ infil_program.addLine(' If ZoneInTemp > ClgStp')
+ infil_program.addLine(' Set FanSensToSpt = Fan_MFR * ZoneCp * (ZoneInTemp - ClgStp)')
+ infil_program.addLine(" Set PreCoolingWatt = FanSensToSpt * #{f_precool.precooling_fraction_load_served}")
+ infil_program.addLine(" Set #{fan_sens_load_actuator.name} = #{fan_sens_load_actuator.name} - PreCoolingWatt")
+ infil_program.addLine(" Set #{fan_lat_load_actuator.name} = #{fan_lat_load_actuator.name} - FanLatToLv") # Fixme:Does this assumption still apply?
+ infil_program.addLine(' Else')
+ infil_program.addLine(' Set PreCoolingWatt = 0.0')
+ infil_program.addLine(' EndIf')
infil_program.addLine('Else')
- infil_program.addLine(" Set #{clg_energy_actuator.name} = 0.0")
+ infil_program.addLine(' Set PreCoolingWatt = 0.0')
infil_program.addLine('EndIf')
+ infil_program.addLine("Set #{clg_energy_actuator.name} = PreCoolingWatt / #{f_precool.precooling_efficiency_cop}")
end
end
def self.apply_infiltration_and_mechanical_ventilation(model, site, vent_fans_mech, living_ach50, living_const_ach, weather, vent_fans_kitchen, vent_fans_bath, vented_dryers,
- range_sch_sensors_map, bath_sch_sensors_map, dryer_exhaust_sch_sensors_map, has_flue_chimney, hvac_map)
+ range_sch_sensors_map, bath_sch_sensors_map, dryer_exhaust_sch_sensors_map, has_flue_chimney, hvac_map, clg_ssn_sensor)
# Categorize fans into different types
vent_mech_preheat = vent_fans_mech.select { |vent_mech| (not vent_mech.preheating_efficiency_cop.nil?) }
vent_mech_precool = vent_fans_mech.select { |vent_mech| (not vent_mech.precooling_efficiency_cop.nil?) }
@@ -1640,7 +1662,7 @@ def self.apply_infiltration_and_mechanical_ventilation(model, site, vent_fans_me
calculate_fan_loads(model, infil_program, vent_mech_erv_hrv_tot, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, 'Qload')
# Address preconditioning
- calculate_precond_loads(model, infil_program, vent_mech_preheat, vent_mech_precool, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, hvac_map)
+ calculate_precond_loads(model, infil_program, vent_mech_preheat, vent_mech_precool, hrv_erv_effectiveness_map, fan_sens_load_actuator, fan_lat_load_actuator, hvac_map, clg_ssn_sensor)
program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
program_calling_manager.setName("#{infil_program.name} calling manager")
@@ -1649,7 +1671,7 @@ def self.apply_infiltration_and_mechanical_ventilation(model, site, vent_fans_me
end
def self.apply_infiltration_and_ventilation_fans(model, weather, site, vent_fans_mech, vent_fans_kitchen, vent_fans_bath, vented_dryers,
- has_flue_chimney, air_infils, vented_attic, vented_crawl, hvac_map)
+ has_flue_chimney, air_infils, vented_attic, vented_crawl, hvac_map, clg_ssn_sensor)
# Get living space infiltration
living_ach50 = nil
living_const_ach = nil
@@ -1687,7 +1709,7 @@ def self.apply_infiltration_and_ventilation_fans(model, weather, site, vent_fans
# Get mechanical ventilation
apply_infiltration_and_mechanical_ventilation(model, site, vent_fans_mech, living_ach50, living_const_ach, weather, vent_fans_kitchen, vent_fans_bath, vented_dryers,
- range_sch_sensors_map, bath_sch_sensors_map, dryer_exhaust_sch_sensors_map, has_flue_chimney, hvac_map)
+ range_sch_sensors_map, bath_sch_sensors_map, dryer_exhaust_sch_sensors_map, has_flue_chimney, hvac_map, clg_ssn_sensor)
end
def self.apply_infiltration_to_living(site, living_ach50, living_const_ach, infil_program, weather, has_flue_chimney)
diff --git a/workflow/tests/base_results/results.csv b/workflow/tests/base_results/results.csv
index 662abeb8a3..7964bcb39f 100644
--- a/workflow/tests/base_results/results.csv
+++ b/workflow/tests/base_results/results.csv
@@ -39,8 +39,8 @@ base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml,26.
base-bldgtype-multifamily-shared-generator.xml,25.45,22.6,0.78,0.0,14.17,0.0,0.0,0.0,0.0,0.02,2.26,0.41,9.67,0.0,0.0,2.03,0.0,0.21,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-2.84,0.78,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.17,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.74,6.49,9.52,0.58,0.0,0.0,0.0,0.01,6188.0,6177.0,8.63,6.98,0.0,-0.01,2.61,0.0,0.0,0.41,1.46,0.0,-0.01,0.0,-0.34,1.64,0.0,0.51,0.0,0.0,-5.57,0.0,-0.0,-0.86,0.0,0.0,-0.04,3.33,0.0,-0.0,0.0,-0.33,-0.65,-3.11,-0.17,0.0,0.0,8.44,1354.0,998.0,11594.0,3210.0
base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml,27.48,27.48,0.0,0.0,0.0,0.0,0.0,0.0,0.21,1.95,1.27,1.3,9.67,0.0,0.0,2.03,0.0,0.21,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.74,6.49,9.52,0.58,0.0,0.0,0.0,0.01,6362.0,6265.0,8.63,6.98,0.0,-0.01,2.61,0.0,0.0,0.41,1.46,0.0,-0.01,0.0,-0.34,1.64,0.0,0.51,0.0,0.0,-5.57,0.0,-0.0,-0.86,0.0,0.0,-0.04,3.33,0.0,-0.0,0.0,-0.33,-0.65,-3.11,-0.17,0.0,0.0,8.44,1354.0,998.0,11594.0,3210.0
base-bldgtype-multifamily-shared-laundry-room.xml,15.69,15.69,13.33,0.0,0.0,0.0,0.0,0.0,0.0,0.02,2.19,0.4,0.0,0.0,0.0,2.03,0.0,0.21,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.81,12.51,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.77,6.18,9.54,0.57,0.0,0.0,0.0,0.01,2882.0,2943.0,3.78,7.01,0.0,-0.01,2.64,0.0,0.0,0.41,1.44,0.0,-0.01,0.0,-0.33,2.08,0.0,0.0,0.0,0.0,-5.45,0.0,-0.0,-0.82,0.0,0.0,-0.03,3.34,0.0,-0.0,0.0,-0.32,-0.8,-3.07,0.0,0.0,0.0,7.95,1355.0,998.0,11403.0,3157.0
-base-bldgtype-multifamily-shared-mechvent-multiple.xml,30.65,30.65,23.73,0.0,0.0,0.0,0.0,0.0,0.0,0.15,2.03,0.34,9.69,0.0,0.0,2.03,0.0,0.21,3.77,1.42,0.17,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.96,0.0,0.0,0.0,17.77,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.63,5.32,9.52,0.61,0.0,0.0,0.0,0.0,6412.0,6394.0,7.85,8.48,0.0,-0.01,2.75,0.0,0.0,0.38,0.55,0.0,-0.01,0.0,-0.16,0.15,0.0,9.31,0.0,0.0,-7.2,0.0,-0.0,-0.31,0.0,0.0,0.01,3.09,0.0,-0.0,0.0,-0.16,-0.03,-2.48,-1.68,0.0,0.0,6.83,1354.0,998.0,11593.0,3210.0
-base-bldgtype-multifamily-shared-mechvent-preconditioning.xml,26.91,26.91,7.53,0.0,0.0,0.0,0.0,0.0,0.0,0.04,2.19,0.39,9.68,0.0,0.0,2.03,0.0,0.21,1.49,0.0,0.05,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.42,0.0,0.0,0.0,6.11,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.35,6.09,9.52,0.59,0.0,0.0,0.0,0.01,6241.0,6250.0,8.8,7.23,0.0,-0.01,2.7,0.0,0.0,0.41,1.25,0.0,-0.01,0.0,-0.31,1.67,0.0,1.8,0.0,0.0,-6.17,0.0,-0.0,-0.67,0.0,0.0,-0.02,3.29,0.0,-0.0,0.0,-0.3,-0.53,-2.99,-0.43,0.0,0.0,7.84,1354.0,998.0,11593.0,3210.0
+base-bldgtype-multifamily-shared-mechvent-multiple.xml,29.85,29.85,20.36,0.0,0.0,0.0,0.0,0.0,0.0,0.21,1.73,0.25,9.71,0.0,0.0,2.03,0.0,0.21,3.75,0.95,0.17,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,8.18,0.0,0.0,0.0,12.17,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.74,4.01,9.52,0.62,0.0,0.0,0.0,0.0,6412.0,6364.0,8.45,8.37,0.0,-0.01,2.83,0.0,0.0,0.4,0.44,0.0,-0.01,0.0,-0.25,0.15,0.0,12.34,0.0,0.0,-7.97,0.0,-0.0,-0.01,0.0,0.0,0.07,3.31,0.0,-0.01,0.0,-0.24,-0.01,-1.57,-3.77,0.0,0.0,6.08,1354.0,998.0,11593.0,3210.0
+base-bldgtype-multifamily-shared-mechvent-preconditioning.xml,26.71,26.71,5.6,0.0,0.0,0.0,0.0,0.0,0.0,0.04,2.02,0.34,9.68,0.0,0.0,2.03,0.0,0.21,1.49,0.0,0.05,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.64,0.0,0.0,0.0,3.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,1.55,5.3,9.52,0.59,0.0,0.0,0.0,0.01,6242.0,6237.0,8.8,7.21,0.0,-0.01,2.78,0.0,0.0,0.41,1.19,0.0,-0.01,0.0,-0.27,1.71,0.0,2.35,0.0,0.0,-6.6,0.0,-0.0,-0.5,0.0,0.0,0.0,3.37,0.0,-0.01,0.0,-0.26,-0.43,-2.57,-1.68,0.0,0.0,7.42,1354.0,998.0,11593.0,3210.0
base-bldgtype-multifamily-shared-mechvent.xml,26.68,26.68,4.09,0.0,0.0,0.0,0.0,0.0,0.0,0.11,1.98,0.33,9.69,0.0,0.0,2.03,0.0,0.21,1.49,0.0,0.0,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.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,3.87,5.16,9.52,0.6,0.0,0.0,0.0,0.01,6254.0,6240.0,10.43,7.88,0.0,-0.01,2.75,0.0,0.0,0.38,0.68,0.0,-0.01,0.0,-0.18,1.65,0.0,5.71,0.0,0.0,-7.03,0.0,-0.0,-0.37,0.0,0.0,-0.0,3.1,0.0,-0.0,0.0,-0.17,-0.38,-2.57,-1.43,0.0,0.0,7.0,1354.0,998.0,11593.0,3210.0
base-bldgtype-multifamily-shared-pv.xml,25.45,1.01,0.78,0.0,0.0,0.0,0.0,0.0,0.0,0.02,2.26,0.41,9.67,0.0,0.0,2.03,0.0,0.21,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,-24.43,0.0,0.78,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.74,6.49,9.52,0.58,0.0,0.0,0.0,0.01,6188.0,6177.0,8.63,6.98,0.0,-0.01,2.61,0.0,0.0,0.41,1.46,0.0,-0.01,0.0,-0.34,1.64,0.0,0.51,0.0,0.0,-5.57,0.0,-0.0,-0.86,0.0,0.0,-0.04,3.33,0.0,-0.0,0.0,-0.33,-0.65,-3.11,-0.17,0.0,0.0,8.44,1354.0,998.0,11594.0,3210.0
base-bldgtype-multifamily-shared-water-heater-recirc.xml,16.79,16.79,13.48,0.0,0.0,0.0,0.0,0.0,0.0,0.03,2.19,0.39,0.0,1.1,0.0,2.03,0.0,0.21,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.32,0.37,1.51,1.53,0.0,2.11,2.79,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.97,12.51,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.92,6.2,9.54,0.57,0.0,0.0,0.0,0.01,2931.0,3065.0,8.78,7.01,0.0,-0.01,2.65,0.0,0.0,0.41,1.4,0.0,-0.01,0.0,-0.34,2.0,0.0,0.51,0.0,0.0,-5.71,0.0,-0.0,-0.79,0.0,0.0,-0.03,3.33,0.0,-0.0,0.0,-0.33,-0.74,-3.05,-0.17,0.0,0.0,8.09,1355.0,998.0,11403.0,3157.0