openstudio-standards 0.2.14 → 0.2.15.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (642) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.json +0 -19
  3. data/data/geometry/ASHRAEMidriseApartment.json +47 -47
  4. data/data/geometry/ASHRAESecondarySchool.osm +2 -2
  5. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  6. data/data/standards/export_OpenStudio_libraries.rb +1 -1
  7. data/data/standards/manage_OpenStudio_Standards.rb +43 -87
  8. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +9 -0
  9. data/data/standards/openstudio_standards_duplicates_log.csv +142 -27
  10. data/data/standards/test_performance_expected_dd_results.csv +2016 -2016
  11. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.ddy +2316 -0
  12. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.epw +8768 -0
  13. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.stat +697 -0
  14. data/lib/openstudio-standards/btap/WeatherData1.json +54 -0
  15. data/lib/openstudio-standards/btap/WeatherData1.xlsx +0 -0
  16. data/lib/openstudio-standards/btap/btap_result.rb +12 -10
  17. data/lib/openstudio-standards/btap/envelope.rb +2 -2
  18. data/lib/openstudio-standards/btap/geometry.rb +96 -49
  19. data/lib/openstudio-standards/{utilities → btap/utilities}/Add_template_field_to_json.rb +0 -0
  20. data/lib/openstudio-standards/{utilities → btap/utilities}/convert_surfaces_to_adiabatic_necb_8426.rb +0 -0
  21. data/lib/openstudio-standards/{utilities → btap/utilities}/generate_space_types.rb +0 -0
  22. data/lib/openstudio-standards/{utilities → btap/utilities}/necb_to_epw_map.rb +0 -0
  23. data/lib/openstudio-standards/{utilities → btap/utilities}/os_sim_extract.rb +0 -0
  24. data/lib/openstudio-standards/{utilities → btap/utilities}/rename_surfaces.rb +0 -0
  25. data/lib/openstudio-standards/{utilities → btap/utilities}/round_surf_coords.rb +0 -0
  26. data/lib/openstudio-standards/{utilities → btap/utilities}/sched_create.rb +0 -0
  27. data/lib/openstudio-standards/{utilities → btap/utilities}/set_mult_to_adiabatic.rb +0 -0
  28. data/lib/openstudio-standards/btap/utilities/space_type.rb +78 -0
  29. data/lib/openstudio-standards/{utilities → btap/utilities}/weatherData1_xlsx_to_json.rb +0 -0
  30. data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +1 -1
  31. data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +1 -1
  32. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +20 -6
  33. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +6 -6
  34. data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +2 -2
  35. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +1 -1
  36. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
  37. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +6 -7
  38. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +2 -1
  39. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanConstantVolume.rb +5 -4
  40. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanOnOff.rb +5 -5
  41. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +5 -4
  42. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +6 -7
  43. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +2 -1
  44. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanConstantVolume.rb +5 -4
  45. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanOnOff.rb +5 -5
  46. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +5 -4
  47. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.elevators.rb +6 -4
  48. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +10 -9
  49. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +9 -11
  50. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +2 -1
  51. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanConstantVolume.rb +5 -4
  52. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanOnOff.rb +5 -5
  53. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +5 -4
  54. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.elevators.rb +11 -7
  55. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +17 -16
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +9 -11
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +4 -2
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +2 -1
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +5 -4
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +5 -5
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +5 -4
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +11 -7
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +23 -22
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +9 -10
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +4 -2
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +2 -1
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +5 -4
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +5 -5
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +5 -4
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +11 -7
  71. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +23 -22
  72. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +89 -0
  73. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +9 -10
  74. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +76 -0
  75. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +22 -2
  76. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
  77. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +11 -11
  78. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +5 -4
  79. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +2 -1
  80. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +5 -4
  81. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +11 -11
  82. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +5 -4
  83. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +2 -1
  84. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanConstantVolume.rb +5 -4
  85. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff.rb +5 -5
  86. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +5 -4
  87. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
  88. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators.rb +11 -7
  89. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +10 -10
  90. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems.rb +4 -2
  91. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +2 -1
  92. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +5 -4
  93. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +5 -5
  94. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +5 -4
  95. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
  96. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +11 -7
  97. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +10 -10
  98. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +4 -2
  99. data/lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb +3 -6
  100. data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +5 -4
  101. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanConstantVolume.rb +5 -3
  102. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanOnOff.rb +5 -4
  103. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanVariableVolume.rb +5 -3
  104. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +65 -30
  105. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +54 -23
  106. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +135 -147
  107. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +42 -7
  108. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +85 -12
  109. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +42 -30
  110. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +39 -8
  111. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +39 -8
  112. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +60 -12
  113. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +33 -265
  114. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +41 -3
  115. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +69 -297
  116. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +68 -25
  117. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +88 -59
  118. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +88 -9
  119. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +48 -10
  120. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +130 -145
  121. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +29 -101
  122. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +24 -7
  123. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +48 -589
  124. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +38 -7
  125. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +38 -8
  126. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +40 -7
  127. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +85 -171
  128. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +87 -44
  129. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +46 -5
  130. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +105 -17
  131. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +97 -15
  132. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +26 -167
  133. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3828 -1131
  134. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +3 -0
  135. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +2 -1
  136. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -0
  137. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -0
  138. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +4 -1
  139. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +3 -0
  140. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +4 -1
  141. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +3 -0
  142. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +9 -0
  143. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +3 -0
  144. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +9 -4
  145. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +4 -1
  146. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +3 -0
  147. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +2 -2
  148. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +4 -1
  149. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +23 -2
  150. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +29 -4
  151. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +29 -5
  152. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +43 -4
  153. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +22 -0
  154. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +46 -3
  155. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +27 -22
  156. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +15 -8
  157. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +22 -4
  158. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +429 -59
  159. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +18 -11
  160. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +11 -2
  161. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +1 -0
  162. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +8 -10
  163. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +37 -28
  164. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +24 -6
  165. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -65
  166. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +1 -1
  167. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +46 -31
  168. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +62 -10
  169. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +76 -33
  170. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  171. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +445 -275
  172. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
  173. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +26 -21
  174. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +5 -2
  175. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +7 -9
  176. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +8 -2
  177. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +10 -6
  178. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +5 -1
  179. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -1
  180. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +45 -4
  181. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +18 -8
  182. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +9 -7
  183. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +8 -4
  184. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +86 -3
  185. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +5 -2
  186. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +6 -2
  187. data/lib/openstudio-standards/standards/Standards.Construction.rb +66 -35
  188. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +7 -7
  189. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +2 -2
  190. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +2 -1
  191. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +2 -1
  192. data/lib/openstudio-standards/standards/Standards.Fan.rb +53 -35
  193. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +22 -16
  194. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +2 -2
  195. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +4 -4
  196. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +77 -19
  197. data/lib/openstudio-standards/standards/Standards.Model.rb +387 -245
  198. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +13 -15
  199. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -48
  200. data/lib/openstudio-standards/standards/Standards.Pump.rb +28 -20
  201. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +3 -4
  202. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +2 -1
  203. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -0
  204. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +34 -24
  205. data/lib/openstudio-standards/standards/Standards.Space.rb +179 -116
  206. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +23 -12
  207. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +55 -25
  208. data/lib/openstudio-standards/standards/Standards.Surface.rb +57 -32
  209. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +157 -107
  210. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -6
  211. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +52 -1
  212. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +2 -2
  213. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.rb +4 -0
  214. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +28 -18
  215. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.FanVariableVolume.rb +1 -1
  216. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -2
  217. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.rb +4 -0
  218. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/comstock_ashrae_90_1_2004.rb +4 -0
  219. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +696 -2938
  220. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +1 -1
  221. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +123 -123
  222. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.furnaces.json +26 -0
  223. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +11 -11
  224. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -8
  225. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +395 -384
  226. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +69 -0
  227. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +20 -13
  228. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +1 -1
  229. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Model.rb +1 -1
  230. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.rb +4 -0
  231. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/comstock_ashrae_90_1_2007.rb +4 -0
  232. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +696 -2938
  233. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +1 -1
  234. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +122 -122
  235. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.furnaces.json +26 -0
  236. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +11 -11
  237. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -8
  238. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +413 -401
  239. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +69 -0
  240. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +42 -53
  241. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +3 -2
  242. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTower.rb +5 -8
  243. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +1 -1
  244. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +6 -4
  245. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.rb +4 -0
  246. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/comstock_ashrae_90_1_2010.rb +4 -0
  247. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +696 -2938
  248. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +1 -1
  249. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +129 -129
  250. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +210 -42
  251. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.furnaces.json +26 -0
  252. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +11 -11
  253. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -8
  254. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +460 -320
  255. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +69 -0
  256. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +45 -51
  257. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +3 -2
  258. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower.rb +5 -8
  259. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +2 -3
  260. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +2 -2
  261. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -5
  262. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ThermalZone.rb +2 -1
  263. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  264. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -0
  265. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.rb +4 -0
  266. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/comstock_ashrae_90_1_2013.rb +4 -0
  267. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +696 -2938
  268. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +1 -1
  269. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +121 -121
  270. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +420 -84
  271. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.furnaces.json +26 -0
  272. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +12 -12
  273. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -8
  274. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +475 -335
  275. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +69 -0
  276. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +40 -50
  277. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +3 -2
  278. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +5 -8
  279. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +2 -3
  280. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +2 -2
  281. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +8 -5
  282. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +2 -1
  283. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -0
  284. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +4 -0
  285. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.rb +4 -0
  286. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +696 -2938
  287. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +1 -1
  288. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +152 -128
  289. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +488 -84
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.furnaces.json +26 -0
  291. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +47 -47
  292. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +69 -0
  293. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +342 -56
  294. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +3 -2
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +5 -8
  296. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +2 -3
  297. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +2 -2
  298. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +25 -5
  299. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +2 -1
  300. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +30 -0
  301. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +4 -0
  302. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.rb +4 -0
  303. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +696 -2938
  304. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +1 -1
  305. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +151 -127
  306. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +1 -1
  307. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2307 -101
  308. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.furnaces.json +26 -0
  309. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +1 -1
  310. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +47 -47
  311. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +69 -0
  312. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +25 -0
  313. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +286 -224
  314. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/comstock_doe_ref_1980_2004.rb +4 -0
  315. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +696 -2938
  316. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +1 -1
  317. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +126 -126
  318. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.furnaces.json +26 -0
  319. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +11 -11
  320. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.refrigeration_system.json +0 -8
  321. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +405 -393
  322. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +15 -11
  323. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
  324. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +3 -0
  325. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.rb +4 -0
  326. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/comstock_doe_ref_pre_1980.rb +4 -0
  327. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +696 -2938
  328. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +121 -121
  329. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.furnaces.json +37 -0
  330. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +11 -11
  331. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.refrigeration_system.json +0 -8
  332. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +403 -391
  333. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +15 -11
  334. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
  335. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +3 -0
  336. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb +4 -0
  337. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.furnaces.json +15 -0
  338. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +64 -42
  339. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +3 -2
  340. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower.rb +5 -8
  341. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +2 -3
  342. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +2 -2
  343. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +1 -1
  344. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
  345. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +4 -1
  346. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +5 -3
  347. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +3 -0
  348. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.rb +4 -0
  349. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.furnaces.json +15 -0
  350. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +61 -36
  351. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +3 -2
  352. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +5 -8
  353. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +2 -3
  354. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +2 -2
  355. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +1 -1
  356. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
  357. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +4 -1
  358. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +6 -4
  359. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +3 -0
  360. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +4 -0
  361. data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +20 -14
  362. data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +3 -0
  363. data/lib/openstudio-standards/standards/cbes/cbes.rb +4 -0
  364. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/cbes_pre_1978.rb +4 -0
  365. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/cbes_t24_1978.rb +4 -0
  366. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/cbes_t24_1992.rb +4 -0
  367. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/cbes_t24_2001.rb +4 -0
  368. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.rb +4 -0
  369. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.rb +4 -0
  370. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +10 -5
  371. data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +1 -1
  372. data/lib/openstudio-standards/standards/deer/deer.rb +4 -0
  373. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/comstock_deer_1985.rb +4 -0
  374. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +2 -2
  375. data/lib/openstudio-standards/standards/deer/deer_1985/deer_1985.rb +4 -0
  376. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/comstock_deer_1996.rb +4 -0
  377. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +2 -2
  378. data/lib/openstudio-standards/standards/deer/deer_1996/deer_1996.rb +4 -0
  379. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/comstock_deer_2003.rb +4 -0
  380. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +2 -2
  381. data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.rb +4 -0
  382. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/comstock_deer_2007.rb +4 -0
  383. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +2 -2
  384. data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.rb +4 -0
  385. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/comstock_deer_2011.rb +4 -0
  386. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +2 -2
  387. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +4 -0
  388. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/comstock_deer_2014.rb +4 -0
  389. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +2 -2
  390. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +5 -3
  391. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +4 -0
  392. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/comstock_deer_2015.rb +4 -0
  393. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +2 -2
  394. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +5 -3
  395. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.rb +4 -0
  396. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/comstock_deer_2017.rb +4 -0
  397. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +2 -2
  398. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +5 -3
  399. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.rb +4 -0
  400. data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/comstock_deer_2020.rb +4 -0
  401. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +9 -5
  402. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +3 -0
  403. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +5 -3
  404. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.rb +4 -0
  405. data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/comstock_deer_2025.rb +4 -0
  406. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +9 -5
  407. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +3 -0
  408. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +5 -3
  409. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.rb +4 -0
  410. data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/comstock_deer_2030.rb +4 -0
  411. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +9 -5
  412. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +3 -0
  413. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +5 -3
  414. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.rb +4 -0
  415. data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/comstock_deer_2035.rb +4 -0
  416. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +9 -5
  417. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +3 -0
  418. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +5 -3
  419. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.rb +4 -0
  420. data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/comstock_deer_2040.rb +4 -0
  421. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +9 -5
  422. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +3 -0
  423. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +5 -3
  424. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.rb +4 -0
  425. data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/comstock_deer_2045.rb +4 -0
  426. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +9 -5
  427. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +3 -0
  428. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +5 -3
  429. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.rb +4 -0
  430. data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/comstock_deer_2050.rb +4 -0
  431. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +9 -5
  432. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +3 -0
  433. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +5 -3
  434. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.rb +4 -0
  435. data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/comstock_deer_2055.rb +4 -0
  436. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +9 -5
  437. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +3 -0
  438. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +5 -3
  439. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.rb +4 -0
  440. data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/comstock_deer_2060.rb +4 -0
  441. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +9 -5
  442. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +3 -0
  443. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +5 -3
  444. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.rb +4 -0
  445. data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/comstock_deer_2065.rb +4 -0
  446. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +9 -5
  447. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +3 -0
  448. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +5 -3
  449. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.rb +4 -0
  450. data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/comstock_deer_2070.rb +4 -0
  451. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +9 -5
  452. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +3 -0
  453. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +5 -3
  454. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.rb +4 -0
  455. data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/comstock_deer_2075.rb +4 -0
  456. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +9 -5
  457. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +3 -0
  458. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +5 -3
  459. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.rb +4 -0
  460. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/comstock_deer_pre_1975.rb +4 -0
  461. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +2 -2
  462. data/lib/openstudio-standards/standards/deer/deer_pre_1975/deer_pre_1975.rb +4 -0
  463. data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +4 -0
  464. data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/btap_1980to2010.rb +6 -28
  465. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +25 -110
  466. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +45 -60
  467. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +19 -23
  468. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +84 -83
  469. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +52 -47
  470. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +43 -40
  471. data/lib/openstudio-standards/standards/necb/ECMS/data/boiler_set.json +18 -0
  472. data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_set.json +211 -0
  473. data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +1195 -20
  474. data/lib/openstudio-standards/standards/necb/ECMS/data/furnace_set.json +18 -0
  475. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +244 -182
  476. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +232 -185
  477. data/lib/openstudio-standards/standards/necb/ECMS/data/shw_set.json +20 -2
  478. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +18 -25
  479. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +12 -13
  480. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +1647 -466
  481. data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +93 -0
  482. data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +40 -47
  483. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +26 -25
  484. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +303 -305
  485. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +45 -45
  486. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +90 -120
  487. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Hospital.osm +1176 -1115
  488. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +8279 -28923
  489. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +1173 -1173
  490. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +15 -13
  491. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +32 -29
  492. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +25 -26
  493. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -14
  494. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +24 -29
  495. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +85 -84
  496. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +41 -42
  497. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +209 -197
  498. data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +87 -82
  499. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +510 -406
  500. data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +3 -3
  501. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +686 -683
  502. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +129 -82
  503. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +1608 -1608
  504. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +25 -18
  505. data/lib/openstudio-standards/standards/necb/NECB2015/lighting.rb +73 -67
  506. data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +18 -22
  507. data/lib/openstudio-standards/standards/necb/NECB2015/qaqc/necb_2015_qaqc.rb +59 -63
  508. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +1608 -1608
  509. data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -4
  510. data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +10 -14
  511. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +779 -0
  512. data/lib/openstudio-standards/standards/necb/NECB2020/data/boilers.json +122 -0
  513. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +335 -0
  514. data/lib/openstudio-standards/standards/necb/NECB2020/data/constants.json +13 -0
  515. data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +41 -0
  516. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +452 -0
  517. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +164 -0
  518. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_rejection.json +228 -0
  519. data/lib/openstudio-standards/standards/necb/NECB2020/data/led_lighting_data.json +2883 -0
  520. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +25851 -0
  521. data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json +60 -0
  522. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +585 -0
  523. data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +175 -0
  524. data/lib/openstudio-standards/standards/necb/common/bc_step_code_indicators.md +10 -0
  525. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +1963 -0
  526. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +410 -0
  527. data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +42 -0
  528. data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +28705 -0
  529. data/lib/openstudio-standards/standards/necb/common/phius.md +23 -0
  530. data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +1158 -386
  531. data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +4 -0
  532. data/lib/openstudio-standards/standards/standard.rb +2 -1
  533. data/lib/openstudio-standards/utilities/define_thermal_zone_and_mulitpliers.rb +1 -1
  534. data/lib/openstudio-standards/utilities/logging.rb +6 -0
  535. data/lib/openstudio-standards/utilities/simulation.rb +30 -14
  536. data/lib/openstudio-standards/utilities/{speacetype_map_converter.rb → spacetype_map_converter.rb} +0 -0
  537. data/lib/openstudio-standards/utilities/sqlfile.rb +112 -71
  538. data/lib/openstudio-standards/version.rb +2 -2
  539. data/lib/openstudio-standards/weather/Weather.Model.rb +209 -9
  540. data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
  541. data/lib/openstudio-standards.rb +9 -0
  542. metadata +106 -205
  543. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  544. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +0 -49
  545. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +0 -293
  546. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +0 -25426
  547. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +0 -1600
  548. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +0 -564
  549. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +0 -349
  550. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +0 -164
  551. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +0 -10663
  552. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +0 -508
  553. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +0 -156
  554. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +0 -44
  555. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +0 -184
  556. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +0 -3094
  557. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +0 -829
  558. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +0 -562
  559. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +0 -52
  560. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +0 -220
  561. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -156
  562. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +0 -1316
  563. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +0 -21446
  564. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +0 -554
  565. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +0 -68
  566. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +0 -28
  567. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +0 -12
  568. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +0 -49
  569. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +0 -293
  570. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +0 -12487
  571. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +0 -1600
  572. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +0 -564
  573. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +0 -349
  574. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +0 -164
  575. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +0 -10663
  576. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +0 -466
  577. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +0 -137
  578. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +0 -44
  579. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +0 -184
  580. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +0 -3094
  581. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +0 -829
  582. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +0 -562
  583. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +0 -52
  584. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +0 -220
  585. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -156
  586. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +0 -1316
  587. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +0 -21380
  588. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +0 -554
  589. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +0 -68
  590. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +0 -28
  591. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +0 -12
  592. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +0 -49
  593. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +0 -395
  594. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +0 -12487
  595. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +0 -1600
  596. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +0 -592
  597. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +0 -349
  598. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +0 -550
  599. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +0 -164
  600. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +0 -10663
  601. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +0 -466
  602. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +0 -137
  603. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +0 -44
  604. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +0 -238
  605. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +0 -3094
  606. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +0 -829
  607. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +0 -562
  608. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +0 -52
  609. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +0 -220
  610. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -156
  611. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +0 -1316
  612. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +0 -21548
  613. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +0 -554
  614. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +0 -68
  615. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +0 -28
  616. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +0 -12
  617. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +0 -64
  618. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +0 -871
  619. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +0 -12487
  620. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +0 -1600
  621. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +0 -592
  622. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +0 -349
  623. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +0 -1096
  624. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +0 -164
  625. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +0 -10663
  626. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +0 -886
  627. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +0 -194
  628. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +0 -44
  629. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +0 -247
  630. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +0 -3094
  631. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +0 -829
  632. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +0 -562
  633. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +0 -52
  634. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +0 -220
  635. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -156
  636. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +0 -1316
  637. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +0 -22079
  638. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +0 -994
  639. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +0 -68
  640. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +0 -28
  641. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +0 -12
  642. data/lib/openstudio-standards/utilities/convert_costing_constructions.rb +0 -105
@@ -0,0 +1,779 @@
1
+ class NECB2020
2
+
3
+ # Reduces the WWR to the values specified by the NECB
4
+ # NECB 3.2.1.4
5
+ def apply_standard_window_to_wall_ratio(model:, fdwr_set: -1.0)
6
+ # NECB FDWR limit
7
+ hdd = self.get_necb_hdd18(model)
8
+
9
+ # Get the maximum NECB fdwr
10
+ # fdwr_set settings:
11
+ # 0-1: Remove all windows and add windows to match this fdwr
12
+ # -1: Remove all windows and add windows to match max fdwr from NECB
13
+ # -2: Do not apply any fdwr changes, leave windows alone (also works for fdwr > 1)
14
+ # -3: Use old method which reduces existing window size (if necessary) to meet maximum NECB fdwr limit
15
+ # <-3.1: Remove all the windows
16
+ # > 1: Do nothing
17
+
18
+ if fdwr_set.to_f > 1.0
19
+ return
20
+ elsif fdwr_set.to_f >= 0.0 and fdwr_set <= 1.0
21
+ apply_max_fdwr_nrcan(model: model, fdwr_lim: fdwr_set.to_f)
22
+ return
23
+ elsif fdwr_set.to_f >= -1.1 and fdwr_set <= -0.9
24
+ fdwr_lim = (max_fwdr(hdd)).round(3)
25
+ apply_max_fdwr_nrcan(model: model, fdwr_lim: fdwr_lim.to_f)
26
+ return
27
+ elsif fdwr_set.to_f >= -2.1 and fdwr_set <= -1.9
28
+ return
29
+ elsif fdwr_set.to_f >= -3.1 and fdwr_set <= -2.9
30
+ fdwr_lim = (max_fwdr(hdd) * 100.0).round(1)
31
+ return apply_limit_fdwr(model: model, fdwr_lim: fdwr_lim.to_f)
32
+ elsif fdwr_set < -3.1
33
+ apply_max_fdwr_nrcan(model: model, fdwr_lim: fdwr_set.to_f)
34
+ return
35
+ end
36
+ end
37
+
38
+ def apply_limit_fdwr(model:, fdwr_lim:)
39
+ # Loop through all spaces in the model, and
40
+ # per the PNNL PRM Reference Manual, find the areas
41
+ # of each space conditioning category (res, nonres, semi-heated)
42
+ # separately. Include space multipliers.
43
+ nr_wall_m2 = 0.001 # Avoids divide by zero errors later
44
+ nr_wind_m2 = 0
45
+ res_wall_m2 = 0.001
46
+ res_wind_m2 = 0
47
+ sh_wall_m2 = 0.001
48
+ sh_wind_m2 = 0
49
+ total_wall_m2 = 0.001
50
+ total_subsurface_m2 = 0.0
51
+ # Store the space conditioning category for later use
52
+ space_cats = {}
53
+ model.getSpaces.sort.each do |space|
54
+ # Loop through all surfaces in this space
55
+ wall_area_m2 = 0
56
+ wind_area_m2 = 0
57
+ space.surfaces.sort.each do |surface|
58
+ # Skip non-outdoor surfaces
59
+ next unless surface.outsideBoundaryCondition == 'Outdoors'
60
+ # Skip non-walls
61
+ next unless surface.surfaceType.casecmp('wall').zero?
62
+ # This wall's gross area (including window area)
63
+ wall_area_m2 += surface.grossArea * space.multiplier
64
+ # Subsurfaces in this surface
65
+ surface.subSurfaces.sort.each do |ss|
66
+ wind_area_m2 += ss.netArea * space.multiplier
67
+ end
68
+ end
69
+
70
+ # Determine the space category
71
+ # zTODO This should really use the heating/cooling loads
72
+ # from the proposed building. However, in an attempt
73
+ # to avoid another sizing run just for this purpose,
74
+ # conditioned status is based on heating/cooling
75
+ # setpoints. If heated-only, will be assumed Semiheated.
76
+ # The full-bore method is on the next line in case needed.
77
+ # cat = thermal_zone_conditioning_category(space, template, climate_zone)
78
+ cooled = space_cooled?(space)
79
+ heated = space_heated?(space)
80
+ cat = 'Unconditioned'
81
+ # Unconditioned
82
+ if !heated && !cooled
83
+ cat = 'Unconditioned'
84
+ # Heated-Only
85
+ elsif heated && !cooled
86
+ cat = 'Semiheated'
87
+ # Heated and Cooled
88
+ else
89
+ res = thermal_zone_residential?(space.thermalZone.get)
90
+ cat = if res
91
+ 'ResConditioned'
92
+ else
93
+ 'NonResConditioned'
94
+ end
95
+ end
96
+ space_cats[space] = cat
97
+ # NECB2011 keep track of totals for NECB regardless of conditioned or not.
98
+ total_wall_m2 += wall_area_m2
99
+ total_subsurface_m2 += wind_area_m2 # this contains doors as well.
100
+
101
+ # Add to the correct category
102
+ case cat
103
+ when 'Unconditioned'
104
+ next # Skip unconditioned spaces
105
+ when 'NonResConditioned'
106
+ nr_wall_m2 += wall_area_m2
107
+ nr_wind_m2 += wind_area_m2
108
+ when 'ResConditioned'
109
+ res_wall_m2 += wall_area_m2
110
+ res_wind_m2 += wind_area_m2
111
+ when 'Semiheated'
112
+ sh_wall_m2 += wall_area_m2
113
+ sh_wind_m2 += wind_area_m2
114
+ end
115
+ end
116
+
117
+ # Calculate the WWR of each category
118
+ wwr_nr = ((nr_wind_m2 / nr_wall_m2) * 100.0).round(1)
119
+ wwr_res = ((res_wind_m2 / res_wall_m2) * 100).round(1)
120
+ wwr_sh = ((sh_wind_m2 / sh_wall_m2) * 100).round(1)
121
+ fdwr = ((total_subsurface_m2 / total_wall_m2) * 100).round(1) # used by NECB2011
122
+
123
+ # Convert to IP and report
124
+ nr_wind_ft2 = OpenStudio.convert(nr_wind_m2, 'm^2', 'ft^2').get
125
+ nr_wall_ft2 = OpenStudio.convert(nr_wall_m2, 'm^2', 'ft^2').get
126
+
127
+ res_wind_ft2 = OpenStudio.convert(res_wind_m2, 'm^2', 'ft^2').get
128
+ res_wall_ft2 = OpenStudio.convert(res_wall_m2, 'm^2', 'ft^2').get
129
+
130
+ sh_wind_ft2 = OpenStudio.convert(sh_wind_m2, 'm^2', 'ft^2').get
131
+ sh_wall_ft2 = OpenStudio.convert(sh_wall_m2, 'm^2', 'ft^2').get
132
+
133
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "WWR NonRes = #{wwr_nr.round}%; window = #{nr_wind_ft2.round} ft2, wall = #{nr_wall_ft2.round} ft2.")
134
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "WWR Res = #{wwr_res.round}%; window = #{res_wind_ft2.round} ft2, wall = #{res_wall_ft2.round} ft2.")
135
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "WWR Semiheated = #{wwr_sh.round}%; window = #{sh_wind_ft2.round} ft2, wall = #{sh_wall_ft2.round} ft2.")
136
+
137
+ # WWR limit
138
+ wwr_lim = 40.0
139
+
140
+ # Check against WWR limit
141
+ red_nr = wwr_nr > wwr_lim
142
+ red_res = wwr_res > wwr_lim
143
+ red_sh = wwr_sh > wwr_lim
144
+
145
+ # puts "Current FDWR is #{fdwr}, must be less than #{fdwr_lim}."
146
+ # puts "Current subsurf area is #{total_subsurface_m2} and gross surface area is #{total_wall_m2}"
147
+ # Stop here unless windows / doors need reducing
148
+ return true unless fdwr > fdwr_lim
149
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Reducing the size of all windows (by raising sill height) to reduce window area down to the limit of #{wwr_lim.round}%.")
150
+ # Determine the factors by which to reduce the window / door area
151
+ mult = fdwr_lim / fdwr
152
+ # Reduce the window area if any of the categories necessary
153
+ model.getSpaces.sort.each do |space|
154
+ # Loop through all surfaces in this space
155
+ space.surfaces.sort.each do |surface|
156
+ # Skip non-outdoor surfaces
157
+ next unless surface.outsideBoundaryCondition == 'Outdoors'
158
+ # Skip non-walls
159
+ next unless surface.surfaceType == 'Wall'
160
+ # Subsurfaces in this surface
161
+ surface.subSurfaces.sort.each do |ss|
162
+ # Reduce the size of the window
163
+ red = 1.0 - mult
164
+ sub_surface_reduce_area_by_percent_by_raising_sill(ss, red)
165
+ end
166
+ end
167
+ end
168
+ return true
169
+ end
170
+
171
+ # Reduces the SRR to the values specified by the PRM. SRR reduction
172
+ # will be done by shrinking vertices toward the centroid.
173
+ #
174
+ def apply_standard_skylight_to_roof_ratio(model:, srr_set: -1.0)
175
+
176
+ # If srr_set is between 1.0 and 1.2 set it to the maximum allowed by the NECB. If srr_set is between 0.0 and 1.0
177
+ # apply whatever was passed. If srr_set >= 1.2 then set the existing srr of the building to be the necb maximum
178
+ # only if the the srr exceeds this maximum (otherwise leave it to be whatever was modeled).
179
+
180
+ # srr_set settings:
181
+ # 0-1: Remove all skylights and add skylights to match this srr
182
+ # -1: Remove all skylights and add skylights to match max srr from NECB
183
+ # -2: Do not apply any srr changes, leave skylights alone (also works for srr > 1)
184
+ # -3: Use old method which reduces existing skylight size (if necessary) to meet maximum NECB skylight limit
185
+ # <-3.1: Remove all the skylights
186
+ # > 1: Do nothing
187
+
188
+ if srr_set.to_f > 1.0
189
+ return
190
+ elsif srr_set.to_f >= 0.0 && srr_set <= 1.0
191
+ apply_max_srr_nrcan(model: model, srr_lim: srr_set.to_f)
192
+ return
193
+ elsif srr_set.to_f >= -1.1 && srr_set <= -0.9
194
+ # Get the maximum NECB srr
195
+ srr_lim = self.get_standards_constant('skylight_to_roof_ratio_max_value')
196
+ apply_max_srr_nrcan(model: model, srr_lim: srr_lim.to_f)
197
+ return
198
+ elsif srr_set.to_f >= -2.1 && srr_set <= -1.9
199
+ return
200
+ elsif srr_set.to_f >= -3.1 && srr_set <= -2.9
201
+ # Continue with the rest of this method, use old method which reduces existing skylight size (if necessary) to
202
+ # meet maximum srr limit
203
+ elsif srr_set < -3.1
204
+ apply_max_srr_nrcan(model: model, srr_lim: srr_set.to_f)
205
+ return
206
+ else
207
+ return
208
+ end
209
+
210
+ # SRR limit
211
+ srr_lim = self.get_standards_constant('skylight_to_roof_ratio_max_value') * 100.0
212
+
213
+ # Loop through all spaces in the model, and
214
+ # per the PNNL PRM Reference Manual, find the areas
215
+ # of each space conditioning category (res, nonres, semi-heated)
216
+ # separately. Include space multipliers.
217
+ nr_wall_m2 = 0.001 # Avoids divide by zero errors later
218
+ nr_sky_m2 = 0
219
+ res_wall_m2 = 0.001
220
+ res_sky_m2 = 0
221
+ sh_wall_m2 = 0.001
222
+ sh_sky_m2 = 0
223
+ total_roof_m2 = 0.001
224
+ total_subsurface_m2 = 0
225
+ model.getSpaces.sort.each do |space|
226
+ # Loop through all surfaces in this space
227
+ wall_area_m2 = 0
228
+ sky_area_m2 = 0
229
+ space.surfaces.sort.each do |surface|
230
+ # Skip non-outdoor surfaces
231
+ next unless surface.outsideBoundaryCondition == 'Outdoors'
232
+ # Skip non-walls
233
+ next unless surface.surfaceType == 'RoofCeiling'
234
+ # This wall's gross area (including skylight area)
235
+ wall_area_m2 += surface.grossArea * space.multiplier
236
+ # Subsurfaces in this surface
237
+ surface.subSurfaces.sort.each do |ss|
238
+ sky_area_m2 += ss.netArea * space.multiplier
239
+ end
240
+ end
241
+
242
+ # Determine the space category
243
+ cat = 'NonRes'
244
+ if space_residential?(space)
245
+ cat = 'Res'
246
+ end
247
+ # if space.is_semiheated
248
+ # cat = 'Semiheated'
249
+ # end
250
+
251
+ # Add to the correct category
252
+ case cat
253
+ when 'NonRes'
254
+ nr_wall_m2 += wall_area_m2
255
+ nr_sky_m2 += sky_area_m2
256
+ when 'Res'
257
+ res_wall_m2 += wall_area_m2
258
+ res_sky_m2 += sky_area_m2
259
+ when 'Semiheated'
260
+ sh_wall_m2 += wall_area_m2
261
+ sh_sky_m2 += sky_area_m2
262
+ end
263
+ total_roof_m2 += wall_area_m2
264
+ total_subsurface_m2 += sky_area_m2
265
+ end
266
+
267
+ # Calculate the SRR of each category
268
+ srr_nr = ((nr_sky_m2 / nr_wall_m2) * 100).round(1)
269
+ srr_res = ((res_sky_m2 / res_wall_m2) * 100).round(1)
270
+ srr_sh = ((sh_sky_m2 / sh_wall_m2) * 100).round(1)
271
+ srr = ((total_subsurface_m2 / total_roof_m2) * 100.0).round(1)
272
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "The skylight to roof ratios (SRRs) are: NonRes: #{srr_nr.round}%, Res: #{srr_res.round}%.")
273
+
274
+ # Check against SRR limit
275
+ red_nr = srr_nr > srr_lim
276
+ red_res = srr_res > srr_lim
277
+ red_sh = srr_sh > srr_lim
278
+
279
+ # Stop here unless windows need reducing
280
+ return true unless srr > srr_lim
281
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Reducing the size of all windows (by raising sill height) to reduce window area down to the limit of #{srr_lim.round}%.")
282
+ # Determine the factors by which to reduce the window / door area
283
+ mult = srr_lim / srr
284
+
285
+ # Reduce the subsurface areas
286
+ model.getSpaces.sort.each do |space|
287
+ # Loop through all surfaces in this space
288
+ space.surfaces.sort.each do |surface|
289
+ # Skip non-outdoor surfaces
290
+ next unless surface.outsideBoundaryCondition == 'Outdoors'
291
+ # Skip non-walls
292
+ next unless surface.surfaceType == 'RoofCeiling'
293
+ # Subsurfaces in this surface
294
+ surface.subSurfaces.sort.each do |ss|
295
+ # Reduce the size of the subsurface
296
+ red = 1.0 - mult
297
+ sub_surface_reduce_area_by_percent_by_shrinking_toward_centroid(ss, red)
298
+ end
299
+ end
300
+ end
301
+
302
+ return true
303
+ end
304
+
305
+ # @author phylroy.lopez@nrcan.gc.ca
306
+ # @param hdd [Float]
307
+ # @return [Double] a constant float
308
+ def max_fwdr(hdd)
309
+ # get formula from json database.
310
+ return eval(get_standards_formula('fdwr_formula'))
311
+ end
312
+
313
+ # Go through the default construction sets and hard-assigned
314
+ # constructions. Clone the existing constructions and set their
315
+ # intended surface type and standards construction type per
316
+ # the PRM. For some standards, this will involve making
317
+ # modifications. For others, it will not.
318
+ #
319
+ # 90.1-2007, 90.1-2010, 90.1-2013
320
+ # @return [Bool] returns true if successful, false if not
321
+
322
+ def apply_standard_construction_properties(model:,
323
+ runner: nil,
324
+ # ext surfaces
325
+ ext_wall_cond: nil,
326
+ ext_floor_cond: nil,
327
+ ext_roof_cond: nil,
328
+ # ground surfaces
329
+ ground_wall_cond: nil,
330
+ ground_floor_cond: nil,
331
+ ground_roof_cond: nil,
332
+ # fixed Windows
333
+ fixed_window_cond: nil,
334
+ fixed_wind_solar_trans: nil,
335
+ fixed_wind_vis_trans: nil,
336
+ # operable windows
337
+ operable_wind_solar_trans: nil,
338
+ operable_window_cond: nil,
339
+ operable_wind_vis_trans: nil,
340
+ # glass doors
341
+ glass_door_cond: nil,
342
+ glass_door_solar_trans: nil,
343
+ glass_door_vis_trans: nil,
344
+ # opaque doors
345
+ door_construction_cond: nil,
346
+ overhead_door_cond: nil,
347
+ # skylights
348
+ skylight_cond: nil,
349
+ skylight_solar_trans: nil,
350
+ skylight_vis_trans: nil,
351
+ # tubular daylight dome
352
+ tubular_daylight_dome_cond: nil,
353
+ tubular_daylight_dome_solar_trans: nil,
354
+ tubular_daylight_dome_vis_trans: nil,
355
+ # tubular daylight diffuser
356
+ tubular_daylight_diffuser_cond: nil,
357
+ tubular_daylight_diffuser_solar_trans: nil,
358
+ tubular_daylight_diffuser_vis_trans: nil)
359
+
360
+ model.getDefaultConstructionSets.sort.each do |default_surface_construction_set|
361
+ BTAP.runner_register('Info', 'apply_standard_construction_properties', runner)
362
+ if model.weatherFile.empty? || model.weatherFile.get.path.empty? || !File.exist?(model.weatherFile.get.path.get.to_s)
363
+
364
+ BTAP.runner_register('Error', 'Weather file is not defined. Please ensure the weather file is defined and exists.', runner)
365
+ return false
366
+ end
367
+
368
+ # Lambdas are preferred over methods in methods for small utility methods.
369
+ correct_cond = lambda do |conductivity, surface_type|
370
+ # hdd required in scope for eval function.
371
+ hdd = get_necb_hdd18(model)
372
+ return conductivity.nil? || conductivity.to_f <= 0.0 || conductivity =="NECB_Default" ? eval(model_find_objects(@standards_data['surface_thermal_transmittance'], surface_type)[0]['formula']) : conductivity.to_f
373
+ end
374
+
375
+ # Converts trans and vis to nil if requesting default.. or casts the string to a float.
376
+ correct_vis_trans = lambda do |value|
377
+ return value.nil? || value.to_f <= 0.0 || value =="NECB_Default" ? nil : value.to_f
378
+ end
379
+
380
+ BTAP::Resources::Envelope::ConstructionSets.customize_default_surface_construction_set!(model: model,
381
+ name: "#{default_surface_construction_set.name.get} at hdd = #{get_necb_hdd18(model)}",
382
+ default_surface_construction_set: default_surface_construction_set,
383
+ # ext surfaces
384
+ ext_wall_cond: correct_cond.call(ext_wall_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Wall'}),
385
+ ext_floor_cond: correct_cond.call(ext_floor_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Floor'}),
386
+ ext_roof_cond: correct_cond.call(ext_roof_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'RoofCeiling'}),
387
+ # ground surfaces
388
+ ground_wall_cond: correct_cond.call(ground_wall_cond, {'boundary_condition' => 'Ground', 'surface' => 'Wall'}),
389
+ ground_floor_cond: correct_cond.call(ground_floor_cond, {'boundary_condition' => 'Ground', 'surface' => 'Floor'}),
390
+ ground_roof_cond: correct_cond.call(ground_roof_cond, {'boundary_condition' => 'Ground', 'surface' => 'RoofCeiling'}),
391
+ # fixed Windows
392
+ fixed_window_cond: correct_cond.call(fixed_window_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Window'}),
393
+ fixed_wind_solar_trans: correct_vis_trans.call(fixed_wind_solar_trans),
394
+ fixed_wind_vis_trans: correct_vis_trans.call(fixed_wind_vis_trans),
395
+ # operable windows
396
+ operable_wind_solar_trans: correct_vis_trans.call(operable_wind_solar_trans),
397
+ operable_window_cond: correct_cond.call(fixed_window_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Window'}),
398
+ operable_wind_vis_trans: correct_vis_trans.call(operable_wind_vis_trans),
399
+ # glass doors
400
+ glass_door_cond: correct_cond.call(glass_door_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Window'}),
401
+ glass_door_solar_trans: correct_vis_trans.call(glass_door_solar_trans),
402
+ glass_door_vis_trans: correct_vis_trans.call(glass_door_vis_trans),
403
+ # opaque doors
404
+ door_construction_cond: correct_cond.call(door_construction_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Door'}),
405
+ overhead_door_cond: correct_cond.call(overhead_door_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Door'}),
406
+ # skylights
407
+ skylight_cond: correct_cond.call(skylight_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Skylight'}),
408
+ skylight_solar_trans: correct_vis_trans.call(skylight_solar_trans),
409
+ skylight_vis_trans: correct_vis_trans.call(skylight_vis_trans),
410
+ # tubular daylight dome
411
+ tubular_daylight_dome_cond: correct_cond.call(skylight_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Skylight'}),
412
+ tubular_daylight_dome_solar_trans: correct_vis_trans.call(tubular_daylight_dome_solar_trans),
413
+ tubular_daylight_dome_vis_trans: correct_vis_trans.call(tubular_daylight_dome_vis_trans),
414
+ # tubular daylight diffuser
415
+ tubular_daylight_diffuser_cond: correct_cond.call(skylight_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Skylight'}),
416
+ tubular_daylight_diffuser_solar_trans: correct_vis_trans.call(tubular_daylight_diffuser_solar_trans),
417
+ tubular_daylight_diffuser_vis_trans: correct_vis_trans.call(tubular_daylight_diffuser_vis_trans)
418
+ )
419
+
420
+
421
+ end
422
+ # sets all surfaces to use default constructions sets except adiabatic, where it does a hard assignment of the interior wall construction type.
423
+ model.getPlanarSurfaces.sort.each(&:resetConstruction)
424
+ # if the default construction set is defined..try to assign the interior wall to the adiabatic surfaces
425
+ BTAP::Resources::Envelope.assign_interior_surface_construction_to_adiabatic_surfaces(model, nil)
426
+ BTAP.runner_register('Info', ' apply_standard_construction_properties was sucessful.', runner)
427
+
428
+ end
429
+
430
+ # Set all external surface conductances to NECB values.
431
+ # @author phylroy.lopez@nrcan.gc.ca
432
+ # @param surface [String]
433
+ # @param hdd [Float]
434
+ # @param is_radiant [Boolian]
435
+ # @param scaling_factor [Float]
436
+ # @return [String] surface as RSI
437
+ def set_necb_external_surface_conductance(surface, hdd, is_radiant = false, scaling_factor = 1.0)
438
+ conductance_value = 0
439
+
440
+ if surface.outsideBoundaryCondition.casecmp('outdoors').zero?
441
+
442
+ case surface.surfaceType.downcase
443
+ when 'wall'
444
+ conductance_value = @standards_data['conductances']['Wall'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
445
+ when 'floor'
446
+ conductance_value = @standards_data['conductances']['Floor'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
447
+ when 'roofceiling'
448
+ conductance_value = @standards_data['conductances']['Roof'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
449
+ end
450
+ if is_radiant
451
+ conductance_value *= 0.80
452
+ end
453
+ return BTAP::Geometry::Surfaces.set_surfaces_construction_conductance([surface], conductance_value)
454
+ end
455
+
456
+ if surface.outsideBoundaryCondition.downcase =~ /ground/
457
+ case surface.surfaceType.downcase
458
+ when 'wall'
459
+ conductance_value = @standards_data['conductances']['GroundWall'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
460
+ when 'floor'
461
+ conductance_value = @standards_data['conductances']['GroundFloor'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
462
+ when 'roofceiling'
463
+ conductance_value = @standards_data['conductances']['GroundRoof'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
464
+ end
465
+ if is_radiant
466
+ conductance_value *= 0.80
467
+ end
468
+ return BTAP::Geometry::Surfaces.set_surfaces_construction_conductance([surface], conductance_value)
469
+ end
470
+ end
471
+
472
+ # Set all external subsurfaces (doors, windows, skylights) to NECB values.
473
+ # @author phylroy.lopez@nrcan.gc.ca
474
+ # @param subsurface [String]
475
+ # @param hdd [Float]
476
+ def set_necb_external_subsurface_conductance(subsurface, hdd)
477
+ conductance_value = 0
478
+
479
+ if subsurface.outsideBoundaryCondition.downcase.match('outdoors')
480
+ case subsurface.subSurfaceType.downcase
481
+ when /window/
482
+ conductance_value = @standards_data['conductances']['Window'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
483
+ when /door/
484
+ conductance_value = @standards_data['conductances']['Door'].find { |i| i['hdd'] > hdd }['thermal_transmittance'] * scaling_factor
485
+ end
486
+ subsurface.setRSI(1 / conductance_value)
487
+ end
488
+ end
489
+
490
+ # Adds code-minimum constructions based on the building type
491
+ # as defined in the OpenStudio_Standards_construction_sets.json file.
492
+ # Where there is a separate construction set specified for the
493
+ # individual space type, this construction set will be created and applied
494
+ # to this space type, overriding the whole-building construction set.
495
+ #
496
+ # @param building_type [String] the type of building
497
+ # @param climate_zone [String] the name of the climate zone the building is in
498
+ # @return [Bool] returns true if successful, false if not
499
+ def model_add_constructions(model)
500
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started applying constructions')
501
+
502
+ # Assign construction to adiabatic construction
503
+ # Assign a material to all internal mass objects
504
+ assign_contruction_to_adiabatic_surfaces(model)
505
+ # The constructions lookup table uses a slightly different list of
506
+ # building types.
507
+ apply_building_default_constructionset(model)
508
+ # Make a construction set for each space type, if one is specified
509
+ # apply_default_constructionsets_to_spacetypes(climate_zone, model)
510
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished applying constructions')
511
+ return true
512
+ end
513
+
514
+ def apply_building_default_constructionset(model)
515
+
516
+ bldg_def_const_set = model_add_construction_set_from_osm(model: model)
517
+ model.getBuilding.setDefaultConstructionSet(bldg_def_const_set)
518
+
519
+ end
520
+
521
+ def apply_default_constructionsets_to_spacetypes(climate_zone, model)
522
+ model.getSpaceTypes.sort.each do |space_type|
523
+ # Get the standards building type
524
+ stds_building_type = nil
525
+ if space_type.standardsBuildingType.is_initialized
526
+ stds_building_type = space_type.standardsBuildingType.get
527
+ else
528
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Space type called '#{space_type.name}' has no standards building type.")
529
+ end
530
+
531
+ # Get the standards space type
532
+ stds_spc_type = nil
533
+ if space_type.standardsSpaceType.is_initialized
534
+ stds_spc_type = space_type.standardsSpaceType.get
535
+ else
536
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Space type called '#{space_type.name}' has no standards space type.")
537
+ end
538
+
539
+ # If the standards space type is Attic,
540
+ # the building type should be blank.
541
+ if stds_spc_type == 'Attic'
542
+ stds_building_type = ''
543
+ end
544
+
545
+ # Attempt to make a construction set for this space type
546
+ # and assign it if it can be created.
547
+ spc_type_const_set = model_add_construction_set_from_osm(model: model)
548
+ if spc_type_const_set.is_initialized
549
+ space_type.setDefaultConstructionSet(spc_type_const_set.get)
550
+ end
551
+ end
552
+ end
553
+
554
+ def model_add_construction_set_from_osm(model:,
555
+ construction_set_name: 'BTAP-Mass',
556
+ osm_path: File.absolute_path(File.join(__FILE__, '..', '..', 'common/construction_defaults.osm')))
557
+ # load resources model
558
+ construction_library = BTAP::FileIO::load_osm(osm_path)
559
+
560
+ if not construction_library.getDefaultConstructionSetByName(construction_set_name.to_s).is_initialized
561
+ runner.registerError('Did not find the expected construction in library.')
562
+ return false
563
+ end
564
+ selected_construction_set = construction_library.getDefaultConstructionSetByName(construction_set_name.to_s).get
565
+ new_construction_set = selected_construction_set.clone(model).to_DefaultConstructionSet.get
566
+ return new_construction_set
567
+ end
568
+
569
+ def assign_contruction_to_adiabatic_surfaces(model)
570
+ cp02_carpet_pad = OpenStudio::Model::MasslessOpaqueMaterial.new(model)
571
+ cp02_carpet_pad.setName('CP02 CARPET PAD')
572
+ cp02_carpet_pad.setRoughness('VeryRough')
573
+ cp02_carpet_pad.setThermalResistance(0.21648)
574
+ cp02_carpet_pad.setThermalAbsorptance(0.9)
575
+ cp02_carpet_pad.setSolarAbsorptance(0.7)
576
+ cp02_carpet_pad.setVisibleAbsorptance(0.8)
577
+
578
+ normalweight_concrete_floor = OpenStudio::Model::StandardOpaqueMaterial.new(model)
579
+ normalweight_concrete_floor.setName('100mm Normalweight concrete floor')
580
+ normalweight_concrete_floor.setRoughness('MediumSmooth')
581
+ normalweight_concrete_floor.setThickness(0.1016)
582
+ normalweight_concrete_floor.setConductivity(2.31)
583
+ normalweight_concrete_floor.setDensity(2322)
584
+ normalweight_concrete_floor.setSpecificHeat(832)
585
+
586
+ nonres_floor_insulation = OpenStudio::Model::MasslessOpaqueMaterial.new(model)
587
+ nonres_floor_insulation.setName('Nonres_Floor_Insulation')
588
+ nonres_floor_insulation.setRoughness('MediumSmooth')
589
+ nonres_floor_insulation.setThermalResistance(2.88291975297193)
590
+ nonres_floor_insulation.setThermalAbsorptance(0.9)
591
+ nonres_floor_insulation.setSolarAbsorptance(0.7)
592
+ nonres_floor_insulation.setVisibleAbsorptance(0.7)
593
+
594
+ floor_adiabatic_construction = OpenStudio::Model::Construction.new(model)
595
+ floor_adiabatic_construction.setName('Floor Adiabatic construction')
596
+ floor_layers = OpenStudio::Model::MaterialVector.new
597
+ floor_layers << cp02_carpet_pad
598
+ floor_layers << normalweight_concrete_floor
599
+ floor_layers << nonres_floor_insulation
600
+ floor_adiabatic_construction.setLayers(floor_layers)
601
+
602
+ g01_13mm_gypsum_board = OpenStudio::Model::StandardOpaqueMaterial.new(model)
603
+ g01_13mm_gypsum_board.setName('G01 13mm gypsum board')
604
+ g01_13mm_gypsum_board.setRoughness('Smooth')
605
+ g01_13mm_gypsum_board.setThickness(0.0127)
606
+ g01_13mm_gypsum_board.setConductivity(0.1600)
607
+ g01_13mm_gypsum_board.setDensity(800)
608
+ g01_13mm_gypsum_board.setSpecificHeat(1090)
609
+ g01_13mm_gypsum_board.setThermalAbsorptance(0.9)
610
+ g01_13mm_gypsum_board.setSolarAbsorptance(0.7)
611
+ g01_13mm_gypsum_board.setVisibleAbsorptance(0.5)
612
+
613
+ wall_adiabatic_construction = OpenStudio::Model::Construction.new(model)
614
+ wall_adiabatic_construction.setName('Wall Adiabatic construction')
615
+ wall_layers = OpenStudio::Model::MaterialVector.new
616
+ wall_layers << g01_13mm_gypsum_board
617
+ wall_layers << g01_13mm_gypsum_board
618
+ wall_adiabatic_construction.setLayers(wall_layers)
619
+
620
+ m10_200mm_concrete_block_basement_wall = OpenStudio::Model::StandardOpaqueMaterial.new(model)
621
+ m10_200mm_concrete_block_basement_wall.setName('M10 200mm concrete block basement wall')
622
+ m10_200mm_concrete_block_basement_wall.setRoughness('MediumRough')
623
+ m10_200mm_concrete_block_basement_wall.setThickness(0.2032)
624
+ m10_200mm_concrete_block_basement_wall.setConductivity(1.326)
625
+ m10_200mm_concrete_block_basement_wall.setDensity(1842)
626
+ m10_200mm_concrete_block_basement_wall.setSpecificHeat(912)
627
+
628
+ basement_wall_construction = OpenStudio::Model::Construction.new(model)
629
+ basement_wall_construction.setName('Basement Wall construction')
630
+ basement_wall_layers = OpenStudio::Model::MaterialVector.new
631
+ basement_wall_layers << m10_200mm_concrete_block_basement_wall
632
+ basement_wall_construction.setLayers(basement_wall_layers)
633
+
634
+ basement_floor_construction = OpenStudio::Model::Construction.new(model)
635
+ basement_floor_construction.setName('Basement Floor construction')
636
+ basement_floor_layers = OpenStudio::Model::MaterialVector.new
637
+ basement_floor_layers << m10_200mm_concrete_block_basement_wall
638
+ basement_floor_layers << cp02_carpet_pad
639
+ basement_floor_construction.setLayers(basement_floor_layers)
640
+
641
+ model.getSurfaces.sort.each do |surface|
642
+ if surface.outsideBoundaryCondition.to_s == 'Adiabatic'
643
+ if surface.surfaceType.to_s == 'Wall'
644
+ surface.setConstruction(wall_adiabatic_construction)
645
+ else
646
+ surface.setConstruction(floor_adiabatic_construction)
647
+ end
648
+ elsif surface.outsideBoundaryCondition.to_s == 'OtherSideCoefficients'
649
+ # Ground
650
+ if surface.surfaceType.to_s == 'Wall'
651
+ surface.setOutsideBoundaryCondition('Ground')
652
+ surface.setConstruction(basement_wall_construction)
653
+ else
654
+ surface.setOutsideBoundaryCondition('Ground')
655
+ surface.setConstruction(basement_floor_construction)
656
+ end
657
+ end
658
+ end
659
+ end
660
+
661
+ def scale_model_geometry(model, x_scale, y_scale, z_scale)
662
+ # Identity matrix for setting space origins
663
+ m = OpenStudio::Matrix.new(4, 4, 0)
664
+
665
+ m[0, 0] = 1.0 / x_scale
666
+ m[1, 1] = 1.0 / y_scale
667
+ m[2, 2] = 1.0 / z_scale
668
+ m[3, 3] = 1.0
669
+ t = OpenStudio::Transformation.new(m)
670
+ model.getPlanarSurfaceGroups().each do |planar_surface|
671
+ planar_surface.changeTransformation(t)
672
+ end
673
+ return model
674
+ end
675
+
676
+ # This method applies the maximum fenestration and door to wall ratio to a building as per NECB 2011 8.4.4.3 and
677
+ # 3.2.1.4 (or equivalent in other versions of the NECB). It first checks for al exterior walls adjacent to conditioned
678
+ # spaces. It distinguishes between plenums and other conditioned spaces. It uses both to calculate the maximum window
679
+ # area to be applied to the building but attempts to put these windows only on non-plenum conditioned spaces (if
680
+ # possible).
681
+ def apply_max_fdwr_nrcan(model:, fdwr_lim:)
682
+ # First determine which vertical (between 89 and 91 degrees from horizontal) walls are adjacent to conditioned
683
+ # spaces.
684
+ exp_surf_info = find_exposed_conditioned_vertical_surfaces(model)
685
+ # If there are none (or very few) then throw a warning.
686
+ if exp_surf_info["total_exp_wall_area_m2"] < 0.1
687
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "This building has no exposed walls adjacent to heated spaces.")
688
+ return false
689
+ end
690
+
691
+ construct_set = model.getBuilding.defaultConstructionSet.get
692
+ fixed_window_construct_set = construct_set.defaultExteriorSubSurfaceConstructions.get.fixedWindowConstruction.get
693
+
694
+ # IF FDWR is greater than 1 then something is wrong raise an error. If it is less than 0.001 assume all the windows
695
+ # should go.
696
+ if fdwr_lim > 1
697
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "This building requires a larger window area than there is wall area.")
698
+ return false
699
+ elsif fdwr_lim < 0.001
700
+ exp_surf_info["exp_nonplenum_walls"].sort.each do |exp_surf|
701
+ remove_All_Subsurfaces(surface: exp_surf)
702
+ end
703
+ return true
704
+ end
705
+ # Get the required window area.
706
+ win_area = fdwr_lim * exp_surf_info["total_exp_wall_area_m2"]
707
+ # Try to put the windows on non-plenum walls if possible. So determine if you can fit the required window area
708
+ # on the non-plenum wall area.
709
+ if win_area <= exp_surf_info["exp_nonplenum_wall_area_m2"]
710
+ # If you can fit the windows on the non-plenum wall area then recalculate the window ratio so that is is only for
711
+ # the non-plenum walls.
712
+ nonplenum_fdwr = win_area / exp_surf_info["exp_nonplenum_wall_area_m2"]
713
+ exp_surf_info["exp_nonplenum_walls"].sort.each do |exp_surf|
714
+ # Remove any subsurfaces, add the window, set the name to be whatever the surface name is plus the subsurface
715
+ # type (which will be 'fixedwindow')
716
+ remove_All_Subsurfaces(surface: exp_surf)
717
+ set_Window_To_Wall_Ratio_set_name(surface: exp_surf, area_fraction: nonplenum_fdwr, construction: fixed_window_construct_set)
718
+ end
719
+ else
720
+ # There was not enough non-plenum wall area so add the windows to both the plenum and non-plenum walls. This is
721
+ # done separately because the 'find_exposed_conditioned_vertical_surfaces' method returns the plenum and
722
+ # non-plenum walls separately.
723
+ exp_surf_info["exp_nonplenum_walls"].sort.each do |exp_surf|
724
+ # Remove any subsurfaces, add the window, set the name to be whatever the surface name is plus the subsurface
725
+ # type (which will be 'fixedwindow')
726
+ remove_All_Subsurfaces(surface: exp_surf)
727
+ set_Window_To_Wall_Ratio_set_name(surface: exp_surf, area_fraction: fdwr_lim, construction: fixed_window_construct_set)
728
+ end
729
+ exp_surf_info["exp_plenum_walls"].sort.each do |exp_surf|
730
+ # Remove any subsurfaces, add the window, set the name to be whatever the surface name is plus the subsurface
731
+ # type (which will be 'fixedwindow')
732
+ remove_All_Subsurfaces(surface: exp_surf)
733
+ set_Window_To_Wall_Ratio_set_name(surface: exp_surf, area_fraction: fdwr_lim, construction: fixed_window_construct_set)
734
+ end
735
+ end
736
+ return true
737
+ end
738
+
739
+ # This method is similar to the 'apply_max_fdwr' method above but applies the maximum skylight to roof area ratio to a
740
+ # building as per NECB 2011 8.4.4.3 and 3.2.1.4 (or equivalent in other versions of the NECB). It first checks for all
741
+ # exterior roofs adjacent to conditioned spaces. It distinguishes between plenums and other conditioned spaces. It
742
+ # uses only the non-plenum roof area to calculate the maximum skylight area to be applied to the building.
743
+ def apply_max_srr_nrcan(model:, srr_lim:)
744
+ # First determine which roof surfaces are adjacent to heated spaces (both plenum and non-plenum).
745
+ exp_surf_info = find_exposed_conditioned_roof_surfaces(model)
746
+ # If the non-plenum roof area is very small raise a warning. It may be perfectly fine but it is probably a good
747
+ # idea to warn the user.
748
+ if exp_surf_info["exp_nonplenum_roof_area_m2"] < 0.1
749
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "This building has no exposed ceilings adjacent to spaces that are not attics or plenums. No skylights will be added.")
750
+ return false
751
+ end
752
+
753
+ # If the SRR is greater than one something is seriously wrong so raise an error. If it is less than 0.001 assume
754
+ # all the skylights should go.
755
+ if srr_lim > 1
756
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "This building requires a larger skylight area than there is roof area.")
757
+ return false
758
+ elsif srr_lim < 0.001
759
+ exp_surf_info["exp_nonplenum_roofs"].sort.each do |exp_surf|
760
+ remove_All_Subsurfaces(surface: exp_surf)
761
+ end
762
+ return true
763
+ end
764
+
765
+ construct_set = model.getBuilding.defaultConstructionSet.get
766
+ skylight_construct_set = construct_set.defaultExteriorSubSurfaceConstructions.get.skylightConstruction.get
767
+
768
+ # Go through all of exposed roofs adjacent to heated, non-plenum spaces, remove any existing subsurfaces, and add
769
+ # a skylight in the centroid of the surface, with the same shape of the surface, only scaled to be the area
770
+ # determined by the SRR. The name of the skylight will be the surface name with the subsurface type attached
771
+ # ('skylight' in this case). Note that this method will only work if the surface does not fold into itself (like an
772
+ # L or a V).
773
+ exp_surf_info["exp_nonplenum_roofs"].sort.each do |roof|
774
+ # sub_surface_create_centered_subsurface_from_scaled_surface(roof, srr_lim, model)
775
+ sub_surface_create_scaled_subsurfaces_from_surface(surface: roof, area_fraction: srr_lim, model: model, consturction: skylight_construct_set)
776
+ end
777
+ return true
778
+ end
779
+ end