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
@@ -2382,8 +2382,13 @@ class ECMS
2382
2382
  search_criteria['name'] = eqpt_name
2383
2383
 
2384
2384
  # Get the capacity
2385
- capacity_w = coil_cooling_dx_single_speed_find_capacity(coil_cooling_dx_single_speed)
2386
- capacity_w = [1.0,capacity_w].max
2385
+ multiplier = nil
2386
+ if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(coil_cooling_dx_single_speed))
2387
+ thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(coil_cooling_dx_single_speed)
2388
+ multiplier = thermal_zone.multiplier if !thermal_zone.nil?
2389
+ end
2390
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(coil_cooling_dx_single_speed, multiplier: multiplier)
2391
+ capacity_w = capacity_w.nil? ? 1.0 : [1.0, capacity_w].max
2387
2392
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2388
2393
 
2389
2394
  # Lookup efficiencies
@@ -2452,8 +2457,8 @@ class ECMS
2452
2457
  search_criteria['name'] = eqpt_name
2453
2458
 
2454
2459
  # Get the capacity
2455
- capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed)
2456
- capacity_w = [1.0,capacity_w].max
2460
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
2461
+ capacity_w = capacity_w.nil? ? 1.0 : [1.0, capacity_w].max
2457
2462
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2458
2463
 
2459
2464
  # Lookup efficiencies
@@ -2527,7 +2532,7 @@ class ECMS
2527
2532
  successfully_set_all_properties = true
2528
2533
 
2529
2534
  # Get the capacity
2530
- capacity_w = chiller_electric_eir_find_capacity(chiller_electric_eir)
2535
+ capacity_w = OpenstudioStandards::HVAC.chiller_electric_get_capacity(chiller_electric_eir)
2531
2536
  capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
2532
2537
 
2533
2538
  # Lookup performance curves
@@ -2732,8 +2737,11 @@ class ECMS
2732
2737
  search_criteria = {}
2733
2738
  search_criteria['name'] = eqpt_name
2734
2739
  # Get the capacity
2735
- capacity_w = airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
2736
- capacity_w = [1.0,capacity_w].max
2740
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_cooling_capacity(airconditioner_variablerefrigerantflow)
2741
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedTotalCoolingCapacity.is_initialized
2742
+ airconditioner_variablerefrigerantflow.setGrossRatedTotalCoolingCapacity(capacity_w)
2743
+ end
2744
+ capacity_w = [1.0, capacity_w].max
2737
2745
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2738
2746
 
2739
2747
  # Lookup performance curves
@@ -2863,8 +2871,11 @@ class ECMS
2863
2871
  search_criteria = {}
2864
2872
  search_criteria['name'] = eqpt_name
2865
2873
  # Get the capacity
2866
- capacity_w = airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
2867
- capacity_w = [1.0,capacity_w].max
2874
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_heating_capacity(airconditioner_variablerefrigerantflow)
2875
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedHeatingCapacity.is_initialized
2876
+ airconditioner_variablerefrigerantflow.setGrossRatedHeatingCapacity(capacity_w)
2877
+ end
2878
+ capacity_w = [1.0, capacity_w].max
2868
2879
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2869
2880
 
2870
2881
  # Lookup performance curves
@@ -2982,8 +2993,12 @@ class ECMS
2982
2993
  def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed,
2983
2994
  search_criteria,
2984
2995
  rename = false)
2985
-
2986
- capacity_w = coil_cooling_dx_single_speed_find_capacity(coil_cooling_dx_single_speed)
2996
+ multiplier = nil
2997
+ if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(coil_cooling_dx_single_speed))
2998
+ thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(coil_cooling_dx_single_speed)
2999
+ multiplier = thermal_zone.multiplier if !thermal_zone.nil?
3000
+ end
3001
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(coil_cooling_dx_single_speed, multiplier: multiplier)
2987
3002
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2988
3003
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2989
3004
 
@@ -3003,7 +3018,7 @@ class ECMS
3003
3018
  # If specified as SEER
3004
3019
  unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
3005
3020
  min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
3006
- cop = seer_to_cop_no_fan(min_seer)
3021
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3007
3022
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3008
3023
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3009
3024
  end
@@ -3011,7 +3026,7 @@ class ECMS
3011
3026
  # If specified as EER
3012
3027
  unless ac_props['minimum_energy_efficiency_ratio'].nil?
3013
3028
  min_eer = ac_props['minimum_energy_efficiency_ratio']
3014
- cop = eer_to_cop_no_fan(min_eer)
3029
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3015
3030
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3016
3031
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3017
3032
  end
@@ -3019,7 +3034,7 @@ class ECMS
3019
3034
  # if specified as SEER (heat pump)
3020
3035
  unless ac_props['minimum_seasonal_efficiency'].nil?
3021
3036
  min_seer = ac_props['minimum_seasonal_efficiency']
3022
- cop = seer_to_cop_no_fan(min_seer)
3037
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3023
3038
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3024
3039
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3025
3040
  end
@@ -3027,7 +3042,7 @@ class ECMS
3027
3042
  # If specified as EER (heat pump)
3028
3043
  unless ac_props['minimum_full_load_efficiency'].nil?
3029
3044
  min_eer = ac_props['minimum_full_load_efficiency']
3030
- cop = eer_to_cop_no_fan(min_eer)
3045
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3031
3046
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3032
3047
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3033
3048
  end
@@ -3055,7 +3070,7 @@ class ECMS
3055
3070
  search_criteria,
3056
3071
  rename = false)
3057
3072
 
3058
- capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed)
3073
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
3059
3074
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
3060
3075
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
3061
3076
 
@@ -3075,7 +3090,7 @@ class ECMS
3075
3090
  # If specified as EER
3076
3091
  unless props['minimum_energy_efficiency_ratio'].nil?
3077
3092
  min_eer = props['minimum_energy_efficiency_ratio']
3078
- cop = eer_to_cop_no_fan(min_eer)
3093
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3079
3094
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3080
3095
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3081
3096
  end
@@ -3083,7 +3098,7 @@ class ECMS
3083
3098
  # if specified as HSPF (heat pump)
3084
3099
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3085
3100
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3086
- cop = hspf_to_cop_no_fan(min_hspf)
3101
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3087
3102
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3088
3103
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3089
3104
  end
@@ -3091,7 +3106,7 @@ class ECMS
3091
3106
  # If specified as EER (heat pump)
3092
3107
  unless props['minimum_full_load_efficiency'].nil?
3093
3108
  min_eer = props['minimum_full_load_efficiency']
3094
- cop = eer_to_cop_no_fan(min_eer)
3109
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3095
3110
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3096
3111
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3097
3112
  end
@@ -3099,7 +3114,7 @@ class ECMS
3099
3114
  # If specified as COP
3100
3115
  unless props['minimum_coefficient_of_performance_heating'].nil?
3101
3116
  cop_min = props['minimum_coefficient_of_performance_heating']
3102
- cop = cop_heating_to_cop_heating_no_fan(cop_min, capacity_w)
3117
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(cop_min, capacity_w)
3103
3118
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
3104
3119
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3105
3120
  end
@@ -3140,7 +3155,7 @@ class ECMS
3140
3155
  # If specified as SEER
3141
3156
  unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
3142
3157
  min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
3143
- cop = seer_to_cop_no_fan(min_seer)
3158
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3144
3159
  new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3145
3160
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3146
3161
  end
@@ -3148,7 +3163,7 @@ class ECMS
3148
3163
  # If specified as EER
3149
3164
  unless ac_props['minimum_energy_efficiency_ratio'].nil?
3150
3165
  min_eer = ac_props['minimum_energy_efficiency_ratio']
3151
- cop = eer_to_cop_no_fan(min_eer)
3166
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3152
3167
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3153
3168
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3154
3169
  end
@@ -3156,7 +3171,7 @@ class ECMS
3156
3171
  # if specified as SEER (heat pump)
3157
3172
  unless ac_props['minimum_seasonal_efficiency'].nil?
3158
3173
  min_seer = ac_props['minimum_seasonal_efficiency']
3159
- cop = seer_to_cop_no_fan(min_seer)
3174
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3160
3175
  new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3161
3176
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3162
3177
  end
@@ -3164,7 +3179,7 @@ class ECMS
3164
3179
  # If specified as EER (heat pump)
3165
3180
  unless ac_props['minimum_full_load_efficiency'].nil?
3166
3181
  min_eer = ac_props['minimum_full_load_efficiency']
3167
- cop = eer_to_cop_no_fan(min_eer)
3182
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3168
3183
  new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3169
3184
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3170
3185
  end
@@ -3212,7 +3227,7 @@ class ECMS
3212
3227
  # If specified as EER
3213
3228
  unless props['minimum_energy_efficiency_ratio'].nil?
3214
3229
  min_eer = props['minimum_energy_efficiency_ratio']
3215
- cop = eer_to_cop_no_fan(min_eer)
3230
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3216
3231
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3217
3232
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3218
3233
  end
@@ -3220,7 +3235,7 @@ class ECMS
3220
3235
  # if specified as HSPF (heat pump)
3221
3236
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3222
3237
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3223
- cop = hspf_to_cop_no_fan(min_hspf)
3238
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3224
3239
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3225
3240
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3226
3241
  end
@@ -3228,7 +3243,7 @@ class ECMS
3228
3243
  # If specified as EER (heat pump)
3229
3244
  unless props['minimum_full_load_efficiency'].nil?
3230
3245
  min_eer = props['minimum_full_load_efficiency']
3231
- cop = eer_to_cop_no_fan(min_eer)
3246
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3232
3247
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3233
3248
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3234
3249
  end
@@ -3236,7 +3251,7 @@ class ECMS
3236
3251
  # If specified as COP
3237
3252
  unless props['minimum_coefficient_of_performance_heating'].nil?
3238
3253
  min_cop = props['minimum_coefficient_of_performance_heating']
3239
- cop = cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3254
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3240
3255
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
3241
3256
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3242
3257
  end
@@ -3257,7 +3272,10 @@ class ECMS
3257
3272
  search_criteria,
3258
3273
  rename = false)
3259
3274
 
3260
- capacity_w = airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
3275
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_cooling_capacity(airconditioner_variablerefrigerantflow)
3276
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedTotalCoolingCapacity.is_initialized
3277
+ airconditioner_variablerefrigerantflow.setGrossRatedTotalCoolingCapacity(capacity_w)
3278
+ end
3261
3279
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
3262
3280
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
3263
3281
 
@@ -3277,7 +3295,7 @@ class ECMS
3277
3295
  # If specified as EER
3278
3296
  unless props['minimum_energy_efficiency_ratio'].nil?
3279
3297
  min_eer = props['minimum_energy_efficiency_ratio']
3280
- cop = eer_to_cop_no_fan(min_eer)
3298
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3281
3299
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3282
3300
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3283
3301
  end
@@ -3285,7 +3303,7 @@ class ECMS
3285
3303
  # if specified as HSPF (heat pump)
3286
3304
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3287
3305
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3288
- cop = hspf_to_cop_no_fan(min_hspf)
3306
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3289
3307
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3290
3308
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3291
3309
  end
@@ -3293,7 +3311,7 @@ class ECMS
3293
3311
  # If specified as EER (heat pump)
3294
3312
  unless props['minimum_full_load_efficiency'].nil?
3295
3313
  min_eer = props['minimum_full_load_efficiency']
3296
- cop = eer_to_cop_no_fan(min_eer)
3314
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3297
3315
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3298
3316
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3299
3317
  end
@@ -3326,7 +3344,10 @@ class ECMS
3326
3344
  search_criteria,
3327
3345
  rename = false)
3328
3346
 
3329
- capacity_w = airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
3347
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_heating_capacity(airconditioner_variablerefrigerantflow)
3348
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedHeatingCapacity.is_initialized
3349
+ airconditioner_variablerefrigerantflow.setGrossRatedHeatingCapacity(capacity_w)
3350
+ end
3330
3351
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
3331
3352
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
3332
3353
 
@@ -3346,7 +3367,7 @@ class ECMS
3346
3367
  # If specified as EER
3347
3368
  unless props['minimum_energy_efficiency_ratio'].nil?
3348
3369
  min_eer = props['minimum_energy_efficiency_ratio']
3349
- cop = eer_to_cop_no_fan(min_eer)
3370
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3350
3371
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3351
3372
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3352
3373
  end
@@ -3354,7 +3375,7 @@ class ECMS
3354
3375
  # if specified as HSPF (heat pump)
3355
3376
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3356
3377
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3357
- cop = hspf_to_cop_no_fan(min_hspf)
3378
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3358
3379
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3359
3380
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3360
3381
  end
@@ -3362,7 +3383,7 @@ class ECMS
3362
3383
  # If specified as EER (heat pump)
3363
3384
  unless props['minimum_full_load_efficiency'].nil?
3364
3385
  min_eer = props['minimum_full_load_efficiency']
3365
- cop = eer_to_cop_no_fan(min_eer)
3386
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3366
3387
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3367
3388
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3368
3389
  end
@@ -3370,7 +3391,7 @@ class ECMS
3370
3391
  # If specified as COP
3371
3392
  unless props['minimum_coefficient_of_performance_heating'].nil?
3372
3393
  min_cop = props['minimum_coefficient_of_performance_heating']
3373
- cop = cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3394
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3374
3395
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
3375
3396
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3376
3397
  end
@@ -3417,57 +3438,6 @@ class ECMS
3417
3438
  return capacity_w
3418
3439
  end
3419
3440
 
3420
- # =============================================================================================================================
3421
- # Find cooling capacity for "AirConditionerVariableRefrigerantFlow" object
3422
- def airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
3423
- capacity_w = nil
3424
- if airconditioner_variablerefrigerantflow.ratedTotalCoolingCapacity.is_initialized
3425
- capacity_w = airconditioner_variablerefrigerantflow.ratedTotalCoolingCapacity.get
3426
- elsif airconditioner_variablerefrigerantflow.autosizedRatedTotalCoolingCapacity.is_initialized
3427
- capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalCoolingCapacity.get
3428
- airconditioner_variablerefrigerantflow.setRatedTotalCoolingCapacity(capacity_w)
3429
- else
3430
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} cooling capacity is not available.")
3431
- return 0.0
3432
- end
3433
-
3434
- return capacity_w
3435
- end
3436
-
3437
- # =============================================================================================================================
3438
- # Find heating capacity for "AirConditionerVariableRefrigerantFlow" object
3439
- def airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
3440
- capacity_w = nil
3441
- if airconditioner_variablerefrigerantflow.ratedTotalHeatingCapacity.is_initialized
3442
- capacity_w = airconditioner_variablerefrigerantflow.ratedTotalHeatingCapacity.get
3443
- elsif airconditioner_variablerefrigerantflow.autosizedRatedTotalHeatingCapacity.is_initialized
3444
- capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalHeatingCapacity.get
3445
- airconditioner_variablerefrigerantflow.setRatedTotalHeatingCapacity(capacity_w)
3446
- else
3447
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} heating capacity is not available.")
3448
- return 0.0
3449
- end
3450
-
3451
- return capacity_w
3452
- end
3453
-
3454
- # =============================================================================================================================
3455
- # Find cooling capacity for "ChillerElectricEIR" object
3456
- def chiller_electric_eir_find_capacity(chiller_electric_eir)
3457
- capacity_w = nil
3458
- if chiller_electric_eir.referenceCapacity.is_initialized
3459
- capacity_w = chiller_electric_eir.referenceCapacity.get
3460
- elsif chiller_electric_eir.autosizedRererenceCapacity.is_initialized
3461
- capacity_w = chiller_electric_eir.autosizedRerenceCapacity.get
3462
- chiller_electric_eir.setReferenceCapacity(capacity_w)
3463
- else
3464
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name} capacity not available")
3465
- return 0.0
3466
- end
3467
-
3468
- return capacity_w
3469
- end
3470
-
3471
3441
  # ============================================================================================================================
3472
3442
  # Apply boiler efficiency
3473
3443
  # This model takes an OS model and a boiler efficiency string or hash sent to it with the following form:
@@ -3772,10 +3742,17 @@ class ECMS
3772
3742
  search_criteria['name'] = unitary_cop_copy
3773
3743
  coil_name = coil.name.to_s
3774
3744
  if (sql_db_vars_map.has_key? coil_name) && !sizing_done then coil.setName(sql_db_vars_map[coil_name]) end
3745
+
3746
+ multiplier = nil
3747
+ if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(coil))
3748
+ thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(coil)
3749
+ multiplier = thermal_zone.multiplier if !thermal_zone.nil?
3750
+ end
3751
+
3775
3752
  if coil_type == 'SingleSpeed'
3776
- capacity_w = coil_cooling_dx_single_speed_find_capacity(coil)
3753
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(coil, multiplier: multiplier)
3777
3754
  elsif coil_type == 'MultiSpeed'
3778
- capacity_w = coil_cooling_dx_multi_speed_find_capacity(coil)
3755
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_multi_speed_get_capacity(coil, multiplier: multiplier)
3779
3756
  end
3780
3757
  coil.setName(coil_name)
3781
3758
  cop_package = model_find_object(@standards_data['tables']['unitary_cop_ecm'], search_criteria, capacity_w)
@@ -3807,9 +3784,9 @@ class ECMS
3807
3784
  if sizing_done
3808
3785
  cop = nil
3809
3786
  if unitary_cop['minimum_energy_efficiency_ratio']
3810
- cop = eer_to_cop_no_fan(unitary_cop['minimum_energy_efficiency_ratio'].to_f)
3787
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(unitary_cop['minimum_energy_efficiency_ratio'].to_f)
3811
3788
  elsif unitary_cop['minimum_seasonal_energy_efficiency_ratio']
3812
- cop = seer_to_cop_no_fan(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f)
3789
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f)
3813
3790
  elsif unitary_cop['minimum_coefficient_of_performance_cooling']
3814
3791
  cop = unitary_cop['minimum_coefficient_of_performance_cooling'].to_f
3815
3792
  end
@@ -739,7 +739,8 @@ class NECB2011
739
739
  new_spacetype.setStandardsSpaceType(new_spacetype_name)
740
740
  new_spacetype.setName("#{space.spaceType.get.standardsBuildingType.get} #{new_spacetype_name}")
741
741
  space_type_apply_internal_loads(space_type: new_spacetype, lights_type: lights_type, lights_scale: lights_scale)
742
- space_type_apply_internal_load_schedules(new_spacetype, true, true, true, true, true, true)
742
+ space_type_apply_internal_load_schedules(new_spacetype)
743
+ space_type_apply_thermostat_schedules(new_spacetype)
743
744
  end
744
745
  space.setSpaceType(new_spacetype)
745
746
  # sanity check.
@@ -16,13 +16,8 @@ class NECB2011
16
16
  space_type_apply_internal_loads(space_type: space_type)
17
17
 
18
18
  # Schedules
19
- space_type_apply_internal_load_schedules(space_type,
20
- true,
21
- true,
22
- true,
23
- true,
24
- true,
25
- true)
19
+ space_type_apply_internal_load_schedules(space_type)
20
+ space_type_apply_thermostat_schedules(space_type)
26
21
  end
27
22
  end
28
23
 
@@ -67,7 +62,6 @@ class NECB2011
67
62
  end
68
63
 
69
64
  # Get the space Type data from @standards data
70
-
71
65
  spacetype_data = @standards_data['tables']['space_types']['table']
72
66
 
73
67
  standards_building_type = space_type.standardsBuildingType.is_initialized ? space_type.standardsBuildingType.get : nil
@@ -79,6 +73,7 @@ class NECB2011
79
73
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
80
74
  return false
81
75
  end
76
+
82
77
  # People
83
78
  people_have_info = false
84
79
  occupancy_per_area = space_type_properties['occupancy_per_area'].to_f
@@ -296,9 +291,10 @@ class NECB2011
296
291
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation per area to #{ventilation_per_area} cfm/ft^2.")
297
292
  end
298
293
  unless ventilation_per_person.zero?
299
- # For BTAP we often use an occupancy per area rate for ventilation which is different from the one used for
300
- # everything else. The mod_ventilation_per_person rate adjusts the per person ventilation rate so that the
301
- # proper ventilation rate is calculated when using the general occupant per area rate.
294
+ # The occupancy per area rate for ventilation is different from the occupancy used for other loads as the occupancy assumption in the applicable
295
+ # ventilation standard is followed. The mod_ventilation_per_person rate adjusts the per person ventilation rate (from the standard) so that the
296
+ # correct ventilation rate (per the standard) is calculated when using the NECB occupant density (defined as occupancy_per_area in the space_types.json file)
297
+ # Later the method thermal_zone_convert_outdoor_air_to_per_area (in standards) uses the space occupancy which is the NECB figure to get the total vent rate.
302
298
  mod_ventilation_per_person = ventilation_per_person * ventilation_occupancy_per_area / occupancy_per_area
303
299
  ventilation.setOutdoorAirFlowperPerson(OpenStudio.convert(mod_ventilation_per_person.to_f, 'ft^3/min*person', 'm^3/s*person').get)
304
300
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation per person to #{mod_ventilation_per_person} cfm/person.")
@@ -307,7 +303,15 @@ class NECB2011
307
303
  ventilation.setOutdoorAirFlowAirChangesperHour(ventilation_ach)
308
304
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation to #{ventilation_ach} ACH.")
309
305
  end
310
-
306
+
307
+ # Add information about the source to an additional properties object. Used in unit testing but could be useful elsewhere.
308
+ notes = ventilation.additionalProperties
309
+ notes.setFeature("Ref OA per area", space_type_properties['ventilation_per_area'].to_f)
310
+ notes.setFeature("Ref OA per person", space_type_properties['ventilation_per_person'].to_f)
311
+ notes.setFeature("Ref OA ach", space_type_properties['ventilation_air_changes'].to_f)
312
+ notes.setFeature("Ref occupancy per 1000ft2", space_type_properties['ventilation_occupancy_rate_people_per_1000ft2'].to_f)
313
+ notes.setFeature("Ref standard", space_type_properties['ventilation_occupancy_standard'].to_s)
314
+ notes.setFeature("Ref space type", space_type_properties['ventilation_standard_space_type'].to_s)
311
315
  elsif set_ventilation && !ventilation_have_info
312
316
 
313
317
  # All space types must have a design spec OA