openstudio-standards 0.2.12 → 0.2.13.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (492) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAE90120162019HighriseApartment.json +1042 -0
  3. data/data/geometry/ASHRAE90120162019Hospital.json +199 -0
  4. data/data/geometry/ASHRAE90120162019LargeHotel.json +73 -0
  5. data/data/geometry/ASHRAE90120162019LargeOffice.json +109 -0
  6. data/data/geometry/ASHRAE90120162019SecondarySchool.json +205 -0
  7. data/data/geometry/ASHRAECourthouse.json +112 -0
  8. data/data/geometry/ASHRAECourthouse.osm +26470 -0
  9. data/data/geometry/ASHRAELargeHotel.osm +11 -1
  10. data/data/geometry/ASHRAELargeOffice.json +4 -0
  11. data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
  12. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  13. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  14. data/data/standards/exclude_list.csv +19 -0
  15. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +49 -0
  16. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +293 -0
  17. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +25426 -0
  18. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +1600 -0
  19. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +564 -0
  20. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +349 -0
  21. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +164 -0
  22. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +10663 -0
  23. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +508 -0
  24. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +156 -0
  25. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +44 -0
  26. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +184 -0
  27. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3094 -0
  28. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +829 -0
  29. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +562 -0
  30. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +52 -0
  31. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +220 -0
  32. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +156 -0
  33. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +1316 -0
  34. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +21446 -0
  35. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +554 -0
  36. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +68 -0
  37. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +28 -0
  38. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +12 -0
  39. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +49 -0
  40. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +293 -0
  41. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +12487 -0
  42. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +1600 -0
  43. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +564 -0
  44. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +349 -0
  45. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +164 -0
  46. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +10663 -0
  47. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +466 -0
  48. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +137 -0
  49. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +44 -0
  50. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +184 -0
  51. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3094 -0
  52. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +829 -0
  53. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +562 -0
  54. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +52 -0
  55. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +220 -0
  56. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +156 -0
  57. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +1316 -0
  58. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +21380 -0
  59. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +554 -0
  60. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +68 -0
  61. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +28 -0
  62. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +12 -0
  63. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +49 -0
  64. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +395 -0
  65. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +12487 -0
  66. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +1600 -0
  67. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +592 -0
  68. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +349 -0
  69. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +550 -0
  70. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +164 -0
  71. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +10663 -0
  72. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +466 -0
  73. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +137 -0
  74. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +44 -0
  75. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +238 -0
  76. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +3094 -0
  77. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +829 -0
  78. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +562 -0
  79. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +52 -0
  80. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +220 -0
  81. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +156 -0
  82. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +1316 -0
  83. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +21548 -0
  84. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +554 -0
  85. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +68 -0
  86. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +28 -0
  87. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +12 -0
  88. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +64 -0
  89. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +871 -0
  90. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +12487 -0
  91. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +1600 -0
  92. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +592 -0
  93. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +349 -0
  94. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +1096 -0
  95. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +164 -0
  96. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +10663 -0
  97. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +886 -0
  98. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +194 -0
  99. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +44 -0
  100. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +247 -0
  101. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +3094 -0
  102. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +829 -0
  103. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +562 -0
  104. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +52 -0
  105. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +220 -0
  106. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +156 -0
  107. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +1316 -0
  108. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +22079 -0
  109. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +994 -0
  110. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +68 -0
  111. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +28 -0
  112. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +12 -0
  113. data/data/standards/manage_OpenStudio_Standards.rb +87 -37
  114. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1-ALL-comstockspace_types.csv +236 -0
  115. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +622 -0
  116. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1space_types.csv +191 -0
  117. data/data/standards/openstudio_standards_duplicates_log.csv +16 -25
  118. data/data/standards/test_performance_expected_dd_results.csv +1934 -1134
  119. data/lib/openstudio-standards.rb +68 -17
  120. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +28 -0
  121. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +0 -1
  122. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +28 -0
  123. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +53 -2
  124. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +29 -0
  125. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +157 -2
  126. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +29 -0
  127. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +24 -0
  128. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +32 -0
  129. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +33 -0
  130. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +32 -0
  131. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +25 -0
  132. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +366 -0
  133. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +144 -0
  134. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +11 -0
  135. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +24 -0
  136. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +32 -0
  137. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +33 -0
  138. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +32 -0
  139. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +25 -0
  140. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +367 -0
  141. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +144 -0
  142. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +11 -0
  143. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +0 -1
  144. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +0 -1
  145. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
  146. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
  147. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
  148. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
  149. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +3 -3
  150. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +74 -0
  151. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +46 -30
  152. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +15 -7
  153. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +26 -15
  154. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +8 -11
  155. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +54 -60
  156. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +56 -60
  157. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +38 -12
  158. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +218 -134
  159. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +6 -2
  160. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +222 -133
  161. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +60 -62
  162. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +25 -15
  163. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +34 -22
  164. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +31 -7
  165. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +43 -28
  166. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +48 -38
  167. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +9 -5
  168. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +567 -344
  169. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +13 -19
  170. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +13 -17
  171. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +9 -5
  172. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +79 -51
  173. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +60 -60
  174. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +2 -4
  175. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +133 -120
  176. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +124 -112
  177. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +138 -66
  178. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +7275 -199
  179. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +35 -35
  180. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -2
  181. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -2
  182. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +3 -3
  183. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +1 -1
  184. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +2 -2
  185. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +2 -2
  186. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +1 -1
  187. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +2 -2
  188. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +2 -2
  189. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -2
  190. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +1 -1
  191. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +4 -3
  192. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +7 -8
  193. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +7 -8
  194. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +13 -14
  195. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +7 -5
  196. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +2 -0
  197. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +0 -1
  198. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +25 -14
  199. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +474 -89
  200. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +35 -33
  201. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +3 -0
  202. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +72 -0
  203. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +120 -120
  204. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +103 -125
  205. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +9 -3
  206. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +11 -5
  207. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +26 -14
  208. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +270 -247
  209. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  210. data/lib/openstudio-standards/refs/references.rb +5 -2
  211. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +41 -28
  212. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -1
  213. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +0 -1
  214. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -0
  215. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +2 -4
  216. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +8 -10
  217. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +4 -5
  218. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +0 -1
  219. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  220. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +12 -9
  221. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -1
  222. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +3 -1
  223. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +0 -3
  224. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +4 -7
  225. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -3
  226. data/lib/openstudio-standards/standards/Standards.Construction.rb +124 -118
  227. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +0 -1
  228. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +0 -1
  229. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +0 -1
  230. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +0 -1
  231. data/lib/openstudio-standards/standards/Standards.Fan.rb +0 -1
  232. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -1
  233. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -1
  234. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +2 -4
  235. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -1
  236. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +10 -3
  237. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -1
  238. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -1
  239. data/lib/openstudio-standards/standards/Standards.Model.rb +282 -253
  240. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -0
  241. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -9
  242. data/lib/openstudio-standards/standards/Standards.Pump.rb +0 -1
  243. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -1
  244. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +0 -1
  245. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +0 -1
  246. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +0 -1
  247. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +103 -121
  248. data/lib/openstudio-standards/standards/Standards.Space.rb +42 -35
  249. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +9 -17
  250. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +25 -27
  251. data/lib/openstudio-standards/standards/Standards.Surface.rb +97 -52
  252. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +39 -21
  253. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +6 -7
  254. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +15 -10
  255. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +0 -1
  256. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +10 -2
  257. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
  258. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +63 -99
  259. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +7 -7
  260. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +2420 -0
  261. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +32 -0
  262. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +9 -0
  263. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +68 -38
  264. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +105 -40
  265. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +5 -1
  266. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +63 -99
  267. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +7 -7
  268. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +1460 -0
  269. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +32 -0
  270. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +9 -0
  271. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +68 -38
  272. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +104 -17
  273. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +25 -13
  274. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +1 -1
  275. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +63 -99
  276. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +7 -7
  277. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +1460 -0
  278. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +64 -0
  279. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +52 -0
  280. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +9 -0
  281. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +68 -38
  282. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +112 -25
  283. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +21 -7
  284. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  285. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +63 -99
  286. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +7 -7
  287. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +1 -1
  288. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +2 -2
  289. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +1460 -0
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +64 -0
  291. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +104 -0
  292. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +9 -0
  293. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +70 -40
  294. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +172 -55
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +4 -4
  296. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +1 -1
  297. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +456 -0
  298. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +24 -0
  299. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +19 -0
  300. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerSingleSpeed.rb +5 -0
  301. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerTwoSpeed.rb +5 -0
  302. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +16 -0
  303. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +37 -0
  304. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +189 -0
  305. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +57 -0
  306. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +22 -0
  307. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +16 -0
  308. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.boilers.json +68 -0
  309. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.chillers.json +490 -0
  310. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +21244 -0
  311. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2111 -0
  312. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.economizers.json +676 -0
  313. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.elevators.json +372 -0
  314. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +1096 -0
  315. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ext_ltg.json +169 -0
  316. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps.json +532 -0
  317. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +164 -0
  318. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_rejection.json +49 -0
  319. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.motors.json +274 -0
  320. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +3094 -0
  321. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ref_cases.json +854 -0
  322. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ref_lnup.json +562 -0
  323. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_compressors.json +58 -0
  324. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_condenser.json +238 -0
  325. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +12 -0
  326. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_walkins.json +1316 -0
  327. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +23067 -0
  328. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +648 -0
  329. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_heaters.json +72 -0
  330. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_source_heat_pumps.json +31 -0
  331. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_source_heat_pumps_heating.json +13 -0
  332. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +456 -0
  333. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +24 -0
  334. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +19 -0
  335. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerSingleSpeed.rb +5 -0
  336. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerTwoSpeed.rb +5 -0
  337. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +16 -0
  338. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +37 -0
  339. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +189 -0
  340. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +57 -0
  341. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +22 -0
  342. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +16 -0
  343. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +68 -0
  344. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.chillers.json +490 -0
  345. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +21244 -0
  346. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2111 -0
  347. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.economizers.json +676 -0
  348. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.elevators.json +372 -0
  349. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +1096 -0
  350. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ext_ltg.json +169 -0
  351. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps.json +664 -0
  352. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +204 -0
  353. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_rejection.json +49 -0
  354. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.motors.json +274 -0
  355. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +3094 -0
  356. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ref_cases.json +854 -0
  357. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ref_lnup.json +562 -0
  358. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +58 -0
  359. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_condenser.json +238 -0
  360. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +12 -0
  361. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_walkins.json +1316 -0
  362. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +23067 -0
  363. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +671 -0
  364. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_heaters.json +72 -0
  365. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_source_heat_pumps.json +31 -0
  366. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_source_heat_pumps_heating.json +13 -0
  367. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1662 -332
  368. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +5049 -289
  369. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1743 -161
  370. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +63 -99
  371. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +11 -11
  372. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.heat_rejection.json +9 -0
  373. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +8 -8
  374. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
  375. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +4 -4
  376. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +63 -99
  377. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ext_ltg.json +10 -10
  378. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.heat_rejection.json +9 -0
  379. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +7 -7
  380. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +9 -9
  381. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +4 -4
  382. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_rejection.json +9 -0
  383. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +0 -1
  384. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
  385. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +1 -1
  386. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +1 -1
  387. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +9 -0
  388. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +2 -2
  389. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +3 -6
  390. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +4 -4
  391. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +1 -1
  392. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +1 -1
  393. data/lib/openstudio-standards/standards/cbes/cbes.Model.rb +1 -3
  394. data/lib/openstudio-standards/standards/cbes/cbes.rb +1 -1
  395. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +8 -13
  396. data/lib/openstudio-standards/standards/deer/deer.Model.rb +2 -2
  397. data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +2 -0
  398. data/lib/openstudio-standards/standards/deer/deer.Space.rb +1 -1
  399. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +0 -1
  400. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +0 -1
  401. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +0 -1
  402. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +0 -1
  403. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +0 -1
  404. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +1 -1
  405. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +1 -1
  406. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +0 -1
  407. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +1 -1
  408. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +1 -1
  409. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +0 -1
  410. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +1 -1
  411. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +1 -1
  412. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +0 -1
  413. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +1 -1
  414. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +1 -1
  415. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +0 -1
  416. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +1 -1
  417. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +1 -1
  418. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +0 -1
  419. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +1 -1
  420. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +1 -1
  421. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +0 -1
  422. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +1 -1
  423. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +1 -1
  424. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +0 -1
  425. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +1 -1
  426. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +1 -1
  427. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +0 -1
  428. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +1 -1
  429. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +1 -1
  430. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +0 -1
  431. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +1 -1
  432. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +1 -1
  433. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +0 -1
  434. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +1 -1
  435. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +1 -1
  436. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +0 -1
  437. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +1 -1
  438. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +1 -1
  439. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +0 -1
  440. data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +0 -1
  441. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +28 -7
  442. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +16 -2
  443. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +15 -0
  444. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +14 -0
  445. data/lib/openstudio-standards/standards/necb/ECMS/data/erv.json +11 -7
  446. data/lib/openstudio-standards/standards/necb/ECMS/data/pv.json +112 -0
  447. data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +50 -0
  448. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +21 -8
  449. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +17 -6
  450. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +142 -6
  451. data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +189 -0
  452. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +104 -0
  453. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +19 -13
  454. data/lib/openstudio-standards/standards/necb/NECB2011/data/erv.json +1 -1
  455. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +39278 -0
  456. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +17 -1
  457. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +15 -0
  458. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -2
  459. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -0
  460. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -0
  461. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +154 -12
  462. data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +21 -3
  463. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +140 -21
  464. data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +74 -0
  465. data/lib/openstudio-standards/standards/necb/NECB2011/pv_ground.md +44 -0
  466. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
  467. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/qaqc_resources/neb_end_use_prices.csv +39 -84
  468. data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +0 -1
  469. data/lib/openstudio-standards/standards/standard.rb +6 -5
  470. data/lib/openstudio-standards/utilities/Add_template_field_to_json.rb +3 -3
  471. data/lib/openstudio-standards/utilities/convert_surfaces_to_adiabatic_necb_8426.rb +54 -54
  472. data/lib/openstudio-standards/utilities/generate_prototype_database.rb +2 -2
  473. data/lib/openstudio-standards/utilities/generate_space_types.rb +3 -3
  474. data/lib/openstudio-standards/utilities/logging.rb +7 -7
  475. data/lib/openstudio-standards/utilities/necb_to_epw_map.rb +14 -14
  476. data/lib/openstudio-standards/utilities/os_sim_extract.rb +25 -25
  477. data/lib/openstudio-standards/utilities/rename_surfaces.rb +10 -13
  478. data/lib/openstudio-standards/utilities/round_surf_coords.rb +18 -20
  479. data/lib/openstudio-standards/utilities/sched_create.rb +39 -41
  480. data/lib/openstudio-standards/utilities/set_mult_to_adiabatic.rb +31 -31
  481. data/lib/openstudio-standards/utilities/simulation.rb +5 -3
  482. data/lib/openstudio-standards/utilities/speacetype_map_converter.rb +10 -11
  483. data/lib/openstudio-standards/utilities/sqlfile.rb +6 -8
  484. data/lib/openstudio-standards/utilities/template_measure/measure.rb +108 -0
  485. data/lib/openstudio-standards/utilities/template_measure/measure.xml +162 -0
  486. data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +448 -0
  487. data/lib/openstudio-standards/utilities/template_measure/tests/test.rb +160 -0
  488. data/lib/openstudio-standards/utilities/weatherData1_xlsx_to_json.rb +23 -26
  489. data/lib/openstudio-standards/version.rb +1 -1
  490. data/lib/openstudio-standards/weather/Weather.Model.rb +74 -80
  491. data/lib/openstudio-standards/weather/Weather.stat_file.rb +17 -17
  492. metadata +217 -2
@@ -569,6 +569,7 @@ class Standard
569
569
  construction_name_to_vt_map = {}
570
570
  space.surfaces.sort.each do |surface|
571
571
  next unless surface.outsideBoundaryCondition == 'Outdoors' && surface.surfaceType == 'Wall'
572
+
572
573
  surface.subSurfaces.sort.each do |sub_surface|
573
574
  next unless sub_surface.outsideBoundaryCondition == 'Outdoors' && (sub_surface.subSurfaceType == 'FixedWindow' || sub_surface.subSurfaceType == 'OperableWindow' || sub_surface.subSurfaceType == 'GlassDoor')
574
575
 
@@ -684,6 +685,7 @@ class Standard
684
685
  construction_name_to_vt_map = {}
685
686
  space.surfaces.sort.each do |surface|
686
687
  next unless surface.outsideBoundaryCondition == 'Outdoors' && surface.surfaceType == 'RoofCeiling'
688
+
687
689
  surface.subSurfaces.sort.each do |sub_surface|
688
690
  next unless sub_surface.outsideBoundaryCondition == 'Outdoors' && sub_surface.subSurfaceType == 'Skylight'
689
691
 
@@ -821,8 +823,10 @@ class Standard
821
823
  ext_fen_area_m2 = 0
822
824
  space.surfaces.each do |surface|
823
825
  next unless surface.outsideBoundaryCondition == 'Outdoors'
826
+
824
827
  surface.subSurfaces.each do |sub_surface|
825
828
  next unless sub_surface.subSurfaceType == 'FixedWindow' || sub_surface.subSurfaceType == 'OperableWindow' || sub_surface.subSurfaceType == 'Skylight' || sub_surface.subSurfaceType == 'GlassDoor'
829
+
826
830
  ext_fen_area_m2 += sub_surface.netArea
827
831
  end
828
832
  end
@@ -1332,6 +1336,7 @@ class Standard
1332
1336
  next unless surface.outsideBoundaryCondition == 'Outdoors'
1333
1337
  # Skip non-walls
1334
1338
  next unless surface.surfaceType == 'Wall'
1339
+
1335
1340
  # This surface
1336
1341
  area_m2 += surface.netArea
1337
1342
  # Subsurfaces in this surface
@@ -1356,6 +1361,7 @@ class Standard
1356
1361
  next unless surface.outsideBoundaryCondition == 'Outdoors'
1357
1362
  # Skip non-walls
1358
1363
  next unless surface.surfaceType == 'Wall' || surface.surfaceType == 'RoofCeiling'
1364
+
1359
1365
  # This surface
1360
1366
  area_m2 += surface.netArea
1361
1367
  # Subsurfaces in this surface
@@ -1430,6 +1436,7 @@ class Standard
1430
1436
  largest_surface = nil
1431
1437
  space.surfaces.each do |surface|
1432
1438
  next unless surface.surfaceType == 'Floor' && surface.outsideBoundaryCondition == 'Surface'
1439
+
1433
1440
  if surface.grossArea > largest_floor_area
1434
1441
  largest_floor_area = surface.grossArea
1435
1442
  largest_surface = surface
@@ -1591,6 +1598,7 @@ class Standard
1591
1598
  unless adj_surface.empty?
1592
1599
  space.model.getSpaces.sort.each do |other_space|
1593
1600
  next if other_space == space
1601
+
1594
1602
  other_space.surfaces.each do |surf|
1595
1603
  if surf == adj_surface.get
1596
1604
  spaces << other_space
@@ -1602,8 +1610,10 @@ class Standard
1602
1610
  # If looking for only spaces adjacent on the same floor.
1603
1611
  if same_floor == true
1604
1612
  raise "Cannot get adjacent spaces of space #{space.name} since space not set to BuildingStory" if space.buildingStory.empty?
1613
+
1605
1614
  spaces.each do |other_space|
1606
1615
  raise "One or more adjecent spaces to space #{space.name} is not assigned to a BuildingStory. Ensure all spaces are assigned." if space.buildingStory.empty?
1616
+
1607
1617
  if other_space.buildingStory.get == space.buildingStory.get
1608
1618
  same_floor_spaces << other_space
1609
1619
  end
@@ -1615,6 +1625,7 @@ class Standard
1615
1625
  area_index = []
1616
1626
  array_hash = {}
1617
1627
  return nil if spaces.size.zero?
1628
+
1618
1629
  # iterate through each surface in the space
1619
1630
  space.surfaces.each do |surface|
1620
1631
  # get the adjacent surface in another space.
@@ -1623,6 +1634,7 @@ class Standard
1623
1634
  # go through each of the adjeacent spaces to find the matching surface/space.
1624
1635
  spaces.each_with_index do |other_space, index|
1625
1636
  next if other_space == space
1637
+
1626
1638
  other_space.surfaces.each do |surf|
1627
1639
  if surf == adj_surface.get
1628
1640
  # initialize array index to zero for first time so += will work.
@@ -1643,7 +1655,7 @@ class Standard
1643
1655
  return get_adjacent_spaces_with_touching_area(same_floor)[0][0]
1644
1656
  end
1645
1657
 
1646
- # todo - add related related to space_hours_of_operation like set_space_hours_of_operation and shift_and_expand_space_hours_of_operation
1658
+ # TODO: - add related related to space_hours_of_operation like set_space_hours_of_operation and shift_and_expand_space_hours_of_operation
1647
1659
  # todo - ideally these could take in a date range, array of dates and or days of week. Hold off until need is a bit more defined.
1648
1660
 
1649
1661
  # If the model has an hours of operation schedule set in default schedule set for building that looks valid it will
@@ -1654,7 +1666,6 @@ class Standard
1654
1666
  # @param space [Space] takes space
1655
1667
  # @return [Hash] start and end of hours of operation, stat date, end date, bool for each day of the week
1656
1668
  def space_hours_of_operation(space)
1657
-
1658
1669
  default_sch_type = OpenStudio::Model::DefaultScheduleType.new('HoursofOperationSchedule')
1659
1670
  hours_of_operation = space.getDefaultSchedule(default_sch_type)
1660
1671
  if !hours_of_operation.is_initialized
@@ -1682,7 +1693,7 @@ class Standard
1682
1693
  unexpected_val = false
1683
1694
  times = hours_of_operation.defaultDaySchedule.times
1684
1695
  values = hours_of_operation.defaultDaySchedule.values
1685
- times.each_with_index do |time,i|
1696
+ times.each_with_index do |time, i|
1686
1697
  if values[i] == 0 && hoo_start.nil?
1687
1698
  hoo_start = time.totalHours
1688
1699
  elsif values[i] == 1 && hoo_end.nil?
@@ -1723,8 +1734,8 @@ class Standard
1723
1734
  end
1724
1735
  rule_hash[:hoo_hours] = hoo_hours
1725
1736
  days_used = []
1726
- indices_vector.each_with_index do |profile_index,i|
1727
- if profile_index == -1 then days_used << i+1 end
1737
+ indices_vector.each_with_index do |profile_index, i|
1738
+ if profile_index == -1 then days_used << i + 1 end
1728
1739
  end
1729
1740
  rule_hash[:days_used] = days_used
1730
1741
  profiles[-1] = rule_hash
@@ -1738,10 +1749,10 @@ class Standard
1738
1749
  unexpected_val = false
1739
1750
  times = rule.daySchedule.times
1740
1751
  values = rule.daySchedule.values
1741
- times.each_with_index do |time,i|
1752
+ times.each_with_index do |time, i|
1742
1753
  if values[i] == 0 && hoo_start.nil?
1743
1754
  hoo_start = time.totalHours
1744
- elsif values[i] == 1 && hoo_end.nil?
1755
+ elsif values[i] == 1 && hoo_end.nil?
1745
1756
  hoo_end = time.totalHours
1746
1757
  elsif values[i] != 1 && values[i] != 0
1747
1758
  unexpected_val = true
@@ -1778,37 +1789,34 @@ class Standard
1778
1789
  end
1779
1790
  rule_hash[:hoo_hours] = hoo_hours
1780
1791
  days_used = []
1781
- indices_vector.each_with_index do |profile_index,i|
1782
- if profile_index == rule.ruleIndex then days_used << i+1 end
1792
+ indices_vector.each_with_index do |profile_index, i|
1793
+ if profile_index == rule.ruleIndex then days_used << i + 1 end
1783
1794
  end
1784
1795
  rule_hash[:days_used] = days_used
1785
1796
 
1786
- =begin
1787
- # todo - delete rule details below unless end up needing to use them
1788
- if rule.startDate.is_initialized
1789
- date = rule.startDate.get
1790
- rule_hash[:start_date] = "#{date.monthOfYear.value}/#{date.dayOfMonth}"
1791
- else
1792
- rule_hash[:start_date] = nil
1793
- end
1794
- if rule.endDate.is_initialized
1795
- date = rule.endDate.get
1796
- rule_hash[:end_date] = "#{date.monthOfYear.value}/#{date.dayOfMonth}"
1797
- else
1798
- rule_hash[:end_date] = nil
1799
- end
1800
- rule_hash[:mon] = rule.applyMonday
1801
- rule_hash[:tue] = rule.applyTuesday
1802
- rule_hash[:wed] = rule.applyWednesday
1803
- rule_hash[:thu] = rule.applyThursday
1804
- rule_hash[:fri] = rule.applyFriday
1805
- rule_hash[:sat] = rule.applySaturday
1806
- rule_hash[:sun] = rule.applySunday
1807
- =end
1797
+ # # todo - delete rule details below unless end up needing to use them
1798
+ # if rule.startDate.is_initialized
1799
+ # date = rule.startDate.get
1800
+ # rule_hash[:start_date] = "#{date.monthOfYear.value}/#{date.dayOfMonth}"
1801
+ # else
1802
+ # rule_hash[:start_date] = nil
1803
+ # end
1804
+ # if rule.endDate.is_initialized
1805
+ # date = rule.endDate.get
1806
+ # rule_hash[:end_date] = "#{date.monthOfYear.value}/#{date.dayOfMonth}"
1807
+ # else
1808
+ # rule_hash[:end_date] = nil
1809
+ # end
1810
+ # rule_hash[:mon] = rule.applyMonday
1811
+ # rule_hash[:tue] = rule.applyTuesday
1812
+ # rule_hash[:wed] = rule.applyWednesday
1813
+ # rule_hash[:thu] = rule.applyThursday
1814
+ # rule_hash[:fri] = rule.applyFriday
1815
+ # rule_hash[:sat] = rule.applySaturday
1816
+ # rule_hash[:sun] = rule.applySunday
1808
1817
 
1809
1818
  # update hash
1810
1819
  profiles[rule.ruleIndex] = rule_hash
1811
-
1812
1820
  end
1813
1821
 
1814
1822
  return profiles
@@ -1835,7 +1843,7 @@ class Standard
1835
1843
  end
1836
1844
  end
1837
1845
 
1838
- # todo - replace this with logic to get combined hours of operation for collection of spaces.
1846
+ # TODO: - replace this with logic to get combined hours of operation for collection of spaces.
1839
1847
  # each hours_of_operation_array is hash with key for each profile.
1840
1848
  # each profile has hash with keys for hoo_start, hoo_end, hoo_hours, days_used
1841
1849
  # my goal is to compare profiles and days used across all profiles to create new entries as necessary
@@ -1845,11 +1853,10 @@ class Standard
1845
1853
 
1846
1854
  # OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "Evaluating hours of operation for #{space_names.join(',')}: #{hours_of_operation_array}")
1847
1855
 
1848
- # todo - what is this getting max of, it isn't longest hours of operation, is it the most profiles?
1856
+ # TODO: - what is this getting max of, it isn't longest hours of operation, is it the most profiles?
1849
1857
  hours_of_operation = hours_of_operation_array.max_by { |i| hours_of_operation_array.count(i) }
1850
1858
 
1851
1859
  return hours_of_operation
1852
-
1853
1860
  end
1854
1861
 
1855
1862
  private
@@ -1,4 +1,3 @@
1
-
2
1
  class Standard
3
2
  # @!group SpaceType
4
3
 
@@ -6,7 +5,6 @@ class Standard
6
5
  #
7
6
  # @return [hash] hash of internal loads for different load types
8
7
  def space_type_get_standards_data(space_type)
9
-
10
8
  standards_building_type = if space_type.standardsBuildingType.is_initialized
11
9
  space_type.standardsBuildingType.get
12
10
  end
@@ -84,6 +82,7 @@ class Standard
84
82
  if space_type.name.get.to_s.downcase.include?('plenum')
85
83
  return false
86
84
  end
85
+
87
86
  if space_type.standardsSpaceType.is_initialized
88
87
  if space_type.standardsSpaceType.get.downcase.include?('plenum')
89
88
  return false
@@ -94,7 +93,7 @@ class Standard
94
93
  space_type_properties = space_type_get_standards_data(space_type)
95
94
 
96
95
  # Need to add a check, or it'll crash on space_type_properties['occupancy_per_area'].to_f below
97
- if space_type_properties.nil?
96
+ if space_type_properties.nil? || space_type_properties.empty?
98
97
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
99
98
  return false
100
99
  end
@@ -119,6 +118,7 @@ class Standard
119
118
  elsif instances.size > 1
120
119
  instances.each_with_index do |inst, i|
121
120
  next if i.zero?
121
+
122
122
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
123
123
  inst.remove
124
124
  end
@@ -211,6 +211,7 @@ class Standard
211
211
  elsif instances.size > 1
212
212
  instances.each_with_index do |inst, i|
213
213
  next if i.zero?
214
+
214
215
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
215
216
  inst.remove
216
217
  end
@@ -289,6 +290,7 @@ class Standard
289
290
  elsif instances.size > 1
290
291
  instances.each_with_index do |inst, i|
291
292
  next if i.zero?
293
+
292
294
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
293
295
  inst.remove
294
296
  end
@@ -331,6 +333,7 @@ class Standard
331
333
  elsif instances.size > 1
332
334
  instances.each_with_index do |inst, i|
333
335
  next if i.zero?
336
+
334
337
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
335
338
  inst.remove
336
339
  end
@@ -421,6 +424,7 @@ class Standard
421
424
  elsif instances.size > 1
422
425
  instances.each_with_index do |inst, i|
423
426
  next if i.zero?
427
+
424
428
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
425
429
  inst.remove
426
430
  end
@@ -495,48 +499,39 @@ class Standard
495
499
  # Lights
496
500
  if set_lights
497
501
 
498
- apply_lighting_schedule(space_type, space_type_properties,default_sch_set)
502
+ apply_lighting_schedule(space_type, space_type_properties, default_sch_set)
499
503
 
500
504
  end
501
505
 
502
-
503
-
504
506
  # Electric Equipment
505
507
  if set_electric_equipment
506
-
507
508
  elec_equip_sch = space_type_properties['electric_equipment_schedule']
508
509
  unless elec_equip_sch.nil?
509
510
  default_sch_set.setElectricEquipmentSchedule(model_add_schedule(space_type.model, elec_equip_sch))
510
511
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set electric equipment schedule to #{elec_equip_sch}.")
511
512
  end
512
-
513
513
  end
514
514
 
515
515
  # Gas Equipment
516
516
  if set_gas_equipment
517
-
518
517
  gas_equip_sch = space_type_properties['gas_equipment_schedule']
519
518
  unless gas_equip_sch.nil?
520
519
  default_sch_set.setGasEquipmentSchedule(model_add_schedule(space_type.model, gas_equip_sch))
521
520
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set gas equipment schedule to #{gas_equip_sch}.")
522
521
  end
523
-
524
522
  end
525
523
 
526
524
  # Infiltration
527
525
  if set_infiltration
528
-
529
526
  infiltration_sch = space_type_properties['infiltration_schedule']
530
527
  unless infiltration_sch.nil?
531
528
  default_sch_set.setInfiltrationSchedule(model_add_schedule(space_type.model, infiltration_sch))
532
529
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set infiltration schedule to #{infiltration_sch}.")
533
530
  end
534
-
535
531
  end
536
532
 
537
533
  # Thermostat
538
534
  if make_thermostat
539
-
540
535
  thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(space_type.model)
541
536
  thermostat.setName("#{space_type.name} Thermostat")
542
537
 
@@ -551,20 +546,17 @@ class Standard
551
546
  thermostat.setCoolingSetpointTemperatureSchedule(model_add_schedule(space_type.model, cooling_setpoint_sch))
552
547
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set cooling setpoint schedule to #{cooling_setpoint_sch}.")
553
548
  end
554
-
555
549
  end
556
550
 
557
551
  return true
558
552
  end
559
553
 
560
- def apply_lighting_schedule(space_type, space_type_properties,default_sch_set)
561
-
554
+ def apply_lighting_schedule(space_type, space_type_properties, default_sch_set)
562
555
  lighting_sch = space_type_properties['lighting_schedule']
563
556
  unless lighting_sch.nil?
564
557
  default_sch_set.setLightingSchedule(model_add_schedule(space_type.model, lighting_sch))
565
558
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set lighting schedule to #{lighting_sch}.")
566
559
  end
567
-
568
560
  end
569
561
 
570
562
  # Returns standards data for selected construction
@@ -11,24 +11,24 @@ class Standard
11
11
 
12
12
  # Define the envelope component infiltration rates
13
13
  component_infil_rates_cfm_per_ft2 = {
14
- 'baseline' => {
15
- 'opaque_door' => 0.40,
16
- 'loading_dock_door' => 0.40,
17
- 'swinging_or_revolving_glass_door' => 1.0,
18
- 'vestibule' => 1.0,
19
- 'sliding_glass_door' => 0.40,
20
- 'window' => 0.40,
21
- 'skylight' => 0.40
22
- },
23
- 'advanced' => {
24
- 'opaque_door' => 0.20,
25
- 'loading_dock_door' => 0.20,
26
- 'swinging_or_revolving_glass_door' => 1.0,
27
- 'vestibule' => 1.0,
28
- 'sliding_glass_door' => 0.20,
29
- 'window' => 0.20,
30
- 'skylight' => 0.20
31
- }
14
+ 'baseline' => {
15
+ 'opaque_door' => 0.40,
16
+ 'loading_dock_door' => 0.40,
17
+ 'swinging_or_revolving_glass_door' => 1.0,
18
+ 'vestibule' => 1.0,
19
+ 'sliding_glass_door' => 0.40,
20
+ 'window' => 0.40,
21
+ 'skylight' => 0.40
22
+ },
23
+ 'advanced' => {
24
+ 'opaque_door' => 0.20,
25
+ 'loading_dock_door' => 0.20,
26
+ 'swinging_or_revolving_glass_door' => 1.0,
27
+ 'vestibule' => 1.0,
28
+ 'sliding_glass_door' => 0.20,
29
+ 'window' => 0.20,
30
+ 'skylight' => 0.20
31
+ }
32
32
  }
33
33
 
34
34
  boundary_condition = sub_surface.outsideBoundaryCondition
@@ -231,7 +231,7 @@ class Standard
231
231
  # 'sub_surface_create_centered_subsurface_from_scaled_surface' method because it can handle concave surfaces.
232
232
  # However, it takes longer because it uses BTAP::Geometry::Surfaces.make_convex_surfaces which includes many nested
233
233
  # loops that cycle through the verticies in a surface.
234
- def sub_surface_create_scaled_subsurfaces_from_surface (surface:, area_fraction:, model:, consturction:)
234
+ def sub_surface_create_scaled_subsurfaces_from_surface(surface:, area_fraction:, model:, consturction:)
235
235
  # Set geometry tolerences:
236
236
  geometry_tolerence = 12
237
237
  # Get rid of all existing subsurfaces.
@@ -243,7 +243,7 @@ class Standard
243
243
  surface.vertices.each do |surf_vert|
244
244
  surface.vertices.each do |surf_vert_2|
245
245
  unless surf_vert_2.z.to_f.round(geometry_tolerence) == surf_vert.z.to_f.round(geometry_tolerence)
246
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Currently skylights can only be added to buildings with non-plenum flat roofs.")
246
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'Currently skylights can only be added to buildings with non-plenum flat roofs.')
247
247
  end
248
248
  end
249
249
  end
@@ -257,7 +257,7 @@ class Standard
257
257
 
258
258
  # Turn everything back into OpenStudio stuff
259
259
  os_surf_points = []
260
- os_surf_cents =[]
260
+ os_surf_cents = []
261
261
  for i in 0..(new_surfaces.length - 1)
262
262
  os_surf_point = []
263
263
  for j in 0..(new_surfaces[i].length - 1)
@@ -295,11 +295,11 @@ class Standard
295
295
  # 'skylight'). If there will be more than one subsurface then add a counter at the end.
296
296
  new_name = surface.name.to_s + '_' + new_sub_surface.subSurfaceType.to_s
297
297
  if new_surfaces.length > 1
298
- new_name = surface.name.to_s + '_' + new_sub_surface.subSurfaceType.to_s + '_' + "#{index}"
298
+ new_name = surface.name.to_s + '_' + new_sub_surface.subSurfaceType.to_s + '_' + index.to_s
299
299
  end
300
- #Set the skylight type to 'Skylight'
300
+ # Set the skylight type to 'Skylight'
301
301
  new_sub_surface.setSubSurfaceType('Skylight')
302
- #Set the skylight construction to whatever was passed (should be the default skylight construction)
302
+ # Set the skylight construction to whatever was passed (should be the default skylight construction)
303
303
  new_sub_surface.setConstruction(consturction)
304
304
  new_sub_surface.setName(new_name)
305
305
  # There is now only one surface on the subsurface. Enforce this
@@ -322,8 +322,6 @@ class Standard
322
322
  # This removes all of the subsurfaces from a surface. Is a preparation for replaceing windows or clearing doors
323
323
  # before adding windows.
324
324
  def remove_All_Subsurfaces(surface:)
325
- surface.subSurfaces.sort.each do |sub_surface|
326
- sub_surface.remove
327
- end
325
+ surface.subSurfaces.sort.each(&:remove)
328
326
  end
329
327
  end
@@ -86,14 +86,14 @@ class Standard
86
86
  vertical_surface.subSurfaces.sort.each do |vertical_subsurface|
87
87
  # Need to fix this so that error show up in right place
88
88
  if vertical_subsurface.nil?
89
- puts "Surface does not exist"
89
+ puts 'Surface does not exist'
90
90
  else
91
91
  vertical_subsurface.remove
92
92
  end
93
93
  end
94
94
  # corner_coords = vertical_surface.vertices
95
- code_window_area = fdwr*vertical_surface.grossArea
96
- code_window_width = code_window_area/window_height_m
95
+ code_window_area = fdwr * vertical_surface.grossArea
96
+ code_window_width = code_window_area / window_height_m
97
97
  min_z = 0
98
98
  vertical_surface.vertices.each_with_index do |vertex, index|
99
99
  if index == 0
@@ -134,57 +134,58 @@ class Standard
134
134
  # Note that this will not include foundation walls.
135
135
  next unless surface.surfaceType == 'Wall'
136
136
  next unless surface.outsideBoundaryCondition == 'Outdoors'
137
+
137
138
  # Determine if the wall is vertical which I define as being between 89 and 91 degrees from horizontal.
138
139
  tilt_radian = surface.tilt
139
140
  tilt_degrees = OpenStudio.convert(tilt_radian, 'rad', 'deg').get
140
141
  sub_surface_info = []
141
- if tilt_degrees <= max_angle and tilt_degrees >= min_angle
142
+ if tilt_degrees <= max_angle && tilt_degrees >= min_angle
142
143
  # If the wall is vertical determine if it is adjacent to a plenum. If yes include it in the array of
143
144
  # plenum walls and add it to the plenum wall area counter (accounting for space multipliers).
144
145
  if space_plenum?(space)
145
146
  plenum_surfaces << surface
146
- exp_plenum_area += surface.grossArea*space.multiplier
147
+ exp_plenum_area += surface.grossArea * space.multiplier
147
148
  else
148
149
  # If not a plenum then include it in the array of non-plenum walls and add it to the non-plenum area
149
150
  # counter (accounting for space multipliers).
150
151
  exposed_surfaces << surface
151
- exp_nonplenum_area += surface.grossArea*space.multiplier
152
+ exp_nonplenum_area += surface.grossArea * space.multiplier
152
153
  surface.subSurfaces.sort.each do |sub_surface|
153
- sub_surface_area += sub_surface.grossArea.to_f*space.multiplier
154
+ sub_surface_area += sub_surface.grossArea.to_f * space.multiplier
154
155
  sub_surface_info << {
155
- "subsurface_name" => sub_surface.nameString,
156
- "subsurface_type" => sub_surface.subSurfaceType,
157
- "gross_area_m2" => sub_surface.grossArea.to_f,
158
- "construction_name" => sub_surface.construction.get.nameString
156
+ 'subsurface_name' => sub_surface.nameString,
157
+ 'subsurface_type' => sub_surface.subSurfaceType,
158
+ 'gross_area_m2' => sub_surface.grossArea.to_f,
159
+ 'construction_name' => sub_surface.construction.get.nameString
159
160
  }
160
161
  end
161
162
  unless sub_surface_info.empty?
162
163
  sub_surfaces_info << {
163
- "surface_name" => surface.nameString,
164
- "subsurfaces" => sub_surface_info
164
+ 'surface_name' => surface.nameString,
165
+ 'subsurfaces' => sub_surface_info
165
166
  }
166
167
  end
167
168
  end
168
169
  # Regardless of if the wall is adjacent to a plenum or not add it to the exposed wall area adjacent to
169
170
  # conditioned spaces (accounting for space multipliers).
170
- total_exp_area += surface.grossArea*space.multiplier
171
+ total_exp_area += surface.grossArea * space.multiplier
171
172
  end
172
173
  end
173
174
  end
174
175
  end
175
176
  fdwr = 999
176
177
  unless exp_nonplenum_area < 0.1
177
- fdwr = sub_surface_area/exp_nonplenum_area
178
+ fdwr = sub_surface_area / exp_nonplenum_area
178
179
  end
179
180
  # Add everything into a hash and return that hash to whomever called the method.
180
181
  exp_surf_info = {
181
- "total_exp_wall_area_m2" => total_exp_area,
182
- "exp_plenum_wall_area_m2" => exp_plenum_area,
183
- "exp_nonplenum_wall_area_m2" => exp_nonplenum_area,
184
- "exp_plenum_walls" => plenum_surfaces,
185
- "exp_nonplenum_walls" => exposed_surfaces,
186
- "fdwr" => fdwr,
187
- "sub_surfaces" => sub_surfaces_info
182
+ 'total_exp_wall_area_m2' => total_exp_area,
183
+ 'exp_plenum_wall_area_m2' => exp_plenum_area,
184
+ 'exp_nonplenum_wall_area_m2' => exp_nonplenum_area,
185
+ 'exp_plenum_walls' => plenum_surfaces,
186
+ 'exp_nonplenum_walls' => exposed_surfaces,
187
+ 'fdwr' => fdwr,
188
+ 'sub_surfaces' => sub_surfaces_info
188
189
  }
189
190
  return exp_surf_info
190
191
  end
@@ -209,53 +210,54 @@ class Standard
209
210
  # Assume a roof is of type 'RoofCeiling' and has an 'Outdoors' boundary condition.
210
211
  next unless surface.surfaceType == 'RoofCeiling'
211
212
  next unless surface.outsideBoundaryCondition == 'Outdoors'
213
+
212
214
  # Determine if the roof is adjacent to a plenum.
213
215
  sub_surface_info = []
214
216
  if space_plenum?(space)
215
217
  # If the roof is adjacent to a plenum add it to the plenum roof array and the plenum roof area counter
216
218
  # (accounting for space multipliers).
217
219
  plenum_surfaces << surface
218
- exp_plenum_area += surface.grossArea*space.multiplier
220
+ exp_plenum_area += surface.grossArea * space.multiplier
219
221
  else
220
222
  # If the roof is not adjacent to a plenum add it to the non-plenum roof array and the non-plenum roof area
221
223
  # counter (accounting for space multipliers).
222
224
  exposed_surfaces << surface
223
- exp_nonplenum_area += surface.grossArea*space.multiplier
225
+ exp_nonplenum_area += surface.grossArea * space.multiplier
224
226
  surface.subSurfaces.sort.each do |sub_surface|
225
- sub_surface_area += sub_surface.grossArea.to_f*space.multiplier
227
+ sub_surface_area += sub_surface.grossArea.to_f * space.multiplier
226
228
  sub_surface_info << {
227
- "subsurface_name" => sub_surface.nameString,
228
- "subsurface_type" => sub_surface.subSurfaceType,
229
- "gross_area_m2" => sub_surface.grossArea.to_f,
230
- "construction_name" => sub_surface.construction.get.nameString
229
+ 'subsurface_name' => sub_surface.nameString,
230
+ 'subsurface_type' => sub_surface.subSurfaceType,
231
+ 'gross_area_m2' => sub_surface.grossArea.to_f,
232
+ 'construction_name' => sub_surface.construction.get.nameString
231
233
  }
232
234
  end
233
235
  unless sub_surface_info.empty?
234
236
  sub_surfaces_info << {
235
- "surface_name" => surface.nameString,
236
- "subsurfaces" => sub_surface_info
237
+ 'surface_name' => surface.nameString,
238
+ 'subsurfaces' => sub_surface_info
237
239
  }
238
240
  end
239
241
  end
240
242
  # Regardless of if the roof is adjacent to a plenum or not add it to the total roof area counter (accounting
241
243
  # for space multipliers).
242
- total_exp_area += surface.grossArea*space.multiplier
244
+ total_exp_area += surface.grossArea * space.multiplier
243
245
  end
244
246
  end
245
247
  end
246
248
  srr = 999
247
249
  unless exp_nonplenum_area < 0.1
248
- srr = sub_surface_area/exp_nonplenum_area
250
+ srr = sub_surface_area / exp_nonplenum_area
249
251
  end
250
252
  # Put the information into a hash and return it to whomever called this method.
251
253
  exp_surf_info = {
252
- "total_exp_roof_area_m2" => total_exp_area,
253
- "exp_plenum_roof_area_m2" => exp_plenum_area,
254
- "exp_nonplenum_roof_area_m2" => exp_nonplenum_area,
255
- "exp_plenum_roofs" => plenum_surfaces,
256
- "exp_nonplenum_roofs" => exposed_surfaces,
257
- "srr" => srr,
258
- "sub_surfaces" => sub_surfaces_info
254
+ 'total_exp_roof_area_m2' => total_exp_area,
255
+ 'exp_plenum_roof_area_m2' => exp_plenum_area,
256
+ 'exp_nonplenum_roof_area_m2' => exp_nonplenum_area,
257
+ 'exp_plenum_roofs' => plenum_surfaces,
258
+ 'exp_nonplenum_roofs' => exposed_surfaces,
259
+ 'srr' => srr,
260
+ 'sub_surfaces' => sub_surfaces_info
259
261
  }
260
262
  return exp_surf_info
261
263
  end
@@ -300,6 +302,7 @@ class Standard
300
302
  end
301
303
  # If no outdoor roofceiling go to the next space.
302
304
  next if outdoor_roof == false
305
+
303
306
  z_Origin = space.zOrigin.to_f
304
307
  ceiling_centroid = [0, 0, 0]
305
308
 
@@ -307,8 +310,8 @@ class Standard
307
310
  # centroid calculation.
308
311
  space_surfaces.each do |sp_surface|
309
312
  if max_surf.centroid.z.to_f.round(tol) == sp_surface.centroid.z.to_f.round(tol)
310
- ceiling_centroid[0] += sp_surface.centroid.x.to_f*sp_surface.grossArea.to_f
311
- ceiling_centroid[1] += sp_surface.centroid.y.to_f*sp_surface.grossArea.to_f
313
+ ceiling_centroid[0] += sp_surface.centroid.x.to_f * sp_surface.grossArea.to_f
314
+ ceiling_centroid[1] += sp_surface.centroid.y.to_f * sp_surface.grossArea.to_f
312
315
  ceiling_centroid[2] += sp_surface.grossArea.to_f
313
316
  end
314
317
  end
@@ -319,11 +322,11 @@ class Standard
319
322
 
320
323
  # Put the info into an array containing hashes of spaces with outdoor roofceilings
321
324
  spaces_info << {
322
- space: space,
323
- x: ceiling_centroid[0] + space.xOrigin.to_f,
324
- y: ceiling_centroid[1] + space.yOrigin.to_f,
325
- z: max_surf.centroid.z.to_f + z_Origin,
326
- area_m2: ceiling_centroid[2]
325
+ space: space,
326
+ x: ceiling_centroid[0] + space.xOrigin.to_f,
327
+ y: ceiling_centroid[1] + space.yOrigin.to_f,
328
+ z: max_surf.centroid.z.to_f + z_Origin,
329
+ area_m2: ceiling_centroid[2]
327
330
  }
328
331
  # This is to determine which are the global highest outdoor roofceilings
329
332
  if max_height.round(tol) < (max_surf.centroid.z.to_f + z_Origin).round(tol)
@@ -336,8 +339,8 @@ class Standard
336
339
  # calculate the centroid
337
340
  if space_info[:z].to_f.round(tol) == max_height.round(tol)
338
341
  top_spaces << space_info
339
- roof_centroid[0] += space_info[:x]*space_info[:area_m2]
340
- roof_centroid[1] += space_info[:y]*space_info[:area_m2]
342
+ roof_centroid[0] += space_info[:x] * space_info[:area_m2]
343
+ roof_centroid[1] += space_info[:y] * space_info[:area_m2]
341
344
  roof_centroid[2] += space_info[:area_m2]
342
345
  end
343
346
  end
@@ -346,10 +349,52 @@ class Standard
346
349
  roof_centroid[0] /= roof_centroid[2]
347
350
  roof_centroid[1] /= roof_centroid[2]
348
351
  roof_cent = {
349
- top_spaces: top_spaces,
350
- roof_centroid: [roof_centroid[0], roof_centroid[1], max_height],
351
- roof_area: roof_centroid[2]
352
+ top_spaces: top_spaces,
353
+ roof_centroid: [roof_centroid[0], roof_centroid[1], max_height],
354
+ roof_area: roof_centroid[2]
352
355
  }
353
356
  return roof_cent
354
357
  end
358
+
359
+ # Calculate a surface's absolute azimuth
360
+ # source: https://github.com/NREL/openstudio-extension-gem/blob/e354355054b83ffc26e3b69befa20d6baf5ef242/lib/openstudio/extension/core/os_lib_geometry.rb#L913
361
+ #
362
+ # @param surface [OpenStudio::Model:Surface] OpenStudio Surface object
363
+ # @return [Float] Surface absolute azimuth
364
+ def surface_absolute_azimuth(surface)
365
+ # Get associated space
366
+ space = surface.space.get
367
+
368
+ # Get model object
369
+ model = surface.model
370
+
371
+ # Calculate azimuth
372
+ surface_azimuth_rel_space = OpenStudio.convert(surface.azimuth, 'rad', 'deg').get
373
+ space_dir_rel_N = space.directionofRelativeNorth
374
+ building_dir_rel_N = model.getBuilding.northAxis
375
+ surface_abs_azimuth = surface_azimuth_rel_space + space_dir_rel_N + building_dir_rel_N
376
+ surface_abs_azimuth -= 360.0 until surface_abs_azimuth < 360.0
377
+
378
+ return surface_abs_azimuth
379
+ end
380
+
381
+ # Determine a surface absolute cardinal direction
382
+ #
383
+ # @param surface [OpenStudio::Model::Surface] OpenStudio Surface object
384
+ # @return [String] Surface absolute cardinal
385
+ def surface_cardinal_direction(surface)
386
+ # Get the surface's absolute azimuth
387
+ surface_abs_azimuth = surface_absolute_azimuth(surface)
388
+
389
+ # Determine the surface's cardinal direction
390
+ if (surface_abs_azimuth >= 0 && surface_abs_azimuth <= 45) || (surface_abs_azimuth > 315 && surface_abs_azimuth <= 360)
391
+ return 'N'
392
+ elsif surface_abs_azimuth > 45 && surface_abs_azimuth <= 135
393
+ return 'E'
394
+ elsif surface_abs_azimuth > 135 && surface_abs_azimuth <= 225
395
+ return 'S'
396
+ elsif surface_abs_azimuth > 225 && surface_abs_azimuth <= 315
397
+ return 'W'
398
+ end
399
+ end
355
400
  end