openstudio-standards 0.8.3 → 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 (330) 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/common_paths.rb +81 -0
  33. data/lib/openstudio-standards/btap/common_resources/ConstructionProperties.csv +52 -0
  34. data/lib/openstudio-standards/btap/common_resources/Constructions.csv +37 -0
  35. data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
  36. data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
  37. data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
  38. data/lib/openstudio-standards/btap/common_resources/construction_sets.csv +1270 -0
  39. data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
  40. data/lib/openstudio-standards/btap/common_resources/constructions_opaque.csv +2256 -0
  41. data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
  42. data/lib/openstudio-standards/btap/common_resources/costs_local_factors.csv +2315 -0
  43. data/lib/openstudio-standards/btap/common_resources/hvac_vent_ahu.csv +925 -0
  44. data/lib/openstudio-standards/btap/common_resources/lighting.csv +364 -0
  45. data/lib/openstudio-standards/btap/common_resources/lighting_sets.csv +2667 -0
  46. data/lib/openstudio-standards/btap/common_resources/locations.csv +75 -0
  47. data/lib/openstudio-standards/btap/common_resources/materials_glazing.csv +35 -0
  48. data/lib/openstudio-standards/btap/common_resources/materials_hvac.csv +1686 -0
  49. data/lib/openstudio-standards/btap/common_resources/materials_lighting.csv +267 -0
  50. data/lib/openstudio-standards/btap/common_resources/materials_opaque.csv +164 -0
  51. data/lib/openstudio-standards/btap/costing/README.md +502 -0
  52. data/lib/openstudio-standards/btap/costing/btap_costing.rb +469 -0
  53. data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
  54. data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
  55. data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
  56. data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
  57. data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +173 -0
  58. data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +354 -0
  59. data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
  60. data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
  61. data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
  62. data/lib/openstudio-standards/btap/costing/envelope_costing.rb +215 -0
  63. data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
  64. data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +156 -0
  65. data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
  66. data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
  67. data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
  68. data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
  69. data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
  70. data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
  71. data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
  72. data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
  73. data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
  74. data/lib/openstudio-standards/btap/costing/test_list.txt +15 -0
  75. data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +27 -0
  76. data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
  77. data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
  78. data/lib/openstudio-standards/btap/geometry.rb +86 -6
  79. data/lib/openstudio-standards/btap/structure.rb +657 -0
  80. data/lib/openstudio-standards/constructions/modify.rb +2 -1
  81. data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
  82. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
  83. data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
  84. data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
  85. data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
  86. data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
  87. data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
  88. data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
  89. data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
  90. data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
  91. data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
  92. data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
  93. data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
  94. data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
  95. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
  96. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
  97. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
  98. data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
  99. data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
  100. data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
  101. data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
  102. data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
  103. data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
  104. data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
  105. data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
  106. data/lib/openstudio-standards/hvac/components/component.rb +39 -0
  107. data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
  108. data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
  109. data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
  110. data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
  111. data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
  112. data/lib/openstudio-standards/hvac/conversions.rb +222 -0
  113. data/lib/openstudio-standards/hvac/curves.rb +192 -0
  114. data/lib/openstudio-standards/hvac/helpers.rb +357 -0
  115. data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
  116. data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
  117. data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
  118. data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
  119. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
  120. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
  121. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
  122. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
  123. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  124. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  125. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  126. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
  127. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  128. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
  129. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  130. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  131. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
  132. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
  133. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
  134. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
  135. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
  136. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
  137. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
  138. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
  139. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
  140. data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
  141. data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
  142. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
  143. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
  144. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
  145. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
  146. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
  147. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
  148. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
  149. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
  150. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
  151. data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
  152. data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
  153. data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
  154. data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
  155. data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
  156. data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
  157. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
  158. data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
  159. data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
  160. data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
  161. data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
  162. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
  163. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
  164. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
  165. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
  166. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
  167. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
  168. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
  169. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
  170. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
  171. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
  172. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
  173. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
  174. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
  175. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
  176. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
  177. data/lib/openstudio-standards/standards/Standards.Model.rb +45 -20
  178. data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
  179. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
  180. data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
  181. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
  182. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
  183. data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
  184. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
  188. 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
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  192. 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
  193. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
  194. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
  195. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  196. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
  197. 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
  198. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
  199. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
  200. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  201. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
  202. 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
  203. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
  208. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
  209. 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
  210. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
  211. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
  212. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
  213. 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
  214. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
  215. 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
  216. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
  217. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  218. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
  219. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  220. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
  221. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
  222. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
  223. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
  224. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
  225. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
  226. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
  227. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
  228. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
  229. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
  230. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
  231. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
  232. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
  233. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
  234. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
  235. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +7 -1
  236. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
  237. data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
  238. data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
  239. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +21 -37
  240. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
  241. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
  242. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
  243. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
  244. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
  245. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
  246. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +115 -112
  247. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +637 -249
  248. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
  249. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
  250. data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
  251. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +75 -7
  252. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +25 -1
  253. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
  254. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
  255. data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
  256. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
  257. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
  258. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
  259. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
  260. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +18 -6
  261. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
  262. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
  263. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
  264. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
  265. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
  266. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +68 -150
  267. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +444 -134
  268. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
  269. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
  270. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
  271. data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
  272. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +17 -8
  273. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
  274. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
  275. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
  276. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
  277. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
  278. data/lib/openstudio-standards/standards/necb/README.md +343 -0
  279. data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
  280. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +206 -32
  281. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +75 -43
  282. data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
  283. data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
  284. data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
  285. data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
  286. data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
  287. data/lib/openstudio-standards/utilities/logging.rb +18 -14
  288. data/lib/openstudio-standards/version.rb +1 -1
  289. data/lib/openstudio-standards/weather/modify.rb +2 -2
  290. data/lib/openstudio-standards/weather/stat_file.rb +2 -2
  291. data/lib/openstudio-standards.rb +67 -38
  292. metadata +141 -50
  293. data/lib/openstudio-standards/hvac/components/create.rb +0 -169
  294. data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
  295. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
  296. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
  297. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
  298. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
  299. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
  300. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
  301. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
  302. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
  303. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
  304. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
  305. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
  306. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
  307. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
  308. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
  309. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
  310. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
  311. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
  312. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
  313. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
  314. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
  315. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
  316. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
  317. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
  318. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
  319. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
  320. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
  321. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
  322. data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
  323. data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
  324. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
  325. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
  326. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
  327. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
  328. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
  329. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
  330. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
@@ -0,0 +1,357 @@
1
+ module OpenstudioStandards
2
+ # The HVAC module provides methods create, modify, and get information about HVAC systems in the model
3
+ module HVAC
4
+ # @!group Helpers
5
+ # Helper methods to remove HVAC equipment, rename nodes, and rename HVAC equipment
6
+
7
+ # Remove all air loops in model
8
+ #
9
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
10
+ # @return [OpenStudio::Model::Model] OpenStudio model object
11
+ def self.remove_air_loops(model)
12
+ model.getAirLoopHVACs.each(&:remove)
13
+
14
+ return model
15
+ end
16
+
17
+ # Remove plant loops in model except those used for service hot water
18
+ #
19
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
20
+ # @return [OpenStudio::Model::Model] OpenStudio model object
21
+ def self.remove_plant_loops(model)
22
+ plant_loops = model.getPlantLoops
23
+ plant_loops.each do |plant_loop|
24
+ shw_use = false
25
+ plant_loop.demandComponents.each do |component|
26
+ if component.to_WaterUseConnections.is_initialized || component.to_CoilWaterHeatingDesuperheater.is_initialized
27
+ shw_use = true
28
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "#{plant_loop.name} is used for SHW or refrigeration heat reclaim and will not be removed.")
29
+ break
30
+ end
31
+ end
32
+ plant_loop.remove unless shw_use
33
+ end
34
+
35
+ return model
36
+ end
37
+
38
+ # Remove all plant loops in model including those used for service hot water
39
+ #
40
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
41
+ # @return [OpenStudio::Model::Model] OpenStudio model object
42
+ def self.remove_all_plant_loops(model)
43
+ model.getPlantLoops.each(&:remove)
44
+
45
+ return model
46
+ end
47
+
48
+ # Remove VRF units
49
+ #
50
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
51
+ # @return [OpenStudio::Model::Model] OpenStudio model object
52
+ def self.remove_vrf(model)
53
+ model.getAirConditionerVariableRefrigerantFlows.each(&:remove)
54
+ model.getZoneHVACTerminalUnitVariableRefrigerantFlows.each(&:remove)
55
+
56
+ return model
57
+ end
58
+
59
+ # Remove zone equipment except for exhaust fans
60
+ #
61
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
62
+ # @return [OpenStudio::Model::Model] OpenStudio model object
63
+ def self.remove_zone_equipment(model)
64
+ model.getThermalZones.each do |zone|
65
+ zone.equipment.each do |equipment|
66
+ if equipment.to_FanZoneExhaust.is_initialized
67
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "#{equipment.name} is a zone exhaust fan and will not be removed.")
68
+ else
69
+ equipment.remove
70
+ end
71
+ end
72
+ end
73
+
74
+ return model
75
+ end
76
+
77
+ # Remove all zone equipment including exhaust fans
78
+ #
79
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
80
+ # @return [OpenStudio::Model::Model] OpenStudio model object
81
+ def self.remove_all_zone_equipment(model)
82
+ model.getThermalZones.each do |zone|
83
+ zone.equipment.each(&:remove)
84
+ end
85
+
86
+ return model
87
+ end
88
+
89
+ # Remove unused performance curves
90
+ #
91
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
92
+ # @return [OpenStudio::Model::Model] OpenStudio model object
93
+ def self.remove_unused_curves(model)
94
+ model.getCurves.each do |curve|
95
+ if curve.directUseCount == 0
96
+ model.removeObject(curve.handle)
97
+ end
98
+ end
99
+
100
+ return model
101
+ end
102
+
103
+ # Remove HVAC equipment except for service hot water loops and zone exhaust fans
104
+ #
105
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
106
+ # @return [OpenStudio::Model::Model] OpenStudio model object
107
+ def self.remove_hvac(model)
108
+ OpenstudioStandards::HVAC.remove_air_loops(model)
109
+ OpenstudioStandards::HVAC.remove_plant_loops(model)
110
+ OpenstudioStandards::HVAC.remove_vrf(model)
111
+ OpenstudioStandards::HVAC.remove_zone_equipment(model)
112
+ OpenstudioStandards::HVAC.remove_unused_curves(model)
113
+
114
+ return model
115
+ end
116
+
117
+ # Remove all HVAC equipment including service hot water loops and zone exhaust fans
118
+ #
119
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
120
+ # @return [OpenStudio::Model::Model] OpenStudio model object
121
+ def self.remove_all_hvac(model)
122
+ OpenstudioStandards::HVAC.remove_air_loops(model)
123
+ OpenstudioStandards::HVAC.remove_all_plant_loops(model)
124
+ OpenstudioStandards::HVAC.remove_vrf(model)
125
+ OpenstudioStandards::HVAC.remove_all_zone_equipment(model)
126
+ OpenstudioStandards::HVAC.remove_unused_curves(model)
127
+
128
+ return model
129
+ end
130
+
131
+ # renames air loop nodes to readable values
132
+ #
133
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
134
+ # @return [OpenStudio::Model::Model] OpenStudio model object
135
+ def self.rename_air_loop_nodes(model)
136
+ # rename all hvac components on air loops
137
+ model.getHVACComponents.sort.each do |component|
138
+ next if component.to_Node.is_initialized # skip nodes
139
+
140
+ unless component.airLoopHVAC.empty?
141
+ # rename water to air component outlet nodes
142
+ if component.to_WaterToAirComponent.is_initialized
143
+ component = component.to_WaterToAirComponent.get
144
+ unless component.airOutletModelObject.empty?
145
+ component_outlet_object = component.airOutletModelObject.get
146
+ next unless component_outlet_object.to_Node.is_initialized
147
+
148
+ component_outlet_object.setName("#{component.name} Outlet Air Node")
149
+ end
150
+ end
151
+
152
+ # rename air to air component nodes
153
+ if component.to_AirToAirComponent.is_initialized
154
+ component = component.to_AirToAirComponent.get
155
+ unless component.primaryAirOutletModelObject.empty?
156
+ component_outlet_object = component.primaryAirOutletModelObject.get
157
+ next unless component_outlet_object.to_Node.is_initialized
158
+
159
+ component_outlet_object.setName("#{component.name} Primary Outlet Air Node")
160
+ end
161
+ unless component.secondaryAirInletModelObject.empty?
162
+ component_inlet_object = component.secondaryAirInletModelObject.get
163
+ next unless component_inlet_object.to_Node.is_initialized
164
+
165
+ component_inlet_object.setName("#{component.name} Secondary Inlet Air Node")
166
+ end
167
+ end
168
+
169
+ # rename straight component outlet nodes
170
+ if component.to_StraightComponent.is_initialized && !component.to_StraightComponent.get.outletModelObject.empty?
171
+ component_outlet_object = component.to_StraightComponent.get.outletModelObject.get
172
+ next unless component_outlet_object.to_Node.is_initialized
173
+
174
+ component_outlet_object.setName("#{component.name} Outlet Air Node")
175
+ end
176
+ end
177
+
178
+ # rename zone hvac component nodes
179
+ if component.to_ZoneHVACComponent.is_initialized
180
+ component = component.to_ZoneHVACComponent.get
181
+ unless component.airInletModelObject.empty?
182
+ component_inlet_object = component.airInletModelObject.get
183
+ next unless component_inlet_object.to_Node.is_initialized
184
+
185
+ component_inlet_object.setName("#{component.name} Inlet Air Node")
186
+ end
187
+ unless component.airOutletModelObject.empty?
188
+ component_outlet_object = component.airOutletModelObject.get
189
+ next unless component_outlet_object.to_Node.is_initialized
190
+
191
+ component_outlet_object.setName("#{component.name} Outlet Air Node")
192
+ end
193
+ end
194
+ end
195
+
196
+ # rename supply side nodes
197
+ model.getAirLoopHVACs.sort.each do |air_loop|
198
+ air_loop_name = air_loop.name.to_s
199
+ air_loop.demandInletNode.setName("#{air_loop_name} Demand Inlet Node")
200
+ air_loop.demandOutletNode.setName("#{air_loop_name} Demand Outlet Node")
201
+ air_loop.supplyInletNode.setName("#{air_loop_name} Supply Inlet Node")
202
+ air_loop.supplyOutletNode.setName("#{air_loop_name} Supply Outlet Node")
203
+
204
+ unless air_loop.reliefAirNode.empty?
205
+ relief_node = air_loop.reliefAirNode.get
206
+ relief_node.setName("#{air_loop_name} Relief Air Node")
207
+ end
208
+
209
+ unless air_loop.mixedAirNode.empty?
210
+ mixed_node = air_loop.mixedAirNode.get
211
+ mixed_node.setName("#{air_loop_name} Mixed Air Node")
212
+ end
213
+
214
+ # rename outdoor air system and nodes
215
+ unless air_loop.airLoopHVACOutdoorAirSystem.empty?
216
+ oa_system = air_loop.airLoopHVACOutdoorAirSystem.get
217
+ unless oa_system.outboardOANode.empty?
218
+ oa_node = oa_system.outboardOANode.get
219
+ oa_node.setName("#{air_loop_name} Outdoor Air Node")
220
+ end
221
+ end
222
+ end
223
+
224
+ # rename zone air and terminal nodes
225
+ model.getThermalZones.sort.each do |zone|
226
+ zone.zoneAirNode.setName("#{zone.name} Zone Air Node")
227
+
228
+ unless zone.returnAirModelObject.empty?
229
+ zone.returnAirModelObject.get.setName("#{zone.name} Return Air Node")
230
+ end
231
+
232
+ unless zone.airLoopHVACTerminal.empty?
233
+ terminal_unit = zone.airLoopHVACTerminal.get
234
+ if terminal_unit.to_StraightComponent.is_initialized
235
+ component = terminal_unit.to_StraightComponent.get
236
+ component.inletModelObject.get.setName("#{terminal_unit.name} Inlet Air Node")
237
+ end
238
+ end
239
+ end
240
+
241
+ # rename zone equipment list objects
242
+ model.getZoneHVACEquipmentLists.sort.each do |obj|
243
+ begin
244
+ zone = obj.thermalZone
245
+ obj.setName("#{zone.name} Zone HVAC Equipment List")
246
+ rescue StandardError => e
247
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "Removing ZoneHVACEquipmentList #{obj.name}; missing thermal zone.")
248
+ obj.remove
249
+ end
250
+ end
251
+
252
+ return model
253
+ end
254
+
255
+ # renames plant loop nodes to readable values
256
+ #
257
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
258
+ # @return [OpenStudio::Model::Model] OpenStudio model object
259
+ def self.rename_plant_loop_nodes(model)
260
+ # rename all hvac components on plant loops
261
+ model.getHVACComponents.sort.each do |component|
262
+ next if component.to_Node.is_initialized # skip nodes
263
+
264
+ unless component.plantLoop.empty?
265
+ # rename straight component nodes
266
+ # some inlet or outlet nodes may get renamed again
267
+ if component.to_StraightComponent.is_initialized
268
+ unless component.to_StraightComponent.get.inletModelObject.empty?
269
+ component_inlet_object = component.to_StraightComponent.get.inletModelObject.get
270
+ next unless component_inlet_object.to_Node.is_initialized
271
+
272
+ component_inlet_object.setName("#{component.name} Inlet Water Node")
273
+ end
274
+ unless component.to_StraightComponent.get.outletModelObject.empty?
275
+ component_outlet_object = component.to_StraightComponent.get.outletModelObject.get
276
+ next unless component_outlet_object.to_Node.is_initialized
277
+
278
+ component_outlet_object.setName("#{component.name} Outlet Water Node")
279
+ end
280
+ end
281
+
282
+ # rename water to air component nodes
283
+ if component.to_WaterToAirComponent.is_initialized
284
+ component = component.to_WaterToAirComponent.get
285
+ unless component.waterInletModelObject.empty?
286
+ component_inlet_object = component.waterInletModelObject.get
287
+ next unless component_inlet_object.to_Node.is_initialized
288
+
289
+ component_inlet_object.setName("#{component.name} Inlet Water Node")
290
+ end
291
+ unless component.waterOutletModelObject.empty?
292
+ component_outlet_object = component.waterOutletModelObject.get
293
+ next unless component_outlet_object.to_Node.is_initialized
294
+
295
+ component_outlet_object.setName("#{component.name} Outlet Water Node")
296
+ end
297
+ end
298
+
299
+ # rename water to water component nodes
300
+ if component.to_WaterToWaterComponent.is_initialized
301
+ component = component.to_WaterToWaterComponent.get
302
+ unless component.demandInletModelObject.empty?
303
+ demand_inlet_object = component.demandInletModelObject.get
304
+ next unless demand_inlet_object.to_Node.is_initialized
305
+
306
+ demand_inlet_object.setName("#{component.name} Demand Inlet Water Node")
307
+ end
308
+ unless component.demandOutletModelObject.empty?
309
+ demand_outlet_object = component.demandOutletModelObject.get
310
+ next unless demand_outlet_object.to_Node.is_initialized
311
+
312
+ demand_outlet_object.setName("#{component.name} Demand Outlet Water Node")
313
+ end
314
+ unless component.supplyInletModelObject.empty?
315
+ supply_inlet_object = component.supplyInletModelObject.get
316
+ next unless supply_inlet_object.to_Node.is_initialized
317
+
318
+ supply_inlet_object.setName("#{component.name} Supply Inlet Water Node")
319
+ end
320
+ unless component.supplyOutletModelObject.empty?
321
+ supply_outlet_object = component.supplyOutletModelObject.get
322
+ next unless supply_outlet_object.to_Node.is_initialized
323
+
324
+ supply_outlet_object.setName("#{component.name} Supply Outlet Water Node")
325
+ end
326
+ end
327
+ end
328
+ end
329
+
330
+ # rename plant nodes
331
+ model.getPlantLoops.sort.each do |plant_loop|
332
+ plant_loop_name = plant_loop.name.to_s
333
+ plant_loop.demandInletNode.setName("#{plant_loop_name} Demand Inlet Node")
334
+ plant_loop.demandOutletNode.setName("#{plant_loop_name} Demand Outlet Node")
335
+ plant_loop.supplyInletNode.setName("#{plant_loop_name} Supply Inlet Node")
336
+ plant_loop.supplyOutletNode.setName("#{plant_loop_name} Supply Outlet Node")
337
+ end
338
+
339
+ return model
340
+ end
341
+
342
+ # converts existing string to ems friendly string
343
+ #
344
+ # @param name [String] original name
345
+ # @return [String] the resulting EMS friendly string
346
+ def self.ems_friendly_name(name)
347
+ # replace white space and special characters with underscore
348
+ # \W is equivalent to [^a-zA-Z0-9_]
349
+ new_name = name.to_s.gsub(/\W/, '_')
350
+
351
+ # prepend ems_ in case the name starts with a number
352
+ new_name = "ems_#{new_name}"
353
+
354
+ return new_name
355
+ end
356
+ end
357
+ end
@@ -25,7 +25,7 @@ module OpenstudioStandards
25
25
  min_c = OpenstudioStandards::Schedules.schedule_constant_get_min_max(sch.to_ScheduleConstant.get)['min']
26
26
  max_c = OpenstudioStandards::Schedules.schedule_constant_get_min_max(sch.to_ScheduleConstant.get)['max']
27
27
  else
28
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Could not find min and max values for #{obj_type} Setpoint Manager.")
28
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.HVAC', "Could not find min and max values for #{obj_type} Setpoint Manager.")
29
29
  end
30
30
  loop_op_min_f = OpenStudio.convert(min_c, 'C', 'F').get
31
31
  loop_op_max_f = OpenStudio.convert(max_c, 'C', 'F').get
@@ -53,7 +53,7 @@ module OpenstudioStandards
53
53
  elsif low_sch.to_ScheduleConstant.is_initialized
54
54
  min_c = OpenstudioStandards::Schedules.schedule_constant_get_min_max(low_sch.to_ScheduleConstant.get)['min']
55
55
  else
56
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Could not find min and max values for #{obj_type} Setpoint Manager.")
56
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.HVAC', "Could not find min and max values for #{obj_type} Setpoint Manager.")
57
57
  end
58
58
  loop_op_min_f = OpenStudio.convert(min_c, 'C', 'F').get unless min_c.nil?
59
59
  end
@@ -68,7 +68,7 @@ module OpenstudioStandards
68
68
  elsif high_sch.to_ScheduleConstant.is_initialized
69
69
  max_c = OpenstudioStandards::Schedules.schedule_constant_get_min_max(high_sch.to_ScheduleConstant.get)['max']
70
70
  else
71
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Could not find min and max values for #{obj_type} Setpoint Manager.")
71
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.HVAC', "Could not find min and max values for #{obj_type} Setpoint Manager.")
72
72
  end
73
73
  loop_op_max_f = OpenStudio.convert(max_c, 'C', 'F').get unless max_c.nil?
74
74
  end
@@ -83,7 +83,7 @@ module OpenstudioStandards
83
83
  loop_op_min_f = OpenStudio.convert(spm.minimumSetpointTemperature, 'C', 'F').get
84
84
  loop_op_max_f = OpenStudio.convert(spm.maximumSetpointTemperature, 'C', 'F').get
85
85
  else
86
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Could not find min and max values for #{obj_type} Setpoint Manager.")
86
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.HVAC', "Could not find min and max values for #{obj_type} Setpoint Manager.")
87
87
  end
88
88
 
89
89
  return { 'min_temp' => loop_op_min_f, 'max_temp' => loop_op_max_f }
@@ -0,0 +1,52 @@
1
+ module OpenstudioStandards
2
+ # The InteriorLighting module provides methods to create, modify, and get information about interior lighting
3
+ module InteriorLighting
4
+ # @!group Create Lights
5
+ # Methods to create lights objects
6
+
7
+ # Adds a lights object to a space or space type.
8
+ #
9
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
10
+ # @param name [String] the name of the lights object
11
+ # @param lighting_power [Double] lighting power in watts per unit area or per person
12
+ # @param lighting_power_type [Double] type of lighting power ('Watts/Area', 'Watts/Person'). 'Watts/Area' is W/m^2.
13
+ # @param return_air_fraction [Double] return air fraction
14
+ # @param radiant_fraction [Double] radiant fraction
15
+ # @param visible_fraction [Double] visible fraction
16
+ # @param space_type [OpenStudio::Model::SpaceType] OpenStudio space type object
17
+ # @param space [OpenStudio::Model::Space] OpenStudio space object
18
+ # @return [OpenStudio::Model::Lights] The created lights object
19
+ def self.create_lights(model,
20
+ name: nil,
21
+ lighting_power: 5.0,
22
+ lighting_power_type: 'Watts/Area',
23
+ return_air_fraction: 0.0,
24
+ radiant_fraction: 0.365,
25
+ visible_fraction: 0.2,
26
+ space_type: nil,
27
+ space: nil)
28
+ # create lights definition object
29
+ lights_def = OpenStudio::Model::LightsDefinition.new(model)
30
+ lights_def.setName("#{name} Definition") unless name.nil?
31
+ lights_def.setWattsperSpaceFloorArea(lighting_power) if lighting_power_type == 'Watts/Area'
32
+ lights_def.setWattsperPerson(lighting_power) if lighting_power_type == 'Watts/Person'
33
+ lights_def.setReturnAirFraction(return_air_fraction)
34
+ lights_def.setFractionRadiant(radiant_fraction)
35
+ lights_def.setFractionVisible(visible_fraction)
36
+
37
+ # create lights object
38
+ lights = OpenStudio::Model::Lights.new(lights_def)
39
+ lights.setName(name) unless name.nil?
40
+ if !space_type.nil? && space.nil?
41
+ lights.setSpaceType(space_type)
42
+ elsif !space.nil? && space_type.nil?
43
+ lights.setSpace(space)
44
+ else
45
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.InteriorLighting.create_lights', 'Must pass in either space_type or space.')
46
+ return nil
47
+ end
48
+
49
+ return lights
50
+ end
51
+ end
52
+ end