openstudio-common-measures 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (387) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test_with_openstudio.yml +62 -0
  3. data/CHANGELOG.md +25 -0
  4. data/LICENSE.md +7 -21
  5. data/README.md +2 -1
  6. data/Rakefile +4 -27
  7. data/doc_templates/LICENSE.md +7 -21
  8. data/doc_templates/copyright_erb.txt +2 -32
  9. data/doc_templates/copyright_js.txt +2 -2
  10. data/doc_templates/copyright_ruby.txt +3 -33
  11. data/lib/measures/AddCostPerAreaToConstruction/LICENSE.md +7 -21
  12. data/lib/measures/AddCostPerAreaToConstruction/measure.rb +2 -32
  13. data/lib/measures/AddCostPerFloorAreaToBuilding/LICENSE.md +7 -21
  14. data/lib/measures/AddCostPerFloorAreaToBuilding/measure.rb +2 -32
  15. data/lib/measures/AddCostPerFloorAreaToElectricEquipment/LICENSE.md +7 -21
  16. data/lib/measures/AddCostPerFloorAreaToElectricEquipment/measure.rb +2 -32
  17. data/lib/measures/AddCostPerFloorAreaToLights/LICENSE.md +7 -21
  18. data/lib/measures/AddCostPerFloorAreaToLights/measure.rb +2 -32
  19. data/lib/measures/AddCostPerFloorAreaUnusedToLights/LICENSE.md +7 -21
  20. data/lib/measures/AddCostPerFloorAreaUnusedToLights/measure.rb +2 -32
  21. data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/LICENSE.md +7 -21
  22. data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/measure.rb +2 -32
  23. data/lib/measures/AddCostperAreatoUnusedConstruction/LICENSE.md +7 -21
  24. data/lib/measures/AddCostperAreatoUnusedConstruction/measure.rb +2 -32
  25. data/lib/measures/AddExteriorLights/LICENSE.md +7 -21
  26. data/lib/measures/AddExteriorLights/measure.rb +2 -32
  27. data/lib/measures/AddMeter/LICENSE.md +7 -21
  28. data/lib/measures/AddMeter/measure.rb +2 -32
  29. data/lib/measures/AddOutputDiagnostics/LICENSE.md +7 -21
  30. data/lib/measures/AddOutputDiagnostics/measure.rb +2 -32
  31. data/lib/measures/AddOutputVariable/LICENSE.md +7 -21
  32. data/lib/measures/AddOutputVariable/measure.rb +2 -32
  33. data/lib/measures/AddSimplePvToShadingSurfacesByType/LICENSE.md +7 -21
  34. data/lib/measures/AddSimplePvToShadingSurfacesByType/measure.rb +2 -32
  35. data/lib/measures/AddThermalComfortModelTypes/LICENSE.md +13 -0
  36. data/lib/measures/AddThermalComfortModelTypes/README.md +115 -0
  37. data/lib/measures/AddThermalComfortModelTypes/README.md.erb +45 -0
  38. data/lib/measures/AddThermalComfortModelTypes/measure.rb +165 -0
  39. data/lib/measures/AddThermalComfortModelTypes/measure.xml +244 -0
  40. data/lib/measures/AdjustSystemEfficiencies/LICENSE.md +7 -21
  41. data/lib/measures/AdjustSystemEfficiencies/measure.rb +2 -32
  42. data/lib/measures/AdjustThermostatSetpointsByDegrees/LICENSE.md +7 -21
  43. data/lib/measures/AdjustThermostatSetpointsByDegrees/measure.rb +2 -32
  44. data/lib/measures/ChangeBuildingLocation/LICENSE.md +7 -21
  45. data/lib/measures/ChangeBuildingLocation/measure.rb +2 -32
  46. data/lib/measures/ChangeBuildingLocation/resources/epw.rb +2 -32
  47. data/lib/measures/ChangeBuildingLocation/resources/stat_file.rb +2 -32
  48. data/lib/measures/EnableIdealAirLoadsForAllZones/LICENSE.md +7 -21
  49. data/lib/measures/EnableIdealAirLoadsForAllZones/measure.rb +2 -32
  50. data/lib/measures/ExportScheduleCSV/LICENSE.md +7 -21
  51. data/lib/measures/ExportScheduleCSV/measure.rb +2 -32
  52. data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/LICENSE.md +7 -21
  53. data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/measure.rb +2 -32
  54. data/lib/measures/MeterFlodPlot/LICENSE.md +7 -21
  55. data/lib/measures/MeterFlodPlot/measure.rb +2 -32
  56. data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/LICENSE.md +7 -21
  57. data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/measure.rb +2 -32
  58. data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/LICENSE.md +7 -21
  59. data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/measure.rb +2 -32
  60. data/lib/measures/PredictedMeanVote/LICENSE.md +7 -21
  61. data/lib/measures/PredictedMeanVote/measure.rb +2 -32
  62. data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/LICENSE.md +7 -21
  63. data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/measure.rb +2 -32
  64. data/lib/measures/RemoveUnusedDefaultProfiles/LICENSE.md +7 -21
  65. data/lib/measures/RemoveUnusedDefaultProfiles/measure.rb +2 -32
  66. data/lib/measures/ReplaceExteriorWindowConstruction/LICENSE.md +7 -21
  67. data/lib/measures/ReplaceExteriorWindowConstruction/measure.rb +2 -32
  68. data/lib/measures/ReplaceModel/LICENSE.md +13 -0
  69. data/lib/measures/ReplaceModel/README.md +34 -0
  70. data/lib/measures/ReplaceModel/README.md.erb +42 -0
  71. data/lib/measures/ReplaceModel/measure.rb +113 -0
  72. data/lib/measures/ReplaceModel/measure.xml +71 -0
  73. data/lib/measures/ReplaceThermostatSchedules/LICENSE.md +7 -21
  74. data/lib/measures/ReplaceThermostatSchedules/measure.rb +2 -32
  75. data/lib/measures/ReportModelChanges/LICENSE.md +7 -21
  76. data/lib/measures/ReportModelChanges/measure.rb +2 -32
  77. data/lib/measures/ReportModelChanges/measure.xml +2 -2
  78. data/lib/measures/RunPeriod/LICENSE.md +7 -21
  79. data/lib/measures/RunPeriod/measure.rb +2 -32
  80. data/lib/measures/RunPeriodMultiple/LICENSE.md +7 -21
  81. data/lib/measures/RunPeriodMultiple/measure.rb +2 -32
  82. data/lib/measures/ServerDirectoryCleanup/LICENSE.md +7 -21
  83. data/lib/measures/ServerDirectoryCleanup/measure.rb +2 -32
  84. data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/LICENSE.md +7 -21
  85. data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/measure.rb +2 -32
  86. data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/LICENSE.md +7 -21
  87. data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/measure.rb +2 -32
  88. data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/LICENSE.md +7 -21
  89. data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/measure.rb +2 -32
  90. data/lib/measures/SetEnergyPlusLightObjectsLPD/LICENSE.md +7 -21
  91. data/lib/measures/SetEnergyPlusLightObjectsLPD/measure.rb +2 -32
  92. data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/LICENSE.md +7 -21
  93. data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/measure.rb +2 -32
  94. data/lib/measures/SetGasBurnerEfficiency/LICENSE.md +7 -21
  95. data/lib/measures/SetGasBurnerEfficiency/measure.rb +2 -32
  96. data/lib/measures/SetLifecycleCostParameters/LICENSE.md +7 -21
  97. data/lib/measures/SetLifecycleCostParameters/measure.rb +2 -32
  98. data/lib/measures/SetLightingLoadsByLPD/LICENSE.md +7 -21
  99. data/lib/measures/SetLightingLoadsByLPD/measure.rb +2 -32
  100. data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/LICENSE.md +7 -21
  101. data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/measure.rb +2 -32
  102. data/lib/measures/SetThermostatSchedules/LICENSE.md +7 -21
  103. data/lib/measures/SetThermostatSchedules/measure.rb +2 -32
  104. data/lib/measures/ShiftScheduleProfileTime/LICENSE.md +7 -21
  105. data/lib/measures/ShiftScheduleProfileTime/measure.rb +2 -32
  106. data/lib/measures/SwapLightsDefinition/LICENSE.md +7 -21
  107. data/lib/measures/SwapLightsDefinition/measure.rb +2 -32
  108. data/lib/measures/UnmetLoadHoursTroubleshooting/LICENSE.md +7 -21
  109. data/lib/measures/UnmetLoadHoursTroubleshooting/measure.rb +2 -32
  110. data/lib/measures/VentilationQAQC/LICENSE.md +7 -21
  111. data/lib/measures/VentilationQAQC/measure.rb +2 -32
  112. data/lib/measures/XcelEDAReportingandQAQC/LICENSE.md +13 -0
  113. data/lib/measures/XcelEDAReportingandQAQC/README.md +26 -0
  114. data/lib/measures/XcelEDAReportingandQAQC/README.md.erb +42 -0
  115. data/lib/measures/XcelEDAReportingandQAQC/measure.rb +201 -0
  116. data/lib/measures/XcelEDAReportingandQAQC/measure.xml +116 -0
  117. data/lib/measures/{generic_qaqc → XcelEDAReportingandQAQC}/resources/CreateResults.rb +51 -50
  118. data/lib/measures/XcelEDAReportingandQAQC/resources/EUI.rb +53 -0
  119. data/lib/measures/XcelEDAReportingandQAQC/resources/EndUseBreakdown.rb +88 -0
  120. data/lib/measures/XcelEDAReportingandQAQC/resources/FuelSwap.rb +275 -0
  121. data/lib/measures/XcelEDAReportingandQAQC/resources/PeakHeatCoolMonth.rb +191 -0
  122. data/lib/measures/XcelEDAReportingandQAQC/resources/UnmetHrs.rb +45 -0
  123. data/lib/measures/XcelEDATariffSelectionandModelSetup/LICENSE.md +13 -0
  124. data/lib/measures/XcelEDATariffSelectionandModelSetup/README.md +40 -0
  125. data/lib/measures/XcelEDATariffSelectionandModelSetup/README.md.erb +42 -0
  126. data/lib/measures/XcelEDATariffSelectionandModelSetup/measure.rb +367 -0
  127. data/lib/measures/XcelEDATariffSelectionandModelSetup/measure.xml +309 -0
  128. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Commercial.idf +95 -0
  129. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Interruptible Industrial G.idf +32 -0
  130. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Large CG.idf +32 -0
  131. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Commercial.idf +95 -0
  132. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Gas Firm.idf +32 -0
  133. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Gas Interruptible.idf +32 -0
  134. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Primary General.idf +95 -0
  135. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Secondary General Low Load Factor.idf +95 -0
  136. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Secondary General.idf +95 -0
  137. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Non-Xcel Transmission General.idf +95 -0
  138. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Primary General.idf +95 -0
  139. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Residential Gas.idf +32 -0
  140. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Residential General.idf +95 -0
  141. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Secondary General Low Load Factor.idf +95 -0
  142. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Secondary General.idf +95 -0
  143. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Secondary Photovoltaic Time-of-Use.idf +95 -0
  144. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Small CG.idf +32 -0
  145. data/lib/measures/XcelEDATariffSelectionandModelSetup/resources/Transmission General.idf +95 -0
  146. data/lib/measures/ZoneReport/LICENSE.md +7 -21
  147. data/lib/measures/ZoneReport/measure.rb +2 -32
  148. data/lib/measures/add_ems_emissions_reporting/LICENSE.md +7 -21
  149. data/lib/measures/add_ems_emissions_reporting/measure.rb +2 -32
  150. data/lib/measures/add_ems_to_control_ev_charging/LICENSE.md +7 -21
  151. data/lib/measures/add_ems_to_control_ev_charging/measure.rb +2 -32
  152. data/lib/measures/add_ev_load/LICENSE.md +7 -21
  153. data/lib/measures/add_ev_load/measure.rb +2 -32
  154. data/lib/measures/add_rooftop_pv/LICENSE.md +7 -21
  155. data/lib/measures/add_rooftop_pv/measure.rb +2 -32
  156. data/lib/measures/add_zone_mixing_object/LICENSE.md +7 -21
  157. data/lib/measures/add_zone_mixing_object/measure.rb +2 -32
  158. data/lib/measures/add_zone_ventilation_design_flow_rate_object/LICENSE.md +7 -21
  159. data/lib/measures/add_zone_ventilation_design_flow_rate_object/measure.rb +2 -32
  160. data/lib/measures/air_wall_zone_mixing/LICENSE.md +7 -21
  161. data/lib/measures/air_wall_zone_mixing/measure.rb +2 -32
  162. data/lib/measures/create_csv_output/LICENSE.md +13 -0
  163. data/lib/measures/create_csv_output/README.md +36 -0
  164. data/lib/measures/create_csv_output/README.md.erb +45 -0
  165. data/lib/measures/create_csv_output/docs/.gitkeep +0 -0
  166. data/lib/measures/create_csv_output/measure.rb +235 -0
  167. data/lib/measures/create_csv_output/measure.xml +124 -0
  168. data/lib/measures/create_csv_output/resources/report.html.in +13 -0
  169. data/lib/measures/envelope_and_internal_load_breakdown/LICENSE.md +7 -21
  170. data/lib/measures/envelope_and_internal_load_breakdown/measure.rb +2 -32
  171. data/lib/measures/envelope_and_internal_load_breakdown/resources/os_lib_reporting_envelope_and_internal_loads_breakdown.rb +2 -32
  172. data/lib/measures/envelope_and_internal_load_breakdown/resources/report.html.erb +6 -32
  173. data/lib/measures/example_report/LICENSE.md +7 -21
  174. data/lib/measures/example_report/measure.rb +2 -32
  175. data/lib/measures/example_report/resources/os_lib_reporting_example.rb +2 -32
  176. data/lib/measures/example_report/resources/report.html.erb +6 -32
  177. data/lib/measures/gem_env_report/LICENSE.md +7 -21
  178. data/lib/measures/gem_env_report/measure.rb +2 -32
  179. data/lib/measures/gem_env_report/resources/gem_env_info.rb +2 -32
  180. data/lib/measures/gem_env_report/resources/openstudio_info.rb +2 -32
  181. data/lib/measures/gem_env_report/resources/run_gem_env_info.rb +2 -32
  182. data/lib/measures/gem_env_report/resources/run_openstudio_info.rb +2 -32
  183. data/lib/measures/generic_qaqc/LICENSE.md +7 -21
  184. data/lib/measures/generic_qaqc/measure.rb +2 -32
  185. data/lib/measures/generic_qaqc/measure.xml +8 -14
  186. data/lib/measures/generic_qaqc/resources/check_air_sys_temps.rb +2 -32
  187. data/lib/measures/generic_qaqc/resources/check_calibration.rb +2 -32
  188. data/lib/measures/generic_qaqc/resources/check_cond_zns.rb +2 -32
  189. data/lib/measures/generic_qaqc/resources/check_domestic_hot_water.rb +2 -32
  190. data/lib/measures/generic_qaqc/resources/check_envelope_conductance.rb +2 -32
  191. data/lib/measures/generic_qaqc/resources/check_eui_by_end_use.rb +2 -32
  192. data/lib/measures/generic_qaqc/resources/check_eui_reasonableness.rb +2 -32
  193. data/lib/measures/generic_qaqc/resources/check_fan_pwr.rb +2 -32
  194. data/lib/measures/generic_qaqc/resources/check_internal_loads.rb +2 -32
  195. data/lib/measures/generic_qaqc/resources/check_mech_sys_capacity.rb +2 -32
  196. data/lib/measures/generic_qaqc/resources/check_mech_sys_efficiency.rb +2 -32
  197. data/lib/measures/generic_qaqc/resources/check_mech_sys_part_load_eff.rb +2 -32
  198. data/lib/measures/generic_qaqc/resources/check_mech_sys_type.rb +2 -32
  199. data/lib/measures/generic_qaqc/resources/check_part_loads.rb +2 -32
  200. data/lib/measures/generic_qaqc/resources/check_placeholder.rb +2 -32
  201. data/lib/measures/generic_qaqc/resources/check_plant_cap.rb +2 -32
  202. data/lib/measures/generic_qaqc/resources/check_plant_temps.rb +2 -32
  203. data/lib/measures/generic_qaqc/resources/check_plenum_loads.rb +2 -32
  204. data/lib/measures/generic_qaqc/resources/check_pump_pwr.rb +2 -32
  205. data/lib/measures/generic_qaqc/resources/check_sch_coord.rb +2 -32
  206. data/lib/measures/generic_qaqc/resources/check_schedules.rb +2 -32
  207. data/lib/measures/generic_qaqc/resources/check_simultaneous_heating_and_cooling.rb +2 -32
  208. data/lib/measures/generic_qaqc/resources/check_supply_air_and_thermostat_temp_difference.rb +2 -32
  209. data/lib/measures/generic_qaqc/resources/check_weather_files.rb +2 -32
  210. data/lib/measures/generic_qaqc/resources/os_lib_reporting_qaqc.rb +2 -32
  211. data/lib/measures/generic_qaqc/resources/report.html.erb +6 -32
  212. data/lib/measures/get_site_from_building_component_library/LICENSE.md +7 -21
  213. data/lib/measures/get_site_from_building_component_library/measure.rb +2 -32
  214. data/lib/measures/hvac_psychrometric_chart/LICENSE.md +7 -21
  215. data/lib/measures/hvac_psychrometric_chart/measure.rb +2 -32
  216. data/lib/measures/hvac_psychrometric_chart/resources/report.html.erb +6 -32
  217. data/lib/measures/inject_idf_objects/LICENSE.md +7 -21
  218. data/lib/measures/inject_idf_objects/measure.rb +2 -32
  219. data/lib/measures/openstudio_results/LICENSE.md +7 -21
  220. data/lib/measures/openstudio_results/measure.rb +2 -32
  221. data/lib/measures/openstudio_results/resources/Siz.AirConditionerVariableRefrigerantFlow.rb +2 -32
  222. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVAC.rb +2 -32
  223. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.rb +2 -32
  224. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitaryHeatPumpAirToAir.rb +2 -32
  225. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.rb +2 -32
  226. data/lib/measures/openstudio_results/resources/Siz.AirLoopHVACUnitarySystem.rb +2 -32
  227. data/lib/measures/openstudio_results/resources/Siz.AirTerminalDualDuctVAV.rb +2 -32
  228. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctConstantVolumeCooledBeam.rb +2 -32
  229. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctConstantVolumeFourPipeInduction.rb +2 -32
  230. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctConstantVolumeReheat.rb +2 -32
  231. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctParallelPIUReheat.rb +2 -32
  232. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctSeriesPIUReheat.rb +2 -32
  233. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctUncontrolled.rb +2 -32
  234. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVHeatAndCoolNoReheat.rb +2 -32
  235. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVHeatAndCoolReheat.rb +2 -32
  236. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVNoReheat.rb +2 -32
  237. data/lib/measures/openstudio_results/resources/Siz.AirTerminalSingleDuctVAVReheat.rb +2 -32
  238. data/lib/measures/openstudio_results/resources/Siz.BoilerHotWater.rb +2 -32
  239. data/lib/measures/openstudio_results/resources/Siz.BoilerSteam.rb +2 -32
  240. data/lib/measures/openstudio_results/resources/Siz.ChillerAbsorption.rb +2 -32
  241. data/lib/measures/openstudio_results/resources/Siz.ChillerAbsorptionIndirect.rb +2 -32
  242. data/lib/measures/openstudio_results/resources/Siz.ChillerElectricEIR.rb +2 -32
  243. data/lib/measures/openstudio_results/resources/Siz.ChillerHeaterPerformanceElectricEIR.rb +2 -32
  244. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXMultiSpeed.rb +2 -32
  245. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXMultiSpeedStageData.rb +2 -32
  246. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXSingleSpeed.rb +2 -32
  247. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXTwoSpeed.rb +2 -32
  248. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXTwoStageWithHumidityControlMode.rb +2 -32
  249. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXVariableRefrigerantFlow.rb +2 -32
  250. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXVariableSpeed.rb +2 -32
  251. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingDXVariableSpeedSpeedData.rb +2 -32
  252. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingLowTempRadiantVarFlow.rb +2 -32
  253. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWater.rb +2 -32
  254. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWaterToAirHeatPumpEquationFit.rb +2 -32
  255. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit.rb +2 -32
  256. data/lib/measures/openstudio_results/resources/Siz.CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.rb +2 -32
  257. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXMultiSpeed.rb +2 -32
  258. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXMultiSpeedStageData.rb +2 -32
  259. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXSingleSpeed.rb +2 -32
  260. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXVariableRefrigerantFlow.rb +2 -32
  261. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXVariableSpeed.rb +2 -32
  262. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDXVariableSpeedSpeedData.rb +2 -32
  263. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingDesuperheater.rb +2 -32
  264. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingElectric.rb +2 -32
  265. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingGas.rb +2 -32
  266. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingGasMultiStage.rb +2 -32
  267. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingGasMultiStageStageData.rb +2 -32
  268. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingLowTempRadiantVarFlow.rb +2 -32
  269. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWater.rb +2 -32
  270. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterBaseboard.rb +2 -32
  271. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterBaseboardRadiant.rb +2 -32
  272. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -32
  273. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFit.rb +2 -32
  274. data/lib/measures/openstudio_results/resources/Siz.CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.rb +2 -32
  275. data/lib/measures/openstudio_results/resources/Siz.CoilPerformanceDXCooling.rb +2 -32
  276. data/lib/measures/openstudio_results/resources/Siz.CoilSystemCoolingDXHeatExchangerAssisted.rb +2 -32
  277. data/lib/measures/openstudio_results/resources/Siz.CoilSystemCoolingWaterHeatExchangerAssisted.rb +2 -32
  278. data/lib/measures/openstudio_results/resources/Siz.CoilWaterHeatingAirToWaterHeatPump.rb +2 -32
  279. data/lib/measures/openstudio_results/resources/Siz.CoilWaterHeatingAirToWaterHeatPumpWrapped.rb +2 -32
  280. data/lib/measures/openstudio_results/resources/Siz.CoilWaterHeatingDesuperheater.rb +2 -32
  281. data/lib/measures/openstudio_results/resources/Siz.ControllerOutdoorAir.rb +2 -32
  282. data/lib/measures/openstudio_results/resources/Siz.CoolingTowerSingleSpeed.rb +2 -32
  283. data/lib/measures/openstudio_results/resources/Siz.CoolingTowerTwoSpeed.rb +2 -32
  284. data/lib/measures/openstudio_results/resources/Siz.CoolingTowerVariableSpeed.rb +2 -32
  285. data/lib/measures/openstudio_results/resources/Siz.DistrictCooling.rb +2 -32
  286. data/lib/measures/openstudio_results/resources/Siz.DistrictHeating.rb +2 -32
  287. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterInverterLookUpTable.rb +2 -32
  288. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterInverterSimple.rb +2 -32
  289. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterStorageConverter.rb +2 -32
  290. data/lib/measures/openstudio_results/resources/Siz.ElectricLoadCenterStorageSimple.rb +2 -32
  291. data/lib/measures/openstudio_results/resources/Siz.EvaporativeCoolerDirectResearchSpecial.rb +2 -32
  292. data/lib/measures/openstudio_results/resources/Siz.EvaporativeCoolerIndirectResearchSpecial.rb +2 -32
  293. data/lib/measures/openstudio_results/resources/Siz.EvaporativeFluidCoolerSingleSpeed.rb +2 -32
  294. data/lib/measures/openstudio_results/resources/Siz.EvaporativeFluidCoolerTwoSpeed.rb +2 -32
  295. data/lib/measures/openstudio_results/resources/Siz.FanConstantVolume.rb +2 -32
  296. data/lib/measures/openstudio_results/resources/Siz.FanOnOff.rb +2 -32
  297. data/lib/measures/openstudio_results/resources/Siz.FanVariableVolume.rb +2 -32
  298. data/lib/measures/openstudio_results/resources/Siz.FanZoneExhaust.rb +2 -32
  299. data/lib/measures/openstudio_results/resources/Siz.FluidCoolerSingleSpeed.rb +2 -32
  300. data/lib/measures/openstudio_results/resources/Siz.FluidCoolerTwoSpeed.rb +2 -32
  301. data/lib/measures/openstudio_results/resources/Siz.GeneratorFuelCellElectricalStorage.rb +2 -32
  302. data/lib/measures/openstudio_results/resources/Siz.GeneratorFuelCellInverter.rb +2 -32
  303. data/lib/measures/openstudio_results/resources/Siz.GeneratorFuelCellPowerModule.rb +2 -32
  304. data/lib/measures/openstudio_results/resources/Siz.GeneratorMicroTurbine.rb +2 -32
  305. data/lib/measures/openstudio_results/resources/Siz.GeneratorMicroTurbineHeatRecovery.rb +2 -32
  306. data/lib/measures/openstudio_results/resources/Siz.HVACComponent.rb +2 -32
  307. data/lib/measures/openstudio_results/resources/Siz.HeaderedPumpsConstantSpeed.rb +2 -32
  308. data/lib/measures/openstudio_results/resources/Siz.HeaderedPumpsVariableSpeed.rb +2 -32
  309. data/lib/measures/openstudio_results/resources/Siz.HeatExchangerAirToAirSensibleAndLatent.rb +2 -32
  310. data/lib/measures/openstudio_results/resources/Siz.HeatExchangerFluidToFluid.rb +2 -32
  311. data/lib/measures/openstudio_results/resources/Siz.HeatPumpWaterToWaterEquationFitCooling.rb +2 -32
  312. data/lib/measures/openstudio_results/resources/Siz.HeatPumpWaterToWaterEquationFitHeating.rb +2 -32
  313. data/lib/measures/openstudio_results/resources/Siz.HumidifierSteamElectric.rb +2 -32
  314. data/lib/measures/openstudio_results/resources/Siz.Model.rb +2 -32
  315. data/lib/measures/openstudio_results/resources/Siz.ModelObject.rb +2 -32
  316. data/lib/measures/openstudio_results/resources/Siz.PhotovoltaicPerformanceSimple.rb +2 -32
  317. data/lib/measures/openstudio_results/resources/Siz.PlantComponentTemperatureSource.rb +2 -32
  318. data/lib/measures/openstudio_results/resources/Siz.PlantLoop.rb +2 -32
  319. data/lib/measures/openstudio_results/resources/Siz.PumpConstantSpeed.rb +2 -32
  320. data/lib/measures/openstudio_results/resources/Siz.PumpVariableSpeed.rb +2 -32
  321. data/lib/measures/openstudio_results/resources/Siz.RefrigerationSecondarySystem.rb +2 -32
  322. data/lib/measures/openstudio_results/resources/Siz.RefrigerationSystem.rb +2 -32
  323. data/lib/measures/openstudio_results/resources/Siz.RefrigerationTranscriticalSystem.rb +2 -32
  324. data/lib/measures/openstudio_results/resources/Siz.SizingSystem.rb +2 -32
  325. data/lib/measures/openstudio_results/resources/Siz.SolarCollectorFlatPlatePhotovoltaicThermal.rb +2 -32
  326. data/lib/measures/openstudio_results/resources/Siz.SolarCollectorPerformancePhotovoltaicThermalSimple.rb +2 -32
  327. data/lib/measures/openstudio_results/resources/Siz.ThermalStorageChilledWaterStratified.rb +2 -32
  328. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterHeatPump.rb +2 -32
  329. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterHeatPumpWrappedCondenser.rb +2 -32
  330. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterMixed.rb +2 -32
  331. data/lib/measures/openstudio_results/resources/Siz.WaterHeaterStratified.rb +2 -32
  332. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardConvectiveElectric.rb +2 -32
  333. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardConvectiveWater.rb +2 -32
  334. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardRadiantConvectiveElectric.rb +2 -32
  335. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACBaseboardRadiantConvectiveWater.rb +2 -32
  336. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACEnergyRecoveryVentilator.rb +2 -32
  337. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACFourPipeFanCoil.rb +2 -32
  338. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACHighTemperatureRadiant.rb +2 -32
  339. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACIdealLoadsAirSystem.rb +2 -32
  340. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACLowTempRadiantConstFlow.rb +2 -32
  341. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACLowTempRadiantVarFlow.rb +2 -32
  342. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACPackagedTerminalAirConditioner.rb +2 -32
  343. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACPackagedTerminalHeatPump.rb +2 -32
  344. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +2 -32
  345. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACUnitHeater.rb +2 -32
  346. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACUnitVentilator.rb +2 -32
  347. data/lib/measures/openstudio_results/resources/Siz.ZoneHVACWaterToAirHeatPump.rb +2 -32
  348. data/lib/measures/openstudio_results/resources/Siz.ZoneVentilationDesignFlowRate.rb +2 -32
  349. data/lib/measures/openstudio_results/resources/os_lib_reporting.rb +2 -32
  350. data/lib/measures/openstudio_results/resources/report.html.erb +6 -32
  351. data/lib/measures/remove_orphan_objects_and_unused_resources/LICENSE.md +7 -21
  352. data/lib/measures/remove_orphan_objects_and_unused_resources/measure.rb +12 -50
  353. data/lib/measures/remove_orphan_objects_and_unused_resources/measure.xml +9 -9
  354. data/lib/measures/set_electric_equipment_loads_by_epd/LICENSE.md +7 -21
  355. data/lib/measures/set_electric_equipment_loads_by_epd/measure.rb +2 -32
  356. data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/LICENSE.md +7 -21
  357. data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/measure.rb +2 -32
  358. data/lib/measures/set_run_period/LICENSE.md +7 -21
  359. data/lib/measures/set_run_period/measure.rb +2 -32
  360. data/lib/measures/set_run_period/measure.xml +2 -2
  361. data/lib/measures/set_space_infiltration_per_exterior_area/LICENSE.md +7 -21
  362. data/lib/measures/set_space_infiltration_per_exterior_area/measure.rb +2 -32
  363. data/lib/measures/shadow_calculation/LICENSE.md +13 -0
  364. data/lib/measures/shadow_calculation/README.md +80 -0
  365. data/lib/measures/shadow_calculation/README.md.erb +42 -0
  366. data/lib/measures/shadow_calculation/measure.rb +188 -0
  367. data/lib/measures/shadow_calculation/measure.xml +180 -0
  368. data/lib/measures/tariff_selection_block/LICENSE.md +7 -21
  369. data/lib/measures/tariff_selection_block/measure.rb +2 -32
  370. data/lib/measures/tariff_selection_flat/LICENSE.md +7 -21
  371. data/lib/measures/tariff_selection_flat/measure.rb +2 -32
  372. data/lib/measures/tariff_selection_generic/LICENSE.md +7 -21
  373. data/lib/measures/tariff_selection_generic/measure.rb +2 -32
  374. data/lib/measures/tariff_selection_time_and_date_dependant/LICENSE.md +7 -21
  375. data/lib/measures/tariff_selection_time_and_date_dependant/measure.rb +2 -32
  376. data/lib/measures/view_data/LICENSE.md +7 -21
  377. data/lib/measures/view_data/measure.rb +2 -32
  378. data/lib/measures/view_data/resources/va3c.rb +2 -32
  379. data/lib/measures/view_model/LICENSE.md +7 -21
  380. data/lib/measures/view_model/measure.rb +2 -32
  381. data/lib/measures/view_model/resources/va3c.rb +2 -32
  382. data/lib/openstudio/common_measures/extension.rb +2 -32
  383. data/lib/openstudio/common_measures/version.rb +3 -33
  384. data/lib/openstudio/common_measures.rb +2 -32
  385. data/lib/openstudio-common-measures.rb +2 -32
  386. data/openstudio-common-measures.gemspec +2 -2
  387. metadata +69 -8
@@ -0,0 +1,275 @@
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://openstudio.net/license
4
+ # *******************************************************************************
5
+
6
+ # what does xcel want to call water-to-water heat pump - Drew -> electric
7
+ # don't forget absorbtion powered chillers eventually
8
+ # what about service water heating? you can have non-connected boilers -> try to pick up changes in boilers
9
+ # preheat and precool coils on OA system
10
+ # not considered fuel switching if going from no fuel -> some fuel
11
+
12
+ # heating & cooling primary fuel swap
13
+ def heat_cool_fuel_swap_check(base_model, base_sql, prop_model, prop_sql)
14
+ heat_cool_fuel_swap_check = Check.new
15
+ heat_cool_fuel_swap_check.name = 'Fuel Swap Check'
16
+ heat_cool_fuel_swap_check.category = 'Xcel EDA'
17
+ heat_cool_fuel_swap_check.description = 'Check that the baseline and the design alternative use the same fuels.'
18
+ # make a hash to hold the results
19
+ zone_fuels = Hash.new { |h, k| h[k] = {} }
20
+ # get the zones from both models
21
+ baseline_zones = base_model.getThermalZones
22
+ proposed_zones = prop_model.getThermalZones
23
+ # get zone names from both models. will be used as basis of fuel comparison
24
+ baseline_zone_names = []
25
+ proposed_zone_names = []
26
+ # make arrays of the zone names from each model
27
+ baseline_zones.each do |baseline_zone|
28
+ baseline_zone_names << baseline_zone.name.get
29
+ end
30
+ proposed_zones.each do |proposed_zone|
31
+ proposed_zone_names << proposed_zone.name.get
32
+ end
33
+ # output the sorted zone name lists
34
+ debug_puts('**baseline**')
35
+ debug_puts(baseline_zone_names.sort)
36
+ debug_puts('**proposed**')
37
+ debug_puts(proposed_zone_names.sort)
38
+
39
+ # check the heating fuel type of a plant loop
40
+ def plant_loop_heating_fuel(plant_loop)
41
+ debug_puts(" looking for plant loop heating fuel for #{plant_loop.name}")
42
+ # create an array to hold all the heating fuels on the plant loop
43
+ plant_loop_heating_fuels = []
44
+ # loop throug all the supply components and check heating fuel for each one
45
+ plant_loop.supplyComponents.each do |supply_component|
46
+ if supply_component.to_DistrictHeating.empty? == false
47
+ plant_loop_heating_fuels << 'District Heating'
48
+ elsif supply_component.to_BoilerHotWater.empty? == false
49
+ boiler_hot_water = supply_component.to_BoilerHotWater.get
50
+ plant_loop_heating_fuels << boiler_hot_water.fuelType
51
+ end
52
+ end
53
+ return plant_loop_heating_fuels.uniq
54
+ end
55
+
56
+ # check the cooling fuel type of a plant loop
57
+ def plant_loop_cooling_fuel(plant_loop)
58
+ debug_puts(" looking for plant loop heating fuel for #{plant_loop.name}")
59
+ # create an array to hold all the heating fuels on the plant loop
60
+ plant_loop_cooling_fuels = []
61
+ # loop throug all the supply components and check heating fuel for each one
62
+ plant_loop.supplyComponents.each do |supply_component|
63
+ if supply_component.to_DistrictCooling.empty? == false
64
+ plant_loop_cooling_fuels << 'District Cooling'
65
+ elsif supply_component.to_ChillerElectricEIR.empty? == false
66
+ plant_loop_cooling_fuels << 'Electricity'
67
+ end
68
+ end
69
+ return plant_loop_cooling_fuels.uniq
70
+ end
71
+
72
+ # check the heating fuel type of a reheat terminal
73
+ def reheat_terminal_heating_fuel(reheat_terminal)
74
+ debug_puts(" looking for reheat terminal heating fuel for #{reheat_terminal.name}")
75
+ # create an array to hold all the heating fuels in the terminal
76
+ reheat_terminal_heating_fuels = []
77
+ # get the reheat coil
78
+ heating_coil = reheat_terminal.reheatCoil
79
+ if heating_coil.to_CoilHeatingDXSingleSpeed.empty? == false
80
+ reheat_terminal_heating_fuels += get_heating_coil_heating_fuel(heating_coil)
81
+ elsif heating_coil.to_CoilHeatingElectric.empty? == false
82
+ reheat_terminal_heating_fuels += get_heating_coil_heating_fuel(heating_coil)
83
+ elsif heating_coil.to_CoilHeatingGas.empty? == false
84
+ reheat_terminal_heating_fuels += get_heating_coil_heating_fuel(heating_coil)
85
+ elsif heating_coil.to_CoilHeatingWater.empty? == false
86
+ reheat_terminal_heating_fuels += get_heating_coil_heating_fuel(heating_coil)
87
+ end
88
+ return reheat_terminal_heating_fuels.uniq
89
+ end
90
+
91
+ # check the heating fuel type of a heating coil
92
+ def get_heating_coil_heating_fuel(heating_coil)
93
+ debug_puts(" looking for heating coil heating fuel for #{heating_coil.name}")
94
+ # create an array to hold all the heating fuels in the terminal
95
+ heating_coil_heating_fuels = []
96
+ # get the reheat coil
97
+ if heating_coil.to_CoilHeatingDXSingleSpeed.empty? == false
98
+ heating_coil_heating_fuels << 'Electricity'
99
+ elsif heating_coil.to_CoilHeatingElectric.empty? == false
100
+ heating_coil_heating_fuels << 'Electricity'
101
+ elsif heating_coil.to_CoilHeatingGas.empty? == false
102
+ heating_coil_heating_fuels << 'Natural Gas'
103
+ elsif heating_coil.to_CoilHeatingWater.empty? == false
104
+ # need to check what the heating fuel for the plant loop is
105
+ heating_coil = heating_coil.to_CoilHeatingWater.get
106
+ plant_loop = heating_coil.plantLoop.get
107
+ reheat_coil_fuels = plant_loop_heating_fuel(plant_loop)
108
+ heating_coil_heating_fuels += reheat_coil_fuels
109
+ end
110
+ return heating_coil_heating_fuels
111
+ end
112
+
113
+ # check the cooling fuel type of a cooling coil
114
+ def get_cooling_coil_cooling_fuel(cooling_coil)
115
+ debug_puts(" looking for cooling coil cooling fuel for #{cooling_coil.name}")
116
+ # create an array to hold all the heating fuels in the terminal
117
+ cooling_coil_cooling_fuels = []
118
+ if cooling_coil.to_CoilCoolingDXSingleSpeed.empty? == false
119
+ cooling_coil_cooling_fuels << 'Electricity'
120
+ elsif cooling_coil.to_CoilCoolingDXTwoSpeed.empty? == false
121
+ cooling_coil_cooling_fuels << 'Electricity'
122
+ elsif cooling_coil.to_EvaporativeCoolerDirectResearchSpecial.empty? == false
123
+ cooling_coil_cooling_fuels << 'Electricity'
124
+ elsif cooling_coil.to_CoilCoolingWater.empty? == false
125
+ # need to check what the cooling fuel for the plant loop is
126
+ cooling_coil = cooling_coil.to_CoilCoolingWater.get
127
+ plant_loop = cooling_coil.plantLoop.get
128
+ cooling_coil_cooling_fuels += plant_loop_cooling_fuel(plant_loop)
129
+ end
130
+ return cooling_coil_cooling_fuels
131
+ end
132
+
133
+ # check the heating fuels for a zone
134
+ def get_zone_heating_fuels(zone)
135
+ # create an array to hold the results
136
+ equipment_heating_fuels = []
137
+ zone.equipment.each do |equipment|
138
+ # TODO: Enumerable and code blocks and collect or select methods
139
+ debug_puts(" #{equipment.name}")
140
+ if equipment.to_AirTerminalSingleDuctParallelPIUReheat.empty? == false
141
+ terminal = equipment.to_AirTerminalSingleDuctParallelPIUReheat.get
142
+ equipment_heating_fuels += reheat_terminal_heating_fuel(terminal)
143
+ elsif equipment.to_AirTerminalSingleDuctVAVReheat.empty? == false
144
+ terminal = equipment.to_AirTerminalSingleDuctVAVReheat.get
145
+ equipment_heating_fuels += reheat_terminal_heating_fuel(terminal)
146
+ elsif equipment.to_ZoneHVACPackagedTerminalHeatPump.empty? == false
147
+ equipment_heating_fuels << 'Electricity'
148
+ end
149
+ end
150
+ return equipment_heating_fuels.uniq.sort
151
+ end
152
+
153
+ # check the cooling fuels for a zone
154
+ def get_zone_cooling_fuels(zone)
155
+ # create an array to hold the results
156
+ equipment_cooling_fuels = []
157
+ zone.equipment.each do |equipment|
158
+ # TODO: Enumerable and code blocks and collect or select methods
159
+ debug_puts(" #{equipment.name}")
160
+ if equipment.to_ZoneHVACPackagedTerminalAirConditioner.empty? == false
161
+ equipment_cooling_fuels << 'Electricity'
162
+ end
163
+ end
164
+ return equipment_cooling_fuels.uniq.sort
165
+ end
166
+
167
+ # check the heating fuels for a zones airloop
168
+ def get_zone_airloop_heating_fuels(zone)
169
+ # create an array to hold the results
170
+ airloop_heating_fuels = []
171
+ if zone.airLoopHVAC.empty? #== false
172
+ debug_puts(' This zone is not connected to an airloop.')
173
+ return airloop_heating_fuels
174
+ else
175
+ zone.airLoopHVAC.get.supplyComponents.each do |supply_component|
176
+ if supply_component.to_CoilHeatingDXSingleSpeed.empty? == false
177
+ airloop_heating_fuels += get_heating_coil_heating_fuel(supply_component)
178
+ elsif supply_component.to_CoilHeatingElectric.empty? == false
179
+ airloop_heating_fuels += get_heating_coil_heating_fuel(supply_component)
180
+ elsif supply_component.to_CoilHeatingGas.empty? == false
181
+ airloop_heating_fuels += get_heating_coil_heating_fuel(supply_component)
182
+ elsif supply_component.to_CoilHeatingWater.empty? == false
183
+ airloop_heating_fuels += get_heating_coil_heating_fuel(supply_component)
184
+ end
185
+ end
186
+ end
187
+ return airloop_heating_fuels.uniq.sort
188
+ end
189
+
190
+ # check the cooling fuels for a zones airloop
191
+ def get_zone_airloop_cooling_fuels(zone)
192
+ # create an array to hold the results
193
+ airloop_cooling_fuels = []
194
+ if zone.airLoopHVAC.empty? #== false
195
+ debug_puts(' This zone is not connected to an airloop.')
196
+ return airloop_cooling_fuels
197
+ else
198
+ zone.airLoopHVAC.get.supplyComponents.each do |supply_component|
199
+ if supply_component.to_CoilCoolingDXSingleSpeed.empty? == false
200
+ airloop_cooling_fuels += get_cooling_coil_cooling_fuel(supply_component)
201
+ elsif supply_component.to_CoilCoolingDXTwoSpeed.empty? == false
202
+ airloop_cooling_fuels += get_cooling_coil_cooling_fuel(supply_component)
203
+ elsif supply_component.to_EvaporativeCoolerDirectResearchSpecial.empty? == false
204
+ airloop_cooling_fuels += get_cooling_coil_cooling_fuel(supply_component)
205
+ elsif supply_component.to_CoilCoolingWater.empty? == false
206
+ airloop_cooling_fuels += get_cooling_coil_cooling_fuel(supply_component)
207
+ end
208
+ end
209
+ end
210
+ return airloop_cooling_fuels.uniq.sort
211
+ end
212
+
213
+ # loop through all thermal zones, comparing fuels for heating and cooling
214
+ baseline_zone_names.sort.each do |baseline_zone_name|
215
+ # first, make sure the zone exists in both models. use names to compare.
216
+ if !proposed_zone_names.include?(baseline_zone_name)
217
+ heat_cool_fuel_swap_check.add_flag(Flag.new($eda, "The zone called #{baseline_zone_name} exists in the baseline model, but not the proposed model, therfore the check for switching of primary heating and cooling fuels could not be run for this zone"))
218
+ debug_puts "The zone called #{baseline_zone_name} exists in the baseline model, but not the proposed model, therfore the check for switching of primary heating and cooling fuels could not be run for this zone"
219
+ next
220
+ end
221
+ debug_puts('****')
222
+ debug_puts("Zone name = #{baseline_zone_name}")
223
+ # default heating and cooling sources to "Unknown" for all zones
224
+ baseline_zone_hvac_heating = 'Unknown'
225
+ baseline_zone_hvac_cooling = 'Unknown'
226
+ baseline_airloop_heating = 'Unknown'
227
+ baseline_airloop_cooling = 'Unknown'
228
+ proposed_zone_hvac_heating = 'Unknown'
229
+ proposed_zone_hvac_cooling = 'Unknown'
230
+ proposed_airloop_heating = 'Unknown'
231
+ proposed_airloop_cooling = 'Unknown'
232
+ # since zone exists in both models, get each zone by name
233
+ baseline_zone = base_model.getObjectsByName(baseline_zone_name)[0].to_ThermalZone.get
234
+ proposed_zone = prop_model.getObjectsByName(baseline_zone_name)[0].to_ThermalZone.get
235
+
236
+ # check the zone hvac heating fuel(s)
237
+ debug_puts("checking the zone-level equipment's heating fuel(s)")
238
+ baseline_zone_hvac_heating = get_zone_heating_fuels(baseline_zone)
239
+ proposed_zone_hvac_heating = get_zone_heating_fuels(proposed_zone)
240
+ # throw a flag if different
241
+ if baseline_zone_hvac_heating != proposed_zone_hvac_heating
242
+ heat_cool_fuel_swap_check.add_flag(Flag.new($eda, "Zone-level heating fuel switching: zone name = #{baseline_zone_name}; baseline_zone_hvac_heating = #{baseline_zone_hvac_heating}; proposed_zone_hvac_heating = #{proposed_zone_hvac_heating}"))
243
+ end
244
+
245
+ # check the zone hvac cooling fuel(s)
246
+ debug_puts("checking the zone-level equipment's cooling fuel(s)")
247
+ baseline_zone_hvac_cooling = get_zone_cooling_fuels(baseline_zone)
248
+ proposed_zone_hvac_cooling = get_zone_cooling_fuels(proposed_zone)
249
+ # throw a flag if different
250
+ if baseline_zone_hvac_cooling != proposed_zone_hvac_cooling
251
+ heat_cool_fuel_swap_check.add_flag(Flag.new($eda, "Zone-level cooling fuel switching: zone name = #{baseline_zone_name}; baseline_zone_hvac_cooling = #{baseline_zone_hvac_cooling}; proposed_zone_hvac_cooling = #{proposed_zone_hvac_cooling}"))
252
+ end
253
+
254
+ # check the zone airloop heating fuel(s)
255
+ debug_puts("checking the zone's airloop's heating fuel(s)")
256
+ baseline_airloop_heating = get_zone_airloop_heating_fuels(baseline_zone)
257
+ proposed_airloop_heating = get_zone_airloop_heating_fuels(proposed_zone)
258
+ # throw a flag if different
259
+ if baseline_airloop_heating != proposed_airloop_heating
260
+ heat_cool_fuel_swap_check.add_flag(Flag.new($eda, "Airloop heating fuel switching: zone name = #{baseline_zone_name}; baseline_airloop_heating = #{baseline_airloop_heating}; proposed_airloop_heating = #{proposed_airloop_heating}"))
261
+ end
262
+
263
+ # check the zone airloop cooling fuel(s)
264
+ debug_puts("checking the zone's airloop's cooling fuel(s)")
265
+ baseline_airloop_cooling = get_zone_airloop_cooling_fuels(baseline_zone)
266
+ proposed_airloop_cooling = get_zone_airloop_cooling_fuels(proposed_zone)
267
+ # throw a flag if different
268
+ if baseline_airloop_cooling != proposed_airloop_cooling
269
+ heat_cool_fuel_swap_check.add_flag(Flag.new($eda, "Airloop cooling fuel switching: zone name = #{baseline_zone_name}; baseline_airloop_cooling = #{baseline_airloop_cooling}; proposed_airloop_cooling = #{proposed_airloop_cooling}"))
270
+ end
271
+ end
272
+ debug_puts heat_cool_fuel_swap_check.inspect
273
+
274
+ return heat_cool_fuel_swap_check
275
+ end
@@ -0,0 +1,191 @@
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://openstudio.net/license
4
+ # *******************************************************************************
5
+
6
+ class XcelEDAReportingandQAQC < OpenStudio::Measure::ReportingMeasure
7
+ # for cooling electricity, include heat rejection electricity
8
+ # should normalize by # days/month - Drew -> yes
9
+
10
+ # peak heating and cooling months
11
+ def peak_heat_cool_mo_check
12
+ # summary of the check
13
+ check_elems = OpenStudio::AttributeVector.new
14
+ check_elems << OpenStudio::Attribute.new('name', 'Peak Heating and Cooling Month Check')
15
+ check_elems << OpenStudio::Attribute.new('category', 'Xcel EDA')
16
+ check_elems << OpenStudio::Attribute.new('description', 'Check that the heating and cooling energy peak during the expected time of year')
17
+
18
+ # heating
19
+ heating_electricity_peak_energy = 0
20
+ heating_gas_peak_energy = 0
21
+ heating_other_fuel_peak_energy = 0
22
+ heating_district_cooling_peak_energy = 0
23
+ heating_district_heating_peak_energy = 0
24
+ # cooling
25
+ cooling_electricity_peak_energy = 0
26
+ cooling_gas_peak_energy = 0
27
+ cooling_other_fuel_peak_energy = 0
28
+ cooling_district_cooling_peak_energy = 0
29
+ cooling_district_heating_peak_energy = 0
30
+
31
+ # heating
32
+ heating_electricity_peak_mo = 'NotAMonth'.to_MonthOfYear
33
+ heating_gas_peak_mo = 'NotAMonth'.to_MonthOfYear
34
+ heating_other_fuel_peak_mo = 'NotAMonth'.to_MonthOfYear
35
+ heating_district_cooling_peak_mo = 'NotAMonth'.to_MonthOfYear
36
+ heating_district_heating_peak_mo = 'NotAMonth'.to_MonthOfYear
37
+ # cooling
38
+ cooling_electricity_peak_mo = 'NotAMonth'.to_MonthOfYear
39
+ cooling_gas_peak_mo = 'NotAMonth'.to_MonthOfYear
40
+ cooling_other_fuel_peak_mo = 'NotAMonth'.to_MonthOfYear
41
+ cooling_district_cooling_peak_mo = 'NotAMonth'.to_MonthOfYear
42
+ cooling_district_heating_peak_mo = 'NotAMonth'.to_MonthOfYear
43
+
44
+ # loop through all of the months, finding the peak month for
45
+ # heating and cooling for each fuel type
46
+ (1..12).each do |month|
47
+ month = OpenStudio::MonthOfYear.new(month)
48
+ heating = 'Heating'.to_EndUseCategoryType
49
+ cooling = 'Cooling'.to_EndUseCategoryType
50
+ electricity = 'Electricity'.to_EndUseFuelType
51
+ gas = 'Gas'.to_EndUseFuelType
52
+ other_fuel = 'OtherFuel_1'.to_EndUseFuelType
53
+ district_cooling = 'DistrictCooling'.to_EndUseFuelType
54
+ district_heating = 'DistrictHeating'.to_EndUseFuelType
55
+
56
+ # heating
57
+ if @sql.energyConsumptionByMonth(electricity, heating, month).is_initialized
58
+ if @sql.energyConsumptionByMonth(electricity, heating, month).get > heating_electricity_peak_energy
59
+ heating_electricity_peak_energy = @sql.energyConsumptionByMonth(electricity, heating, month).get
60
+ heating_electricity_peak_mo = month
61
+ end
62
+ end
63
+
64
+ if @sql.energyConsumptionByMonth(gas, heating, month).is_initialized
65
+ if @sql.energyConsumptionByMonth(gas, heating, month).get > heating_gas_peak_energy
66
+ heating_gas_peak_energy = @sql.energyConsumptionByMonth(gas, heating, month).get
67
+ heating_gas_peak_mo = month
68
+ end
69
+ end
70
+
71
+ if @sql.energyConsumptionByMonth(other_fuel, heating, month).is_initialized
72
+ if @sql.energyConsumptionByMonth(other_fuel, heating, month).get > heating_other_fuel_peak_energy
73
+ heating_other_fuel_peak_energy = @sql.energyConsumptionByMonth(other_fuel, heating, month).get
74
+ heating_other_fuel_peak_mo = month
75
+ end
76
+ end
77
+
78
+ if @sql.energyConsumptionByMonth(district_cooling, heating, month).is_initialized
79
+ if @sql.energyConsumptionByMonth(district_cooling, heating, month).get > heating_district_cooling_peak_energy
80
+ heating_district_cooling_peak_energy = @sql.energyConsumptionByMonth(district_cooling, heating, month).get
81
+ heating_district_cooling_peak_mo = month
82
+ end
83
+ end
84
+
85
+ if @sql.energyConsumptionByMonth(district_heating, heating, month).is_initialized
86
+ if @sql.energyConsumptionByMonth(district_heating, heating, month).get > heating_district_heating_peak_energy
87
+ heating_district_heating_peak_energy = @sql.energyConsumptionByMonth(district_heating, heating, month).get
88
+ heating_district_heating_peak_mo = month
89
+ end
90
+ end
91
+
92
+ # cooling
93
+ if @sql.energyConsumptionByMonth(electricity, cooling, month).is_initialized
94
+ if @sql.energyConsumptionByMonth(electricity, cooling, month).get > cooling_electricity_peak_energy
95
+ cooling_electricity_peak_energy = @sql.energyConsumptionByMonth(electricity, cooling, month).get
96
+ cooling_electricity_peak_mo = month
97
+ end
98
+ end
99
+
100
+ if @sql.energyConsumptionByMonth(gas, cooling, month).is_initialized
101
+ if @sql.energyConsumptionByMonth(gas, cooling, month).get > cooling_gas_peak_energy
102
+ cooling_gas_peak_energy = @sql.energyConsumptionByMonth(gas, cooling, month).get
103
+ cooling_gas_peak_mo = month
104
+ end
105
+ end
106
+
107
+ if @sql.energyConsumptionByMonth(other_fuel, cooling, month).is_initialized
108
+ if @sql.energyConsumptionByMonth(other_fuel, cooling, month).get > cooling_other_fuel_peak_energy
109
+ cooling_other_fuel_peak_energy = @sql.energyConsumptionByMonth(other_fuel, cooling, month).get
110
+ cooling_other_fuel_peak_mo = month
111
+ end
112
+ end
113
+
114
+ if @sql.energyConsumptionByMonth(district_cooling, cooling, month).is_initialized
115
+ if @sql.energyConsumptionByMonth(district_cooling, cooling, month).get > cooling_district_cooling_peak_energy
116
+ cooling_district_cooling_peak_energy = @sql.energyConsumptionByMonth(district_cooling, cooling, month).get
117
+ cooling_district_cooling_peak_mo = month
118
+ end
119
+ end
120
+
121
+ if @sql.energyConsumptionByMonth(district_heating, cooling, month).is_initialized
122
+ if @sql.energyConsumptionByMonth(district_heating, cooling, month).get > cooling_district_heating_peak_energy
123
+ cooling_district_heating_peak_energy = @sql.energyConsumptionByMonth(district_heating, cooling, month).get
124
+ cooling_district_heating_peak_mo = month
125
+ end
126
+ end
127
+ end
128
+
129
+ # define winter
130
+ winter = ['Dec', 'Jan', 'Feb', 'Mar', 'NotAMonth']
131
+
132
+ # define summer
133
+ summer = ['Jun', 'Jul', 'Aug', 'NotAMonth']
134
+
135
+ # peak heating should occur during winter for all fuel types
136
+ unless winter.include?(heating_electricity_peak_mo.valueName)
137
+ check_elems << OpenStudio::Attribute.new('flag', "Peak electricity consumption for heating does not occur in winter as expected; it occurs in #{heating_electricity_peak_mo.valueName}")
138
+ @runner.registerWarning("Peak electricity consumption for heating does not occur in winter as expected; it occurs in #{heating_electricity_peak_mo.valueName}")
139
+ end
140
+
141
+ unless winter.include?(heating_gas_peak_mo.valueName)
142
+ check_elems << OpenStudio::Attribute.new('flag', "Peak gas consumption for heating does not occur in winter as expected; it occurs in #{heating_gas_peak_mo.valueName}")
143
+ @runner.registerWarning("Peak gas consumption for heating does not occur in winter as expected; it occurs in #{heating_gas_peak_mo.valueName}")
144
+ end
145
+
146
+ unless winter.include?(heating_other_fuel_peak_mo.valueName)
147
+ check_elems << OpenStudio::Attribute.new('flag', "Peak other fuel consumption for heating does not occur in winter as expected; it occurs in #{heating_other_fuel_peak_mo.valueName}")
148
+ @runner.registerWarning("Peak other fuel consumption for heating does not occur in winter as expected; it occurs in #{heating_other_fuel_peak_mo.valueName}")
149
+ end
150
+
151
+ unless winter.include?(heating_district_cooling_peak_mo.valueName)
152
+ check_elems << OpenStudio::Attribute.new('flag', "Peak district cooling consumption for heating does not occur in winter as expected; it occurs in #{heating_district_cooling_peak_mo.valueName}")
153
+ @runner.registerWarning("Peak district cooling consumption for heating does not occur in winter as expected; it occurs in #{heating_district_cooling_peak_mo.valueName}")
154
+ end
155
+
156
+ unless winter.include?(heating_district_heating_peak_mo.valueName)
157
+ check_elems << OpenStudio::Attribute.new('flag', "Peak district heating consumption for heating does not occur in winter as expected; it occurs in #{heating_district_heating_peak_mo.valueName}")
158
+ @runner.registerWarning("Peak district heating consumption for heating does not occur in winter as expected; it occurs in #{heating_district_heating_peak_mo.valueName}")
159
+ end
160
+
161
+ # peak cooling should occur during summer for all fuel types
162
+ unless summer.include?(cooling_electricity_peak_mo.valueName)
163
+ check_elems << OpenStudio::Attribute.new('flag', "Peak electricity consumption for cooling does not occur in summer as expected; it occurs in #{cooling_electricity_peak_mo.valueName}")
164
+ @runner.registerWarning("Peak electricity consumption for cooling does not occur in summer as expected; it occurs in #{cooling_electricity_peak_mo.valueName}")
165
+ end
166
+
167
+ unless summer.include?(cooling_gas_peak_mo.valueName)
168
+ check_elems << OpenStudio::Attribute.new('flag', "Peak gas consumption for cooling does not occur in summer as expected; it occurs in #{cooling_gas_peak_mo.valueName}")
169
+ @runner.registerWarning("Peak gas consumption for cooling does not occur in summer as expected; it occurs in #{cooling_gas_peak_mo.valueName}")
170
+ end
171
+
172
+ unless summer.include?(cooling_other_fuel_peak_mo.valueName)
173
+ check_elems << OpenStudio::Attribute.new('flag', "Peak other fuel consumption for cooling does not occur in summer as expected; it occurs in #{cooling_other_fuel_peak_mo.valueName}")
174
+ @runner.registerWarning("Peak other fuel consumption for cooling does not occur in summer as expected; it occurs in #{cooling_other_fuel_peak_mo.valueName}")
175
+ end
176
+
177
+ unless summer.include?(cooling_district_cooling_peak_mo.valueName)
178
+ check_elems << OpenStudio::Attribute.new('flag', "Peak district cooling consumption for cooling does not occur in summer as expected; it occurs in #{cooling_district_cooling_peak_mo.valueName}")
179
+ @runner.registerWarning("Peak district cooling consumption for cooling does not occur in summer as expected; it occurs in #{cooling_district_cooling_peak_mo.valueName}")
180
+ end
181
+
182
+ unless summer.include?(cooling_district_heating_peak_mo.valueName)
183
+ check_elems << OpenStudio::Attribute.new('flag', "Peak district heating consumption for cooling does not occur in summer as expected; it occurs in #{cooling_district_heating_peak_mo.valueName}")
184
+ @runner.registerWarning("Peak district heating consumption for cooling does not occur in summer as expected; it occurs in #{cooling_district_heating_peak_mo.valueName}")
185
+ end
186
+
187
+ check_elem = OpenStudio::Attribute.new('check', check_elems)
188
+
189
+ return check_elem
190
+ end
191
+ end
@@ -0,0 +1,45 @@
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://openstudio.net/license
4
+ # *******************************************************************************
5
+
6
+ class XcelEDAReportingandQAQC < OpenStudio::Measure::ReportingMeasure
7
+ # have the xcel protocol set the reporting tolerance for deltaF (DOE2 has 0.55C tolerance - Brent suggests 0.55C for E+ too)
8
+ # check the setpoints in the protocol
9
+ # could we do a custom report to show the thermostat schedules? during occupied and unoccupied times
10
+
11
+ # checks the number of unmet hours in the model
12
+ def unmet_hrs_check
13
+ # summary of the check
14
+ check_elems = OpenStudio::AttributeVector.new
15
+ check_elems << OpenStudio::Attribute.new('name', 'Unmet Hours Check')
16
+ check_elems << OpenStudio::Attribute.new('category', 'General')
17
+ check_elems << OpenStudio::Attribute.new('description', 'Check that the heating and cooling systems are meeting their setpoints for the entire simulation period')
18
+
19
+ # setup the queries
20
+ heating_setpoint_unmet_query = "SELECT Value FROM TabularDataWithStrings WHERE (ReportName='SystemSummary') AND (ReportForString='Entire Facility') AND (TableName='Time Setpoint Not Met') AND (RowName = 'Facility') AND (ColumnName='During Heating')"
21
+ cooling_setpoint_unmet_query = "SELECT Value FROM TabularDataWithStrings WHERE (ReportName='SystemSummary') AND (ReportForString='Entire Facility') AND (TableName='Time Setpoint Not Met') AND (RowName = 'Facility') AND (ColumnName='During Cooling')"
22
+
23
+ # get the info
24
+ heating_setpoint_unmet = @sql.execAndReturnFirstDouble(heating_setpoint_unmet_query)
25
+ cooling_setpoint_unmet = @sql.execAndReturnFirstDouble(cooling_setpoint_unmet_query)
26
+
27
+ # make sure all the data are availalbe
28
+ if heating_setpoint_unmet.empty? || cooling_setpoint_unmet.empty?
29
+ check_elems << OpenStudio::Attribute.new('flag', 'Hours heating or cooling unmet data unavailable; check not run')
30
+ @runner.registerWarning('Hours heating or cooling unmet data unavailable; check not run')
31
+ end
32
+
33
+ # aggregate heating and cooling hrs
34
+ heating_or_cooling_setpoint_unmet = heating_setpoint_unmet.get + cooling_setpoint_unmet.get
35
+ # flag if heating + cooling unmet hours > 300
36
+ if heating_or_cooling_setpoint_unmet > 300
37
+ check_elems << OpenStudio::Attribute.new('flag', "Hours heating or cooling unmet is #{heating_or_cooling_setpoint_unmet}; > the Xcel EDA limit of 300 hrs")
38
+ @runner.registerWarning("Hours heating or cooling unmet is #{heating_or_cooling_setpoint_unmet}; > the Xcel EDA limit of 300 hrs")
39
+ end
40
+
41
+ check_elem = OpenStudio::Attribute.new('check', check_elems)
42
+
43
+ return check_elem
44
+ end
45
+ end
@@ -0,0 +1,13 @@
1
+ OpenStudio(R), Copyright (c) 2008, 2023 Alliance for Sustainable Energy, LLC.
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4
+
5
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6
+
7
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
+
9
+ 3. Redistribution of this software, without modification, must refer to the software by the same designation. Redistribution of a modified version of this software (i) may not refer to the modified version by the same designation, or by any confusingly similar designation, and (ii) must refer to the underlying software originally provided by Alliance as “OpenStudio®”. Except to comply with the foregoing, the term “OpenStudio®”, or any confusingly similar designation may not be used to refer to any modified version of this software or any modified version of the underlying software originally provided by Alliance without the prior written consent of Alliance.
10
+
11
+ 4. The name of the copyright holder(s), any contributors, the United States Government, the United States Department of Energy, or any of their employees may not be used to endorse or promote products derived from this software without specific prior written permission from the respective party.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,40 @@
1
+
2
+
3
+ ###### (Automatically generated documentation)
4
+
5
+ # XcelEDATariffSelectionandModelSetup
6
+
7
+ ## Description
8
+
9
+
10
+ ## Modeler Description
11
+
12
+
13
+ ## Measure Type
14
+ EnergyPlusMeasure
15
+
16
+ ## Taxonomy
17
+
18
+
19
+ ## Arguments
20
+
21
+
22
+ ### Select an Electricity Tariff.
23
+
24
+ **Name:** elec_tar,
25
+ **Type:** Choice,
26
+ **Units:** ,
27
+ **Required:** true,
28
+ **Model Dependent:** false
29
+
30
+ ### Select a Gas Tariff.
31
+
32
+ **Name:** gas_tar,
33
+ **Type:** Choice,
34
+ **Units:** ,
35
+ **Required:** true,
36
+ **Model Dependent:** false
37
+
38
+
39
+
40
+
@@ -0,0 +1,42 @@
1
+ <%#= README.md.erb is used to auto-generate README.md. %>
2
+ <%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %>
3
+ ###### (Automatically generated documentation)
4
+
5
+ # <%= name %>
6
+
7
+ ## Description
8
+ <%= description %>
9
+
10
+ ## Modeler Description
11
+ <%= modelerDescription %>
12
+
13
+ ## Measure Type
14
+ <%= measureType %>
15
+
16
+ ## Taxonomy
17
+ <%= taxonomy %>
18
+
19
+ ## Arguments
20
+
21
+ <% arguments.each do |argument| %>
22
+ ### <%= argument[:display_name] %>
23
+ <%= argument[:description] %>
24
+ **Name:** <%= argument[:name] %>,
25
+ **Type:** <%= argument[:type] %>,
26
+ **Units:** <%= argument[:units] %>,
27
+ **Required:** <%= argument[:required] %>,
28
+ **Model Dependent:** <%= argument[:model_dependent] %>
29
+ <% end %>
30
+
31
+ <% if arguments.size == 0 %>
32
+ <%= "This measure does not have any user arguments" %>
33
+ <% end %>
34
+
35
+ <% if outputs.size > 0 %>
36
+ ## Outputs
37
+ <% output_names = [] %>
38
+ <% outputs.each do |output| %>
39
+ <% output_names << output[:display_name] %>
40
+ <% end %>
41
+ <%= output_names.join(", ") %>
42
+ <% end %>