urbanopt-cli 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/CMakeLists.txt +9 -9
  4. data/Gemfile +10 -12
  5. data/README.md +1 -0
  6. data/example_files/Gemfile +26 -10
  7. data/example_files/mappers/Baseline.rb +9 -0
  8. data/example_files/mappers/CreateBar.rb +2 -0
  9. data/example_files/mappers/Floorspace.rb +12 -10
  10. data/example_files/mappers/floorspace_workflow.osw +9 -0
  11. data/example_files/residential/clothes_washer.tsv +1 -1
  12. data/example_files/residential/water_heater.tsv +1 -1
  13. data/example_files/resources/hpxml-measures/.circleci/config.yml +20 -0
  14. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +13 -0
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +583 -334
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +687 -586
  17. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +21 -22
  18. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +34 -24
  19. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +14 -1
  20. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +33 -35
  21. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +33 -35
  22. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +34 -36
  23. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +361 -0
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +33 -35
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +33 -35
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +33 -35
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +33 -35
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +33 -35
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +33 -35
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +33 -35
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +33 -35
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +33 -35
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +33 -35
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +33 -35
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +47 -48
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +47 -48
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → base-bldgtype-multifamily-shared-pv.osw} +49 -50
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +365 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → base-bldgtype-multifamily.osw} +43 -44
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +36 -38
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +33 -34
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +33 -34
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +33 -35
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +33 -34
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +33 -34
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +33 -34
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +33 -34
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +33 -35
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +33 -35
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +33 -35
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +33 -34
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +33 -35
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +33 -35
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +33 -35
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +33 -35
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +33 -35
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +33 -35
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +33 -35
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +33 -35
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +33 -35
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +33 -35
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +33 -35
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +33 -35
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +33 -35
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +33 -35
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +362 -0
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +33 -35
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +362 -0
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +33 -35
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +33 -35
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +362 -0
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +33 -35
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +33 -35
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +33 -35
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +33 -35
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +33 -35
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +33 -36
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +361 -0
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +33 -35
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +361 -0
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +33 -35
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +33 -35
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +33 -35
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +33 -35
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +33 -35
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +33 -35
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +33 -35
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +33 -35
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +33 -35
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +33 -35
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +33 -35
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +33 -35
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +33 -35
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +33 -35
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +33 -35
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +33 -35
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +33 -35
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +33 -35
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +33 -35
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +33 -35
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +33 -35
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +33 -35
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +33 -35
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +33 -35
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +33 -35
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +33 -35
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +34 -35
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +33 -35
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +33 -35
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +33 -35
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +33 -35
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +33 -34
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +33 -34
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +33 -35
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +33 -35
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +33 -35
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +34 -35
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +33 -35
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +33 -35
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +35 -35
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +34 -35
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +34 -35
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +33 -35
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +33 -35
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +34 -35
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +33 -35
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +33 -35
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +33 -35
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +33 -35
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +34 -35
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +34 -35
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +34 -35
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +34 -35
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +33 -35
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +33 -35
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +33 -35
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +33 -35
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +34 -35
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +33 -35
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +33 -35
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +33 -35
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +33 -35
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +35 -37
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +34 -35
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +34 -35
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +34 -35
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +34 -35
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +34 -35
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +34 -35
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +33 -35
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +34 -35
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +33 -35
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +33 -35
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +33 -35
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +34 -35
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +34 -35
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +33 -35
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +34 -35
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +34 -36
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +33 -35
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +33 -35
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +33 -35
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +33 -35
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +33 -35
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +33 -35
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +33 -35
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +33 -35
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +33 -35
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +33 -35
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +33 -35
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +33 -35
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +33 -35
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +33 -35
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +33 -35
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +33 -35
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +33 -35
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +36 -38
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +39 -41
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +39 -41
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +33 -35
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -32
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +29 -31
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +33 -35
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +33 -35
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +33 -35
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +33 -35
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +33 -35
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +33 -35
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +33 -35
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +33 -35
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +19 -8
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +33 -35
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +33 -35
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +33 -35
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +369 -0
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-plug-loads-additional-multipliers.osw +361 -0
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +33 -35
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-schedules-random-seed.osw} +47 -50
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace.osw +33 -35
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater.osw +33 -35
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +33 -35
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-vacancy-6-months.osw +33 -35
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +33 -35
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +33 -35
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +33 -35
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +33 -35
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +33 -35
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +33 -35
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +41 -42
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +41 -42
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +40 -41
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +31 -33
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-plug-loads.osw} +35 -37
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +33 -35
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +33 -35
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +33 -35
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +33 -35
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +35 -37
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +35 -37
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +33 -35
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +33 -35
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +33 -35
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +33 -35
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +33 -35
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -38
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -35
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +33 -35
  228. data/example_files/resources/hpxml-measures/Gemfile +0 -2
  229. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +141 -129
  230. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +183 -153
  231. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +4 -4
  232. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +247 -121
  233. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +0 -10
  234. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +434 -0
  235. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +28 -35
  236. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -12
  237. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +60 -53
  238. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +11 -15
  239. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +81 -0
  240. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +3 -1
  241. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +21 -12
  242. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1150 -1072
  243. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +799 -389
  244. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +227 -351
  245. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +122 -89
  246. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +1 -1
  247. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +2 -3
  248. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +0 -6
  249. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +8 -13
  250. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +23 -21
  251. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +8 -7
  252. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +2 -2
  253. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
  254. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
  255. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +103 -72
  256. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +110 -37
  257. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +16 -7
  258. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +109 -0
  259. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1747 -838
  260. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +99 -0
  261. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +5 -16
  262. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +23 -25
  263. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -0
  264. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +1 -1
  265. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +10 -10
  266. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +1 -1
  267. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
  268. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +10 -10
  269. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +77 -60
  270. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +186 -34
  271. data/example_files/resources/hpxml-measures/README.md +1 -0
  272. data/example_files/resources/hpxml-measures/Rakefile +2 -9
  273. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +278 -254
  274. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +32 -5
  275. data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
  276. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +73 -137
  277. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
  278. data/example_files/resources/hpxml-measures/docs/source/conf.py +7 -4
  279. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +4 -4
  280. data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
  281. data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -5
  282. data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
  283. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2340 -0
  284. data/example_files/resources/hpxml-measures/docs/source/{simulation_output_report.rst → workflow_outputs.rst} +18 -16
  285. data/example_files/resources/hpxml-measures/tasks.rb +1154 -669
  286. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +64 -20
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +557 -559
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +523 -524
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +3 -4
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +524 -0
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +523 -524
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +557 -559
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +563 -565
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +511 -513
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +557 -559
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +557 -559
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +557 -559
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +564 -566
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +632 -634
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +530 -532
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +516 -518
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +561 -563
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +564 -566
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-multifamily-buffer-space.xml → base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml} +30 -59
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +553 -0
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-non-freezing-space.xml → base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml} +30 -59
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +30 -59
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +30 -59
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +426 -0
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +429 -0
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +469 -0
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +464 -0
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +409 -0
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +408 -0
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +411 -0
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +445 -0
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +408 -0
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +410 -0
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +445 -0
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +440 -0
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +459 -0
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +465 -0
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +35 -410
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +488 -0
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +472 -0
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +464 -0
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +457 -0
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +450 -0
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +447 -0
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +606 -0
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +517 -519
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +517 -519
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +549 -551
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -566
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +562 -564
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +550 -549
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +549 -551
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +552 -551
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +566 -568
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +518 -520
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +518 -520
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +519 -521
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +526 -528
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +518 -520
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +566 -568
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +567 -569
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +565 -567
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +523 -525
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +561 -563
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +576 -578
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +495 -497
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +564 -566
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +564 -566
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +564 -566
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +564 -566
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +564 -566
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +576 -578
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +576 -578
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +576 -578
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +569 -571
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +576 -578
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +576 -578
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +562 -564
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-window-interior-shading.xml → base-dhw-tank-elec-uef.xml} +8 -9
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +562 -564
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +564 -0
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +562 -564
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +560 -562
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-dhw-tank-heat-pump-uef.xml} +6 -13
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +568 -570
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +575 -577
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +560 -562
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +562 -564
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +562 -564
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +560 -562
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +560 -0
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +559 -561
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +560 -0
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +567 -569
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +574 -576
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +559 -561
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +559 -561
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +660 -664
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +574 -576
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +561 -563
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +561 -563
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +561 -563
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +561 -563
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +635 -639
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +561 -563
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +561 -563
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +561 -563
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +564 -566
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +560 -562
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +576 -578
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +589 -591
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +589 -591
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +516 -0
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2473 -2493
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +753 -755
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-interior-shading.xml +561 -563
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +503 -505
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +497 -497
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +723 -729
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +561 -563
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +561 -563
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +684 -688
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +515 -517
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +608 -610
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +557 -559
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +572 -574
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +572 -574
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +572 -574
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +575 -577
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +626 -628
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +563 -562
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +560 -562
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +560 -562
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +519 -521
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +519 -521
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +520 -522
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +519 -521
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +519 -521
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +519 -521
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +550 -549
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +547 -549
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +547 -549
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +580 -576
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +533 -535
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +564 -563
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +564 -563
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +561 -563
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +561 -563
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +563 -562
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +561 -563
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +510 -512
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +553 -555
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +526 -528
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +506 -505
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +513 -513
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +513 -513
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -0
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +561 -563
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +547 -549
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +561 -563
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +561 -563
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +550 -550
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +559 -561
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +547 -549
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +547 -549
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +547 -549
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +577 -579
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -564
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +498 -500
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +549 -548
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +512 -511
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +556 -555
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +562 -561
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +562 -561
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +519 -518
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +913 -912
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +834 -837
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +487 -489
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +566 -0
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +569 -571
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +509 -511
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +509 -511
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +561 -563
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +513 -513
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +513 -513
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +564 -566
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +561 -563
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +513 -513
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +572 -574
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +584 -586
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +487 -489
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +561 -563
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +561 -563
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +515 -517
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +561 -563
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +515 -517
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +573 -575
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +589 -591
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +546 -548
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +539 -541
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +574 -576
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +575 -577
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +575 -577
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +573 -575
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +573 -575
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +574 -576
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +574 -576
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +793 -795
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +573 -575
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +571 -573
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +476 -495
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +578 -0
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +753 -833
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +740 -820
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +549 -559
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +574 -576
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shelter-coefficient.xml +564 -566
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +723 -725
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +2 -4
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +2 -4
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +2 -4
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +562 -564
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +568 -570
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +564 -566
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +565 -567
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +561 -563
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +561 -563
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-autosize.xml +559 -561
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml +562 -561
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml +559 -558
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml +556 -558
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml +556 -558
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml +518 -520
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml +569 -571
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml +519 -521
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml +549 -548
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml +546 -548
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml +546 -548
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml +575 -571
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml +560 -559
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml +559 -558
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml +509 -511
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml +552 -554
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml +512 -512
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml +546 -548
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml +559 -561
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml +559 -561
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml +549 -549
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml +557 -559
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml +562 -564
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml +559 -561
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml +548 -547
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml +561 -560
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml +558 -557
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml +553 -552
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml +558 -557
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-room-ac-only-autosize.xml +508 -510
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-stove-oil-only-autosize.xml +512 -512
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml +512 -512
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +533 -535
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +561 -563
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +561 -563
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +561 -563
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +576 -578
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +3 -5
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +563 -0
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +561 -563
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +561 -563
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +561 -563
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +561 -563
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +545 -547
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +542 -544
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +545 -545
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +562 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +612 -616
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +625 -629
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +609 -611
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +549 -551
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +471 -473
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +534 -534
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +561 -560
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +562 -561
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +913 -912
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +913 -912
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +532 -534
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +547 -549
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +547 -549
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +913 -912
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{invalid-calendar-year.xml → hvac-inconsistent-fan-powers.xml} +8 -5
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +569 -571
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +562 -0
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +562 -0
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +562 -0
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +568 -567
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +561 -563
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +561 -563
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +465 -0
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +643 -0
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +564 -0
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +574 -576
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +552 -551
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +518 -520
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +563 -565
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +562 -0
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +561 -563
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +576 -578
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +561 -563
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +909 -908
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +559 -561
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +561 -563
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +561 -563
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +564 -566
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +561 -563
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +589 -591
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +561 -563
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +562 -0
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +545 -547
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +561 -563
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +567 -569
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +567 -569
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +565 -564
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +527 -529
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/slab-zero-exposed-perimeter.xml +561 -563
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +532 -534
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +567 -566
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +532 -534
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +574 -576
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +561 -563
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +561 -563
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +464 -827
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +464 -827
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +589 -591
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +576 -578
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +561 -563
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +561 -563
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +561 -563
  631. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -14
  632. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -14
  633. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -14
  634. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -14
  635. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -14
  636. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -14
  637. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -14
  638. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -14
  639. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -14
  640. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -14
  641. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -14
  642. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -14
  643. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -14
  644. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -14
  645. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -14
  646. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -14
  647. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -14
  648. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -14
  649. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -14
  650. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -14
  651. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -14
  652. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -14
  653. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -16
  654. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -16
  655. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -16
  656. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -16
  657. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +277 -224
  658. data/lib/uo_cli/version.rb +1 -1
  659. data/scripts/setup-env-gitbash.sh +4 -4
  660. data/scripts/setup-env.bat +14 -11
  661. data/scripts/setup-env.ps1 +13 -10
  662. data/uo_cli.gemspec +6 -4
  663. metadata +106 -57
  664. data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/appliances-location-unconditioned-space.xml +0 -564
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
@@ -1,5 +1,6 @@
1
1
  # OpenStudio-HPXML
2
2
 
3
+ [![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/NREL/OpenStudio-HPXML?include_prereleases)](https://github.com/NREL/OpenStudio-HPXML/releases)
3
4
  [![CircleCI](https://circleci.com/gh/NREL/OpenStudio-HPXML.svg?style=shield)](https://circleci.com/gh/NREL/OpenStudio-HPXML)
4
5
  [![Documentation Status](https://readthedocs.org/projects/openstudio-hpxml/badge/?version=latest)](https://openstudio-hpxml.readthedocs.io/en/latest/?badge=latest)
5
6
  [![codecov](https://codecov.io/gh/NREL/OpenStudio-HPXML/branch/master/graph/badge.svg)](https://codecov.io/gh/NREL/OpenStudio-HPXML)
@@ -7,16 +7,9 @@ require 'rake'
7
7
  require 'rake/testtask'
8
8
  require 'ci/reporter/rake/minitest'
9
9
 
10
- desc 'Run validation test (requires schematron-nokogiri)'
11
- Rake::TestTask.new('test_validation') do |t|
12
- t.test_files = Dir['HPXMLtoOpenStudio/tests/test_validation.rb']
13
- t.warning = false
14
- t.verbose = true
15
- end
16
-
17
- desc 'Run all tests (excluding validation test)'
10
+ desc 'Run all tests'
18
11
  Rake::TestTask.new('test_all') do |t|
19
- t.test_files = Dir['*/tests/*.rb'] - Dir['HPXMLtoOpenStudio/tests/test_validation.rb']
12
+ t.test_files = Dir['*/tests/*.rb']
20
13
  t.warning = false
21
14
  t.verbose = true
22
15
  end
@@ -145,15 +145,20 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
145
145
 
146
146
  # Add meters to increase precision of outputs relative to, e.g., ABUPS report
147
147
  meters = []
148
+ meters << 'ElectricityProduced:Facility' # Used for error checking
148
149
  @fuels.each do |fuel_type, fuel|
149
- meters << fuel.meter
150
+ fuel.meters.each do |meter|
151
+ meters << meter
152
+ end
150
153
  end
151
154
  @end_uses.each do |key, end_use|
152
- meters << end_use.meter
155
+ next if end_use.meters.nil?
156
+
157
+ end_use.meters.each do |meter|
158
+ meters << meter
159
+ end
153
160
  end
154
161
  meters.each do |meter|
155
- next if meter.nil?
156
-
157
162
  result << OpenStudio::IdfObject.load("Output:Meter,#{meter},runperiod;").get
158
163
  end
159
164
 
@@ -175,7 +180,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
175
180
 
176
181
  # Add peak electricity outputs
177
182
  @peak_fuels.each do |key, peak_fuel|
178
- result << OpenStudio::IdfObject.load("Output:Table:Monthly,#{peak_fuel.report},2,#{peak_fuel.meter},HoursPositive,Electricity:Facility,MaximumDuringHoursShown;").get
183
+ peak_fuel.meters.each do |meter|
184
+ result << OpenStudio::IdfObject.load("Output:Table:Monthly,#{peak_fuel.report},2,#{meter},HoursPositive,Electricity:Facility,MaximumDuringHoursShown;").get
185
+ end
179
186
  end
180
187
 
181
188
  # Add component load outputs
@@ -244,15 +251,19 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
244
251
 
245
252
  if include_timeseries_fuel_consumptions
246
253
  @fuels.each do |fuel_type, fuel|
247
- result << OpenStudio::IdfObject.load("Output:Meter,#{fuel.meter},#{timeseries_frequency};").get
254
+ fuel.meters.each do |meter|
255
+ result << OpenStudio::IdfObject.load("Output:Meter,#{meter},#{timeseries_frequency};").get
256
+ end
248
257
  end
249
258
  end
250
259
 
251
260
  if include_timeseries_end_use_consumptions
252
261
  @end_uses.each do |key, end_use|
253
- next if end_use.meter.nil?
262
+ next if end_use.meters.nil?
254
263
 
255
- result << OpenStudio::IdfObject.load("Output:Meter,#{end_use.meter},#{timeseries_frequency};").get
264
+ end_use.meters.each do |meter|
265
+ result << OpenStudio::IdfObject.load("Output:Meter,#{meter},#{timeseries_frequency};").get
266
+ end
256
267
  end
257
268
  # Add output variables for individual HVAC/DHW systems
258
269
  add_object_output_variables(timeseries_frequency).each do |outvar|
@@ -271,6 +282,8 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
271
282
  result << OpenStudio::IdfObject.load("EnergyManagementSystem:OutputVariable,#{load.ems_variable}_timeseries_outvar,#{load.ems_variable},Summed,ZoneTimestep,#{loads_program.name},J;").get
272
283
  result << OpenStudio::IdfObject.load("Output:Variable,*,#{load.ems_variable}_timeseries_outvar,#{timeseries_frequency};").get
273
284
  end
285
+ # And add HotWaterDelivered:
286
+ result << OpenStudio::IdfObject.load("Output:Variable,*,Water Use Connections Plant Hot Water Energy,#{timeseries_frequency};").get
274
287
  end
275
288
 
276
289
  if include_timeseries_component_loads
@@ -404,7 +417,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
404
417
  timestamps = []
405
418
  values.get.each do |value|
406
419
  year, month, day, hour, minute = value.split(' ')
407
- ts = ts = Time.new(year, month, day, hour, minute)
420
+ ts = Time.new(year, month, day, hour, minute)
408
421
  timestamps << ts.strftime('%Y/%m/%d %H:%M:00')
409
422
  end
410
423
 
@@ -456,15 +469,18 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
456
469
 
457
470
  # Fuel Uses
458
471
  @fuels.each do |fuel_type, fuel|
459
- fuel.annual_output = get_report_meter_data_annual(fuel.meter)
472
+ fuel.annual_output = get_report_meter_data_annual(fuel.meters)
460
473
  if include_timeseries_fuel_consumptions
461
- fuel.timeseries_output = get_report_meter_data_timeseries('', fuel.meter, UnitConversions.convert(1.0, 'J', fuel.timeseries_units), 0, timeseries_frequency)
474
+ fuel.timeseries_output = get_report_meter_data_timeseries(fuel.meters, UnitConversions.convert(1.0, 'J', fuel.timeseries_units), 0, timeseries_frequency)
462
475
  end
463
476
  end
464
477
 
478
+ # Electricity Produced (used for error checking)
479
+ outputs[:total_elec_produced] = get_report_meter_data_annual(['ElectricityProduced:Facility'])
480
+
465
481
  # Peak Electricity Consumption
466
482
  @peak_fuels.each do |key, peak_fuel|
467
- peak_fuel.annual_output = get_tabular_data_value(peak_fuel.report.upcase, 'Meter', 'Custom Monthly Report', 'Maximum of Months', 'ELECTRICITY:FACILITY {MAX FOR HOURS SHOWN', peak_fuel.annual_units)
483
+ peak_fuel.annual_output = get_tabular_data_value(peak_fuel.report.upcase, 'Meter', 'Custom Monthly Report', ['Maximum of Months'], 'ELECTRICITY:FACILITY {MAX FOR HOURS SHOWN', peak_fuel.annual_units)
468
484
  end
469
485
 
470
486
  # Total loads
@@ -497,25 +513,33 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
497
513
 
498
514
  # Peak Building Space Heating/Cooling Loads (total heating/cooling energy delivered including backup ideal air system)
499
515
  @peak_loads.each do |load_type, peak_load|
500
- peak_load.annual_output = UnitConversions.convert(get_tabular_data_value('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', peak_load.meter, 'Maximum Value', 'W'), 'Wh', peak_load.annual_units)
516
+ peak_load.annual_output = UnitConversions.convert(get_tabular_data_value('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', peak_load.meters, 'Maximum Value', 'W'), 'Wh', peak_load.annual_units)
501
517
  end
502
518
 
503
519
  # End Uses (derived from meters)
504
520
  @end_uses.each do |key, end_use|
505
- next if end_use.meter.nil?
521
+ next if end_use.meters.nil?
506
522
 
507
523
  fuel_type, end_use_type = key
508
- end_use.annual_output = get_report_meter_data_annual(end_use.meter)
509
- if (end_use_type == EUT::PV) && (@end_uses[key].annual_output > 0)
524
+
525
+ use_negative = false
526
+ if end_use_type == EUT::PV
527
+ use_negative = true
528
+ elsif (end_use_type == EUT::Generator) && (fuel_type == FT::Elec)
529
+ use_negative = true
530
+ end
531
+
532
+ end_use.annual_output = get_report_meter_data_annual(end_use.meters)
533
+ if use_negative && (@end_uses[key].annual_output > 0)
510
534
  end_use.annual_output *= -1.0
511
535
  end
512
536
  next unless include_timeseries_end_use_consumptions
513
537
 
514
538
  timeseries_unit_conv = UnitConversions.convert(1.0, 'J', end_use.timeseries_units)
515
- if end_use_type == EUT::PV
539
+ if use_negative
516
540
  timeseries_unit_conv *= -1.0
517
541
  end
518
- end_use.timeseries_output = get_report_meter_data_timeseries('', end_use.meter, timeseries_unit_conv, 0, timeseries_frequency)
542
+ end_use.timeseries_output = get_report_meter_data_timeseries(end_use.meters, timeseries_unit_conv, 0, timeseries_frequency)
519
543
  end
520
544
 
521
545
  # Hot Water Uses
@@ -536,10 +560,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
536
560
  # End Use
537
561
  @fuels.each do |fuel_type, fuel|
538
562
  end_use = @end_uses[[fuel_type, EUT::Heating]]
539
- vars = get_all_var_keys(end_use.variable)
540
- end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, vars)
563
+ end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, end_use.variable_names)
541
564
  if include_timeseries_end_use_consumptions
542
- end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, vars, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
565
+ end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, end_use.variable_names, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
543
566
  end
544
567
  end
545
568
 
@@ -563,10 +586,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
563
586
 
564
587
  # End Uses
565
588
  end_use = @end_uses[[FT::Elec, EUT::Cooling]]
566
- vars = get_all_var_keys(end_use.variable)
567
- end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, vars)
589
+ end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, end_use.variable_names)
568
590
  if include_timeseries_end_use_consumptions
569
- end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, vars, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
591
+ end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, end_use.variable_names, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
570
592
  end
571
593
 
572
594
  # Disaggregated Fan/Pump Energy Use
@@ -589,10 +611,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
589
611
 
590
612
  @fuels.each do |fuel_type, fuel|
591
613
  end_use = @end_uses[[fuel_type, EUT::MechVentPreheat]]
592
- vars = get_all_var_keys(end_use.variable)
593
- end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, vars)
614
+ end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, end_use.variable_names)
594
615
  if include_timeseries_end_use_consumptions
595
- end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, vars, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
616
+ end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, end_use.variable_names, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
596
617
  end
597
618
  end
598
619
  end
@@ -603,22 +624,20 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
603
624
  keys = ep_output_names.map(&:upcase)
604
625
 
605
626
  end_use = @end_uses[[FT::Elec, EUT::MechVentPrecool]]
606
- vars = get_all_var_keys(end_use.variable)
607
- end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, vars)
627
+ end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, end_use.variable_names)
608
628
  if include_timeseries_end_use_consumptions
609
- end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, vars, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
629
+ end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, end_use.variable_names, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
610
630
  end
611
631
  end
612
632
 
613
633
  # Dehumidifier
614
634
  end_use = @end_uses[[FT::Elec, EUT::Dehumidifier]]
615
- vars = get_all_var_keys(end_use.variable)
616
635
  ep_output_name = @hvac_map[outputs[:hpxml_dehumidifier_id]]
617
636
  if not ep_output_name.nil?
618
637
  keys = ep_output_name.map(&:upcase)
619
- end_use.annual_output = get_report_variable_data_annual(keys, vars)
638
+ end_use.annual_output = get_report_variable_data_annual(keys, end_use.variable_names)
620
639
  if include_timeseries_end_use_consumptions
621
- end_use.timeseries_output = get_report_variable_data_timeseries(keys, vars, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
640
+ end_use.timeseries_output = get_report_variable_data_timeseries(keys, end_use.variable_names, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
622
641
  end
623
642
  else
624
643
  end_use.annual_output = 0
@@ -638,17 +657,19 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
638
657
  end_use = @end_uses[[fuel_type, end_use_type]]
639
658
  next if end_use.nil?
640
659
 
641
- vars = get_all_var_keys(end_use.variable)
642
-
643
- end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, vars)
660
+ end_use.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, end_use.variable_names)
644
661
  if include_timeseries_end_use_consumptions
645
- end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, vars, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
662
+ end_use.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, end_use.variable_names, UnitConversions.convert(1.0, 'J', end_use.timeseries_units), 0, timeseries_frequency)
646
663
  end
647
664
  end
648
665
  end
649
666
 
650
667
  # Loads
651
- @loads[LT::HotWaterDelivered].annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, get_all_var_keys(@loads[LT::HotWaterDelivered].variable))
668
+ load = @loads[LT::HotWaterDelivered]
669
+ load.annual_output_by_system[sys_id] = get_report_variable_data_annual(keys, load.variable_names)
670
+ if include_timeseries_total_loads
671
+ load.timeseries_output_by_system[sys_id] = get_report_variable_data_timeseries(keys, load.variable_names, UnitConversions.convert(1.0, 'J', load.timeseries_units), 0, timeseries_frequency)
672
+ end
652
673
 
653
674
  # Combi boiler water system
654
675
  hvac_id = get_combi_hvac_id(sys_id)
@@ -678,7 +699,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
678
699
  @fuels.keys.reverse.each do |fuel_type| # Reverse so that FT::Elec is considered last
679
700
  end_use = @end_uses[[fuel_type, EUT::HotWater]]
680
701
  next if end_use.nil?
681
- next if end_use.variable.nil?
702
+ next if end_use.variables.nil?
682
703
  next unless end_use.annual_output_by_system[sys_id] > 0
683
704
 
684
705
  ec_vars = ep_output_names.select { |name| name.include? Constants.ObjectNameWaterHeaterAdjustment(nil) }
@@ -724,11 +745,11 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
724
745
  end
725
746
 
726
747
  # Hot Water Load - Solar Thermal
727
- @loads[LT::HotWaterSolarThermal].annual_output = get_report_variable_data_annual(solar_keys, get_all_var_keys(OutputVars.WaterHeaterLoadSolarThermal))
748
+ @loads[LT::HotWaterSolarThermal].annual_output = get_report_variable_data_annual(solar_keys, get_all_variable_keys(OutputVars.WaterHeaterLoadSolarThermal))
728
749
  @loads[LT::HotWaterSolarThermal].annual_output *= -1 if @loads[LT::HotWaterSolarThermal].annual_output != 0
729
750
 
730
751
  # Hot Water Load - Desuperheater
731
- @loads[LT::HotWaterDesuperheater].annual_output = get_report_variable_data_annual(dsh_keys, get_all_var_keys(@loads[LT::HotWaterDesuperheater].variable))
752
+ @loads[LT::HotWaterDesuperheater].annual_output = get_report_variable_data_annual(dsh_keys, @loads[LT::HotWaterDesuperheater].variable_names)
732
753
 
733
754
  # Hot Water Load - Tank Losses (excluding solar storage tank)
734
755
  @loads[LT::HotWaterTankLosses].annual_output = get_report_variable_data_annual(solar_keys, ['Water Heater Heat Loss Energy'], not_key: true)
@@ -819,11 +840,21 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
819
840
  return false
820
841
  end
821
842
 
843
+ # Check sum of electricity produced end use outputs match total
844
+ sum_elec_produced = -1 * (@end_uses[[FT::Elec, EUT::PV]].annual_output + @end_uses[[FT::Elec, EUT::Generator]].annual_output)
845
+ total_elec_produced = outputs[:total_elec_produced]
846
+ if (sum_elec_produced - total_elec_produced).abs > 0.1
847
+ runner.registerError("#{FT::Elec} produced category end uses (#{sum_elec_produced}) do not sum to total (#{total_elec_produced}).")
848
+ return false
849
+ end
850
+
822
851
  # Check sum of end use outputs match fuel outputs
823
852
  @fuels.keys.each do |fuel_type|
824
853
  sum_categories = @end_uses.select { |k, eu| k[0] == fuel_type }.map { |k, eu| eu.annual_output }.sum(0.0)
825
854
  fuel_total = @fuels[fuel_type].annual_output
826
- fuel_total += @end_uses[[FT::Elec, EUT::PV]].annual_output if fuel_type == FT::Elec
855
+ if fuel_type == FT::Elec
856
+ fuel_total -= sum_elec_produced
857
+ end
827
858
  if (fuel_total - sum_categories).abs > 0.1
828
859
  runner.registerError("#{fuel_type} category end uses (#{sum_categories}) do not sum to total (#{fuel_total}).")
829
860
  return false
@@ -852,13 +883,14 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
852
883
 
853
884
  def write_annual_output_results(runner, outputs, csv_path)
854
885
  line_break = nil
855
- pv_end_use = @end_uses[[FT::Elec, EUT::PV]]
886
+ elec_pv_produced = @end_uses[[FT::Elec, EUT::PV]]
887
+ elec_generator_produced = @end_uses[[FT::Elec, EUT::Generator]]
856
888
 
857
889
  results_out = []
858
890
  @fuels.each do |fuel_type, fuel|
859
891
  results_out << ["#{fuel.name} (#{fuel.annual_units})", fuel.annual_output.round(2)]
860
892
  if fuel_type == FT::Elec
861
- results_out << ['Electricity: Net (MBtu)', (fuel.annual_output + pv_end_use.annual_output).round(2)]
893
+ results_out << ['Electricity: Net (MBtu)', (fuel.annual_output + elec_pv_produced.annual_output + elec_generator_produced.annual_output).round(2)]
862
894
  end
863
895
  end
864
896
  results_out << [line_break]
@@ -875,7 +907,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
875
907
  end
876
908
  results_out << [line_break]
877
909
  @peak_fuels.each do |key, peak_fuel|
878
- results_out << ["#{peak_fuel.name} (#{peak_fuel.annual_units})", peak_fuel.annual_output.round(2)]
910
+ results_out << ["#{peak_fuel.name} (#{peak_fuel.annual_units})", peak_fuel.annual_output.round(0)]
879
911
  end
880
912
  results_out << [line_break]
881
913
  @peak_loads.each do |load_type, peak_load|
@@ -887,7 +919,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
887
919
  end
888
920
  results_out << [line_break]
889
921
  @hot_water_uses.each do |hot_water_type, hot_water|
890
- results_out << ["#{hot_water.name} (#{hot_water.annual_units})", hot_water.annual_output.round(2)]
922
+ results_out << ["#{hot_water.name} (#{hot_water.annual_units})", hot_water.annual_output.round(0)]
891
923
  end
892
924
 
893
925
  CSV.open(csv_path, 'wb') { |csv| results_out.to_a.each { |elem| csv << elem } }
@@ -1376,6 +1408,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1376
1408
  @hpxml.water_heating_systems.each do |dhw_system|
1377
1409
  sys_id = dhw_system.id
1378
1410
  value = dhw_system.energy_factor
1411
+ value = dhw_system.uniform_energy_factor if value.nil?
1379
1412
  wh_type = dhw_system.water_heater_type
1380
1413
  if wh_type == HPXML::WaterHeaterTypeTankless
1381
1414
  value_adj = dhw_system.performance_adjustment
@@ -1384,6 +1417,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1384
1417
  end
1385
1418
 
1386
1419
  if value.nil?
1420
+ # Get assumed EF for combi system
1387
1421
  @model.getWaterHeaterMixeds.each do |wh|
1388
1422
  next unless @dhw_map[sys_id].include? wh.name.to_s
1389
1423
 
@@ -1443,17 +1477,18 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1443
1477
  return sys.id
1444
1478
  end
1445
1479
 
1446
- def get_report_meter_data_annual(variable, unit_conv = UnitConversions.convert(1.0, 'J', 'MBtu'))
1447
- query = "SELECT SUM(VariableValue*#{unit_conv}) FROM ReportMeterData WHERE ReportMeterDataDictionaryIndex IN (SELECT ReportMeterDataDictionaryIndex FROM ReportMeterDataDictionary WHERE VariableName='#{variable}' AND ReportingFrequency='Run Period' AND VariableUnits='J')"
1480
+ def get_report_meter_data_annual(meter_names, unit_conv = UnitConversions.convert(1.0, 'J', 'MBtu'))
1481
+ vars = "'" + meter_names.join("','") + "'"
1482
+ query = "SELECT SUM(VariableValue*#{unit_conv}) FROM ReportMeterData WHERE ReportMeterDataDictionaryIndex IN (SELECT ReportMeterDataDictionaryIndex FROM ReportMeterDataDictionary WHERE VariableName IN (#{vars}) AND ReportingFrequency='Run Period' AND VariableUnits='J')"
1448
1483
  value = @sqlFile.execAndReturnFirstDouble(query)
1449
1484
  fail "Query error: #{query}" unless value.is_initialized
1450
1485
 
1451
1486
  return value.get
1452
1487
  end
1453
1488
 
1454
- def get_report_variable_data_annual(key_values_list, variable_names_list, unit_conv = UnitConversions.convert(1.0, 'J', 'MBtu'), not_key: false)
1455
- keys = "'" + key_values_list.join("','") + "'"
1456
- vars = "'" + variable_names_list.join("','") + "'"
1489
+ def get_report_variable_data_annual(key_values, variable_names, unit_conv = UnitConversions.convert(1.0, 'J', 'MBtu'), not_key: false)
1490
+ keys = "'" + key_values.join("','") + "'"
1491
+ vars = "'" + variable_names.join("','") + "'"
1457
1492
  if not_key
1458
1493
  s_not = 'NOT '
1459
1494
  else
@@ -1466,8 +1501,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1466
1501
  return value.get
1467
1502
  end
1468
1503
 
1469
- def get_report_meter_data_timeseries(key_value, variable_name, unit_conv, unit_adder, timeseries_frequency)
1470
- query = "SELECT SUM(VariableValue*#{unit_conv}+#{unit_adder}) FROM ReportMeterData WHERE ReportMeterDataDictionaryIndex IN (SELECT ReportMeterDataDictionaryIndex FROM ReportMeterDataDictionary WHERE KeyValue='#{key_value}' AND VariableName='#{variable_name}' AND ReportingFrequency='#{reporting_frequency_map[timeseries_frequency]}' AND VariableUnits='J') GROUP BY TimeIndex ORDER BY TimeIndex"
1504
+ def get_report_meter_data_timeseries(meter_names, unit_conv, unit_adder, timeseries_frequency)
1505
+ vars = "'" + meter_names.join("','") + "'"
1506
+ query = "SELECT SUM(VariableValue*#{unit_conv}+#{unit_adder}) FROM ReportMeterData WHERE ReportMeterDataDictionaryIndex IN (SELECT ReportMeterDataDictionaryIndex FROM ReportMeterDataDictionary WHERE VariableName IN (#{vars}) AND ReportingFrequency='#{reporting_frequency_map[timeseries_frequency]}' AND VariableUnits='J') GROUP BY TimeIndex ORDER BY TimeIndex"
1471
1507
  values = @sqlFile.execAndReturnVectorOfDouble(query)
1472
1508
  fail "Query error: #{query}" unless values.is_initialized
1473
1509
 
@@ -1476,9 +1512,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1476
1512
  return values
1477
1513
  end
1478
1514
 
1479
- def get_report_variable_data_timeseries(key_values_list, variable_names_list, unit_conv, unit_adder, timeseries_frequency, disable_ems_shift = false)
1480
- keys = "'" + key_values_list.join("','") + "'"
1481
- vars = "'" + variable_names_list.join("','") + "'"
1515
+ def get_report_variable_data_timeseries(key_values, variable_names, unit_conv, unit_adder, timeseries_frequency, disable_ems_shift = false)
1516
+ keys = "'" + key_values.join("','") + "'"
1517
+ vars = "'" + variable_names.join("','") + "'"
1482
1518
  query = "SELECT SUM(VariableValue*#{unit_conv}+#{unit_adder}) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE KeyValue IN (#{keys}) AND VariableName IN (#{vars}) AND ReportingFrequency='#{reporting_frequency_map[timeseries_frequency]}') GROUP BY TimeIndex ORDER BY TimeIndex"
1483
1519
  values = @sqlFile.execAndReturnVectorOfDouble(query)
1484
1520
  fail "Query error: #{query}" unless values.is_initialized
@@ -1488,7 +1524,7 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1488
1524
 
1489
1525
  return values if disable_ems_shift
1490
1526
 
1491
- if (key_values_list.size == 1) && (key_values_list[0] == 'EMS')
1527
+ if (key_values.size == 1) && (key_values[0] == 'EMS')
1492
1528
  if (timeseries_frequency.downcase == 'timestep' || (timeseries_frequency.downcase == 'hourly' && @model.getTimestep.numberOfTimestepsPerHour == 1))
1493
1529
  # Shift all values by 1 timestep due to EMS reporting lag
1494
1530
  return values[1..-1] + [values[-1]]
@@ -1498,8 +1534,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1498
1534
  return values
1499
1535
  end
1500
1536
 
1501
- def get_tabular_data_value(report_name, report_for_string, table_name, row_name, col_name, units)
1502
- query = "SELECT SUM(Value) FROM TabularDataWithStrings WHERE ReportName='#{report_name}' AND ReportForString='#{report_for_string}' AND TableName='#{table_name}' AND RowName='#{row_name}' AND ColumnName='#{col_name}' AND Units='#{units}'"
1537
+ def get_tabular_data_value(report_name, report_for_string, table_name, row_names, col_name, units)
1538
+ rows = "'" + row_names.join("','") + "'"
1539
+ query = "SELECT SUM(Value) FROM TabularDataWithStrings WHERE ReportName='#{report_name}' AND ReportForString='#{report_for_string}' AND TableName='#{table_name}' AND RowName IN (#{rows}) AND ColumnName='#{col_name}' AND Units='#{units}'"
1503
1540
  result = @sqlFile.execAndReturnFirstDouble(query)
1504
1541
  return result.get
1505
1542
  end
@@ -1543,9 +1580,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1543
1580
  next unless dfhp_primary || dfhp_backup
1544
1581
 
1545
1582
  if dfhp_primary
1546
- vars = get_all_var_keys(OutputVars.SpaceHeatingDFHPPrimaryLoad)
1583
+ vars = get_all_variable_keys(OutputVars.SpaceHeatingDFHPPrimaryLoad)
1547
1584
  else
1548
- vars = get_all_var_keys(OutputVars.SpaceHeatingDFHPBackupLoad)
1585
+ vars = get_all_variable_keys(OutputVars.SpaceHeatingDFHPBackupLoad)
1549
1586
  sys_id = dfhp_primary_sys_id(sys_id)
1550
1587
  end
1551
1588
  dfhp_loads[[sys_id, dfhp_primary]] = get_report_variable_data_annual(keys, vars)
@@ -1613,16 +1650,6 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1613
1650
  return false
1614
1651
  end
1615
1652
 
1616
- def get_all_var_keys(var)
1617
- var_keys = []
1618
- var.keys.each do |key|
1619
- var[key].each do |var_key|
1620
- var_keys << var_key
1621
- end
1622
- end
1623
- return var_keys
1624
- end
1625
-
1626
1653
  def get_dhw_solar_fraction(sys_id)
1627
1654
  solar_fraction = 0.0
1628
1655
  if @hpxml.solar_thermal_systems.size > 0
@@ -1699,34 +1726,34 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1699
1726
  end
1700
1727
 
1701
1728
  def add_object_output_variables(timeseries_frequency)
1702
- hvac_output_vars = [OutputVars.SpaceHeatingElectricity,
1703
- OutputVars.SpaceHeatingFuel(EPlus::FuelTypeNaturalGas),
1704
- OutputVars.SpaceHeatingFuel(EPlus::FuelTypeOil),
1705
- OutputVars.SpaceHeatingFuel(EPlus::FuelTypePropane),
1706
- OutputVars.SpaceHeatingFuel(EPlus::FuelTypeWoodCord),
1707
- OutputVars.SpaceHeatingFuel(EPlus::FuelTypeWoodPellets),
1708
- OutputVars.SpaceHeatingFuel(EPlus::FuelTypeCoal),
1729
+ hvac_output_vars = [OutputVars.SpaceHeating(EPlus::FuelTypeElectricity),
1730
+ OutputVars.SpaceHeating(EPlus::FuelTypeNaturalGas),
1731
+ OutputVars.SpaceHeating(EPlus::FuelTypeOil),
1732
+ OutputVars.SpaceHeating(EPlus::FuelTypePropane),
1733
+ OutputVars.SpaceHeating(EPlus::FuelTypeWoodCord),
1734
+ OutputVars.SpaceHeating(EPlus::FuelTypeWoodPellets),
1735
+ OutputVars.SpaceHeating(EPlus::FuelTypeCoal),
1709
1736
  OutputVars.SpaceHeatingDFHPPrimaryLoad,
1710
1737
  OutputVars.SpaceHeatingDFHPBackupLoad,
1711
1738
  OutputVars.SpaceCoolingElectricity,
1712
1739
  OutputVars.DehumidifierElectricity,
1713
- OutputVars.MechVentPreconditioningElectricity,
1714
- OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeNaturalGas),
1715
- OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeOil),
1716
- OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypePropane),
1717
- OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeWoodCord),
1718
- OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeWoodPellets),
1719
- OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeCoal)]
1720
-
1721
- dhw_output_vars = [OutputVars.WaterHeatingElectricity,
1740
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypeElectricity),
1741
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypeNaturalGas),
1742
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypeOil),
1743
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypePropane),
1744
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypeWoodCord),
1745
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypeWoodPellets),
1746
+ OutputVars.MechVentPreconditioning(EPlus::FuelTypeCoal)]
1747
+
1748
+ dhw_output_vars = [OutputVars.WaterHeating(EPlus::FuelTypeElectricity),
1749
+ OutputVars.WaterHeating(EPlus::FuelTypeNaturalGas),
1750
+ OutputVars.WaterHeating(EPlus::FuelTypeOil),
1751
+ OutputVars.WaterHeating(EPlus::FuelTypePropane),
1752
+ OutputVars.WaterHeating(EPlus::FuelTypeWoodCord),
1753
+ OutputVars.WaterHeating(EPlus::FuelTypeWoodPellets),
1754
+ OutputVars.WaterHeating(EPlus::FuelTypeCoal),
1722
1755
  OutputVars.WaterHeatingElectricityRecircPump,
1723
1756
  OutputVars.WaterHeatingElectricitySolarThermalPump,
1724
- OutputVars.WaterHeatingFuel(EPlus::FuelTypeNaturalGas),
1725
- OutputVars.WaterHeatingFuel(EPlus::FuelTypeOil),
1726
- OutputVars.WaterHeatingFuel(EPlus::FuelTypePropane),
1727
- OutputVars.WaterHeatingFuel(EPlus::FuelTypeWoodCord),
1728
- OutputVars.WaterHeatingFuel(EPlus::FuelTypeWoodPellets),
1729
- OutputVars.WaterHeatingFuel(EPlus::FuelTypeCoal),
1730
1757
  OutputVars.WaterHeatingLoad,
1731
1758
  OutputVars.WaterHeatingLoadTankLosses,
1732
1759
  OutputVars.WaterHeaterLoadDesuperheater,
@@ -1837,23 +1864,26 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1837
1864
  end
1838
1865
 
1839
1866
  class Fuel < BaseOutput
1840
- def initialize(meter: nil)
1867
+ def initialize(meters: nil)
1841
1868
  super()
1842
- @meter = meter
1869
+ @meters = meters
1843
1870
  @timeseries_output_by_system = {}
1844
1871
  end
1845
- attr_accessor(:meter, :timeseries_output_by_system)
1872
+ attr_accessor(:meters, :timeseries_output_by_system)
1846
1873
  end
1847
1874
 
1848
1875
  class EndUse < BaseOutput
1849
- def initialize(meter: nil, variable: nil)
1876
+ def initialize(meters: nil, variables: nil)
1850
1877
  super()
1851
- @meter = meter
1852
- @variable = variable
1878
+ @meters = meters
1879
+ @variables = variables
1853
1880
  @timeseries_output_by_system = {}
1854
1881
  @annual_output_by_system = {}
1882
+ if not variables.nil?
1883
+ @variable_names = get_all_variable_keys(variables)
1884
+ end
1855
1885
  end
1856
- attr_accessor(:meter, :variable, :annual_output_by_system, :timeseries_output_by_system)
1886
+ attr_accessor(:meters, :variables, :annual_output_by_system, :timeseries_output_by_system, :variable_names)
1857
1887
  end
1858
1888
 
1859
1889
  class HotWater < BaseOutput
@@ -1865,23 +1895,26 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1865
1895
  end
1866
1896
 
1867
1897
  class PeakFuel < BaseOutput
1868
- def initialize(meter:, report:)
1898
+ def initialize(meters:, report:)
1869
1899
  super()
1870
- @meter = meter
1900
+ @meters = meters
1871
1901
  @report = report
1872
1902
  end
1873
- attr_accessor(:meter, :report)
1903
+ attr_accessor(:meters, :report)
1874
1904
  end
1875
1905
 
1876
1906
  class Load < BaseOutput
1877
- def initialize(variable: nil, ems_variable: nil)
1907
+ def initialize(variables: nil, ems_variable: nil)
1878
1908
  super()
1879
- @variable = variable
1909
+ @variables = variables
1880
1910
  @ems_variable = ems_variable
1881
1911
  @timeseries_output_by_system = {}
1882
1912
  @annual_output_by_system = {}
1913
+ if not variables.nil?
1914
+ @variable_names = get_all_variable_keys(variables)
1915
+ end
1883
1916
  end
1884
- attr_accessor(:variable, :ems_variable, :annual_output_by_system, :timeseries_output_by_system)
1917
+ attr_accessor(:variables, :ems_variable, :annual_output_by_system, :timeseries_output_by_system, :variable_names)
1885
1918
  end
1886
1919
 
1887
1920
  class ComponentLoad < BaseOutput
@@ -1902,11 +1935,11 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1902
1935
  end
1903
1936
 
1904
1937
  class PeakLoad < BaseOutput
1905
- def initialize(meter:)
1938
+ def initialize(meters:)
1906
1939
  super()
1907
- @meter = meter
1940
+ @meters = meters
1908
1941
  end
1909
- attr_accessor(:meter)
1942
+ attr_accessor(:meters)
1910
1943
  end
1911
1944
 
1912
1945
  class ZoneTemp < BaseOutput
@@ -1944,23 +1977,16 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1944
1977
  return 'kBtu'
1945
1978
  end
1946
1979
 
1947
- ep_fuel_names = { FT::Gas => EPlus.output_fuel_map(EPlus::FuelTypeNaturalGas),
1948
- FT::Oil => EPlus.output_fuel_map(EPlus::FuelTypeOil),
1949
- FT::Propane => EPlus.output_fuel_map(EPlus::FuelTypePropane),
1950
- FT::WoodCord => EPlus.output_fuel_map(EPlus::FuelTypeWoodCord),
1951
- FT::WoodPellets => EPlus.output_fuel_map(EPlus::FuelTypeWoodPellets),
1952
- FT::Coal => EPlus.output_fuel_map(EPlus::FuelTypeCoal) }
1953
-
1954
1980
  # Fuels
1955
1981
 
1956
1982
  @fuels = {}
1957
- @fuels[FT::Elec] = Fuel.new(meter: 'Electricity:Facility')
1958
- @fuels[FT::Gas] = Fuel.new(meter: "#{ep_fuel_names[FT::Gas]}:Facility")
1959
- @fuels[FT::Oil] = Fuel.new(meter: "#{ep_fuel_names[FT::Oil]}:Facility")
1960
- @fuels[FT::Propane] = Fuel.new(meter: "#{ep_fuel_names[FT::Propane]}:Facility")
1961
- @fuels[FT::WoodCord] = Fuel.new(meter: "#{ep_fuel_names[FT::WoodCord]}:Facility")
1962
- @fuels[FT::WoodPellets] = Fuel.new(meter: "#{ep_fuel_names[FT::WoodPellets]}:Facility")
1963
- @fuels[FT::Coal] = Fuel.new(meter: "#{ep_fuel_names[FT::Coal]}:Facility")
1983
+ @fuels[FT::Elec] = Fuel.new(meters: ["#{EPlus::FuelTypeElectricity}:Facility"])
1984
+ @fuels[FT::Gas] = Fuel.new(meters: ["#{EPlus::FuelTypeNaturalGas}:Facility"])
1985
+ @fuels[FT::Oil] = Fuel.new(meters: ["#{EPlus::FuelTypeOil}:Facility"])
1986
+ @fuels[FT::Propane] = Fuel.new(meters: ["#{EPlus::FuelTypePropane}:Facility"])
1987
+ @fuels[FT::WoodCord] = Fuel.new(meters: ["#{EPlus::FuelTypeWoodCord}:Facility"])
1988
+ @fuels[FT::WoodPellets] = Fuel.new(meters: ["#{EPlus::FuelTypeWoodPellets}:Facility"])
1989
+ @fuels[FT::Coal] = Fuel.new(meters: ["#{EPlus::FuelTypeCoal}:Facility"])
1964
1990
 
1965
1991
  @fuels.each do |fuel_type, fuel|
1966
1992
  fuel.name = "#{fuel_type}: Total"
@@ -1973,102 +1999,105 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
1973
1999
  # NOTE: Some end uses are obtained from meters, others are rolled up from
1974
2000
  # output variables so that we can have more control.
1975
2001
  @end_uses = {}
1976
- @end_uses[[FT::Elec, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingElectricity)
2002
+ @end_uses[[FT::Elec, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypeElectricity))
1977
2003
  @end_uses[[FT::Elec, EUT::HeatingFanPump]] = EndUse.new()
1978
- @end_uses[[FT::Elec, EUT::Cooling]] = EndUse.new(variable: OutputVars.SpaceCoolingElectricity)
2004
+ @end_uses[[FT::Elec, EUT::Cooling]] = EndUse.new(variables: OutputVars.SpaceCoolingElectricity)
1979
2005
  @end_uses[[FT::Elec, EUT::CoolingFanPump]] = EndUse.new()
1980
- @end_uses[[FT::Elec, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingElectricity)
1981
- @end_uses[[FT::Elec, EUT::HotWaterRecircPump]] = EndUse.new(variable: OutputVars.WaterHeatingElectricityRecircPump)
1982
- @end_uses[[FT::Elec, EUT::HotWaterSolarThermalPump]] = EndUse.new(variable: OutputVars.WaterHeatingElectricitySolarThermalPump)
1983
- @end_uses[[FT::Elec, EUT::LightsInterior]] = EndUse.new(meter: "#{Constants.ObjectNameInteriorLighting}:InteriorLights:Electricity")
1984
- @end_uses[[FT::Elec, EUT::LightsGarage]] = EndUse.new(meter: "#{Constants.ObjectNameGarageLighting}:InteriorLights:Electricity")
1985
- @end_uses[[FT::Elec, EUT::LightsExterior]] = EndUse.new(meter: 'ExteriorLights:Electricity')
1986
- @end_uses[[FT::Elec, EUT::MechVent]] = EndUse.new(meter: "#{Constants.ObjectNameMechanicalVentilation}:InteriorEquipment:Electricity")
1987
- @end_uses[[FT::Elec, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningElectricity)
1988
- @end_uses[[FT::Elec, EUT::MechVentPrecool]] = EndUse.new(variable: OutputVars.MechVentPreconditioningElectricity)
1989
- @end_uses[[FT::Elec, EUT::WholeHouseFan]] = EndUse.new(meter: "#{Constants.ObjectNameWholeHouseFan}:InteriorEquipment:Electricity")
1990
- @end_uses[[FT::Elec, EUT::Refrigerator]] = EndUse.new(meter: "#{Constants.ObjectNameRefrigerator}:InteriorEquipment:Electricity")
2006
+ @end_uses[[FT::Elec, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypeElectricity))
2007
+ @end_uses[[FT::Elec, EUT::HotWaterRecircPump]] = EndUse.new(variables: OutputVars.WaterHeatingElectricityRecircPump)
2008
+ @end_uses[[FT::Elec, EUT::HotWaterSolarThermalPump]] = EndUse.new(variables: OutputVars.WaterHeatingElectricitySolarThermalPump)
2009
+ @end_uses[[FT::Elec, EUT::LightsInterior]] = EndUse.new(meters: ["#{Constants.ObjectNameInteriorLighting}:InteriorLights:#{EPlus::FuelTypeElectricity}"])
2010
+ @end_uses[[FT::Elec, EUT::LightsGarage]] = EndUse.new(meters: ["#{Constants.ObjectNameGarageLighting}:InteriorLights:#{EPlus::FuelTypeElectricity}"])
2011
+ @end_uses[[FT::Elec, EUT::LightsExterior]] = EndUse.new(meters: ["ExteriorLights:#{EPlus::FuelTypeElectricity}"])
2012
+ @end_uses[[FT::Elec, EUT::MechVent]] = EndUse.new(meters: ["#{Constants.ObjectNameMechanicalVentilation}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2013
+ @end_uses[[FT::Elec, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeElectricity))
2014
+ @end_uses[[FT::Elec, EUT::MechVentPrecool]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeElectricity))
2015
+ @end_uses[[FT::Elec, EUT::WholeHouseFan]] = EndUse.new(meters: ["#{Constants.ObjectNameWholeHouseFan}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2016
+ @end_uses[[FT::Elec, EUT::Refrigerator]] = EndUse.new(meters: ["#{Constants.ObjectNameRefrigerator}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
1991
2017
  if @eri_design.nil? # Skip end uses not used by ERI
1992
- @end_uses[[FT::Elec, EUT::Freezer]] = EndUse.new(meter: "#{Constants.ObjectNameFreezer}:InteriorEquipment:Electricity")
1993
- end
1994
- @end_uses[[FT::Elec, EUT::Dehumidifier]] = EndUse.new(variable: OutputVars.DehumidifierElectricity)
1995
- @end_uses[[FT::Elec, EUT::Dishwasher]] = EndUse.new(meter: "#{Constants.ObjectNameDishwasher}:InteriorEquipment:Electricity")
1996
- @end_uses[[FT::Elec, EUT::ClothesWasher]] = EndUse.new(meter: "#{Constants.ObjectNameClothesWasher}:InteriorEquipment:Electricity")
1997
- @end_uses[[FT::Elec, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:Electricity")
1998
- @end_uses[[FT::Elec, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:Electricity")
1999
- @end_uses[[FT::Elec, EUT::CeilingFan]] = EndUse.new(meter: "#{Constants.ObjectNameCeilingFan}:InteriorEquipment:Electricity")
2000
- @end_uses[[FT::Elec, EUT::Television]] = EndUse.new(meter: "#{Constants.ObjectNameMiscTelevision}:InteriorEquipment:Electricity")
2001
- @end_uses[[FT::Elec, EUT::PlugLoads]] = EndUse.new(meter: "#{Constants.ObjectNameMiscPlugLoads}:InteriorEquipment:Electricity")
2018
+ @end_uses[[FT::Elec, EUT::Freezer]] = EndUse.new(meters: ["#{Constants.ObjectNameFreezer}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2019
+ end
2020
+ @end_uses[[FT::Elec, EUT::Dehumidifier]] = EndUse.new(variables: OutputVars.DehumidifierElectricity)
2021
+ @end_uses[[FT::Elec, EUT::Dishwasher]] = EndUse.new(meters: ["#{Constants.ObjectNameDishwasher}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2022
+ @end_uses[[FT::Elec, EUT::ClothesWasher]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesWasher}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2023
+ @end_uses[[FT::Elec, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2024
+ @end_uses[[FT::Elec, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2025
+ @end_uses[[FT::Elec, EUT::CeilingFan]] = EndUse.new(meters: ["#{Constants.ObjectNameCeilingFan}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2026
+ @end_uses[[FT::Elec, EUT::Television]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscTelevision}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2027
+ @end_uses[[FT::Elec, EUT::PlugLoads]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscPlugLoads}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2002
2028
  if @eri_design.nil? # Skip end uses not used by ERI
2003
- @end_uses[[FT::Elec, EUT::Vehicle]] = EndUse.new(meter: "#{Constants.ObjectNameMiscElectricVehicleCharging}:InteriorEquipment:Electricity")
2004
- @end_uses[[FT::Elec, EUT::WellPump]] = EndUse.new(meter: "#{Constants.ObjectNameMiscWellPump}:InteriorEquipment:Electricity")
2005
- @end_uses[[FT::Elec, EUT::PoolHeater]] = EndUse.new(meter: "#{Constants.ObjectNameMiscPoolHeater}:InteriorEquipment:Electricity")
2006
- @end_uses[[FT::Elec, EUT::PoolPump]] = EndUse.new(meter: "#{Constants.ObjectNameMiscPoolPump}:InteriorEquipment:Electricity")
2007
- @end_uses[[FT::Elec, EUT::HotTubHeater]] = EndUse.new(meter: "#{Constants.ObjectNameMiscHotTubHeater}:InteriorEquipment:Electricity")
2008
- @end_uses[[FT::Elec, EUT::HotTubPump]] = EndUse.new(meter: "#{Constants.ObjectNameMiscHotTubPump}:InteriorEquipment:Electricity")
2009
- end
2010
- @end_uses[[FT::Elec, EUT::PV]] = EndUse.new(meter: 'ElectricityProduced:Facility')
2011
- @end_uses[[FT::Gas, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingFuel(EPlus::FuelTypeNaturalGas))
2012
- @end_uses[[FT::Gas, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingFuel(EPlus::FuelTypeNaturalGas))
2013
- @end_uses[[FT::Gas, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2014
- @end_uses[[FT::Gas, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2015
- @end_uses[[FT::Gas, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeNaturalGas))
2029
+ @end_uses[[FT::Elec, EUT::Vehicle]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscElectricVehicleCharging}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2030
+ @end_uses[[FT::Elec, EUT::WellPump]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscWellPump}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2031
+ @end_uses[[FT::Elec, EUT::PoolHeater]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscPoolHeater}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2032
+ @end_uses[[FT::Elec, EUT::PoolPump]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscPoolPump}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2033
+ @end_uses[[FT::Elec, EUT::HotTubHeater]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscHotTubHeater}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2034
+ @end_uses[[FT::Elec, EUT::HotTubPump]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscHotTubPump}:InteriorEquipment:#{EPlus::FuelTypeElectricity}"])
2035
+ end
2036
+ @end_uses[[FT::Elec, EUT::PV]] = EndUse.new(meters: ['Photovoltaic:ElectricityProduced', 'PowerConversion:ElectricityProduced'])
2037
+ @end_uses[[FT::Elec, EUT::Generator]] = EndUse.new(meters: ['Cogeneration:ElectricityProduced'])
2038
+ @end_uses[[FT::Gas, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypeNaturalGas))
2039
+ @end_uses[[FT::Gas, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypeNaturalGas))
2040
+ @end_uses[[FT::Gas, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2041
+ @end_uses[[FT::Gas, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2042
+ @end_uses[[FT::Gas, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeNaturalGas))
2016
2043
  if @eri_design.nil? # Skip end uses not used by ERI
2017
- @end_uses[[FT::Gas, EUT::PoolHeater]] = EndUse.new(meter: "#{Constants.ObjectNameMiscPoolHeater}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2018
- @end_uses[[FT::Gas, EUT::HotTubHeater]] = EndUse.new(meter: "#{Constants.ObjectNameMiscHotTubHeater}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2019
- @end_uses[[FT::Gas, EUT::Grill]] = EndUse.new(meter: "#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2020
- @end_uses[[FT::Gas, EUT::Lighting]] = EndUse.new(meter: "#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2021
- @end_uses[[FT::Gas, EUT::Fireplace]] = EndUse.new(meter: "#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{ep_fuel_names[FT::Gas]}")
2022
- end
2023
- @end_uses[[FT::Oil, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingFuel(EPlus::FuelTypeOil))
2024
- @end_uses[[FT::Oil, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingFuel(EPlus::FuelTypeOil))
2025
- @end_uses[[FT::Oil, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{ep_fuel_names[FT::Oil]}")
2026
- @end_uses[[FT::Oil, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{ep_fuel_names[FT::Oil]}")
2027
- @end_uses[[FT::Oil, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeOil))
2044
+ @end_uses[[FT::Gas, EUT::PoolHeater]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscPoolHeater}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2045
+ @end_uses[[FT::Gas, EUT::HotTubHeater]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscHotTubHeater}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2046
+ @end_uses[[FT::Gas, EUT::Grill]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2047
+ @end_uses[[FT::Gas, EUT::Lighting]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2048
+ @end_uses[[FT::Gas, EUT::Fireplace]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{EPlus::FuelTypeNaturalGas}"])
2049
+ end
2050
+ @end_uses[[FT::Gas, EUT::Generator]] = EndUse.new(meters: ["Cogeneration:#{EPlus::FuelTypeNaturalGas}"])
2051
+ @end_uses[[FT::Oil, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypeOil))
2052
+ @end_uses[[FT::Oil, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypeOil))
2053
+ @end_uses[[FT::Oil, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypeOil}"])
2054
+ @end_uses[[FT::Oil, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypeOil}"])
2055
+ @end_uses[[FT::Oil, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeOil))
2028
2056
  if @eri_design.nil? # Skip end uses not used by ERI
2029
- @end_uses[[FT::Oil, EUT::Grill]] = EndUse.new(meter: "#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{ep_fuel_names[FT::Oil]}")
2030
- @end_uses[[FT::Oil, EUT::Lighting]] = EndUse.new(meter: "#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{ep_fuel_names[FT::Oil]}")
2031
- @end_uses[[FT::Oil, EUT::Fireplace]] = EndUse.new(meter: "#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{ep_fuel_names[FT::Oil]}")
2032
- end
2033
- @end_uses[[FT::Propane, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingFuel(EPlus::FuelTypePropane))
2034
- @end_uses[[FT::Propane, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingFuel(EPlus::FuelTypePropane))
2035
- @end_uses[[FT::Propane, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{ep_fuel_names[FT::Propane]}")
2036
- @end_uses[[FT::Propane, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{ep_fuel_names[FT::Propane]}")
2037
- @end_uses[[FT::Propane, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypePropane))
2057
+ @end_uses[[FT::Oil, EUT::Grill]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{EPlus::FuelTypeOil}"])
2058
+ @end_uses[[FT::Oil, EUT::Lighting]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{EPlus::FuelTypeOil}"])
2059
+ @end_uses[[FT::Oil, EUT::Fireplace]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{EPlus::FuelTypeOil}"])
2060
+ end
2061
+ @end_uses[[FT::Propane, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypePropane))
2062
+ @end_uses[[FT::Propane, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypePropane))
2063
+ @end_uses[[FT::Propane, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypePropane}"])
2064
+ @end_uses[[FT::Propane, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypePropane}"])
2065
+ @end_uses[[FT::Propane, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypePropane))
2038
2066
  if @eri_design.nil? # Skip end uses not used by ERI
2039
- @end_uses[[FT::Propane, EUT::Grill]] = EndUse.new(meter: "#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{ep_fuel_names[FT::Propane]}")
2040
- @end_uses[[FT::Propane, EUT::Lighting]] = EndUse.new(meter: "#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{ep_fuel_names[FT::Propane]}")
2041
- @end_uses[[FT::Propane, EUT::Fireplace]] = EndUse.new(meter: "#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{ep_fuel_names[FT::Propane]}")
2042
- end
2043
- @end_uses[[FT::WoodCord, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingFuel(EPlus::FuelTypeWoodCord))
2044
- @end_uses[[FT::WoodCord, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingFuel(EPlus::FuelTypeWoodCord))
2045
- @end_uses[[FT::WoodCord, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{ep_fuel_names[FT::WoodCord]}")
2046
- @end_uses[[FT::WoodCord, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{ep_fuel_names[FT::WoodCord]}")
2047
- @end_uses[[FT::WoodCord, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeWoodCord))
2067
+ @end_uses[[FT::Propane, EUT::Grill]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{EPlus::FuelTypePropane}"])
2068
+ @end_uses[[FT::Propane, EUT::Lighting]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{EPlus::FuelTypePropane}"])
2069
+ @end_uses[[FT::Propane, EUT::Fireplace]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{EPlus::FuelTypePropane}"])
2070
+ end
2071
+ @end_uses[[FT::Propane, EUT::Generator]] = EndUse.new(meters: ["Cogeneration:#{EPlus::FuelTypePropane}"])
2072
+ @end_uses[[FT::WoodCord, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypeWoodCord))
2073
+ @end_uses[[FT::WoodCord, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypeWoodCord))
2074
+ @end_uses[[FT::WoodCord, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypeWoodCord}"])
2075
+ @end_uses[[FT::WoodCord, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypeWoodCord}"])
2076
+ @end_uses[[FT::WoodCord, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeWoodCord))
2048
2077
  if @eri_design.nil? # Skip end uses not used by ERI
2049
- @end_uses[[FT::WoodCord, EUT::Grill]] = EndUse.new(meter: "#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{ep_fuel_names[FT::WoodCord]}")
2050
- @end_uses[[FT::WoodCord, EUT::Lighting]] = EndUse.new(meter: "#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{ep_fuel_names[FT::WoodCord]}")
2051
- @end_uses[[FT::WoodCord, EUT::Fireplace]] = EndUse.new(meter: "#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{ep_fuel_names[FT::WoodCord]}")
2052
- end
2053
- @end_uses[[FT::WoodPellets, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingFuel(EPlus::FuelTypeWoodPellets))
2054
- @end_uses[[FT::WoodPellets, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingFuel(EPlus::FuelTypeWoodPellets))
2055
- @end_uses[[FT::WoodPellets, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{ep_fuel_names[FT::WoodPellets]}")
2056
- @end_uses[[FT::WoodPellets, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{ep_fuel_names[FT::WoodPellets]}")
2057
- @end_uses[[FT::WoodPellets, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeWoodPellets))
2078
+ @end_uses[[FT::WoodCord, EUT::Grill]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{EPlus::FuelTypeWoodCord}"])
2079
+ @end_uses[[FT::WoodCord, EUT::Lighting]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{EPlus::FuelTypeWoodCord}"])
2080
+ @end_uses[[FT::WoodCord, EUT::Fireplace]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{EPlus::FuelTypeWoodCord}"])
2081
+ end
2082
+ @end_uses[[FT::WoodPellets, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypeWoodPellets))
2083
+ @end_uses[[FT::WoodPellets, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypeWoodPellets))
2084
+ @end_uses[[FT::WoodPellets, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypeWoodPellets}"])
2085
+ @end_uses[[FT::WoodPellets, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypeWoodPellets}"])
2086
+ @end_uses[[FT::WoodPellets, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeWoodPellets))
2058
2087
  if @eri_design.nil? # Skip end uses not used by ERI
2059
- @end_uses[[FT::WoodPellets, EUT::Grill]] = EndUse.new(meter: "#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{ep_fuel_names[FT::WoodPellets]}")
2060
- @end_uses[[FT::WoodPellets, EUT::Lighting]] = EndUse.new(meter: "#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{ep_fuel_names[FT::WoodPellets]}")
2061
- @end_uses[[FT::WoodPellets, EUT::Fireplace]] = EndUse.new(meter: "#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{ep_fuel_names[FT::WoodPellets]}")
2062
- end
2063
- @end_uses[[FT::Coal, EUT::Heating]] = EndUse.new(variable: OutputVars.SpaceHeatingFuel(EPlus::FuelTypeCoal))
2064
- @end_uses[[FT::Coal, EUT::HotWater]] = EndUse.new(variable: OutputVars.WaterHeatingFuel(EPlus::FuelTypeCoal))
2065
- @end_uses[[FT::Coal, EUT::ClothesDryer]] = EndUse.new(meter: "#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{ep_fuel_names[FT::Coal]}")
2066
- @end_uses[[FT::Coal, EUT::RangeOven]] = EndUse.new(meter: "#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{ep_fuel_names[FT::Coal]}")
2067
- @end_uses[[FT::Coal, EUT::MechVentPreheat]] = EndUse.new(variable: OutputVars.MechVentPreconditioningFuel(EPlus::FuelTypeCoal))
2088
+ @end_uses[[FT::WoodPellets, EUT::Grill]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{EPlus::FuelTypeWoodPellets}"])
2089
+ @end_uses[[FT::WoodPellets, EUT::Lighting]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{EPlus::FuelTypeWoodPellets}"])
2090
+ @end_uses[[FT::WoodPellets, EUT::Fireplace]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{EPlus::FuelTypeWoodPellets}"])
2091
+ end
2092
+ @end_uses[[FT::Coal, EUT::Heating]] = EndUse.new(variables: OutputVars.SpaceHeating(EPlus::FuelTypeCoal))
2093
+ @end_uses[[FT::Coal, EUT::HotWater]] = EndUse.new(variables: OutputVars.WaterHeating(EPlus::FuelTypeCoal))
2094
+ @end_uses[[FT::Coal, EUT::ClothesDryer]] = EndUse.new(meters: ["#{Constants.ObjectNameClothesDryer}:InteriorEquipment:#{EPlus::FuelTypeCoal}"])
2095
+ @end_uses[[FT::Coal, EUT::RangeOven]] = EndUse.new(meters: ["#{Constants.ObjectNameCookingRange}:InteriorEquipment:#{EPlus::FuelTypeCoal}"])
2096
+ @end_uses[[FT::Coal, EUT::MechVentPreheat]] = EndUse.new(variables: OutputVars.MechVentPreconditioning(EPlus::FuelTypeCoal))
2068
2097
  if @eri_design.nil? # Skip end uses not used by ERI
2069
- @end_uses[[FT::Coal, EUT::Grill]] = EndUse.new(meter: "#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{ep_fuel_names[FT::Coal]}")
2070
- @end_uses[[FT::Coal, EUT::Lighting]] = EndUse.new(meter: "#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{ep_fuel_names[FT::Coal]}")
2071
- @end_uses[[FT::Coal, EUT::Fireplace]] = EndUse.new(meter: "#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{ep_fuel_names[FT::Coal]}")
2098
+ @end_uses[[FT::Coal, EUT::Grill]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscGrill}:InteriorEquipment:#{EPlus::FuelTypeCoal}"])
2099
+ @end_uses[[FT::Coal, EUT::Lighting]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscLighting}:InteriorEquipment:#{EPlus::FuelTypeCoal}"])
2100
+ @end_uses[[FT::Coal, EUT::Fireplace]] = EndUse.new(meters: ["#{Constants.ObjectNameMiscFireplace}:InteriorEquipment:#{EPlus::FuelTypeCoal}"])
2072
2101
  end
2073
2102
 
2074
2103
  @end_uses.each do |key, end_use|
@@ -2094,8 +2123,8 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2094
2123
 
2095
2124
  # Peak Fuels
2096
2125
  @peak_fuels = {}
2097
- @peak_fuels[[FT::Elec, PFT::Winter]] = PeakFuel.new(meter: 'Heating:EnergyTransfer', report: 'Peak Electricity Winter Total')
2098
- @peak_fuels[[FT::Elec, PFT::Summer]] = PeakFuel.new(meter: 'Cooling:EnergyTransfer', report: 'Peak Electricity Summer Total')
2126
+ @peak_fuels[[FT::Elec, PFT::Winter]] = PeakFuel.new(meters: ['Heating:EnergyTransfer'], report: 'Peak Electricity Winter Total')
2127
+ @peak_fuels[[FT::Elec, PFT::Summer]] = PeakFuel.new(meters: ['Cooling:EnergyTransfer'], report: 'Peak Electricity Summer Total')
2099
2128
 
2100
2129
  @peak_fuels.each do |key, peak_fuel|
2101
2130
  fuel_type, peak_fuel_type = key
@@ -2108,9 +2137,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2108
2137
  @loads = {}
2109
2138
  @loads[LT::Heating] = Load.new(ems_variable: 'loads_htg_tot')
2110
2139
  @loads[LT::Cooling] = Load.new(ems_variable: 'loads_clg_tot')
2111
- @loads[LT::HotWaterDelivered] = Load.new(variable: OutputVars.WaterHeatingLoad)
2140
+ @loads[LT::HotWaterDelivered] = Load.new(variables: OutputVars.WaterHeatingLoad)
2112
2141
  @loads[LT::HotWaterTankLosses] = Load.new()
2113
- @loads[LT::HotWaterDesuperheater] = Load.new(variable: OutputVars.WaterHeaterLoadDesuperheater)
2142
+ @loads[LT::HotWaterDesuperheater] = Load.new(variables: OutputVars.WaterHeaterLoadDesuperheater)
2114
2143
  @loads[LT::HotWaterSolarThermal] = Load.new()
2115
2144
 
2116
2145
  @loads.each do |load_type, load|
@@ -2137,7 +2166,6 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2137
2166
  @component_loads[[LT::Heating, CLT::NaturalVentilation]] = ComponentLoad.new(ems_variable: 'loads_htg_natvent')
2138
2167
  @component_loads[[LT::Heating, CLT::MechanicalVentilation]] = ComponentLoad.new(ems_variable: 'loads_htg_mechvent')
2139
2168
  @component_loads[[LT::Heating, CLT::WholeHouseFan]] = ComponentLoad.new(ems_variable: 'loads_htg_whf')
2140
- @component_loads[[LT::Heating, CLT::ClothesDryerExhaust]] = ComponentLoad.new(ems_variable: 'loads_htg_cd')
2141
2169
  @component_loads[[LT::Heating, CLT::Ducts]] = ComponentLoad.new(ems_variable: 'loads_htg_ducts')
2142
2170
  @component_loads[[LT::Heating, CLT::InternalGains]] = ComponentLoad.new(ems_variable: 'loads_htg_intgains')
2143
2171
  @component_loads[[LT::Cooling, CLT::Roofs]] = ComponentLoad.new(ems_variable: 'loads_clg_roofs')
@@ -2155,7 +2183,6 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2155
2183
  @component_loads[[LT::Cooling, CLT::NaturalVentilation]] = ComponentLoad.new(ems_variable: 'loads_clg_natvent')
2156
2184
  @component_loads[[LT::Cooling, CLT::MechanicalVentilation]] = ComponentLoad.new(ems_variable: 'loads_clg_mechvent')
2157
2185
  @component_loads[[LT::Cooling, CLT::WholeHouseFan]] = ComponentLoad.new(ems_variable: 'loads_clg_whf')
2158
- @component_loads[[LT::Cooling, CLT::ClothesDryerExhaust]] = ComponentLoad.new(ems_variable: 'loads_clg_cd')
2159
2186
  @component_loads[[LT::Cooling, CLT::Ducts]] = ComponentLoad.new(ems_variable: 'loads_clg_ducts')
2160
2187
  @component_loads[[LT::Cooling, CLT::InternalGains]] = ComponentLoad.new(ems_variable: 'loads_clg_intgains')
2161
2188
 
@@ -2188,8 +2215,8 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2188
2215
 
2189
2216
  # Peak Loads
2190
2217
  @peak_loads = {}
2191
- @peak_loads[LT::Heating] = PeakLoad.new(meter: 'Heating:EnergyTransfer')
2192
- @peak_loads[LT::Cooling] = PeakLoad.new(meter: 'Cooling:EnergyTransfer')
2218
+ @peak_loads[LT::Heating] = PeakLoad.new(meters: ['Heating:EnergyTransfer'])
2219
+ @peak_loads[LT::Cooling] = PeakLoad.new(meters: ['Cooling:EnergyTransfer'])
2193
2220
 
2194
2221
  @peak_loads.each do |load_type, peak_load|
2195
2222
  peak_load.name = "Peak Load: #{load_type}"
@@ -2203,10 +2230,9 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2203
2230
  # Airflows
2204
2231
  @airflows = {}
2205
2232
  @airflows[AFT::Infiltration] = Airflow.new(ems_program: Constants.ObjectNameInfiltration + ' program', ems_variables: [(Constants.ObjectNameInfiltration + ' flow act').gsub(' ', '_')])
2206
- @airflows[AFT::MechanicalVentilation] = Airflow.new(ems_program: Constants.ObjectNameInfiltration + ' program', ems_variables: [Constants.ObjectNameMechanicalVentilationAirflow])
2233
+ @airflows[AFT::MechanicalVentilation] = Airflow.new(ems_program: Constants.ObjectNameInfiltration + ' program', ems_variables: ['Qfan'])
2207
2234
  @airflows[AFT::NaturalVentilation] = Airflow.new(ems_program: Constants.ObjectNameNaturalVentilation + ' program', ems_variables: [(Constants.ObjectNameNaturalVentilation + ' flow act').gsub(' ', '_')])
2208
2235
  @airflows[AFT::WholeHouseFan] = Airflow.new(ems_program: Constants.ObjectNameNaturalVentilation + ' program', ems_variables: [(Constants.ObjectNameWholeHouseFan + ' flow act').gsub(' ', '_')])
2209
- @airflows[AFT::ClothesDryerExhaust] = Airflow.new(ems_program: Constants.ObjectNameInfiltration + ' program', ems_variables: [(Constants.ObjectNameClothesDryerExhaust + ' flow act').gsub(' ', '_')])
2210
2236
 
2211
2237
  @airflows.each do |airflow_type, airflow|
2212
2238
  airflow.name = "Airflow: #{airflow_type}"
@@ -2237,19 +2263,13 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2237
2263
  end
2238
2264
 
2239
2265
  class OutputVars
2240
- def self.SpaceHeatingElectricity
2241
- return { 'OpenStudio::Model::AirLoopHVACUnitarySystem' => ['Unitary System Heating Ancillary Electric Energy'],
2242
- 'OpenStudio::Model::CoilHeatingDXSingleSpeed' => ['Heating Coil Electric Energy', 'Heating Coil Crankcase Heater Electric Energy', 'Heating Coil Defrost Electric Energy'],
2243
- 'OpenStudio::Model::CoilHeatingDXMultiSpeed' => ['Heating Coil Electric Energy', 'Heating Coil Crankcase Heater Electric Energy', 'Heating Coil Defrost Electric Energy'],
2244
- 'OpenStudio::Model::CoilHeatingElectric' => ['Heating Coil Electric Energy', 'Heating Coil Crankcase Heater Electric Energy', 'Heating Coil Defrost Electric Energy'],
2245
- 'OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit' => ['Heating Coil Electric Energy', 'Heating Coil Crankcase Heater Electric Energy', 'Heating Coil Defrost Electric Energy'],
2246
- 'OpenStudio::Model::ZoneHVACBaseboardConvectiveElectric' => ['Baseboard Electric Energy'],
2247
- 'OpenStudio::Model::BoilerHotWater' => ['Boiler Electric Energy'] }
2248
- end
2249
-
2250
- def self.SpaceHeatingFuel(fuel)
2251
- fuel = EPlus.output_fuel_map(fuel)
2252
- return { 'OpenStudio::Model::CoilHeatingGas' => ["Heating Coil #{fuel} Energy"],
2266
+ def self.SpaceHeating(fuel)
2267
+ return { 'OpenStudio::Model::AirLoopHVACUnitarySystem' => ["Unitary System Heating Ancillary #{fuel} Energy"],
2268
+ 'OpenStudio::Model::CoilHeatingDXSingleSpeed' => ["Heating Coil #{fuel} Energy", "Heating Coil Crankcase Heater #{fuel} Energy", "Heating Coil Defrost #{fuel} Energy"],
2269
+ 'OpenStudio::Model::CoilHeatingDXMultiSpeed' => ["Heating Coil #{fuel} Energy", "Heating Coil Crankcase Heater #{fuel} Energy", "Heating Coil Defrost #{fuel} Energy"],
2270
+ 'OpenStudio::Model::CoilHeatingElectric' => ["Heating Coil #{fuel} Energy", "Heating Coil Crankcase Heater #{fuel} Energy", "Heating Coil Defrost #{fuel} Energy"],
2271
+ 'OpenStudio::Model::CoilHeatingGas' => ["Heating Coil #{fuel} Energy"],
2272
+ 'OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit' => ["Heating Coil #{fuel} Energy", "Heating Coil Crankcase Heater #{fuel} Energy", "Heating Coil Defrost #{fuel} Energy"],
2253
2273
  'OpenStudio::Model::ZoneHVACBaseboardConvectiveElectric' => ["Baseboard #{fuel} Energy"],
2254
2274
  'OpenStudio::Model::BoilerHotWater' => ["Boiler #{fuel} Energy"] }
2255
2275
  end
@@ -2265,34 +2285,33 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2265
2285
  end
2266
2286
 
2267
2287
  def self.SpaceCoolingElectricity
2268
- return { 'OpenStudio::Model::CoilCoolingDXSingleSpeed' => ['Cooling Coil Electric Energy', 'Cooling Coil Crankcase Heater Electric Energy'],
2269
- 'OpenStudio::Model::CoilCoolingDXMultiSpeed' => ['Cooling Coil Electric Energy', 'Cooling Coil Crankcase Heater Electric Energy'],
2270
- 'OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit' => ['Cooling Coil Electric Energy', 'Cooling Coil Crankcase Heater Electric Energy'],
2271
- 'OpenStudio::Model::EvaporativeCoolerDirectResearchSpecial' => ['Evaporative Cooler Electric Energy'] }
2288
+ fuel = EPlus::FuelTypeElectricity
2289
+ return { 'OpenStudio::Model::CoilCoolingDXSingleSpeed' => ["Cooling Coil #{fuel} Energy", "Cooling Coil Crankcase Heater #{fuel} Energy"],
2290
+ 'OpenStudio::Model::CoilCoolingDXMultiSpeed' => ["Cooling Coil #{fuel} Energy", "Cooling Coil Crankcase Heater #{fuel} Energy"],
2291
+ 'OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit' => ["Cooling Coil #{fuel} Energy", "Cooling Coil Crankcase Heater #{fuel} Energy"],
2292
+ 'OpenStudio::Model::EvaporativeCoolerDirectResearchSpecial' => ["Evaporative Cooler #{fuel} Energy"] }
2272
2293
  end
2273
2294
 
2274
2295
  def self.DehumidifierElectricity
2275
- return { 'OpenStudio::Model::ZoneHVACDehumidifierDX' => ['Zone Dehumidifier Electric Energy'] }
2276
- end
2277
-
2278
- def self.WaterHeatingElectricity
2279
- return { 'OpenStudio::Model::WaterHeaterMixed' => ['Water Heater Electric Energy', 'Water Heater Off Cycle Parasitic Electric Energy', 'Water Heater On Cycle Parasitic Electric Energy'],
2280
- 'OpenStudio::Model::WaterHeaterStratified' => ['Water Heater Electric Energy', 'Water Heater Off Cycle Parasitic Electric Energy', 'Water Heater On Cycle Parasitic Electric Energy'],
2281
- 'OpenStudio::Model::CoilWaterHeatingAirToWaterHeatPumpWrapped' => ['Cooling Coil Water Heating Electric Energy'] }
2296
+ fuel = EPlus::FuelTypeElectricity
2297
+ return { 'OpenStudio::Model::ZoneHVACDehumidifierDX' => ["Zone Dehumidifier #{fuel} Energy"] }
2282
2298
  end
2283
2299
 
2284
2300
  def self.WaterHeatingElectricitySolarThermalPump
2285
- return { 'OpenStudio::Model::PumpConstantSpeed' => ['Pump Electric Energy'] }
2301
+ fuel = EPlus::FuelTypeElectricity
2302
+ return { 'OpenStudio::Model::PumpConstantSpeed' => ["Pump #{fuel} Energy"] }
2286
2303
  end
2287
2304
 
2288
2305
  def self.WaterHeatingElectricityRecircPump
2289
- return { 'OpenStudio::Model::ElectricEquipment' => ['Electric Equipment Electric Energy'] }
2306
+ fuel = EPlus::FuelTypeElectricity
2307
+ return { 'OpenStudio::Model::ElectricEquipment' => ["Electric Equipment #{fuel} Energy"] }
2290
2308
  end
2291
2309
 
2292
- def self.WaterHeatingFuel(fuel)
2293
- fuel = EPlus.output_fuel_map(fuel)
2294
- return { 'OpenStudio::Model::WaterHeaterMixed' => ["Water Heater #{fuel} Energy"],
2295
- 'OpenStudio::Model::WaterHeaterStratified' => ["Water Heater #{fuel} Energy"] }
2310
+ def self.WaterHeating(fuel)
2311
+ return { 'OpenStudio::Model::WaterHeaterMixed' => ["Water Heater #{fuel} Energy", "Water Heater Off Cycle Parasitic #{fuel} Energy", "Water Heater On Cycle Parasitic #{fuel} Energy"],
2312
+ 'OpenStudio::Model::WaterHeaterStratified' => ["Water Heater #{fuel} Energy", "Water Heater Off Cycle Parasitic #{fuel} Energy", "Water Heater On Cycle Parasitic #{fuel} Energy"],
2313
+ 'OpenStudio::Model::CoilWaterHeatingAirToWaterHeatPumpWrapped' => ["Cooling Coil Water Heating #{fuel} Energy"],
2314
+ 'OpenStudio::Model::FanOnOff' => ["Fan #{fuel} Energy"] }
2296
2315
  end
2297
2316
 
2298
2317
  def self.WaterHeatingLoad
@@ -2312,15 +2331,20 @@ class SimulationOutputReport < OpenStudio::Measure::ReportingMeasure
2312
2331
  return { 'OpenStudio::Model::WaterHeaterStratified' => ['Water Heater Use Side Heat Transfer Energy'] }
2313
2332
  end
2314
2333
 
2315
- def self.MechVentPreconditioningElectricity
2316
- return { 'OpenStudio::Model::OtherEquipment' => ['Other Equipment Electric Energy'] }
2334
+ def self.MechVentPreconditioning(fuel)
2335
+ return { 'OpenStudio::Model::OtherEquipment' => ["Other Equipment #{fuel} Energy"] }
2317
2336
  end
2337
+ end
2338
+ end
2318
2339
 
2319
- def self.MechVentPreconditioningFuel(fuel)
2320
- fuel = EPlus.output_fuel_map(fuel)
2321
- return { 'OpenStudio::Model::OtherEquipment' => ["Other Equipment #{fuel} Energy"] }
2340
+ def get_all_variable_keys(vars)
2341
+ var_keys = []
2342
+ vars.keys.each do |key|
2343
+ vars[key].each do |var_key|
2344
+ var_keys << var_key
2322
2345
  end
2323
2346
  end
2347
+ return var_keys
2324
2348
  end
2325
2349
 
2326
2350
  # register the measure to be used by the application