openstudio-standards 0.2.14 → 0.2.15.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (642) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.json +0 -19
  3. data/data/geometry/ASHRAEMidriseApartment.json +47 -47
  4. data/data/geometry/ASHRAESecondarySchool.osm +2 -2
  5. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  6. data/data/standards/export_OpenStudio_libraries.rb +1 -1
  7. data/data/standards/manage_OpenStudio_Standards.rb +43 -87
  8. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +9 -0
  9. data/data/standards/openstudio_standards_duplicates_log.csv +142 -27
  10. data/data/standards/test_performance_expected_dd_results.csv +2016 -2016
  11. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.ddy +2316 -0
  12. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.epw +8768 -0
  13. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.stat +697 -0
  14. data/lib/openstudio-standards/btap/WeatherData1.json +54 -0
  15. data/lib/openstudio-standards/btap/WeatherData1.xlsx +0 -0
  16. data/lib/openstudio-standards/btap/btap_result.rb +12 -10
  17. data/lib/openstudio-standards/btap/envelope.rb +2 -2
  18. data/lib/openstudio-standards/btap/geometry.rb +96 -49
  19. data/lib/openstudio-standards/{utilities → btap/utilities}/Add_template_field_to_json.rb +0 -0
  20. data/lib/openstudio-standards/{utilities → btap/utilities}/convert_surfaces_to_adiabatic_necb_8426.rb +0 -0
  21. data/lib/openstudio-standards/{utilities → btap/utilities}/generate_space_types.rb +0 -0
  22. data/lib/openstudio-standards/{utilities → btap/utilities}/necb_to_epw_map.rb +0 -0
  23. data/lib/openstudio-standards/{utilities → btap/utilities}/os_sim_extract.rb +0 -0
  24. data/lib/openstudio-standards/{utilities → btap/utilities}/rename_surfaces.rb +0 -0
  25. data/lib/openstudio-standards/{utilities → btap/utilities}/round_surf_coords.rb +0 -0
  26. data/lib/openstudio-standards/{utilities → btap/utilities}/sched_create.rb +0 -0
  27. data/lib/openstudio-standards/{utilities → btap/utilities}/set_mult_to_adiabatic.rb +0 -0
  28. data/lib/openstudio-standards/btap/utilities/space_type.rb +78 -0
  29. data/lib/openstudio-standards/{utilities → btap/utilities}/weatherData1_xlsx_to_json.rb +0 -0
  30. data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +1 -1
  31. data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +1 -1
  32. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +20 -6
  33. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +6 -6
  34. data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +2 -2
  35. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +1 -1
  36. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
  37. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +6 -7
  38. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +2 -1
  39. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanConstantVolume.rb +5 -4
  40. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanOnOff.rb +5 -5
  41. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +5 -4
  42. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +6 -7
  43. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +2 -1
  44. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanConstantVolume.rb +5 -4
  45. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanOnOff.rb +5 -5
  46. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +5 -4
  47. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.elevators.rb +6 -4
  48. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +10 -9
  49. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +9 -11
  50. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +2 -1
  51. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanConstantVolume.rb +5 -4
  52. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanOnOff.rb +5 -5
  53. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +5 -4
  54. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.elevators.rb +11 -7
  55. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +17 -16
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +9 -11
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +4 -2
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +2 -1
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +5 -4
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +5 -5
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +5 -4
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +11 -7
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +23 -22
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +9 -10
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +4 -2
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +2 -1
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +5 -4
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +5 -5
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +5 -4
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +11 -7
  71. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +23 -22
  72. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +89 -0
  73. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +9 -10
  74. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +76 -0
  75. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +22 -2
  76. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
  77. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +11 -11
  78. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +5 -4
  79. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +2 -1
  80. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +5 -4
  81. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +11 -11
  82. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +5 -4
  83. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +2 -1
  84. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanConstantVolume.rb +5 -4
  85. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff.rb +5 -5
  86. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +5 -4
  87. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
  88. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators.rb +11 -7
  89. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +10 -10
  90. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems.rb +4 -2
  91. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +2 -1
  92. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +5 -4
  93. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +5 -5
  94. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +5 -4
  95. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
  96. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +11 -7
  97. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +10 -10
  98. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +4 -2
  99. data/lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb +3 -6
  100. data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +5 -4
  101. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanConstantVolume.rb +5 -3
  102. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanOnOff.rb +5 -4
  103. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanVariableVolume.rb +5 -3
  104. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +65 -30
  105. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +54 -23
  106. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +135 -147
  107. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +42 -7
  108. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +85 -12
  109. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +42 -30
  110. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +39 -8
  111. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +39 -8
  112. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +60 -12
  113. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +33 -265
  114. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +41 -3
  115. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +69 -297
  116. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +68 -25
  117. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +88 -59
  118. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +88 -9
  119. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +48 -10
  120. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +130 -145
  121. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +29 -101
  122. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +24 -7
  123. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +48 -589
  124. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +38 -7
  125. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +38 -8
  126. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +40 -7
  127. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +85 -171
  128. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +87 -44
  129. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +46 -5
  130. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +105 -17
  131. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +97 -15
  132. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +26 -167
  133. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3828 -1131
  134. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +3 -0
  135. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +2 -1
  136. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -0
  137. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -0
  138. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +4 -1
  139. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +3 -0
  140. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +4 -1
  141. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +3 -0
  142. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +9 -0
  143. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +3 -0
  144. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +9 -4
  145. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +4 -1
  146. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +3 -0
  147. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +2 -2
  148. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +4 -1
  149. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +23 -2
  150. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +29 -4
  151. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +29 -5
  152. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +43 -4
  153. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +22 -0
  154. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +46 -3
  155. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +27 -22
  156. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +15 -8
  157. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +22 -4
  158. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +429 -59
  159. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +18 -11
  160. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +11 -2
  161. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +1 -0
  162. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +8 -10
  163. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +37 -28
  164. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +24 -6
  165. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -65
  166. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +1 -1
  167. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +46 -31
  168. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +62 -10
  169. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +76 -33
  170. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  171. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +445 -275
  172. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
  173. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +26 -21
  174. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +5 -2
  175. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +7 -9
  176. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +8 -2
  177. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +10 -6
  178. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +5 -1
  179. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -1
  180. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +45 -4
  181. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +18 -8
  182. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +9 -7
  183. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +8 -4
  184. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +86 -3
  185. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +5 -2
  186. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +6 -2
  187. data/lib/openstudio-standards/standards/Standards.Construction.rb +66 -35
  188. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +7 -7
  189. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +2 -2
  190. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +2 -1
  191. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +2 -1
  192. data/lib/openstudio-standards/standards/Standards.Fan.rb +53 -35
  193. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +22 -16
  194. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +2 -2
  195. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +4 -4
  196. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +77 -19
  197. data/lib/openstudio-standards/standards/Standards.Model.rb +387 -245
  198. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +13 -15
  199. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -48
  200. data/lib/openstudio-standards/standards/Standards.Pump.rb +28 -20
  201. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +3 -4
  202. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +2 -1
  203. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -0
  204. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +34 -24
  205. data/lib/openstudio-standards/standards/Standards.Space.rb +179 -116
  206. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +23 -12
  207. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +55 -25
  208. data/lib/openstudio-standards/standards/Standards.Surface.rb +57 -32
  209. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +157 -107
  210. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -6
  211. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +52 -1
  212. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +2 -2
  213. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.rb +4 -0
  214. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +28 -18
  215. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.FanVariableVolume.rb +1 -1
  216. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -2
  217. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.rb +4 -0
  218. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/comstock_ashrae_90_1_2004.rb +4 -0
  219. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +696 -2938
  220. 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 +1 -1
  221. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +123 -123
  222. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.furnaces.json +26 -0
  223. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +11 -11
  224. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -8
  225. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +395 -384
  226. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +69 -0
  227. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +20 -13
  228. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +1 -1
  229. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Model.rb +1 -1
  230. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.rb +4 -0
  231. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/comstock_ashrae_90_1_2007.rb +4 -0
  232. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +696 -2938
  233. 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 +1 -1
  234. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +122 -122
  235. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.furnaces.json +26 -0
  236. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +11 -11
  237. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -8
  238. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +413 -401
  239. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +69 -0
  240. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +42 -53
  241. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +3 -2
  242. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTower.rb +5 -8
  243. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +1 -1
  244. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +6 -4
  245. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.rb +4 -0
  246. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/comstock_ashrae_90_1_2010.rb +4 -0
  247. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +696 -2938
  248. 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 +1 -1
  249. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +129 -129
  250. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +210 -42
  251. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.furnaces.json +26 -0
  252. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +11 -11
  253. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -8
  254. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +460 -320
  255. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +69 -0
  256. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +45 -51
  257. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +3 -2
  258. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower.rb +5 -8
  259. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +2 -3
  260. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +2 -2
  261. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -5
  262. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ThermalZone.rb +2 -1
  263. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  264. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -0
  265. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.rb +4 -0
  266. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/comstock_ashrae_90_1_2013.rb +4 -0
  267. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +696 -2938
  268. 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 +1 -1
  269. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +121 -121
  270. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +420 -84
  271. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.furnaces.json +26 -0
  272. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +12 -12
  273. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -8
  274. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +475 -335
  275. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +69 -0
  276. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +40 -50
  277. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +3 -2
  278. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +5 -8
  279. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +2 -3
  280. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +2 -2
  281. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +8 -5
  282. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +2 -1
  283. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -0
  284. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +4 -0
  285. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.rb +4 -0
  286. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +696 -2938
  287. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +1 -1
  288. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +152 -128
  289. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +488 -84
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.furnaces.json +26 -0
  291. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +47 -47
  292. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +69 -0
  293. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +342 -56
  294. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +3 -2
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +5 -8
  296. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +2 -3
  297. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +2 -2
  298. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +25 -5
  299. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +2 -1
  300. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +30 -0
  301. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +4 -0
  302. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.rb +4 -0
  303. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +696 -2938
  304. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +1 -1
  305. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +151 -127
  306. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +1 -1
  307. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2307 -101
  308. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.furnaces.json +26 -0
  309. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +1 -1
  310. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +47 -47
  311. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +69 -0
  312. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +25 -0
  313. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +286 -224
  314. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/comstock_doe_ref_1980_2004.rb +4 -0
  315. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +696 -2938
  316. 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 +1 -1
  317. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +126 -126
  318. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.furnaces.json +26 -0
  319. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +11 -11
  320. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.refrigeration_system.json +0 -8
  321. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +405 -393
  322. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +15 -11
  323. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
  324. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +3 -0
  325. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.rb +4 -0
  326. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/comstock_doe_ref_pre_1980.rb +4 -0
  327. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +696 -2938
  328. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +121 -121
  329. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.furnaces.json +37 -0
  330. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +11 -11
  331. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.refrigeration_system.json +0 -8
  332. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +403 -391
  333. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +15 -11
  334. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
  335. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +3 -0
  336. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb +4 -0
  337. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.furnaces.json +15 -0
  338. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +64 -42
  339. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +3 -2
  340. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower.rb +5 -8
  341. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +2 -3
  342. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +2 -2
  343. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +1 -1
  344. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
  345. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +4 -1
  346. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +5 -3
  347. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +3 -0
  348. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.rb +4 -0
  349. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.furnaces.json +15 -0
  350. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +61 -36
  351. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +3 -2
  352. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +5 -8
  353. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +2 -3
  354. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +2 -2
  355. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +1 -1
  356. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
  357. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +4 -1
  358. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +6 -4
  359. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +3 -0
  360. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +4 -0
  361. data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +20 -14
  362. data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +3 -0
  363. data/lib/openstudio-standards/standards/cbes/cbes.rb +4 -0
  364. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/cbes_pre_1978.rb +4 -0
  365. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/cbes_t24_1978.rb +4 -0
  366. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/cbes_t24_1992.rb +4 -0
  367. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/cbes_t24_2001.rb +4 -0
  368. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.rb +4 -0
  369. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.rb +4 -0
  370. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +10 -5
  371. data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +1 -1
  372. data/lib/openstudio-standards/standards/deer/deer.rb +4 -0
  373. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/comstock_deer_1985.rb +4 -0
  374. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +2 -2
  375. data/lib/openstudio-standards/standards/deer/deer_1985/deer_1985.rb +4 -0
  376. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/comstock_deer_1996.rb +4 -0
  377. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +2 -2
  378. data/lib/openstudio-standards/standards/deer/deer_1996/deer_1996.rb +4 -0
  379. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/comstock_deer_2003.rb +4 -0
  380. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +2 -2
  381. data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.rb +4 -0
  382. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/comstock_deer_2007.rb +4 -0
  383. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +2 -2
  384. data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.rb +4 -0
  385. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/comstock_deer_2011.rb +4 -0
  386. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +2 -2
  387. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +4 -0
  388. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/comstock_deer_2014.rb +4 -0
  389. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +2 -2
  390. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +5 -3
  391. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +4 -0
  392. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/comstock_deer_2015.rb +4 -0
  393. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +2 -2
  394. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +5 -3
  395. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.rb +4 -0
  396. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/comstock_deer_2017.rb +4 -0
  397. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +2 -2
  398. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +5 -3
  399. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.rb +4 -0
  400. data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/comstock_deer_2020.rb +4 -0
  401. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +9 -5
  402. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +3 -0
  403. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +5 -3
  404. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.rb +4 -0
  405. data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/comstock_deer_2025.rb +4 -0
  406. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +9 -5
  407. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +3 -0
  408. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +5 -3
  409. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.rb +4 -0
  410. data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/comstock_deer_2030.rb +4 -0
  411. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +9 -5
  412. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +3 -0
  413. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +5 -3
  414. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.rb +4 -0
  415. data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/comstock_deer_2035.rb +4 -0
  416. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +9 -5
  417. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +3 -0
  418. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +5 -3
  419. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.rb +4 -0
  420. data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/comstock_deer_2040.rb +4 -0
  421. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +9 -5
  422. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +3 -0
  423. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +5 -3
  424. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.rb +4 -0
  425. data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/comstock_deer_2045.rb +4 -0
  426. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +9 -5
  427. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +3 -0
  428. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +5 -3
  429. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.rb +4 -0
  430. data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/comstock_deer_2050.rb +4 -0
  431. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +9 -5
  432. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +3 -0
  433. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +5 -3
  434. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.rb +4 -0
  435. data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/comstock_deer_2055.rb +4 -0
  436. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +9 -5
  437. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +3 -0
  438. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +5 -3
  439. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.rb +4 -0
  440. data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/comstock_deer_2060.rb +4 -0
  441. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +9 -5
  442. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +3 -0
  443. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +5 -3
  444. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.rb +4 -0
  445. data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/comstock_deer_2065.rb +4 -0
  446. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +9 -5
  447. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +3 -0
  448. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +5 -3
  449. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.rb +4 -0
  450. data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/comstock_deer_2070.rb +4 -0
  451. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +9 -5
  452. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +3 -0
  453. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +5 -3
  454. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.rb +4 -0
  455. data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/comstock_deer_2075.rb +4 -0
  456. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +9 -5
  457. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +3 -0
  458. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +5 -3
  459. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.rb +4 -0
  460. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/comstock_deer_pre_1975.rb +4 -0
  461. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +2 -2
  462. data/lib/openstudio-standards/standards/deer/deer_pre_1975/deer_pre_1975.rb +4 -0
  463. data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +4 -0
  464. data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/btap_1980to2010.rb +6 -28
  465. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +25 -110
  466. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +45 -60
  467. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +19 -23
  468. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +84 -83
  469. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +52 -47
  470. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +43 -40
  471. data/lib/openstudio-standards/standards/necb/ECMS/data/boiler_set.json +18 -0
  472. data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_set.json +211 -0
  473. data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +1195 -20
  474. data/lib/openstudio-standards/standards/necb/ECMS/data/furnace_set.json +18 -0
  475. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +244 -182
  476. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +232 -185
  477. data/lib/openstudio-standards/standards/necb/ECMS/data/shw_set.json +20 -2
  478. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +18 -25
  479. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +12 -13
  480. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +1647 -466
  481. data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +93 -0
  482. data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +40 -47
  483. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +26 -25
  484. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +303 -305
  485. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +45 -45
  486. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +90 -120
  487. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Hospital.osm +1176 -1115
  488. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +8279 -28923
  489. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +1173 -1173
  490. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +15 -13
  491. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +32 -29
  492. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +25 -26
  493. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -14
  494. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +24 -29
  495. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +85 -84
  496. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +41 -42
  497. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +209 -197
  498. data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +87 -82
  499. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +510 -406
  500. data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +3 -3
  501. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +686 -683
  502. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +129 -82
  503. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +1608 -1608
  504. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +25 -18
  505. data/lib/openstudio-standards/standards/necb/NECB2015/lighting.rb +73 -67
  506. data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +18 -22
  507. data/lib/openstudio-standards/standards/necb/NECB2015/qaqc/necb_2015_qaqc.rb +59 -63
  508. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +1608 -1608
  509. data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -4
  510. data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +10 -14
  511. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +779 -0
  512. data/lib/openstudio-standards/standards/necb/NECB2020/data/boilers.json +122 -0
  513. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +335 -0
  514. data/lib/openstudio-standards/standards/necb/NECB2020/data/constants.json +13 -0
  515. data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +41 -0
  516. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +452 -0
  517. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +164 -0
  518. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_rejection.json +228 -0
  519. data/lib/openstudio-standards/standards/necb/NECB2020/data/led_lighting_data.json +2883 -0
  520. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +25851 -0
  521. data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json +60 -0
  522. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +585 -0
  523. data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +175 -0
  524. data/lib/openstudio-standards/standards/necb/common/bc_step_code_indicators.md +10 -0
  525. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +1963 -0
  526. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +410 -0
  527. data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +42 -0
  528. data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +28705 -0
  529. data/lib/openstudio-standards/standards/necb/common/phius.md +23 -0
  530. data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +1158 -386
  531. data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +4 -0
  532. data/lib/openstudio-standards/standards/standard.rb +2 -1
  533. data/lib/openstudio-standards/utilities/define_thermal_zone_and_mulitpliers.rb +1 -1
  534. data/lib/openstudio-standards/utilities/logging.rb +6 -0
  535. data/lib/openstudio-standards/utilities/simulation.rb +30 -14
  536. data/lib/openstudio-standards/utilities/{speacetype_map_converter.rb → spacetype_map_converter.rb} +0 -0
  537. data/lib/openstudio-standards/utilities/sqlfile.rb +112 -71
  538. data/lib/openstudio-standards/version.rb +2 -2
  539. data/lib/openstudio-standards/weather/Weather.Model.rb +209 -9
  540. data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
  541. data/lib/openstudio-standards.rb +9 -0
  542. metadata +106 -205
  543. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  544. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +0 -49
  545. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +0 -293
  546. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +0 -25426
  547. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +0 -1600
  548. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +0 -564
  549. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +0 -349
  550. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +0 -164
  551. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +0 -10663
  552. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +0 -508
  553. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +0 -156
  554. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +0 -44
  555. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +0 -184
  556. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +0 -3094
  557. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +0 -829
  558. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +0 -562
  559. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +0 -52
  560. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +0 -220
  561. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -156
  562. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +0 -1316
  563. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +0 -21446
  564. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +0 -554
  565. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +0 -68
  566. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +0 -28
  567. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +0 -12
  568. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +0 -49
  569. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +0 -293
  570. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +0 -12487
  571. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +0 -1600
  572. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +0 -564
  573. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +0 -349
  574. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +0 -164
  575. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +0 -10663
  576. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +0 -466
  577. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +0 -137
  578. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +0 -44
  579. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +0 -184
  580. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +0 -3094
  581. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +0 -829
  582. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +0 -562
  583. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +0 -52
  584. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +0 -220
  585. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -156
  586. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +0 -1316
  587. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +0 -21380
  588. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +0 -554
  589. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +0 -68
  590. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +0 -28
  591. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +0 -12
  592. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +0 -49
  593. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +0 -395
  594. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +0 -12487
  595. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +0 -1600
  596. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +0 -592
  597. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +0 -349
  598. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +0 -550
  599. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +0 -164
  600. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +0 -10663
  601. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +0 -466
  602. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +0 -137
  603. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +0 -44
  604. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +0 -238
  605. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +0 -3094
  606. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +0 -829
  607. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +0 -562
  608. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +0 -52
  609. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +0 -220
  610. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -156
  611. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +0 -1316
  612. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +0 -21548
  613. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +0 -554
  614. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +0 -68
  615. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +0 -28
  616. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +0 -12
  617. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +0 -64
  618. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +0 -871
  619. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +0 -12487
  620. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +0 -1600
  621. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +0 -592
  622. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +0 -349
  623. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +0 -1096
  624. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +0 -164
  625. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +0 -10663
  626. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +0 -886
  627. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +0 -194
  628. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +0 -44
  629. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +0 -247
  630. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +0 -3094
  631. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +0 -829
  632. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +0 -562
  633. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +0 -52
  634. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +0 -220
  635. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -156
  636. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +0 -1316
  637. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +0 -22079
  638. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +0 -994
  639. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +0 -68
  640. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +0 -28
  641. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +0 -12
  642. data/lib/openstudio-standards/utilities/convert_costing_constructions.rb +0 -105
@@ -1,5 +1,4 @@
1
1
  class NECB2011
2
-
3
2
  # Creates thermal zones to contain each space, as defined for each building in the
4
3
  # system_to_space_map inside the Prototype.building_name
5
4
  # e.g. (Prototype.secondary_school.rb) file.
@@ -63,7 +62,6 @@ class NECB2011
63
62
  @standards_data['space_types'] = Standard.build(template).standards_data['space_types']
64
63
  end
65
64
 
66
-
67
65
  # The first thing we need to do is get a sizing run to determine the heating loads of all the spaces. The default
68
66
  # btap geometry has a one to one relationship of zones to spaces.. So we simply create the thermal zones for all the spaces.
69
67
  # to do this we need to create thermals zone for each space.
@@ -78,25 +76,26 @@ class NECB2011
78
76
  end
79
77
 
80
78
  # collect sizing information on each space.
81
- self.store_space_sizing_loads(model)
79
+ store_space_sizing_loads(model)
82
80
  # Remove any Thermal zones assigned again to start fresh.
83
81
  model.getThermalZones.each(&:remove)
84
- self.auto_zone_dwelling_units(model)
85
- self.auto_zone_wet_spaces(model: model, lights_type: lights_type, lights_scale: lights_scale)
86
- self.auto_zone_all_other_spaces(model)
87
- self.auto_zone_wild_spaces(model: model, lights_type: lights_type, lights_scale: lights_scale)
88
- #THis will color the spaces and zones.
82
+ auto_zone_dwelling_units(model)
83
+ auto_zone_wet_spaces(model: model, lights_type: lights_type, lights_scale: lights_scale)
84
+ auto_zone_all_other_spaces(model)
85
+ auto_zone_wild_spaces(model: model, lights_type: lights_type, lights_scale: lights_scale)
86
+ # This will color the spaces and zones.
89
87
  random = Random.new(1234)
90
- #Set ideal hvac in case we want to not implement the hvac yet and still run osm right after this function.
91
- #model.getThermalZones.each { |zone| zone.setUseIdealAirLoads(true) }
92
- model.getThermalZones.sort.each {|item| item.setRenderingColor(self.set_random_rendering_color(item, random))}
93
- model.getSpaceTypes.sort.each {|item| item.setRenderingColor(self.set_random_rendering_color(item, random))}
88
+ # Set ideal hvac in case we want to not implement the hvac yet and still run osm right after this function.
89
+ # model.getThermalZones.each { |zone| zone.setUseIdealAirLoads(true) }
90
+ model.getThermalZones.sort.each { |item| item.setRenderingColor(set_random_rendering_color(item, random)) }
91
+ model.getSpaceTypes.sort.each { |item| item.setRenderingColor(set_random_rendering_color(item, random)) }
94
92
  end
95
93
 
96
94
  # Organizes Zones and assigns them to appropriate systems according to NECB 2011-17 systems spacetype rules in Sec 8.
97
95
  # requires requires fuel type to be assigned for each system aspect. Defaults to gas hydronic.
98
96
  def apply_systems(model:, primary_heating_fuel:, sizing_run_dir:)
99
97
  raise('validation of model failed.') unless validate_initial_model(model)
98
+
100
99
  # Check to see if model is using another vintage of spacetypes. If so overwrite the @standards for the object with the
101
100
  # other spacetype data. This is required for correct system mapping.
102
101
  template = determine_spacetype_vintage(model)
@@ -106,23 +105,22 @@ class NECB2011
106
105
  end
107
106
 
108
107
  # do a sizing run.
109
- if model_run_sizing_run(model, "#{sizing_run_dir}/autozone") == false
108
+ if model_run_sizing_run(model, "#{sizing_run_dir}/autozone_systems") == false
110
109
  raise('autorun sizing run failed!')
111
110
  end
112
111
 
113
112
  # collect sizing information on each space.
114
- self.store_space_sizing_loads(model)
113
+ store_space_sizing_loads(model)
115
114
 
116
115
  # Set the primary fuel set to default to to specific fuel type.
117
116
  if primary_heating_fuel == 'DefaultFuel'
118
117
  epw = BTAP::Environment::WeatherFile.new(model.weatherFile.get.path.get)
119
- primary_heating_fuel = @standards_data['regional_fuel_use'].detect {|fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region)}['fueltype_set']
118
+ primary_heating_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region) }['fueltype_set']
120
119
  end
121
120
  # Get fuelset.
122
- system_fuel_defaults = @standards_data['fuel_type_sets'].detect {|fuel_type_set| fuel_type_set['name'] == primary_heating_fuel}
121
+ system_fuel_defaults = @standards_data['fuel_type_sets'].detect { |fuel_type_set| fuel_type_set['name'] == primary_heating_fuel }
123
122
  raise("fuel_type_sets named #{primary_heating_fuel} not found in fuel_type_sets table.") if system_fuel_defaults.nil?
124
123
 
125
-
126
124
  # Assign fuel sources.
127
125
  boiler_fueltype = system_fuel_defaults['boiler_fueltype']
128
126
  baseboard_type = system_fuel_defaults['baseboard_type']
@@ -135,13 +133,13 @@ class NECB2011
135
133
  heating_coil_type_sys6 = system_fuel_defaults['heating_coil_type_sys6']
136
134
  fan_type = system_fuel_defaults['fan_type']
137
135
 
138
- #remove idealair from zones if any.
136
+ # remove idealair from zones if any.
139
137
  model.getZoneHVACIdealLoadsAirSystems.each(&:remove)
140
138
  @hw_loop = create_hw_loop_if_required(baseboard_type,
141
139
  boiler_fueltype,
142
140
  mau_heating_coil_type,
143
141
  model)
144
- #Rule that all dwelling units have their own zone and system.
142
+ # Rule that all dwelling units have their own zone and system.
145
143
  auto_system_dwelling_units(model: model,
146
144
  baseboard_type: baseboard_type,
147
145
  boiler_fueltype: boiler_fueltype,
@@ -153,24 +151,21 @@ class NECB2011
153
151
  heating_coil_type_sys6: heating_coil_type_sys6,
154
152
  mau_cooling_type: mau_cooling_type,
155
153
  mau_heating_coil_type: mau_heating_coil_type,
156
- mau_type: mau_type
157
- )
154
+ mau_type: mau_type)
158
155
 
159
- #Assign a single system 4 for all wet spaces.. and assign the control zone to the one with the largest load.
156
+ # Assign a single system 4 for all wet spaces.. and assign the control zone to the one with the largest load.
160
157
  auto_system_wet_spaces(baseboard_type: baseboard_type,
161
158
  boiler_fueltype: boiler_fueltype,
162
159
  heating_coil_type_sys4: heating_coil_type_sys4,
163
160
  model: model)
164
161
 
165
-
166
- #Assign a single system 4 for all storage spaces.. and assign the control zone to the one with the largest load.
162
+ # Assign a single system 4 for all storage spaces.. and assign the control zone to the one with the largest load.
167
163
  auto_system_storage_spaces(baseboard_type: baseboard_type,
168
164
  boiler_fueltype: boiler_fueltype,
169
165
  heating_coil_type_sys4: heating_coil_type_sys4,
170
166
  model: model)
171
167
 
172
-
173
- #Assign the wild spaces to a single system 4 system with a control zone with the largest load.
168
+ # Assign the wild spaces to a single system 4 system with a control zone with the largest load.
174
169
  auto_system_wild_spaces(baseboard_type: baseboard_type,
175
170
  heating_coil_type_sys4: heating_coil_type_sys4,
176
171
  model: model)
@@ -186,14 +181,12 @@ class NECB2011
186
181
  heating_coil_type_sys6: heating_coil_type_sys6,
187
182
  mau_cooling_type: mau_cooling_type,
188
183
  mau_heating_coil_type: mau_heating_coil_type,
189
- mau_type: mau_type
190
- )
184
+ mau_type: mau_type)
191
185
  model_add_swh(model: model, swh_fueltype: system_fuel_defaults['swh_fueltype'])
192
186
  model_apply_sizing_parameters(model)
193
187
  # set a larger tolerance for unmet hours from default 0.2 to 1.0C
194
188
  model.getOutputControlReportingTolerances.setToleranceforTimeHeatingSetpointNotMet(1.0)
195
189
  model.getOutputControlReportingTolerances.setToleranceforTimeCoolingSetpointNotMet(1.0)
196
-
197
190
  end
198
191
 
199
192
  # Method to store space sizing loads. This is needed because later when the zones are destroyed this information will be lost.
@@ -201,7 +194,6 @@ class NECB2011
201
194
  @stored_space_heating_sizing_loads = {}
202
195
  @stored_space_cooling_sizing_loads = {}
203
196
  model.getSpaces.sort.each do |space|
204
-
205
197
  space_type = space.spaceType.get.standardsSpaceType.get
206
198
  @stored_space_heating_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.heatingDesignLoad.get
207
199
  @stored_space_cooling_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.coolingDesignLoad.get
@@ -212,9 +204,10 @@ class NECB2011
212
204
  def stored_space_heating_load(space)
213
205
  if @stored_space_heating_sizing_loads.nil?
214
206
  # do a sizing run.
215
- raise("autorun sizing run failed!") if model_run_sizing_run(space.model, "#{Dir.pwd}/autozone") == false
216
- #collect sizing information on each space.
217
- self.store_space_sizing_loads(space.model)
207
+ raise('autorun sizing run failed!') if model_run_sizing_run(space.model, "#{Dir.pwd}/autozone") == false
208
+
209
+ # collect sizing information on each space.
210
+ store_space_sizing_loads(space.model)
218
211
  end
219
212
  @stored_space_heating_sizing_loads[space]
220
213
  end
@@ -223,9 +216,10 @@ class NECB2011
223
216
  def stored_space_cooling_load(space)
224
217
  if @stored_space_cooling_sizing_loads.nil?
225
218
  # do a sizing run.
226
- raise("autorun sizing run failed!") if model_run_sizing_run(space.model, "#{Dir.pwd}/autozone") == false
227
- #collect sizing information on each space.
228
- self.store_space_sizing_loads(space.model)
219
+ raise('autorun sizing run failed!') if model_run_sizing_run(space.model, "#{Dir.pwd}/autozone") == false
220
+
221
+ # collect sizing information on each space.
222
+ store_space_sizing_loads(space.model)
229
223
  end
230
224
  @stored_space_cooling_sizing_loads[space]
231
225
  end
@@ -255,9 +249,9 @@ class NECB2011
255
249
  def auto_zone_dwelling_units(model)
256
250
  dwelling_tz_array = []
257
251
  # ----Dwelling units----------- will always have their own system per unit, so they should have their own thermal zone.
258
- model.getSpaces.select {|space| is_a_necb_dwelling_unit?(space)}.each do |space|
252
+ model.getSpaces.select { |space| is_a_necb_dwelling_unit?(space) }.each do |space|
259
253
  zone = OpenStudio::Model::ThermalZone.new(model)
260
- zone.setName("DU_BT=#{space.spaceType.get.standardsBuildingType.get}_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory().get.name}_SCH#{ determine_dominant_schedule([space])}")
254
+ zone.setName("DU_BT=#{space.spaceType.get.standardsBuildingType.get}_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH#{determine_dominant_schedule([space])}")
261
255
  unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
262
256
  zone.setMultiplier(space_multiplier_map[space.name.to_s])
263
257
  end
@@ -286,27 +280,28 @@ class NECB2011
286
280
  # their own single system 4 system. These will be set to the dominant floor schedule.
287
281
 
288
282
  def auto_zone_wet_spaces(model:, lights_type: 'NECB_Default', lights_scale: 1.0)
289
- wet_zone_array = Array.new
290
- model.getSpaces.select {|space| is_an_necb_wet_space?(space)}.each do |space|
291
- #if this space was already assigned to something skip it.
283
+ wet_zone_array = []
284
+ model.getSpaces.select { |space| is_an_necb_wet_space?(space) }.each do |space|
285
+ # if this space was already assigned to something skip it.
292
286
  next unless space.thermalZone.empty?
287
+
293
288
  # get space to dominant schedule
294
289
  dominant_schedule = determine_dominant_schedule(space.model.getSpaces)
295
- #create new TZ and set space to the zone.
290
+ # create new TZ and set space to the zone.
296
291
  zone = OpenStudio::Model::ThermalZone.new(model)
297
292
  space.setThermalZone(zone)
298
- tz_name = "WET_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory().get.name}_SCH#{dominant_schedule}"
293
+ tz_name = "WET_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH#{dominant_schedule}"
299
294
  zone.setName(tz_name)
300
- #Set multiplier from the original tz multiplier.
295
+ # Set multiplier from the original tz multiplier.
301
296
  unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
302
297
  zone.setMultiplier(space_multiplier_map[space.name.to_s])
303
298
  end
304
299
 
305
- #this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
300
+ # this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
306
301
  # to use the correct schedule version of the wet and wild space type.
307
302
  adjust_wildcard_spacetype_schedule(space: space, schedule: dominant_schedule, lights_type: lights_type, lights_scale: lights_scale)
308
303
 
309
- #Find spacetype thermostat and assign it to the zone.
304
+ # Find spacetype thermostat and assign it to the zone.
310
305
  thermostat_name = space.spaceType.get.name.get + ' Thermostat'
311
306
  thermostat = model.getThermostatSetpointDualSetpointByName(thermostat_name)
312
307
  if thermostat.empty?
@@ -320,10 +315,10 @@ class NECB2011
320
315
  ideal_loads.addToThermalZone(zone)
321
316
  end
322
317
  # Go through other spaces to see if there are similar spaces with similar loads on the same floor that can be grouped.
323
- model.getSpaces.select {|s| is_an_necb_wet_space?(s)}.each do |space_target|
318
+ model.getSpaces.select { |s| is_an_necb_wet_space?(s) }.each do |space_target|
324
319
  if space_target.thermalZone.empty?
325
- if are_space_loads_similar?(space_1: space, space_2: space_target) && space.buildingStory().get == space_target.buildingStory().get # added since chris needs zones to not span floors for costing.
326
- adjust_wildcard_spacetype_schedule(space_target, dominant_schedule, lights_type, lights_scale, space_height)
320
+ if are_space_loads_similar?(space_1: space, space_2: space_target) && space.buildingStory.get == space_target.buildingStory.get # added since chris needs zones to not span floors for costing.
321
+ adjust_wildcard_spacetype_schedule(space: space_target, schedule: dominant_schedule, lights_type: lights_type, lights_scale: lights_scale)
327
322
  space_target.setThermalZone(zone)
328
323
  end
329
324
  end
@@ -337,20 +332,21 @@ class NECB2011
337
332
  # if the spaces are similar based on exposure and load and blend those spaces into the same zone. It will not merge spaces
338
333
  # from different floors, since this will impact Chris Kirneys costing algorithms.
339
334
  def auto_zone_all_other_spaces(model)
340
- other_tz_array = Array.new
341
- #iterate through all non wildcard spaces.
342
- model.getSpaces.select {|space| not is_a_necb_dwelling_unit?(space) and not is_an_necb_wildcard_space?(space)}.each do |space|
343
- #skip if already assigned to a thermal zone.
335
+ other_tz_array = []
336
+ # iterate through all non wildcard spaces.
337
+ model.getSpaces.select { |space| !is_a_necb_dwelling_unit?(space) && !is_an_necb_wildcard_space?(space) }.each do |space|
338
+ # skip if already assigned to a thermal zone.
344
339
  next unless space.thermalZone.empty?
345
- #create new zone for this space based on the space name.
340
+
341
+ # create new zone for this space based on the space name.
346
342
  zone = OpenStudio::Model::ThermalZone.new(model)
347
- tz_name = "ALL_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory().get.name}_SCH=#{ determine_dominant_schedule([space])}"
343
+ tz_name = "ALL_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH=#{determine_dominant_schedule([space])}"
348
344
  zone.setName(tz_name)
349
- #sets space mulitplier unless it is nil or 1.
345
+ # sets space mulitplier unless it is nil or 1.
350
346
  unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
351
347
  zone.setMultiplier(space_multiplier_map[space.name.to_s])
352
348
  end
353
- #Assign space to the new zone.
349
+ # Assign space to the new zone.
354
350
  space.setThermalZone(zone)
355
351
 
356
352
  # Add a thermostat
@@ -368,9 +364,9 @@ class NECB2011
368
364
  ideal_loads.addToThermalZone(zone)
369
365
  end
370
366
  # Go through other spaces and if you find something with similar loads on the same floor, add it to the zone.
371
- model.getSpaces.select {|space| not is_a_necb_dwelling_unit?(space) and not is_an_necb_wildcard_space?(space)}.each do |space_target|
367
+ model.getSpaces.select { |curr_space| !is_a_necb_dwelling_unit?(curr_space) && !is_an_necb_wildcard_space?(curr_space) }.each do |space_target|
372
368
  if space_target.thermalZone.empty?
373
- if are_space_loads_similar?(space_1: space, space_2: space_target) and space.buildingStory().get == space_target.buildingStory().get # added since chris needs zones to not span floors for costing.
369
+ if are_space_loads_similar?(space_1: space, space_2: space_target) && space.buildingStory.get == space_target.buildingStory.get # added since chris needs zones to not span floors for costing.
374
370
  space_target.setThermalZone(zone)
375
371
  end
376
372
  end
@@ -383,20 +379,21 @@ class NECB2011
383
379
  # This will take all the wildcard spaces and merge them to be supported by a system 4. The control zone will be the
384
380
  # zone that has the largest heating load per area.
385
381
  def auto_zone_wild_spaces(model:, lights_type: 'NECB_Default', lights_scale: 1.0)
386
- other_tz_array = Array.new
387
- #iterate through wildcard spaces.
388
- model.getSpaces.select {|space| is_an_necb_wildcard_space?(space) and not is_an_necb_wet_space?(space)}.each do |space|
389
- #skip if already assigned to a thermal zone.
382
+ other_tz_array = []
383
+ # iterate through wildcard spaces.
384
+ model.getSpaces.select { |space| is_an_necb_wildcard_space?(space) && !is_an_necb_wet_space?(space) }.each do |space|
385
+ # skip if already assigned to a thermal zone.
390
386
  next unless space.thermalZone.empty?
391
- #create new zone for this space based on the space name.
387
+
388
+ # create new zone for this space based on the space name.
392
389
  zone = OpenStudio::Model::ThermalZone.new(model)
393
- tz_name = "WILD_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory().get.name}_SCH=#{determine_dominant_schedule(space.model.getSpaces)}"
390
+ tz_name = "WILD_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH=#{determine_dominant_schedule(space.model.getSpaces)}"
394
391
  zone.setName(tz_name)
395
- #sets space mulitplier unless it is nil or 1.
392
+ # sets space mulitplier unless it is nil or 1.
396
393
  unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
397
394
  zone.setMultiplier(space_multiplier_map[space.name.to_s])
398
395
  end
399
- #Assign space to the new zone.
396
+ # Assign space to the new zone.
400
397
  space.setThermalZone(zone)
401
398
 
402
399
  # lets keep the wild schedules to be the same as what dominate the floor.
@@ -422,10 +419,10 @@ class NECB2011
422
419
  ideal_loads.addToThermalZone(zone)
423
420
  end
424
421
  # Go through other spaces and if you find something with similar loads on the same floor, add it to the zone.
425
- model.getSpaces.select {|space| is_an_necb_wildcard_space?(space) and not is_an_necb_wet_space?(space)}.each do |space_target|
422
+ model.getSpaces.select { |curr_space| is_an_necb_wildcard_space?(curr_space) && !is_an_necb_wet_space?(curr_space) }.each do |space_target|
426
423
  if space_target.thermalZone.empty?
427
- if are_space_loads_similar?(space_1: space, space_2: space_target) and
428
- space.buildingStory().get == space_target.buildingStory().get # added since chris needs zones to not span floors for costing.
424
+ if are_space_loads_similar?(space_1: space, space_2: space_target) &&
425
+ (space.buildingStory.get == space_target.buildingStory.get) # added since chris needs zones to not span floors for costing.
429
426
  space_target.setThermalZone(zone)
430
427
  end
431
428
  end
@@ -435,62 +432,63 @@ class NECB2011
435
432
  return other_tz_array
436
433
 
437
434
  wild_zone_array = []
438
- #Get a list of all the wild spaces.
439
- model.getSpaces.select {|space| is_an_necb_wildcard_space?(space) and not is_an_necb_wet_space?(space)}.each do |space|
440
- #if this space was already assigned to something skip it.
435
+ # Get a list of all the wild spaces.
436
+ model.getSpaces.select { |space| is_an_necb_wildcard_space?(space) && !is_an_necb_wet_space?(space) }.each do |space|
437
+ # if this space was already assigned to something skip it.
441
438
  next unless space.thermalZone.empty?
442
- #find adjacent spaces to the current space.
439
+
440
+ # find adjacent spaces to the current space.
443
441
  adj_spaces = space_get_adjacent_spaces_with_shared_wall_areas(space, true)
444
- adj_spaces = adj_spaces.map {|key, value| key}
442
+ adj_spaces = adj_spaces.map { |key, value| key }
445
443
 
446
444
  # find unassigned adjacent wild spaces that have not been assigned that have the same multiplier these will be
447
445
  # lumped together in the same zone.
448
- wild_adjacent_spaces = adj_spaces.select {|adj_space|
449
- is_an_necb_wildcard_space?(adj_space) and
450
- not is_an_necb_wet_space?(adj_space) and
451
- adj_space.thermalZone.empty? and
452
- space_multiplier_map[space.name.to_s] == space_multiplier_map[adj_space.name.to_s]
453
- }
454
- #put them all together.
446
+ wild_adjacent_spaces = adj_spaces.select do |adj_space|
447
+ is_an_necb_wildcard_space?(adj_space) &&
448
+ !is_an_necb_wet_space?(adj_space) &&
449
+ adj_space.thermalZone.empty? &&
450
+ (space_multiplier_map[space.name.to_s] == space_multiplier_map[adj_space.name.to_s])
451
+ end
452
+ # put them all together.
455
453
  wild_adjacent_spaces << space
456
454
 
457
455
  # Get adjacent candidate foster zones. Must not be a wildcard space and must not be linked to another space incase
458
456
  # it is part of a mirrored space.
459
457
  other_adjacent_spaces = adj_spaces.select do |adj_space|
460
- is_an_necb_wildcard_space?(adj_space) == false and
461
- adj_space.thermalZone.get.spaces.size == 1 and
462
- space_multiplier_map[space.name.to_s] == space_multiplier_map[adj_space.name.to_s]
458
+ (is_an_necb_wildcard_space?(adj_space) == false) &&
459
+ (adj_space.thermalZone.get.spaces.size == 1) &&
460
+ (space_multiplier_map[space.name.to_s] == space_multiplier_map[adj_space.name.to_s])
463
461
  end
464
462
 
465
- #If there are adjacent spaces that fit the above criteria.
463
+ # If there are adjacent spaces that fit the above criteria.
466
464
  # We will need to set each space to the dominant floor schedule by setting the spaces spacetypes to that
467
465
  # schedule version and eventually set it to a system 4
468
466
  unless other_adjacent_spaces.empty?
469
- #assign the space(s) to the adjacent thermal zone.
467
+ # assign the space(s) to the adjacent thermal zone.
470
468
  schedule_type = determine_dominant_schedule(space.buildingStory.get.spaces)
471
469
  zone = other_adjacent_spaces.first.thermalZone.get
472
- wild_adjacent_spaces.each do |space|
473
- adjust_wildcard_spacetype_schedule(space, schedule_type, @lights_type, @lights_scale, @space_height)
474
- space.setThermalZone(zone)
470
+ wild_adjacent_spaces.each do |curr_space|
471
+ adjust_wildcard_spacetype_schedule(curr_space, schedule_type, @lights_type, @lights_scale, @space_height)
472
+ curr_space.setThermalZone(zone)
475
473
  end
476
474
  end
477
475
 
478
- #create new TZ and set space to the zone.
476
+ # create new TZ and set space to the zone.
479
477
  zone = OpenStudio::Model::ThermalZone.new(model)
480
478
  space.setThermalZone(zone)
481
- zone.setName("Wild-ZN:BT=#{space.spaceType.get.standardsBuildingType.get}:ST=#{space.spaceType.get.standardsSpaceType.get}:FL=#{space.buildingStory().get.name}:")
482
- #Set multiplier from the original tz multiplier.
479
+ zone.setName("Wild-ZN:BT=#{space.spaceType.get.standardsBuildingType.get}:ST=#{space.spaceType.get.standardsSpaceType.get}:FL=#{space.buildingStory.get.name}:")
480
+ # Set multiplier from the original tz multiplier.
483
481
  unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
484
482
  zone.setMultiplier(space_multiplier_map[space.name.to_s])
485
483
  end
486
484
 
487
485
  # Set space to dominant
488
486
 
489
- dominant_floor_schedule = determine_dominant_schedule(space.buildingStory().get.spaces)
490
- #this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
487
+ dominant_floor_schedule = determine_dominant_schedule(space.buildingStory.get.spaces)
488
+ # this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
491
489
  # to use the correct schedule version of the wet and wild space type.
492
- adjust_wildcard_spacetype_schedule(space, dominant_floor_schedule, @lights_type, @lights_scale, @space_height)
493
- #Find spacetype thermostat and assign it to the zone.
490
+ adjust_wildcard_spacetype_schedule(space: space, schedule: dominant_floor_schedule, lights_type: @lights_type, lights_scale: @lights_scale)
491
+ # Find spacetype thermostat and assign it to the zone.
494
492
  thermostat_name = space.spaceType.get.name.get + ' Thermostat'
495
493
  thermostat = model.getThermostatSetpointDualSetpointByName(thermostat_name)
496
494
  if thermostat.empty?
@@ -504,11 +502,11 @@ class NECB2011
504
502
  ideal_loads.addToThermalZone(zone)
505
503
  end
506
504
  # Go through other spaces to see if there are similar spaces with similar loads on the same floor that can be grouped.
507
- model.getSpaces.select {|s| is_an_necb_wildcard_space?(s) and not is_an_necb_wet_space?(s)}.each do |space_target|
505
+ model.getSpaces.select { |s| is_an_necb_wildcard_space?(s) && !is_an_necb_wet_space?(s) }.each do |space_target|
508
506
  if space_target.thermalZone.empty?
509
507
  if are_space_loads_similar?(space_1: space, space_2: space_target) &&
510
- space.buildingStory().get == space_target.buildingStory().get # added since chris needs zones to not span floors for costing.
511
- adjust_wildcard_spacetype_schedule(space_target, dominant_floor_schedule, @lights_type, @lights_scale, @space_height)
508
+ space.buildingStory.get == space_target.buildingStory.get # added since chris needs zones to not span floors for costing.
509
+ adjust_wildcard_spacetype_schedule(space: space_target, schedule: dominant_floor_schedule, lights_type: @lights_type, lights_scale: @lights_scale)
512
510
  space_target.setThermalZone(zone)
513
511
  end
514
512
  end
@@ -520,9 +518,10 @@ class NECB2011
520
518
 
521
519
  # This method will determine if the loads on a zone are similar. (Exposure, space type, space loads, and schedules, etc)
522
520
  def are_zone_loads_similar?(zone_1:, zone_2:)
523
- #make sure they have the same number of spaces.
521
+ # make sure they have the same number of spaces.
524
522
  truthes = []
525
523
  return false if zone_1.spaces.size != zone_2.spaces.size
524
+
526
525
  zone_1.spaces.each do |space_1|
527
526
  zone_2.spaces.each do |space_2|
528
527
  if are_space_loads_similar?(space_1: space_1, space_2: space_2)
@@ -530,7 +529,7 @@ class NECB2011
530
529
  end
531
530
  end
532
531
  end
533
- #truthes sizes should be the same as the # of spaces if all spaces are similar.
532
+ # truthes sizes should be the same as the # of spaces if all spaces are similar.
534
533
  return truthes.size == zone_1.spaces.size
535
534
  end
536
535
 
@@ -547,129 +546,130 @@ class NECB2011
547
546
  return false if space_2.spaceType.empty?
548
547
  # ensure that they have the same spacetype.
549
548
  return false unless space_1.spaceType.get == space_2.spaceType.get
549
+
550
550
  # Perform surface comparision. If ranges are within percent_difference_tolerance.. they can be considered the same.
551
551
  space_1_floor_area = space_1.floorArea
552
552
  space_2_floor_area = space_2.floorArea
553
553
  space_1_surface_report = space_surface_report(space_1)
554
554
  space_2_surface_report = space_surface_report(space_2)
555
- #Spaces should have the same number of surface orientations.
555
+ # Spaces should have the same number of surface orientations.
556
556
  return false unless space_1_surface_report.size == space_2_surface_report.size
557
- #spaces should have similar loads
558
- return false unless self.percentage_difference(stored_space_heating_load(space_1), stored_space_heating_load(space_2)) <= heating_load_percent_difference_tolerance
559
- #Each surface should match
557
+ # spaces should have similar loads
558
+ return false unless percentage_difference(stored_space_heating_load(space_1), stored_space_heating_load(space_2)) <= heating_load_percent_difference_tolerance
559
+
560
+ # Each surface should match
560
561
  space_1_surface_report.each do |space_1_surface|
561
562
  surface_match = space_2_surface_report.detect do |space_2_surface|
562
563
  space_1_surface[:surface_type] == space_2_surface[:surface_type] &&
563
- space_1_surface[:boundary_condition] == space_2_surface[:boundary_condition] &&
564
- self.percentage_difference(space_1_surface[:tilt], space_2_surface[:tilt]) <= angular_percent_difference_tolerance &&
565
- self.percentage_difference(space_1_surface[:azimuth], space_2_surface[:azimuth]) <= angular_percent_difference_tolerance &&
566
- self.percentage_difference(space_1_surface[:surface_area_to_floor_ratio],
567
- space_2_surface[:surface_area_to_floor_ratio]) <= surface_percent_difference_tolerance &&
568
- self.percentage_difference(space_1_surface[:glazed_subsurface_area_to_floor_ratio],
569
- space_2_surface[:glazed_subsurface_area_to_floor_ratio]) <= surface_percent_difference_tolerance &&
570
- self.percentage_difference(space_1_surface[:opaque_subsurface_area_to_floor_ratio],
571
- space_2_surface[:opaque_subsurface_area_to_floor_ratio]) <= surface_percent_difference_tolerance
572
-
564
+ space_1_surface[:boundary_condition] == space_2_surface[:boundary_condition] &&
565
+ percentage_difference(space_1_surface[:tilt], space_2_surface[:tilt]) <= angular_percent_difference_tolerance &&
566
+ percentage_difference(space_1_surface[:azimuth], space_2_surface[:azimuth]) <= angular_percent_difference_tolerance &&
567
+ percentage_difference(space_1_surface[:surface_area_to_floor_ratio],
568
+ space_2_surface[:surface_area_to_floor_ratio]) <= surface_percent_difference_tolerance &&
569
+ percentage_difference(space_1_surface[:glazed_subsurface_area_to_floor_ratio],
570
+ space_2_surface[:glazed_subsurface_area_to_floor_ratio]) <= surface_percent_difference_tolerance &&
571
+ percentage_difference(space_1_surface[:opaque_subsurface_area_to_floor_ratio],
572
+ space_2_surface[:opaque_subsurface_area_to_floor_ratio]) <= surface_percent_difference_tolerance
573
573
  end
574
574
  return false if surface_match.nil?
575
575
  end
576
576
  return true
577
577
  end
578
578
 
579
- #This method gathers the surface information for the space to determine if spaces are the same.
579
+ # This method gathers the surface information for the space to determine if spaces are the same.
580
580
  def space_surface_report(space)
581
581
  surface_report = []
582
582
  space_floor_area = space.floorArea
583
583
  ['Outdoors', 'Ground'].each do |bc|
584
584
  surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(space.surfaces, [bc]).each do |surface|
585
- #sum wall area and subsurface area by direction. This is the old way so excluding top and bottom surfaces.
586
- #new way
587
- glazings = BTAP::Geometry::Surfaces::filter_subsurfaces_by_types(surface.subSurfaces, ["FixedWindow",
588
- "OperableWindow",
589
- "GlassDoor",
590
- "Skylight",
591
- "TubularDaylightDiffuser",
592
- "TubularDaylightDome"])
593
- doors = BTAP::Geometry::Surfaces::filter_subsurfaces_by_types(surface.subSurfaces, ["Door",
594
- "OverheadDoor"])
585
+ # sum wall area and subsurface area by direction. This is the old way so excluding top and bottom surfaces.
586
+ # new way
587
+ glazings = BTAP::Geometry::Surfaces.filter_subsurfaces_by_types(surface.subSurfaces, ['FixedWindow',
588
+ 'OperableWindow',
589
+ 'GlassDoor',
590
+ 'Skylight',
591
+ 'TubularDaylightDiffuser',
592
+ 'TubularDaylightDome'])
593
+ doors = BTAP::Geometry::Surfaces.filter_subsurfaces_by_types(surface.subSurfaces, ['Door',
594
+ 'OverheadDoor'])
595
595
  azimuth = (surface.azimuth() * 180.0 / Math::PI)
596
596
  tilt = (surface.tilt() * 180.0 / Math::PI)
597
- surface_data = surface_report.detect do |surface_data|
598
- surface_data[:surface_type] == surface.surfaceType &&
599
- surface_data[:azimuth] == azimuth &&
600
- surface_data[:tilt] == tilt &&
601
- surface_data[:boundary_condition] == bc
597
+ surface_data = surface_report.detect do |curr_surface_data|
598
+ curr_surface_data[:surface_type] == surface.surfaceType &&
599
+ curr_surface_data[:azimuth] == azimuth &&
600
+ curr_surface_data[:tilt] == tilt &&
601
+ curr_surface_data[:boundary_condition] == bc
602
602
  end
603
603
 
604
604
  if surface_data.nil?
605
605
  surface_data = {
606
- surface_type: surface.surfaceType,
607
- azimuth: azimuth,
608
- tilt: tilt,
609
- boundary_condition: bc,
610
- surface_area: 0,
611
- surface_area_to_floor_ratio: 0,
612
- glazed_subsurface_area: 0,
613
- glazed_subsurface_area_to_floor_ratio: 0,
614
- opaque_subsurface_area: 0,
615
- opaque_subsurface_area_to_floor_ratio: 0
606
+ surface_type: surface.surfaceType,
607
+ azimuth: azimuth,
608
+ tilt: tilt,
609
+ boundary_condition: bc,
610
+ surface_area: 0,
611
+ surface_area_to_floor_ratio: 0,
612
+ glazed_subsurface_area: 0,
613
+ glazed_subsurface_area_to_floor_ratio: 0,
614
+ opaque_subsurface_area: 0,
615
+ opaque_subsurface_area_to_floor_ratio: 0
616
616
  }
617
617
  surface_report << surface_data
618
618
  end
619
619
  surface_data[:surface_area] += surface.grossArea.to_i
620
620
  surface_data[:surface_area_to_floor_ratio] += surface.grossArea / space.floorArea
621
621
 
622
- surface_data[:glazed_subsurface_area] += glazings.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x}.to_i
623
- surface_data[:glazed_subsurface_area_to_floor_ratio] += glazings.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x} / space.floorArea
622
+ surface_data[:glazed_subsurface_area] += glazings.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x }.to_i
623
+ surface_data[:glazed_subsurface_area_to_floor_ratio] += glazings.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x } / space.floorArea
624
624
 
625
- surface_data[:surface_area] += doors.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x}.to_i
626
- surface_data[:surface_area_to_floor_ratio] += doors.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x} / space.floorArea
625
+ surface_data[:surface_area] += doors.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x }.to_i
626
+ surface_data[:surface_area_to_floor_ratio] += doors.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x } / space.floorArea
627
627
  end
628
628
  end
629
- surface_report.sort! {|a, b| [a[:surface_type], a[:azimuth], a[:tilt], a[:boundary_condition]] <=> [b[:surface_type], b[:azimuth], b[:tilt], b[:boundary_condition]]}
629
+ surface_report.sort! { |a, b| [a[:surface_type], a[:azimuth], a[:tilt], a[:boundary_condition]] <=> [b[:surface_type], b[:azimuth], b[:tilt], b[:boundary_condition]] }
630
630
 
631
631
  return surface_report
632
632
  end
633
633
 
634
- #Check to see if this is a wildcard space that the NECB does not have a specified schedule or system for.
634
+ # Check to see if this is a wildcard space that the NECB does not have a specified schedule or system for.
635
635
  def is_an_necb_wildcard_space?(space)
636
636
  space_type_table = @standards_data['space_types']
637
637
  space_type_data = model_find_object(space_type_table,
638
- {'template' => self.class.name,
639
- 'space_type' => space.spaceType.get.standardsSpaceType.get,
640
- 'building_type' => space.spaceType.get.standardsBuildingType.get})
641
- raise("#{space}") if space_type_data.nil?
642
- return space_type_data["necb_hvac_system_selection_type"] == "Wildcard"
638
+ 'template' => self.class.name,
639
+ 'space_type' => space.spaceType.get.standardsSpaceType.get,
640
+ 'building_type' => space.spaceType.get.standardsBuildingType.get)
641
+ raise(space.to_s) if space_type_data.nil?
642
+
643
+ return space_type_data['necb_hvac_system_selection_type'] == 'Wildcard'
643
644
  end
644
645
 
645
646
  # Check to see if this is a wet space that the NECB does not have a specified schedule or system for. Currently hardcoded to
646
647
  # Locker room and washroom.
647
648
  def is_an_necb_wet_space?(space)
648
- #Hack! Should replace this with a proper table lookup.
649
+ # Hack! Should replace this with a proper table lookup.
649
650
  return space.spaceType.get.standardsSpaceType.get.include?('Locker room') || space.spaceType.get.standardsSpaceType.get.include?('Washroom')
650
651
  end
651
652
 
652
653
  # Check to see if this is a wet space that the NECB does not have a specified schedule or system for. Currently hardcoded to
653
654
  # Locker room and washroom.
654
655
  def is_an_necb_storage_space?(space)
655
- #Hack! Should replace this with a proper table lookup.
656
+ # Hack! Should replace this with a proper table lookup.
656
657
  return space.spaceType.get.standardsSpaceType.get.include?('Storage')
657
658
  end
658
659
 
659
-
660
660
  # Check if the space spactype is a dwelling unit as per NECB.
661
661
  def is_a_necb_dwelling_unit?(space)
662
662
  space_type_table = @standards_data['space_types']
663
663
  space_type_data = model_find_object(space_type_table,
664
- {'template' => self.class.name,
665
- 'space_type' => space.spaceType.get.standardsSpaceType.get,
666
- 'building_type' => space.spaceType.get.standardsBuildingType.get})
664
+ 'template' => self.class.name,
665
+ 'space_type' => space.spaceType.get.standardsSpaceType.get,
666
+ 'building_type' => space.spaceType.get.standardsBuildingType.get)
667
667
 
668
668
  necb_hvac_system_selection_table = @standards_data['necb_hvac_system_selection_type']
669
- necb_hvac_system_select = necb_hvac_system_selection_table.detect do |necb_hvac_system_select|
670
- necb_hvac_system_select['necb_hvac_system_selection_type'] == space_type_data['necb_hvac_system_selection_type'] &&
671
- necb_hvac_system_select['min_stories'] <= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
672
- necb_hvac_system_select['max_stories'] >= space.model.getBuilding.standardsNumberOfAboveGroundStories.get
669
+ necb_hvac_system_select = necb_hvac_system_selection_table.detect do |curr_necb_hvac_system_select|
670
+ curr_necb_hvac_system_select['necb_hvac_system_selection_type'] == space_type_data['necb_hvac_system_selection_type'] &&
671
+ curr_necb_hvac_system_select['min_stories'] <= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
672
+ curr_necb_hvac_system_select['max_stories'] >= space.model.getBuilding.standardsNumberOfAboveGroundStories.get
673
673
  end
674
674
  return necb_hvac_system_select['dwelling'] == true
675
675
  end
@@ -677,21 +677,24 @@ class NECB2011
677
677
  # Determines what system index number is required for the space's spacetype by NECB rules.
678
678
  def get_necb_spacetype_system_selection(space)
679
679
  space_type_table = @standards_data['space_types']
680
- space_type_data = model_find_object(space_type_table, {'space_type' => space.spaceType.get.standardsSpaceType.get,
681
- 'building_type' => space.spaceType.get.standardsBuildingType.get})
682
- raise("Could not find space_type_data for #{{'space_type' => space.spaceType.get.standardsSpaceType.get,
683
- 'building_type' => space.spaceType.get.standardsBuildingType.get}} ")if space_type_data.nil?
680
+ space_type_data = model_find_object(space_type_table, 'space_type' => space.spaceType.get.standardsSpaceType.get,
681
+ 'building_type' => space.spaceType.get.standardsBuildingType.get)
682
+ if space_type_data.nil?
683
+ raise("Could not find space_type_data for #{{ 'space_type' => space.spaceType.get.standardsSpaceType.get,
684
+ 'building_type' => space.spaceType.get.standardsBuildingType.get }} ")
685
+ end
684
686
 
685
687
  # identify space-system_index and assign the right NECB system type 1-7.
686
688
  necb_hvac_system_selection_table = @standards_data['necb_hvac_system_selection_type']
687
- necb_hvac_system_select = necb_hvac_system_selection_table.detect do |necb_hvac_system_select|
688
- necb_hvac_system_select['necb_hvac_system_selection_type'] == space_type_data['necb_hvac_system_selection_type'] &&
689
- necb_hvac_system_select['min_stories'] <= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
690
- necb_hvac_system_select['max_stories'] >= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
691
- necb_hvac_system_select['min_cooling_capacity_kw'] <= self.stored_space_cooling_load(space) &&
692
- necb_hvac_system_select['max_cooling_capacity_kw'] >= self.stored_space_cooling_load(space)
689
+ necb_hvac_system_select = necb_hvac_system_selection_table.detect do |curr_necb_hvac_system_select|
690
+ curr_necb_hvac_system_select['necb_hvac_system_selection_type'] == space_type_data['necb_hvac_system_selection_type'] &&
691
+ curr_necb_hvac_system_select['min_stories'] <= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
692
+ curr_necb_hvac_system_select['max_stories'] >= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
693
+ curr_necb_hvac_system_select['min_cooling_capacity_kw'] <= stored_space_cooling_load(space) &&
694
+ curr_necb_hvac_system_select['max_cooling_capacity_kw'] >= stored_space_cooling_load(space)
693
695
  end
694
- raise("could not find system for given spacetype") if necb_hvac_system_select.nil?
696
+ raise('could not find system for given spacetype') if necb_hvac_system_select.nil?
697
+
695
698
  return necb_hvac_system_select['system_type']
696
699
  end
697
700
 
@@ -703,20 +706,22 @@ class NECB2011
703
706
  end
704
707
  systems.uniq!
705
708
  systems.compact!
706
- raise("This thermal zone spaces require different systems.") if systems.size > 1
709
+ raise('This thermal zone spaces require different systems.') if systems.size > 1
710
+
707
711
  return systems.first
708
712
  end
709
713
 
710
714
  # Math fundtion to determine percent difference.
711
715
  def percentage_difference(value_1, value_2)
712
716
  return 0.0 if value_1 == value_2
717
+
713
718
  return ((value_1 - value_2).abs / ((value_1 + value_2) / 2) * 100)
714
719
  end
715
720
 
716
721
  # Set wildcard spactype schedule to NECB letter index.
717
722
  def adjust_wildcard_spacetype_schedule(space:, schedule:, lights_type: 'NECB_Default', lights_scale: 1.0)
718
723
  if space.spaceType.empty?
719
- OpenStudio.logFree(OpenStudio::Error, 'Error: No spacetype assigned for #{space.name.get}. This must be assigned. Aborting.')
724
+ OpenStudio.logFree(OpenStudio::Error, "Error: No spacetype assigned for #{space.name.get}. This must be assigned. Aborting.")
720
725
  end
721
726
  # Get current spacetype name
722
727
  space_type_name = space.spaceType.get.standardsSpaceType.get.to_s
@@ -725,13 +730,13 @@ class NECB2011
725
730
  new_spacetype_name = "#{space_type_name.match(regex).captures.first}#{schedule}"
726
731
  new_spacetype = nil
727
732
 
728
- #if the new spacetype does not match the old space type. we gotta update the space with the new spacetype.
733
+ # if the new spacetype does not match the old space type. we gotta update the space with the new spacetype.
729
734
  if space_type_name != new_spacetype_name
730
735
  new_spacetype = space.model.getSpaceTypes.detect do |spacetype|
731
- (not spacetype.standardsBuildingType.empty?) and #need to do this to prevent an exception.
732
- spacetype.standardsBuildingType.get == space.spaceType.get.standardsBuildingType.get and
733
- (not spacetype.standardsSpaceType.empty?) and #need to do this to prevent an exception.
734
- spacetype.standardsSpaceType.get == new_spacetype_name
736
+ !spacetype.standardsBuildingType.empty? && # need to do this to prevent an exception.
737
+ (spacetype.standardsBuildingType.get == space.spaceType.get.standardsBuildingType.get) &&
738
+ !spacetype.standardsSpaceType.empty? && # need to do this to prevent an exception.
739
+ (spacetype.standardsSpaceType.get == new_spacetype_name)
735
740
  end
736
741
  if new_spacetype.nil?
737
742
  # Space type is not in model. need to create from scratch.
@@ -743,14 +748,14 @@ class NECB2011
743
748
  space_type_apply_internal_load_schedules(new_spacetype, true, true, true, true, true, true, true)
744
749
  end
745
750
  space.setSpaceType(new_spacetype)
746
- #sanity check.
747
- raise ("could not reassign space type schedule.") if schedule != space.spaceType.get.name.get.match(regex)[2]
751
+ # sanity check.
752
+ raise 'could not reassign space type schedule.' if schedule != space.spaceType.get.name.get.match(regex)[2]
748
753
  end
749
754
  return space
750
755
  end
751
756
 
752
757
  def set_wildcard_schedules_to_dominant_building_schedule(model, runner = nil)
753
- #Get rid of.
758
+ # Get rid of.
754
759
  end
755
760
 
756
761
  def determine_dominant_schedule(spaces)
@@ -780,15 +785,14 @@ class NECB2011
780
785
  'Q', 0
781
786
  ]
782
787
  # iterate through spaces in building.
783
- spaces.select {|space| not is_an_necb_wildcard_space?(space) and not space.spaceType.get.standardsSpaceType.get == '- undefined -'}.each do |space|
784
-
788
+ spaces.select { |space| !is_an_necb_wildcard_space?(space) && (space.spaceType.get.standardsSpaceType.get != '- undefined -') }.each do |space|
785
789
  # Ensure space floors are multiplied.
786
790
  mult = @space_multiplier_map[space.name.to_s].nil? ? 1.0 : @space_multiplier_map[space.name.to_s]
787
791
  # puts "this #{determine_necb_schedule_type(space)}"
788
792
  schedule_hash[determine_necb_schedule_type(space)] += space.floorArea * mult
789
793
  end
790
794
  # finds max value and returns NECB schedule letter.
791
- #determine dominant letter schedule.
795
+ # determine dominant letter schedule.
792
796
  return schedule_hash.max_by(&:last).first
793
797
  end
794
798
 
@@ -807,7 +811,8 @@ class NECB2011
807
811
  spacetype_data = @standards_data['space_types']
808
812
  raise "Spacetype not defined for space #{space.get.name}) if space.spaceType.empty?" if space.spaceType.empty?
809
813
  raise "Undefined standardsSpaceType or StandardsBuildingType for space #{space.spaceType.get.name}) if space.spaceType.empty?" if space.spaceType.get.standardsSpaceType.empty? | space.spaceType.get.standardsBuildingType.empty?
810
- space_type_properties = spacetype_data.detect {|st| (st['space_type'] == space.spaceType.get.standardsSpaceType.get) && (st['building_type'] == space.spaceType.get.standardsBuildingType.get)}
814
+
815
+ space_type_properties = spacetype_data.detect { |st| (st['space_type'] == space.spaceType.get.standardsSpaceType.get) && (st['building_type'] == space.spaceType.get.standardsBuildingType.get) }
811
816
  return space_type_properties['necb_schedule_type'].strip
812
817
  end
813
818
 
@@ -815,34 +820,35 @@ class NECB2011
815
820
 
816
821
  # Method will create a hot water loop if systems default fuel and medium sources require it.
817
822
  def create_hw_loop_if_required(baseboard_type, boiler_fueltype, mau_heating_coil_type, model)
818
- #get systems that will be used in the model based on the space types to determine if a hw_loop is required.
823
+ # get systems that will be used in the model based on the space types to determine if a hw_loop is required.
819
824
  systems_used = []
820
825
  model.getSpaces.sort.each do |space|
821
826
  systems_used << get_necb_spacetype_system_selection(space)
822
827
  systems_used.uniq!
823
828
  end
824
829
 
825
- #See if we need to create a hot water loop based on fueltype and systems used.
830
+ # See if we need to create a hot water loop based on fueltype and systems used.
826
831
  hw_loop_needed = false
827
832
  systems_used.each do |system|
828
833
  case system.to_s
829
834
  when '2', '5', '7'
830
835
  hw_loop_needed = true
831
836
  when '1', '6'
832
- if mau_heating_coil_type == 'Hot Water' or baseboard_type == 'Hot Water'
837
+ if (mau_heating_coil_type == 'Hot Water') || (baseboard_type == 'Hot Water')
833
838
  hw_loop_needed = true
834
839
  end
835
840
  when '3', '4'
836
- if mau_heating_coil_type == 'Hot Water' or baseboard_type == 'Hot Water'
837
- hw_loop_needed = true if (baseboard_type == 'Hot Water')
841
+ if (mau_heating_coil_type == 'Hot Water') || (baseboard_type == 'Hot Water')
842
+ hw_loop_needed = true if baseboard_type == 'Hot Water'
838
843
  end
839
844
  end
840
845
  if hw_loop_needed
841
846
  # just need one true condition to need a boiler.
842
847
  break
843
848
  end
844
- end # each
845
- #create hw_loop as needed.. Assuming one loop per model.
849
+ # each
850
+ end
851
+ # create hw_loop as needed.. Assuming one loop per model.
846
852
  if hw_loop_needed
847
853
  @hw_loop = OpenStudio::Model::PlantLoop.new(model)
848
854
  always_on = model.alwaysOnDiscreteSchedule
@@ -874,16 +880,16 @@ class NECB2011
874
880
  system_zones_hash[get_necb_thermal_zone_system_selection(zone)] = [] if system_zones_hash[get_necb_thermal_zone_system_selection(zone)].nil?
875
881
  system_zones_hash[get_necb_thermal_zone_system_selection(zone)] << zone
876
882
  end
877
- #puts JSON.pretty_generate(system_zones_hash)
883
+ # puts JSON.pretty_generate(system_zones_hash)
878
884
  # go through each system and zones pairs to
879
- system_zones_hash.each_pair do |system, zones|
885
+ system_zones_hash.each_pair do |system, sys_zones|
880
886
  case system
881
887
  when 0, nil
882
888
  # Do nothing no system assigned to zone. Used for Unconditioned spaces
883
889
  when 1
884
- group_similar_zones_together(zones).each do |zones|
890
+ group_similar_zones_together(sys_zones).each do |curr_zones|
885
891
  mau_air_loop = add_sys1_unitary_ac_baseboard_heating(model: model,
886
- zones: zones,
892
+ zones: curr_zones,
887
893
  mau_type: mau_type,
888
894
  mau_heating_coil_type: mau_heating_coil_type,
889
895
  baseboard_type: baseboard_type,
@@ -891,41 +897,41 @@ class NECB2011
891
897
  multispeed: false)
892
898
  end
893
899
  when 2
894
- group_similar_zones_together(zones).each do |zones|
900
+ group_similar_zones_together(sys_zones).each do |curr_zones|
895
901
  add_sys2_FPFC_sys5_TPFC(model: model,
896
- zones: zones,
902
+ zones: curr_zones,
897
903
  chiller_type: chiller_type,
898
904
  mau_cooling_type: mau_cooling_type,
899
905
  fan_coil_type: 'FPFC',
900
906
  hw_loop: @hw_loop)
901
907
  end
902
908
  when 3
903
- group_similar_zones_together(zones).each do |zones|
909
+ group_similar_zones_together(sys_zones).each do |curr_zones|
904
910
  add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
905
- zones: zones,
911
+ zones: curr_zones,
906
912
  heating_coil_type: heating_coil_type_sys3,
907
913
  baseboard_type: baseboard_type,
908
914
  hw_loop: @hw_loop,
909
915
  multispeed: false)
910
916
  end
911
917
  when 4
912
- group_similar_zones_together(zones).each do |zones|
918
+ group_similar_zones_together(sys_zones).each do |curr_zones|
913
919
  add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
914
- zones: zones,
920
+ zones: curr_zones,
915
921
  heating_coil_type: heating_coil_type_sys4,
916
922
  baseboard_type: baseboard_type,
917
923
  hw_loop: @hw_loop)
918
- # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
919
- # zones: zones,
920
- # heating_coil_type: heating_coil_type_sys4,
921
- # baseboard_type: baseboard_type,
922
- # hw_loop: @hw_loop,
923
- # multispeed: false)
924
+ # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
925
+ # zones: zones,
926
+ # heating_coil_type: heating_coil_type_sys4,
927
+ # baseboard_type: baseboard_type,
928
+ # hw_loop: @hw_loop,
929
+ # multispeed: false)
924
930
  end
925
931
  when 5
926
- group_similar_zones_together(zones).each do |zones|
932
+ group_similar_zones_together(sys_zones).each do |curr_zones|
927
933
  add_sys2_FPFC_sys5_TPFC(model: model,
928
- zones: zones,
934
+ zones: curr_zones,
929
935
  chiller_type: chiller_type,
930
936
  mau_cooling_type: mau_cooling_type,
931
937
  fan_coil_type: 'TPFC',
@@ -933,7 +939,7 @@ class NECB2011
933
939
  end
934
940
  when 6
935
941
  add_sys6_multi_zone_built_up_system_with_baseboard_heating(model: model,
936
- zones: zones,
942
+ zones: sys_zones,
937
943
  heating_coil_type: heating_coil_type_sys6,
938
944
  baseboard_type: baseboard_type,
939
945
  chiller_type: chiller_type,
@@ -941,9 +947,9 @@ class NECB2011
941
947
  hw_loop: @hw_loop)
942
948
 
943
949
  when 7
944
- group_similar_zones_together(zones).each do |zones|
950
+ group_similar_zones_together(sys_zones).each do |curr_zones|
945
951
  add_sys2_FPFC_sys5_TPFC(model: model,
946
- zones: zones,
952
+ zones: curr_zones,
947
953
  chiller_type: chiller_type,
948
954
  fan_coil_type: 'FPFC',
949
955
  mau_cooling_type: mau_cooling_type,
@@ -965,21 +971,20 @@ class NECB2011
965
971
  mau_cooling_type:,
966
972
  mau_heating_coil_type:,
967
973
  mau_type:,
968
- model:
969
- )
974
+ model:)
970
975
 
971
976
  zones = []
972
977
  other_spaces = model.getSpaces.select do |space|
973
- (not is_a_necb_dwelling_unit?(space)) and
974
- (not is_an_necb_wildcard_space?(space)) and
975
- (not is_an_necb_storage_space?(space))
978
+ !is_a_necb_dwelling_unit?(space) &&
979
+ !is_an_necb_wildcard_space?(space) &&
980
+ !is_an_necb_storage_space?(space)
976
981
  end
977
982
  other_spaces.each do |space|
978
983
  zones << space.thermalZone.get
979
984
  end
980
985
  zones.uniq!
981
986
 
982
- #since dwelling units are all zoned 1:1 to space:zone we simply add the zone to the appropriate btap system.
987
+ # since dwelling units are all zoned 1:1 to space:zone we simply add the zone to the appropriate btap system.
983
988
  create_necb_system(baseboard_type: baseboard_type,
984
989
  boiler_fueltype: boiler_fueltype,
985
990
  chiller_type: chiller_type,
@@ -1009,40 +1014,39 @@ class NECB2011
1009
1014
  mau_cooling_type:,
1010
1015
  mau_heating_coil_type:,
1011
1016
  mau_type:,
1012
- model:
1013
- )
1017
+ model:)
1014
1018
 
1015
1019
  system_zones_hash = {}
1016
1020
  # Detemine if dwelling units have a shared AHU. If user entered building stories > 4 then set to true.
1017
1021
  dwelling_shared_ahu = model.getBuilding.standardsNumberOfAboveGroundStories.get > 4
1018
1022
  # store dwelling zones into array
1019
1023
  zones = []
1020
- model.getSpaces.select {|space| is_a_necb_dwelling_unit?(space)}.each do |space|
1024
+ model.getSpaces.select { |space| is_a_necb_dwelling_unit?(space) }.each do |space|
1021
1025
  zones << space.thermalZone.get
1022
1026
  end
1023
1027
  zones.uniq!
1024
1028
 
1025
- #sort system 1 or 3 used for each dwelling unit as per T8.4.4.8.A NECB 2011-17
1029
+ # sort system 1 or 3 used for each dwelling unit as per T8.4.4.8.A NECB 2011-17
1026
1030
  zones.each do |zone|
1027
1031
  system_zones_hash[get_necb_thermal_zone_system_selection(zone)] = [] if system_zones_hash[get_necb_thermal_zone_system_selection(zone)].nil?
1028
1032
  system_zones_hash[get_necb_thermal_zone_system_selection(zone)] << zone
1029
1033
  end
1030
1034
 
1031
1035
  # go through each system and zones pairs to
1032
- system_zones_hash.each_pair do |system, zones|
1036
+ system_zones_hash.each_pair do |system, sys_zones|
1033
1037
  case system
1034
1038
  when 1
1035
1039
  if dwelling_shared_ahu
1036
1040
  add_sys1_unitary_ac_baseboard_heating(model: model,
1037
- zones: zones,
1041
+ zones: sys_zones,
1038
1042
  mau_type: mau_type,
1039
1043
  mau_heating_coil_type: mau_heating_coil_type,
1040
1044
  baseboard_type: baseboard_type,
1041
1045
  hw_loop: @hw_loop,
1042
1046
  multispeed: false)
1043
1047
  else
1044
- #Create a separate air loop for each unit.
1045
- zones.each do |zone|
1048
+ # Create a separate air loop for each unit.
1049
+ sys_zones.each do |zone|
1046
1050
  add_sys1_unitary_ac_baseboard_heating(model: model,
1047
1051
  zones: [zone],
1048
1052
  mau_type: mau_type,
@@ -1050,21 +1054,20 @@ class NECB2011
1050
1054
  baseboard_type: baseboard_type,
1051
1055
  hw_loop: @hw_loop,
1052
1056
  multispeed: false)
1053
-
1054
1057
  end
1055
1058
  end
1056
1059
 
1057
1060
  when 3
1058
1061
  if dwelling_shared_ahu
1059
1062
  add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1060
- zones: zones,
1063
+ zones: sys_zones,
1061
1064
  heating_coil_type: heating_coil_type_sys3,
1062
1065
  baseboard_type: baseboard_type,
1063
1066
  hw_loop: @hw_loop,
1064
1067
  multispeed: false)
1065
1068
  else
1066
- #Create a separate air loop for each unit.
1067
- zones.each do |zone|
1069
+ # Create a separate air loop for each unit.
1070
+ sys_zones.each do |zone|
1068
1071
  add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1069
1072
  zones: [zone],
1070
1073
  heating_coil_type: heating_coil_type_sys3,
@@ -1082,94 +1085,87 @@ class NECB2011
1082
1085
  boiler_fueltype:,
1083
1086
  heating_coil_type_sys4:,
1084
1087
  model:)
1085
- #Determine what zones are wet zones.
1088
+ # Determine what zones are wet zones.
1086
1089
  wet_tz = []
1087
- model.getSpaces.select {|space|
1088
- is_an_necb_wet_space?(space)}.each do |space|
1089
- wet_tz << space.thermalZone.get
1090
- end
1090
+ wet_spaces = model.getSpaces.select { |space| is_an_necb_wet_space?(space) }
1091
+ wet_spaces.each { |space| wet_tz << space.thermalZone.get }
1091
1092
  wet_tz.uniq!
1092
- #create a system 4 for the wet zones.
1093
- unless wet_tz.empty?
1094
- add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
1095
- zones: wet_tz,
1096
- heating_coil_type: heating_coil_type_sys4,
1097
- baseboard_type: baseboard_type,
1098
- hw_loop: @hw_loop)
1099
- # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1100
- # zones: wet_tz,
1101
- # heating_coil_type: heating_coil_type_sys4,
1102
- # baseboard_type: baseboard_type,
1103
- # hw_loop: @hw_loop,
1104
- # multispeed: false)
1105
- end
1093
+ # create a system 4 for the wet zones.
1094
+ return if wet_tz.empty?
1095
+
1096
+ add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
1097
+ zones: wet_tz,
1098
+ heating_coil_type: heating_coil_type_sys4,
1099
+ baseboard_type: baseboard_type,
1100
+ hw_loop: @hw_loop)
1101
+ # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1102
+ # zones: wet_tz,
1103
+ # heating_coil_type: heating_coil_type_sys4,
1104
+ # baseboard_type: baseboard_type,
1105
+ # hw_loop: @hw_loop,
1106
+ # multispeed: false)
1106
1107
  end
1107
1108
 
1108
-
1109
1109
  # All wet spaces will be on their own system 4 AHU.
1110
1110
  def auto_system_storage_spaces(baseboard_type:,
1111
1111
  boiler_fueltype:,
1112
1112
  heating_coil_type_sys4:,
1113
1113
  model:)
1114
- #Determine what zones are wet zones.
1114
+ # Determine what zones are storage zones.
1115
1115
  tz = []
1116
- model.getSpaces.select {|space|
1117
- is_an_necb_storage_space?(space)}.each do |space|
1118
- tz << space.thermalZone.get
1119
- end
1116
+ storage_spaces = model.getSpaces.select { |space| is_an_necb_storage_space?(space) }
1117
+ storage_spaces.each { |space| tz << space.thermalZone.get }
1120
1118
  tz.uniq!
1121
- #create a system 4 for the zones.
1122
- unless tz.empty?
1123
- add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
1124
- zones: tz,
1125
- heating_coil_type: heating_coil_type_sys4,
1126
- baseboard_type: baseboard_type,
1127
- hw_loop: @hw_loop)
1128
- # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1129
- # zones: tz,
1130
- # heating_coil_type: heating_coil_type_sys4,
1131
- # baseboard_type: baseboard_type,
1132
- # hw_loop: @hw_loop,
1133
- # multispeed: true)
1134
- end
1135
- end
1136
1119
 
1120
+ return if tz.empty?
1121
+
1122
+ # create a system 4 for the zones.
1123
+ add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
1124
+ zones: tz,
1125
+ heating_coil_type: heating_coil_type_sys4,
1126
+ baseboard_type: baseboard_type,
1127
+ hw_loop: @hw_loop)
1128
+ # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1129
+ # zones: tz,
1130
+ # heating_coil_type: heating_coil_type_sys4,
1131
+ # baseboard_type: baseboard_type,
1132
+ # hw_loop: @hw_loop,
1133
+ # multispeed: true)
1134
+ end
1137
1135
 
1138
1136
  # All wild spaces will be on a single system 4 ahu with the largests heating load zone being the control zone.
1139
1137
  def auto_system_wild_spaces(baseboard_type:,
1140
1138
  heating_coil_type_sys4:,
1141
- model:
1142
- )
1139
+ model:)
1143
1140
 
1144
1141
  zones = []
1145
- model.getSpaces.select {|space|
1146
- not is_an_necb_wet_space?(space) and is_an_necb_wildcard_space?(space)}.each do |space|
1147
- zones << space.thermalZone.get
1148
- end
1142
+ wild_spaces = model.getSpaces.select { |space| !is_an_necb_wet_space?(space) && is_an_necb_wildcard_space?(space) }
1143
+ wild_spaces.each { |space| zones << space.thermalZone.get }
1149
1144
  zones.uniq!
1150
- unless zones.empty?
1151
- #create a system 4 for the wild zones.
1152
- add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
1153
- zones: zones,
1154
- heating_coil_type: heating_coil_type_sys4,
1155
- baseboard_type: baseboard_type,
1156
- hw_loop: @hw_loop)
1157
- # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1158
- # zones: zones,
1159
- # heating_coil_type: heating_coil_type_sys4,
1160
- # baseboard_type: baseboard_type,
1161
- # hw_loop: @hw_loop,
1162
- # multispeed: true)
1163
- end
1145
+
1146
+ return if zones.empty?
1147
+
1148
+ # create a system 4 for the wild zones.
1149
+ add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
1150
+ zones: zones,
1151
+ heating_coil_type: heating_coil_type_sys4,
1152
+ baseboard_type: baseboard_type,
1153
+ hw_loop: @hw_loop)
1154
+ # add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
1155
+ # zones: zones,
1156
+ # heating_coil_type: heating_coil_type_sys4,
1157
+ # baseboard_type: baseboard_type,
1158
+ # hw_loop: @hw_loop,
1159
+ # multispeed: true)
1164
1160
  end
1165
1161
 
1166
- #This method will determine the control zone from the last sizing run space loads.
1162
+ # This method will determine the control zone from the last sizing run space loads.
1167
1163
  def determine_control_zone(zones)
1168
1164
  # In this case the control zone is the load with the largest heating loads. This may cause overheating of some zones.
1169
1165
  # but this is preferred to unmet heating.
1170
- #Iterate through zones.
1166
+ # Iterate through zones.
1171
1167
  zone_heating_load_hash = {}
1172
- zones.each {|zone| zone_heating_load_hash[zone] = self.stored_zone_heating_load(zone)}
1168
+ zones.each { |zone| zone_heating_load_hash[zone] = stored_zone_heating_load(zone) }
1173
1169
  return zone_heating_load_hash.max_by(&:last).first
1174
1170
  end
1175
1171
 
@@ -1182,6 +1178,7 @@ class NECB2011
1182
1178
  zones.each do |zone|
1183
1179
  similar_array_of_zones = []
1184
1180
  next if accounted_for.include?(zone.name.to_s)
1181
+
1185
1182
  similar_array_of_zones << zone
1186
1183
  accounted_for << zone.name.to_s
1187
1184
  zones.each do |zone_target|
@@ -1196,17 +1193,18 @@ class NECB2011
1196
1193
  array_of_array_of_zones << similar_array_of_zones
1197
1194
  end
1198
1195
  total_zones_output = 0
1199
- array_of_array_of_zones.each do |zones|
1200
- total_zones_output += zones.size
1196
+ array_of_array_of_zones.each do |curr_zones|
1197
+ total_zones_output += curr_zones.size
1201
1198
  end
1202
- #puts total_zones_output
1203
- #puts accounted_for.sort
1204
- #sanity check.
1199
+ # puts total_zones_output
1200
+ # puts accounted_for.sort
1201
+ # sanity check.
1205
1202
  if total_zones_output != total_zones_input
1206
- #puts JSON.pretty_generate(array_of_array_of_zones)
1207
- #puts JSON.pretty_generate(accounted_for.sort)
1208
- raise("#{}")
1203
+ # puts JSON.pretty_generate(array_of_array_of_zones)
1204
+ # puts JSON.pretty_generate(accounted_for.sort)
1205
+ raise('')
1209
1206
  end
1207
+
1210
1208
  return array_of_array_of_zones
1211
1209
  end
1212
1210