openstudio-standards 0.2.10 → 0.2.11.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. checksums.yaml +5 -5
  2. data/data/geometry/ASHRAE90120042007LargeHotel.osm +101 -0
  3. data/data/geometry/ASHRAE90120042007RetailStandalone.osm +220 -0
  4. data/data/geometry/ASHRAE9012010LargeHotel.osm +101 -0
  5. data/data/geometry/ASHRAE9012010RetailStandalone.osm +218 -32
  6. data/data/geometry/ASHRAE9012013FullServiceRestaurant.osm +17 -0
  7. data/data/geometry/ASHRAE9012013Hospital.osm +288 -0
  8. data/data/geometry/ASHRAE9012013LargeHotel.osm +113 -12
  9. data/data/geometry/ASHRAE9012013LargeOffice.osm +205 -1
  10. data/data/geometry/ASHRAE9012013MediumOffice.osm +103 -1
  11. data/data/geometry/ASHRAE9012013Outpatient.osm +390 -102
  12. data/data/geometry/ASHRAE9012013PrimarySchool.osm +424 -0
  13. data/data/geometry/ASHRAE9012013QuickServiceRestaurant.osm +16 -0
  14. data/data/geometry/ASHRAE9012013RetailStandalone.osm +220 -0
  15. data/data/geometry/ASHRAE9012013SecondarySchool.osm +543 -0
  16. data/data/geometry/ASHRAE9012013SmallHotel.osm +50 -0
  17. data/data/geometry/ASHRAE9012013SmallOffice.osm +33 -0
  18. data/data/geometry/ASHRAE9012013Warehouse.osm +475 -238
  19. data/data/geometry/ASHRAEFullServiceRestaurant.osm +16 -0
  20. data/data/geometry/ASHRAEHospital.osm +288 -0
  21. data/data/geometry/ASHRAELargeOffice.osm +205 -1
  22. data/data/geometry/ASHRAELargeOfficeDetailed.osm +32 -32
  23. data/data/geometry/ASHRAEMediumOffice.osm +103 -1
  24. data/data/geometry/ASHRAEOutpatient.osm +390 -102
  25. data/data/geometry/ASHRAEPrimarySchool.osm +424 -0
  26. data/data/geometry/ASHRAEQuickServiceRestaurant.osm +16 -0
  27. data/data/geometry/ASHRAESecondarySchool.osm +1011 -162
  28. data/data/geometry/ASHRAESmallHotel.osm +50 -0
  29. data/data/geometry/ASHRAESmallOffice.osm +33 -0
  30. data/data/geometry/ASHRAEWarehouse.osm +476 -238
  31. data/data/standards/manage_OpenStudio_Standards.rb +1 -1
  32. data/data/standards/openstudio_standards_duplicates_log.csv +16 -0
  33. data/data/standards/test_performance_expected_dd_results.csv +1216 -1216
  34. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.ddy +536 -0
  35. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.epw +8768 -0
  36. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.stat +544 -0
  37. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.ddy +533 -0
  38. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.epw +8768 -0
  39. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.stat +553 -0
  40. data/data/weather/VNM_Hanoi.488200_IWEC.ddy +533 -0
  41. data/data/weather/VNM_Hanoi.488200_IWEC.epw +8768 -0
  42. data/data/weather/VNM_Hanoi.488200_IWEC.stat +544 -0
  43. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.ddy +533 -0
  44. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.epw +8768 -0
  45. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.stat +546 -0
  46. data/lib/openstudio-standards.rb +27 -0
  47. data/lib/openstudio-standards/btap/btap.model.rb +4 -4
  48. data/lib/openstudio-standards/btap/btap_result.rb +8 -8
  49. data/lib/openstudio-standards/btap/economics.rb +11 -11
  50. data/lib/openstudio-standards/btap/envelope.rb +5 -5
  51. data/lib/openstudio-standards/btap/hvac.rb +55 -11
  52. data/lib/openstudio-standards/btap/measures.rb +7 -7
  53. data/lib/openstudio-standards/btap/spaceloads.rb +4 -4
  54. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +105 -1
  55. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +2 -2
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +0 -8
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +0 -8
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +0 -8
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +0 -8
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +6 -1
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +3 -1
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +22 -0
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +32 -0
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +33 -0
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +32 -0
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +25 -0
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +35 -0
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +11 -0
  71. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +17 -3
  72. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +9 -0
  73. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +9 -0
  74. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +22 -3
  75. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +9 -0
  76. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +9 -0
  77. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +107 -5
  78. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +9 -0
  79. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +3 -0
  80. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -0
  81. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +0 -8
  82. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +2 -2
  83. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +2 -4
  84. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -4
  85. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +2 -2
  86. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +45 -5
  87. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +1 -1
  88. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +21 -2
  89. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -364
  90. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +4 -0
  91. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +4 -5
  92. data/lib/openstudio-standards/refs/references.rb +4 -0
  93. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +283 -97
  94. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +2 -2
  95. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -1
  96. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +1 -1
  97. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +1 -1
  98. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +5 -5
  99. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +3 -1
  100. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
  101. data/lib/openstudio-standards/standards/Standards.Construction.rb +53 -45
  102. data/lib/openstudio-standards/standards/Standards.Fan.rb +10 -2
  103. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +4 -4
  104. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -1
  105. data/lib/openstudio-standards/standards/Standards.Model.rb +39 -18
  106. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +8 -8
  107. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +12 -12
  108. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +1 -1
  109. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +2 -2
  110. data/lib/openstudio-standards/standards/Standards.Space.rb +190 -181
  111. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +36 -59
  112. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +3 -3
  113. data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
  114. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +16 -12
  115. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +1 -1
  116. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +16 -5
  117. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
  118. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +159 -8
  119. 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 +1354 -1075
  120. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +557 -17
  121. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +28 -28
  122. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +36 -36
  123. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +233 -6
  124. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +159 -8
  125. 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 +1356 -1077
  126. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +480 -0
  127. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +28 -28
  128. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +36 -36
  129. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +241 -14
  130. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +0 -8
  131. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +12 -7
  132. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +159 -8
  133. 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 +1367 -1087
  134. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +480 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +36 -36
  136. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +233 -5
  137. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +20 -27
  138. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -3
  139. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +159 -8
  140. 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 +1432 -1138
  141. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +480 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +36 -36
  143. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +241 -5
  144. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zone_sets.json +37 -0
  145. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zones.json +39 -15
  146. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +489 -7
  147. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +250 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +1920 -0
  150. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +5265 -9
  151. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +159 -8
  152. 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 +2441 -1925
  153. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +16658 -2578
  154. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +212 -8
  155. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +11 -1
  156. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +159 -8
  157. 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 +2403 -1889
  158. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +16664 -2584
  159. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +209 -7
  160. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +11 -1
  161. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +4113 -513
  162. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_sets.json +40 -40
  163. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.elevators.json +1 -1
  164. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ground_temperatures.json +650 -0
  165. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps.json +90 -2
  166. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps_heating.json +25 -5
  167. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +1909 -32
  168. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.water_heaters.json +8 -8
  169. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +147 -155
  170. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  171. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +29 -10
  172. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
  173. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +45 -73
  174. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +4 -72
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.boilers.json +20 -0
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.chillers.json +400 -0
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +4444 -0
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_sets.json +391 -0
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +536 -0
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.elevators.json +36 -0
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +169 -0
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ground_temperatures.json +650 -0
  183. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps.json +290 -0
  184. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps_heating.json +164 -0
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +40 -0
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.motors.json +274 -0
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.prototype_inputs.json +704 -0
  188. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.refrigeration_compressors.json +22 -0
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +6424 -0
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.unitary_acs.json +142 -0
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +72 -0
  192. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps.json +31 -0
  193. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps_heating.json +13 -0
  194. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +829 -0
  195. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +24 -0
  196. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +19 -0
  197. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerSingleSpeed.rb +5 -0
  198. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerTwoSpeed.rb +5 -0
  199. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +16 -0
  200. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +37 -0
  201. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +34 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +80 -0
  203. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +68 -0
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +146 -0
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ThermalZone.rb +23 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +8 -0
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +16 -0
  208. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.heat_pumps_heating.json +5 -5
  209. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +18 -0
  210. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.heat_pumps_heating.json +5 -5
  211. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.heat_pumps_heating.json +5 -5
  212. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.heat_pumps_heating.json +5 -5
  213. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.heat_pumps_heating.json +5 -5
  214. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.heat_pumps_heating.json +5 -5
  215. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.heat_pumps_heating.json +5 -5
  216. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.heat_pumps_heating.json +1 -1
  217. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.heat_pumps_heating.json +5 -5
  218. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.heat_pumps_heating.json +5 -5
  219. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps_heating.json +5 -5
  220. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.heat_pumps_heating.json +5 -5
  221. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.heat_pumps_heating.json +5 -5
  222. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.heat_pumps_heating.json +5 -5
  223. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.heat_pumps_heating.json +5 -5
  224. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.heat_pumps_heating.json +5 -5
  225. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.heat_pumps_heating.json +5 -5
  226. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.heat_pumps_heating.json +5 -5
  227. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.heat_pumps_heating.json +5 -5
  228. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.heat_pumps_heating.json +5 -5
  229. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.heat_pumps_heating.json +5 -5
  230. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +5 -1
  231. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +5 -1
  232. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +5 -2
  233. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +8 -2
  234. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +12 -12
  235. data/lib/openstudio-standards/version.rb +1 -1
  236. data/lib/openstudio-standards/weather/Weather.Model.rb +4 -0
  237. metadata +102 -18
  238. data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
  239. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  240. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  241. data/data/standards/OpenStudio_Standards-cbes(space_types).xlsx +0 -0
  242. data/data/standards/OpenStudio_Standards-cbes.xlsx +0 -0
  243. data/data/standards/OpenStudio_Standards-deer(space_types).xlsx +0 -0
  244. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  245. data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
  246. data/data/standards/OpenStudio_Standards_LA100.xlsx +0 -0
  247. data/data/standards/junk/legacy_dd_results - Copy.csv +0 -960
  248. data/data/standards/junk/legacy_dd_results.csv +0 -960
  249. data/data/standards/junk/legacy_dd_results_new - Copy.csv +0 -960
  250. data/data/standards/junk/legacy_dd_results_new.csv +0 -960
  251. data/data/standards/junk/legacy_dd_results_original.csv +0 -960
  252. data/lib/openstudio-standards/standards/necb/NECB2011/newway.json +0 -8102
@@ -44,7 +44,7 @@ class Standard
44
44
  standards_info = construction.standardsInformation
45
45
  surf_type = standards_info.intendedSurfaceType
46
46
  if surf_type.empty?
47
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "Could not determine the intended surface type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
47
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not determine the intended surface type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
48
48
  return previous_construction_map
49
49
  end
50
50
  surf_type = surf_type.get
@@ -65,11 +65,11 @@ class Standard
65
65
  when 'Non-Metal Framing'
66
66
  stds_type = 'Nonmetal framing (all)'
67
67
  else
68
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "The standards fenestration frame type #{stds_type} cannot be used on #{surf_type} in #{planar_surface.name}. This surface will not have the standard applied.")
68
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "The standards fenestration frame type #{stds_type} cannot be used on #{surf_type} in #{planar_surface.name}. This surface will not have the standard applied.")
69
69
  return previous_construction_map
70
70
  end
71
71
  else
72
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "Could not determine the standards fenestration frame type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
72
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not determine the standards fenestration frame type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
73
73
  return previous_construction_map
74
74
  end
75
75
  # Skylights
@@ -85,11 +85,11 @@ class Standard
85
85
  when 'Plastic Skylight without Curb', 'Glass Skylight without Curb'
86
86
  stds_type = 'Without Curb'
87
87
  else
88
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "The standards fenestration type #{stds_type} cannot be used on #{surf_type} in #{planar_surface.name}. This surface will not have the standard applied.")
88
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "The standards fenestration type #{stds_type} cannot be used on #{surf_type} in #{planar_surface.name}. This surface will not have the standard applied.")
89
89
  return previous_construction_map
90
90
  end
91
91
  else
92
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "Could not determine the standards fenestration type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
92
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not determine the standards fenestration type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
93
93
  return previous_construction_map
94
94
  end
95
95
  # All other surface types
@@ -98,7 +98,7 @@ class Standard
98
98
  if stds_type.is_initialized
99
99
  stds_type = stds_type.get
100
100
  else
101
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "Could not determine the standards construction type for #{planar_surface.name}. This surface will not have the standard applied.")
101
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not determine the standards construction type for #{planar_surface.name}. This surface will not have the standard applied.")
102
102
  return previous_construction_map
103
103
  end
104
104
  end
@@ -123,9 +123,9 @@ class Standard
123
123
  # Assign the new construction to the surface
124
124
  if new_construction
125
125
  planar_surface.setConstruction(new_construction)
126
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.PlanarSurface', "Set the construction for #{planar_surface.name} to #{new_construction.name}.")
126
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.PlanarSurface', "Set the construction for #{planar_surface.name} to #{new_construction.name}.")
127
127
  else
128
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.PlanarSurface', "Could not generate a standard construction for #{planar_surface.name}.")
128
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not generate a standard construction for #{planar_surface.name}.")
129
129
  return previous_construction_map
130
130
  end
131
131
 
@@ -519,7 +519,7 @@ class Standard
519
519
  elsif chiller.autosizedReferenceCapacity.is_initialized
520
520
  total_cooling_capacity_w += chiller.autosizedReferenceCapacity.get
521
521
  else
522
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name} capacity of #{chiller.name} is not available, total cooling capacity of plant loop will be incorrect when applying standard.")
522
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlantLoop', "For #{plant_loop.name} capacity of #{chiller.name} is not available, total cooling capacity of plant loop will be incorrect when applying standard.")
523
523
  end
524
524
  # DistrictCooling
525
525
  elsif sc.to_DistrictCooling.is_initialized
@@ -535,7 +535,7 @@ class Standard
535
535
  end
536
536
 
537
537
  total_cooling_capacity_tons = OpenStudio.convert(total_cooling_capacity_w, 'W', 'ton').get
538
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name}, cooling capacity is #{total_cooling_capacity_tons.round} tons of refrigeration.")
538
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, cooling capacity is #{total_cooling_capacity_tons.round} tons of refrigeration.")
539
539
 
540
540
  return total_cooling_capacity_w
541
541
  end
@@ -661,7 +661,7 @@ class Standard
661
661
  end
662
662
  area_served_ft2 = OpenStudio.convert(area_served_m2, 'm^2', 'ft^2').get
663
663
 
664
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name}, serves #{area_served_ft2.round} ft^2.")
664
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, serves #{area_served_ft2.round} ft^2.")
665
665
 
666
666
  return area_served_m2
667
667
  end
@@ -720,11 +720,11 @@ class Standard
720
720
 
721
721
  # Report out the pumping type
722
722
  unless pri_control_type.nil?
723
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name}, primary pump type is #{pri_control_type}.")
723
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, primary pump type is #{pri_control_type}.")
724
724
  end
725
725
 
726
726
  unless sec_control_type.nil?
727
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name}, secondary pump type is #{sec_control_type}.")
727
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, secondary pump type is #{sec_control_type}.")
728
728
  end
729
729
 
730
730
  # Modify all the primary pumps
@@ -778,7 +778,7 @@ class Standard
778
778
 
779
779
  # Report out the pumping type
780
780
  unless control_type.nil?
781
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name}, pump type is #{control_type}.")
781
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, pump type is #{control_type}.")
782
782
  end
783
783
 
784
784
  return true
@@ -791,7 +791,7 @@ class Standard
791
791
 
792
792
  # Report out the pumping type
793
793
  unless control_type.nil?
794
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{plant_loop.name}, pump type is #{control_type}.")
794
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, pump type is #{control_type}.")
795
795
  end
796
796
 
797
797
  # Modify all primary pumps
@@ -1164,12 +1164,12 @@ class Standard
1164
1164
  if component.to_PumpConstantSpeed.is_initialized
1165
1165
  pump = component.to_PumpConstantSpeed.get
1166
1166
  pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1167
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1167
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1168
1168
  supply_w_per_gpm += pump_rated_w_per_gpm
1169
1169
  elsif component.to_PumpVariableSpeed.is_initialized
1170
1170
  pump = component.to_PumpVariableSpeed.get
1171
1171
  pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1172
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1172
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1173
1173
  supply_w_per_gpm += pump_rated_w_per_gpm
1174
1174
  end
1175
1175
  end
@@ -1181,19 +1181,19 @@ class Standard
1181
1181
  if component.to_PumpConstantSpeed.is_initialized
1182
1182
  pump = component.to_PumpConstantSpeed.get
1183
1183
  pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1184
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1184
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1185
1185
  demand_w_per_gpm += pump_rated_w_per_gpm
1186
1186
  elsif component.to_PumpVariableSpeed.is_initialized
1187
1187
  pump = component.to_PumpVariableSpeed.get
1188
1188
  pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1189
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1189
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1190
1190
  demand_w_per_gpm += pump_rated_w_per_gpm
1191
1191
  end
1192
1192
  end
1193
1193
 
1194
1194
  total_rated_w_per_gpm = supply_w_per_gpm + demand_w_per_gpm
1195
1195
 
1196
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Loop', "'#{loop_type}' Loop #{plant_loop.name} - Total #{total_rated_w_per_gpm} W/GPM - Supply #{supply_w_per_gpm} W/GPM - Demand #{demand_w_per_gpm} W/GPM")
1196
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Total #{total_rated_w_per_gpm} W/GPM - Supply #{supply_w_per_gpm} W/GPM - Demand #{demand_w_per_gpm} W/GPM")
1197
1197
 
1198
1198
  return total_rated_w_per_gpm
1199
1199
  end
@@ -9,7 +9,7 @@ class Standard
9
9
  # @author Andrew Parker, NREL
10
10
  # return [Double] The total number of full load hours for this schedule
11
11
  def schedule_constant_annual_equivalent_full_load_hrs(schedule_constant)
12
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ScheduleRuleset', "Calculating total annual EFLH for schedule: #{schedule_constant.name}")
12
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ScheduleConstant', "Calculating total annual EFLH for schedule: #{schedule_constant.name}")
13
13
 
14
14
  return annual_flh = schedule_constant.value * 8760
15
15
  end
@@ -431,7 +431,7 @@ class Standard
431
431
  sch_day.remove # remove day schedule for this rule
432
432
  rule.remove # remove the rule
433
433
  elsif !sch_day.additionalProperties.hasFeature("param_day_profile")
434
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ScheduleRuleset', "#{schedule.name} doesn't have a parametric forumla for #{rule.name} This profile will not be altered.")
434
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ScheduleRuleset', "#{schedule.name} doesn't have a parametric formula for #{rule.name} This profile will not be altered.")
435
435
  next
436
436
  else
437
437
  profiles[sch_day] = rule
@@ -791,7 +791,7 @@ class Standard
791
791
 
792
792
  # issue warning if order was changed
793
793
  if throw_order_warning
794
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ScheduleRuleset', "Pre-interpolated processed hash for #{sch_day.name} has one or more out of order conflicts: #{pre_fix_time_value_pairs}. Time values were adjsuted as shown to crate a valid profile: #{time_value_pairs}")
794
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ScheduleRuleset', "Pre-interpolated processed hash for #{sch_day.name} has one or more out of order conflicts: #{pre_fix_time_value_pairs}. Time values were adjusted as shown to crate a valid profile: #{time_value_pairs}")
795
795
  end
796
796
 
797
797
  # add interpolated values at ramp_frequency
@@ -19,7 +19,7 @@ class Standard
19
19
  def space_daylighted_areas(space, draw_daylight_areas_for_debugging = false)
20
20
  ### Begin the actual daylight area calculations ###
21
21
 
22
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, calculating daylighted areas.")
22
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, calculating daylighted areas.")
23
23
 
24
24
  result = { 'toplighted_area' => 0.0,
25
25
  'primary_sidelighted_area' => 0.0,
@@ -96,7 +96,7 @@ class Standard
96
96
 
97
97
  # Make sure there is one floor surface
98
98
  if floor_surface.nil?
99
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Could not find a floor in space #{space.name}, cannot determine daylighted areas.")
99
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Could not find a floor in space #{space.name}, cannot determine daylighted areas.")
100
100
  return result
101
101
  end
102
102
 
@@ -113,7 +113,7 @@ class Standard
113
113
  surface_normal_z = surface_normal.z
114
114
  unless surface_normal_z.abs < 0.001
115
115
  unless surface.subSurfaces.empty?
116
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Cannot currently handle non-vertical walls; skipping windows on #{surface.name} in #{space.name}.")
116
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Cannot currently handle non-vertical walls; skipping windows on #{surface.name} in #{space.name}.")
117
117
  next
118
118
  end
119
119
  end
@@ -121,7 +121,7 @@ class Standard
121
121
  surface.subSurfaces.sort.each do |sub_surface|
122
122
  next unless sub_surface.outsideBoundaryCondition == 'Outdoors' && (sub_surface.subSurfaceType == 'FixedWindow' || sub_surface.subSurfaceType == 'OperableWindow' || sub_surface.subSurfaceType == 'GlassDoor')
123
123
 
124
- # OpenStudio::logFree(OpenStudio::Debug, "openstudio.model.Space", "***#{sub_surface.name}***"
124
+ # OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.Space", "***#{sub_surface.name}***"
125
125
  total_window_area += sub_surface.netArea
126
126
 
127
127
  # Find the head height and sill height of the window
@@ -132,12 +132,12 @@ class Standard
132
132
  end
133
133
  sill_height_m = vertex_heights_above_floor.min
134
134
  head_height_m = vertex_heights_above_floor.max
135
- # OpenStudio::logFree(OpenStudio::Debug, "openstudio.model.Space", "head height = #{head_height_m.round(2)}m, sill height = #{sill_height_m.round(2)}m")
135
+ # OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.Space", "head height = #{head_height_m.round(2)}m, sill height = #{sill_height_m.round(2)}m")
136
136
 
137
137
  # Find the width of the window
138
138
  rot_origin = nil
139
139
  unless sub_surface.vertices.size == 4
140
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "A sub-surface in space #{space.name} has other than 4 vertices; this sub-surface will not be included in the daylighted area calculation.")
140
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "A sub-surface in space #{space.name} has other than 4 vertices; this sub-surface will not be included in the daylighted area calculation.")
141
141
  next
142
142
  end
143
143
  prev_vertex_on_floorplane = nil
@@ -163,7 +163,7 @@ class Standard
163
163
  elsif width_method == 'fixed'
164
164
  extra_width_m = OpenStudio.convert(2, 'ft', 'm').get
165
165
  end
166
- # OpenStudio::logFree(OpenStudio::Debug, "openstudio.model.Space", "Adding #{extra_width_m.round(2)}m to the width for the sidelighted area.")
166
+ # OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.Space", "Adding #{extra_width_m.round(2)}m to the width for the sidelighted area.")
167
167
 
168
168
  # Align the vertices with face coordinate system
169
169
  face_transform = OpenStudio::Transformation.alignFace(sub_surface.vertices)
@@ -182,7 +182,7 @@ class Standard
182
182
  max_x_val = vertex.x
183
183
  end
184
184
  end
185
- # OpenStudio::logFree(OpenStudio::Debug, "openstudio.model.Space", "min_x_val = #{min_x_val.round(2)}, max_x_val = #{max_x_val.round(2)}")
185
+ # OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.Space", "min_x_val = #{min_x_val.round(2)}, max_x_val = #{max_x_val.round(2)}")
186
186
 
187
187
  # Create polygons that are adjusted
188
188
  # to expand from the window shape to the sidelighteded areas.
@@ -197,7 +197,7 @@ class Standard
197
197
  new_x = vertex.x + extra_width_m
198
198
  else
199
199
  new_x = 99.9
200
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "A window in space #{space.name} is non-rectangular; this sub-surface will not be included in the primary daylighted area calculation. #{vertex.x} != #{min_x_val} or #{max_x_val}")
200
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "A window in space #{space.name} is non-rectangular; this sub-surface will not be included in the primary daylighted area calculation. #{vertex.x} != #{min_x_val} or #{max_x_val}")
201
201
  end
202
202
 
203
203
  # Zero-out the y for the bottom edge because the
@@ -214,7 +214,7 @@ class Standard
214
214
  # Make the new vertex
215
215
  new_vertex = OpenStudio::Point3d.new(new_x, new_y, new_z)
216
216
  pri_sidelit_sub_polygon << new_vertex
217
- # OpenStudio::logFree(OpenStudio::Info, "openstudio.model.Space", "#{vertex.x.round(2)}, #{vertex.y.round(2)}, #{vertex.z.round(2)} ==> #{new_vertex.x.round(2)}, #{new_vertex.y.round(2)}, #{new_vertex.z.round(2)}")
217
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.Space", "#{vertex.x.round(2)}, #{vertex.y.round(2)}, #{vertex.z.round(2)} to #{new_vertex.x.round(2)}, #{new_vertex.y.round(2)}, #{new_vertex.z.round(2)}")
218
218
 
219
219
  # Secondary sidelighted area
220
220
  # Move the x vertices outward by the specified amount.
@@ -224,7 +224,7 @@ class Standard
224
224
  new_x = vertex.x + extra_width_m
225
225
  else
226
226
  new_x = 99.9
227
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "A window in space #{space.name} is non-rectangular; this sub-surface will not be included in the secondary daylighted area calculation.")
227
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "A window in space #{space.name} is non-rectangular; this sub-surface will not be included in the secondary daylighted area calculation.")
228
228
  end
229
229
 
230
230
  # Add the head height of the window to all points
@@ -271,8 +271,8 @@ class Standard
271
271
  straight_upward = OpenStudio::Vector3d.new(0, 0, 1)
272
272
  unless surface_normal.to_s == straight_upward.to_s
273
273
  unless surface.subSurfaces.empty?
274
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Cannot currently handle non-horizontal roofs; skipping skylights on #{surface.name} in #{space.name}.")
275
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---Surface #{surface.name} has outward normal of #{surface_normal.to_s.gsub(/\[|\]/, '|')}; up is #{straight_upward.to_s.gsub(/\[|\]/, '|')}.")
274
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Cannot currently handle non-horizontal roofs; skipping skylights on #{surface.name} in #{space.name}.")
275
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---Surface #{surface.name} has outward normal of #{surface_normal.to_s.gsub(/\[|\]/, '|')}; up is #{straight_upward.to_s.gsub(/\[|\]/, '|')}.")
276
276
  next
277
277
  end
278
278
  end
@@ -280,7 +280,7 @@ class Standard
280
280
  surface.subSurfaces.sort.each do |sub_surface|
281
281
  next unless sub_surface.outsideBoundaryCondition == 'Outdoors' && sub_surface.subSurfaceType == 'Skylight'
282
282
 
283
- # OpenStudio::logFree(OpenStudio::Debug, "openstudio.model.Space", "***#{sub_surface.name}***")
283
+ # OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.Space", "***#{sub_surface.name}***")
284
284
  total_skylight_area += sub_surface.netArea
285
285
 
286
286
  # Project the skylight onto the floor plane
@@ -338,7 +338,7 @@ class Standard
338
338
  new_x = vertex.x + additional_extent_m
339
339
  else
340
340
  new_x = 99.9
341
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "A skylight in space #{space.name} is non-rectangular; this sub-surface will not be included in the daylighted area calculation.")
341
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "A skylight in space #{space.name} is non-rectangular; this sub-surface will not be included in the daylighted area calculation.")
342
342
  end
343
343
 
344
344
  # Move the y vertices outward by the specified amount.
@@ -348,7 +348,7 @@ class Standard
348
348
  new_y = vertex.y + additional_extent_m
349
349
  else
350
350
  new_y = 99.9
351
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "A skylight in space #{space.name} is non-rectangular; this sub-surface will not be included in the daylighted area calculation.")
351
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "A skylight in space #{space.name} is non-rectangular; this sub-surface will not be included in the daylighted area calculation.")
352
352
  end
353
353
 
354
354
  # Set z = 0 so that intersection works.
@@ -384,7 +384,7 @@ class Standard
384
384
  space_check_z_zero(space, sec_sidelit_polygons, 'sec_sidelit_polygons')
385
385
 
386
386
  # Join, then subtract
387
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '***Joining polygons***')
387
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '***Joining polygons***')
388
388
 
389
389
  # Join toplighted polygons into a single set
390
390
  combined_toplit_polygons = space_join_polygons(space, toplit_polygons, 0.01, 'toplit_polygons')
@@ -405,7 +405,7 @@ class Standard
405
405
  space_check_z_zero(space, combined_sec_sidelit_polygons, 'combined_sec_sidelit_polygons')
406
406
 
407
407
  # Make a new surface for each of the resulting polygons to visually inspect it
408
- # OpenStudio::logFree(OpenStudio::Debug, "openstudio.model.Space", "***Making Surfaces to view in SketchUp***")
408
+ # OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.Space", "***Making Surfaces to view in SketchUp***")
409
409
 
410
410
  # combined_toplit_polygons.each do |polygon|
411
411
  # dummy_space = OpenStudio::Model::Space.new(model)
@@ -443,7 +443,7 @@ class Standard
443
443
  # daylt_surf.setName("Flr")
444
444
  # end
445
445
 
446
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '***Subtracting overlapping areas***')
446
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '***Subtracting overlapping areas***')
447
447
 
448
448
  # Subtract lower-priority daylighting areas from higher priority ones
449
449
  pri_minus_top_polygons = space_a_polygons_minus_b_polygons(space, combined_pri_sidelit_polygons, combined_toplit_polygons, 'combined_pri_sidelit_polygons', 'combined_toplit_polygons')
@@ -466,7 +466,7 @@ class Standard
466
466
  sec_minus_top_minus_pri_polygons_at_floor = space_polygons_set_z(space, sec_minus_top_minus_pri_polygons, floor_z)
467
467
  combined_floor_polygons_at_floor = space_polygons_set_z(space, combined_floor_polygons, floor_z)
468
468
 
469
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '***Making Surfaces to view in SketchUp***')
469
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '***Making Surfaces to view in SketchUp***')
470
470
  dummy_space = OpenStudio::Model::Space.new(space.model)
471
471
 
472
472
  combined_toplit_polygons_at_floor.each do |polygon|
@@ -506,12 +506,12 @@ class Standard
506
506
  end
507
507
  end
508
508
 
509
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '***Calculating Daylighted Areas***')
509
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '***Calculating Daylighted Areas***')
510
510
 
511
511
  # Get the total floor area
512
512
  total_floor_area_m2 = space_total_area_of_polygons(space, combined_floor_polygons)
513
513
  total_floor_area_ft2 = OpenStudio.convert(total_floor_area_m2, 'm^2', 'ft^2').get
514
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "total_floor_area_ft2 = #{total_floor_area_ft2.round(1)}")
514
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "total_floor_area_ft2 = #{total_floor_area_ft2.round(1)}")
515
515
 
516
516
  # Toplighted area
517
517
  toplighted_area_m2 = space_area_a_polygons_overlap_b_polygons(space, combined_toplit_polygons, combined_floor_polygons, 'combined_toplit_polygons', 'combined_floor_polygons')
@@ -527,9 +527,9 @@ class Standard
527
527
  primary_sidelighted_area_ft2 = OpenStudio.convert(primary_sidelighted_area_m2, 'm^2', 'ft^2').get
528
528
  secondary_sidelighted_area_ft2 = OpenStudio.convert(secondary_sidelighted_area_m2, 'm^2', 'ft^2').get
529
529
 
530
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "toplighted_area_ft2 = #{toplighted_area_ft2.round(1)}")
531
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "primary_sidelighted_area_ft2 = #{primary_sidelighted_area_ft2.round(1)}")
532
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "secondary_sidelighted_area_ft2 = #{secondary_sidelighted_area_ft2.round(1)}")
530
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "toplighted_area_ft2 = #{toplighted_area_ft2.round(1)}")
531
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "primary_sidelighted_area_ft2 = #{primary_sidelighted_area_ft2.round(1)}")
532
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "secondary_sidelighted_area_ft2 = #{secondary_sidelighted_area_ft2.round(1)}")
533
533
 
534
534
  result['toplighted_area'] = toplighted_area_m2
535
535
  result['primary_sidelighted_area'] = primary_sidelighted_area_m2
@@ -581,63 +581,67 @@ class Standard
581
581
  construction_name = nil
582
582
  construction = sub_surface.construction
583
583
  if construction.is_initialized
584
- construction_name = construction.get.name.get.upcase
584
+ construction = construction.get
585
+ construction_name = construction.name.get.upcase
585
586
  else
586
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "For #{space.name}, could not determine construction for #{sub_surface.name}, will not be included in space_sidelighting_effective_aperture(space) calculation.")
587
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "For #{space.name}, could not determine construction for #{sub_surface.name}, will not be included in space_sidelighting_effective_aperture(space) calculation.")
587
588
  next
588
589
  end
589
590
 
590
591
  # Store VT for this construction in map if not already looked up
591
592
  if construction_name_to_vt_map[construction_name].nil?
592
593
 
593
- sql = space.model.sqlFile
594
-
595
- if sql.is_initialized
596
- sql = sql.get
597
-
598
- row_query = "SELECT RowName
599
- FROM tabulardatawithstrings
600
- WHERE ReportName='EnvelopeSummary'
601
- AND ReportForString='Entire Facility'
602
- AND TableName='Exterior Fenestration'
603
- AND Value='#{construction_name.upcase}'"
604
-
605
- row_id = sql.execAndReturnFirstString(row_query)
606
-
607
- if row_id.is_initialized
608
- row_id = row_id.get
594
+ # Get the VT from construction (Simple Glazing) if available
595
+ if construction.visibleTransmittance.is_initialized
596
+ construction_name_to_vt_map[construction_name] = construction.visibleTransmittance.get
597
+ else
598
+ # get the VT from the sql file
599
+ sql = space.model.sqlFile
600
+ if sql.is_initialized
601
+ sql = sql.get
602
+
603
+ row_query = "SELECT RowName
604
+ FROM tabulardatawithstrings
605
+ WHERE ReportName='EnvelopeSummary'
606
+ AND ReportForString='Entire Facility'
607
+ AND TableName='Exterior Fenestration'
608
+ AND Value='#{construction_name.upcase}'"
609
+
610
+ row_id = sql.execAndReturnFirstString(row_query)
611
+
612
+ if row_id.is_initialized
613
+ row_id = row_id.get
614
+ else
615
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "VT row ID not found for construction: #{construction_name}, #{sub_surface.name} will not be included in space_sidelighting_effective_aperture(space) calculation.")
616
+ row_id = 9999
617
+ end
618
+
619
+ vt_query = "SELECT Value
620
+ FROM tabulardatawithstrings
621
+ WHERE ReportName='EnvelopeSummary'
622
+ AND ReportForString='Entire Facility'
623
+ AND TableName='Exterior Fenestration'
624
+ AND ColumnName='Glass Visible Transmittance'
625
+ AND RowName='#{row_id}'"
626
+
627
+ vt = sql.execAndReturnFirstDouble(vt_query)
628
+
629
+ vt = if vt.is_initialized
630
+ vt.get
631
+ end
632
+
633
+ # Record the VT
634
+ construction_name_to_vt_map[construction_name] = vt
609
635
  else
610
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "VT row ID not found for construction: #{construction_name}, #{sub_surface.name} will not be included in space_sidelighting_effective_aperture(space) calculation.")
611
- row_id = 9999
636
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', 'Model has no sql file containing results, cannot lookup data.')
612
637
  end
613
-
614
- vt_query = "SELECT Value
615
- FROM tabulardatawithstrings
616
- WHERE ReportName='EnvelopeSummary'
617
- AND ReportForString='Entire Facility'
618
- AND TableName='Exterior Fenestration'
619
- AND ColumnName='Glass Visible Transmittance'
620
- AND RowName='#{row_id}'"
621
-
622
- vt = sql.execAndReturnFirstDouble(vt_query)
623
-
624
- vt = if vt.is_initialized
625
- vt.get
626
- end
627
-
628
- # Record the VT
629
- construction_name_to_vt_map[construction_name] = vt
630
-
631
- else
632
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', 'Model has no sql file containing results, cannot lookup data.')
633
638
  end
634
-
635
639
  end
636
640
 
637
641
  # Get the VT from the map
638
642
  vt = construction_name_to_vt_map[construction_name]
639
643
  if vt.nil?
640
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "For #{space.name}, could not determine VLT for #{construction_name}, will not be included in sidelighting effective aperture caluclation.")
644
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "For #{space.name}, could not determine VLT for #{construction_name}, will not be included in sidelighting effective aperture calculation.")
641
645
  vt = 0
642
646
  end
643
647
 
@@ -672,7 +676,7 @@ class Standard
672
676
  num_sub_surfaces = 0
673
677
 
674
678
  # Assume that well factor (WF) is 0.9 (all wells are less than 2 feet deep)
675
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', 'Assuming that all skylight wells are less than 2 feet deep to calculate skylight effective aperture.')
679
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', 'Assuming that all skylight wells are less than 2 feet deep to calculate skylight effective aperture.')
676
680
  wf = 0.9
677
681
 
678
682
  # Loop through all windows and add up area * VT
@@ -692,63 +696,68 @@ class Standard
692
696
  construction_name = nil
693
697
  construction = sub_surface.construction
694
698
  if construction.is_initialized
695
- construction_name = construction.get.name.get.upcase
699
+ construction = construction.get
700
+ construction_name = construction.name.get.upcase
696
701
  else
697
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "For #{space.name}, ")
702
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "For #{space.name}, could not determine construction for #{sub_surface.name}, will not be included in space_skylight_effective_aperture(space) calculation.")
698
703
  next
699
704
  end
700
705
 
701
706
  # Store VT for this construction in map if not already looked up
702
707
  if construction_name_to_vt_map[construction_name].nil?
703
708
 
704
- sql = space.model.sqlFile
705
-
706
- if sql.is_initialized
707
- sql = sql.get
708
-
709
- row_query = "SELECT RowName
710
- FROM tabulardatawithstrings
711
- WHERE ReportName='EnvelopeSummary'
712
- AND ReportForString='Entire Facility'
713
- AND TableName='Exterior Fenestration'
714
- AND Value='#{construction_name}'"
715
-
716
- row_id = sql.execAndReturnFirstString(row_query)
709
+ # Get the VT from construction (Simple Glazing) if available
710
+ if construction.visibleTransmittance.is_initialized
711
+ construction_name_to_vt_map[construction_name] = construction.visibleTransmittance.get
712
+ else
713
+ # get the VT from the sql file
714
+ sql = space.model.sqlFile
715
+ if sql.is_initialized
716
+ sql = sql.get
717
+
718
+ row_query = "SELECT RowName
719
+ FROM tabulardatawithstrings
720
+ WHERE ReportName='EnvelopeSummary'
721
+ AND ReportForString='Entire Facility'
722
+ AND TableName='Exterior Fenestration'
723
+ AND Value='#{construction_name}'"
724
+
725
+ row_id = sql.execAndReturnFirstString(row_query)
726
+
727
+ if row_id.is_initialized
728
+ row_id = row_id.get
729
+ else
730
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Data not found for query: #{row_query}")
731
+ next
732
+ end
733
+
734
+ vt_query = "SELECT Value
735
+ FROM tabulardatawithstrings
736
+ WHERE ReportName='EnvelopeSummary'
737
+ AND ReportForString='Entire Facility'
738
+ AND TableName='Exterior Fenestration'
739
+ AND ColumnName='Glass Visible Transmittance'
740
+ AND RowName='#{row_id}'"
741
+
742
+ vt = sql.execAndReturnFirstDouble(vt_query)
743
+
744
+ vt = if vt.is_initialized
745
+ vt.get
746
+ end
747
+
748
+ # Record the VT
749
+ construction_name_to_vt_map[construction_name] = vt
717
750
 
718
- if row_id.is_initialized
719
- row_id = row_id.get
720
751
  else
721
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "Data not found for query: #{row_query}")
722
- next
752
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', 'Model has no sql file containing results, cannot lookup data.')
723
753
  end
724
-
725
- vt_query = "SELECT Value
726
- FROM tabulardatawithstrings
727
- WHERE ReportName='EnvelopeSummary'
728
- AND ReportForString='Entire Facility'
729
- AND TableName='Exterior Fenestration'
730
- AND ColumnName='Glass Visible Transmittance'
731
- AND RowName='#{row_id}'"
732
-
733
- vt = sql.execAndReturnFirstDouble(vt_query)
734
-
735
- vt = if vt.is_initialized
736
- vt.get
737
- end
738
-
739
- # Record the VT
740
- construction_name_to_vt_map[construction_name] = vt
741
-
742
- else
743
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
744
754
  end
745
-
746
755
  end
747
756
 
748
757
  # Get the VT from the map
749
758
  vt = construction_name_to_vt_map[construction_name]
750
759
  if vt.nil?
751
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "For #{space.name}, could not determine VLT for #{construction_name}, will not be included in skylight effective aperture caluclation.")
760
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "For #{space.name}, could not determine VLT for #{construction_name}, will not be included in skylight effective aperture calculation.")
752
761
  vt = 0
753
762
  end
754
763
 
@@ -793,7 +802,7 @@ class Standard
793
802
  # @todo Determine the illuminance setpoint for the controls based on space type
794
803
  # @todo rotate sensor to face window (only needed for glare calcs)
795
804
  def space_add_daylighting_controls(space, remove_existing_controls, draw_daylight_areas_for_debugging = false)
796
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "******For #{space.name}, adding daylight controls.")
805
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "******For #{space.name}, adding daylight controls.")
797
806
 
798
807
  # Check for existing daylighting controls
799
808
  # and remove if specified in the input
@@ -801,9 +810,9 @@ class Standard
801
810
  unless existing_daylighting_controls.empty?
802
811
  if remove_existing_controls
803
812
  existing_daylighting_controls.each(&:remove)
804
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', "For #{space.name}, removed #{existing_daylighting_controls.size} existing daylight controls before adding new controls.")
813
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, removed #{existing_daylighting_controls.size} existing daylight controls before adding new controls.")
805
814
  else
806
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', "For #{space.name}, daylight controls were already present, no additional controls added.")
815
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, daylight controls were already present, no additional controls added.")
807
816
  return false
808
817
  end
809
818
  end
@@ -818,7 +827,7 @@ class Standard
818
827
  end
819
828
  end
820
829
  if ext_fen_area_m2.zero?
821
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', "For #{space.name}, daylighting control not applicable because no exterior fenestration is present.")
830
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, daylighting control not applicable because no exterior fenestration is present.")
822
831
  return false
823
832
  end
824
833
 
@@ -842,14 +851,14 @@ class Standard
842
851
  end
843
852
 
844
853
  # Output the daylight control requirements
845
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, toplighting control required = #{req_top_ctrl}")
846
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, primary sidelighting control required = #{req_pri_ctrl}")
847
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, secondary sidelighting control required = #{req_sec_ctrl}")
854
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, toplighting control required = #{req_top_ctrl}")
855
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, primary sidelighting control required = #{req_pri_ctrl}")
856
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, secondary sidelighting control required = #{req_sec_ctrl}")
848
857
 
849
858
  # Stop here if no lighting controls are required.
850
859
  # Do not put daylighting control points into the space.
851
860
  if !req_top_ctrl && !req_pri_ctrl && !req_sec_ctrl
852
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, no daylighting control is required.")
861
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, no daylighting control is required.")
853
862
  return false
854
863
  end
855
864
 
@@ -875,7 +884,7 @@ class Standard
875
884
  # TODO: stop skipping non-vertical walls
876
885
  unless surface_normal.z.abs < 0.001
877
886
  unless surface.subSurfaces.empty?
878
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Cannot currently handle non-vertical walls; skipping windows on #{surface.name} in #{space.name} for daylight sensor positioning.")
887
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Cannot currently handle non-vertical walls; skipping windows on #{surface.name} in #{space.name} for daylight sensor positioning.")
879
888
  next
880
889
  end
881
890
  end
@@ -883,8 +892,8 @@ class Standard
883
892
  # TODO: stop skipping non-horizontal roofs
884
893
  unless surface_normal.to_s == straight_upward.to_s
885
894
  unless surface.subSurfaces.empty?
886
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Cannot currently handle non-horizontal roofs; skipping skylights on #{surface.name} in #{space.name} for daylight sensor positioning.")
887
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---Surface #{surface.name} has outward normal of #{surface_normal.to_s.gsub(/\[|\]/, '|')}; up is #{straight_upward.to_s.gsub(/\[|\]/, '|')}.")
895
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Cannot currently handle non-horizontal roofs; skipping skylights on #{surface.name} in #{space.name} for daylight sensor positioning.")
896
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---Surface #{surface.name} has outward normal of #{surface_normal.to_s.gsub(/\[|\]/, '|')}; up is #{straight_upward.to_s.gsub(/\[|\]/, '|')}.")
888
897
  next
889
898
  end
890
899
  end
@@ -899,7 +908,7 @@ class Standard
899
908
  site_vertices = site_transformation * surface.vertices
900
909
  site_outward_normal = OpenStudio.getOutwardNormal(site_vertices)
901
910
  if site_outward_normal.empty?
902
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Could not compute outward normal for #{surface.name.get}")
911
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', "Could not compute outward normal for #{surface.name.get}")
903
912
  next
904
913
  end
905
914
  site_outward_normal = site_outward_normal.get
@@ -945,7 +954,7 @@ class Standard
945
954
  vertex_heights_above_floor << (vertex - vertex_on_floorplane).length
946
955
  end
947
956
  head_height_m = vertex_heights_above_floor.max
948
- # OpenStudio::logFree(OpenStudio::Info, "openstudio.model.Space", "---head height = #{head_height_m}m, sill height = #{sill_height_m}m")
957
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.Space", "---head height = #{head_height_m}m, sill height = #{sill_height_m}m")
949
958
 
950
959
  # Log the window properties to use when creating daylight sensors
951
960
  properties = { facade: facade, area_m2: net_area_m2, handle: sub_surface.handle, head_height_m: head_height_m, name: sub_surface.name.get.to_s }
@@ -1014,7 +1023,7 @@ class Standard
1014
1023
  # Get the zone that the space is in
1015
1024
  zone = space.thermalZone
1016
1025
  if zone.empty?
1017
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Space #{space.name} has no thermal zone")
1026
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', "Space #{space.name} has no thermal zone")
1018
1027
  else
1019
1028
  zone = zone.get
1020
1029
  end
@@ -1025,15 +1034,15 @@ class Standard
1025
1034
  sorted_skylights = skylights.sort_by { |_skylight, vals| [vals[:facade], vals[:area], vals[:name]] }
1026
1035
 
1027
1036
  # Report out the sorted skylights for debugging
1028
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, Skylights:")
1037
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, Skylights:")
1029
1038
  sorted_skylights.each do |sky, p|
1030
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{sky.name} #{p[:facade]}, area = #{p[:area_m2].round(2)} m^2")
1039
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{sky.name} #{p[:facade]}, area = #{p[:area_m2].round(2)} m^2")
1031
1040
  end
1032
1041
 
1033
1042
  # Report out the sorted windows for debugging
1034
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, Windows:")
1043
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, Windows:")
1035
1044
  sorted_windows.each do |win, p|
1036
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{win.name} #{p[:facade]}, area = #{p[:area_m2].round(2)} m^2")
1045
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{win.name} #{p[:facade]}, area = #{p[:area_m2].round(2)} m^2")
1037
1046
  end
1038
1047
 
1039
1048
  # Determine the sensor fractions and the attached windows
@@ -1057,7 +1066,7 @@ class Standard
1057
1066
  # get the zone that the space is in
1058
1067
  zone = space.thermalZone
1059
1068
  if zone.empty?
1060
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Space #{space.name}, cannot determine daylighted areas.")
1069
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', "Space #{space.name}, cannot determine daylighted areas.")
1061
1070
  return false
1062
1071
  else
1063
1072
  zone = space.thermalZone.get
@@ -1078,15 +1087,15 @@ class Standard
1078
1087
 
1079
1088
  # Sensors
1080
1089
  if sensor_1_frac > 0.0
1081
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', "For #{space.name}: sensor 1 controls #{(sensor_1_frac * 100).round}% of the zone lighting.")
1090
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}: sensor 1 controls #{(sensor_1_frac * 100).round}% of the zone lighting.")
1082
1091
  end
1083
1092
  if sensor_2_frac > 0.0
1084
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', "For #{space.name}: sensor 2 controls #{(sensor_2_frac * 100).round}% of the zone lighting.")
1093
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}: sensor 2 controls #{(sensor_2_frac * 100).round}% of the zone lighting.")
1085
1094
  end
1086
1095
 
1087
1096
  # First sensor
1088
1097
  if sensor_1_window
1089
- # OpenStudio::logFree(OpenStudio::Info, "openstudio.model.Space", "For #{self.name}, calculating daylighted areas.")
1098
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.Space", "For #{self.name}, calculating daylighted areas.")
1090
1099
  # runner.registerInfo("Daylight sensor 1 inside of #{sensor_1_frac.name}")
1091
1100
  sensor_1 = OpenStudio::Model::DaylightingControl.new(space.model)
1092
1101
  sensor_1.setName("#{space.name} Daylt Sensor 1")
@@ -1128,7 +1137,7 @@ class Standard
1128
1137
 
1129
1138
  # Second sensor
1130
1139
  if sensor_2_window
1131
- # OpenStudio::logFree(OpenStudio::Info, "openstudio.model.Space", "For #{self.name}, calculating daylighted areas.")
1140
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.Space", "For #{self.name}, calculating daylighted areas.")
1132
1141
  # runner.registerInfo("Daylight sensor 2 inside of #{sensor_2_frac.name}")
1133
1142
  sensor_2 = OpenStudio::Model::DaylightingControl.new(space.model)
1134
1143
  sensor_2.setName("#{space.name} Daylt Sensor 2")
@@ -1247,10 +1256,10 @@ class Standard
1247
1256
 
1248
1257
  # Don't create an object if there is no exterior wall area
1249
1258
  if exterior_wall_and_window_area_m2 <= 0.0
1250
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "For #{space.name}, no exterior wall area was found, no infiltration will be added.")
1259
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, no exterior wall area was found, no infiltration will be added.")
1251
1260
  return true
1252
1261
  end
1253
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "For #{space.name}, set infiltration rate to #{adj_infil_rate_cfm_per_ft2.round(3)} cfm/ft2 exterior wall area (aka #{basic_infil_rate_cfm_per_ft2} cfm/ft2 @75Pa).")
1262
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, set infiltration rate to #{adj_infil_rate_cfm_per_ft2.round(3)} cfm/ft2 exterior wall area (aka #{basic_infil_rate_cfm_per_ft2} cfm/ft2 @75Pa).")
1254
1263
 
1255
1264
  # Calculate the total infiltration, assuming
1256
1265
  # that it only occurs through exterior walls
@@ -1260,7 +1269,7 @@ class Standard
1260
1269
  # exterior surface areas (for the E+ input field)
1261
1270
  all_ext_infil_m3_per_s_per_m2 = tot_infil_m3_per_s / space.exteriorArea
1262
1271
 
1263
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.Space', "For #{space.name}, adj infil = #{all_ext_infil_m3_per_s_per_m2.round(8)} m^3/s*m^2.")
1272
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, adj infil = #{all_ext_infil_m3_per_s_per_m2.round(8)} m^3/s*m^2.")
1264
1273
 
1265
1274
  # Get any infiltration schedule already assigned to this space or its space type
1266
1275
  # If not, the always on schedule will be applied.
@@ -1547,9 +1556,9 @@ class Standard
1547
1556
  act_sch = act_sch.get.to_ScheduleRuleset.get
1548
1557
  w_per_person = schedule_ruleset_annual_min_max_value(act_sch)['max']
1549
1558
  else
1550
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "#{space.name} people activity schedule is not a Schedule:Ruleset. Assuming #{w_per_person}W/person.")
1559
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "#{space.name} people activity schedule is not a Schedule:Ruleset. Assuming #{w_per_person}W/person.")
1551
1560
  end
1552
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "#{space.name} people activity schedule not found. Assuming #{w_per_person}W/person.")
1561
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "#{space.name} people activity schedule not found. Assuming #{w_per_person}W/person.")
1553
1562
  end
1554
1563
 
1555
1564
  num_ppl = people.getNumberOfPeople(space.floorArea)
@@ -1568,7 +1577,7 @@ class Standard
1568
1577
  # Gas Equipment
1569
1578
  load_w += space.gasEquipmentPower
1570
1579
 
1571
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "#{space.name} has #{load_w.round}W of design internal loads.")
1580
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "#{space.name} has #{load_w.round}W of design internal loads.")
1572
1581
 
1573
1582
  return load_w
1574
1583
  end
@@ -1649,12 +1658,12 @@ class Standard
1649
1658
  default_sch_type = OpenStudio::Model::DefaultScheduleType.new('HoursofOperationSchedule')
1650
1659
  hours_of_operation = space.getDefaultSchedule(default_sch_type)
1651
1660
  if !hours_of_operation.is_initialized
1652
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Hours of Operation Schedule is not set for #{space.name}.")
1661
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Hours of Operation Schedule is not set for #{space.name}.")
1653
1662
  return nil
1654
1663
  end
1655
1664
  hours_of_operation = hours_of_operation.get
1656
1665
  if !hours_of_operation.to_ScheduleRuleset.is_initialized
1657
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Hours of Operation Schedule #{hours_of_operation.name} is not a ScheduleRuleset.")
1666
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Hours of Operation Schedule #{hours_of_operation.name} is not a ScheduleRuleset.")
1658
1667
  return nil
1659
1668
  end
1660
1669
  hours_of_operation = hours_of_operation.to_ScheduleRuleset.get
@@ -1692,7 +1701,7 @@ class Standard
1692
1701
 
1693
1702
  # some validation
1694
1703
  if times.size > 3 || unexpected_val || hoo_start.nil? || hoo_end.nil?
1695
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "#{hours_of_operation.name} does not look like a valid hours of operation schedule for parametric schedule generation.")
1704
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "#{hours_of_operation.name} does not look like a valid hours of operation schedule for parametric schedule generation.")
1696
1705
  return nil
1697
1706
  end
1698
1707
 
@@ -1748,7 +1757,7 @@ class Standard
1748
1757
 
1749
1758
  # some validation
1750
1759
  if times.size > 3 || unexpected_val || hoo_start.nil? || hoo_end.nil?
1751
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "#{hours_of_operation.name} does not look like a valid hours of operation schedule for parametric schedule generation.")
1760
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "#{hours_of_operation.name} does not look like a valid hours of operation schedule for parametric schedule generation.")
1752
1761
  return nil
1753
1762
  end
1754
1763
 
@@ -1855,7 +1864,7 @@ class Standard
1855
1864
  fails = []
1856
1865
  errs = 0
1857
1866
  polygons.each do |polygon|
1858
- # OpenStudio::logFree(OpenStudio::Error, "openstudio.model.Space", "Checking z=0: #{name} => #{polygon.to_s.gsub(/\[|\]/,'|')}.")
1867
+ # OpenStudio::logFree(OpenStudio::Error, "openstudio.standards.Space", "Checking z=0: #{name} is greater than or equal to #{polygon.to_s.gsub(/\[|\]/,'|')}.")
1859
1868
  polygon.each do |vertex|
1860
1869
  # clsss << vertex.class
1861
1870
  unless vertex.z == 0.0
@@ -1864,9 +1873,9 @@ class Standard
1864
1873
  end
1865
1874
  end
1866
1875
  end
1867
- # OpenStudio::logFree(OpenStudio::Error, "openstudio.model.Space", "Checking z=0: #{name} => #{clsss.uniq.to_s.gsub(/\[|\]/,'|')}.")
1876
+ # OpenStudio::logFree(OpenStudio::Error, "openstudio.standards.Space", "Checking z=0: #{name} is greater than or equal to #{clsss.uniq.to_s.gsub(/\[|\]/,'|')}.")
1868
1877
  if errs > 0
1869
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Space', "***FAIL*** #{space.name} z=0 failed for #{errs} vertices in #{name}; #{fails.join(', ')}.")
1878
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "***FAIL*** #{space.name} z=0 failed for #{errs} vertices in #{name}; #{fails.join(', ')}.")
1870
1879
  end
1871
1880
  end
1872
1881
 
@@ -1891,7 +1900,7 @@ class Standard
1891
1900
  # A method to zero-out the z vertex of an array of polygons
1892
1901
  # @api private
1893
1902
  def space_polygons_set_z(space, polygons, new_z)
1894
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "### #{polygons}")
1903
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "### #{polygons}")
1895
1904
 
1896
1905
  # Convert the final polygons back to OpenStudio
1897
1906
  new_polygons = []
@@ -1911,17 +1920,17 @@ class Standard
1911
1920
  # TODO does not actually wor
1912
1921
  # @api private
1913
1922
  def space_find_duplicate_vertices(space, ruby_polygon, tol = 0.001)
1914
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '***')
1923
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '***')
1915
1924
  duplicates = []
1916
1925
 
1917
1926
  combos = ruby_polygon.combination(2).to_a
1918
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "########{combos.size}")
1927
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "########{combos.size}")
1919
1928
  combos.each do |i, j|
1920
1929
  i_vertex = OpenStudio::Point3d.new(i[0], i[1], i[2])
1921
1930
  j_vertex = OpenStudio::Point3d.new(j[0], j[1], j[2])
1922
1931
 
1923
1932
  distance = OpenStudio.getDistance(i_vertex, j_vertex)
1924
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "------- #{i} to #{j} = #{distance}")
1933
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "------- #{i} to #{j} = #{distance}")
1925
1934
  if distance < tol
1926
1935
  duplicates << i
1927
1936
  end
@@ -1936,14 +1945,14 @@ class Standard
1936
1945
  def space_a_polygons_minus_b_polygons(space, a_polygons, b_polygons, a_name, b_name)
1937
1946
  final_polygons_ruby = []
1938
1947
 
1939
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "#{a_polygons.size} #{a_name} minus #{b_polygons.size} #{b_name}")
1948
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "#{a_polygons.size} #{a_name} minus #{b_polygons.size} #{b_name}")
1940
1949
 
1941
1950
  # Don't try to subtract anything if either set is empty
1942
1951
  if a_polygons.size.zero?
1943
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{a_name} - #{b_name}: #{a_name} contains no polygons.")
1952
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{a_name} - #{b_name}: #{a_name} contains no polygons.")
1944
1953
  return space_polygons_set_z(space, a_polygons, 0.0)
1945
1954
  elsif b_polygons.size.zero?
1946
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{a_name} - #{b_name}: #{b_name} contains no polygons.")
1955
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{a_name} - #{b_name}: #{b_name} contains no polygons.")
1947
1956
  return space_polygons_set_z(space, a_polygons, 0.0)
1948
1957
  end
1949
1958
 
@@ -1991,13 +2000,13 @@ class Standard
1991
2000
  end
1992
2001
 
1993
2002
  if num_small_polygons > 0
1994
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---Dropped #{num_small_polygons} small or invalid polygons resulting from subtraction.")
2003
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---Dropped #{num_small_polygons} small or invalid polygons resulting from subtraction.")
1995
2004
  end
1996
2005
 
1997
2006
  # Remove duplicate polygons
1998
2007
  unique_a_minus_b_polygons_ruby = a_minus_b_polygons_ruby.uniq
1999
2008
 
2000
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---Remove duplicates: #{a_minus_b_polygons_ruby.size} ==> #{unique_a_minus_b_polygons_ruby.size}")
2009
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---Remove duplicates: #{a_minus_b_polygons_ruby.size} to #{unique_a_minus_b_polygons_ruby.size}")
2001
2010
 
2002
2011
  # TODO: bug workaround?
2003
2012
  # If the result includes the a polygon, the a polygon
@@ -2007,16 +2016,16 @@ class Standard
2007
2016
  if unique_a_minus_b_polygons_ruby.include?(a_polygon_ruby)
2008
2017
  if unique_a_minus_b_polygons_ruby.size == 1
2009
2018
  final_polygons_ruby.concat([a_polygon_ruby])
2010
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '---includes only original polygon, keeping that one')
2019
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '---includes only original polygon, keeping that one')
2011
2020
  else
2012
2021
  # Remove the original polygon
2013
2022
  unique_a_minus_b_polygons_ruby.delete(a_polygon_ruby)
2014
2023
  final_polygons_ruby.concat(unique_a_minus_b_polygons_ruby)
2015
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '---includes the original and others; keeping all other polygons')
2024
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '---includes the original and others; keeping all other polygons')
2016
2025
  end
2017
2026
  else
2018
2027
  final_polygons_ruby.concat(unique_a_minus_b_polygons_ruby)
2019
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '---does not include original, keeping all resulting polygons')
2028
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '---does not include original, keeping all resulting polygons')
2020
2029
  end
2021
2030
  end
2022
2031
 
@@ -2030,13 +2039,13 @@ class Standard
2030
2039
  # next if unique_final_polygon_ruby.size == 4 # Don't check 4-sided polygons
2031
2040
  # dupes = space_find_duplicate_vertices(space, unique_final_polygon_ruby)
2032
2041
  # if dupes.size > 0
2033
- # OpenStudio::logFree(OpenStudio::Error, "openstudio.model.Space", "---Two polygons attached by line = #{unique_final_polygon_ruby.to_s.gsub(/\[|\]/,'|')}")
2042
+ # OpenStudio::logFree(OpenStudio::Error, "openstudio.standards.Space", "---Two polygons attached by line = #{unique_final_polygon_ruby.to_s.gsub(/\[|\]/,'|')}")
2034
2043
  # end
2035
2044
  # end
2036
2045
 
2037
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---Remove final duplicates: #{final_polygons_ruby.size} ==> #{unique_final_polygons_ruby.size}")
2046
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---Remove final duplicates: #{final_polygons_ruby.size} to #{unique_final_polygons_ruby.size}")
2038
2047
 
2039
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{a_name} minus #{b_name} = #{unique_final_polygons_ruby.size} polygons.")
2048
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{a_name} minus #{b_name} = #{unique_final_polygons_ruby.size} polygons.")
2040
2049
 
2041
2050
  # Convert the final polygons back to OpenStudio
2042
2051
  unique_final_polygons = space_ruby_polygons_to_point3d_z_zero(space, unique_final_polygons_ruby)
@@ -2048,13 +2057,13 @@ class Standard
2048
2057
  # [utilities.geometry.joinAll] <1> Expected polygons to join together
2049
2058
  # @api private
2050
2059
  def space_join_polygons(space, polygons, tol, name)
2051
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "Joining #{name} from #{space.name}")
2060
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "Joining #{name} from #{space.name}")
2052
2061
 
2053
2062
  combined_polygons = []
2054
2063
 
2055
2064
  # Don't try to combine an empty array of polygons
2056
2065
  if polygons.size.zero?
2057
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{name} contains no polygons, not combining.")
2066
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{name} contains no polygons, not combining.")
2058
2067
  return combined_polygons
2059
2068
  end
2060
2069
 
@@ -2114,7 +2123,7 @@ class Standard
2114
2123
  msg_log_2.disable
2115
2124
 
2116
2125
  if join_errs_2 > 0 || inner_loop_errs_2 > 0
2117
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, the workaround for joining polygons failed.")
2126
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, the workaround for joining polygons failed.")
2118
2127
  else
2119
2128
 
2120
2129
  # First polygon minus the already combined polygons
@@ -2131,15 +2140,15 @@ class Standard
2131
2140
 
2132
2141
  # Report logged errors to user
2133
2142
  if join_errs > 0
2134
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, #{join_errs} of #{polygons.size} #{space.name} were not joined properly due to limitations of the geometry calculation methods. The resulting daylighted areas will be smaller than they should be.")
2135
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "For #{space.name}, the #{name.gsub('_polygons', '')} daylight area calculations hit limitations. Double-check and possibly correct the fraction of lights controlled by each daylight sensor.")
2143
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, #{join_errs} of #{polygons.size} #{space.name} were not joined properly due to limitations of the geometry calculation methods. The resulting daylighted areas will be smaller than they should be.")
2144
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "For #{space.name}, the #{name.gsub('_polygons', '')} daylight area calculations hit limitations. Double-check and possibly correct the fraction of lights controlled by each daylight sensor.")
2136
2145
  end
2137
2146
  if inner_loop_errs > 0
2138
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "For #{space.name}, #{inner_loop_errs} of #{polygons.size} #{space.name} were not joined properly becasue the joined polygons have an internal hole. The resulting daylighted areas will be smaller than they should be.")
2139
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "For #{space.name}, the #{name.gsub('_polygons', '')} daylight area calculations hit limitations. Double-check and possibly correct the fraction of lights controlled by each daylight sensor.")
2147
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, #{inner_loop_errs} of #{polygons.size} #{space.name} were not joined properly because the joined polygons have an internal hole. The resulting daylighted areas will be smaller than they should be.")
2148
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "For #{space.name}, the #{name.gsub('_polygons', '')} daylight area calculations hit limitations. Double-check and possibly correct the fraction of lights controlled by each daylight sensor.")
2140
2149
  end
2141
2150
 
2142
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---Joined #{polygons.size} #{space.name} into #{combined_polygons.size} polygons.")
2151
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---Joined #{polygons.size} #{space.name} into #{combined_polygons.size} polygons.")
2143
2152
 
2144
2153
  return combined_polygons
2145
2154
  end
@@ -2153,7 +2162,7 @@ class Standard
2153
2162
  if area_m2.is_initialized
2154
2163
  total_area_m2 += area_m2.get
2155
2164
  else
2156
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Could not get area for a polygon in #{space.name}, daylighted area calculation will not be accurate.")
2165
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Could not get area for a polygon in #{space.name}, daylighted area calculation will not be accurate.")
2157
2166
  end
2158
2167
  end
2159
2168
 
@@ -2164,39 +2173,39 @@ class Standard
2164
2173
  # Assumes that a_polygons don't overlap one another, and that b_polygons don't overlap one another
2165
2174
  # @api private
2166
2175
  def space_area_a_polygons_overlap_b_polygons(space, a_polygons, b_polygons, a_name, b_name)
2167
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "#{a_polygons.size} #{a_name} overlaps #{b_polygons.size} #{b_name}")
2176
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "#{a_polygons.size} #{a_name} overlaps #{b_polygons.size} #{b_name}")
2168
2177
 
2169
2178
  overlap_area = 0
2170
2179
 
2171
2180
  # Don't try anything if either set is empty
2172
2181
  if a_polygons.size.zero?
2173
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{a_name} overlaps #{b_name}: #{a_name} contains no polygons.")
2182
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{a_name} overlaps #{b_name}: #{a_name} contains no polygons.")
2174
2183
  return overlap_area
2175
2184
  elsif b_polygons.size.zero?
2176
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "---#{a_name} overlaps #{b_name}: #{b_name} contains no polygons.")
2185
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "---#{a_name} overlaps #{b_name}: #{b_name} contains no polygons.")
2177
2186
  return overlap_area
2178
2187
  end
2179
2188
 
2180
2189
  # Loop through each base surface
2181
2190
  b_polygons.each do |b_polygon|
2182
- # OpenStudio::logFree(OpenStudio::Info, "openstudio.model.Space", "---b polygon = #{b_polygon_ruby.to_s.gsub(/\[|\]/,'|')}")
2191
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.Space", "---b polygon = #{b_polygon_ruby.to_s.gsub(/\[|\]/,'|')}")
2183
2192
 
2184
2193
  # Loop through each overlap surface and determine if it overlaps this base surface
2185
2194
  a_polygons.each do |a_polygon|
2186
- # OpenStudio::logFree(OpenStudio::Info, "openstudio.model.Space", "------a polygon = #{a_polygon_ruby.to_s.gsub(/\[|\]/,'|')}")
2195
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.Space", "------a polygon = #{a_polygon_ruby.to_s.gsub(/\[|\]/,'|')}")
2187
2196
 
2188
2197
  # If the entire a polygon is within the b polygon, count 100% of the area
2189
2198
  # as overlapping and remove a polygon from the list
2190
2199
  if OpenStudio.within(a_polygon, b_polygon, 0.01)
2191
2200
 
2192
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '---------a overlaps b ENTIRELY.')
2201
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '---------a overlaps b ENTIRELY.')
2193
2202
 
2194
2203
  area = OpenStudio.getArea(a_polygon)
2195
2204
  if area.is_initialized
2196
2205
  overlap_area += area.get
2197
2206
  next
2198
2207
  else
2199
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "Could not determine the area of #{a_polygon.to_s.gsub(/\[|\]/, '|')} in #{a_name}; #{a_name} overlaps #{b_name}.")
2208
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "Could not determine the area of #{a_polygon.to_s.gsub(/\[|\]/, '|')} in #{a_name}; #{a_name} overlaps #{b_name}.")
2200
2209
  end
2201
2210
 
2202
2211
  # If part of a polygon overlaps b polygon, determine the
@@ -2204,7 +2213,7 @@ class Standard
2204
2213
  # then add the difference in area to the total.
2205
2214
  elsif OpenStudio.intersects(a_polygon, b_polygon, 0.01)
2206
2215
 
2207
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '---------a overlaps b PARTIALLY.')
2216
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '---------a overlaps b PARTIALLY.')
2208
2217
 
2209
2218
  # Get the initial area
2210
2219
  area_initial = 0
@@ -2212,7 +2221,7 @@ class Standard
2212
2221
  if area.is_initialized
2213
2222
  area_initial = area.get
2214
2223
  else
2215
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "Could not determine the area of #{a_polygon.to_s.gsub(/\[|\]/, '|')} in #{a_name}; #{a_name} overlaps #{b_name}.")
2224
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "Could not determine the area of #{a_polygon.to_s.gsub(/\[|\]/, '|')} in #{a_name}; #{a_name} overlaps #{b_name}.")
2216
2225
  end
2217
2226
 
2218
2227
  # Perform the subtraction
@@ -2224,7 +2233,7 @@ class Standard
2224
2233
  # Skip polygons that have no vertices
2225
2234
  # resulting from the subtraction.
2226
2235
  if polygon.size.zero?
2227
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', "Zero-vertex polygon resulting from #{b_polygon.to_s.gsub(/\[|\]/, '|')} minus #{a_polygon.to_s.gsub(/\[|\]/, '|')}.")
2236
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "Zero-vertex polygon resulting from #{b_polygon.to_s.gsub(/\[|\]/, '|')} minus #{a_polygon.to_s.gsub(/\[|\]/, '|')}.")
2228
2237
  next
2229
2238
  end
2230
2239
  # Find the area of real polygons
@@ -2232,7 +2241,7 @@ class Standard
2232
2241
  if area.is_initialized
2233
2242
  area_final += area.get
2234
2243
  else
2235
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Space', "Could not determine the area of #{polygon.to_s.gsub(/\[|\]/, '|')} in #{a_name}; #{a_name} overlaps #{b_name}.")
2244
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Space', "Could not determine the area of #{polygon.to_s.gsub(/\[|\]/, '|')} in #{a_name}; #{a_name} overlaps #{b_name}.")
2236
2245
  end
2237
2246
  end
2238
2247
 
@@ -2242,7 +2251,7 @@ class Standard
2242
2251
  # There is no overlap
2243
2252
  else
2244
2253
 
2245
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Space', '---------a does not overlaps b at all.')
2254
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', '---------a does not overlaps b at all.')
2246
2255
 
2247
2256
  end
2248
2257
  end