openstudio-standards 0.8.4 → 0.8.5.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.osm +30 -30
  3. data/data/geometry/ASHRAECourthouse.osm +22 -22
  4. data/data/geometry/ASHRAESmallOfficeDetailed.osm +2 -2
  5. data/data/geometry/DEER_Asm.osm +1 -1
  6. data/data/geometry/DEER_ECC.osm +1 -1
  7. data/data/geometry/DEER_EPr.osm +1 -1
  8. data/data/geometry/DEER_ERC.osm +1 -1
  9. data/data/geometry/DEER_ESe.osm +1 -1
  10. data/data/geometry/DEER_EUn.osm +1 -1
  11. data/data/geometry/DEER_Hsp.osm +1 -1
  12. data/data/geometry/DEER_Htl.osm +1 -1
  13. data/data/geometry/DEER_MBT.osm +1 -1
  14. data/data/geometry/DEER_MFm.osm +1 -1
  15. data/data/geometry/DEER_Nrs.osm +1 -1
  16. data/data/geometry/DEER_OfL.osm +1 -1
  17. data/data/geometry/DEER_OfS.osm +1 -1
  18. data/data/geometry/DEER_RFF.osm +1 -1
  19. data/data/geometry/DEER_RSD.osm +1 -1
  20. data/data/geometry/DEER_Rt3.osm +1 -1
  21. data/data/geometry/DEER_RtS.osm +1 -1
  22. data/data/standards/export_OpenStudio_libraries.rb +2 -3
  23. data/data/standards/test_performance_expected_dd_results.csv +42 -42
  24. data/lib/openstudio-standards/btap/NECB_building_types.csv +35 -0
  25. data/lib/openstudio-standards/btap/NECB_space_types.csv +109 -0
  26. data/lib/openstudio-standards/btap/activity.rb +480 -0
  27. data/lib/openstudio-standards/btap/attributes.rb +166 -0
  28. data/lib/openstudio-standards/btap/bridging.rb +561 -1402
  29. data/lib/openstudio-standards/btap/btap.rb +4 -2
  30. data/lib/openstudio-standards/btap/btap_test_helper.rb +86 -0
  31. data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +177 -0
  32. data/lib/openstudio-standards/btap/{costing/common_paths.rb → common_paths.rb} +14 -11
  33. data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
  34. data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
  35. data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
  36. data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
  37. data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
  38. data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting.csv +59 -59
  39. data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_hvac.csv +1019 -1032
  40. data/lib/openstudio-standards/btap/costing/btap_costing.rb +3 -7
  41. data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +1 -5
  42. data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +5 -4
  43. data/lib/openstudio-standards/btap/costing/dcv_costing.rb +1 -1
  44. data/lib/openstudio-standards/btap/costing/envelope_costing.rb +112 -181
  45. data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +4 -4
  46. data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +2 -1
  47. data/lib/openstudio-standards/btap/costing/lighting_costing.rb +3 -3
  48. data/lib/openstudio-standards/btap/costing/test_list.txt +15 -17
  49. data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +10 -9
  50. data/lib/openstudio-standards/btap/geometry.rb +86 -6
  51. data/lib/openstudio-standards/btap/structure.rb +657 -0
  52. data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
  53. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
  54. data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
  55. data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
  56. data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
  57. data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
  58. data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
  59. data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
  60. data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
  61. data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
  62. data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
  63. data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
  64. data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
  65. data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
  66. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
  67. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
  68. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
  69. data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
  70. data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
  71. data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
  72. data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
  73. data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
  74. data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
  75. data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
  76. data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
  77. data/lib/openstudio-standards/hvac/components/component.rb +39 -0
  78. data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
  79. data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
  80. data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
  81. data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
  82. data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
  83. data/lib/openstudio-standards/hvac/conversions.rb +222 -0
  84. data/lib/openstudio-standards/hvac/curves.rb +192 -0
  85. data/lib/openstudio-standards/hvac/helpers.rb +357 -0
  86. data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
  87. data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
  88. data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
  89. data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
  90. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
  91. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
  92. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
  93. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
  94. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  95. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  96. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  97. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
  98. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  99. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
  100. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  101. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  102. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
  103. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
  104. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
  105. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
  106. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
  107. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
  108. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
  109. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
  110. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
  111. data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
  112. data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
  113. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
  114. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
  115. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
  116. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
  117. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
  118. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
  119. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
  120. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
  121. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
  122. data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
  123. data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
  124. data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
  125. data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
  126. data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
  127. data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
  128. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
  129. data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
  130. data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
  131. data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
  132. data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
  133. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
  134. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
  135. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
  136. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
  137. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
  138. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
  139. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
  140. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
  141. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
  142. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
  143. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
  144. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
  145. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
  146. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
  147. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
  148. data/lib/openstudio-standards/standards/Standards.Model.rb +6 -11
  149. data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
  150. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
  151. data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
  152. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
  153. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
  154. data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
  155. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
  156. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
  157. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
  158. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
  159. 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 +37 -102
  160. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
  161. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
  162. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  163. 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 +37 -37
  164. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
  165. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
  166. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  167. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
  168. 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 +37 -102
  169. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
  170. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
  171. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  172. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
  173. 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 +45 -109
  174. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
  180. 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 +45 -109
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
  183. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
  184. 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 +37 -37
  185. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
  186. 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 +37 -37
  187. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
  188. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  189. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
  192. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
  193. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
  194. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
  195. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
  196. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
  197. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
  198. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
  199. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
  200. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
  201. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
  203. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
  204. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
  205. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +1 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
  207. data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
  208. data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
  209. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +19 -10
  210. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
  211. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
  212. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
  213. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +69 -92
  214. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +2 -1
  215. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
  216. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
  217. data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
  218. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +32 -0
  219. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +18 -0
  220. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
  221. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +5 -5
  222. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +2 -0
  223. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +30 -141
  224. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +233 -112
  225. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
  226. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -2
  227. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
  228. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
  229. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
  230. data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
  231. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +16 -4
  232. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +65 -42
  233. data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
  234. data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
  235. data/lib/openstudio-standards/version.rb +1 -1
  236. data/lib/openstudio-standards/weather/stat_file.rb +2 -2
  237. data/lib/openstudio-standards.rb +55 -38
  238. metadata +106 -66
  239. data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +0 -61
  240. data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +0 -1904
  241. data/lib/openstudio-standards/hvac/components/create.rb +0 -169
  242. data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
  243. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
  244. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
  245. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
  246. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
  247. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
  248. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
  249. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
  250. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
  251. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
  252. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
  253. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
  254. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
  255. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
  256. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
  257. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
  258. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
  259. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
  260. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
  261. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
  262. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
  263. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
  264. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
  265. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
  266. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
  267. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
  268. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
  269. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
  270. data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
  271. data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
  272. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/ConstructionProperties.csv +0 -0
  273. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/Constructions.csv +0 -0
  274. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/construction_sets.csv +0 -0
  275. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/constructions_opaque.csv +0 -0
  276. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/costs_local_factors.csv +0 -0
  277. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/hvac_vent_ahu.csv +0 -0
  278. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting_sets.csv +0 -0
  279. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/locations.csv +0 -0
  280. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_glazing.csv +0 -0
  281. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_lighting.csv +0 -0
  282. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_opaque.csv +0 -0
  283. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
  284. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
  285. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
  286. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
  287. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
  288. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
  289. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
@@ -3,113 +3,18 @@ class Standard
3
3
 
4
4
  include CoilDX
5
5
 
6
- # Finds capacity in W. This is the cooling capacity of the paired DX cooling coil.
7
- #
8
- # @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
9
- # @param necb_ref_hp [Boolean] for compatability with NECB ruleset only.
10
- # @return [Double] capacity in W to be used for find object
11
- def coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed, necb_ref_hp = false)
12
- capacity_w = nil
13
-
14
- # Get the paired cooling coil
15
- clg_coil = nil
16
-
17
- # Unitary and zone equipment
18
- if coil_heating_dx_single_speed.airLoopHVAC.empty?
19
- if coil_heating_dx_single_speed.containingHVACComponent.is_initialized
20
- containing_comp = coil_heating_dx_single_speed.containingHVACComponent.get
21
- if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
22
- clg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.coolingCoil
23
- elsif containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
24
- unitary = containing_comp.to_AirLoopHVACUnitarySystem.get
25
- if unitary.coolingCoil.is_initialized
26
- clg_coil = unitary.coolingCoil.get
27
- end
28
- end
29
- # @todo Add other unitary systems
30
- elsif coil_heating_dx_single_speed.containingZoneHVACComponent.is_initialized
31
- containing_comp = coil_heating_dx_single_speed.containingZoneHVACComponent.get
32
- # PTHP
33
- if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
34
- pthp = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get
35
- clg_coil = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get.coolingCoil
36
- end
37
- end
38
- end
39
-
40
- # On AirLoop directly
41
- if coil_heating_dx_single_speed.airLoopHVAC.is_initialized
42
- air_loop = coil_heating_dx_single_speed.airLoopHVAC.get
43
- # Check for the presence of any other type of cooling coil
44
- clg_types = ['OS:Coil:Cooling:DX:SingleSpeed',
45
- 'OS:Coil:Cooling:DX:TwoSpeed',
46
- 'OS:Coil:Cooling:DX:MultiSpeed']
47
- clg_types.each do |ct|
48
- coils = air_loop.supplyComponents(ct.to_IddObjectType)
49
- next if coils.empty?
50
-
51
- clg_coil = coils[0]
52
- break # Stop on first DX cooling coil found
53
- end
54
- end
55
-
56
- # If no paired cooling coil was found,
57
- # throw an error and fall back to the heating capacity
58
- # of the DX heating coil
59
- if clg_coil.nil?
60
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, the paired DX cooling coil could not be found to determine capacity. Efficiency will incorrectly be based on DX coil's heating capacity.")
61
- if coil_heating_dx_single_speed.ratedTotalHeatingCapacity.is_initialized
62
- capacity_w = coil_heating_dx_single_speed.ratedTotalHeatingCapacity.get
63
- elsif coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.is_initialized
64
- capacity_w = coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.get
65
- else
66
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name} capacity is not available, cannot apply efficiency standard to paired DX heating coil.")
67
- return 0.0
68
- end
69
- return capacity_w
70
- end
71
-
72
- # If a coil was found, cast to the correct type
73
- if clg_coil.to_CoilCoolingDXSingleSpeed.is_initialized
74
- clg_coil = clg_coil.to_CoilCoolingDXSingleSpeed.get
75
- capacity_w = coil_cooling_dx_single_speed_find_capacity(clg_coil)
76
- elsif clg_coil.to_CoilCoolingDXTwoSpeed.is_initialized
77
- clg_coil = clg_coil.to_CoilCoolingDXTwoSpeed.get
78
- capacity_w = coil_cooling_dx_two_speed_find_capacity(clg_coil)
79
- elsif clg_coil.to_CoilCoolingDXMultiSpeed.is_initialized
80
- clg_coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
81
- capacity_w = coil_cooling_dx_multi_speed_find_capacity(clg_coil)
82
- end
83
-
84
- # If it's a PTAC or PTHP System, we need to divide the capacity by the potential zone multiplier
85
- # because the COP is dependent on capacity, and the capacity should be the capacity of a single zone, not all the zones
86
- if ['PTAC', 'PTHP'].include?(coil_dx_subcategory(coil_heating_dx_single_speed))
87
- mult = 1
88
- comp = coil_heating_dx_single_speed.containingZoneHVACComponent
89
- if comp.is_initialized && comp.get.thermalZone.is_initialized
90
- mult = comp.get.thermalZone.get.multiplier
91
- if mult > 1
92
- total_cap = capacity_w
93
- capacity_w /= mult
94
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, total capacity of #{OpenStudio.convert(total_cap, 'W', 'kBtu/hr').get.round(2)}kBTU/hr was divided by the zone multiplier of #{mult} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
95
- end
96
- end
97
- end
98
-
99
- return capacity_w
100
- end
101
-
102
6
  # Finds lookup object in standards and return efficiency
103
7
  #
104
8
  # @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
105
9
  # @param rename [Boolean] if true, object will be renamed to include capacity and efficiency level
106
10
  # @param necb_ref_hp [Boolean] for compatability with NECB ruleset only.
11
+ # @param equipment_type [Boolean] indicate that equipment_type should be in the search criteria.
107
12
  # @return [Double] full load efficiency (COP)
108
13
  def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_speed, rename = false, necb_ref_hp = false, equipment_type = false)
109
14
  coil_efficiency_data = standards_data['heat_pumps_heating']
110
15
 
111
16
  # Get the capacity
112
- capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed, necb_ref_hp)
17
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
113
18
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
114
19
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
115
20
 
@@ -128,7 +33,7 @@ class Standard
128
33
  if equipment_type == 'PTHP'
129
34
  search_criteria['application'] = coil_dx_packaged_terminal_application(coil_heating_dx_single_speed)
130
35
  end
131
- elsif !coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
36
+ elsif !OpenstudioStandards::HVAC.coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
132
37
  search_criteria['equipment_type'] = 'Heat Pumps'
133
38
  end
134
39
  unless (template == 'NECB2011') || (template == 'NECB2015') || (template == 'NECB2017') || (template == 'NECB2020') || (template == 'BTAPPRE1980') ||
@@ -182,7 +87,7 @@ class Standard
182
87
  end
183
88
 
184
89
  min_coph = pthp_cop_coeff_1 - (pthp_cop_coeff_2 * capacity_btu_per_hr / 1000.0)
185
- cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_btu_per_hr, 'Btu/hr', 'W').get)
90
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_btu_per_hr, 'Btu/hr', 'W').get)
186
91
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_coph.round(1)}COPH"
187
92
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}: #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph.round(2)}")
188
93
  end
@@ -190,7 +95,7 @@ class Standard
190
95
  # If specified as HSPF
191
96
  unless hp_props['minimum_heating_seasonal_performance_factor'].nil?
192
97
  min_hspf = hp_props['minimum_heating_seasonal_performance_factor']
193
- cop = hspf_to_cop_no_fan(min_hspf)
98
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
194
99
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF"
195
100
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
196
101
  end
@@ -199,7 +104,7 @@ class Standard
199
104
  # TODO: assumed to be the same as HSPF for now
200
105
  unless hp_props['minimum_heating_seasonal_performance_factor_2'].nil?
201
106
  min_hspf = hp_props['minimum_heating_seasonal_performance_factor_2']
202
- cop = hspf_to_cop_no_fan(min_hspf)
107
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
203
108
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF2"
204
109
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
205
110
  end
@@ -207,7 +112,7 @@ class Standard
207
112
  # If specified as COPH
208
113
  unless hp_props['minimum_coefficient_of_performance_heating'].nil?
209
114
  min_coph = hp_props['minimum_coefficient_of_performance_heating']
210
- cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
115
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
211
116
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_coph.round(1)}COPH"
212
117
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph}")
213
118
  end
@@ -215,11 +120,19 @@ class Standard
215
120
  # If specified as EER
216
121
  unless hp_props['minimum_energy_efficiency_ratio'].nil?
217
122
  min_eer = hp_props['minimum_energy_efficiency_ratio']
218
- cop = eer_to_cop_no_fan(min_eer)
123
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
219
124
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_eer.round(1)}EER"
220
125
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
221
126
  end
222
127
 
128
+ # If specified as SEER
129
+ unless hp_props['minimum_seasonal_energy_efficiency_ratio'].nil?
130
+ min_seer = hp_props['minimum_seasonal_energy_efficiency_ratio']
131
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
132
+ new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_seer.round(1)}SEER"
133
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
134
+ end
135
+
223
136
  # Rename
224
137
  if rename
225
138
  coil_heating_dx_single_speed.setName(new_comp_name)
@@ -243,7 +156,7 @@ class Standard
243
156
  equipment_type = coil_efficiency_data[0].keys.include?('equipment_type') ? true : false
244
157
 
245
158
  # Get the capacity
246
- capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed, necb_ref_hp)
159
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
247
160
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
248
161
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
249
162
 
@@ -255,7 +168,7 @@ class Standard
255
168
  if ['PTHP'].include?(equipment_type) && template.include?('90.1')
256
169
  search_criteria['application'] = coil_dx_packaged_terminal_application(coil_heating_dx_single_speed)
257
170
  end
258
- elsif !coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
171
+ elsif !OpenstudioStandards::HVAC.coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
259
172
  search_criteria['equipment_type'] = 'Heat Pumps'
260
173
  end
261
174
  unless (template == 'NECB2011') || (template == 'NECB2015') || (template == 'NECB2017') || (template == 'NECB2020') || (template == 'BTAPPRE1980') ||
@@ -24,7 +24,7 @@ class Standard
24
24
  search_criteria = coil_heating_gas_additional_search_criteria(coil_heating_gas, search_criteria)
25
25
 
26
26
  # Get the capacity, but return false if not available
27
- capacity_w = coil_heating_gas_find_capacity(coil_heating_gas)
27
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_gas_get_capacity(coil_heating_gas)
28
28
 
29
29
  # Return false if the coil does not have a heating capacity associated with it. Cannot apply the standard if without
30
30
  # it.
@@ -56,7 +56,7 @@ class Standard
56
56
  # If specified as AFUE
57
57
  unless furnace_props['minimum_annual_fuel_utilization_efficiency'].nil?
58
58
  min_afue = furnace_props['minimum_annual_fuel_utilization_efficiency']
59
- thermal_eff = afue_to_thermal_eff(min_afue)
59
+ thermal_eff = OpenstudioStandards::HVAC.afue_to_thermal_eff(min_afue)
60
60
  new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
61
61
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
62
62
  end
@@ -64,7 +64,7 @@ class Standard
64
64
  # If specified as combustion efficiency
65
65
  unless furnace_props['minimum_combustion_efficiency'].nil?
66
66
  min_comb_eff = furnace_props['minimum_combustion_efficiency']
67
- thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
67
+ thermal_eff = OpenstudioStandards::HVAC.combustion_eff_to_thermal_eff(min_comb_eff)
68
68
  new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
69
69
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
70
70
  end
@@ -85,24 +85,4 @@ class Standard
85
85
 
86
86
  return successfully_set_all_properties
87
87
  end
88
-
89
- # Retrieves the capacity of an OpenStudio::Model::CoilHeatingGas in watts
90
- #
91
- # @param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] the gas heating coil
92
- # @return [Double, false] a double representing the capacity of the CoilHeatingGas object in watts. If unsuccessful in
93
- # determining the capacity, this function returns false.
94
- def coil_heating_gas_find_capacity(coil_heating_gas)
95
- capacity_w = nil
96
- if coil_heating_gas.nominalCapacity.is_initialized
97
- capacity_w = coil_heating_gas.nominalCapacity.get
98
- elsif coil_heating_gas.autosizedNominalCapacity.is_initialized
99
- capacity_w = coil_heating_gas.autosizedNominalCapacity.get
100
- else
101
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGas', "For #{coil_heating_gas.name} capacity is not available, cannot apply efficiency standard.")
102
- successfully_set_all_properties = false
103
- return successfully_set_all_properties
104
- end
105
-
106
- return capacity_w
107
- end
108
88
  end
@@ -45,28 +45,4 @@ class Standard
45
45
  successfully_set_all_properties = false
46
46
  end
47
47
  end
48
-
49
- # Finds capacity in W
50
- #
51
- # @param coil_heating_gas_multi_stage [OpenStudio::Model::CoilHeatingGasMultiStage] coil heating gas multi stage object
52
- # @return [Double] capacity in W to be used for find object
53
- def coil_heating_gas_multi_stage_find_capacity(coil_heating_gas_multi_stage)
54
- capacity_w = nil
55
- htg_stages = coil_heating_gas_multi_stage.stages
56
- if htg_stages.last.nominalCapacity.is_initialized
57
- capacity_w = htg_stages.last.nominalCapacity.get
58
- elsif (htg_stages.size == 1) && coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.is_initialized
59
- capacity_w = coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.get
60
- elsif (htg_stages.size == 2) && coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.is_initialized
61
- capacity_w = coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.get
62
- elsif (htg_stages.size == 3) && coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.is_initialized
63
- capacity_w = coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.get
64
- elsif (htg_stages.size == 4) && coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.is_initialized
65
- capacity_w = coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.get
66
- else
67
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_heating_gas_multi_stage.name} capacity is not available, cannot apply efficiency standard.")
68
- successfully_set_all_properties = false
69
- return successfully_set_all_properties
70
- end
71
- end
72
48
  end
@@ -1,90 +1,6 @@
1
1
  class Standard
2
2
  # @!group CoilHeatingWaterToAirHeatPumpEquationFit
3
3
 
4
- # Finds capacity in W.
5
- # This is the cooling capacity of the paired cooling coil.
6
- #
7
- # @param coil_heating_water_to_air_heat_pump [OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit] coil heating object
8
- # @return [Double] capacity in W to be used for find object
9
- def coil_heating_water_to_air_heat_pump_find_capacity(coil_heating_water_to_air_heat_pump)
10
- capacity_w = nil
11
-
12
- # Get the paired cooling coil
13
- clg_coil = nil
14
-
15
- # Unitary and zone equipment
16
- if coil_heating_water_to_air_heat_pump.airLoopHVAC.empty?
17
- if coil_heating_water_to_air_heat_pump.containingHVACComponent.is_initialized
18
- containing_comp = coil_heating_water_to_air_heat_pump.containingHVACComponent.get
19
- if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
20
- clg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.coolingCoil
21
- elsif containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
22
- unitary = containing_comp.to_AirLoopHVACUnitarySystem.get
23
- if unitary.coolingCoil.is_initialized
24
- clg_coil = unitary.coolingCoil.get
25
- end
26
- end
27
- elsif coil_heating_water_to_air_heat_pump.containingZoneHVACComponent.is_initialized
28
- containing_comp = coil_heating_water_to_air_heat_pump.containingZoneHVACComponent.get
29
- # PTHP
30
- if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
31
- clg_coil = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get.coolingCoil
32
- # WSHP
33
- elsif containing_comp.to_ZoneHVACWaterToAirHeatPump.is_initialized
34
- clg_coil = containing_comp.to_ZoneHVACWaterToAirHeatPump.get.coolingCoil
35
- end
36
- end
37
- end
38
-
39
- # On AirLoop directly
40
- if coil_heating_water_to_air_heat_pump.airLoopHVAC.is_initialized
41
- air_loop = coil_heating_water_to_air_heat_pump.airLoopHVAC.get
42
- # Check for the presence of any other type of cooling coil
43
- clg_types = ['OS:Coil:Cooling:DX:SingleSpeed',
44
- 'OS:Coil:Cooling:DX:TwoSpeed',
45
- 'OS:Coil:Cooling:DX:MultiSpeed']
46
- clg_types.each do |ct|
47
- coils = air_loop.supplyComponents(ct.to_IddObjectType)
48
- next if coils.empty?
49
-
50
- clg_coil = coils[0]
51
- break # Stop on first cooling coil found
52
- end
53
- end
54
-
55
- # If no paired cooling coil was found,
56
- # throw an error and fall back to the heating capacity of the heating coil
57
- if clg_coil.nil?
58
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingWaterToAirHeatPumpEquationFit', "For #{coil_heating_water_to_air_heat_pump.name}, the paired cooling coil could not be found to determine capacity. Efficiency will incorrectly be based on coil's heating capacity.")
59
- if coil_heating_water_to_air_heat_pump.ratedTotalHeatingCapacity.is_initialized
60
- capacity_w = coil_heating_water_to_air_heat_pump.ratedTotalHeatingCapacity.get
61
- elsif coil_heating_water_to_air_heat_pump.autosizedRatedTotalHeatingCapacity.is_initialized
62
- capacity_w = coil_heating_water_to_air_heat_pump.autosizedRatedTotalHeatingCapacity.get
63
- else
64
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingWaterToAirHeatPumpEquationFit', "For #{coil_heating_water_to_air_heat_pump.name} capacity is not available, cannot apply efficiency standard to paired heating coil.")
65
- return 0.0
66
- end
67
- return capacity_w
68
- end
69
-
70
- # If a coil was found, cast to the correct type
71
- if clg_coil.to_CoilCoolingDXSingleSpeed.is_initialized
72
- clg_coil = clg_coil.to_CoilCoolingDXSingleSpeed.get
73
- capacity_w = coil_cooling_dx_single_speed_find_capacity(clg_coil)
74
- elsif clg_coil.to_CoilCoolingDXTwoSpeed.is_initialized
75
- clg_coil = clg_coil.to_CoilCoolingDXTwoSpeed.get
76
- capacity_w = coil_cooling_dx_two_speed_find_capacity(clg_coil)
77
- elsif clg_coil.to_CoilCoolingDXMultiSpeed.is_initialized
78
- clg_coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
79
- capacity_w = coil_cooling_dx_multi_speed_find_capacity(clg_coil)
80
- elsif clg_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.is_initialized
81
- clg_coil = clg_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.get
82
- capacity_w = coil_cooling_water_to_air_heat_pump_find_capacity(clg_coil)
83
- end
84
-
85
- return capacity_w
86
- end
87
-
88
4
  # Finds lookup object in standards and return efficiency
89
5
  #
90
6
  # @param coil_heating_water_to_air_heat_pump [OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit] coil heating object
@@ -93,7 +9,7 @@ class Standard
93
9
  def coil_heating_water_to_air_heat_pump_standard_minimum_cop(coil_heating_water_to_air_heat_pump, rename = false)
94
10
  search_criteria = {}
95
11
  search_criteria['template'] = template
96
- capacity_w = coil_heating_water_to_air_heat_pump_find_capacity(coil_heating_water_to_air_heat_pump)
12
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_water_to_air_heat_pump)
97
13
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
98
14
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
99
15
 
@@ -136,7 +52,7 @@ class Standard
136
52
  # Get the search criteria
137
53
  search_criteria = {}
138
54
  search_criteria['template'] = template
139
- capacity_w = coil_heating_water_to_air_heat_pump_find_capacity(coil_heating_water_to_air_heat_pump)
55
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_water_to_air_heat_pump)
140
56
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
141
57
 
142
58
  # Look up the efficiency characteristics
@@ -3,113 +3,6 @@ class Standard
3
3
 
4
4
  include Fan
5
5
 
6
- # Modify the fan curve coefficients to reflect a specific type of control.
7
- #
8
- # @param fan_variable_volume [OpenStudio::Model::FanVariableVolume] variable volume fan object
9
- # @param control_type [String] valid choices are:
10
- # Multi Zone VAV with discharge dampers,
11
- # Multi Zone VAV with VSD and SP Setpoint Reset,
12
- # Multi Zone VAV with AF or BI Riding Curve,
13
- # Multi Zone VAV with AF or BI with Inlet Vanes,
14
- # Multi Zone VAV with FC Riding Curve,
15
- # Multi Zone VAV with FC with Inlet Vanes,
16
- # Multi Zone VAV with Vane-axial with Variable Pitch Blades,
17
- # Multi Zone VAV with VSD and Fixed SP Setpoint,
18
- # Multi Zone VAV with VSD and Static Pressure Reset,
19
- # Single Zone VAV Fan
20
- # @return [Boolean] returns true if successful, false if not
21
- def fan_variable_volume_set_control_type(fan_variable_volume, control_type)
22
- # Determine the coefficients
23
- coeff_a = nil
24
- coeff_b = nil
25
- coeff_c = nil
26
- coeff_d = nil
27
- min_pct_pwr = nil
28
- case control_type
29
-
30
- # add 'Multi Zone VAV with discharge dampers' and change the minimum fan power fraction of "Multi Zone VAV with VSD and Static Pressure Reset"
31
- when 'Multi Zone VAV with discharge dampers'
32
- coeff_a = 0.18984763
33
- coeff_b = 0.31447014
34
- coeff_c = 0.49568211
35
- coeff_d = 0.0
36
- min_pct_pwr = 0.25
37
- when 'Multi Zone VAV with VSD and SP Setpoint Reset'
38
- coeff_a = 0.04076
39
- coeff_b = 0.0881
40
- coeff_c = -0.0729
41
- coeff_d = 0.9437
42
- min_pct_pwr = 0.25
43
- when 'Multi Zone VAV with AF or BI Riding Curve'
44
- coeff_a = 0.1631
45
- coeff_b = 1.5901
46
- coeff_c = -0.8817
47
- coeff_d = 0.1281
48
- min_pct_pwr = 0.7
49
- when 'Multi Zone VAV with AF or BI with Inlet Vanes'
50
- coeff_a = 0.9977
51
- coeff_b = -0.659
52
- coeff_c = 0.9547
53
- coeff_d = -0.2936
54
- min_pct_pwr = 0.5
55
- when 'Multi Zone VAV with FC Riding Curve'
56
- coeff_a = 0.1224
57
- coeff_b = 0.612
58
- coeff_c = 0.5983
59
- coeff_d = -0.3334
60
- min_pct_pwr = 0.3
61
- when 'Multi Zone VAV with FC with Inlet Vanes'
62
- coeff_a = 0.3038
63
- coeff_b = -0.7608
64
- coeff_c = 2.2729
65
- coeff_d = -0.8169
66
- min_pct_pwr = 0.3
67
- when 'Multi Zone VAV with Vane-axial with Variable Pitch Blades'
68
- coeff_a = 0.1639
69
- coeff_b = -0.4016
70
- coeff_c = 1.9909
71
- coeff_d = -0.7541
72
- min_pct_pwr = 0.2
73
- when 'Multi Zone VAV with VSD and Fixed SP Setpoint'
74
- coeff_a = 0.0013
75
- coeff_b = 0.1470
76
- coeff_c = 0.9506
77
- coeff_d = -0.0998
78
- min_pct_pwr = 0.2
79
- when 'Multi Zone VAV with VSD and Static Pressure Reset'
80
- coeff_a = 0.04076
81
- coeff_b = 0.0881
82
- coeff_c = -0.0729
83
- coeff_d = 0.9437
84
- min_pct_pwr = 0.1
85
- when 'Single Zone VAV Fan'
86
- coeff_a = 0.027828
87
- coeff_b = 0.026583
88
- coeff_c = -0.087069
89
- coeff_d = 1.030920
90
- min_pct_pwr = 0.1
91
- else
92
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "Fan control type '#{control_type}' not recognized, fan power coefficients will not be changed.")
93
- return false
94
- end
95
-
96
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: Set fan curve coefficients to reflect control type of '#{control_type}'.")
97
-
98
- # Set the coefficients
99
- fan_variable_volume.setFanPowerCoefficient1(coeff_a)
100
- fan_variable_volume.setFanPowerCoefficient2(coeff_b)
101
- fan_variable_volume.setFanPowerCoefficient3(coeff_c)
102
- fan_variable_volume.setFanPowerCoefficient4(coeff_d)
103
-
104
- # Set the fan minimum power
105
- fan_variable_volume.setFanPowerMinimumFlowRateInputMethod('Fraction')
106
- fan_variable_volume.setFanPowerMinimumFlowFraction(min_pct_pwr)
107
-
108
- # Append the control type to the fan name
109
- # self.setName("#{self.name} #{control_type}")
110
- return true
111
- end
112
-
113
6
  # Determines whether there is a requirement to have a VSD or some other method to reduce fan power at low part load ratios.
114
7
  #
115
8
  # @param fan_variable_volume [OpenStudio::Model::FanVariableVolume] variable volume fan object
@@ -237,13 +237,8 @@ class Standard
237
237
  # Modify the internal loads in each space type, keeping user-defined schedules.
238
238
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Changing Lighting Loads ***')
239
239
  model.getSpaceTypes.sort.each do |space_type|
240
- set_people = false
241
- set_lights = true
242
- set_electric_equipment = false
243
- set_gas_equipment = false
244
- set_ventilation = false
245
- # For PRM, it only applies lights for now.
246
- space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation)
240
+ # For PRM, only apply lights for now
241
+ space_type_apply_internal_loads(space_type, set_people: false, set_lights: true, set_electric_equipment: false, set_gas_equipment: false, set_ventilation: false)
247
242
  end
248
243
 
249
244
  # Modify the lighting schedule to handle lighting occupancy sensors
@@ -774,10 +769,10 @@ class Standard
774
769
  end
775
770
 
776
771
  # This is only used for the stable baseline (2016 and later)
777
- if !applicable_zones.nil? && !applicable_zones.include?(zone)
778
- # This zone is not part of the current hvac_building_type
779
- next
780
- end
772
+ if !applicable_zones.nil? && !applicable_zones.include?(zone)
773
+ # This zone is not part of the current hvac_building_type
774
+ next
775
+ end
781
776
 
782
777
  # Skip unconditioned zones
783
778
  heated = OpenstudioStandards::ThermalZone.thermal_zone_heated?(zone)
@@ -0,0 +1,113 @@
1
+ class Standard
2
+ # @!group People
3
+
4
+ # Apply people from ventilation standards data to a space type
5
+ # Create a DesignSpecificationOutdoorAir air object and assign it to the SpaceType
6
+ #
7
+ # @param space_type [OpenStudio::Model::SpaceType] OpenStudio SpaceType object to apply people to
8
+ # @param thermal_comfort_models [Array<String>] optional argument to determine which thermal comfort model to use. Can select multiple with an array. Options are Fanger, Pierce, KSU, AdaptiveASH55, AdaptiveCEN15251, CoolingEffectASH55, and AnkleDraftASH55.
9
+ # @return [Boolean] returns true if successful, false if not
10
+ def space_type_apply_people(space_type, thermal_comfort_models: ['AdaptiveASH55'])
11
+ # Skip plenums
12
+ if space_type.name.get.to_s.downcase.include?('plenum')
13
+ return false
14
+ end
15
+
16
+ if space_type.standardsSpaceType.is_initialized && space_type.standardsSpaceType.get.downcase.include?('plenum')
17
+ return false
18
+ end
19
+
20
+ # Get the standards data
21
+ # @todo replace this look from standards_data['space_types'] to ventilation data directly, use 62.1 as a Standard
22
+ space_type_properties = space_type_get_standards_data(space_type)
23
+
24
+ # Ensure space_type_properties available
25
+ if space_type_properties.nil? || space_type_properties.empty?
26
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
27
+ return false
28
+ end
29
+
30
+ # People
31
+ people_have_info = false
32
+ occupancy_per_area = space_type_properties['occupancy_per_area'].to_f
33
+ people_have_info = true unless occupancy_per_area.zero?
34
+
35
+ if people_have_info
36
+ # Remove all but the first instance
37
+ instances = space_type.people.sort
38
+ if instances.empty?
39
+ # Create a new definition and instance
40
+ definition = OpenStudio::Model::PeopleDefinition.new(space_type.model)
41
+ definition.setName("#{space_type.name} People Definition")
42
+ instance = OpenStudio::Model::People.new(definition)
43
+ instance.setName("#{space_type.name} People")
44
+ instance.setSpaceType(space_type)
45
+ thermal_comfort_models.each { |m| definition.pushThermalComfortModelType(m)}
46
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no people, one has been created.")
47
+ instances << instance
48
+ elsif instances.size > 1
49
+ instances.each_with_index do |inst, i|
50
+ next if i.zero?
51
+
52
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
53
+ inst.remove
54
+ end
55
+ end
56
+
57
+ # Modify the definition of the instance
58
+ space_type.people.sort.each do |inst|
59
+ definition = inst.peopleDefinition
60
+ unless occupancy_per_area.zero?
61
+ definition.setPeopleperSpaceFloorArea(OpenStudio.convert(occupancy_per_area / 1000, 'people/ft^2', 'people/m^2').get)
62
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupancy to #{occupancy_per_area} people/1000 ft^2.")
63
+ end
64
+
65
+ # set fraction radiant
66
+ definition.setFractionRadiant(0.3)
67
+
68
+ # Clothing schedule for thermal comfort metrics
69
+ clothing_sch = space_type.model.getScheduleRulesetByName('Clothing Schedule')
70
+ if clothing_sch.is_initialized
71
+ clothing_sch = clothing_sch.get
72
+ else
73
+ clothing_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
74
+ clothing_sch.setName('Clothing Schedule')
75
+ clothing_sch.defaultDaySchedule.setName('Clothing Schedule Default Winter Clothes')
76
+ clothing_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1.0)
77
+ sch_rule = OpenStudio::Model::ScheduleRule.new(clothing_sch)
78
+ sch_rule.daySchedule.setName('Clothing Schedule Summer Clothes')
79
+ sch_rule.daySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.5)
80
+ sch_rule.setStartDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(5), 1))
81
+ sch_rule.setEndDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(9), 30))
82
+ end
83
+ inst.setClothingInsulationSchedule(clothing_sch)
84
+
85
+ # Air velocity schedule for thermal comfort metrics
86
+ air_velo_sch = space_type.model.getScheduleRulesetByName('Air Velocity Schedule')
87
+ if air_velo_sch.is_initialized
88
+ air_velo_sch = air_velo_sch.get
89
+ else
90
+ air_velo_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
91
+ air_velo_sch.setName('Air Velocity Schedule')
92
+ air_velo_sch.defaultDaySchedule.setName('Air Velocity Schedule Default')
93
+ air_velo_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.2)
94
+ end
95
+ inst.setAirVelocitySchedule(air_velo_sch)
96
+
97
+ # Work efficiency schedule for thermal comfort metrics
98
+ work_efficiency_sch = space_type.model.getScheduleRulesetByName('Work Efficiency Schedule')
99
+ if work_efficiency_sch.is_initialized
100
+ work_efficiency_sch = work_efficiency_sch.get
101
+ else
102
+ work_efficiency_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
103
+ work_efficiency_sch.setName('Work Efficiency Schedule')
104
+ work_efficiency_sch.defaultDaySchedule.setName('Work Efficiency Schedule Default')
105
+ work_efficiency_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0)
106
+ end
107
+ inst.setWorkEfficiencySchedule(work_efficiency_sch)
108
+ end
109
+ end
110
+
111
+ return true
112
+ end
113
+ end