openstudio-standards 0.2.10 → 0.2.11.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. checksums.yaml +5 -5
  2. data/data/geometry/ASHRAE90120042007LargeHotel.osm +101 -0
  3. data/data/geometry/ASHRAE90120042007RetailStandalone.osm +220 -0
  4. data/data/geometry/ASHRAE9012010LargeHotel.osm +101 -0
  5. data/data/geometry/ASHRAE9012010RetailStandalone.osm +218 -32
  6. data/data/geometry/ASHRAE9012013FullServiceRestaurant.osm +17 -0
  7. data/data/geometry/ASHRAE9012013Hospital.osm +288 -0
  8. data/data/geometry/ASHRAE9012013LargeHotel.osm +113 -12
  9. data/data/geometry/ASHRAE9012013LargeOffice.osm +205 -1
  10. data/data/geometry/ASHRAE9012013MediumOffice.osm +103 -1
  11. data/data/geometry/ASHRAE9012013Outpatient.osm +390 -102
  12. data/data/geometry/ASHRAE9012013PrimarySchool.osm +424 -0
  13. data/data/geometry/ASHRAE9012013QuickServiceRestaurant.osm +16 -0
  14. data/data/geometry/ASHRAE9012013RetailStandalone.osm +220 -0
  15. data/data/geometry/ASHRAE9012013SecondarySchool.osm +543 -0
  16. data/data/geometry/ASHRAE9012013SmallHotel.osm +50 -0
  17. data/data/geometry/ASHRAE9012013SmallOffice.osm +33 -0
  18. data/data/geometry/ASHRAE9012013Warehouse.osm +475 -238
  19. data/data/geometry/ASHRAEFullServiceRestaurant.osm +16 -0
  20. data/data/geometry/ASHRAEHospital.osm +288 -0
  21. data/data/geometry/ASHRAELargeOffice.osm +205 -1
  22. data/data/geometry/ASHRAELargeOfficeDetailed.osm +32 -32
  23. data/data/geometry/ASHRAEMediumOffice.osm +103 -1
  24. data/data/geometry/ASHRAEOutpatient.osm +390 -102
  25. data/data/geometry/ASHRAEPrimarySchool.osm +424 -0
  26. data/data/geometry/ASHRAEQuickServiceRestaurant.osm +16 -0
  27. data/data/geometry/ASHRAESecondarySchool.osm +1011 -162
  28. data/data/geometry/ASHRAESmallHotel.osm +50 -0
  29. data/data/geometry/ASHRAESmallOffice.osm +33 -0
  30. data/data/geometry/ASHRAEWarehouse.osm +476 -238
  31. data/data/standards/manage_OpenStudio_Standards.rb +1 -1
  32. data/data/standards/openstudio_standards_duplicates_log.csv +16 -0
  33. data/data/standards/test_performance_expected_dd_results.csv +1216 -1216
  34. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.ddy +536 -0
  35. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.epw +8768 -0
  36. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.stat +544 -0
  37. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.ddy +533 -0
  38. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.epw +8768 -0
  39. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.stat +553 -0
  40. data/data/weather/VNM_Hanoi.488200_IWEC.ddy +533 -0
  41. data/data/weather/VNM_Hanoi.488200_IWEC.epw +8768 -0
  42. data/data/weather/VNM_Hanoi.488200_IWEC.stat +544 -0
  43. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.ddy +533 -0
  44. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.epw +8768 -0
  45. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.stat +546 -0
  46. data/lib/openstudio-standards.rb +27 -0
  47. data/lib/openstudio-standards/btap/btap.model.rb +4 -4
  48. data/lib/openstudio-standards/btap/btap_result.rb +8 -8
  49. data/lib/openstudio-standards/btap/economics.rb +11 -11
  50. data/lib/openstudio-standards/btap/envelope.rb +5 -5
  51. data/lib/openstudio-standards/btap/hvac.rb +55 -11
  52. data/lib/openstudio-standards/btap/measures.rb +7 -7
  53. data/lib/openstudio-standards/btap/spaceloads.rb +4 -4
  54. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +105 -1
  55. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +2 -2
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +0 -8
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +0 -8
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +0 -8
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +0 -8
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +6 -1
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +3 -1
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +22 -0
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +32 -0
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +33 -0
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +32 -0
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +25 -0
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +35 -0
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +11 -0
  71. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +17 -3
  72. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +9 -0
  73. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +9 -0
  74. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +22 -3
  75. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +9 -0
  76. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +9 -0
  77. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +107 -5
  78. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +9 -0
  79. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +3 -0
  80. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -0
  81. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +0 -8
  82. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +2 -2
  83. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +2 -4
  84. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -4
  85. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +2 -2
  86. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +45 -5
  87. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +1 -1
  88. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +21 -2
  89. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -364
  90. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +4 -0
  91. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +4 -5
  92. data/lib/openstudio-standards/refs/references.rb +4 -0
  93. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +283 -97
  94. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +2 -2
  95. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -1
  96. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +1 -1
  97. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +1 -1
  98. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +5 -5
  99. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +3 -1
  100. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
  101. data/lib/openstudio-standards/standards/Standards.Construction.rb +53 -45
  102. data/lib/openstudio-standards/standards/Standards.Fan.rb +10 -2
  103. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +4 -4
  104. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -1
  105. data/lib/openstudio-standards/standards/Standards.Model.rb +39 -18
  106. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +8 -8
  107. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +12 -12
  108. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +1 -1
  109. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +2 -2
  110. data/lib/openstudio-standards/standards/Standards.Space.rb +190 -181
  111. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +36 -59
  112. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +3 -3
  113. data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
  114. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +16 -12
  115. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +1 -1
  116. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +16 -5
  117. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
  118. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +159 -8
  119. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +1354 -1075
  120. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +557 -17
  121. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +28 -28
  122. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +36 -36
  123. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +233 -6
  124. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +159 -8
  125. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +1356 -1077
  126. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +480 -0
  127. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +28 -28
  128. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +36 -36
  129. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +241 -14
  130. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +0 -8
  131. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +12 -7
  132. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +159 -8
  133. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +1367 -1087
  134. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +480 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +36 -36
  136. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +233 -5
  137. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +20 -27
  138. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -3
  139. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +159 -8
  140. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +1432 -1138
  141. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +480 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +36 -36
  143. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +241 -5
  144. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zone_sets.json +37 -0
  145. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zones.json +39 -15
  146. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +489 -7
  147. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +250 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +1920 -0
  150. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +5265 -9
  151. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +159 -8
  152. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +2441 -1925
  153. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +16658 -2578
  154. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +212 -8
  155. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +11 -1
  156. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +159 -8
  157. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +2403 -1889
  158. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +16664 -2584
  159. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +209 -7
  160. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +11 -1
  161. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +4113 -513
  162. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_sets.json +40 -40
  163. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.elevators.json +1 -1
  164. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ground_temperatures.json +650 -0
  165. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps.json +90 -2
  166. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps_heating.json +25 -5
  167. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +1909 -32
  168. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.water_heaters.json +8 -8
  169. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +147 -155
  170. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  171. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +29 -10
  172. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
  173. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +45 -73
  174. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +4 -72
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.boilers.json +20 -0
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.chillers.json +400 -0
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +4444 -0
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_sets.json +391 -0
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +536 -0
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.elevators.json +36 -0
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +169 -0
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ground_temperatures.json +650 -0
  183. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps.json +290 -0
  184. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps_heating.json +164 -0
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +40 -0
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.motors.json +274 -0
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.prototype_inputs.json +704 -0
  188. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.refrigeration_compressors.json +22 -0
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +6424 -0
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.unitary_acs.json +142 -0
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +72 -0
  192. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps.json +31 -0
  193. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps_heating.json +13 -0
  194. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +829 -0
  195. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +24 -0
  196. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +19 -0
  197. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerSingleSpeed.rb +5 -0
  198. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerTwoSpeed.rb +5 -0
  199. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +16 -0
  200. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +37 -0
  201. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +34 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +80 -0
  203. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +68 -0
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +146 -0
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ThermalZone.rb +23 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +8 -0
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +16 -0
  208. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.heat_pumps_heating.json +5 -5
  209. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +18 -0
  210. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.heat_pumps_heating.json +5 -5
  211. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.heat_pumps_heating.json +5 -5
  212. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.heat_pumps_heating.json +5 -5
  213. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.heat_pumps_heating.json +5 -5
  214. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.heat_pumps_heating.json +5 -5
  215. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.heat_pumps_heating.json +5 -5
  216. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.heat_pumps_heating.json +1 -1
  217. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.heat_pumps_heating.json +5 -5
  218. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.heat_pumps_heating.json +5 -5
  219. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps_heating.json +5 -5
  220. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.heat_pumps_heating.json +5 -5
  221. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.heat_pumps_heating.json +5 -5
  222. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.heat_pumps_heating.json +5 -5
  223. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.heat_pumps_heating.json +5 -5
  224. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.heat_pumps_heating.json +5 -5
  225. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.heat_pumps_heating.json +5 -5
  226. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.heat_pumps_heating.json +5 -5
  227. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.heat_pumps_heating.json +5 -5
  228. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.heat_pumps_heating.json +5 -5
  229. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.heat_pumps_heating.json +5 -5
  230. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +5 -1
  231. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +5 -1
  232. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +5 -2
  233. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +8 -2
  234. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +12 -12
  235. data/lib/openstudio-standards/version.rb +1 -1
  236. data/lib/openstudio-standards/weather/Weather.Model.rb +4 -0
  237. metadata +102 -18
  238. data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
  239. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  240. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  241. data/data/standards/OpenStudio_Standards-cbes(space_types).xlsx +0 -0
  242. data/data/standards/OpenStudio_Standards-cbes.xlsx +0 -0
  243. data/data/standards/OpenStudio_Standards-deer(space_types).xlsx +0 -0
  244. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  245. data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
  246. data/data/standards/OpenStudio_Standards_LA100.xlsx +0 -0
  247. data/data/standards/junk/legacy_dd_results - Copy.csv +0 -960
  248. data/data/standards/junk/legacy_dd_results.csv +0 -960
  249. data/data/standards/junk/legacy_dd_results_new - Copy.csv +0 -960
  250. data/data/standards/junk/legacy_dd_results_new.csv +0 -960
  251. data/data/standards/junk/legacy_dd_results_original.csv +0 -960
  252. data/lib/openstudio-standards/standards/necb/NECB2011/newway.json +0 -8102
@@ -6,7 +6,7 @@ class Standard
6
6
  #
7
7
  # @return [Bool] returns true if successful, false if not
8
8
  def air_terminal_single_duct_parallel_piu_reheat_apply_prm_baseline_fan_power(air_terminal_single_duct_parallel_piu_reheat)
9
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.AirTerminalSingleDuctParallelPIUReheat', "Setting PIU fan power for #{air_terminal_single_duct_parallel_piu_reheat.name}.")
9
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirTerminalSingleDuctParallelPIUReheat', "Setting PIU fan power for #{air_terminal_single_duct_parallel_piu_reheat.name}.")
10
10
 
11
11
  # Determine the fan sizing flow rate, min flow rate,
12
12
  # and W/cfm
@@ -54,7 +54,7 @@ class Standard
54
54
  # Calculate the newly set efficacy
55
55
  fan_power_new_w = fan_rise_new_pa * max_sec_flow_rate_m3_per_s / fan_tot_eff
56
56
  fan_efficacy_new_w_per_cfm = fan_power_new_w / max_sec_flow_rate_cfm
57
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.AirTerminalSingleDuctParallelPIUReheat', "For #{air_terminal_single_duct_parallel_piu_reheat.name}: fan efficacy set to #{fan_efficacy_new_w_per_cfm.round(2)} W/cfm.")
57
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirTerminalSingleDuctParallelPIUReheat', "For #{air_terminal_single_duct_parallel_piu_reheat.name}: fan efficacy set to #{fan_efficacy_new_w_per_cfm.round(2)} W/cfm.")
58
58
 
59
59
  return true
60
60
  end
@@ -67,7 +67,7 @@ class Standard
67
67
  if !z_heights.empty?
68
68
  z = z_heights.min
69
69
  else
70
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "For #{building_story.name} could not find the minimum_z_value, which means the story has no spaces assigned or the spaces have no surfaces.")
70
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.BuildingStory', "For #{building_story.name} could not find the minimum_z_value, which means the story has no spaces assigned or the spaces have no surfaces.")
71
71
  end
72
72
 
73
73
  return z
@@ -162,7 +162,7 @@ class Standard
162
162
 
163
163
  # Append the name with size and kw/ton
164
164
  chiller_electric_eir.setName("#{chiller_electric_eir.name} #{capacity_tons.round}tons #{kw_per_ton.round(1)}kW/ton")
165
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.ChillerElectricEIR', "For #{template}: #{chiller_electric_eir.name}: #{cooling_type} #{condenser_type} #{compressor_type} Capacity = #{capacity_tons.round}tons; COP = #{cop.round(1)} (#{kw_per_ton.round(1)}kW/ton)")
165
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ChillerElectricEIR', "For #{template}: #{chiller_electric_eir.name}: #{cooling_type} #{condenser_type} #{compressor_type} Capacity = #{capacity_tons.round}tons; COP = #{cop.round(1)} (#{kw_per_ton.round(1)}kW/ton)")
166
166
 
167
167
  return successfully_set_all_properties
168
168
  end
@@ -118,7 +118,7 @@ class Standard
118
118
  #sensible heat ratio can't be pre-assigned as 1 because it should be the value at conditions defined in ASHRAE Standard 127 => 26.7 °C drybulb/19.4 °C wetbulb.
119
119
  crac_sensible_heat_ratio = coil_cooling_dx_single_speed.autosizedRatedSensibleHeatRatio.get
120
120
  else
121
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model.autosizedRatedSensibleHeatRatio', "Failed to get autosized sensible heat ratio")
121
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.CoilCoolingDXSingleSpeed', 'Failed to get autosized sensible heat ratio')
122
122
  end
123
123
  cop = crac_minimum_scop/crac_sensible_heat_ratio
124
124
  cop = cop.round(2)
@@ -14,7 +14,7 @@ class Standard
14
14
  elsif coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.is_initialized
15
15
  capacity_w = coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.get
16
16
  else
17
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_two_speed.name} capacity is not available, cannot apply efficiency standard.")
17
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{coil_cooling_dx_two_speed.name} capacity is not available, cannot apply efficiency standard.")
18
18
  return 0.0
19
19
  end
20
20
 
@@ -62,7 +62,7 @@ class Standard
62
62
  min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
63
63
  cop = seer_to_cop_cooling_with_fan(min_seer)
64
64
  new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
65
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
65
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
66
66
  end
67
67
 
68
68
  # If specified as EER
@@ -70,7 +70,7 @@ class Standard
70
70
  min_eer = ac_props['minimum_energy_efficiency_ratio']
71
71
  cop = eer_to_cop(min_eer)
72
72
  new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
73
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
73
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
74
74
  end
75
75
 
76
76
  # if specified as SEER (heat pump)
@@ -78,7 +78,7 @@ class Standard
78
78
  min_seer = ac_props['minimum_seasonal_efficiency']
79
79
  cop = seer_to_cop_cooling_with_fan(min_seer)
80
80
  new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
81
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
81
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
82
82
  end
83
83
 
84
84
  # If specified as EER (heat pump)
@@ -86,7 +86,7 @@ class Standard
86
86
  min_eer = ac_props['minimum_full_load_efficiency']
87
87
  cop = eer_to_cop(min_eer)
88
88
  new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
89
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
89
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
90
90
  end
91
91
 
92
92
  # Rename
@@ -18,8 +18,10 @@ module CoilDX
18
18
  sub_category = 'Single Package'
19
19
  elsif coil_dx.name.get.to_s.include?('Split System')
20
20
  sub_category = 'Split System'
21
- elsif coil_dx.name.get.to_s.include?('Minisplit')
21
+ elsif coil_dx.name.get.to_s.include?('Central Air Source HP')
22
22
  sub_category = 'Split System'
23
+ elsif coil_dx.name.get.to_s.include?('Minisplit HP')
24
+ sub_category = 'Minisplit System'
23
25
  elsif coil_dx.name.get.to_s.include?('CRAC')
24
26
  sub_category = 'CRAC'
25
27
  end
@@ -16,7 +16,7 @@ class Standard
16
16
  elsif coil_heating_gas_multi_stage.autosizedStage4NominalCapacity.is_initialized
17
17
  capacity_w = coil_heating_gas_multi_stage.autosizedStage4NominalCapacity.get
18
18
  else
19
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_heating_gas_multi_stage.name} capacity is not available, cannot apply efficiency standard.")
19
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGasMultiStage', "For #{coil_heating_gas_multi_stage.name} capacity is not available, cannot apply efficiency standard.")
20
20
  successfully_set_all_properties = false
21
21
  return successfully_set_all_properties
22
22
  end
@@ -19,11 +19,11 @@ class Standard
19
19
  # @return [Bool] returns true if successful, false if not
20
20
  # @todo Put in Phlyroy's logic for inferring the insulation layer of a construction
21
21
  def construction_set_u_value(construction, target_u_value_ip, insulation_layer_name = nil, intended_surface_type = 'ExteriorWall', target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
22
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "Setting U-Value for #{construction.name}.")
22
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting U-Value for #{construction.name}.")
23
23
 
24
24
  # Skip layer-by-layer fenestration constructions
25
25
  if construction.isFenestration
26
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Can only set the u-value of opaque constructions or simple glazing. #{construction.name} is not opaque or simple glazing.")
26
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Can only set the u-value of opaque constructions or simple glazing. #{construction.name} is not opaque or simple glazing.")
27
27
  return false
28
28
  end
29
29
 
@@ -45,6 +45,14 @@ class Standard
45
45
  return true
46
46
  end
47
47
 
48
+ min_r_value_si = film_coefficients_r_value(intended_surface_type, target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
49
+ max_u_value_si = 1.0 / min_r_value_si
50
+ max_u_value_ip = OpenStudio.convert(max_u_value_si, 'W/m^2*K', 'Btu/ft^2*hr*R').get
51
+ if target_u_value_ip >= max_u_value_ip
52
+ target_u_value_ip = 1.0 / OpenStudio.convert(min_r_value_si + 0.001, 'm^2*K/W', 'ft^2*hr*R/Btu').get
53
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is greater than the sum of the inside and outside resistance, and the max U-value (6.636 SI) is used instead.")
54
+ end
55
+
48
56
  # Convert the target U-value to SI
49
57
  target_u_value_ip = target_u_value_ip.to_f
50
58
  target_r_value_ip = 1.0 / target_u_value_ip
@@ -52,11 +60,11 @@ class Standard
52
60
  target_u_value_si = OpenStudio.convert(target_u_value_ip, 'Btu/ft^2*hr*R', 'W/m^2*K').get
53
61
  target_r_value_si = 1.0 / target_u_value_si
54
62
 
55
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "#{construction.name}.")
56
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_u_value_ip = #{target_u_value_ip.round(3)} for #{construction.name}.")
57
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_r_value_ip = #{target_r_value_ip.round(2)} for #{construction.name}.")
58
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_u_value_si = #{target_u_value_si.round(3)} for #{construction.name}.")
59
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_r_value_si = #{target_r_value_si.round(2)} for #{construction.name}.")
63
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "#{construction.name}.")
64
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_ip = #{target_u_value_ip.round(3)} for #{construction.name}.")
65
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_ip = #{target_r_value_ip.round(2)} for #{construction.name}.")
66
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_si = #{target_u_value_si.round(3)} for #{construction.name}.")
67
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_si = #{target_r_value_si.round(2)} for #{construction.name}.")
60
68
 
61
69
  # Determine the R-value of the non-insulation layers
62
70
  other_layer_r_value_si = 0.0
@@ -74,7 +82,7 @@ class Standard
74
82
  # This is the desired R-value of the insulation.
75
83
  ins_r_value_si = target_r_value_si - other_layer_r_value_si
76
84
  if ins_r_value_si <= 0.0
77
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will not be modified.")
85
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will not be modified.")
78
86
  return false
79
87
  end
80
88
  ins_r_value_ip = OpenStudio.convert(ins_r_value_si, 'm^2*K/W', 'ft^2*h*R/Btu').get
@@ -84,7 +92,7 @@ class Standard
84
92
  next unless layer.name.get == insulation_layer_name
85
93
  if layer.to_StandardOpaqueMaterial.is_initialized
86
94
  layer = layer.to_StandardOpaqueMaterial.get
87
- layer.setThickness(ins_r_value_si * layer.getConductivity)
95
+ layer.setThickness(ins_r_value_si * layer.conductivity)
88
96
  layer.setName("#{layer.name} R-#{ins_r_value_ip.round(2)}")
89
97
  break # Stop looking for the insulation layer once found
90
98
  elsif layer.to_MasslessOpaqueMaterial.is_initialized
@@ -123,16 +131,16 @@ class Standard
123
131
  # target_u_value before modifying insulation thickness. Film values from 90.1-2010 A9.4.1 Air Films
124
132
  # @return [Bool] returns true if successful, false if not
125
133
  def construction_set_glazing_u_value(construction, target_u_value_ip, intended_surface_type = 'ExteriorWall', target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
126
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "Setting U-Value for #{construction.name}.")
134
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting U-Value for #{construction.name}.")
127
135
 
128
136
  # Skip layer-by-layer fenestration constructions
129
137
  unless construction_simple_glazing?(construction)
130
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Can only set the u-value of simple glazing. #{construction.name} is not simple glazing.")
138
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Can only set the u-value of simple glazing. #{construction.name} is not simple glazing.")
131
139
  return false
132
140
  end
133
141
 
134
142
  glass_layer = construction.layers.first.to_SimpleGlazing.get
135
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
143
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
136
144
 
137
145
  # Convert the target U-value to SI
138
146
  target_u_value_ip = target_u_value_ip.to_f
@@ -141,11 +149,11 @@ class Standard
141
149
  target_u_value_si = OpenStudio.convert(target_u_value_ip, 'Btu/ft^2*hr*R', 'W/m^2*K').get
142
150
  target_r_value_si = 1.0 / target_u_value_si
143
151
 
144
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "#{construction.name}.")
145
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_u_value_ip = #{target_u_value_ip.round(3)} for #{construction.name}.")
146
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_r_value_ip = #{target_r_value_ip.round(2)} for #{construction.name}.")
147
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_u_value_si = #{target_u_value_si.round(3)} for #{construction.name}.")
148
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---target_r_value_si = #{target_r_value_si.round(2)} for #{construction.name}.")
152
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "#{construction.name}.")
153
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_ip = #{target_u_value_ip.round(3)} for #{construction.name}.")
154
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_ip = #{target_r_value_ip.round(2)} for #{construction.name}.")
155
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_si = #{target_u_value_si.round(3)} for #{construction.name}.")
156
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_si = #{target_r_value_si.round(2)} for #{construction.name}.")
149
157
 
150
158
  # Determine the R-value of the air films, if requested
151
159
  film_coeff_r_value_si = 0.0
@@ -154,23 +162,23 @@ class Standard
154
162
  film_coeff_u_value_ip = OpenStudio.convert(film_coeff_u_value_si, 'W/m^2*K', 'Btu/ft^2*hr*R').get
155
163
  film_coeff_r_value_ip = 1.0 / film_coeff_u_value_ip
156
164
 
157
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_r_value_si = #{film_coeff_r_value_si.round(2)} for #{construction.name}.")
158
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_u_value_si = #{film_coeff_u_value_si.round(2)} for #{construction.name}.")
159
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_u_value_ip = #{film_coeff_u_value_ip.round(2)} for #{construction.name}.")
160
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_r_value_ip = #{film_coeff_r_value_ip.round(2)} for #{construction.name}.")
165
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_r_value_si = #{film_coeff_r_value_si.round(2)} for #{construction.name}.")
166
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_u_value_si = #{film_coeff_u_value_si.round(2)} for #{construction.name}.")
167
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_u_value_ip = #{film_coeff_u_value_ip.round(2)} for #{construction.name}.")
168
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_r_value_ip = #{film_coeff_r_value_ip.round(2)} for #{construction.name}.")
161
169
 
162
170
  # Determine the difference between the desired R-value
163
171
  # and the R-value of the and air films.
164
172
  # This is the desired R-value of the insulation.
165
173
  ins_r_value_si = target_r_value_si - film_coeff_r_value_si
166
174
  if ins_r_value_si <= 0.0
167
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Requested U-value of #{target_u_value_ip} Btu/ft^2*hr*R for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)} Btu/ft^2*hr*R; U-value will not be modified.")
175
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} Btu/ft^2*hr*R for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)} Btu/ft^2*hr*R; U-value will not be modified.")
168
176
  return false
169
177
  end
170
178
  ins_u_value_si = 1.0 / ins_r_value_si
171
179
 
172
180
  if ins_u_value_si > 7.0
173
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)}; setting U-value to EnergyPlus limit of 7.0 W/m^2*K (1.23 Btu/ft^2*hr*R).")
181
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)}; setting U-value to EnergyPlus limit of 7.0 W/m^2*K (1.23 Btu/ft^2*hr*R).")
174
182
  ins_u_value_si = 7.0
175
183
  end
176
184
 
@@ -182,10 +190,10 @@ class Standard
182
190
  glass_layer.setUFactor(ins_u_value_si)
183
191
  glass_layer.setName("#{glass_layer.name} U-#{ins_u_value_ip.round(2)}")
184
192
 
185
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---ins_r_value_ip = #{ins_r_value_ip.round(2)} for #{construction.name}.")
186
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---ins_u_value_ip = #{ins_u_value_ip.round(2)} for #{construction.name}.")
187
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---ins_u_value_si = #{ins_u_value_si.round(2)} for #{construction.name}.")
188
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
193
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---ins_r_value_ip = #{ins_r_value_ip.round(2)} for #{construction.name}.")
194
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---ins_u_value_ip = #{ins_u_value_ip.round(2)} for #{construction.name}.")
195
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---ins_u_value_si = #{ins_u_value_si.round(2)} for #{construction.name}.")
196
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
189
197
 
190
198
  # Modify the construction name
191
199
  construction.setName("#{construction.name} U-#{target_u_value_ip.round(2)}")
@@ -199,11 +207,11 @@ class Standard
199
207
  # @param target_shgc [Double] Solar Heat Gain Coefficient
200
208
  # @return [Bool] returns true if successful, false if not
201
209
  def construction_set_glazing_shgc(construction, target_shgc)
202
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "Setting SHGC for #{construction.name}.")
210
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting SHGC for #{construction.name}.")
203
211
 
204
212
  # Skip layer-by-layer fenestration constructions
205
213
  unless construction_simple_glazing?(construction)
206
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Can only set the SHGC of simple glazing. #{construction.name} is not simple glazing.")
214
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Can only set the SHGC of simple glazing. #{construction.name} is not simple glazing.")
207
215
  return false
208
216
  end
209
217
 
@@ -305,7 +313,7 @@ class Standard
305
313
  if row_id.is_initialized
306
314
  row_id = row_id.get
307
315
  else
308
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Construction', "SHGC row ID not found for construction: #{construction_name}.")
316
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "SHGC row ID not found for construction: #{construction_name}.")
309
317
  row_id = 9999
310
318
  end
311
319
 
@@ -355,7 +363,7 @@ class Standard
355
363
  if row_id.is_initialized
356
364
  row_id = row_id.get
357
365
  else
358
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "VT row ID not found for construction: #{construction_name}.")
366
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "VT row ID not found for construction: #{construction_name}.")
359
367
  row_id = 9999
360
368
  end
361
369
 
@@ -374,7 +382,7 @@ class Standard
374
382
  end
375
383
 
376
384
  else
377
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Space', 'Model has no sql file containing results, cannot lookup data.')
385
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', 'Model has no sql file containing results, cannot lookup data.')
378
386
  end
379
387
 
380
388
  return vt
@@ -405,7 +413,7 @@ class Standard
405
413
  if row_id.is_initialized
406
414
  row_id = row_id.get
407
415
  else
408
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Construction', "U-Factor row ID not found for construction: #{construction_name}.")
416
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "U-Factor row ID not found for construction: #{construction_name}.")
409
417
  row_id = 9999
410
418
  end
411
419
 
@@ -456,7 +464,7 @@ class Standard
456
464
  end
457
465
  if construction.insulation.empty? and construction.isOpaque
458
466
  raise ()
459
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ConstructionBase', "This construction has no insulation layer specified. Construction #{construction.name.get.to_s} insulation layer could not be set!. This occurs when a insulation layer is duplicated in the construction.")
467
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', "This construction has no insulation layer specified. Construction #{construction.name.get.to_s} insulation layer could not be set!. This occurs when a insulation layer is duplicated in the construction.")
460
468
  end
461
469
  else
462
470
  return construction.insulation.get
@@ -518,21 +526,21 @@ class Standard
518
526
  end
519
527
 
520
528
  def apply_changes_to_surface_construction(model, surface, conductance = nil, shgc = nil, tvis = nil, is_percentage = false)
521
- #If user has no changes...do nothing and return true.
529
+ # If user has no changes...do nothing and return true.
522
530
  return true if conductance.nil? and shgc.nil? and tvis.nil?
523
531
  standard = Standard.new()
524
532
  construction = OpenStudio::Model::getConstructionByName(surface.model, surface.construction.get.name.to_s).get
525
533
 
526
- #set initial targets
534
+ # set initial targets
527
535
  target_u_value_si = conductance
528
536
  target_shgc = shgc
529
537
  target_tvis = tvis
530
- #Mulitply by percentages if required.
531
- if true == is_percentage
532
- target_u_value_si = target_u_value_si / 100.0 * BTAP::Resources::Envelope::Constructions.get_conductance(construction) unless conductance.nil?
533
- if true == standard.construction_simple_glazing?(construction)
534
- target_shgc = target_shgc / 100.0 * construction.layers.first.to_SimpleGlazing.get.getSolarHeatGainCoefficient() unless target_shgc.nil?
535
- target_tvis = target_tvis / 100.0 * construction.layers.first.to_SimpleGlazing.get.setVisibleTransmittance() unless target_tvis.nil?
538
+ # Mulitply by percentages if required.
539
+ if is_percentage
540
+ target_u_value_si = target_u_value_si / 100.0 * BTAP::Resources::Envelope::Constructions.get_conductance(construction) unless conductance.nil?
541
+ if standard.construction_simple_glazing?(construction)
542
+ target_shgc = target_shgc / 100.0 * construction.layers.first.to_SimpleGlazing.get.solarHeatGainCoefficient unless target_shgc.nil?
543
+ target_tvis = target_tvis / 100.0 * construction.layers.first.to_SimpleGlazing.get.setVisibleTransmittance unless target_tvis.nil?
536
544
  end
537
545
  end
538
546
 
@@ -645,15 +653,15 @@ class Standard
645
653
  # @return [Bool] returns true if successful, false if not
646
654
  def construction_set_glazing_tvis(construction, target_tvis)
647
655
  if target_tvis >= 1.0
648
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ConstructionBase', "Can only set the Tvis can only be set to less than 1.0. #{target_tvis} is > 1.0")
656
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', "Can only set the Tvis can only be set to less than 1.0. #{target_tvis} is greater than 1.0")
649
657
  return false
650
658
  end
651
659
 
652
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "Setting TVis for #{construction.name} to #{target_tvis}")
660
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting TVis for #{construction.name} to #{target_tvis}")
653
661
  standard = Standard.new()
654
662
  # Skip layer-by-layer fenestration constructions
655
663
  unless standard.construction_simple_glazing?(construction)
656
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ConstructionBase', "Can only set the Tvis of simple glazing. #{construction.name} is not simple glazing.")
664
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', "Can only set the Tvis of simple glazing. #{construction.name} is not simple glazing.")
657
665
  return false
658
666
  end
659
667
 
@@ -22,7 +22,7 @@ module Fan
22
22
  # zone exhaust, fan coil, and fan powered terminals.
23
23
  # In this case, 0.5 HP is used for the lookup.
24
24
  if fan_small_fan?(fan)
25
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Fan', "For #{fan.name}: motor eff = #{(motor_eff * 100).round(2)}%; assumed to represent several < 1 HP motors.")
25
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Fan', "For #{fan.name}: motor eff = #{(motor_eff * 100).round(2)}%; assumed to represent several less than 1 HP motors.")
26
26
  else
27
27
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Fan', "For #{fan.name}: motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_eff * 100).round(2)}%.")
28
28
  end
@@ -282,15 +282,23 @@ module Fan
282
282
  # Exhaust fan
283
283
  if fan.to_FanZoneExhaust.is_initialized
284
284
  is_small = true
285
- # Fan coil unit, unit heater, PTAC, PTHP
285
+ # Fan coil unit, unit heater, PTAC, PTHP, VRF terminals, WSHP, ERV
286
286
  elsif fan.containingZoneHVACComponent.is_initialized
287
287
  zone_hvac = fan.containingZoneHVACComponent.get
288
288
  if zone_hvac.to_ZoneHVACFourPipeFanCoil.is_initialized
289
289
  is_small = true
290
+ # elsif zone_hvac.to_ZoneHVACUnitHeater.is_initialized
291
+ # is_small = true
290
292
  elsif zone_hvac.to_ZoneHVACPackagedTerminalAirConditioner.is_initialized
291
293
  is_small = true
292
294
  elsif zone_hvac.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
293
295
  is_small = true
296
+ elsif zone_hvac.to_ZoneHVACTerminalUnitVariableRefrigerantFlow.is_initialized
297
+ is_small = true
298
+ elsif zone_hvac.to_ZoneHVACWaterToAirHeatPump.is_initialized
299
+ is_small = true
300
+ elsif zone_hvac.to_ZoneHVACEnergyRecoveryVentilator.is_initialized
301
+ is_small = true
294
302
  end
295
303
  # Powered VAV terminal
296
304
  elsif fan.containingHVACComponent.is_initialized
@@ -136,7 +136,7 @@ class Standard
136
136
  if hp_limit && cap_limit_btu_per_hr
137
137
  air_loop = fan_variable_volume.airLoopHVAC
138
138
  unless air_loop.is_initialized
139
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{fan_variable_volume.name}: Could not find the air loop to get cooling capacity for determining part load fan power control requirement.")
139
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: Could not find the air loop to get cooling capacity for determining part load fan power control requirement.")
140
140
  return part_load_control_required
141
141
  end
142
142
  air_loop = air_loop.get
@@ -144,13 +144,13 @@ class Standard
144
144
  clg_cap_btu_per_hr = OpenStudio.convert(clg_cap_w, 'W', 'Btu/hr').get
145
145
  fan_hp = fan_motor_horsepower(fan_variable_volume)
146
146
  if fan_hp >= hp_limit && clg_cap_btu_per_hr >= cap_limit_btu_per_hr
147
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{fan_variable_volume.name}: part load fan power control is required for #{fan_hp.round(1)} HP fan, #{clg_cap_btu_per_hr.round} Btu/hr cooling capacity.")
147
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: part load fan power control is required for #{fan_hp.round(1)} HP fan, #{clg_cap_btu_per_hr.round} Btu/hr cooling capacity.")
148
148
  part_load_control_required = true
149
149
  end
150
150
  elsif hp_limit
151
151
  fan_hp = fan_motor_horsepower(fan_variable_volume)
152
152
  if fan_hp >= hp_limit
153
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{fan_variable_volume.name}: Part load fan power control is required for #{fan_hp.round(1)} HP fan.")
153
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: Part load fan power control is required for #{fan_hp.round(1)} HP fan.")
154
154
  part_load_control_required = true
155
155
  end
156
156
  end
@@ -252,7 +252,7 @@ class Standard
252
252
  sc.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized ||
253
253
  sc.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.is_initialized ||
254
254
  sc.to_AirLoopHVACUnitarySystem.is_initialized
255
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "#{air_loop.name} has a cooling coil named #{sc.name}, whose type is not yet covered by cooling system type checks.")
255
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "#{air_loop.name} has a cooling coil named #{sc.name}, whose type is not yet covered by cooling system type checks.")
256
256
  end
257
257
  end
258
258
 
@@ -16,7 +16,7 @@ class Standard
16
16
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(min_effct)
17
17
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(min_effct)
18
18
 
19
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerAirToAirSensibleAndLatent', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness to #{(min_effct * 100).round}%.")
19
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerSensLat', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness to #{(min_effct * 100).round}%.")
20
20
 
21
21
  return true
22
22
  end
@@ -1,7 +1,5 @@
1
1
  require 'csv'
2
2
 
3
-
4
-
5
3
  class Standard
6
4
  attr_accessor :space_multiplier_map
7
5
  attr_accessor :standards_data
@@ -90,6 +88,9 @@ class Standard
90
88
  # Remove all HVAC from model, excluding service water heating
91
89
  model_remove_prm_hvac(model)
92
90
 
91
+ # Remove all EMS objects from the model
92
+ model_remove_prm_ems_objects(model)
93
+
93
94
  # Modify the service water heating loops per the baseline rules
94
95
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Cleaning up Service Water Heating Loops ***')
95
96
  model_apply_baseline_swh_loops(model, building_type)
@@ -1245,7 +1246,7 @@ class Standard
1245
1246
  array_of_zones = model_eliminate_outlier_zones(model, array_of_zones, key_to_inspect, tolerance, field_name, units)
1246
1247
  else
1247
1248
  zn_name = array_of_zones[biggest_delta_i]['zone'].name.get.to_s
1248
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "For zone #{zn_name}, the #{field_name} #{worst.round(2)} #{units} - average #{field_name} #{avg.round(2)} #{units} = #{biggest_delta.round(2)} #{units} < tolerance of #{tolerance} #{units}, stopping elimination process.")
1249
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "For zone #{zn_name}, the #{field_name} #{worst.round(2)} #{units} - average #{field_name} #{avg.round(2)} #{units} = #{biggest_delta.round(2)} #{units} less than the tolerance of #{tolerance} #{units}, stopping elimination process.")
1249
1250
  end
1250
1251
 
1251
1252
  return array_of_zones
@@ -1261,7 +1262,7 @@ class Standard
1261
1262
  # @return [Hash] A hash of two arrays of ThermalZones,
1262
1263
  # where the keys are 'primary' and 'secondary'
1263
1264
  def model_differentiate_primary_secondary_thermal_zones(model, zones)
1264
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', 'Determining which zones are served by the primary vs. secondary HVAC system.')
1265
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', 'Determining which zones are served by the primary vs. secondary HVAC system.')
1265
1266
 
1266
1267
  # Determine the operational hours (proxy is annual
1267
1268
  # full load lighting hours) for all zones
@@ -1365,10 +1366,10 @@ class Standard
1365
1366
 
1366
1367
  # Report out the primary vs. secondary zones
1367
1368
  unless pri_zone_names.empty?
1368
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "Primary system zones = #{pri_zone_names.join(', ')}.")
1369
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Primary system zones = #{pri_zone_names.join(', ')}.")
1369
1370
  end
1370
1371
  unless sec_zone_names.empty?
1371
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "Secondary system zones = #{sec_zone_names.join(', ')}.")
1372
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Secondary system zones = #{sec_zone_names.join(', ')}.")
1372
1373
  end
1373
1374
 
1374
1375
  return { 'primary' => pri_zones, 'secondary' => sec_zones }
@@ -1391,7 +1392,7 @@ class Standard
1391
1392
  if space.thermalZone.is_initialized
1392
1393
  all_zones_on_story << space.thermalZone.get
1393
1394
  else
1394
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Standards.Model', "Space #{space.name} has no thermal zone, it is not included in the simulation.")
1395
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Space #{space.name} has no thermal zone, it is not included in the simulation.")
1395
1396
  end
1396
1397
  end
1397
1398
 
@@ -1449,7 +1450,7 @@ class Standard
1449
1450
  if space_obj.buildingStory.empty?
1450
1451
  story = model_get_story_for_nominal_z_coordinate(model, space_minz)
1451
1452
  space_obj.setBuildingStory(story)
1452
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Standards.Model', "Space #{space[0].name} was not assigned to a story by the user. It has been assigned to #{story.name}.")
1453
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Space #{space[0].name} was not assigned to a story by the user. It has been assigned to #{story.name}.")
1453
1454
  end
1454
1455
  end
1455
1456
 
@@ -1473,7 +1474,7 @@ class Standard
1473
1474
  def model_apply_hvac_efficiency_standard(model, climate_zone, apply_controls: true)
1474
1475
  sql_db_vars_map = {}
1475
1476
 
1476
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started applying HVAC efficiency standards.')
1477
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Started applying HVAC efficiency standards for #{template} template.")
1477
1478
 
1478
1479
  # Air Loop Controls
1479
1480
  if apply_controls.nil? || apply_controls == true
@@ -1503,7 +1504,7 @@ class Standard
1503
1504
 
1504
1505
  # Unitary HPs
1505
1506
  # set DX HP coils before DX clg coils because when DX HP coils need to first
1506
- # pull the capacities of their paried DX clg coils, and this does not work
1507
+ # pull the capacities of their paired DX clg coils, and this does not work
1507
1508
  # correctly if the DX clg coil efficiencies have been set because they are renamed.
1508
1509
  model.getCoilHeatingDXSingleSpeeds.sort.each { |obj| sql_db_vars_map = coil_heating_dx_single_speed_apply_efficiency_and_curves(obj, sql_db_vars_map) }
1509
1510
 
@@ -3160,7 +3161,7 @@ class Standard
3160
3161
  ext_subsurfs.empty? ||
3161
3162
  int_subsurfs.empty?
3162
3163
 
3163
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Default construction set #{const_set.name} is incomplete; contructions from this set will not be reported.")
3164
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Default construction set #{const_set.name} is incomplete; constructions from this set will not be reported.")
3164
3165
  next
3165
3166
  end
3166
3167
 
@@ -3778,6 +3779,26 @@ class Standard
3778
3779
  return true
3779
3780
  end
3780
3781
 
3782
+ # Remove EMS objects that may be orphaned from removing HVAC
3783
+ #
3784
+ # @return [Bool] true if successful, false if not
3785
+ def model_remove_prm_ems_objects(model)
3786
+ model.getEnergyManagementSystemActuators(&:remove)
3787
+ model.getEnergyManagementSystemConstructionIndexVariables(&:remove)
3788
+ model.getEnergyManagementSystemCurveOrTableIndexVariables(&:remove)
3789
+ model.getEnergyManagementSystemGlobalVariables(&:remove)
3790
+ model.getEnergyManagementSystemInternalVariables(&:remove)
3791
+ model.getEnergyManagementSystemMeteredOutputVariables(&:remove)
3792
+ model.getEnergyManagementSystemOutputVariables(&:remove)
3793
+ model.getEnergyManagementSystemPrograms(&:remove)
3794
+ model.getEnergyManagementSystemProgramCallingManagers(&:remove)
3795
+ model.getEnergyManagementSystemSensors(&:remove)
3796
+ model.getEnergyManagementSystemSubroutines(&:remove)
3797
+ model.getEnergyManagementSystemTrendVariables(&:remove)
3798
+
3799
+ return true
3800
+ end
3801
+
3781
3802
  # Remove external shading devices. Site shading will not be impacted.
3782
3803
  # @return [Bool] returns true if successful, false if not.
3783
3804
  def model_remove_external_shading_devices(model)
@@ -4017,9 +4038,9 @@ class Standard
4017
4038
 
4018
4039
  # Check the results
4019
4040
  if possible_climate_zone_sets.size.zero?
4020
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set containing #{clim}")
4041
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set containing #{clim}. Make sure to use ASHRAE standards with ASHRAE climate zones and DEER or CA Title 24 standards with CEC climate zones.")
4021
4042
  elsif possible_climate_zone_sets.size > 2
4022
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Found more than 2 climate zone sets containing #{clim}; will return last matching cliimate zone set.")
4043
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Found more than 2 climate zone sets containing #{clim}; will return last matching climate zone set.")
4023
4044
  end
4024
4045
 
4025
4046
  # Get the climate zone from the possible set
@@ -4027,7 +4048,7 @@ class Standard
4027
4048
 
4028
4049
  # Check that a climate zone set was found
4029
4050
  if climate_zone_set.nil?
4030
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set when #{template}")
4051
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set in standard #{template}")
4031
4052
  end
4032
4053
 
4033
4054
  return climate_zone_set
@@ -4288,7 +4309,7 @@ class Standard
4288
4309
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "For #{space_type.name}, number of meals = #{num_meals}.") unless num_meals.nil?
4289
4310
 
4290
4311
  else
4291
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Cannot identify standards buidling type and space type for #{space_type.name}, it won't be added to space_type_hash.")
4312
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Cannot identify standards building type and space type for #{space_type.name}, it won't be added to space_type_hash.")
4292
4313
  end
4293
4314
  end
4294
4315
 
@@ -4503,7 +4524,7 @@ class Standard
4503
4524
  end
4504
4525
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished adding geometry')
4505
4526
  unless @space_multiplier_map.empty?
4506
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Found mulitpliers for space #{@space_multiplier_map}")
4527
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Found multipliers for space #{@space_multiplier_map}")
4507
4528
  end
4508
4529
  return is_valid
4509
4530
  end
@@ -4897,7 +4918,7 @@ class Standard
4897
4918
  # for now don't look at schedules without targets, in future can alter these by looking at building level hours of operation
4898
4919
  next if not sch.directUseCount > 0 # won't catch if used for space type load instance, but that space type isn't used
4899
4920
  # todo - address schedules that fall into this category, if they are used in the model
4900
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ScheduleRuleset', "For #{sch.sources.first.name}, #{sch.name} is not setup as parametric schedule. It has #{sch.sources.size} sources.")
4921
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "For #{sch.sources.first.name}, #{sch.name} is not setup as parametric schedule. It has #{sch.sources.size} sources.")
4901
4922
  next
4902
4923
  end
4903
4924
 
@@ -5370,7 +5391,7 @@ class Standard
5370
5391
  if percent_change.abs > 0.05
5371
5392
  # todo - this estimation can have flaws. Fix or remove it, make sure to update for secondary logic (if we implement that here)
5372
5393
  # post application checks compares against actual instead of estimated values
5373
- OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ScheduleRuleset', "For day schedule #{schedule_day.name} in #{sch.name} there was a #{percent_change.round(4)}% change. Expected full load hours is #{daily_flh.round(4)}, but estimated value is #{est_daily_flh.round(4)}")
5394
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Model', "For day schedule #{schedule_day.name} in #{sch.name} there was a #{percent_change.round(4)}% change. Expected full load hours is #{daily_flh.round(4)}, but estimated value is #{est_daily_flh.round(4)}")
5374
5395
  end
5375
5396
 
5376
5397
  raw_string = []