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
@@ -0,0 +1,41 @@
1
+ class Standard
2
+ # Maps older prototype space types (Standards Building Type / Standards Space Type) to new standards space types
3
+ # Optionally resets the Standards Space Type and new space type informational as additional properties on the space type
4
+ #
5
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
6
+ # @param reset_standards_space_type [Boolean] if true, resets the Standards Space Type to new space types
7
+ # @param set_additional_properties [Boolean] if true, sets additional properties on the space type with new space type information
8
+ # @return [Boolean] returns true if successful, false if not
9
+ def prototype_space_type_map(model, reset_standards_space_type: false, set_additional_properties: true)
10
+ # load space types mapping data
11
+ space_types_data = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/prototype_space_type_map.json"), symbolize_names: true)
12
+
13
+ # lookup space type name for each old Standards Space Type
14
+ model.getSpaceTypes.each do |space_type|
15
+ standards_space_type = space_type.standardsSpaceType.get if space_type.standardsSpaceType.is_initialized
16
+ standards_building_type = space_type.standardsBuildingType.get if space_type.standardsBuildingType.is_initialized
17
+
18
+ if !standards_space_type.nil? && !standards_building_type.nil?
19
+ mapping = space_types_data.find { |s| s[:standards_building_type] == standards_building_type && s[:standards_space_type] == standards_space_type }
20
+ if mapping.nil?
21
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Prototypes', "No mapping found for standards building type '#{standards_building_type}' and standards space type '#{standards_space_type}'")
22
+ else
23
+ new_standards_space_type_name = mapping[:new_standards_space_type]
24
+ space_type.additionalProperties.setFeature('standards_space_type', new_standards_space_type_name)
25
+ if reset_standards_space_type
26
+ space_type.setStandardsSpaceType(new_standards_space_type_name)
27
+ end
28
+ end
29
+ else
30
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Prototypes', "Space type '#{space_type.name}' is missing either Standards Space Type or Building Type")
31
+ end
32
+ end
33
+
34
+ # set additional properties for each space type if requested
35
+ if set_additional_properties
36
+ OpenstudioStandards::SpaceType.set_standards_space_type_additional_properties(model, space_type_field: 'AdditionalProperties', reset_standards_space_type: false)
37
+ end
38
+
39
+ return true
40
+ end
41
+ end
@@ -0,0 +1,184 @@
1
+ # Create a .json for new space type thermostat setpoint schedules
2
+ require 'openstudio-standards'
3
+
4
+ # print gem version
5
+ puts "Using openstudio-standards version #{Gem.loaded_specs['openstudio-standards'].version}"
6
+
7
+ templates = [
8
+ 'ComStock DOE Ref Pre-1980',
9
+ 'ComStock DOE Ref 1980-2004',
10
+ 'ComStock 90.1-2004',
11
+ 'ComStock 90.1-2007',
12
+ 'ComStock 90.1-2010',
13
+ 'ComStock 90.1-2013',
14
+ 'ComStock 90.1-2016',
15
+ 'ComStock 90.1-2019',
16
+ 'ComStock DEER 1985',
17
+ 'ComStock DEER 1996',
18
+ 'ComStock DEER 2003',
19
+ 'ComStock DEER 2007',
20
+ 'ComStock DEER 2011',
21
+ 'ComStock DEER 2014',
22
+ 'ComStock DEER 2015',
23
+ 'ComStock DEER 2017',
24
+ 'ComStock DEER 2020'
25
+ ]
26
+
27
+ prototype_map = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/prototype_space_type_map.json"), symbolize_names: true)
28
+ new_space_types_additional_properties = JSON.parse(File.read("#{File.dirname(__FILE__)}/../../../openstudio-standards/space_type/data/level_1_space_types.json"), symbolize_names: true)
29
+
30
+ # loop through space types and store equipment data
31
+ all_data_json = []
32
+ templates.each do |template|
33
+ std = Standard.build(template)
34
+ space_type_data = std.standards_data['space_types']
35
+ space_type_data.each do |e|
36
+ standards_building_type = e['building_type']
37
+ standards_space_type = e['space_type']
38
+ map = prototype_map.find { |s| s[:standards_building_type] == standards_building_type && s[:standards_space_type] == standards_space_type }
39
+ new_space_type = map.nil? ? nil : map[:new_standards_space_type]
40
+ space_data = new_space_types_additional_properties.find { |s| s[:space_type_name] == new_space_type }
41
+ electric_equipment_space_type_name = space_data.nil? ? nil : space_data[:electric_equipment_space_type_name]
42
+ natural_gas_equipment_space_type_name = space_data.nil? ? nil : space_data[:natural_gas_equipment_space_type_name]
43
+
44
+ all_data_json << {
45
+ template: e['template'],
46
+ standards_building_type: standards_building_type,
47
+ standards_space_type: standards_space_type,
48
+ electric_equipment_per_area: e['electric_equipment_per_area'],
49
+ electric_equipment_fraction_latent: e['electric_equipment_fraction_latent'],
50
+ electric_equipment_fraction_radiant: e['electric_equipment_fraction_radiant'],
51
+ electric_equipment_fraction_lost: e['electric_equipment_fraction_lost'],
52
+ gas_equipment_per_area: e['gas_equipment_per_area'],
53
+ gas_equipment_fraction_latent: e['gas_equipment_fraction_latent'],
54
+ gas_equipment_fraction_radiant: e['gas_equipment_fraction_radiant'],
55
+ gas_equipment_fraction_lost: e['gas_equipment_fraction_lost'],
56
+ new_space_type: new_space_type,
57
+ electric_equipment_space_type_name: electric_equipment_space_type_name,
58
+ natural_gas_equipment_space_type_name: natural_gas_equipment_space_type_name
59
+ }
60
+ end
61
+ end
62
+ all_data_json = all_data_json.sort_by { |h| h[:standards_space_type] }
63
+ all_data_json = all_data_json.sort_by { |h| h[:standards_building_type] }
64
+
65
+ # # Write to csv file
66
+ # CSV.open('data/prototype_equipment_map_intermediate.csv', 'w') do |csv|
67
+ # csv << all_data_json.first.keys
68
+ # all_data_json.each do |row|
69
+ # csv << row.values
70
+ # end
71
+ # end
72
+
73
+ # # Write to json file
74
+ # File.write('data/prototype_equipment_map_intermediate.json', JSON.pretty_generate(all_data_json))
75
+
76
+ # get equipment space type names from new_space_type field in the hashes of the all_data_json file, an array of hashes
77
+ all_electric_space_types = all_data_json.map { |h| h[:electric_equipment_space_type_name] }.compact.uniq
78
+ all_gas_space_types = all_data_json.map { |h| h[:natural_gas_equipment_space_type_name] }.compact.uniq
79
+
80
+ puts "Found #{all_electric_space_types.size} electric equipment space types and #{all_gas_space_types.size} gas equipment space types."
81
+
82
+ # for each electric equipment space type, check if there is a unique epd if so, return it. if not, report for each building type for the ComStock 90.1-2010 version
83
+ electric_equipment_lookup = []
84
+ all_electric_space_types.each do |electric_equipment_space_type|
85
+ elec_space_type_data = all_data_json.select { |h| (h[:electric_equipment_space_type_name] == electric_equipment_space_type) }
86
+ epds = elec_space_type_data.map { |h| h[:electric_equipment_per_area] }.compact.uniq
87
+
88
+ # check if there is a unique equipment setup for this space type
89
+ # if so, report it out
90
+ if epds.size < 2
91
+ lookup = {
92
+ electric_equipment_space_type_name: electric_equipment_space_type,
93
+ standards_building_type: nil,
94
+ electric_equipment_per_area: epds[0],
95
+ electric_equipment_per_area_units: 'W/ft^2',
96
+ electric_equipment_fraction_latent: elec_space_type_data[0][:electric_equipment_fraction_latent],
97
+ electric_equipment_fraction_radiant: elec_space_type_data[0][:electric_equipment_fraction_radiant],
98
+ electric_equipment_fraction_lost: elec_space_type_data[0][:electric_equipment_fraction_lost]
99
+ }
100
+
101
+ electric_equipment_lookup << lookup
102
+ next
103
+ end
104
+
105
+ # if not, filter by standards building type
106
+ space_type_bldg_types = elec_space_type_data.map { |h| h[:standards_building_type] }.compact.uniq
107
+ space_type_bldg_types.each do |bldg_type|
108
+ bldg_type_elec_space_type_data = elec_space_type_data.select { |h| h[:standards_building_type] == bldg_type }
109
+ epds = bldg_type_elec_space_type_data.map { |h| h[:electric_equipment_per_area] }.compact.uniq
110
+ if epds.size > 1
111
+ puts "Multiple electric equipment options found for space type #{electric_equipment_space_type} in building type #{bldg_type}. Logging ComStock 90.1-2010 data."
112
+ bldg_type_elec_space_type_data = bldg_type_elec_space_type_data.select { |h| (h[:template] == 'ComStock 90.1-2010') }
113
+ end
114
+ if bldg_type_elec_space_type_data[0].nil?
115
+ puts "No electric equipment data found for space type #{electric_equipment_space_type} in building type #{bldg_type}."
116
+ else
117
+ lookup = {
118
+ electric_equipment_space_type_name: electric_equipment_space_type,
119
+ standards_building_type: bldg_type,
120
+ electric_equipment_per_area: bldg_type_elec_space_type_data[0][:electric_equipment_per_area],
121
+ electric_equipment_per_area_units: 'W/ft^2',
122
+ electric_equipment_fraction_latent: bldg_type_elec_space_type_data[0][:electric_equipment_fraction_latent],
123
+ electric_equipment_fraction_radiant: bldg_type_elec_space_type_data[0][:electric_equipment_fraction_radiant],
124
+ electric_equipment_fraction_lost: bldg_type_elec_space_type_data[0][:electric_equipment_fraction_lost]
125
+ }
126
+ electric_equipment_lookup << lookup
127
+ end
128
+ end
129
+ end
130
+
131
+ # Write to json file
132
+ File.write('data/electric_equipment_space_types.json', JSON.pretty_generate(electric_equipment_lookup))
133
+
134
+ # for each gas equipment space type, check if there is a unique epd if so, return it. if not, report for each building type for the ComStock 90.1-2010 version
135
+ gas_equipment_lookup = []
136
+ all_gas_space_types.each do |gas_equipment_space_type|
137
+ gas_space_type_data = all_data_json.select { |h| (h[:natural_gas_equipment_space_type_name] == gas_equipment_space_type) }
138
+ gpds = gas_space_type_data.map { |h| h[:gas_equipment_per_area] }.compact.uniq
139
+
140
+ # check if there is a unique equipment setup for this space type
141
+ # if so, report it out
142
+ if gpds.size < 2
143
+ lookup = {
144
+ natural_gas_equipment_space_type_name: gas_equipment_space_type,
145
+ standards_building_type: nil,
146
+ gas_equipment_per_area: gpds[0],
147
+ gas_equipment_per_area_units: 'Btu/hr*ft^2',
148
+ gas_equipment_fraction_latent: gas_space_type_data[0][:gas_equipment_fraction_latent],
149
+ gas_equipment_fraction_radiant: gas_space_type_data[0][:gas_equipment_fraction_radiant],
150
+ gas_equipment_fraction_lost: gas_space_type_data[0][:gas_equipment_fraction_lost]
151
+ }
152
+
153
+ gas_equipment_lookup << lookup
154
+ next
155
+ end
156
+
157
+ # if not, filter by standards building type
158
+ space_type_bldg_types = gas_space_type_data.map { |h| h[:standards_building_type] }.compact.uniq
159
+ space_type_bldg_types.each do |bldg_type|
160
+ bldg_type_gas_space_type_data = gas_space_type_data.select { |h| h[:standards_building_type] == bldg_type }
161
+ gpds = bldg_type_gas_space_type_data.map { |h| h[:gas_equipment_per_area] }.compact.uniq
162
+ if gpds.size > 1
163
+ puts "Multiple gas equipment options found for space type #{gas_equipment_space_type} in building type #{bldg_type}. Logging ComStock 90.1-2010 data."
164
+ bldg_type_gas_space_type_data = bldg_type_gas_space_type_data.select { |h| (h[:template] == 'ComStock 90.1-2010') }
165
+ end
166
+ if bldg_type_gas_space_type_data[0].nil?
167
+ puts "No gas equipment data found for space type #{gas_equipment_space_type} in building type #{bldg_type}."
168
+ else
169
+ lookup = {
170
+ natural_gas_equipment_space_type_name: gas_equipment_space_type,
171
+ standards_building_type: bldg_type,
172
+ gas_equipment_per_area: bldg_type_gas_space_type_data[0][:gas_equipment_per_area],
173
+ gas_equipment_per_area_units: 'Btu/hr*ft^2',
174
+ gas_equipment_fraction_latent: bldg_type_gas_space_type_data[0][:gas_equipment_fraction_latent],
175
+ gas_equipment_fraction_radiant: bldg_type_gas_space_type_data[0][:gas_equipment_fraction_radiant],
176
+ gas_equipment_fraction_lost: bldg_type_gas_space_type_data[0][:gas_equipment_fraction_lost]
177
+ }
178
+ gas_equipment_lookup << lookup
179
+ end
180
+ end
181
+ end
182
+
183
+ # Write to json file
184
+ File.write('data/gas_equipment_space_types.json', JSON.pretty_generate(gas_equipment_lookup))
@@ -0,0 +1,116 @@
1
+ # Create a .json for new space type thermostat setpoint schedules
2
+ require 'openstudio-standards'
3
+
4
+ # print gem version
5
+ puts "Using openstudio-standards version #{Gem.loaded_specs['openstudio-standards'].version}"
6
+
7
+ templates = [
8
+ 'ComStock DOE Ref Pre-1980',
9
+ 'ComStock DOE Ref 1980-2004',
10
+ 'ComStock 90.1-2004',
11
+ 'ComStock 90.1-2007',
12
+ 'ComStock 90.1-2010',
13
+ 'ComStock 90.1-2013',
14
+ 'ComStock 90.1-2016',
15
+ 'ComStock 90.1-2019',
16
+ 'ComStock DEER 1985',
17
+ 'ComStock DEER 1996',
18
+ 'ComStock DEER 2003',
19
+ 'ComStock DEER 2007',
20
+ 'ComStock DEER 2011',
21
+ 'ComStock DEER 2014',
22
+ 'ComStock DEER 2015',
23
+ 'ComStock DEER 2017',
24
+ 'ComStock DEER 2020'
25
+ ]
26
+
27
+ prototype_map = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/prototype_space_type_map.json"), symbolize_names: true)
28
+
29
+ # loop through space types and store thermostat data
30
+ all_data_json = []
31
+ templates.each do |template|
32
+ std = Standard.build(template)
33
+ space_type_data = std.standards_data['space_types']
34
+ space_type_data.each do |e|
35
+ standards_building_type = e['building_type']
36
+ standards_space_type = e['space_type']
37
+ map = prototype_map.find { |s| s[:standards_building_type] == standards_building_type && s[:standards_space_type] == standards_space_type }
38
+ new_space_type = map.nil? ? nil : map[:new_standards_space_type]
39
+
40
+ all_data_json << {
41
+ template: e['template'],
42
+ standards_building_type: standards_building_type,
43
+ standards_space_type: standards_space_type,
44
+ heating_setpoint_schedule: e['heating_setpoint_schedule'],
45
+ cooling_setpoint_schedule: e['cooling_setpoint_schedule'],
46
+ new_space_type: new_space_type
47
+ }
48
+ end
49
+ end
50
+ all_data_json = all_data_json.sort_by { |h| h[:standards_space_type] }
51
+ all_data_json = all_data_json.sort_by { |h| h[:standards_building_type] }
52
+
53
+ # # Write to csv file
54
+ # CSV.open('data/prototype_thermostat_map_intermediate.csv', 'w') do |csv|
55
+ # csv << all_data_json.first.keys
56
+ # all_data_json.each do |row|
57
+ # csv << row.values
58
+ # end
59
+ # end
60
+
61
+ # # Write to json file
62
+ # File.write('data/prototype_thermostat_map_intermediate.json', JSON.pretty_generate(all_data_json))
63
+
64
+ # get space type names from new_space_type field in the hashes of the all_data_json file, an array of hashes
65
+ all_new_space_types = all_data_json.map { |h| h[:new_space_type] }.compact.uniq
66
+
67
+ # for each space type, check if there is a unique heating thermostat schedule and a unique thermostat schedule. if so, return it. if not, report for each building type. Then, if each building type has non-unique ones, report for 90.1-2013 version
68
+ thermostat_schedule_lookup = []
69
+ all_new_space_types.each do |new_space_type|
70
+ new_space_type_data = all_data_json.select { |h| h[:new_space_type] == new_space_type }
71
+ heating_thermostat_schs = new_space_type_data.map { |h| h[:heating_setpoint_schedule] }.compact.uniq
72
+ cooling_thermostat_schs = new_space_type_data.map { |h| h[:cooling_setpoint_schedule] }.compact.uniq
73
+
74
+ # check if there is a unique heating and cooling thermostat for this space type
75
+ # if so, report it out
76
+ if (heating_thermostat_schs.size < 2) && (cooling_thermostat_schs.size < 2)
77
+ thermostat_schedule_lookup << {
78
+ space_type: new_space_type,
79
+ standards_building_type: nil,
80
+ heating_setpoint_schedule: heating_thermostat_schs[0],
81
+ cooling_setpoint_schedule: cooling_thermostat_schs[0]
82
+ }
83
+ next
84
+ end
85
+
86
+ # if not, check if there is a unique heating and cooling thermostat by standards building type
87
+ # if so, log, otherwise use 90.1-2013
88
+ space_type_bldg_types = new_space_type_data.map { |h| h[:standards_building_type] }.compact.uniq
89
+ space_type_bldg_types.each do |bldg_type|
90
+ data_subset = new_space_type_data.select { |h| h[:standards_building_type] == bldg_type }
91
+ heating_thermostat_schs = data_subset.map { |h| h[:heating_setpoint_schedule] }.compact.uniq
92
+ cooling_thermostat_schs = data_subset.map { |h| h[:cooling_setpoint_schedule] }.compact.uniq
93
+ if (heating_thermostat_schs.size < 2) && (cooling_thermostat_schs.size < 2)
94
+ thermostat_schedule_lookup << {
95
+ space_type: new_space_type,
96
+ standards_building_type: bldg_type,
97
+ heating_setpoint_schedule: heating_thermostat_schs[0],
98
+ cooling_setpoint_schedule: cooling_thermostat_schs[0]
99
+ }
100
+ else
101
+ puts "Space type '#{new_space_type}' and standards building type '#{bldg_type}' has #{heating_thermostat_schs.size} heating setpoint schedules and #{cooling_thermostat_schs.size} cooling setpoint schedules, depending on the template. Using 'ComStock 90.1-2013'."
102
+ data_subset = data_subset.select { |h| h[:template] == 'ComStock 90.1-2013' }[0]
103
+ heating_thermostat_sch = data_subset.nil? ? nil : data_subset[:heating_setpoint_schedule]
104
+ cooling_thermostat_sch = data_subset.nil? ? nil : data_subset[:cooling_setpoint_schedule]
105
+ thermostat_schedule_lookup << {
106
+ space_type: new_space_type,
107
+ standards_building_type: bldg_type,
108
+ heating_setpoint_schedule: heating_thermostat_sch,
109
+ cooling_setpoint_schedule: cooling_thermostat_sch
110
+ }
111
+ end
112
+ end
113
+ end
114
+
115
+ # Write to json file
116
+ File.write('data/thermostat_schedule_lookup.json', JSON.pretty_generate(thermostat_schedule_lookup))
@@ -737,7 +737,7 @@ module OpenstudioStandards
737
737
  motor_eff = component.motorEfficiency
738
738
 
739
739
  # get eff values from standards
740
- motor_bhp = std.pump_brake_horsepower(component)
740
+ motor_bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(component)
741
741
  next if motor_bhp < 0.0001 # less than 1 watt
742
742
 
743
743
  standard_minimum_motor_efficiency_and_size = std.pump_standard_minimum_motor_efficiency_and_size(component, motor_bhp)[0]
@@ -758,7 +758,7 @@ module OpenstudioStandards
758
758
  motor_eff = component.motorEfficiency
759
759
 
760
760
  # get eff values from standards
761
- motor_bhp = std.pump_brake_horsepower(component)
761
+ motor_bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(component)
762
762
  next if motor_bhp < 0.0001 # less than 1 watt
763
763
 
764
764
  standard_minimum_motor_efficiency_and_size = std.pump_standard_minimum_motor_efficiency_and_size(component, motor_bhp)[0]
@@ -868,7 +868,7 @@ module OpenstudioStandards
868
868
  end
869
869
 
870
870
  # lookup chiller
871
- capacity_w = std.chiller_electric_eir_find_capacity(component)
871
+ capacity_w = OpenstudioStandards::HVAC.chiller_electric_get_capacity(component)
872
872
  capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
873
873
  chlr_props = std.model_find_object(std.standards_data['chillers'], search_criteria, capacity_tons, Date.today)
874
874
  if chlr_props.nil?
@@ -912,9 +912,9 @@ module OpenstudioStandards
912
912
 
913
913
  # find ac properties
914
914
  search_criteria = std.coil_dx_find_search_criteria(component)
915
- capacity_w = std.coil_cooling_dx_single_speed_find_capacity(component)
915
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(component)
916
916
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
917
- if std.coil_dx_heat_pump?(component)
917
+ if OpenstudioStandards::HVAC.coil_dx_heat_pump?(component)
918
918
  ac_props = std.model_find_object(std.standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
919
919
  else
920
920
  ac_props = std.model_find_object(std.standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
@@ -955,7 +955,7 @@ module OpenstudioStandards
955
955
 
956
956
  # find ac properties
957
957
  search_criteria = std.coil_dx_find_search_criteria(component)
958
- capacity_w = std.coil_cooling_dx_two_speed_find_capacity(component)
958
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_two_speed_get_capacity(component)
959
959
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
960
960
  ac_props = std.model_find_object(std.standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
961
961
 
@@ -994,7 +994,7 @@ module OpenstudioStandards
994
994
 
995
995
  # find ac properties
996
996
  search_criteria = std.coil_dx_find_search_criteria(component)
997
- capacity_w = std.coil_heating_dx_single_speed_find_capacity(component)
997
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(component)
998
998
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
999
999
  ac_props = std.model_find_object(std.standards_data['heat_pumps_heating'], search_criteria, capacity_btu_per_hr, Date.today)
1000
1000
  if ac_props.nil?
@@ -1070,7 +1070,7 @@ module OpenstudioStandards
1070
1070
 
1071
1071
  # get target coefs
1072
1072
  target_fan = OpenStudio::Model::FanVariableVolume.new(model_temp)
1073
- std.fan_variable_volume_set_control_type(target_fan, 'Multi Zone VAV with VSD and Static Pressure Reset')
1073
+ OpenstudioStandards::HVAC.fan_variable_volume_set_control_type(target_fan, control_type: 'Multi Zone VAV with Static Pressure Setpoint Reset')
1074
1074
 
1075
1075
  # get coeficents for fan
1076
1076
  target_fan_coefs = []
@@ -1416,13 +1416,13 @@ module OpenstudioStandards
1416
1416
  obj_type = component.iddObjectType.valueName.to_s
1417
1417
  case obj_type
1418
1418
  when 'OS_Pump_ConstantSpeed'
1419
- actual_w_per_gpm = std.pump_rated_w_per_gpm(component.to_PumpConstantSpeed.get)
1419
+ actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_PumpConstantSpeed.get)
1420
1420
  when 'OS_Pump_VariableSpeed'
1421
- actual_w_per_gpm = std.pump_rated_w_per_gpm(component.to_PumpVariableSpeed.get)
1421
+ actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_PumpVariableSpeed.get)
1422
1422
  when 'OS_HeaderedPumps_ConstantSpeed'
1423
- actual_w_per_gpm = std.pump_rated_w_per_gpm(component.to_HeaderedPumpsConstantSpeed.get)
1423
+ actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_HeaderedPumpsConstantSpeed.get)
1424
1424
  when 'OS_HeaderedPumps_VariableSpeed'
1425
- actual_w_per_gpm = std.pump_rated_w_per_gpm(component.to_HeaderedPumpsVariableSpeed.get)
1425
+ actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_HeaderedPumpsVariableSpeed.get)
1426
1426
  else
1427
1427
  next # Skip non-pump objects
1428
1428
  end
@@ -33,9 +33,6 @@ module OpenstudioStandards
33
33
  pc = compressor_properties.select { |r| r[:curve_type] == 'Power' }[0]
34
34
  cc = compressor_properties.select { |r| r[:curve_type] == 'Capacity' }[0]
35
35
 
36
- # TODO: replace with curve data once curves are refactored
37
- std = Standard.build('90.1-2013')
38
-
39
36
  # create power curve
40
37
  power_coeffs = []
41
38
  power_coeffs << pc[:coefficient1]
@@ -48,7 +45,7 @@ module OpenstudioStandards
48
45
  power_coeffs << pc[:coefficient8]
49
46
  power_coeffs << pc[:coefficient9]
50
47
  power_coeffs << pc[:coefficient10]
51
- power_curve = std.create_curve_bicubic(model, power_coeffs, pc[:curve_name], pc[:min_val_x], pc[:max_val_x], pc[:min_val_y], pc[:max_val_y], nil, nil)
48
+ power_curve = OpenstudioStandards::HVAC.create_curve_bicubic(model, power_coeffs, name: pc[:curve_name], min_x: pc[:min_val_x], max_x: pc[:max_val_x], min_y: pc[:min_val_y], max_y: pc[:max_val_y])
52
49
 
53
50
  # create capacity curve
54
51
  capacity_coeffs = []
@@ -62,7 +59,7 @@ module OpenstudioStandards
62
59
  capacity_coeffs << cc[:coefficient8]
63
60
  capacity_coeffs << cc[:coefficient9]
64
61
  capacity_coeffs << cc[:coefficient10]
65
- capacity_curve = std.create_curve_bicubic(model, capacity_coeffs, cc[:curve_name], cc[:min_val_x], cc[:max_val_x], cc[:min_val_y], cc[:max_val_y], nil, nil)
62
+ capacity_curve = OpenstudioStandards::HVAC.create_curve_bicubic(model, capacity_coeffs, name: cc[:curve_name], min_x: cc[:min_val_x], max_x: cc[:max_val_x], min_y: cc[:min_val_y], max_y: cc[:max_val_y])
66
63
 
67
64
  # Make the compressor
68
65
  compressor = OpenStudio::Model::RefrigerationCompressor.new(model)
@@ -1,10 +1,10 @@
1
1
  curve_name,template,operation_type,curve_type,coefficient1,coefficient2,coefficient3,coefficient4,coefficient5,coefficient6,coefficient7,coefficient8,coefficient9,coefficient10,min_val_x,max_val_x,min_val_y,max_val_y
2
2
  Old_Low_Temp_Comp_Pwr_Curve,old,LT,Power,29669.27106,1027.632052,18.10662623,-442.1997136,11.13352877,-20.38045192,0.139980653,-0.058866918,-0.218451538,0.203858467,-40,-17.8,4.4,54.4
3
3
  Old_Med_Temp_Comp_Pwr_Curve,old,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
4
- New_Low_Temp_Comp_Pwr_Curve,new,LT,Power,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
5
- New_Med_Temp_Comp_Pwr_Curve,new,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
6
- Advanced_Low_Temp_Comp_Pwr_Curve,advanced,LT,Power,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
7
- Advanced_Med_Temp_Comp_Pwr_Curve,advanced,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
4
+ New_Low_Temp_Comp_Pwr_Curve,new,LT,Power,6274.990362,61.39066125,1.620853748,129.1127948,0.874116171,1.958117256,0.030293311,0.005754678,0.004653957,-0.000749905,-40,-17.8,4.4,54.4
5
+ New_Med_Temp_Comp_Pwr_Curve,new,MT,Power,4994.033647,170.249719,2.846389112,356.7940341,-6.307470374,-1.409856005,0.012160476,0.076231729,-0.057527471,0.009054446,-23.3,7.2,10,60
6
+ Advanced_Low_Temp_Comp_Pwr_Curve,advanced,LT,Power,6274.990362,61.39066125,1.620853748,129.1127948,0.874116171,1.958117256,0.030293311,0.005754678,0.004653957,-0.000749905,-40,-17.8,4.4,54.4
7
+ Advanced_Med_Temp_Comp_Pwr_Curve,advanced,MT,Power,4994.033647,170.249719,2.846389112,356.7940341,-6.307470374,-1.409856005,0.012160476,0.076231729,-0.057527471,0.009054446,-23.3,7.2,10,60
8
8
  Old_Low_Temp_Comp_Cap_Curve,old,LT,Capacity,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
9
9
  Old_Med_Temp_Comp_Cap_Curve,old,MT,Capacity,151166.4362,5266.347888,60.67271508,-1851.559382,5.731327549,-46.92771731,0.136401203,-0.035697884,-0.403053994,-0.039290478,-23.3,7.2,10,60
10
10
  New_Low_Temp_Comp_Cap_Curve,new,LT,Capacity,58336.86118,1561.7435,6.606812861,-283.6500679,-0.120234941,-12.49574858,-0.116278559,0.002277001,-0.118148325,0.032839613,-40,-17.8,4.4,54.4
@@ -462,8 +462,7 @@ module OpenstudioStandards
462
462
 
463
463
  # add EMS for overriding HPWH setpoints schedules (for upper/lower heating element in water tank and compressor in heat pump)
464
464
  if heat_pump_type == 'WrappedCondenser' && use_ems_control
465
- std = Standard.build('90.1-2013')
466
- hpwh_name_ems_friendly = std.ems_friendly_name(hpwh.name)
465
+ hpwh_name_ems_friendly = OpenstudioStandards::HVAC.ems_friendly_name(hpwh.name)
467
466
 
468
467
  # create an ambient temperature sensor for the air that blows through the HPWH evaporator
469
468
  if water_heater_thermal_zone.nil?
@@ -50,7 +50,7 @@ module OpenstudioStandards
50
50
  water_use_def.setSensibleFractionSchedule(water_use_sensible_frac_sch)
51
51
  water_use_def.setLatentFractionSchedule(water_use_latent_frac_sch)
52
52
  water_use_def.setPeakFlowRate(flow_rate)
53
- water_use_def.setName("#{name} #{flow_rate_gpm.round(2)}gpm #{water_use_temperature_f.round}F")
53
+ water_use_def.setName("#{name} #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
54
54
 
55
55
  # target mixed water temperature
56
56
  if water_use_temperature_schedule.nil?
@@ -71,11 +71,11 @@ module OpenstudioStandards
71
71
 
72
72
  # add to the space if provided
73
73
  if space.nil?
74
- water_fixture.setName("#{name} Service Water Use #{flow_rate_gpm.round(2)}gpm #{water_use_temperature_f.round}F")
75
- swh_connection.setName("#{name} WUC #{flow_rate_gpm.round(2)}gpm #{water_use_temperature_f.round}F")
74
+ water_fixture.setName("#{name} Service Water Use #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
75
+ swh_connection.setName("#{name} WUC #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
76
76
  else
77
- water_fixture.setName("#{space.name} Service Water Use #{flow_rate_gpm.round(2)}gpm #{water_use_temperature_f.round}F")
78
- swh_connection.setName("#{space.name} WUC #{flow_rate_gpm.round(2)}gpm #{water_use_temperature_f.round}F")
77
+ water_fixture.setName("#{space.name} Service Water Use #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
78
+ swh_connection.setName("#{space.name} WUC #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
79
79
  water_fixture.setSpace(space)
80
80
  end
81
81