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
@@ -825,10 +825,10 @@ class Standard
825
825
  plant_loop.supplyComponents.each do |sc|
826
826
  if sc.to_PumpVariableSpeed.is_initialized
827
827
  pump = sc.to_PumpVariableSpeed.get
828
- pump_variable_speed_set_control_type(pump, pri_control_type)
828
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: pri_control_type)
829
829
  elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
830
830
  pump = sc.to_HeaderedPumpsVariableSpeed.get
831
- headered_pumps_variable_speed_set_control_type(pump, pri_control_type)
831
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: pri_control_type)
832
832
  end
833
833
  end
834
834
 
@@ -836,10 +836,10 @@ class Standard
836
836
  plant_loop.demandComponents.each do |sc|
837
837
  if sc.to_PumpVariableSpeed.is_initialized
838
838
  pump = sc.to_PumpVariableSpeed.get
839
- pump_variable_speed_set_control_type(pump, sec_control_type)
839
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: sec_control_type)
840
840
  elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
841
841
  pump = sc.to_HeaderedPumpsVariableSpeed.get
842
- headered_pumps_variable_speed_set_control_type(pump, sec_control_type)
842
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: sec_control_type)
843
843
  end
844
844
  end
845
845
 
@@ -869,7 +869,7 @@ class Standard
869
869
  plant_loop.supplyComponents.each do |sc|
870
870
  if sc.to_PumpVariableSpeed.is_initialized
871
871
  pump = sc.to_PumpVariableSpeed.get
872
- pump_variable_speed_set_control_type(pump, control_type)
872
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
873
873
  end
874
874
  end
875
875
 
@@ -898,10 +898,10 @@ class Standard
898
898
  plant_loop.supplyComponents.each do |sc|
899
899
  if sc.to_PumpVariableSpeed.is_initialized
900
900
  pump = sc.to_PumpVariableSpeed.get
901
- pump_variable_speed_set_control_type(pump, control_type)
901
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
902
902
  elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
903
903
  pump = sc.to_HeaderedPumpsVariableSpeed.get
904
- headered_pumps_variable_speed_set_control_type(pump, control_type)
904
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
905
905
  end
906
906
  end
907
907
 
@@ -1274,12 +1274,12 @@ class Standard
1274
1274
  plant_loop.supplyComponents.each do |component|
1275
1275
  if component.to_PumpConstantSpeed.is_initialized
1276
1276
  pump = component.to_PumpConstantSpeed.get
1277
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1277
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1278
1278
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1279
1279
  supply_w_per_gpm += pump_rated_w_per_gpm
1280
1280
  elsif component.to_PumpVariableSpeed.is_initialized
1281
1281
  pump = component.to_PumpVariableSpeed.get
1282
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1282
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1283
1283
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1284
1284
  supply_w_per_gpm += pump_rated_w_per_gpm
1285
1285
  end
@@ -1291,12 +1291,12 @@ class Standard
1291
1291
  demand_pumps.each do |component|
1292
1292
  if component.to_PumpConstantSpeed.is_initialized
1293
1293
  pump = component.to_PumpConstantSpeed.get
1294
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1294
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1295
1295
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1296
1296
  demand_w_per_gpm += pump_rated_w_per_gpm
1297
1297
  elsif component.to_PumpVariableSpeed.is_initialized
1298
1298
  pump = component.to_PumpVariableSpeed.get
1299
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1299
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1300
1300
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1301
1301
  demand_w_per_gpm += pump_rated_w_per_gpm
1302
1302
  end
@@ -81,7 +81,7 @@ module Pump
81
81
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "For #{pump.name}: motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_efficiency * 100).round(2)}%; #{target_w_per_gpm.round} W/gpm translates to a pressure rise of #{pressure_rise_ft_h2o.round(2)} ftH2O.")
82
82
 
83
83
  # Calculate the W/gpm for verification
84
- calculated_w = pump_pumppower(pump)
84
+ calculated_w = OpenstudioStandards::HVAC.pump_get_power(pump)
85
85
 
86
86
  calculated_w_per_gpm = calculated_w / flow_gpm
87
87
 
@@ -97,7 +97,7 @@ module Pump
97
97
  # @return [Boolean] returns true if successful, false if not
98
98
  def pump_apply_standard_minimum_motor_efficiency(pump)
99
99
  # Get the horsepower
100
- bhp = pump_brake_horsepower(pump)
100
+ bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(pump)
101
101
 
102
102
  # Find the motor efficiency
103
103
  motor_eff, nominal_hp = pump_standard_minimum_motor_efficiency_and_size(pump, bhp)
@@ -180,149 +180,4 @@ module Pump
180
180
 
181
181
  return [motor_eff, nominal_hp]
182
182
  end
183
-
184
- # Determines the pump power (W) based on flow rate, pressure rise,
185
- # and total pump efficiency(impeller eff * motor eff).
186
- # Uses the E+ default assumption of 0.78 impeller efficiency.
187
- #
188
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
189
- # PumpConstantSpeed, PumpVariableSpeed
190
- # @return [Double] pump power in watts
191
- def pump_pumppower(pump)
192
- # Get flow rate (whether autosized or hard-sized)
193
- flow_m3_per_s = 0
194
- flow_m3_per_s = if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
195
- if pump.ratedFlowRate.is_initialized
196
- pump.ratedFlowRate.get
197
- elsif pump.autosizedRatedFlowRate.is_initialized
198
- pump.autosizedRatedFlowRate.get
199
- end
200
- elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
201
- if pump.totalRatedFlowRate.is_initialized
202
- pump.totalRatedFlowRate.get
203
- elsif pump.autosizedTotalRatedFlowRate.is_initialized
204
- pump.autosizedTotalRatedFlowRate.get
205
- end
206
- end
207
-
208
- # E+ default impeller efficiency
209
- # http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing
210
- impeller_eff = 0.78
211
-
212
- # Get the motor efficiency
213
- motor_eff = pump.motorEfficiency
214
-
215
- # Calculate the total efficiency
216
- # which includes both motor and
217
- # impeller efficiency.
218
- pump_total_eff = impeller_eff * motor_eff
219
-
220
- # Get the pressure rise (Pa)
221
- pressure_rise_pa = pump.ratedPumpHead
222
-
223
- # Calculate the pump power (W)
224
- pump_power_w = pressure_rise_pa * flow_m3_per_s / pump_total_eff
225
-
226
- return pump_power_w
227
- end
228
-
229
- # Determines the brake horsepower of the pump based on flow rate,
230
- # pressure rise, and impeller efficiency.
231
- #
232
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
233
- # PumpConstantSpeed, PumpVariableSpeed
234
- # @return [Double] brake horsepower
235
- def pump_brake_horsepower(pump)
236
- # Get flow rate (whether autosized or hard-sized)
237
- # Get flow rate (whether autosized or hard-sized)
238
- flow_m3_per_s = 0
239
- flow_m3_per_s = if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
240
- if pump.ratedFlowRate.is_initialized
241
- pump.ratedFlowRate.get
242
- elsif pump.autosizedRatedFlowRate.is_initialized
243
- pump.autosizedRatedFlowRate.get
244
- end
245
- elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
246
- if pump.totalRatedFlowRate.is_initialized
247
- pump.totalRatedFlowRate.get
248
- elsif pump.autosizedTotalRatedFlowRate.is_initialized
249
- pump.autosizedTotalRatedFlowRate.get
250
- end
251
- end
252
-
253
- # E+ default impeller efficiency
254
- # http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing
255
- impeller_eff = 0.78
256
-
257
- # Get the pressure rise (Pa)
258
- pressure_rise_pa = pump.ratedPumpHead
259
-
260
- # Calculate the pump power (W)
261
- pump_power_w = pressure_rise_pa * flow_m3_per_s / impeller_eff
262
-
263
- # Convert to HP
264
- pump_power_hp = pump_power_w / 745.7 # 745.7 W/HP
265
-
266
- return pump_power_hp
267
- end
268
-
269
- # Determines the horsepower of the pump motor, including motor efficiency and pump impeller efficiency.
270
- #
271
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
272
- # PumpConstantSpeed, PumpVariableSpeed
273
- # @return [Double] motor horsepower
274
- def pump_motor_horsepower(pump)
275
- # Get the pump power
276
- pump_power_w = pump_pumppower(pump)
277
-
278
- # Convert to HP
279
- pump_hp = pump_power_w / 745.7 # 745.7 W/HP
280
-
281
- return pump_hp
282
- end
283
-
284
- # Determines the rated watts per GPM of the pump
285
- #
286
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
287
- # PumpConstantSpeed, PumpVariableSpeed
288
- # @return [Double] rated power consumption per flow in watts per gpm, W*min/gal
289
- def pump_rated_w_per_gpm(pump)
290
- # Get design power (whether autosized or hard-sized)
291
- rated_power_w = 0
292
- if pump.ratedPowerConsumption.is_initialized
293
- rated_power_w = pump.ratedPowerConsumption.get
294
- elsif pump.autosizedRatedPowerConsumption.is_initialized
295
- rated_power_w = pump.autosizedRatedPowerConsumption.get
296
- else
297
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.")
298
- return 0.0
299
- end
300
-
301
- rated_m3_per_s = 0
302
- if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
303
- if pump.ratedFlowRate.is_initialized
304
- rated_m3_per_s = pump.ratedFlowRate.get
305
- elsif pump.autosizedRatedFlowRate.is_initialized
306
- rated_m3_per_s = pump.autosizedRatedFlowRate.get
307
- else
308
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.")
309
- return 0.0
310
- end
311
- elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
312
- if pump.totalRatedFlowRate.is_initialized
313
- rated_m3_per_s = pump.totalRatedFlowRate.get
314
- elsif pump.autosizedTotalRatedFlowRate.is_initialized
315
- rated_m3_per_s = pump.autosizedTotalRatedFlowRate.get
316
- else
317
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.")
318
- return 0.0
319
- end
320
- end
321
-
322
- rated_w_per_m3s = rated_power_w / rated_m3_per_s
323
-
324
- rated_w_per_gpm = OpenStudio.convert(rated_w_per_m3s, 'W*s/m^3', 'W*min/gal').get
325
-
326
- return rated_w_per_gpm
327
- end
328
183
  end
@@ -1,54 +1,70 @@
1
1
  class Standard
2
- # @!group PumpVariableSpeed
3
-
4
2
  include Pump
5
3
 
6
- # Set the pump curve coefficients based on the specified control type.
4
+ # Determine and set type of part load control type for heating and chilled
5
+ # water variable speed pumps
7
6
  #
8
- # @param pump_variable_speed [OpenStudio::Model::PumpVariableSpeed] variable speed pump
9
- # @param control_type [String] valid choices are Riding Curve, VSD No Reset, VSD DP Reset
10
- def pump_variable_speed_set_control_type(pump_variable_speed, control_type)
11
- # Determine the coefficients
12
- coeff_a = nil
13
- coeff_b = nil
14
- coeff_c = nil
15
- coeff_d = nil
16
- case control_type
17
- when 'Constant Flow'
18
- coeff_a = 0.0
19
- coeff_b = 1.0
20
- coeff_c = 0.0
21
- coeff_d = 0.0
22
- when 'Riding Curve'
23
- coeff_a = 0.0
24
- coeff_b = 3.2485
25
- coeff_c = -4.7443
26
- coeff_d = 2.5294
27
- when 'VSD No Reset'
28
- coeff_a = 0.0
29
- coeff_b = 0.5726
30
- coeff_c = -0.301
31
- coeff_d = 0.7347
32
- when 'VSD DP Reset'
33
- coeff_a = 0.0
34
- coeff_b = 0.0205
35
- coeff_c = 0.4101
36
- coeff_d = 0.5753
7
+ # @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
8
+ # @return [Boolean] Returns true if applicable, false otherwise
9
+ def pump_variable_speed_control_type(pump)
10
+ # Get plant loop
11
+ plant_loop = pump.plantLoop.get
12
+
13
+ # Get plant loop type
14
+ plant_loop_type = plant_loop.sizingPlant.loopType
15
+ return false unless plant_loop_type == 'Heating' || plant_loop_type == 'Cooling'
16
+
17
+ # Get rated pump power
18
+ if pump.ratedPowerConsumption.is_initialized
19
+ pump_rated_power_w = pump.ratedPowerConsumption.get
20
+ elsif pump.autosizedRatedPowerConsumption.is_initialized
21
+ pump_rated_power_w = pump.autosizedRatedPowerConsumption.get
37
22
  else
38
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PumpVariableSpeed', "Pump control type '#{control_type}' not recognized, pump coefficients will not be changed.")
23
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.")
39
24
  return false
40
25
  end
41
26
 
42
- # Set the coefficients
43
- pump_variable_speed.setCoefficient1ofthePartLoadPerformanceCurve(coeff_a)
44
- pump_variable_speed.setCoefficient2ofthePartLoadPerformanceCurve(coeff_b)
45
- pump_variable_speed.setCoefficient3ofthePartLoadPerformanceCurve(coeff_c)
46
- pump_variable_speed.setCoefficient4ofthePartLoadPerformanceCurve(coeff_d)
47
- pump_variable_speed.setPumpControlType('Intermittent')
27
+ # Get nominal nameplate HP
28
+ pump_nominal_hp = pump_rated_power_w * pump.motorEfficiency / 745.7
29
+
30
+ # Assign peformance curves
31
+ control_type = pump_variable_speed_get_control_type(pump, plant_loop_type, pump_nominal_hp)
48
32
 
49
- # Append the control type to the pump name
50
- # self.setName("#{self.name} #{control_type}")
33
+ # Set pump part load performance curve coefficients
34
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type) if control_type
51
35
 
52
36
  return true
53
37
  end
38
+
39
+ # Determine type of pump part load control type
40
+ #
41
+ # @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
42
+ # @param plant_loop_type [String] Type of plant loop
43
+ # @param pump_nominal_hp [Float] Pump nominal horsepower
44
+ # @return [String] Pump part load control type
45
+ def pump_variable_speed_get_control_type(pump, plant_loop_type, pump_nominal_hp)
46
+ # Get plant loop
47
+ plant_loop = pump.plantLoop.get
48
+
49
+ # Default assumptions are based on ASHRAE 90.1-2010 Appendix G (G3.1.3.5 and G3.1.3.10)
50
+ case plant_loop_type
51
+ when 'Heating'
52
+ # Determine the area served by the plant loop
53
+ area_served_m2 = plant_loop_total_floor_area_served(plant_loop)
54
+ area_served_ft2 = OpenStudio.convert(area_served_m2, 'm^2', 'ft^2').get
55
+
56
+ return 'VSD No Reset' if area_served_ft2 > 120_000
57
+
58
+ # else
59
+ return 'Riding Curve'
60
+ when 'Cooling'
61
+ # Get plant loop capacity capacity
62
+ cooling_capacity_w = plant_loop_total_cooling_capacity(plant_loop)
63
+
64
+ return 'VSD No Reset' if cooling_capacity_w >= 300
65
+
66
+ # else
67
+ return 'Riding Curve'
68
+ end
69
+ end
54
70
  end
@@ -23,7 +23,7 @@ class Standard
23
23
  # lookup space type properties
24
24
  space_type_properties = model_find_object(standards_data['space_types'], search_criteria)
25
25
 
26
- if space_type_properties.nil?
26
+ if space_type_properties.nil? || space_type_properties.empty?
27
27
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SpaceType', "Space type properties lookup failed: #{search_criteria}.")
28
28
  space_type_properties = {}
29
29
  end
@@ -97,7 +97,7 @@ class Standard
97
97
  # loads directly assigned to spaces. This method skips plenums.
98
98
  #
99
99
  # @param space_type [OpenStudio::Model::SpaceType] space type object
100
- # @param set_people [Boolean] if true, set the people density.
100
+ # @param set_people [Boolean] if true, set the people density. occupancy values are in the ventilation standard.
101
101
  # Also, assign reasonable clothing, air velocity, and work efficiency inputs
102
102
  # to allow reasonable thermal comfort metrics to be calculated.
103
103
  # @param set_lights [Boolean] if true, set the lighting density, lighting fraction
@@ -106,10 +106,8 @@ class Standard
106
106
  # @param set_gas_equipment [Boolean] if true, set the gas equipment density
107
107
  # @param set_ventilation [Boolean] if true, set the ventilation rates (per-person and per-area)
108
108
  # @return [Boolean] returns true if successful, false if not
109
- def space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation)
109
+ def space_type_apply_internal_loads(space_type, set_people: true, set_lights: true, set_electric_equipment: true, set_gas_equipment: true, set_ventilation: true)
110
110
  # Skip plenums
111
- # Check if the space type name
112
- # contains the word plenum.
113
111
  if space_type.name.get.to_s.downcase.include?('plenum')
114
112
  return false
115
113
  end
@@ -126,87 +124,9 @@ class Standard
126
124
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
127
125
  return false
128
126
  end
129
- # People
130
- people_have_info = false
131
- occupancy_per_area = space_type_properties['occupancy_per_area'].to_f
132
- people_have_info = true unless occupancy_per_area.zero?
133
-
134
- if set_people && people_have_info
135
-
136
- # Remove all but the first instance
137
- instances = space_type.people.sort
138
- if instances.empty?
139
- # Create a new definition and instance
140
- definition = OpenStudio::Model::PeopleDefinition.new(space_type.model)
141
- definition.setName("#{space_type.name} People Definition")
142
- instance = OpenStudio::Model::People.new(definition)
143
- instance.setName("#{space_type.name} People")
144
- instance.setSpaceType(space_type)
145
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no people, one has been created.")
146
- instances << instance
147
- elsif instances.size > 1
148
- instances.each_with_index do |inst, i|
149
- next if i.zero?
150
127
 
151
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
152
- inst.remove
153
- end
154
- end
155
-
156
- # Modify the definition of the instance
157
- space_type.people.sort.each do |inst|
158
- definition = inst.peopleDefinition
159
- unless occupancy_per_area.zero?
160
- definition.setPeopleperSpaceFloorArea(OpenStudio.convert(occupancy_per_area / 1000, 'people/ft^2', 'people/m^2').get)
161
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupancy to #{occupancy_per_area} people/1000 ft^2.")
162
- end
163
-
164
- # set fraction radiant ##
165
- definition.setFractionRadiant(0.3)
166
-
167
- # Clothing schedule for thermal comfort metrics
168
- clothing_sch = space_type.model.getScheduleRulesetByName('Clothing Schedule')
169
- if clothing_sch.is_initialized
170
- clothing_sch = clothing_sch.get
171
- else
172
- clothing_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
173
- clothing_sch.setName('Clothing Schedule')
174
- clothing_sch.defaultDaySchedule.setName('Clothing Schedule Default Winter Clothes')
175
- clothing_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1.0)
176
- sch_rule = OpenStudio::Model::ScheduleRule.new(clothing_sch)
177
- sch_rule.daySchedule.setName('Clothing Schedule Summer Clothes')
178
- sch_rule.daySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.5)
179
- sch_rule.setStartDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(5), 1))
180
- sch_rule.setEndDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(9), 30))
181
- end
182
- inst.setClothingInsulationSchedule(clothing_sch)
183
-
184
- # Air velocity schedule for thermal comfort metrics
185
- air_velo_sch = space_type.model.getScheduleRulesetByName('Air Velocity Schedule')
186
- if air_velo_sch.is_initialized
187
- air_velo_sch = air_velo_sch.get
188
- else
189
- air_velo_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
190
- air_velo_sch.setName('Air Velocity Schedule')
191
- air_velo_sch.defaultDaySchedule.setName('Air Velocity Schedule Default')
192
- air_velo_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.2)
193
- end
194
- inst.setAirVelocitySchedule(air_velo_sch)
195
-
196
- # Work efficiency schedule for thermal comfort metrics
197
- work_efficiency_sch = space_type.model.getScheduleRulesetByName('Work Efficiency Schedule')
198
- if work_efficiency_sch.is_initialized
199
- work_efficiency_sch = work_efficiency_sch.get
200
- else
201
- work_efficiency_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
202
- work_efficiency_sch.setName('Work Efficiency Schedule')
203
- work_efficiency_sch.defaultDaySchedule.setName('Work Efficiency Schedule Default')
204
- work_efficiency_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0)
205
- end
206
- inst.setWorkEfficiencySchedule(work_efficiency_sch)
207
- end
208
-
209
- end
128
+ # People
129
+ space_type_apply_people(space_type) if set_people
210
130
 
211
131
  # Lights
212
132
  lights_have_info = false
@@ -388,53 +308,7 @@ class Standard
388
308
  end
389
309
 
390
310
  # Ventilation
391
- ventilation_have_info = false
392
- ventilation_per_area = space_type_properties['ventilation_per_area'].to_f
393
- ventilation_per_person = space_type_properties['ventilation_per_person'].to_f
394
- ventilation_ach = space_type_properties['ventilation_air_changes'].to_f
395
- ventilation_have_info = true unless ventilation_per_area.zero?
396
- ventilation_have_info = true unless ventilation_per_person.zero?
397
- ventilation_have_info = true unless ventilation_ach.zero?
398
-
399
- # Get the design OA or create a new one if none exists
400
- ventilation = space_type.designSpecificationOutdoorAir
401
- if ventilation.is_initialized
402
- ventilation = ventilation.get
403
- else
404
- ventilation = OpenStudio::Model::DesignSpecificationOutdoorAir.new(space_type.model)
405
- ventilation.setName("#{space_type.name} Ventilation")
406
- space_type.setDesignSpecificationOutdoorAir(ventilation)
407
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no ventilation specification, one has been created.")
408
- end
409
-
410
- if set_ventilation && ventilation_have_info
411
-
412
- # Modify the ventilation properties
413
- ventilation_method = model_ventilation_method(space_type.model)
414
- ventilation.setOutdoorAirMethod(ventilation_method)
415
- unless ventilation_per_area.zero?
416
- ventilation.setOutdoorAirFlowperFloorArea(OpenStudio.convert(ventilation_per_area.to_f, 'ft^3/min*ft^2', 'm^3/s*m^2').get)
417
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation per area to #{ventilation_per_area} cfm/ft^2.")
418
- end
419
- unless ventilation_per_person.zero?
420
- ventilation.setOutdoorAirFlowperPerson(OpenStudio.convert(ventilation_per_person.to_f, 'ft^3/min*person', 'm^3/s*person').get)
421
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation per person to #{ventilation_per_person} cfm/person.")
422
- end
423
- unless ventilation_ach.zero?
424
- ventilation.setOutdoorAirFlowAirChangesperHour(ventilation_ach)
425
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation to #{ventilation_ach} ACH.")
426
- end
427
-
428
- elsif set_ventilation && !ventilation_have_info
429
-
430
- # All space types must have a design spec OA
431
- # object for ventilation controls to work correctly,
432
- # even if the values are all zero.
433
- ventilation.setOutdoorAirFlowperFloorArea(0)
434
- ventilation.setOutdoorAirFlowperPerson(0)
435
- ventilation.setOutdoorAirFlowAirChangesperHour(0)
436
-
437
- end
311
+ space_type_apply_ventilation(space_type) if set_ventilation
438
312
 
439
313
  return true
440
314
  end
@@ -567,11 +441,8 @@ class Standard
567
441
  # @param set_lights [Boolean] if true, set the lighting schedule
568
442
  # @param set_electric_equipment [Boolean] if true, set the electric schedule schedule
569
443
  # @param set_gas_equipment [Boolean] if true, set the gas equipment density
570
- # @param make_thermostat [Boolean] if true, makes a thermostat for this space type from the
571
- # schedules listed for the space type. This thermostat is not hooked to any zone by this method,
572
- # but may be found and used later.
573
444
  # @return [Boolean] returns true if successful, false if not
574
- def space_type_apply_internal_load_schedules(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation, make_thermostat)
445
+ def space_type_apply_internal_load_schedules(space_type, set_people: true, set_lights: true, set_electric_equipment: true, set_gas_equipment: true, set_ventilation: true)
575
446
  # Get the standards data
576
447
  space_type_properties = space_type_get_standards_data(space_type)
577
448
 
@@ -599,14 +470,11 @@ class Standard
599
470
  default_sch_set.setPeopleActivityLevelSchedule(model_add_schedule(space_type.model, occupancy_activity_sch))
600
471
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupant activity schedule to #{occupancy_activity_sch}.")
601
472
  end
602
-
603
473
  end
604
474
 
605
475
  # Lights
606
476
  if set_lights
607
-
608
477
  apply_lighting_schedule(space_type, space_type_properties, default_sch_set)
609
-
610
478
  end
611
479
 
612
480
  # Electric Equipment
@@ -627,22 +495,31 @@ class Standard
627
495
  end
628
496
  end
629
497
 
630
- # Thermostat
631
- if make_thermostat
632
- thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(space_type.model)
633
- thermostat.setName("#{space_type.name} Thermostat")
498
+ return true
499
+ end
634
500
 
635
- heating_setpoint_sch = space_type_properties['heating_setpoint_schedule']
636
- unless heating_setpoint_sch.nil?
637
- thermostat.setHeatingSetpointTemperatureSchedule(model_add_schedule(space_type.model, heating_setpoint_sch))
638
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set heating setpoint schedule to #{heating_setpoint_sch}.")
639
- end
501
+ # Makes a thermostat for this space type from the schedules listed for the space type.
502
+ # This thermostat is not hooked to any zone by this method,but may be found and used later.
503
+ #
504
+ # @param space_type [OpenStudio::Model::SpaceType] space type object
505
+ # @return [Boolean] returns true if successful, false if not
506
+ def space_type_apply_thermostat_schedules(space_type)
507
+ # Get the standards data
508
+ space_type_properties = space_type_get_standards_data(space_type)
640
509
 
641
- cooling_setpoint_sch = space_type_properties['cooling_setpoint_schedule']
642
- unless cooling_setpoint_sch.nil?
643
- thermostat.setCoolingSetpointTemperatureSchedule(model_add_schedule(space_type.model, cooling_setpoint_sch))
644
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set cooling setpoint schedule to #{cooling_setpoint_sch}.")
645
- end
510
+ thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(space_type.model)
511
+ thermostat.setName("#{space_type.name} Thermostat")
512
+
513
+ heating_setpoint_sch = space_type_properties['heating_setpoint_schedule']
514
+ unless heating_setpoint_sch.nil?
515
+ thermostat.setHeatingSetpointTemperatureSchedule(model_add_schedule(space_type.model, heating_setpoint_sch))
516
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set heating setpoint schedule to #{heating_setpoint_sch}.")
517
+ end
518
+
519
+ cooling_setpoint_sch = space_type_properties['cooling_setpoint_schedule']
520
+ unless cooling_setpoint_sch.nil?
521
+ thermostat.setCoolingSetpointTemperatureSchedule(model_add_schedule(space_type.model, cooling_setpoint_sch))
522
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set cooling setpoint schedule to #{cooling_setpoint_sch}.")
646
523
  end
647
524
 
648
525
  return true