openstudio-common-measures 0.3.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +3 -1
  4. data/CHANGELOG.md +34 -0
  5. data/Jenkinsfile +2 -1
  6. data/LICENSE.md +1 -1
  7. data/README.md +21 -2
  8. data/doc_templates/LICENSE.md +1 -1
  9. data/doc_templates/copyright_erb.txt +1 -1
  10. data/doc_templates/copyright_js.txt +1 -1
  11. data/doc_templates/copyright_ruby.txt +1 -1
  12. data/lib/measures/AddCostPerAreaToConstruction/LICENSE.md +1 -1
  13. data/lib/measures/AddCostPerAreaToConstruction/measure.rb +1 -1
  14. data/lib/measures/AddCostPerAreaToConstruction/measure.xml +8 -7
  15. data/lib/measures/AddCostPerFloorAreaToBuilding/LICENSE.md +1 -1
  16. data/lib/measures/AddCostPerFloorAreaToBuilding/measure.rb +1 -1
  17. data/lib/measures/AddCostPerFloorAreaToBuilding/measure.xml +8 -7
  18. data/lib/measures/AddCostPerFloorAreaToElectricEquipment/LICENSE.md +1 -1
  19. data/lib/measures/AddCostPerFloorAreaToElectricEquipment/measure.rb +1 -1
  20. data/lib/measures/AddCostPerFloorAreaToElectricEquipment/measure.xml +8 -7
  21. data/lib/measures/AddCostPerFloorAreaToLights/LICENSE.md +1 -1
  22. data/lib/measures/AddCostPerFloorAreaToLights/measure.rb +1 -1
  23. data/lib/measures/AddCostPerFloorAreaToLights/measure.xml +8 -7
  24. data/lib/measures/AddCostPerFloorAreaUnusedToLights/LICENSE.md +1 -1
  25. data/lib/measures/AddCostPerFloorAreaUnusedToLights/measure.rb +1 -1
  26. data/lib/measures/AddCostPerFloorAreaUnusedToLights/measure.xml +8 -13
  27. data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/LICENSE.md +1 -1
  28. data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/measure.rb +1 -1
  29. data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/measure.xml +15 -8
  30. data/lib/measures/AddCostperAreatoUnusedConstruction/LICENSE.md +1 -1
  31. data/lib/measures/AddCostperAreatoUnusedConstruction/measure.rb +1 -1
  32. data/lib/measures/AddCostperAreatoUnusedConstruction/measure.xml +8 -7
  33. data/lib/measures/AddExteriorLights/LICENSE.md +1 -1
  34. data/lib/measures/AddExteriorLights/measure.rb +1 -1
  35. data/lib/measures/AddExteriorLights/measure.xml +8 -7
  36. data/lib/measures/AddMeter/LICENSE.md +1 -1
  37. data/lib/measures/AddMeter/measure.rb +1 -1
  38. data/lib/measures/AddMeter/measure.xml +8 -7
  39. data/lib/measures/AddOutputDiagnostics/LICENSE.md +1 -1
  40. data/lib/measures/AddOutputDiagnostics/measure.rb +1 -1
  41. data/lib/measures/AddOutputDiagnostics/measure.xml +8 -7
  42. data/lib/measures/AddOutputVariable/LICENSE.md +1 -1
  43. data/lib/measures/AddOutputVariable/measure.rb +1 -1
  44. data/lib/measures/AddOutputVariable/measure.xml +8 -7
  45. data/lib/measures/AddSimplePvToShadingSurfacesByType/LICENSE.md +1 -1
  46. data/lib/measures/AddSimplePvToShadingSurfacesByType/measure.rb +1 -1
  47. data/lib/measures/AddSimplePvToShadingSurfacesByType/measure.xml +8 -7
  48. data/lib/measures/AdjustSystemEfficiencies/LICENSE.md +1 -1
  49. data/lib/measures/AdjustSystemEfficiencies/measure.rb +1 -1
  50. data/lib/measures/AdjustSystemEfficiencies/measure.xml +7 -6
  51. data/lib/measures/AdjustThermostatSetpointsByDegrees/LICENSE.md +1 -1
  52. data/lib/measures/AdjustThermostatSetpointsByDegrees/measure.rb +1 -1
  53. data/lib/measures/AdjustThermostatSetpointsByDegrees/measure.xml +8 -7
  54. data/lib/measures/ChangeBuildingLocation/LICENSE.md +1 -1
  55. data/lib/measures/ChangeBuildingLocation/measure.rb +3 -3
  56. data/lib/measures/ChangeBuildingLocation/measure.xml +17 -17
  57. data/lib/measures/ChangeBuildingLocation/resources/epw.rb +1 -1
  58. data/lib/measures/ChangeBuildingLocation/resources/stat_file.rb +1 -1
  59. data/lib/measures/EnableIdealAirLoadsForAllZones/LICENSE.md +1 -1
  60. data/lib/measures/EnableIdealAirLoadsForAllZones/measure.rb +1 -1
  61. data/lib/measures/EnableIdealAirLoadsForAllZones/measure.xml +9 -8
  62. data/lib/measures/ExportScheduleCSV/LICENSE.md +1 -1
  63. data/lib/measures/ExportScheduleCSV/measure.rb +1 -1
  64. data/lib/measures/ExportScheduleCSV/measure.xml +11 -11
  65. data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/LICENSE.md +1 -1
  66. data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/measure.rb +1 -1
  67. data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/measure.xml +5 -5
  68. data/lib/measures/MeterFlodPlot/LICENSE.md +1 -1
  69. data/lib/measures/MeterFlodPlot/measure.rb +1 -1
  70. data/lib/measures/MeterFlodPlot/measure.xml +11 -11
  71. data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/LICENSE.md +1 -1
  72. data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/measure.rb +1 -1
  73. data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/measure.xml +8 -7
  74. data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/LICENSE.md +1 -1
  75. data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/measure.rb +1 -1
  76. data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/measure.xml +8 -7
  77. data/lib/measures/PredictedMeanVote/LICENSE.md +1 -1
  78. data/lib/measures/PredictedMeanVote/measure.rb +1 -1
  79. data/lib/measures/PredictedMeanVote/measure.xml +14 -13
  80. data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/LICENSE.md +1 -1
  81. data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/measure.rb +1 -1
  82. data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/measure.xml +9 -8
  83. data/lib/measures/RemoveUnusedDefaultProfiles/LICENSE.md +1 -1
  84. data/lib/measures/RemoveUnusedDefaultProfiles/measure.rb +1 -1
  85. data/lib/measures/RemoveUnusedDefaultProfiles/measure.xml +9 -8
  86. data/lib/measures/ReplaceExteriorWindowConstruction/LICENSE.md +1 -1
  87. data/lib/measures/ReplaceExteriorWindowConstruction/measure.rb +1 -1
  88. data/lib/measures/ReplaceExteriorWindowConstruction/measure.xml +11 -10
  89. data/lib/measures/ReplaceThermostatSchedules/LICENSE.md +1 -1
  90. data/lib/measures/ReplaceThermostatSchedules/measure.rb +1 -1
  91. data/lib/measures/ReplaceThermostatSchedules/measure.xml +12 -11
  92. data/lib/measures/ReportModelChanges/LICENSE.md +1 -1
  93. data/lib/measures/ReportModelChanges/measure.rb +1 -1
  94. data/lib/measures/ReportModelChanges/measure.xml +5 -5
  95. data/lib/measures/RunPeriod/LICENSE.md +1 -1
  96. data/lib/measures/RunPeriod/measure.rb +1 -1
  97. data/lib/measures/RunPeriod/measure.xml +19 -18
  98. data/lib/measures/RunPeriodMultiple/LICENSE.md +1 -1
  99. data/lib/measures/RunPeriodMultiple/measure.rb +1 -1
  100. data/lib/measures/RunPeriodMultiple/measure.xml +4 -4
  101. data/lib/measures/ServerDirectoryCleanup/LICENSE.md +1 -1
  102. data/lib/measures/ServerDirectoryCleanup/measure.rb +1 -1
  103. data/lib/measures/ServerDirectoryCleanup/measure.xml +16 -16
  104. data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/LICENSE.md +1 -1
  105. data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/measure.rb +1 -1
  106. data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/measure.xml +10 -9
  107. data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/LICENSE.md +1 -1
  108. data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/measure.rb +1 -1
  109. data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/measure.xml +10 -9
  110. data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/LICENSE.md +1 -1
  111. data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/measure.rb +1 -1
  112. data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/measure.xml +8 -7
  113. data/lib/measures/SetEnergyPlusLightObjectsLPD/LICENSE.md +1 -1
  114. data/lib/measures/SetEnergyPlusLightObjectsLPD/measure.rb +1 -1
  115. data/lib/measures/SetEnergyPlusLightObjectsLPD/measure.xml +8 -7
  116. data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/LICENSE.md +1 -1
  117. data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/measure.rb +1 -1
  118. data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/measure.xml +8 -7
  119. data/lib/measures/SetGasBurnerEfficiency/LICENSE.md +1 -1
  120. data/lib/measures/SetGasBurnerEfficiency/measure.rb +1 -1
  121. data/lib/measures/SetGasBurnerEfficiency/measure.xml +10 -9
  122. data/lib/measures/SetLifecycleCostParameters/LICENSE.md +1 -1
  123. data/lib/measures/SetLifecycleCostParameters/measure.rb +1 -1
  124. data/lib/measures/SetLifecycleCostParameters/measure.xml +8 -7
  125. data/lib/measures/SetLightingLoadsByLPD/LICENSE.md +1 -1
  126. data/lib/measures/SetLightingLoadsByLPD/measure.rb +1 -1
  127. data/lib/measures/SetLightingLoadsByLPD/measure.xml +10 -9
  128. data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/LICENSE.md +1 -1
  129. data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/measure.rb +1 -1
  130. data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/measure.xml +20 -19
  131. data/lib/measures/SetThermostatSchedules/LICENSE.md +1 -1
  132. data/lib/measures/SetThermostatSchedules/measure.rb +1 -1
  133. data/lib/measures/SetThermostatSchedules/measure.xml +12 -11
  134. data/lib/measures/ShiftScheduleProfileTime/LICENSE.md +1 -1
  135. data/lib/measures/ShiftScheduleProfileTime/measure.rb +1 -1
  136. data/lib/measures/ShiftScheduleProfileTime/measure.xml +10 -9
  137. data/lib/measures/SwapLightsDefinition/LICENSE.md +1 -1
  138. data/lib/measures/SwapLightsDefinition/measure.rb +1 -1
  139. data/lib/measures/SwapLightsDefinition/measure.xml +9 -10
  140. data/lib/measures/UnmetLoadHoursTroubleshooting/LICENSE.md +1 -1
  141. data/lib/measures/UnmetLoadHoursTroubleshooting/measure.rb +1 -1
  142. data/lib/measures/UnmetLoadHoursTroubleshooting/measure.xml +11 -11
  143. data/lib/measures/VentilationQAQC/LICENSE.md +1 -1
  144. data/lib/measures/VentilationQAQC/measure.rb +1 -1
  145. data/lib/measures/VentilationQAQC/measure.xml +17 -17
  146. data/lib/measures/ZoneReport/LICENSE.md +1 -1
  147. data/lib/measures/ZoneReport/measure.rb +1 -1
  148. data/lib/measures/ZoneReport/measure.xml +11 -11
  149. data/lib/measures/add_ems_emissions_reporting/LICENSE.MD.txt +15 -0
  150. data/lib/measures/add_ems_emissions_reporting/LICENSE.md +27 -0
  151. data/lib/measures/add_ems_emissions_reporting/README.md +17 -0
  152. data/lib/measures/add_ems_emissions_reporting/measure.rb +475 -0
  153. data/lib/measures/add_ems_emissions_reporting/measure.xml +599 -0
  154. data/lib/measures/add_ems_emissions_reporting/resources/future_annual_co2e.csv +17 -0
  155. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2020.csv +8761 -0
  156. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2022.csv +8761 -0
  157. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2024.csv +8761 -0
  158. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2026.csv +8761 -0
  159. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2028.csv +8761 -0
  160. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2030.csv +8761 -0
  161. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2032.csv +8761 -0
  162. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2034.csv +8761 -0
  163. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2036.csv +8761 -0
  164. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2038.csv +8761 -0
  165. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2040.csv +8761 -0
  166. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2042.csv +8761 -0
  167. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2044.csv +8761 -0
  168. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2046.csv +8761 -0
  169. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2048.csv +8761 -0
  170. data/lib/measures/add_ems_emissions_reporting/resources/future_hourly_co2e_2050.csv +8761 -0
  171. data/lib/measures/add_ems_emissions_reporting/resources/historical_annual_co2e.csv +9 -0
  172. data/lib/measures/add_ems_emissions_reporting/resources/historical_hourly_co2e_2019.csv +8761 -0
  173. data/lib/measures/add_ems_to_control_ev_charging/LICENSE.MD.txt +1 -1
  174. data/lib/measures/add_ems_to_control_ev_charging/LICENSE.md +1 -1
  175. data/lib/measures/add_ems_to_control_ev_charging/measure.rb +2 -1
  176. data/lib/measures/add_ems_to_control_ev_charging/measure.xml +14 -10
  177. data/lib/measures/add_ev_load/LICENSE.MD.txt +1 -1
  178. data/lib/measures/add_ev_load/LICENSE.md +1 -1
  179. data/lib/measures/add_ev_load/measure.rb +56 -10
  180. data/lib/measures/add_ev_load/measure.xml +229 -16
  181. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/PSN_BuildingKey.csv → PSN_BuildingKey.csv} +0 -0
  182. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/PSN_BuildingKey_v2.csv → PSN_BuildingKey_v2.csv} +0 -0
  183. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow1_flex1.csv → chg1_dow1_flex1.csv} +0 -0
  184. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow1_flex2.csv → chg1_dow1_flex2.csv} +0 -0
  185. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow1_flex3.csv → chg1_dow1_flex3.csv} +0 -0
  186. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow2_flex1.csv → chg1_dow2_flex1.csv} +0 -0
  187. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow2_flex2.csv → chg1_dow2_flex2.csv} +0 -0
  188. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow2_flex3.csv → chg1_dow2_flex3.csv} +0 -0
  189. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow3_flex1.csv → chg1_dow3_flex1.csv} +0 -0
  190. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow3_flex2.csv → chg1_dow3_flex2.csv} +0 -0
  191. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg1_dow3_flex3.csv → chg1_dow3_flex3.csv} +0 -0
  192. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow1_flex1.csv → chg2_dow1_flex1.csv} +0 -0
  193. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow1_flex2.csv → chg2_dow1_flex2.csv} +0 -0
  194. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow1_flex3.csv → chg2_dow1_flex3.csv} +0 -0
  195. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow2_flex1.csv → chg2_dow2_flex1.csv} +0 -0
  196. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow2_flex2.csv → chg2_dow2_flex2.csv} +0 -0
  197. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow2_flex3.csv → chg2_dow2_flex3.csv} +0 -0
  198. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow3_flex1.csv → chg2_dow3_flex1.csv} +0 -0
  199. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow3_flex2.csv → chg2_dow3_flex2.csv} +0 -0
  200. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg2_dow3_flex3.csv → chg2_dow3_flex3.csv} +0 -0
  201. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow1_flex1.csv → chg3_dow1_flex1.csv} +0 -0
  202. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow1_flex2.csv → chg3_dow1_flex2.csv} +0 -0
  203. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow1_flex3.csv → chg3_dow1_flex3.csv} +0 -0
  204. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow2_flex1.csv → chg3_dow2_flex1.csv} +0 -0
  205. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow2_flex2.csv → chg3_dow2_flex2.csv} +0 -0
  206. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow2_flex3.csv → chg3_dow2_flex3.csv} +0 -0
  207. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow3_flex1.csv → chg3_dow3_flex1.csv} +0 -0
  208. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow3_flex2.csv → chg3_dow3_flex2.csv} +0 -0
  209. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/chg3_dow3_flex3.csv → chg3_dow3_flex3.csv} +0 -0
  210. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/fast_charge_15min_Saturday.csv → fast_charge_15min_Saturday.csv} +0 -0
  211. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/fast_charge_15min_Sunday.csv → fast_charge_15min_Sunday.csv} +0 -0
  212. data/lib/measures/add_ev_load/resources/{EV_Load_Profiles/fast_charge_15min_Weekday.csv → fast_charge_15min_Weekday.csv} +0 -0
  213. data/lib/measures/add_rooftop_pv/LICENSE.md +1 -1
  214. data/lib/measures/add_rooftop_pv/measure.rb +1 -1
  215. data/lib/measures/add_rooftop_pv/measure.xml +5 -5
  216. data/lib/measures/add_zone_mixing_object/LICENSE.md +1 -1
  217. data/lib/measures/add_zone_mixing_object/measure.rb +1 -1
  218. data/lib/measures/add_zone_mixing_object/measure.xml +8 -7
  219. data/lib/measures/add_zone_ventilation_design_flow_rate_object/LICENSE.md +1 -1
  220. data/lib/measures/add_zone_ventilation_design_flow_rate_object/measure.rb +1 -1
  221. data/lib/measures/add_zone_ventilation_design_flow_rate_object/measure.xml +8 -7
  222. data/lib/measures/air_wall_zone_mixing/LICENSE.md +1 -1
  223. data/lib/measures/air_wall_zone_mixing/measure.rb +1 -1
  224. data/lib/measures/air_wall_zone_mixing/measure.xml +5 -5
  225. data/lib/measures/envelope_and_internal_load_breakdown/LICENSE.md +1 -1
  226. data/lib/measures/envelope_and_internal_load_breakdown/measure.rb +1 -1
  227. data/lib/measures/envelope_and_internal_load_breakdown/measure.xml +8 -8
  228. data/lib/measures/envelope_and_internal_load_breakdown/resources/os_lib_reporting_envelope_and_internal_loads_breakdown.rb +1 -1
  229. data/lib/measures/envelope_and_internal_load_breakdown/resources/report.html.erb +8 -1
  230. data/lib/measures/example_report/LICENSE.md +1 -1
  231. data/lib/measures/example_report/measure.rb +1 -1
  232. data/lib/measures/example_report/measure.xml +14 -14
  233. data/lib/measures/example_report/resources/os_lib_reporting_example.rb +1 -1
  234. data/lib/measures/example_report/resources/report.html.erb +8 -1
  235. data/lib/measures/gem_env_report/LICENSE.md +1 -1
  236. data/lib/measures/gem_env_report/measure.rb +1 -1
  237. data/lib/measures/gem_env_report/measure.xml +13 -12
  238. data/lib/measures/gem_env_report/resources/gem_env_info.rb +1 -1
  239. data/lib/measures/gem_env_report/resources/openstudio_info.rb +1 -1
  240. data/lib/measures/gem_env_report/resources/run_gem_env_info.rb +1 -1
  241. data/lib/measures/gem_env_report/resources/run_openstudio_info.rb +1 -1
  242. data/lib/measures/generic_qaqc/LICENSE.md +1 -1
  243. data/lib/measures/generic_qaqc/README.md +19 -4
  244. data/lib/measures/generic_qaqc/README.md.erb +7 -1
  245. data/lib/measures/generic_qaqc/docs/generic_qaqc_detailed.jpg +0 -0
  246. data/lib/measures/generic_qaqc/docs/generic_qaqc_summary.jpg +0 -0
  247. data/lib/measures/generic_qaqc/measure.rb +40 -30
  248. data/lib/measures/generic_qaqc/measure.xml +183 -90
  249. data/lib/measures/generic_qaqc/resources/CreateResults.rb +1 -1
  250. data/lib/measures/generic_qaqc/resources/check_air_sys_temps.rb +1 -1
  251. data/lib/measures/generic_qaqc/resources/check_calibration.rb +1 -1
  252. data/lib/measures/generic_qaqc/resources/check_cond_zns.rb +4 -2
  253. data/lib/measures/generic_qaqc/resources/check_domestic_hot_water.rb +14 -9
  254. data/lib/measures/generic_qaqc/resources/check_envelope_conductance.rb +331 -232
  255. data/lib/measures/generic_qaqc/resources/check_eui_by_end_use.rb +60 -21
  256. data/lib/measures/generic_qaqc/resources/check_eui_reasonableness.rb +59 -21
  257. data/lib/measures/generic_qaqc/resources/check_fan_pwr.rb +1 -1
  258. data/lib/measures/generic_qaqc/resources/check_internal_loads.rb +58 -57
  259. data/lib/measures/generic_qaqc/resources/check_mech_sys_capacity.rb +5 -2
  260. data/lib/measures/generic_qaqc/resources/check_mech_sys_efficiency.rb +28 -23
  261. data/lib/measures/generic_qaqc/resources/check_mech_sys_part_load_eff.rb +5 -2
  262. data/lib/measures/generic_qaqc/resources/check_mech_sys_type.rb +4 -4
  263. data/lib/measures/generic_qaqc/resources/check_part_loads.rb +1 -1
  264. data/lib/measures/generic_qaqc/resources/check_placeholder.rb +1 -1
  265. data/lib/measures/generic_qaqc/resources/check_plant_cap.rb +1 -1
  266. data/lib/measures/generic_qaqc/resources/check_plant_temps.rb +1 -1
  267. data/lib/measures/generic_qaqc/resources/check_plenum_loads.rb +1 -1
  268. data/lib/measures/generic_qaqc/resources/check_pump_pwr.rb +1 -1
  269. data/lib/measures/generic_qaqc/resources/check_sch_coord.rb +1 -1
  270. data/lib/measures/generic_qaqc/resources/check_schedules.rb +66 -102
  271. data/lib/measures/generic_qaqc/resources/check_simultaneous_heating_and_cooling.rb +4 -2
  272. data/lib/measures/generic_qaqc/resources/check_supply_air_and_thermostat_temp_difference.rb +4 -2
  273. data/lib/measures/generic_qaqc/resources/check_weather_files.rb +1 -1
  274. data/lib/measures/generic_qaqc/resources/os_lib_reporting_qaqc.rb +50 -16
  275. data/lib/measures/generic_qaqc/resources/report.html.erb +8 -1
  276. data/lib/measures/get_site_from_building_component_library/LICENSE.md +1 -1
  277. data/lib/measures/get_site_from_building_component_library/measure.rb +1 -1
  278. data/lib/measures/get_site_from_building_component_library/measure.xml +6 -6
  279. data/lib/measures/hvac_psychrometric_chart/LICENSE.md +1 -1
  280. data/lib/measures/hvac_psychrometric_chart/measure.rb +1 -1
  281. data/lib/measures/hvac_psychrometric_chart/measure.xml +15 -15
  282. data/lib/measures/hvac_psychrometric_chart/resources/report.html.erb +8 -1
  283. data/lib/measures/inject_idf_objects/LICENSE.md +1 -1
  284. data/lib/measures/inject_idf_objects/measure.rb +1 -1
  285. data/lib/measures/inject_idf_objects/measure.xml +10 -10
  286. data/lib/measures/openstudio_results/LICENSE.md +1 -1
  287. data/lib/measures/openstudio_results/measure.rb +6 -4
  288. data/lib/measures/openstudio_results/measure.xml +174 -162
  289. data/lib/measures/openstudio_results/resources/Siz.AirConditionerVariableRefrigerantFlow.rb +1 -1
  290. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVAC.rb +1 -1
  291. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.rb +1 -1
  292. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitaryHeatPumpAirToAir.rb +1 -1
  293. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.rb +1 -1
  294. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitarySystem.rb +1 -1
  295. data/lib/measures/openstudio_results/resources/Siz.AirTerminalDualDuctVAV.rb +1 -1
  296. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctConstantVolumeCooledBeam.rb +1 -1
  297. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctConstantVolumeFourPipeInduction.rb +1 -1
  298. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctConstantVolumeReheat.rb +1 -1
  299. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctParallelPIUReheat.rb +1 -1
  300. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctSeriesPIUReheat.rb +1 -1
  301. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctUncontrolled.rb +1 -1
  302. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVHeatAndCoolNoReheat.rb +1 -1
  303. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVHeatAndCoolReheat.rb +1 -1
  304. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVNoReheat.rb +1 -1
  305. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVReheat.rb +1 -1
  306. data/lib/measures/openstudio_results/resources/Siz.BoilerHotWater.rb +1 -1
  307. data/lib/measures/openstudio_results/resources/Siz.BoilerSteam.rb +1 -1
  308. data/lib/measures/openstudio_results/resources/Siz.ChillerAbsorption.rb +1 -1
  309. data/lib/measures/openstudio_results/resources/Siz.ChillerAbsorptionIndirect.rb +1 -1
  310. data/lib/measures/openstudio_results/resources/Siz.ChillerElectricEIR.rb +1 -1
  311. data/lib/measures/openstudio_results/resources/Siz.ChillerHeaterPerformanceElectricEIR.rb +1 -1
  312. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXMultiSpeed.rb +1 -1
  313. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXMultiSpeedStageData.rb +1 -1
  314. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXSingleSpeed.rb +1 -1
  315. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXTwoSpeed.rb +1 -1
  316. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXTwoStageWithHumidityControlMode.rb +1 -1
  317. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXVariableRefrigerantFlow.rb +1 -1
  318. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXVariableSpeed.rb +1 -1
  319. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXVariableSpeedSpeedData.rb +1 -1
  320. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingLowTempRadiantVarFlow.rb +1 -1
  321. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWater.rb +1 -1
  322. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  323. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit.rb +1 -1
  324. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.rb +1 -1
  325. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXMultiSpeed.rb +1 -1
  326. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXMultiSpeedStageData.rb +1 -1
  327. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXSingleSpeed.rb +1 -1
  328. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXVariableRefrigerantFlow.rb +1 -1
  329. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXVariableSpeed.rb +1 -1
  330. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXVariableSpeedSpeedData.rb +1 -1
  331. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDesuperheater.rb +1 -1
  332. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingElectric.rb +1 -1
  333. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingGas.rb +1 -1
  334. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingGasMultiStage.rb +1 -1
  335. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingGasMultiStageStageData.rb +1 -1
  336. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingLowTempRadiantVarFlow.rb +1 -1
  337. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWater.rb +1 -1
  338. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterBaseboard.rb +1 -1
  339. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterBaseboardRadiant.rb +1 -1
  340. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -1
  341. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFit.rb +1 -1
  342. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.rb +1 -1
  343. data/lib/measures/openstudio_results/resources/Siz.CoilPerformanceDXCooling.rb +1 -1
  344. data/lib/measures/openstudio_results/resources/Siz.CoilSystemCoolingDXHeatExchangerAssisted.rb +1 -1
  345. data/lib/measures/openstudio_results/resources/Siz.CoilSystemCoolingWaterHeatExchangerAssisted.rb +1 -1
  346. data/lib/measures/openstudio_results/resources/Siz.CoilWaterHeatingAirToWaterHeatPump.rb +1 -1
  347. data/lib/measures/openstudio_results/resources/Siz.CoilWaterHeatingAirToWaterHeatPumpWrapped.rb +1 -1
  348. data/lib/measures/openstudio_results/resources/Siz.CoilWaterHeatingDesuperheater.rb +1 -1
  349. data/lib/measures/openstudio_results/resources/Siz.ControllerOutdoorAir.rb +1 -1
  350. data/lib/measures/openstudio_results/resources/Siz.CoolingTowerSingleSpeed.rb +1 -1
  351. data/lib/measures/openstudio_results/resources/Siz.CoolingTowerTwoSpeed.rb +1 -1
  352. data/lib/measures/openstudio_results/resources/Siz.CoolingTowerVariableSpeed.rb +1 -1
  353. data/lib/measures/openstudio_results/resources/Siz.DistrictCooling.rb +1 -1
  354. data/lib/measures/openstudio_results/resources/Siz.DistrictHeating.rb +1 -1
  355. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterInverterLookUpTable.rb +1 -1
  356. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterInverterSimple.rb +1 -1
  357. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterStorageConverter.rb +1 -1
  358. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterStorageSimple.rb +1 -1
  359. data/lib/measures/openstudio_results/resources/Siz.EvaporativeCoolerDirectResearchSpecial.rb +1 -1
  360. data/lib/measures/openstudio_results/resources/Siz.EvaporativeCoolerIndirectResearchSpecial.rb +1 -1
  361. data/lib/measures/openstudio_results/resources/Siz.EvaporativeFluidCoolerSingleSpeed.rb +1 -1
  362. data/lib/measures/openstudio_results/resources/Siz.EvaporativeFluidCoolerTwoSpeed.rb +1 -1
  363. data/lib/measures/openstudio_results/resources/Siz.FanConstantVolume.rb +1 -1
  364. data/lib/measures/openstudio_results/resources/Siz.FanOnOff.rb +1 -1
  365. data/lib/measures/openstudio_results/resources/Siz.FanVariableVolume.rb +1 -1
  366. data/lib/measures/openstudio_results/resources/Siz.FanZoneExhaust.rb +1 -1
  367. data/lib/measures/openstudio_results/resources/Siz.FluidCoolerSingleSpeed.rb +1 -1
  368. data/lib/measures/openstudio_results/resources/Siz.FluidCoolerTwoSpeed.rb +1 -1
  369. data/lib/measures/openstudio_results/resources/Siz.GeneratorFuelCellElectricalStorage.rb +1 -1
  370. data/lib/measures/openstudio_results/resources/Siz.GeneratorFuelCellInverter.rb +1 -1
  371. data/lib/measures/openstudio_results/resources/Siz.GeneratorFuelCellPowerModule.rb +1 -1
  372. data/lib/measures/openstudio_results/resources/Siz.GeneratorMicroTurbine.rb +1 -1
  373. data/lib/measures/openstudio_results/resources/Siz.GeneratorMicroTurbineHeatRecovery.rb +1 -1
  374. data/lib/measures/openstudio_results/resources/Siz.HVACComponent.rb +1 -1
  375. data/lib/measures/openstudio_results/resources/Siz.HeaderedPumpsConstantSpeed.rb +1 -1
  376. data/lib/measures/openstudio_results/resources/Siz.HeaderedPumpsVariableSpeed.rb +1 -1
  377. data/lib/measures/openstudio_results/resources/Siz.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
  378. data/lib/measures/openstudio_results/resources/Siz.HeatExchangerFluidToFluid.rb +1 -1
  379. data/lib/measures/openstudio_results/resources/Siz.HeatPumpWaterToWaterEquationFitCooling.rb +1 -1
  380. data/lib/measures/openstudio_results/resources/Siz.HeatPumpWaterToWaterEquationFitHeating.rb +1 -1
  381. data/lib/measures/openstudio_results/resources/Siz.HumidifierSteamElectric.rb +1 -1
  382. data/lib/measures/openstudio_results/resources/Siz.Model.rb +1 -1
  383. data/lib/measures/openstudio_results/resources/Siz.ModelObject.rb +1 -1
  384. data/lib/measures/openstudio_results/resources/Siz.PhotovoltaicPerformanceSimple.rb +1 -1
  385. data/lib/measures/openstudio_results/resources/Siz.PlantComponentTemperatureSource.rb +1 -1
  386. data/lib/measures/openstudio_results/resources/Siz.PlantLoop.rb +1 -1
  387. data/lib/measures/openstudio_results/resources/Siz.PumpConstantSpeed.rb +1 -1
  388. data/lib/measures/openstudio_results/resources/Siz.PumpVariableSpeed.rb +1 -1
  389. data/lib/measures/openstudio_results/resources/Siz.RefrigerationSecondarySystem.rb +1 -1
  390. data/lib/measures/openstudio_results/resources/Siz.RefrigerationSystem.rb +1 -1
  391. data/lib/measures/openstudio_results/resources/Siz.RefrigerationTranscriticalSystem.rb +1 -1
  392. data/lib/measures/openstudio_results/resources/Siz.SizingSystem.rb +1 -1
  393. data/lib/measures/openstudio_results/resources/Siz.SolarCollectorFlatPlatePhotovoltaicThermal.rb +1 -1
  394. data/lib/measures/openstudio_results/resources/Siz.SolarCollectorPerformancePhotovoltaicThermalSimple.rb +1 -1
  395. data/lib/measures/openstudio_results/resources/Siz.ThermalStorageChilledWaterStratified.rb +1 -1
  396. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterHeatPump.rb +1 -1
  397. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterHeatPumpWrappedCondenser.rb +1 -1
  398. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterMixed.rb +1 -1
  399. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterStratified.rb +1 -1
  400. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardConvectiveElectric.rb +1 -1
  401. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardConvectiveWater.rb +1 -1
  402. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardRadiantConvectiveElectric.rb +1 -1
  403. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardRadiantConvectiveWater.rb +1 -1
  404. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACEnergyRecoveryVentilator.rb +1 -1
  405. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACFourPipeFanCoil.rb +1 -1
  406. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACHighTemperatureRadiant.rb +1 -1
  407. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACIdealLoadsAirSystem.rb +1 -1
  408. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACLowTempRadiantConstFlow.rb +1 -1
  409. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACLowTempRadiantVarFlow.rb +1 -1
  410. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACPackagedTerminalAirConditioner.rb +1 -1
  411. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACPackagedTerminalHeatPump.rb +1 -1
  412. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +1 -1
  413. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACUnitHeater.rb +1 -1
  414. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACUnitVentilator.rb +1 -1
  415. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACWaterToAirHeatPump.rb +1 -1
  416. data/lib/measures/openstudio_results/resources/Siz.ZoneVentilationDesignFlowRate.rb +1 -1
  417. data/lib/measures/openstudio_results/resources/os_lib_reporting.rb +2 -2
  418. data/lib/measures/openstudio_results/resources/report.html.erb +8 -1
  419. data/lib/measures/remove_orphan_objects_and_unused_resources/LICENSE.md +1 -1
  420. data/lib/measures/remove_orphan_objects_and_unused_resources/measure.rb +1 -1
  421. data/lib/measures/remove_orphan_objects_and_unused_resources/measure.xml +8 -7
  422. data/lib/measures/set_electric_equipment_loads_by_epd/LICENSE.md +1 -1
  423. data/lib/measures/set_electric_equipment_loads_by_epd/measure.rb +1 -1
  424. data/lib/measures/set_electric_equipment_loads_by_epd/measure.xml +10 -9
  425. data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/LICENSE.md +1 -1
  426. data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/measure.rb +1 -1
  427. data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/measure.xml +17 -11
  428. data/lib/measures/set_run_period/LICENSE.md +1 -1
  429. data/lib/measures/set_run_period/measure.rb +1 -1
  430. data/lib/measures/set_run_period/measure.xml +5 -5
  431. data/lib/measures/set_space_infiltration_per_exterior_area/LICENSE.md +1 -1
  432. data/lib/measures/set_space_infiltration_per_exterior_area/measure.rb +1 -1
  433. data/lib/measures/set_space_infiltration_per_exterior_area/measure.xml +8 -7
  434. data/lib/measures/tariff_selection_block/LICENSE.md +1 -1
  435. data/lib/measures/tariff_selection_block/measure.rb +2 -2
  436. data/lib/measures/tariff_selection_block/measure.xml +5 -5
  437. data/lib/measures/tariff_selection_flat/LICENSE.md +1 -1
  438. data/lib/measures/tariff_selection_flat/measure.rb +2 -2
  439. data/lib/measures/tariff_selection_flat/measure.xml +5 -5
  440. data/lib/measures/tariff_selection_generic/LICENSE.md +1 -1
  441. data/lib/measures/tariff_selection_generic/README.md +2 -2
  442. data/lib/measures/tariff_selection_generic/measure.rb +1 -1
  443. data/lib/measures/tariff_selection_generic/measure.xml +25 -25
  444. data/lib/measures/tariff_selection_generic/resources/FlatEnergyCharge-Gas.idf +3 -3
  445. data/lib/measures/tariff_selection_generic/resources/IN-EIAMonthlyRateGas.idf +1 -1
  446. data/lib/measures/tariff_selection_time_and_date_dependant/LICENSE.md +1 -1
  447. data/lib/measures/tariff_selection_time_and_date_dependant/measure.rb +2 -2
  448. data/lib/measures/tariff_selection_time_and_date_dependant/measure.xml +5 -5
  449. data/lib/measures/view_data/LICENSE.md +1 -1
  450. data/lib/measures/view_data/measure.rb +1 -1
  451. data/lib/measures/view_data/measure.xml +32 -32
  452. data/lib/measures/view_data/resources/report.html.in +1336 -973
  453. data/lib/measures/view_data/resources/va3c.rb +2 -1
  454. data/lib/measures/view_model/LICENSE.md +1 -1
  455. data/lib/measures/view_model/measure.rb +1 -1
  456. data/lib/measures/view_model/measure.xml +32 -32
  457. data/lib/measures/view_model/resources/report.html.in +1339 -976
  458. data/lib/measures/view_model/resources/va3c.rb +2 -1
  459. data/lib/openstudio/common_measures/extension.rb +1 -1
  460. data/lib/openstudio/common_measures/version.rb +2 -2
  461. data/lib/openstudio/common_measures.rb +1 -1
  462. data/lib/openstudio-common-measures.rb +1 -1
  463. data/openstudio-common-measures.gemspec +4 -4
  464. metadata +68 -45
  465. data/lib/measures/generic_qaqc/resources/os_lib_helper_methods.rb +0 -399
  466. data/lib/measures/openstudio_results/resources/os_lib_helper_methods.rb +0 -399
  467. data/lib/measures/openstudio_results/resources/os_lib_schedules.rb +0 -962
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -44,7 +44,9 @@ module OsLib_QAQC
44
44
  check_elems = OpenStudio::AttributeVector.new
45
45
  check_elems << OpenStudio::Attribute.new('name', 'Mechanical System Efficiency')
46
46
  check_elems << OpenStudio::Attribute.new('category', category)
47
-
47
+ check_elems << OpenStudio::Attribute.new('min_pass', min_pass * 100)
48
+ check_elems << OpenStudio::Attribute.new('max_pass', max_pass * 100)
49
+
48
50
  if target_standard.include?('90.1-2013')
49
51
  display_standard = "ASHRAE #{target_standard}"
50
52
  check_elems << OpenStudio::Attribute.new('description', "Check against #{display_standard} Tables 6.8.1 A-K for the following component types: #{component_type_array.join(', ')}.")
@@ -62,6 +64,7 @@ module OsLib_QAQC
62
64
  if name_only == true
63
65
  results = []
64
66
  check_elems.each do |elem|
67
+ next if ['Double','Integer'].include? (elem.valueType.valueDescription)
65
68
  results << elem.valueAsString
66
69
  end
67
70
  return results
@@ -96,9 +99,9 @@ module OsLib_QAQC
96
99
  if standard_minimum_full_load_efficiency.nil?
97
100
  check_elems << OpenStudio::Attribute.new('flag', "Can't find target full load efficiency for #{component.name}.")
98
101
  elsif reference_COP < standard_minimum_full_load_efficiency * (1.0 - min_pass)
99
- check_elems << OpenStudio::Attribute.new('flag', "COP of #{reference_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_full_load_efficiency.round(2)}.")
102
+ check_elems << OpenStudio::Attribute.new('flag', "COP of #{reference_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_full_load_efficiency.round(2)}.")
100
103
  elsif reference_COP > standard_minimum_full_load_efficiency * (1.0 + max_pass)
101
- check_elems << OpenStudio::Attribute.new('flag', "COP of #{reference_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_full_load_efficiency.round(2)}.")
104
+ check_elems << OpenStudio::Attribute.new('flag', "COP of #{reference_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_full_load_efficiency.round(2)}.")
102
105
  end
103
106
  end
104
107
 
@@ -118,9 +121,9 @@ module OsLib_QAQC
118
121
  if standard_minimum_cop.nil?
119
122
  check_elems << OpenStudio::Attribute.new('flag', "Can't find target COP for #{component.name}.")
120
123
  elsif rated_COP < standard_minimum_cop * (1.0 - min_pass)
121
- check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
124
+ check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
122
125
  elsif rated_COP > standard_minimum_cop * (1.0 + max_pass)
123
- check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
126
+ check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
124
127
  end
125
128
  end
126
129
 
@@ -141,16 +144,16 @@ module OsLib_QAQC
141
144
  if standard_minimum_cop.nil?
142
145
  check_elems << OpenStudio::Attribute.new('flag', "Can't find target COP for #{component.name}.")
143
146
  elsif rated_high_speed_COP < standard_minimum_cop * (1.0 - min_pass)
144
- check_elems << OpenStudio::Attribute.new('flag', "The high speed COP of #{rated_high_speed_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
147
+ check_elems << OpenStudio::Attribute.new('flag', "The high speed COP of #{rated_high_speed_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
145
148
  elsif rated_high_speed_COP > standard_minimum_cop * (1.0 + max_pass)
146
- check_elems << OpenStudio::Attribute.new('flag', "The high speed COP of #{rated_high_speed_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
149
+ check_elems << OpenStudio::Attribute.new('flag', "The high speed COP of #{rated_high_speed_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
147
150
  end
148
151
  if standard_minimum_cop.nil?
149
152
  check_elems << OpenStudio::Attribute.new('flag', "Can't find target COP for #{component.name}.")
150
153
  elsif rated_low_speed_COP < standard_minimum_cop * (1.0 - min_pass)
151
- check_elems << OpenStudio::Attribute.new('flag', "The low speed COP of #{rated_low_speed_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
154
+ check_elems << OpenStudio::Attribute.new('flag', "The low speed COP of #{rated_low_speed_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
152
155
  elsif rated_low_speed_COP > standard_minimum_cop * (1.0 + max_pass)
153
- check_elems << OpenStudio::Attribute.new('flag', "The low speed COP of #{rated_low_speed_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
156
+ check_elems << OpenStudio::Attribute.new('flag', "The low speed COP of #{rated_low_speed_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
154
157
  end
155
158
  end
156
159
 
@@ -171,9 +174,9 @@ module OsLib_QAQC
171
174
  if standard_minimum_cop.nil?
172
175
  check_elems << OpenStudio::Attribute.new('flag', "Can't find target COP for #{component.name}.")
173
176
  elsif rated_COP < standard_minimum_cop * (1.0 - min_pass)
174
- check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
177
+ check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_cop.round(2)} for #{display_standard}.")
175
178
  elsif rated_COP > standard_minimum_cop * (1.0 + max_pass)
176
- check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_cop.round(2)}. for #{display_standard}")
179
+ check_elems << OpenStudio::Attribute.new('flag', "The COP of #{rated_COP.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_cop.round(2)}. for #{display_standard}")
177
180
  end
178
181
  end
179
182
 
@@ -190,12 +193,14 @@ module OsLib_QAQC
190
193
  end
191
194
 
192
195
  # check actual against target
193
- if standard_minimum_thermal_efficiency.nil?
196
+ if component.autosizedNominalCapacity.get == 0
197
+ check_elems << OpenStudio::Attribute.new('flag', "Boiler named #{component.name} has a capacity of 0.")
198
+ elsif standard_minimum_thermal_efficiency.nil?
194
199
  check_elems << OpenStudio::Attribute.new('flag', "Can't find target thermal efficiency for #{component.name}.")
195
200
  elsif nominal_thermal_efficiency < standard_minimum_thermal_efficiency * (1.0 - min_pass)
196
- check_elems << OpenStudio::Attribute.new('flag', "Nominal thermal efficiency of #{nominal_thermal_efficiency.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_thermal_efficiency.round(2)} for #{display_standard}.")
201
+ check_elems << OpenStudio::Attribute.new('flag', "Nominal thermal efficiency of #{nominal_thermal_efficiency.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_thermal_efficiency.round(2)} for #{display_standard}.")
197
202
  elsif nominal_thermal_efficiency > standard_minimum_thermal_efficiency * (1.0 + max_pass)
198
- check_elems << OpenStudio::Attribute.new('flag', "Nominal thermal efficiency of #{nominal_thermal_efficiency.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_thermal_efficiency.round(2)} for #{display_standard}.")
203
+ check_elems << OpenStudio::Attribute.new('flag', "Nominal thermal efficiency of #{nominal_thermal_efficiency.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_thermal_efficiency.round(2)} for #{display_standard}.")
199
204
  end
200
205
  end
201
206
 
@@ -219,9 +224,9 @@ module OsLib_QAQC
219
224
 
220
225
  # check actual against target
221
226
  if motor_eff < standard_minimum_motor_efficiency_and_size * (1.0 - min_pass)
222
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
227
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
223
228
  elsif motor_eff > standard_minimum_motor_efficiency_and_size * (1.0 + max_pass)
224
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
229
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
225
230
  end
226
231
  end
227
232
 
@@ -244,9 +249,9 @@ module OsLib_QAQC
244
249
 
245
250
  # check actual against target
246
251
  if motor_eff < standard_minimum_motor_efficiency_and_size * (1.0 - min_pass)
247
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
252
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
248
253
  elsif motor_eff > standard_minimum_motor_efficiency_and_size * (1.0 + max_pass)
249
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
254
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
250
255
  end
251
256
  end
252
257
 
@@ -270,9 +275,9 @@ module OsLib_QAQC
270
275
 
271
276
  # check actual against target
272
277
  if motor_eff < standard_minimum_motor_efficiency_and_size * (1.0 - min_pass)
273
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
278
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
274
279
  elsif motor_eff > standard_minimum_motor_efficiency_and_size * (1.0 + max_pass)
275
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
280
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
276
281
  end
277
282
  end
278
283
 
@@ -296,9 +301,9 @@ module OsLib_QAQC
296
301
 
297
302
  # check actual against target
298
303
  if motor_eff < standard_minimum_motor_efficiency_and_size * (1.0 - min_pass)
299
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
304
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{min_pass * 100} % below the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
300
305
  elsif motor_eff > standard_minimum_motor_efficiency_and_size * (1.0 + max_pass)
301
- check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the expected value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
306
+ check_elems << OpenStudio::Attribute.new('flag', "Motor efficiency of #{motor_eff.round(2)} for #{component.name} is more than #{max_pass * 100} % above the value of #{standard_minimum_motor_efficiency_and_size.round(2)} for #{display_standard}.")
302
307
  end
303
308
  end
304
309
 
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -53,12 +53,15 @@ module OsLib_QAQC
53
53
  check_elems << OpenStudio::Attribute.new('name', 'Mechanical System Part Load Efficiency')
54
54
  check_elems << OpenStudio::Attribute.new('category', category)
55
55
  check_elems << OpenStudio::Attribute.new('description', "Check 40% and 80% part load efficency against #{display_standard} for the following compenent types: #{component_type_array.join(', ')}. Checking EIR Function of Part Load Ratio curve for chiller and EIR Function of Flow Fraction for DX coils.")
56
+ check_elems << OpenStudio::Attribute.new('min_pass', min_pass * 100)
57
+ check_elems << OpenStudio::Attribute.new('max_pass', max_pass * 100)
56
58
  # TODO: - add in check for VAV fan
57
59
 
58
60
  # stop here if only name is requested this is used to populate display name for arguments
59
61
  if name_only == true
60
62
  results = []
61
63
  check_elems.each do |elem|
64
+ next if ['Double','Integer'].include? (elem.valueType.valueDescription)
62
65
  results << elem.valueAsString
63
66
  end
64
67
  return results
@@ -143,7 +146,7 @@ module OsLib_QAQC
143
146
 
144
147
  if use_old_gem_code
145
148
  chlr_props = component.model.find_object($os_standards['chillers'], search_criteria, capacity_tons, Date.today)
146
- chlr_props
149
+ else
147
150
  chlr_props = std.model_find_object(std.standards_data['chillers'], search_criteria, capacity_tons, Date.today)
148
151
  end
149
152
  if chlr_props.nil?
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -40,7 +40,7 @@ module OsLib_QAQC
40
40
  def check_mech_sys_type(category, target_standard, name_only = false)
41
41
  # summary of the check
42
42
  check_elems = OpenStudio::AttributeVector.new
43
- check_elems << OpenStudio::Attribute.new('name', 'Mechanical System Type')
43
+ check_elems << OpenStudio::Attribute.new('name', 'Baseline Mechanical System Type')
44
44
  check_elems << OpenStudio::Attribute.new('category', category)
45
45
 
46
46
  # add ASHRAE to display of target standard if includes with 90.1
@@ -49,7 +49,7 @@ module OsLib_QAQC
49
49
  else
50
50
  check_elems << OpenStudio::Attribute.new('description', 'Check against ASHRAE 90.1. Infers the baseline system type based on the equipment serving the zone and their heating/cooling fuels. Only does a high-level inference; does not look for the presence/absence of required controls, etc.')
51
51
  end
52
-
52
+
53
53
  # stop here if only name is requested this is used to populate display name for arguments
54
54
  if name_only == true
55
55
  results = []
@@ -119,7 +119,7 @@ module OsLib_QAQC
119
119
  else
120
120
  if req_sys_type == '' then req_sys_type = 'Unknown' end
121
121
  puts "#{zone.name} baseline system type is incorrect. Supposed to be #{req_sys_type}, but was #{act_sys_type} instead."
122
- check_elems << OpenStudio::Attribute.new('flag', "#{zone.name} baseline system type is incorrect. Supposed to be #{req_sys_type}, but was #{act_sys_type} instead.")
122
+ check_elems << OpenStudio::Attribute.new('flag', "For #{zone.name}, the baseline system type would be #{req_sys_type}; the current system type is #{act_sys_type}.")
123
123
  end
124
124
  end
125
125
  rescue StandardError => e
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -42,60 +42,63 @@ module OsLib_QAQC
42
42
  check_elems = OpenStudio::AttributeVector.new
43
43
  check_elems << OpenStudio::Attribute.new('name', 'Schedules')
44
44
  check_elems << OpenStudio::Attribute.new('category', category)
45
- check_elems << OpenStudio::Attribute.new('description', 'Check schedules for lighting, ventilation, occupant density, plug loads, and equipment based on DOE reference building schedules in terms of full load hours per year.')
45
+
46
+ # update display sttandard
47
+ if target_standard.include?('90.1')
48
+ display_standard = "ASHRAE #{target_standard}"
49
+ else
50
+ display_standard = target_standard
51
+ end
46
52
 
47
53
  # stop here if only name is requested this is used to populate display name for arguments
48
54
  if name_only == true
49
55
  results = []
56
+ check_elems << OpenStudio::Attribute.new('description', 'Check schedules for lighting, ventilation, occupant density, plug loads, and equipment based on DOE reference building schedules in terms of full load hours per year.')
50
57
  check_elems.each do |elem|
51
58
  results << elem.valueAsString
52
59
  end
53
60
  return results
54
61
  end
55
62
 
56
- # Versions of OpenStudio greater than 2.4.0 use a modified version of
57
- # openstudio-standards with different method calls. These methods
58
- # require a "Standard" object instead of the standard being passed into method calls.
59
- # This Standard object is used throughout the QAQC check.
60
- if OpenStudio::VersionString.new(OpenStudio.openStudioVersion) < OpenStudio::VersionString.new('2.4.3')
61
- use_old_gem_code = true
62
- else
63
- use_old_gem_code = false
63
+ begin
64
+
65
+ # setup standard
64
66
  std = Standard.build(target_standard)
65
- end
66
67
 
67
- begin
68
+ # gather building type for summary
69
+ bt_cz = std.model_get_building_climate_zone_and_building_type(@model)
70
+ building_type = bt_cz['building_type']
71
+ # mapping to obuilding type to match space types
72
+ if building_type.include?("Office") then building_type = "Office" end
73
+ climate_zone = bt_cz['climate_zone']
74
+ prototype_prefix = "#{display_standard} #{building_type} #{climate_zone}"
75
+ check_elems << OpenStudio::Attribute.new('description', "Check schedules for lighting, ventilation, occupant density, plug loads, and equipment based on #{prototype_prefix} DOE reference building schedules in terms of full load hours per year.")
76
+ check_elems << OpenStudio::Attribute.new('min_pass', min_pass * 100)
77
+ check_elems << OpenStudio::Attribute.new('max_pass', max_pass * 100)
78
+
79
+ # gather all non statandard space types so can be listed in single flag
80
+ non_tagged_space_types = []
81
+
68
82
  # loop through all space types used in the model
69
83
  @model.getSpaceTypes.each do |space_type|
70
84
  next if space_type.floorArea <= 0
71
85
 
72
86
  # load in standard info for this space type
73
- if use_old_gem_code
74
- data = space_type.get_standards_data(target_standard)
75
- else
76
- data = std.space_type_get_standards_data(space_type)
77
- end
87
+ data = std.space_type_get_standards_data(space_type)
78
88
 
79
89
  if data.nil? || data.empty?
80
90
 
81
91
  # skip if all spaces using this space type are plenums
82
92
  all_spaces_plenums = true
83
93
  space_type.spaces.each do |space|
84
- if use_old_gem_code
85
- if !space.plenum?
86
- all_spaces_plenums = false
87
- next
88
- end
89
- else
90
- if !std.space_plenum?(space)
91
- all_spaces_plenums = false
92
- next
93
- end
94
+ if !std.space_plenum?(space)
95
+ all_spaces_plenums = false
96
+ next
94
97
  end
95
98
  end
96
99
 
97
100
  if !all_spaces_plenums
98
- check_elems << OpenStudio::Attribute.new('flag', "Unexpected standards type for #{space_type.name}, can't validate schedules.")
101
+ non_tagged_space_types << space_type.floorArea
99
102
  end
100
103
 
101
104
  next
@@ -107,22 +110,14 @@ module OsLib_QAQC
107
110
  # check lighting schedules
108
111
  data['lighting_per_area'].nil? ? (target_ip = 0.0) : (target_ip = data['lighting_per_area'])
109
112
  if target_ip.to_f > 0
110
- if use_old_gem_code
111
- schedule_target = model_temp.add_schedule(data['lighting_schedule'])
112
- else
113
- schedule_target = std.model_add_schedule(model_temp, data['lighting_schedule'])
114
- end
113
+ schedule_target = std.model_add_schedule(model_temp, data['lighting_schedule'])
115
114
  if !schedule_target
116
115
  check_elems << OpenStudio::Attribute.new('flag', "Didn't find schedule named #{data['lighting_schedule']} in standards json.")
117
116
  else
118
117
  # loop through and test individual load instances
119
- if use_old_gem_code
120
- target_hrs = schedule_target.annual_equivalent_full_load_hrs
121
- else
122
- target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target)
123
- end
118
+ target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target.to_ScheduleRuleset.get)
124
119
  space_type.lights.each do |load_inst|
125
- inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass)
120
+ inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass, target_standard)
126
121
  if inst_sch_check then check_elems << inst_sch_check end
127
122
  end
128
123
 
@@ -132,23 +127,15 @@ module OsLib_QAQC
132
127
  # check electric equipment schedules
133
128
  data['electric_equipment_per_area'].nil? ? (target_ip = 0.0) : (target_ip = data['electric_equipment_per_area'])
134
129
  if target_ip.to_f > 0
135
- if use_old_gem_code
136
- schedule_target = model_temp.add_schedule(data['electric_equipment_schedule'])
137
- else
138
- schedule_target = std.model_add_schedule(model_temp, data['electric_equipment_schedule'])
139
- end
130
+ schedule_target = std.model_add_schedule(model_temp, data['electric_equipment_schedule'])
140
131
  if !schedule_target
141
132
  check_elems << OpenStudio::Attribute.new('flag', "Didn't find schedule named #{data['electric_equipment_schedule']} in standards json.")
142
133
  else
143
134
  # loop through and test individual load instances
144
- if use_old_gem_code
145
- target_hrs = schedule_target.annual_equivalent_full_load_hrs
146
- else
147
- target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target)
148
- end
135
+ target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target.to_ScheduleRuleset.get)
149
136
 
150
137
  space_type.electricEquipment.each do |load_inst|
151
- inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass)
138
+ inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass, target_standard)
152
139
  if inst_sch_check then check_elems << inst_sch_check end
153
140
  end
154
141
  end
@@ -158,22 +145,14 @@ module OsLib_QAQC
158
145
  # todo - update measure test to with space type to check this
159
146
  data['gas_equipment_per_area'].nil? ? (target_ip = 0.0) : (target_ip = data['gas_equipment_per_area'])
160
147
  if target_ip.to_f > 0
161
- if use_old_gem_code
162
- schedule_target = model_temp.add_schedule(data['gas_equipment_schedule'])
163
- else
164
- schedule_target = std.model_add_schedule(model_temp, data['gas_equipment_schedule'])
165
- end
148
+ schedule_target = std.model_add_schedule(model_temp, data['gas_equipment_schedule'])
166
149
  if !schedule_target
167
150
  check_elems << OpenStudio::Attribute.new('flag', "Didn't find schedule named #{data['gas_equipment_schedule']} in standards json.")
168
151
  else
169
152
  # loop through and test individual load instances
170
- if use_old_gem_code
171
- target_hrs = schedule_target.annual_equivalent_full_load_hrs
172
- else
173
- target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target)
174
- end
153
+ target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target.to_ScheduleRuleset.get)
175
154
  space_type.gasEquipment.each do |load_inst|
176
- inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass)
155
+ inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass, target_standard)
177
156
  if inst_sch_check then check_elems << inst_sch_check end
178
157
  end
179
158
  end
@@ -182,22 +161,14 @@ module OsLib_QAQC
182
161
  # check occupancy schedules
183
162
  data['occupancy_per_area'].nil? ? (target_ip = 0.0) : (target_ip = data['occupancy_per_area'])
184
163
  if target_ip.to_f > 0
185
- if use_old_gem_code
186
- schedule_target = model_temp.add_schedule(data['occupancy_schedule'])
187
- else
188
- schedule_target = std.model_add_schedule(model_temp, data['occupancy_schedule'])
189
- end
164
+ schedule_target = std.model_add_schedule(model_temp, data['occupancy_schedule'])
190
165
  if !schedule_target
191
166
  check_elems << OpenStudio::Attribute.new('flag', "Didn't find schedule named #{data['occupancy_schedule']} in standards json.")
192
167
  else
193
168
  # loop through and test individual load instances
194
- if use_old_gem_code
195
- target_hrs = schedule_target.annual_equivalent_full_load_hrs
196
- else
197
- target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target)
198
- end
169
+ target_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_target.to_ScheduleRuleset.get)
199
170
  space_type.people.each do |load_inst|
200
- inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass)
171
+ inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass, target_standard)
201
172
  if inst_sch_check then check_elems << inst_sch_check end
202
173
  end
203
174
 
@@ -212,7 +183,7 @@ module OsLib_QAQC
212
183
  if oa.outdoorAirFlowRateFractionSchedule.is_initialized
213
184
  # TODO: - update measure test to check this
214
185
  target_hrs = 8760
215
- inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, oa, space_type, check_elems, min_pass, max_pass)
186
+ inst_sch_check = generate_load_insc_sch_check_attribute(target_hrs, oa, space_type, check_elems, min_pass, max_pass, target_standard)
216
187
  if inst_sch_check then check_elems << inst_sch_check end
217
188
  end
218
189
  end
@@ -227,13 +198,16 @@ module OsLib_QAQC
227
198
  # model load for space type where standards doesn't have one wont throw flag about mis-matched schedules
228
199
  end
229
200
 
201
+ # report about non standard space types
202
+ if non_tagged_space_types.size > 0
203
+ impacted_floor_area = non_tagged_space_types.sum
204
+ building_area = @model.getBuilding.floorArea
205
+ check_elems << OpenStudio::Attribute.new('flag', "Unexpected standard building/space types found for #{non_tagged_space_types.size} space types covering #{(100 * impacted_floor_area/building_area).round}% of floor area, can't provide comparisons for schedules for those space types.")
206
+ end
207
+
230
208
  # warn if there are spaces in model that don't use space type unless they appear to be plenums
231
209
  @model.getSpaces.each do |space|
232
- if use_old_gem_code
233
- next if space.plenum?
234
- else
235
- next if std.space_plenum?(space)
236
- end
210
+ next if std.space_plenum?(space)
237
211
  if !space.spaceType.is_initialized
238
212
  check_elems << OpenStudio::Attribute.new('flag', "#{space.name} doesn't have a space type assigned, can't validate schedules.")
239
213
  end
@@ -255,21 +229,19 @@ module OsLib_QAQC
255
229
 
256
230
  # code for each load instance for different load types will pass through here
257
231
  # will return nill or a single attribute
258
- def generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass)
259
- # Versions of OpenStudio greater than 2.4.0 use a modified version of
260
- # openstudio-standards with different method calls. These methods
261
- # require a "Standard" object instead of the standard being passed into method calls.
262
- # This Standard object is used throughout the QAQC check.
263
- if OpenStudio::VersionString.new(OpenStudio.openStudioVersion) < OpenStudio::VersionString.new('2.4.3')
264
- use_old_gem_code = true
265
- else
266
- use_old_gem_code = false
267
- std = Standard.build('90.1-2013')
268
- end
269
-
232
+ def generate_load_insc_sch_check_attribute(target_hrs, load_inst, space_type, check_elems, min_pass, max_pass, target_standard)
270
233
  schedule_inst = nil
271
234
  inst_hrs = nil
272
235
 
236
+ # setup standard
237
+ std = Standard.build(target_standard)
238
+
239
+ # gather building type for summary
240
+ bt_cz = std.model_get_building_climate_zone_and_building_type(@model)
241
+ building_type = bt_cz['building_type']
242
+ climate_zone = bt_cz['climate_zone']
243
+ prototype_prefix = "#{target_standard} #{building_type} #{climate_zone}"
244
+
273
245
  # get schedule
274
246
  if (load_inst.class.to_s == 'OpenStudio::Model::People') && load_inst.numberofPeopleSchedule.is_initialized
275
247
  schedule_inst = load_inst.numberofPeopleSchedule.get
@@ -283,26 +255,18 @@ module OsLib_QAQC
283
255
 
284
256
  # get annual equiv for model schedule
285
257
  if schedule_inst.to_ScheduleRuleset.is_initialized
286
- if use_old_gem_code
287
- inst_hrs = schedule_inst.to_ScheduleRuleset.get.annual_equivalent_full_load_hrs
288
- else
289
- inst_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_inst.to_ScheduleRuleset.get)
290
- end
258
+ inst_hrs = std.schedule_ruleset_annual_equivalent_full_load_hrs(schedule_inst.to_ScheduleRuleset.get)
291
259
  elsif schedule_inst.to_ScheduleConstant.is_initialized
292
- if use_old_gem_code
293
- inst_hrs = schedule_inst.to_ScheduleConstant.get.annual_equivalent_full_load_hrs
294
- else
295
- inst_hrs = std.schedule_constant_annual_equivalent_full_load_hrs(schedule_inst.to_ScheduleConstant.get)
296
- end
260
+ inst_hrs = std.schedule_constant_annual_equivalent_full_load_hrs(schedule_inst.to_ScheduleConstant.get)
297
261
  else
298
262
  return OpenStudio::Attribute.new('flag', "#{schedule_inst.name} isn't a Ruleset or Constant schedule. Can't calculate annual equivalent full load hours.")
299
263
  end
300
264
 
301
265
  # check instance against target
302
266
  if inst_hrs < target_hrs * (1.0 - min_pass)
303
- return OpenStudio::Attribute.new('flag', "#{inst_hrs.round} annual equivalent full load hours for #{schedule_inst.name} in #{space_type.name} is more than #{min_pass * 100} (%) below the typical value of #{target_hrs.round} hours from the DOE Prototype building.")
267
+ return OpenStudio::Attribute.new('flag', "#{inst_hrs.round} annual equivalent full load hours for #{schedule_inst.name} in #{space_type.name} is more than #{min_pass * 100} (%) below the value of #{target_hrs.round} hours from the #{prototype_prefix} DOE Prototype building.")
304
268
  elsif inst_hrs > target_hrs * (1.0 + max_pass)
305
- return OpenStudio::Attribute.new('flag', "#{inst_hrs.round} annual equivalent full load hours for #{schedule_inst.name} in #{space_type.name} is more than #{max_pass * 100} (%) above the typical value of #{target_hrs.round} hours DOE Prototype building.")
269
+ return OpenStudio::Attribute.new('flag', "#{inst_hrs.round} annual equivalent full load hours for #{schedule_inst.name} in #{space_type.name} is more than #{max_pass * 100} (%) above the value of #{target_hrs.round} hours from the #{prototype_prefix} DOE Prototype building.")
306
270
  end
307
271
 
308
272
  # will get to this if no flag was thrown
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -43,11 +43,13 @@ module OsLib_QAQC
43
43
  check_elems << OpenStudio::Attribute.new('name', 'Simultaneous Heating and Cooling')
44
44
  check_elems << OpenStudio::Attribute.new('category', category)
45
45
  check_elems << OpenStudio::Attribute.new('description', 'Check for simultaneous heating and cooling by looping through all Single Duct VAV Reheat Air Terminals and analyzing hourly data when there is a cooling load. ')
46
-
46
+ check_elems << OpenStudio::Attribute.new('max_pass', max_pass * 100)
47
+
47
48
  # stop here if only name is requested this is used to populate display name for arguments
48
49
  if name_only == true
49
50
  results = []
50
51
  check_elems.each do |elem|
52
+ next if ['Double','Integer'].include? (elem.valueType.valueDescription)
51
53
  results << elem.valueAsString
52
54
  end
53
55
  return results
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -50,11 +50,13 @@ module OsLib_QAQC
50
50
  else
51
51
  check_elems << OpenStudio::Attribute.new('description', "Check if fans modeled to ASHRAE 90.1 2013 Section G3.1.2.9 requirements. Compare the supply air temperature for each thermal zone against the thermostat setpoints. Throw flag if temperature difference excedes threshold set by #{@utility_name}.")
52
52
  end
53
-
53
+ check_elems << OpenStudio::Attribute.new('min_pass', max_delta)
54
+
54
55
  # stop here if only name is requested this is used to populate display name for arguments
55
56
  if name_only == true
56
57
  results = []
57
58
  check_elems.each do |elem|
59
+ next if ['Double','Integer'].include? (elem.valueType.valueDescription)
58
60
  results << elem.valueAsString
59
61
  end
60
62
  return results
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met: