openstudio-standards 0.2.10 → 0.2.11.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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