openstudio-standards 0.2.12.rc4 → 0.2.13.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAE90120162019HighriseApartment.json +1042 -0
- data/data/geometry/ASHRAE90120162019Hospital.json +199 -0
- data/data/geometry/ASHRAE90120162019LargeHotel.json +73 -0
- data/data/geometry/ASHRAE90120162019LargeOffice.json +109 -0
- data/data/geometry/ASHRAE90120162019SecondarySchool.json +205 -0
- data/data/geometry/ASHRAECourthouse.json +112 -0
- data/data/geometry/ASHRAECourthouse.osm +26470 -0
- data/data/geometry/ASHRAELargeHotel.osm +11 -1
- data/data/geometry/ASHRAELargeOffice.json +4 -0
- data/data/geometry/ASHRAESmallDataCenter.json +1 -1
- data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/exclude_list.csv +19 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +49 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +293 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +25426 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +1600 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +564 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +349 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +164 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +10663 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +508 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +156 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +44 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +184 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3094 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +829 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +562 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +52 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +220 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +156 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +1316 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +21446 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +554 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +68 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +28 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +12 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +49 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +293 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +12487 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +1600 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +564 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +349 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +164 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +10663 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +466 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +137 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +44 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +184 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3094 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +829 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +562 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +52 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +220 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +156 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +1316 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +21380 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +554 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +68 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +28 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +12 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +49 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +395 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +12487 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +1600 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +592 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +349 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +550 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +164 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +10663 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +466 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +137 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +44 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +238 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +3094 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +829 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +562 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +52 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +220 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +156 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +1316 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +21548 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +554 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +68 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +28 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +12 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +64 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +871 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +12487 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +1600 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +592 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +349 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +1096 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +164 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +10663 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +886 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +194 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +44 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +247 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +3094 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +829 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +562 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +52 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +220 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +156 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +1316 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +22079 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +994 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +68 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +28 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +12 -0
- data/data/standards/manage_OpenStudio_Standards.rb +87 -37
- data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1-ALL-comstockspace_types.csv +236 -0
- data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +622 -0
- data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1space_types.csv +191 -0
- data/data/standards/openstudio_standards_duplicates_log.csv +17 -0
- data/data/standards/test_performance_expected_dd_results.csv +1971 -1171
- data/lib/openstudio-standards.rb +76 -18
- data/lib/openstudio-standards/btap/btap.model.rb +1 -1
- data/lib/openstudio-standards/btap/economics.rb +14 -11
- data/lib/openstudio-standards/btap/envelope.rb +185 -257
- data/lib/openstudio-standards/btap/fileio.rb +1 -0
- data/lib/openstudio-standards/btap/geometry.rb +21 -1
- data/lib/openstudio-standards/btap/measures.rb +12 -11
- data/lib/openstudio-standards/btap/schedules.rb +3 -12
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.rb +178 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +8 -8
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +3 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +28 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +0 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +28 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +53 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +29 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +157 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +29 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +24 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +32 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +33 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +32 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +25 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +366 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +144 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +11 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +24 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +32 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +33 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +32 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +25 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +367 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +144 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +11 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +0 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +0 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +3 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +74 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +46 -30
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +23 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +26 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +8 -11
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +54 -60
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +56 -60
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +38 -12
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +218 -134
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +6 -2
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +230 -134
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +60 -62
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +25 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +34 -22
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +31 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +43 -28
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +48 -38
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +9 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +575 -345
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +13 -19
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +13 -17
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +9 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +79 -51
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +60 -60
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +2 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +133 -120
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +124 -112
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +138 -66
- data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +7275 -199
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +35 -35
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +3 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +4 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +7 -8
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +7 -8
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +13 -14
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +7 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +0 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +25 -14
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +474 -89
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +35 -33
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +72 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +120 -120
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +142 -154
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +9 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +11 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +26 -14
- data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +270 -247
- data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
- data/lib/openstudio-standards/refs/references.rb +5 -2
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +70 -51
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -0
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +2 -4
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +91 -2
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +4 -5
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +30 -9
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +0 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +37 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -3
- data/lib/openstudio-standards/standards/Standards.Construction.rb +124 -118
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.Fan.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +2 -4
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +10 -3
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.Model.rb +305 -247
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -0
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -9
- data/lib/openstudio-standards/standards/Standards.Pump.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +103 -121
- data/lib/openstudio-standards/standards/Standards.Space.rb +42 -35
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +9 -17
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +25 -27
- data/lib/openstudio-standards/standards/Standards.Surface.rb +97 -52
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +76 -25
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +6 -7
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +85 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +0 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +10 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +63 -99
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +2420 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +32 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +70 -40
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +105 -40
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +15 -15
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +5 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +63 -99
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +1460 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +32 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +123 -39
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +104 -17
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +15 -15
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +32 -15
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +63 -99
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +1460 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +64 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +52 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +123 -39
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +112 -25
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +37 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +63 -99
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +1460 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +64 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +104 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +125 -41
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +172 -55
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +15 -15
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +456 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +19 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerSingleSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerTwoSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +189 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +57 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +22 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.boilers.json +68 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.chillers.json +490 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +21244 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2111 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.economizers.json +676 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.elevators.json +372 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +1096 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ext_ltg.json +169 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps.json +532 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +164 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_rejection.json +49 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.motors.json +274 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +3094 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ref_cases.json +854 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ref_lnup.json +562 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_compressors.json +58 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_condenser.json +238 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +12 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_walkins.json +1316 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +23067 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +648 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_heaters.json +72 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_source_heat_pumps.json +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_source_heat_pumps_heating.json +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +456 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +19 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerSingleSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerTwoSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +189 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +57 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +22 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +68 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.chillers.json +490 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +21244 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2111 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.economizers.json +676 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.elevators.json +372 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +1096 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ext_ltg.json +169 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps.json +664 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +204 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_rejection.json +49 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.motors.json +274 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +3094 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ref_cases.json +854 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ref_lnup.json +562 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +58 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_condenser.json +238 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +12 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_walkins.json +1316 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +23067 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +671 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_heaters.json +72 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_source_heat_pumps.json +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_source_heat_pumps_heating.json +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1662 -332
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +4994 -234
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1743 -161
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +63 -99
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +8 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +5967 -2727
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +63 -99
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ext_ltg.json +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +5920 -2700
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +2011 -1112
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +0 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +1946 -1106
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +3 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/cbes/cbes.Model.rb +1 -3
- data/lib/openstudio-standards/standards/cbes/cbes.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +8 -13
- data/lib/openstudio-standards/standards/deer/deer.Model.rb +2 -2
- data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +2 -0
- data/lib/openstudio-standards/standards/deer/deer.Space.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +0 -1
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +0 -1
- data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +0 -1
- data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/btap_1980to2010.rb +2 -18
- data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/data/space_types.json +1677 -1005
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +87 -15
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +31 -19
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/curves.json +75 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/heat_pumps.json +16 -16
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/space_types.json +1677 -1005
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +16 -2
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +15 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +14 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/boiler_set.json +29 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +913 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/equip_eff_lim.json +52 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/erv.json +109 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/furnace_set.json +23 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +803 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +787 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/pv.json +112 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/shw_set.json +29 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +50 -0
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +100 -0
- data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +33 -0
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +1729 -0
- data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +189 -0
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +104 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +68 -33
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +24 -13
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +110 -99
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +24 -24
- data/lib/openstudio-standards/standards/necb/NECB2011/data/curves.json +50 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/erv.json +31 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +39278 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/led_lighting_data.json +2028 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +1745 -1297
- data/lib/openstudio-standards/standards/necb/NECB2011/daylighting_control.md +70 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/demand_controlled_ventilation.md +46 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +69 -107
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +41 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +15 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +139 -141
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +38 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +492 -240
- data/lib/openstudio-standards/standards/necb/NECB2011/led_lighting.md +51 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +75 -9
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +1229 -37
- data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +74 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/pv_ground.md +44 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +11 -3
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/qaqc_resources/neb_end_use_prices.csv +39 -84
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/data/led_lighting_data.json +2883 -0
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +2554 -1916
- data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +32 -1
- data/lib/openstudio-standards/standards/necb/NECB2017/data/led_lighting_data.json +2883 -0
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +2554 -1916
- data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +29 -0
- data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +0 -1
- data/lib/openstudio-standards/standards/standard.rb +6 -5
- data/lib/openstudio-standards/utilities/Add_template_field_to_json.rb +3 -3
- data/lib/openstudio-standards/utilities/convert_surfaces_to_adiabatic_necb_8426.rb +54 -54
- data/lib/openstudio-standards/utilities/generate_prototype_database.rb +2 -2
- data/lib/openstudio-standards/utilities/generate_space_types.rb +3 -3
- data/lib/openstudio-standards/utilities/logging.rb +7 -7
- data/lib/openstudio-standards/utilities/necb_to_epw_map.rb +14 -14
- data/lib/openstudio-standards/utilities/os_sim_extract.rb +25 -25
- data/lib/openstudio-standards/utilities/rename_surfaces.rb +10 -13
- data/lib/openstudio-standards/utilities/round_surf_coords.rb +18 -20
- data/lib/openstudio-standards/utilities/sched_create.rb +39 -41
- data/lib/openstudio-standards/utilities/set_mult_to_adiabatic.rb +31 -31
- data/lib/openstudio-standards/utilities/simulation.rb +13 -21
- data/lib/openstudio-standards/utilities/speacetype_map_converter.rb +10 -11
- data/lib/openstudio-standards/utilities/sqlfile.rb +6 -8
- data/lib/openstudio-standards/utilities/template_measure/measure.rb +108 -0
- data/lib/openstudio-standards/utilities/template_measure/measure.xml +162 -0
- data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +448 -0
- data/lib/openstudio-standards/utilities/template_measure/tests/test.rb +160 -0
- data/lib/openstudio-standards/utilities/weatherData1_xlsx_to_json.rb +23 -26
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +112 -87
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +17 -17
- metadata +236 -2
@@ -1,11 +1,83 @@
|
|
1
1
|
class NECB2011
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
|
3
|
+
# Some tests still require a simple way to set up a system without sizing.. so we are keeping the auto_zoner flag for this method.
|
4
|
+
|
5
|
+
def add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating_multi_speed(model:,
|
6
|
+
zones:,
|
7
|
+
heating_coil_type:,
|
8
|
+
baseboard_type:,
|
9
|
+
hw_loop:,
|
10
|
+
new_auto_zoner: true)
|
11
|
+
system_data = Hash.new
|
12
|
+
system_data[:name] = 'Sys_3_PSZ'
|
13
|
+
system_data[:CentralCoolingDesignSupplyAirTemperature] = 13.0
|
14
|
+
system_data[:CentralHeatingDesignSupplyAirTemperature] = 43.0
|
15
|
+
system_data[:AllOutdoorAirinCooling] = false
|
16
|
+
system_data[:AllOutdoorAirinHeating] = false
|
17
|
+
system_data[:TypeofLoadtoSizeOn] = 'Sensible'
|
18
|
+
system_data[:MinimumSystemAirFlowRatio] = 1.0
|
19
|
+
|
20
|
+
system_data[:PreheatDesignTemperature] = 7.0
|
21
|
+
system_data[:PreheatDesignHumidityRatio] = 0.008
|
22
|
+
system_data[:PrecoolDesignTemperature] = 13.0
|
23
|
+
system_data[:PrecoolDesignHumidityRatio] = 0.008
|
24
|
+
system_data[:SizingOption] = 'NonCoincident'
|
25
|
+
system_data[:CoolingDesignAirFlowMethod] = 'DesignDay'
|
26
|
+
system_data[:CoolingDesignAirFlowRate] = 0.0
|
27
|
+
system_data[:HeatingDesignAirFlowMethod] = 'DesignDay'
|
28
|
+
system_data[:HeatingDesignAirFlowRate] = 0.0
|
29
|
+
system_data[:SystemOutdoorAirMethod] = 'ZoneSum'
|
30
|
+
system_data[:CentralCoolingDesignSupplyAirHumidityRatio] = 0.0085
|
31
|
+
system_data[:CentralHeatingDesignSupplyAirHumidityRatio] = 0.0080
|
32
|
+
|
33
|
+
#System 3 Zone data
|
34
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
|
35
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
|
36
|
+
system_data[:SetpointManagerSingleZoneReheatSupplyTempMin] = 13.0
|
37
|
+
system_data[:SetpointManagerSingleZoneReheatSupplyTempMax] = 43.0
|
38
|
+
system_data[:ZoneDXCoolingSizingFactor] = 1.0
|
39
|
+
system_data[:ZoneDXHeatingSizingFactor] = 1.3
|
40
|
+
system_data[:ZoneCoolingSizingFactor] = 1.1
|
41
|
+
system_data[:ZoneHeatingSizingFactor] = 1.3
|
42
|
+
system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation] = -10.0
|
43
|
+
|
44
|
+
if new_auto_zoner == true
|
45
|
+
# Create system airloop
|
46
|
+
|
47
|
+
# Add Air Loop
|
48
|
+
air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type,
|
49
|
+
model,
|
50
|
+
system_data,
|
51
|
+
determine_control_zone(zones))
|
52
|
+
# Add Zone equipment
|
53
|
+
zones.each do |zone| # Zone sizing temperature
|
54
|
+
sizing_zone = zone.sizingZone
|
55
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
|
56
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
|
57
|
+
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
58
|
+
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
59
|
+
add_sys3_and_8_zone_equip(air_loop,
|
60
|
+
baseboard_type,
|
61
|
+
hw_loop,
|
62
|
+
model,
|
63
|
+
zone)
|
64
|
+
|
65
|
+
end
|
66
|
+
return true
|
67
|
+
else
|
68
|
+
zones.each do |zone|
|
69
|
+
air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, zone)
|
70
|
+
add_sys3_and_8_zone_equip(air_loop,
|
71
|
+
baseboard_type,
|
72
|
+
hw_loop,
|
73
|
+
model,
|
74
|
+
zone)
|
75
|
+
end
|
76
|
+
return true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, control_zone)
|
9
81
|
# System Type 3: PSZ-AC
|
10
82
|
# This measure creates:
|
11
83
|
# -a constant volume packaged single-zone A/C unit
|
@@ -18,157 +90,83 @@ class NECB2011
|
|
18
90
|
# "NaturalGas","Electricity","PropaneGas","FuelOilNo1","FuelOilNo2","Coal","Diesel","Gasoline","OtherFuel1"
|
19
91
|
|
20
92
|
always_on = model.alwaysOnDiscreteSchedule
|
93
|
+
air_loop = common_air_loop(model: model, system_data: system_data)
|
94
|
+
air_loop.setName("#{system_data[:name]} #{control_zone.name}")
|
21
95
|
|
22
|
-
#
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
if izone.thermostat.is_initialized
|
29
|
-
zone_thermostat = izone.thermostat.get
|
30
|
-
if zone_thermostat.to_ThermostatSetpointDualSetpoint.is_initialized
|
31
|
-
dual_thermostat = zone_thermostat.to_ThermostatSetpointDualSetpoint.get
|
32
|
-
htg_temp_sch = dual_thermostat.heatingSetpointTemperatureSchedule.get
|
33
|
-
clg_temp_sch = dual_thermostat.coolingSetpointTemperatureSchedule.get
|
34
|
-
break
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
96
|
+
# Zone sizing temperature
|
97
|
+
sizing_zone = control_zone.sizingZone
|
98
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
|
99
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
|
100
|
+
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
101
|
+
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
38
102
|
|
39
|
-
|
40
|
-
air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
|
41
|
-
|
42
|
-
air_loop.setName("Sys_3_PSZ_#{zone.name}")
|
43
|
-
|
44
|
-
# When an air_loop is constructed, its constructor creates a sizing:system object
|
45
|
-
# the default sizing:system constructor makes a system:sizing object
|
46
|
-
# appropriate for a multizone VAV system
|
47
|
-
# this systems is a constant volume system with no VAV terminals,
|
48
|
-
# and therfore needs different default settings
|
49
|
-
air_loop_sizing = air_loop.sizingSystem # TODO units
|
50
|
-
air_loop_sizing.setTypeofLoadtoSizeOn('Sensible')
|
51
|
-
air_loop_sizing.autosizeDesignOutdoorAirFlowRate
|
52
|
-
if model.version < OpenStudio::VersionString.new('2.7.0')
|
53
|
-
air_loop_sizing.setMinimumSystemAirFlowRatio(1.0)
|
54
|
-
else
|
55
|
-
air_loop_sizing.setCentralHeatingMaximumSystemAirFlowRatio(1.0)
|
56
|
-
end
|
57
|
-
air_loop_sizing.setPreheatDesignTemperature(7.0)
|
58
|
-
air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
|
59
|
-
air_loop_sizing.setPrecoolDesignTemperature(13.0)
|
60
|
-
air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
|
61
|
-
air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
|
62
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(43.0)
|
63
|
-
air_loop_sizing.setSizingOption('NonCoincident')
|
64
|
-
air_loop_sizing.setAllOutdoorAirinCooling(false)
|
65
|
-
air_loop_sizing.setAllOutdoorAirinHeating(false)
|
66
|
-
air_loop_sizing.setCentralCoolingDesignSupplyAirHumidityRatio(0.0085)
|
67
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirHumidityRatio(0.0080)
|
68
|
-
air_loop_sizing.setCoolingDesignAirFlowMethod('DesignDay')
|
69
|
-
air_loop_sizing.setCoolingDesignAirFlowRate(0.0)
|
70
|
-
air_loop_sizing.setHeatingDesignAirFlowMethod('DesignDay')
|
71
|
-
air_loop_sizing.setHeatingDesignAirFlowRate(0.0)
|
72
|
-
air_loop_sizing.setSystemOutdoorAirMethod('ZoneSum')
|
73
|
-
|
74
|
-
# Zone sizing temperature
|
75
|
-
sizing_zone = zone.sizingZone
|
76
|
-
sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
|
77
|
-
sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
|
78
|
-
sizing_zone.setZoneCoolingSizingFactor(1.1)
|
79
|
-
sizing_zone.setZoneHeatingSizingFactor(1.3)
|
80
|
-
|
81
|
-
fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
|
82
|
-
|
83
|
-
staged_thermostat = OpenStudio::Model::ZoneControlThermostatStagedDualSetpoint.new(model)
|
84
|
-
staged_thermostat.setHeatingTemperatureSetpointSchedule(htg_temp_sch)
|
85
|
-
staged_thermostat.setNumberofHeatingStages(4)
|
86
|
-
staged_thermostat.setCoolingTemperatureSetpointBaseSchedule(clg_temp_sch)
|
87
|
-
staged_thermostat.setNumberofCoolingStages(4)
|
88
|
-
zone.setThermostat(staged_thermostat)
|
89
|
-
|
90
|
-
# Multi-stage gas heating coil
|
91
|
-
if heating_coil_type == 'Gas' || heating_coil_type == 'Electric'
|
92
|
-
htg_coil = OpenStudio::Model::CoilHeatingGasMultiStage.new(model)
|
93
|
-
htg_stage_1 = OpenStudio::Model::CoilHeatingGasMultiStageStageData.new(model)
|
94
|
-
htg_stage_2 = OpenStudio::Model::CoilHeatingGasMultiStageStageData.new(model)
|
95
|
-
htg_stage_3 = OpenStudio::Model::CoilHeatingGasMultiStageStageData.new(model)
|
96
|
-
htg_stage_4 = OpenStudio::Model::CoilHeatingGasMultiStageStageData.new(model)
|
97
|
-
if heating_coil_type == 'Gas'
|
98
|
-
supplemental_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
99
|
-
elsif heating_coil_type == 'Electric'
|
100
|
-
supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
101
|
-
htg_stage_1.setNominalCapacity(0.1)
|
102
|
-
htg_stage_2.setNominalCapacity(0.2)
|
103
|
-
htg_stage_3.setNominalCapacity(0.3)
|
104
|
-
htg_stage_4.setNominalCapacity(0.4)
|
105
|
-
end
|
106
|
-
|
107
|
-
# Multi-Stage DX or Electric heating coil
|
108
|
-
elsif heating_coil_type == 'DX'
|
109
|
-
htg_coil = OpenStudio::Model::CoilHeatingDXMultiSpeed.new(model)
|
110
|
-
htg_stage_1 = OpenStudio::Model::CoilHeatingDXMultiSpeedStageData.new(model)
|
111
|
-
htg_stage_2 = OpenStudio::Model::CoilHeatingDXMultiSpeedStageData.new(model)
|
112
|
-
htg_stage_3 = OpenStudio::Model::CoilHeatingDXMultiSpeedStageData.new(model)
|
113
|
-
htg_stage_4 = OpenStudio::Model::CoilHeatingDXMultiSpeedStageData.new(model)
|
114
|
-
supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
115
|
-
sizing_zone.setZoneHeatingSizingFactor(1.3)
|
116
|
-
sizing_zone.setZoneCoolingSizingFactor(1.0)
|
117
|
-
else
|
118
|
-
raise("#{heating_coil_type} is not a valid heating coil type.)")
|
119
|
-
end
|
120
|
-
|
121
|
-
# Add stages to heating coil
|
122
|
-
htg_coil.addStage(htg_stage_1)
|
123
|
-
htg_coil.addStage(htg_stage_2)
|
124
|
-
htg_coil.addStage(htg_stage_3)
|
125
|
-
htg_coil.addStage(htg_stage_4)
|
103
|
+
fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
|
126
104
|
|
127
|
-
|
128
|
-
|
129
|
-
# Set up DX cooling coil
|
105
|
+
# Setup heating and cooling coils
|
106
|
+
if(heating_coil_type == 'Gas') || (heating_coil_type == 'Electric')
|
130
107
|
clg_coil = OpenStudio::Model::CoilCoolingDXMultiSpeed.new(model)
|
131
108
|
clg_coil.setFuelType('Electricity')
|
132
109
|
clg_stage_1 = OpenStudio::Model::CoilCoolingDXMultiSpeedStageData.new(model)
|
133
110
|
clg_stage_2 = OpenStudio::Model::CoilCoolingDXMultiSpeedStageData.new(model)
|
134
|
-
clg_stage_3 = OpenStudio::Model::CoilCoolingDXMultiSpeedStageData.new(model)
|
135
|
-
clg_stage_4 = OpenStudio::Model::CoilCoolingDXMultiSpeedStageData.new(model)
|
136
111
|
clg_coil.addStage(clg_stage_1)
|
137
112
|
clg_coil.addStage(clg_stage_2)
|
138
|
-
clg_coil.
|
139
|
-
|
113
|
+
clg_coil.setApplyPartLoadFractiontoSpeedsGreaterthan1(false)
|
114
|
+
htg_coil = OpenStudio::Model::CoilHeatingGasMultiStage.new(model)
|
115
|
+
htg_stage_1 = OpenStudio::Model::CoilHeatingGasMultiStageStageData.new(model)
|
116
|
+
htg_coil.addStage(htg_stage_1)
|
117
|
+
if heating_coil_type == 'Gas'
|
118
|
+
supplemental_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
119
|
+
supplemental_htg_coil.setNominalCapacity(0.001)
|
120
|
+
elsif heating_coil_type == 'Electric'
|
121
|
+
supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
122
|
+
htg_stage_1.setNominalCapacity(0.001)
|
123
|
+
end
|
124
|
+
# Single stage DX and Electric heating
|
125
|
+
elsif(heating_coil_type == 'DX')
|
126
|
+
clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.new(model)
|
127
|
+
clg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation])
|
128
|
+
htg_coil = OpenStudio::Model::CoilHeatingDXSingleSpeed.new(model)
|
129
|
+
supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
130
|
+
else
|
131
|
+
raise("#{heating_coil_type} is not a valid heating coil type.)")
|
132
|
+
end
|
140
133
|
|
141
|
-
|
142
|
-
|
143
|
-
|
134
|
+
# oa_controller
|
135
|
+
oa_controller = OpenStudio::Model::ControllerOutdoorAir.new(model)
|
136
|
+
oa_controller.autosizeMinimumOutdoorAirFlowRate
|
144
137
|
|
145
|
-
|
146
|
-
|
138
|
+
# oa_system
|
139
|
+
oa_system = OpenStudio::Model::AirLoopHVACOutdoorAirSystem.new(model, oa_controller)
|
147
140
|
|
148
|
-
|
149
|
-
|
150
|
-
|
141
|
+
# Add the components to the air loop
|
142
|
+
# in order from closest to zone to furthest from zone
|
143
|
+
supply_inlet_node = air_loop.supplyInletNode
|
151
144
|
|
145
|
+
if(heating_coil_type == "Gas") || (heating_coil_type == "Electric")
|
152
146
|
air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.new(model, fan, htg_coil, clg_coil, supplemental_htg_coil)
|
153
|
-
air_to_air_heatpump.
|
154
|
-
air_to_air_heatpump.
|
155
|
-
air_to_air_heatpump.
|
156
|
-
air_to_air_heatpump.
|
157
|
-
|
158
|
-
air_to_air_heatpump.
|
159
|
-
|
160
|
-
|
147
|
+
air_to_air_heatpump.setControllingZoneorThermostatLocation(control_zone)
|
148
|
+
air_to_air_heatpump.setNumberofSpeedsforHeating(1)
|
149
|
+
air_to_air_heatpump.setNumberofSpeedsforCooling(2)
|
150
|
+
air_to_air_heatpump.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation])
|
151
|
+
elsif(heating_coil_type == 'DX')
|
152
|
+
air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAir.new(model, always_on, fan, htg_coil, clg_coil, supplemental_htg_coil)
|
153
|
+
air_to_air_heatpump.setControllingZone(zone)
|
154
|
+
end
|
155
|
+
air_to_air_heatpump.setName("#{control_zone.name} ASHP")
|
156
|
+
air_to_air_heatpump.setSupplyAirFanOperatingModeSchedule(always_on)
|
157
|
+
air_to_air_heatpump.addToNode(supply_inlet_node)
|
161
158
|
|
162
|
-
|
163
|
-
# diffuser = OpenStudio::Model::AirTerminalSingleDuctUncontrolled.new(model,always_on)
|
164
|
-
diffuser = OpenStudio::Model::AirTerminalSingleDuctUncontrolled.new(model, always_on)
|
165
|
-
air_loop.addBranchForZone(zone, diffuser.to_StraightComponent)
|
159
|
+
oa_system.addToNode(supply_inlet_node)
|
166
160
|
|
167
|
-
|
168
|
-
|
161
|
+
# Add a setpoint manager single zone reheat to control the
|
162
|
+
# supply air temperature based on the needs of this zone
|
163
|
+
setpoint_mgr_single_zone_reheat = OpenStudio::Model::SetpointManagerSingleZoneReheat.new(model)
|
164
|
+
setpoint_mgr_single_zone_reheat.setControlZone(control_zone)
|
165
|
+
setpoint_mgr_single_zone_reheat.setMinimumSupplyAirTemperature(system_data[:SetpointManagerSingleZoneReheatSupplyTempMin])
|
166
|
+
setpoint_mgr_single_zone_reheat.setMaximumSupplyAirTemperature(system_data[:SetpointManagerSingleZoneReheatSupplyTempMax])
|
167
|
+
setpoint_mgr_single_zone_reheat.addToNode(air_loop.supplyOutletNode)
|
169
168
|
|
170
|
-
return
|
169
|
+
return air_loop
|
171
170
|
end
|
172
171
|
|
173
|
-
# end add_sys3_single_zone_packaged_rooftop_unit_with_baseboard_heating_multi_speed
|
174
172
|
end
|
@@ -1,5 +1,29 @@
|
|
1
1
|
class NECB2011
|
2
2
|
|
3
|
+
def add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model:,
|
4
|
+
zones:,
|
5
|
+
heating_coil_type:,
|
6
|
+
baseboard_type:,
|
7
|
+
hw_loop:,
|
8
|
+
new_auto_zoner: true,
|
9
|
+
multispeed: false)
|
10
|
+
if multispeed
|
11
|
+
add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating_multi_speed(model: model,
|
12
|
+
zones: zones,
|
13
|
+
heating_coil_type: heating_coil_type,
|
14
|
+
baseboard_type: baseboard_type,
|
15
|
+
hw_loop: hw_loop,
|
16
|
+
new_auto_zoner: new_auto_zoner)
|
17
|
+
else
|
18
|
+
add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating_single_speed(model: model,
|
19
|
+
zones: zones,
|
20
|
+
heating_coil_type: heating_coil_type,
|
21
|
+
baseboard_type: baseboard_type,
|
22
|
+
hw_loop: hw_loop,
|
23
|
+
new_auto_zoner: new_auto_zoner)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
3
27
|
# Some tests still require a simple way to set up a system without sizing.. so we are keeping the auto_zoner flag for this method.
|
4
28
|
#
|
5
29
|
def add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating_single_speed(model:,
|
@@ -67,7 +91,6 @@ class NECB2011
|
|
67
91
|
zone)
|
68
92
|
|
69
93
|
end
|
70
|
-
return true
|
71
94
|
else
|
72
95
|
zones.each do |zone|
|
73
96
|
air_loop = add_system_3_and_8_airloop(heating_coil_type, model, system_data, zone)
|
@@ -77,8 +100,20 @@ class NECB2011
|
|
77
100
|
model,
|
78
101
|
zone)
|
79
102
|
end
|
80
|
-
return true
|
81
103
|
end
|
104
|
+
sys_name_pars = {}
|
105
|
+
sys_name_pars["sys_hr"] = "none"
|
106
|
+
sys_name_pars["sys_clg"] = "dx"
|
107
|
+
sys_name_pars["sys_htg"] = heating_coil_type
|
108
|
+
sys_name_pars["sys_sf"] = "cv"
|
109
|
+
sys_name_pars["zone_htg"] = baseboard_type
|
110
|
+
sys_name_pars["zone_clg"] = "none"
|
111
|
+
sys_name_pars["sys_rf"] = "none"
|
112
|
+
assign_base_sys_name(air_loop,
|
113
|
+
sys_abbr: "sys_3",
|
114
|
+
sys_oa: "mixed",
|
115
|
+
sys_name_pars: sys_name_pars)
|
116
|
+
return true
|
82
117
|
end
|
83
118
|
|
84
119
|
|
@@ -127,6 +162,7 @@ class NECB2011
|
|
127
162
|
|
128
163
|
# Set up DX coil with NECB performance curve characteristics;
|
129
164
|
clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.new(model)
|
165
|
+
clg_coil.setName("CoilCoolingDXSingleSpeed_dx")
|
130
166
|
|
131
167
|
# oa_controller
|
132
168
|
oa_controller = OpenStudio::Model::ControllerOutdoorAir.new(model)
|
@@ -86,6 +86,7 @@ class NECB2011
|
|
86
86
|
# Set up DX coil with NECB performance curve characteristics;
|
87
87
|
|
88
88
|
clg_coil = self.add_onespeed_DX_coil(model, always_on)
|
89
|
+
clg_coil.setName("CoilCoolingDXSingleSpeed_dx")
|
89
90
|
|
90
91
|
# oa_controller
|
91
92
|
oa_controller = OpenStudio::Model::ControllerOutdoorAir.new(model)
|
@@ -141,6 +142,18 @@ class NECB2011
|
|
141
142
|
model: model,
|
142
143
|
zone: zone)
|
143
144
|
end # zone loop
|
145
|
+
sys_name_pars = {}
|
146
|
+
sys_name_pars["sys_hr"] = "none"
|
147
|
+
sys_name_pars["sys_clg"] = "dx"
|
148
|
+
sys_name_pars["sys_htg"] = heating_coil_type
|
149
|
+
sys_name_pars["sys_sf"] = "cv"
|
150
|
+
sys_name_pars["zone_htg"] = baseboard_type
|
151
|
+
sys_name_pars["zone_clg"] = "none"
|
152
|
+
sys_name_pars["sys_rf"] = "none"
|
153
|
+
assign_base_sys_name(air_loop,
|
154
|
+
sys_abbr: "sys_4",
|
155
|
+
sys_oa: "mixed",
|
156
|
+
sys_name_pars: sys_name_pars)
|
144
157
|
|
145
158
|
return true
|
146
159
|
end
|
@@ -133,6 +133,18 @@ class NECB2011
|
|
133
133
|
baseboard_type: baseboard_type,
|
134
134
|
hw_loop: hw_loop)
|
135
135
|
end
|
136
|
+
sys_name_pars = {}
|
137
|
+
sys_name_pars["sys_hr"] = "none"
|
138
|
+
sys_name_pars["sys_htg"] = heating_coil_type
|
139
|
+
sys_name_pars["sys_clg"] = "Chilled Water"
|
140
|
+
sys_name_pars["sys_sf"] = "vv"
|
141
|
+
sys_name_pars["zone_htg"] = baseboard_type
|
142
|
+
sys_name_pars["zone_clg"] = "none"
|
143
|
+
sys_name_pars["sys_rf"] = "vv"
|
144
|
+
assign_base_sys_name(air_loop,
|
145
|
+
sys_abbr: "sys_6",
|
146
|
+
sys_oa: "mixed",
|
147
|
+
sys_name_pars: sys_name_pars)
|
136
148
|
end
|
137
149
|
end # next story
|
138
150
|
|
@@ -295,6 +295,7 @@ class NECB2011
|
|
295
295
|
end
|
296
296
|
|
297
297
|
# Create an ERV
|
298
|
+
|
298
299
|
erv = OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent.new(air_loop_hvac.model)
|
299
300
|
erv.setName("#{air_loop_hvac.name} ERV")
|
300
301
|
erv.setSensibleEffectivenessat100HeatingAirFlow(0.5)
|
@@ -367,6 +368,35 @@ class NECB2011
|
|
367
368
|
return true
|
368
369
|
end
|
369
370
|
|
371
|
+
# Sets the minimum effectiveness of the heat exchanger per
|
372
|
+
# the standard.
|
373
|
+
def heat_exchanger_air_to_air_sensible_and_latent_apply_efficiency(heat_exchanger_air_to_air_sensible_and_latent, erv_name = nil)
|
374
|
+
# Assumed to be sensible and latent at all flow
|
375
|
+
# This will now get data of the erv from the json file instead of hardcoding it. Defaults to NECB2011 erv we have been using.
|
376
|
+
erv_name = 'NECB_Default' if erv_name.nil?
|
377
|
+
erv_info = @standards_data['tables']['erv']['table'].detect { |item| item['erv_name'] == erv_name }
|
378
|
+
raise("Could not find #{erv_name} in #{self.class.name} class' erv.json file or it's parents. The available ervs are #{@standards_data['tables']['erv']['table'].map{|item| item['erv_name']}}") if erv_info.nil?
|
379
|
+
|
380
|
+
heat_exchanger_air_to_air_sensible_and_latent.setHeatExchangerType(erv_info['HeatExchangerType'])
|
381
|
+
heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(erv_info['SensibleEffectivenessat100HeatingAirFlow'])
|
382
|
+
heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(erv_info['LatentEffectivenessat100HeatingAirFlow'])
|
383
|
+
heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow'])
|
384
|
+
heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow'])
|
385
|
+
heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(erv_info['SensibleEffectivenessat100CoolingAirFlow'])
|
386
|
+
heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(erv_info['LatentEffectivenessat100CoolingAirFlow'])
|
387
|
+
heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow'])
|
388
|
+
heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow'])
|
389
|
+
heat_exchanger_air_to_air_sensible_and_latent.setSupplyAirOutletTemperatureControl(erv_info['SupplyAirOutletTemperatureControl'])
|
390
|
+
heat_exchanger_air_to_air_sensible_and_latent.setFrostControlType(erv_info['FrostControlType'])
|
391
|
+
heat_exchanger_air_to_air_sensible_and_latent.setEconomizerLockout(erv_info['EconomizerLockout'])
|
392
|
+
heat_exchanger_air_to_air_sensible_and_latent.setThresholdTemperature(erv_info['ThresholdTemperature'])
|
393
|
+
heat_exchanger_air_to_air_sensible_and_latent.setInitialDefrostTimeFraction(erv_info['InitialDefrostTimeFraction'])
|
394
|
+
update_sys_name(heat_exchanger_air_to_air_sensible_and_latent.airLoopHVAC.get,sys_hr: "erv")
|
395
|
+
|
396
|
+
return true
|
397
|
+
end
|
398
|
+
|
399
|
+
|
370
400
|
# Determine if demand control ventilation (DCV) is
|
371
401
|
# required for this air loop.
|
372
402
|
#
|
@@ -798,300 +828,426 @@ class NECB2011
|
|
798
828
|
# @return [Bool] true if successful, false if not
|
799
829
|
def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_multi_speed, sql_db_vars_map)
|
800
830
|
successfully_set_all_properties = true
|
831
|
+
model = coil_cooling_dx_multi_speed.model
|
832
|
+
multi_speed_heat_pump = coil_cooling_dx_multi_speed.containingHVACComponent.get.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.get
|
833
|
+
airloop = multi_speed_heat_pump.airLoopHVAC.get
|
801
834
|
|
802
|
-
# Define the criteria to find the
|
803
|
-
|
804
|
-
|
805
|
-
cooling_type = coil_cooling_dx_multi_speed.condenserType
|
806
|
-
search_criteria['cooling_type'] = cooling_type
|
807
|
-
|
808
|
-
# TODO: Standards - add split system vs single package to model
|
809
|
-
# For now, assume single package as default
|
810
|
-
sub_category = 'Single Package'
|
811
|
-
|
812
|
-
# Determine the heating type if unitary or zone hvac
|
813
|
-
heat_pump = false
|
814
|
-
heating_type = nil
|
815
|
-
containing_comp = nil
|
816
|
-
if coil_cooling_dx_multi_speed.airLoopHVAC.empty?
|
817
|
-
if coil_cooling_dx_multi_speed.containingHVACComponent.is_initialized
|
818
|
-
containing_comp = coil_cooling_dx_multi_speed.containingHVACComponent.get
|
819
|
-
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.is_initialized
|
820
|
-
htg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.get.heatingCoil
|
821
|
-
if htg_coil.to_CoilHeatingDXMultiSpeed.is_initialized
|
822
|
-
heat_pump = true
|
823
|
-
heating_type = 'Electric Resistance or None'
|
824
|
-
elsif htg_coil.to_CoilHeatingGasMultiStage.is_initialized
|
825
|
-
heating_type = 'All Other'
|
826
|
-
end
|
827
|
-
end # TODO: Add other unitary systems
|
828
|
-
elsif coil_cooling_dx_multi_speed.containingZoneHVACComponent.is_initialized
|
829
|
-
containing_comp = coil_cooling_dx_multi_speed.containingZoneHVACComponent.get
|
830
|
-
if containing_comp.to_ZoneHVACPackagedTerminalAirConditioner.is_initialized
|
831
|
-
sub_category = 'PTAC'
|
832
|
-
htg_coil = containing_comp.to_ZoneHVACPackagedTerminalAirConditioner.get.heatingCoil
|
833
|
-
if htg_coil.to_CoilHeatingElectric.is_initialized
|
834
|
-
heating_type = 'Electric Resistance or None'
|
835
|
-
elsif htg_coil.to_CoilHeatingWater.is_initialized || htg_coil.to_CoilHeatingGas.is_initialized || htg_col.to_CoilHeatingGasMultiStage
|
836
|
-
heating_type = 'All Other'
|
837
|
-
end
|
838
|
-
end # TODO: Add other zone hvac systems
|
839
|
-
end
|
840
|
-
end
|
841
|
-
|
842
|
-
# Add the heating type to the search criteria
|
843
|
-
unless heating_type.nil?
|
844
|
-
search_criteria['heating_type'] = heating_type
|
845
|
-
end
|
835
|
+
# Define the criteria to find the properties in the hvac standards data set
|
836
|
+
search_criteria = coil_dx_find_search_criteria(coil_cooling_dx_multi_speed)
|
837
|
+
capacity_w = coil_cooling_dx_multi_speed_find_capacity(coil_cooling_dx_multi_speed)
|
846
838
|
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
if clg_stages.last.grossRatedTotalCoolingCapacity.is_initialized
|
853
|
-
capacity_w = clg_stages.last.grossRatedTotalCoolingCapacity.get
|
854
|
-
elsif coil_cooling_dx_multi_speed.autosizedSpeed4GrossRatedTotalCoolingCapacity.is_initialized
|
855
|
-
capacity_w = coil_cooling_dx_multi_speed.autosizedSpeed4GrossRatedTotalCoolingCapacity.get
|
856
|
-
else
|
857
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name} capacity is not available, cannot apply efficiency standard.")
|
858
|
-
successfully_set_all_properties = false
|
859
|
-
return successfully_set_all_properties
|
839
|
+
# Find design outside air flow rate and flow fraction
|
840
|
+
controller_oa = nil
|
841
|
+
if airloop.airLoopHVACOutdoorAirSystem.is_initialized
|
842
|
+
oa_system = airloop.airLoopHVACOutdoorAirSystem.get
|
843
|
+
controller_oa = oa_system.getControllerOutdoorAir
|
860
844
|
end
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
845
|
+
min_oa_flow_rate, oaf = 0.0,0.0
|
846
|
+
if controller_oa
|
847
|
+
min_oa_flow_rate = nil
|
848
|
+
if controller_oa.minimumOutdoorAirFlowRate.is_initialized
|
849
|
+
min_oa_flow_rate = controller_oa.minimumOutdoorAirFlowRate.get
|
850
|
+
elsif controller_oa.autosizedMinimumOutdoorAirFlowRate.is_initialized
|
851
|
+
min_oa_flow_rate = controller_oa.autosizedMinimumOutdoorAirFlowRate.get
|
852
|
+
end
|
853
|
+
if min_oa_flow_rate then oaf = min_oa_flow_rate.to_f / airloop.autosizedDesignSupplyAirFlowRate.to_f end
|
868
854
|
end
|
869
855
|
|
870
|
-
#
|
856
|
+
# Find required capacity of each stage and total number of stages based on NECB rules
|
857
|
+
# This implementation is limited to 4 stages only. The capacity of stages 1-3 is set to
|
858
|
+
# 66 kW as stipulated by NECB. The capacity of the 4th stage is then allowed to exceed 66 kW
|
859
|
+
# up to the design capacity.
|
871
860
|
stage_cap = []
|
872
861
|
num_stages = (capacity_w / (66.0 * 1000.0) + 0.5).round
|
873
|
-
|
874
|
-
|
862
|
+
max_cap = 66.0 * 1000.0 * num_stages
|
863
|
+
final_num_stages = num_stages
|
864
|
+
case num_stages
|
865
|
+
when 1
|
875
866
|
stage_cap[0] = capacity_w / 2.0
|
876
867
|
stage_cap[1] = 2.0 * stage_cap[0]
|
877
|
-
|
878
|
-
stage_cap[3] = stage_cap[2] + 0.1
|
868
|
+
final_num_stages = 2
|
879
869
|
else
|
880
870
|
stage_cap[0] = 66.0 * 1000.0
|
881
871
|
stage_cap[1] = 2.0 * stage_cap[0]
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
elsif num_stages == 3
|
872
|
+
case num_stages
|
873
|
+
when 2
|
874
|
+
when 3
|
886
875
|
stage_cap[2] = 3.0 * stage_cap[0]
|
887
|
-
|
888
|
-
|
876
|
+
else
|
877
|
+
final_num_stages = 4
|
889
878
|
stage_cap[2] = 3.0 * stage_cap[0]
|
890
|
-
stage_cap[3] =
|
879
|
+
stage_cap[3] = max_cap
|
891
880
|
end
|
892
881
|
end
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
882
|
+
|
883
|
+
# Set final number of cooling stages and create missing stages if needed
|
884
|
+
for istage in 2..final_num_stages-1
|
885
|
+
new_clg_stage = OpenStudio::Model::CoilCoolingDXMultiSpeedStageData.new(model)
|
886
|
+
coil_cooling_dx_multi_speed.addStage(new_clg_stage)
|
887
|
+
end
|
888
|
+
multi_speed_heat_pump.setNumberofSpeedsforCooling(final_num_stages)
|
889
|
+
|
890
|
+
# Set final capacities for each of the stages. The flow rate for each of the stages
|
891
|
+
# is maintained above the outside air flow rate
|
892
|
+
coil_cooling_dx_multi_speed.stages[0].setGrossRatedTotalCoolingCapacity(stage_cap[0])
|
893
|
+
coil_cooling_dx_multi_speed.stages[1].setGrossRatedTotalCoolingCapacity(stage_cap[1])
|
894
|
+
case coil_cooling_dx_multi_speed.stages.size
|
895
|
+
when 2
|
896
|
+
if (oaf > 0.5) then multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate) end
|
897
|
+
when 3
|
898
|
+
coil_cooling_dx_multi_speed.stages[2].setGrossRatedTotalCoolingCapacity(stage_cap[2])
|
899
|
+
if (oaf > 0.333) && (oaf <= 0.666)
|
900
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
901
|
+
elsif (oaf > 0.666)
|
902
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
903
|
+
multi_speed_heat_pump.setSpeed2SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
904
|
+
end
|
905
|
+
when 4
|
906
|
+
coil_cooling_dx_multi_speed.stages[2].setGrossRatedTotalCoolingCapacity(stage_cap[2])
|
907
|
+
coil_cooling_dx_multi_speed.stages[3].setGrossRatedTotalCoolingCapacity(stage_cap[3])
|
908
|
+
if (oaf > 0.25) && (oaf <= 0.5)
|
909
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
910
|
+
elsif (oaf > 0.5) && (oaf <= 0.75)
|
911
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
912
|
+
multi_speed_heat_pump.setSpeed2SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
913
|
+
elsif (oaf > 0.75)
|
914
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
915
|
+
multi_speed_heat_pump.setSpeed2SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
916
|
+
multi_speed_heat_pump.setSpeed3SupplyAirFlowRateDuringCoolingOperation(min_oa_flow_rate)
|
917
|
+
end
|
897
918
|
end
|
898
919
|
|
899
|
-
|
900
|
-
|
901
|
-
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
920
|
+
capacity_btu_per_hr = OpenStudio.convert(stage_cap.last, 'W', 'Btu/hr').get
|
921
|
+
capacity_kbtu_per_hr = OpenStudio.convert(stage_cap.last, 'W', 'kBtu/hr').get
|
902
922
|
|
903
923
|
# Lookup efficiencies depending on whether it is a unitary AC or a heat pump
|
904
924
|
ac_props = nil
|
905
|
-
|
906
|
-
|
907
|
-
ac_props = if heat_pump == true
|
908
|
-
model_find_object(heat_pump_table, search_criteria, capacity_btu_per_hr, Date.today)
|
925
|
+
ac_props = if coil_dx_heat_pump?(coil_cooling_dx_multi_speed)
|
926
|
+
model_find_object(standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
|
909
927
|
else
|
910
|
-
model_find_object(
|
928
|
+
model_find_object(standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
|
911
929
|
end
|
912
930
|
|
913
931
|
# Check to make sure properties were found
|
914
932
|
if ac_props.nil?
|
915
933
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name}, cannot find efficiency info, cannot apply efficiency standard.")
|
916
934
|
successfully_set_all_properties = false
|
917
|
-
return
|
935
|
+
return sql_db_vars_map
|
918
936
|
end
|
919
937
|
|
938
|
+
# get clg stages
|
939
|
+
clg_stages = coil_cooling_dx_multi_speed.stages
|
940
|
+
|
920
941
|
# Make the COOL-CAP-FT curve
|
921
|
-
cool_cap_ft = model_add_curve(model, ac_props['cool_cap_ft']
|
942
|
+
cool_cap_ft = model_add_curve(model, ac_props['cool_cap_ft'])
|
922
943
|
if cool_cap_ft
|
923
|
-
clg_stages.each do |stage|
|
944
|
+
clg_stages.sort.each do |stage|
|
924
945
|
stage.setTotalCoolingCapacityFunctionofTemperatureCurve(cool_cap_ft)
|
925
946
|
end
|
926
947
|
else
|
927
948
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name}, cannot find cool_cap_ft curve, will not be set.")
|
928
949
|
successfully_set_all_properties = false
|
950
|
+
return sql_db_vars_map
|
929
951
|
end
|
930
952
|
|
931
953
|
# Make the COOL-CAP-FFLOW curve
|
932
|
-
cool_cap_fflow = model_add_curve(model, ac_props['cool_cap_fflow']
|
954
|
+
cool_cap_fflow = model_add_curve(model, ac_props['cool_cap_fflow'])
|
933
955
|
if cool_cap_fflow
|
934
|
-
clg_stages.each do |stage|
|
956
|
+
clg_stages.sort.each do |stage|
|
935
957
|
stage.setTotalCoolingCapacityFunctionofFlowFractionCurve(cool_cap_fflow)
|
936
958
|
end
|
937
959
|
else
|
938
960
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name}, cannot find cool_cap_fflow curve, will not be set.")
|
939
961
|
successfully_set_all_properties = false
|
962
|
+
return sql_db_vars_map
|
940
963
|
end
|
941
964
|
|
942
965
|
# Make the COOL-EIR-FT curve
|
943
|
-
cool_eir_ft = model_add_curve(model, ac_props['cool_eir_ft']
|
966
|
+
cool_eir_ft = model_add_curve(model, ac_props['cool_eir_ft'])
|
944
967
|
if cool_eir_ft
|
945
|
-
clg_stages.each do |stage|
|
968
|
+
clg_stages.sort.each do |stage|
|
946
969
|
stage.setEnergyInputRatioFunctionofTemperatureCurve(cool_eir_ft)
|
947
970
|
end
|
948
971
|
else
|
949
972
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name}, cannot find cool_eir_ft curve, will not be set.")
|
950
973
|
successfully_set_all_properties = false
|
974
|
+
return sql_db_vars_map
|
951
975
|
end
|
952
976
|
|
953
977
|
# Make the COOL-EIR-FFLOW curve
|
954
|
-
cool_eir_fflow = model_add_curve(model, ac_props['cool_eir_fflow']
|
978
|
+
cool_eir_fflow = model_add_curve(model, ac_props['cool_eir_fflow'])
|
955
979
|
if cool_eir_fflow
|
956
|
-
clg_stages.each do |stage|
|
980
|
+
clg_stages.sort.each do |stage|
|
957
981
|
stage.setEnergyInputRatioFunctionofFlowFractionCurve(cool_eir_fflow)
|
958
982
|
end
|
959
983
|
else
|
960
984
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name}, cannot find cool_eir_fflow curve, will not be set.")
|
961
985
|
successfully_set_all_properties = false
|
986
|
+
return sql_db_vars_map
|
962
987
|
end
|
963
988
|
|
964
989
|
# Make the COOL-PLF-FPLR curve
|
965
|
-
cool_plf_fplr = model_add_curve(model, ac_props['cool_plf_fplr']
|
990
|
+
cool_plf_fplr = model_add_curve(model, ac_props['cool_plf_fplr'])
|
966
991
|
if cool_plf_fplr
|
967
|
-
clg_stages.each do |stage|
|
992
|
+
clg_stages.sort.each do |stage|
|
968
993
|
stage.setPartLoadFractionCorrelationCurve(cool_plf_fplr)
|
969
994
|
end
|
970
995
|
else
|
971
996
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name}, cannot find cool_plf_fplr curve, will not be set.")
|
972
997
|
successfully_set_all_properties = false
|
998
|
+
return sql_db_vars_map
|
973
999
|
end
|
974
1000
|
|
975
|
-
#
|
976
|
-
cop =
|
977
|
-
|
978
|
-
if coil_dx_subcategory(coil_cooling_dx_multi_speed) == 'PTAC'
|
979
|
-
ptac_eer_coeff_1 = ac_props['ptac_eer_coefficient_1']
|
980
|
-
ptac_eer_coeff_2 = ac_props['ptac_eer_coefficient_2']
|
981
|
-
capacity_btu_per_hr = 7000 if capacity_btu_per_hr < 7000
|
982
|
-
capacity_btu_per_hr = 15_000 if capacity_btu_per_hr > 15_000
|
983
|
-
ptac_eer = ptac_eer_coeff_1 + (ptac_eer_coeff_2 * capacity_btu_per_hr)
|
984
|
-
cop = eer_to_cop(ptac_eer)
|
985
|
-
# self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{ptac_eer}EER")
|
986
|
-
new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{ptac_eer}EER"
|
987
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{ptac_eer}")
|
988
|
-
end
|
989
|
-
|
990
|
-
# If specified as SEER
|
991
|
-
unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
|
992
|
-
min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
|
993
|
-
cop = seer_to_cop(min_seer)
|
994
|
-
new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
|
995
|
-
# self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
|
996
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
|
997
|
-
end
|
998
|
-
|
999
|
-
# If specified as EER
|
1000
|
-
unless ac_props['minimum_energy_efficiency_ratio'].nil?
|
1001
|
-
min_eer = ac_props['minimum_energy_efficiency_ratio']
|
1002
|
-
cop = eer_to_cop(min_eer)
|
1003
|
-
new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
|
1004
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
1005
|
-
end
|
1006
|
-
|
1007
|
-
# if specified as SEER (heat pump)
|
1008
|
-
unless ac_props['minimum_seasonal_efficiency'].nil?
|
1009
|
-
min_seer = ac_props['minimum_seasonal_efficiency']
|
1010
|
-
cop = seer_to_cop(min_seer)
|
1011
|
-
new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
|
1012
|
-
# self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
|
1013
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
|
1014
|
-
end
|
1015
|
-
|
1016
|
-
# If specified as EER (heat pump)
|
1017
|
-
unless ac_props['minimum_full_load_efficiency'].nil?
|
1018
|
-
min_eer = ac_props['minimum_full_load_efficiency']
|
1019
|
-
cop = eer_to_cop(min_eer)
|
1020
|
-
new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
|
1021
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
1022
|
-
end
|
1023
|
-
|
1024
|
-
sql_db_vars_map[new_comp_name] = name.to_s
|
1025
|
-
coil_cooling_dx_multi_speed.setName(new_comp_name)
|
1026
|
-
|
1027
|
-
# Set the efficiency values
|
1028
|
-
|
1001
|
+
# Set the COP values
|
1002
|
+
cop, new_comp_name = coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed)
|
1029
1003
|
unless cop.nil?
|
1030
|
-
clg_stages.each do |istage|
|
1004
|
+
clg_stages.sort.each do |istage|
|
1031
1005
|
istage.setGrossRatedCoolingCOP(cop)
|
1032
1006
|
end
|
1033
1007
|
end
|
1008
|
+
sql_db_vars_map[new_comp_name] = coil_cooling_dx_multi_speed.name.to_s
|
1009
|
+
coil_cooling_dx_multi_speed.setName(new_comp_name)
|
1010
|
+
|
1011
|
+
# It was found that the heat pump OS object doesn't respond to the call to turn on from the
|
1012
|
+
# system availability manager night cycle. This EMS script is then implemented to check the status
|
1013
|
+
# of the system availability manager night cycle and force the heat pump to turn on when needed. The
|
1014
|
+
# heat pump is still turned on when its availability schedule calls for it.
|
1015
|
+
create_ems_to_turn_on_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed_for_night_cycle(multi_speed_heat_pump)
|
1034
1016
|
|
1035
1017
|
return sql_db_vars_map
|
1018
|
+
|
1019
|
+
end
|
1020
|
+
|
1021
|
+
# Create EMS to turn on "AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed" in response to a call
|
1022
|
+
# from the night cycle availability manager of the air loop. It was found that this object
|
1023
|
+
# doesn't respond properly to this call from the night cycle
|
1024
|
+
def create_ems_to_turn_on_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed_for_night_cycle(multi_speed_heat_pump)
|
1025
|
+
model = multi_speed_heat_pump.model
|
1026
|
+
avail_manager_name = nil
|
1027
|
+
if multi_speed_heat_pump.airLoopHVAC.is_initialized
|
1028
|
+
if not multi_speed_heat_pump.airLoopHVAC.get.availabilityManagers.empty?
|
1029
|
+
avail_manager_name = multi_speed_heat_pump.airLoopHVAC.get.availabilityManagers[0].name.to_s
|
1030
|
+
end
|
1031
|
+
end
|
1032
|
+
if avail_manager_name
|
1033
|
+
avail_manager_out_var_name = "Availability Manager Night Cycle Control Status"
|
1034
|
+
avail_manager_out_var = OpenStudio::Model::OutputVariable.new(avail_manager_out_var_name, model)
|
1035
|
+
avail_manager_out_var.setKeyValue(avail_manager_name)
|
1036
|
+
avail_manager_out_var.setReportingFrequency("Timestep")
|
1037
|
+
night_cycle_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, avail_manager_out_var)
|
1038
|
+
heat_pump_avail_sch = nil
|
1039
|
+
if multi_speed_heat_pump.availabilitySchedule.is_initialized
|
1040
|
+
heat_pump_avail_sch = multi_speed_heat_pump.availabilitySchedule.get
|
1041
|
+
elsif multi_speed_heat_pump.airLoopHVAC.get.availabilitySchedule.is_initialized
|
1042
|
+
heat_pump_avail_sch = multi_speed_heat_pump.airLoopHVAC.get.availabilitySchedule.get
|
1043
|
+
else
|
1044
|
+
heat_pump_avail_sch = OpenStudio::Model::ScheduleConstant.new(model)
|
1045
|
+
heat_pump_avail_sch.setValue(1.0)
|
1046
|
+
end
|
1047
|
+
heat_pump_avail_sch_var = OpenStudio::Model::OutputVariable.new("Schedule Value", model)
|
1048
|
+
heat_pump_avail_sch_var.setKeyValue(heat_pump_avail_sch.name.to_s)
|
1049
|
+
heat_pump_avail_sch_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, heat_pump_avail_sch_var)
|
1050
|
+
updated_heat_pump_avail_sch = OpenStudio::Model::ScheduleConstant.new(model)
|
1051
|
+
multi_speed_heat_pump.setAvailabilitySchedule(updated_heat_pump_avail_sch)
|
1052
|
+
heat_pump_avail_sch_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(updated_heat_pump_avail_sch, "Schedule:Constant", "Schedule Value")
|
1053
|
+
heat_pump_avail_sch_prog = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
1054
|
+
heat_pump_avail_sch_prog.setName("#{multi_speed_heat_pump.name.to_s.gsub(/[ +-.]/,'_')} Availability Schedule Program by Line")
|
1055
|
+
heat_pump_avail_sch_prog_body = <<-EMS
|
1056
|
+
IF #{heat_pump_avail_sch_sensor.handle} > 0.0
|
1057
|
+
SET #{heat_pump_avail_sch_actuator.handle} = #{heat_pump_avail_sch_sensor.handle}
|
1058
|
+
ELSEIF #{night_cycle_sensor.handle} == 2.0
|
1059
|
+
SET #{heat_pump_avail_sch_actuator.handle} = 1.0
|
1060
|
+
ELSE
|
1061
|
+
SET #{heat_pump_avail_sch_actuator.handle} = 0.0
|
1062
|
+
ENDIF
|
1063
|
+
EMS
|
1064
|
+
heat_pump_avail_sch_prog.setBody(heat_pump_avail_sch_prog_body)
|
1065
|
+
pcm = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
1066
|
+
pcm.setName("#{heat_pump_avail_sch_prog.name.to_s.gsub(/[ +-.]/,'_')} Calling Manager")
|
1067
|
+
pcm.setCallingPoint('InsideHVACSystemIterationLoop')
|
1068
|
+
pcm.addProgram(heat_pump_avail_sch_prog)
|
1069
|
+
end
|
1036
1070
|
end
|
1037
1071
|
|
1038
1072
|
# Applies the standard efficiency ratings and typical performance curves to this object.
|
1039
1073
|
#
|
1040
1074
|
# @return [Bool] true if successful, false if not
|
1041
|
-
def coil_heating_gas_multi_stage_apply_efficiency_and_curves(coil_heating_gas_multi_stage
|
1075
|
+
def coil_heating_gas_multi_stage_apply_efficiency_and_curves(coil_heating_gas_multi_stage)
|
1042
1076
|
successfully_set_all_properties = true
|
1077
|
+
model = coil_heating_gas_multi_stage.model
|
1078
|
+
|
1079
|
+
# get multi speed heat pump and air loop
|
1080
|
+
multi_speed_heat_pump = nil
|
1081
|
+
multi_speed_heat_pumps = model.getAirLoopHVACUnitaryHeatPumpAirToAirMultiSpeeds
|
1082
|
+
multi_speed_heat_pumps.sort.each do |iheat_pump|
|
1083
|
+
htg_coil = iheat_pump.heatingCoil
|
1084
|
+
if htg_coil.name.to_s.strip == coil_heating_gas_multi_stage.name.to_s.strip
|
1085
|
+
multi_speed_heat_pump = iheat_pump
|
1086
|
+
break
|
1087
|
+
end
|
1088
|
+
end
|
1089
|
+
airloop = multi_speed_heat_pump.airLoopHVAC.get
|
1043
1090
|
|
1044
|
-
#
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1091
|
+
# Define the criteria to find the properties in the hvac standards data set.
|
1092
|
+
search_criteria = coil_heating_gas_multi_stage_find_search_criteria(coil_heating_gas_multi_stage)
|
1093
|
+
fuel_type = search_criteria["fuel_type"]
|
1094
|
+
capacity_w = coil_heating_gas_multi_stage_find_capacity(coil_heating_gas_multi_stage)
|
1095
|
+
|
1096
|
+
# Find system design outside air flow rate and fraction
|
1097
|
+
controller_oa = nil
|
1098
|
+
if airloop.airLoopHVACOutdoorAirSystem.is_initialized
|
1099
|
+
oa_system = airloop.airLoopHVACOutdoorAirSystem.get
|
1100
|
+
controller_oa = oa_system.getControllerOutdoorAir
|
1101
|
+
end
|
1102
|
+
min_oa_flow_rate, oaf = 0.0,0.0
|
1103
|
+
if controller_oa
|
1104
|
+
min_oa_flow_rate = nil
|
1105
|
+
if controller_oa.minimumOutdoorAirFlowRate.is_initialized
|
1106
|
+
min_oa_flow_rate = controller_oa.minimumOutdoorAirFlowRate.get
|
1107
|
+
elsif controller_oa.autosizedMinimumOutdoorAirFlowRate.is_initialized
|
1108
|
+
min_oa_flow_rate = controller_oa.autosizedMinimumOutdoorAirFlowRate.get
|
1109
|
+
end
|
1110
|
+
if min_oa_flow_rate then oaf = min_oa_flow_rate.to_f / airloop.autosizedDesignSupplyAirFlowRate.to_f end
|
1055
1111
|
end
|
1056
1112
|
|
1057
|
-
#
|
1113
|
+
# Find capacities of each of the stages and the total number of stages required based on NECB rules.
|
1114
|
+
# This implementation is limited to 4 stages. The capacity of stages 1-3 is set to 66 kW as stipulated
|
1115
|
+
# by NECB. The capacity of the 4th stage can exceed 66 kW up to the design capacity.
|
1116
|
+
htg_stages = coil_heating_gas_multi_stage.stages
|
1058
1117
|
num_stages = (capacity_w / (66.0 * 1000.0) + 0.5).round
|
1059
|
-
|
1118
|
+
max_cap = 66.0 * 1000.0 * num_stages
|
1060
1119
|
stage_cap = []
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
stage_cap[
|
1065
|
-
stage_cap[3] = stage_cap[2] + 0.1
|
1120
|
+
final_num_stages = num_stages
|
1121
|
+
if capacity_w == 0.001
|
1122
|
+
final_num_stages = 1
|
1123
|
+
stage_cap[0] = capacity_w
|
1066
1124
|
else
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
stage_cap[
|
1071
|
-
|
1072
|
-
|
1073
|
-
stage_cap[
|
1074
|
-
stage_cap[
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1125
|
+
case num_stages
|
1126
|
+
when 1
|
1127
|
+
stage_cap[0] = capacity_w / 2.0
|
1128
|
+
stage_cap[1] = 2.0 * stage_cap[0]
|
1129
|
+
final_num_stages = 2
|
1130
|
+
else
|
1131
|
+
stage_cap[0] = 66.0 * 1000.0
|
1132
|
+
stage_cap[1] = 2.0 * stage_cap[0]
|
1133
|
+
case num_stages
|
1134
|
+
when 2
|
1135
|
+
when 3
|
1136
|
+
stage_cap[2] = 3.0 * stage_cap[0]
|
1137
|
+
else
|
1138
|
+
final_num_stages = 4
|
1139
|
+
stage_cap[2] = 3.0 * stage_cap[0]
|
1140
|
+
stage_cap[3] = max_cap
|
1141
|
+
end
|
1142
|
+
end
|
1143
|
+
end
|
1144
|
+
|
1145
|
+
# Set final number of stages and create missing stages if needed
|
1146
|
+
for istage in 1..final_num_stages-1
|
1147
|
+
new_htg_stage = OpenStudio::Model::CoilHeatingGasMultiStageStageData.new(model)
|
1148
|
+
coil_heating_gas_multi_stage.addStage(new_htg_stage)
|
1149
|
+
end
|
1150
|
+
multi_speed_heat_pump.setNumberofSpeedsforHeating(final_num_stages)
|
1151
|
+
|
1152
|
+
# Set final capacities for each of the stages. The air flow rate for each of the stages
|
1153
|
+
# is maintained above the outside air flow rate
|
1154
|
+
coil_heating_gas_multi_stage.stages[0].setNominalCapacity(stage_cap[0])
|
1155
|
+
case coil_heating_gas_multi_stage.stages.size
|
1156
|
+
when 2
|
1157
|
+
coil_heating_gas_multi_stage.stages[1].setNominalCapacity(stage_cap[1])
|
1158
|
+
if (oaf > 0.5) then multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate) end
|
1159
|
+
when 3
|
1160
|
+
coil_heating_gas_multi_stage.stages[1].setNominalCapacity(stage_cap[1])
|
1161
|
+
coil_heating_gas_multi_stage.stages[2].setNominalCapacity(stage_cap[2])
|
1162
|
+
if (oaf > 0.333) && (oaf <= 0.666)
|
1163
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1164
|
+
elsif (oaf > 0.666)
|
1165
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1166
|
+
multi_speed_heat_pump.setSpeed2SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1167
|
+
end
|
1168
|
+
when 4
|
1169
|
+
coil_heating_gas_multi_stage.stages[1].setNominalCapacity(stage_cap[1])
|
1170
|
+
coil_heating_gas_multi_stage.stages[2].setNominalCapacity(stage_cap[2])
|
1171
|
+
coil_heating_gas_multi_stage.stages[3].setNominalCapacity(stage_cap[3])
|
1172
|
+
if (oaf > 0.25) && (oaf <= 0.5)
|
1173
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1174
|
+
elsif (oaf > 0.5) && (oaf <= 0.75)
|
1175
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1176
|
+
multi_speed_heat_pump.setSpeed2SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1177
|
+
elsif (oaf > 0.75)
|
1178
|
+
multi_speed_heat_pump.setSpeed1SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1179
|
+
multi_speed_heat_pump.setSpeed2SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1180
|
+
multi_speed_heat_pump.setSpeed3SupplyAirFlowRateDuringHeatingOperation(min_oa_flow_rate)
|
1078
1181
|
end
|
1079
1182
|
end
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1183
|
+
|
1184
|
+
# Convert capacity to Btu/hr
|
1185
|
+
capacity_btu_per_hr = OpenStudio.convert(stage_cap.last, 'W', 'Btu/hr').get
|
1186
|
+
capacity_kbtu_per_hr = OpenStudio.convert(stage_cap.last, 'W', 'kBtu/hr').get
|
1187
|
+
|
1188
|
+
# Lookup efficiencies
|
1189
|
+
heater_props = nil
|
1190
|
+
heater_props = model_find_object(standards_data['furnaces'], search_criteria, capacity_btu_per_hr, Date.today)
|
1191
|
+
|
1192
|
+
# Check to make sure properties were found
|
1193
|
+
if heater_props.nil?
|
1194
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGasMultiSpeed', "For #{coil_heating_gas_multi_stage.name}, cannot find efficiency info, cannot apply efficiency standard.")
|
1195
|
+
successfully_set_all_properties = false
|
1196
|
+
return successfully_set_all_properties
|
1083
1197
|
end
|
1084
|
-
# PLF vs PLR curve
|
1085
|
-
furnace_plffplr_curve_name = 'FURNACE-EFFPLR-NECB2011'
|
1086
1198
|
|
1087
|
-
#
|
1088
|
-
|
1089
|
-
if
|
1090
|
-
coil_heating_gas_multi_stage.setPartLoadFractionCorrelationCurve(
|
1199
|
+
# Make the EFFPLR curve
|
1200
|
+
efffplr = model_add_curve(coil_heating_gas_multi_stage.model, heater_props['efffplr'])
|
1201
|
+
if efffplr
|
1202
|
+
coil_heating_gas_multi_stage.setPartLoadFractionCorrelationCurve(efffplr)
|
1091
1203
|
else
|
1092
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGasMultiStage', "For #{coil_heating_gas_multi_stage.name}, cannot find
|
1204
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGasMultiStage', "For #{coil_heating_gas_multi_stage.name}, cannot find efffplr curve, will not be set.")
|
1093
1205
|
successfully_set_all_properties = false
|
1206
|
+
return successfully_set_all_properties
|
1094
1207
|
end
|
1208
|
+
|
1209
|
+
# Get the minimum efficiency standards
|
1210
|
+
thermal_eff = nil
|
1211
|
+
|
1212
|
+
# If specified as AFUE
|
1213
|
+
unless heater_props['minimum_annual_fuel_utilization_efficiency'].nil?
|
1214
|
+
min_afue = heater_props['minimum_annual_fuel_utilization_efficiency']
|
1215
|
+
thermal_eff = afue_to_thermal_eff(min_afue)
|
1216
|
+
new_comp_name = "#{coil_heating_gas_multi_stage.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
|
1217
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGasMultiStage', "For #{template}: #{coil_heating_gas_multi_stage.name}: #{fuel_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
|
1218
|
+
end
|
1219
|
+
|
1220
|
+
# If specified as thermal efficiency
|
1221
|
+
unless heater_props['minimum_thermal_efficiency'].nil?
|
1222
|
+
thermal_eff = heater_props['minimum_thermal_efficiency']
|
1223
|
+
new_comp_name = "#{coil_heating_gas_multi_stage.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff"
|
1224
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGasMultiStage', "For #{template}: #{coil_heating_gas_multi_stage.name}: #{fuel_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}")
|
1225
|
+
end
|
1226
|
+
|
1227
|
+
# If specified as combustion efficiency
|
1228
|
+
unless heater_props['minimum_combustion_efficiency'].nil?
|
1229
|
+
min_comb_eff = heater_props['minimum_combustion_efficiency']
|
1230
|
+
thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
|
1231
|
+
new_comp_name = "#{coil_heating_gas_multi_stage.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
|
1232
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{coil_heating_gas_multi_stage.name}: #{fuel_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
|
1233
|
+
end
|
1234
|
+
coil_heating_gas_multi_stage.setName(new_comp_name)
|
1235
|
+
|
1236
|
+
# Set the name
|
1237
|
+
coil_heating_gas_multi_stage.setName(new_comp_name)
|
1238
|
+
|
1239
|
+
# Get heating stages
|
1240
|
+
htg_stages = coil_heating_gas_multi_stage.stages
|
1241
|
+
|
1242
|
+
# Set the efficiency values
|
1243
|
+
unless thermal_eff.nil?
|
1244
|
+
htg_stages.sort.each do |stage|
|
1245
|
+
stage.setGasBurnerEfficiency(thermal_eff)
|
1246
|
+
end
|
1247
|
+
end
|
1248
|
+
|
1249
|
+
return successfully_set_all_properties
|
1250
|
+
|
1095
1251
|
end
|
1096
1252
|
|
1097
1253
|
# Determines the baseline fan impeller efficiency
|
@@ -1139,7 +1295,7 @@ class NECB2011
|
|
1139
1295
|
# Assuming all fan motors are 4-pole ODP
|
1140
1296
|
motor_use = 'FAN'
|
1141
1297
|
motor_type = ''
|
1142
|
-
if fan.class.name == 'OpenStudio::Model::FanConstantVolume'
|
1298
|
+
if (fan.class.name == 'OpenStudio::Model::FanConstantVolume') || (fan.class.name == 'OpenStudio::Model::FanOnOff')
|
1143
1299
|
motor_type = 'CONSTANT'
|
1144
1300
|
elsif fan.class.name == 'OpenStudio::Model::FanVariableVolume'
|
1145
1301
|
# Is this a return or supply fan
|
@@ -1305,6 +1461,15 @@ class NECB2011
|
|
1305
1461
|
return true
|
1306
1462
|
end
|
1307
1463
|
|
1464
|
+
# Determine and set type of part load control type for heating and chilled
|
1465
|
+
# water variable speed pumps
|
1466
|
+
#
|
1467
|
+
# @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
|
1468
|
+
# @return [Boolean] Returns true if applicable, false otherwise
|
1469
|
+
def pump_variable_speed_control_type(pump)
|
1470
|
+
return false
|
1471
|
+
end
|
1472
|
+
|
1308
1473
|
# Sets the fan pressure rise based on the Prototype buildings inputs
|
1309
1474
|
# which are governed by the flow rate coming through the fan
|
1310
1475
|
# and whether the fan lives inside a unit heater, PTAC, etc.
|
@@ -1560,51 +1725,7 @@ class NECB2011
|
|
1560
1725
|
|
1561
1726
|
return clg_tower
|
1562
1727
|
end
|
1563
|
-
|
1564
|
-
|
1565
|
-
# Creates thermal zones to contain each space, as defined for each building in the
|
1566
|
-
# system_to_space_map inside the Prototype.building_name
|
1567
|
-
# e.g. (Prototype.secondary_school.rb) file.
|
1568
|
-
#
|
1569
|
-
# @param (see #add_constructions)
|
1570
|
-
# @return [Bool] returns true if successful, false if not
|
1571
|
-
def model_create_thermal_zones(model,
|
1572
|
-
space_multiplier_map = nil)
|
1573
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started creating thermal zones')
|
1574
|
-
space_multiplier_map = {} if space_multiplier_map.nil?
|
1575
|
-
|
1576
|
-
# Remove any Thermal zones assigned
|
1577
|
-
model.getThermalZones.each(&:remove)
|
1578
|
-
|
1579
|
-
# Create a thermal zone for each space in the self
|
1580
|
-
model.getSpaces.sort.each do |space|
|
1581
|
-
zone = OpenStudio::Model::ThermalZone.new(model)
|
1582
|
-
zone.setName("#{space.name} ZN")
|
1583
|
-
unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
|
1584
|
-
zone.setMultiplier(space_multiplier_map[space.name.to_s])
|
1585
|
-
end
|
1586
|
-
space.setThermalZone(zone)
|
1587
|
-
|
1588
|
-
# Skip thermostat for spaces with no space type
|
1589
|
-
next if space.spaceType.empty?
|
1590
|
-
|
1591
|
-
# Add a thermostat
|
1592
|
-
space_type_name = space.spaceType.get.name.get
|
1593
|
-
thermostat_name = space_type_name + ' Thermostat'
|
1594
|
-
thermostat = model.getThermostatSetpointDualSetpointByName(thermostat_name)
|
1595
|
-
if thermostat.empty?
|
1596
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Thermostat #{thermostat_name} not found for space name: #{space.name}")
|
1597
|
-
else
|
1598
|
-
thermostat_clone = thermostat.get.clone(model).to_ThermostatSetpointDualSetpoint.get
|
1599
|
-
zone.setThermostatSetpointDualSetpoint(thermostat_clone)
|
1600
|
-
# Set Ideal loads to thermal zone for sizing for NECB needs. We need this for sizing.
|
1601
|
-
ideal_loads = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(model)
|
1602
|
-
ideal_loads.addToThermalZone(zone)
|
1603
|
-
end
|
1604
|
-
end
|
1605
|
-
|
1606
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished creating thermal zones')
|
1607
|
-
end
|
1728
|
+
|
1608
1729
|
|
1609
1730
|
# This method cycles through the spaces in a thermal zone and then sorts them by story. The method then cycles
|
1610
1731
|
# through the spaces on a story and then calculates the centroid of the spaces in the thermal zone on that floor. The
|
@@ -1932,5 +2053,136 @@ class NECB2011
|
|
1932
2053
|
return clg_availability_sch, htg_availability_sch
|
1933
2054
|
end
|
1934
2055
|
|
2056
|
+
# Method to set the base system name based on the following syntax:
|
2057
|
+
# |sys_abbr|sys_oa|sh>?|sc>?|ssf>?|zh>?|zc>?|srf>?|
|
2058
|
+
# "sys_abbr" designates the NECB system type ("sys_1, sys_2, ... sys_6")
|
2059
|
+
# "sys_oa": "mixed" or "doas"
|
2060
|
+
# "sys_name_pars" is a hash for the remaining system name parts for heat recovery,
|
2061
|
+
# heating, cooling, supply fan, zone heating, zone cooling, and return fan
|
2062
|
+
def assign_base_sys_name(airloop,sys_abbr:,sys_oa:,sys_name_pars:)
|
2063
|
+
sys_name = "#{sys_abbr}|#{sys_oa}|"
|
2064
|
+
|
2065
|
+
sys_name_pars.each do |key,value|
|
2066
|
+
case key.downcase
|
2067
|
+
when "sys_hr"
|
2068
|
+
case value.downcase
|
2069
|
+
when "none"
|
2070
|
+
sys_name += "shr>none"
|
2071
|
+
end
|
2072
|
+
|
2073
|
+
when "sys_htg"
|
2074
|
+
case value.downcase
|
2075
|
+
when "none"
|
2076
|
+
sys_name += "sh>none"
|
2077
|
+
when "electric"
|
2078
|
+
sys_name += "sh>c-e"
|
2079
|
+
when "hot water"
|
2080
|
+
sys_name += "sh>c-hw"
|
2081
|
+
when "gas"
|
2082
|
+
sys_name += "sh>c-g"
|
2083
|
+
when "dx"
|
2084
|
+
sys_name += "sh>ashp"
|
2085
|
+
end
|
2086
|
+
|
2087
|
+
when "sys_clg"
|
2088
|
+
case value.downcase
|
2089
|
+
when "none"
|
2090
|
+
sys_name += "sc>none"
|
2091
|
+
when "chilled water"
|
2092
|
+
sys_name += "sc>c-chw"
|
2093
|
+
when "dx"
|
2094
|
+
sys_name += "sc>dx"
|
2095
|
+
sys_name += "sc>ashp" if sys_name_pars["sys_htg"] == "dx"
|
2096
|
+
end
|
2097
|
+
|
2098
|
+
when "sys_sf"
|
2099
|
+
case value.downcase
|
2100
|
+
when "none"
|
2101
|
+
sys_name += "ssf>none"
|
2102
|
+
when "cv"
|
2103
|
+
sys_name += "ssf>cv"
|
2104
|
+
when "vv"
|
2105
|
+
sys_name += "ssf>vv"
|
2106
|
+
end
|
2107
|
+
|
2108
|
+
when "zone_htg"
|
2109
|
+
case value.downcase
|
2110
|
+
when "none"
|
2111
|
+
sys_name += "zh>none"
|
2112
|
+
when "electric"
|
2113
|
+
sys_name += "zh>b-e"
|
2114
|
+
when "hot water"
|
2115
|
+
sys_name += "zh>b-hw"
|
2116
|
+
when "tpfc"
|
2117
|
+
sys_name += "zh>fpfc"
|
2118
|
+
when "fpfc"
|
2119
|
+
sys_name += "zh>tpfc"
|
2120
|
+
end
|
2121
|
+
|
2122
|
+
when "zone_clg"
|
2123
|
+
case value.downcase
|
2124
|
+
when "none"
|
2125
|
+
sys_name += "zc>none"
|
2126
|
+
when "tpfc"
|
2127
|
+
sys_name += "zc>tpfc"
|
2128
|
+
when "fpfc"
|
2129
|
+
sys_name += "zc>fpfc"
|
2130
|
+
when "ptac"
|
2131
|
+
sys_name += "zc>ptac"
|
2132
|
+
end
|
2133
|
+
|
2134
|
+
when "sys_rf"
|
2135
|
+
case value.downcase
|
2136
|
+
when "none"
|
2137
|
+
sys_name += "srf>none"
|
2138
|
+
when "cv"
|
2139
|
+
sys_name += "srf>cv"
|
2140
|
+
when "vv"
|
2141
|
+
sys_name += "srf>vv"
|
2142
|
+
end
|
2143
|
+
end
|
2144
|
+
sys_name += "|"
|
2145
|
+
end
|
2146
|
+
|
2147
|
+
airloop.setName(sys_name)
|
2148
|
+
end
|
2149
|
+
|
2150
|
+
# Method to update the base system name based on the inputs provided.
|
2151
|
+
# Only the parts of the name with string inputs are updated
|
2152
|
+
def update_sys_name(airloop,
|
2153
|
+
sys_abbr: nil,
|
2154
|
+
sys_oa: nil,
|
2155
|
+
sys_hr: nil,
|
2156
|
+
sys_htg: nil,
|
2157
|
+
sys_clg: nil,
|
2158
|
+
sys_sf: nil,
|
2159
|
+
zone_htg: nil,
|
2160
|
+
zone_clg: nil,
|
2161
|
+
sys_rf: nil)
|
2162
|
+
name_parts = airloop.name.to_s.split("|").select {|part| !part.empty?}
|
2163
|
+
if sys_abbr.is_a? String then name_parts[0] = sys_abbr end
|
2164
|
+
if sys_oa.is_a? String then name_parts[1] = sys_oa end
|
2165
|
+
for i in 0..name_parts.size-1
|
2166
|
+
if (name_parts[i].include? "shr>") && (sys_hr.is_a? String)
|
2167
|
+
name_parts[i] = "shr>#{sys_hr}"
|
2168
|
+
elsif (name_parts[i].include? "sh>") && (sys_htg.is_a? String)
|
2169
|
+
name_parts[i] = "sh>#{sys_htg}"
|
2170
|
+
elsif (name_parts[i].include? "sc>") && (sys_clg.is_a? String)
|
2171
|
+
name_parts[i] = "sc>#{sys_clg}"
|
2172
|
+
elsif (name_parts[i].include? "ssf") && (sys_sf.is_a? String)
|
2173
|
+
name_parts[i] = "ssf>#{sys_sf}"
|
2174
|
+
elsif (name_parts[i].include? "zh>") && (zone_htg.is_a? String)
|
2175
|
+
name_parts[i] = "zh>#{zone_htg}"
|
2176
|
+
elsif (name_parts[i].include? "zc>") && (zone_clg.is_a? String)
|
2177
|
+
name_parts[i] = "zc>#{zone_clg}"
|
2178
|
+
elsif (name_parts[i].include? "srf>") && (sys_rf.is_a? String)
|
2179
|
+
name_parts[i] = "srf>#{sys_rf}"
|
2180
|
+
end
|
2181
|
+
end
|
2182
|
+
sys_name = ""
|
2183
|
+
name_parts.each {|part| sys_name += "#{part}|"}
|
2184
|
+
sys_name = sys_name.chop if (Integer(name_parts.last.strip) rescue false)
|
1935
2185
|
|
2186
|
+
airloop.setName(sys_name)
|
2187
|
+
end
|
1936
2188
|
end
|