urbanopt-cli 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (871) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -1
  3. data/CMakeLists.txt +8 -8
  4. data/LICENSE.md +11 -1
  5. data/Rakefile +16 -6
  6. data/example_files/example_project_combined.json +100 -5
  7. data/example_files/mappers/Baseline.rb +31 -18
  8. data/example_files/mappers/CreateBar.rb +16 -6
  9. data/example_files/mappers/EvCharging.rb +20 -10
  10. data/example_files/mappers/Floorspace.rb +16 -6
  11. data/example_files/mappers/HighEfficiencyCreateBar.rb +16 -6
  12. data/example_files/mappers/HighEfficiencyFloorspace.rb +16 -6
  13. data/example_files/mappers/ThermalStorage.rb +16 -6
  14. data/example_files/measures/BuildResidentialModel/measure.rb +211 -129
  15. data/example_files/residential/clothes_dryer.tsv +7 -7
  16. data/example_files/residential/clothes_washer.tsv +1 -1
  17. data/example_files/residential/cooling_system.tsv +42 -22
  18. data/example_files/residential/dishwasher.tsv +1 -1
  19. data/example_files/residential/exhaust.tsv +3 -0
  20. data/example_files/residential/heat_pump.tsv +62 -40
  21. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -0
  22. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +23 -0
  23. data/example_files/resources/hpxml-measures/.gitignore +1 -8
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +633 -1188
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1524 -1211
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +424 -335
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +104 -62
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +31 -55
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +30 -54
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +30 -54
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +30 -54
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +30 -54
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +31 -55
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +31 -55
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +36 -60
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +31 -55
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +31 -55
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +31 -55
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +31 -55
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +31 -55
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +31 -55
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +31 -55
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +31 -55
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +31 -55
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +31 -55
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +31 -55
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +31 -55
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +31 -55
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +31 -56
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +31 -56
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +31 -55
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +31 -56
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +31 -56
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +31 -56
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +31 -56
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +31 -55
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +31 -55
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +31 -55
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +31 -56
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +31 -55
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +32 -56
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +31 -55
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +31 -55
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +31 -55
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +31 -55
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +31 -55
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +31 -55
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +31 -55
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +31 -55
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +31 -55
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +31 -55
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +31 -55
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +31 -55
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +31 -55
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +31 -55
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +31 -55
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +31 -55
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +31 -55
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +31 -55
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +31 -55
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +31 -55
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +31 -55
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +31 -55
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +31 -55
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +31 -55
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +31 -55
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +31 -55
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +31 -55
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +31 -55
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +31 -55
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +31 -55
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +31 -55
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +31 -55
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +31 -55
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +31 -55
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +31 -55
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +31 -55
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +31 -55
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +31 -55
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +31 -55
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +31 -55
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +31 -55
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +31 -55
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +31 -55
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +32 -56
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +31 -55
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +31 -55
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +31 -55
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +31 -55
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +30 -54
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +30 -54
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +30 -54
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +30 -54
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +30 -54
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +31 -56
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +31 -55
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +31 -55
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +31 -55
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +31 -55
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +31 -56
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +31 -56
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +31 -55
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +31 -55
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +31 -55
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +31 -56
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +31 -55
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +31 -55
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +31 -57
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +31 -56
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +31 -56
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +31 -55
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +31 -55
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +32 -57
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +31 -55
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +31 -55
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +31 -55
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +32 -56
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +31 -56
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +31 -56
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +31 -56
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +31 -56
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +31 -55
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +31 -55
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +31 -55
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +31 -55
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +31 -56
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +31 -55
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +31 -55
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +31 -55
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +31 -55
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +31 -57
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-plug-loads-additional-multipliers.osw → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw} +36 -58
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +31 -56
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +31 -56
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +32 -57
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +32 -57
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +32 -57
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +32 -57
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +31 -55
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +31 -56
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +31 -55
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +31 -55
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +31 -55
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +31 -56
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +31 -56
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +31 -55
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +31 -56
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +31 -55
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +31 -55
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +31 -55
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +40 -64
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +31 -55
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +44 -68
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +337 -0
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +31 -55
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +31 -55
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +39 -65
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +32 -56
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +31 -55
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +31 -55
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +31 -55
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +31 -55
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +31 -55
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +31 -55
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +31 -55
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +31 -55
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +29 -53
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +29 -53
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +29 -53
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +31 -55
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -54
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +31 -55
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +34 -58
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +31 -55
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +31 -55
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +31 -55
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +31 -55
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +31 -55
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +31 -55
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +31 -55
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +31 -55
  228. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +57 -56
  229. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +31 -55
  230. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
  231. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
  232. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
  233. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
  234. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
  235. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
  236. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
  237. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
  238. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
  239. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
  240. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
  241. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
  242. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
  243. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
  244. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
  245. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
  246. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
  247. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
  248. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
  249. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
  250. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
  251. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
  252. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
  253. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
  254. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
  255. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  256. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
  257. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  258. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
  259. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  260. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
  261. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  262. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
  263. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  264. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
  265. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  266. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
  267. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  268. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
  269. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  270. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
  271. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  272. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
  273. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
  274. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
  275. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  276. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
  277. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  278. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
  279. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  280. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
  281. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  282. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
  283. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  284. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
  285. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  286. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
  287. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  288. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
  289. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  290. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
  291. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  292. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
  293. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
  294. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
  295. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
  296. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +339 -0
  297. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
  298. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +339 -0
  299. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
  300. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
  301. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
  302. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
  303. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
  304. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +339 -0
  305. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
  306. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
  307. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
  308. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
  309. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
  310. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
  311. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +31 -55
  312. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
  313. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
  314. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
  315. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +31 -55
  316. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
  317. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +31 -55
  318. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +31 -55
  319. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
  320. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
  321. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
  322. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +34 -58
  323. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
  324. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-portable-heater.osw → extra-second-heating-system-portable-heater-to-heating-system.osw} +32 -56
  325. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +31 -55
  326. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
  327. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
  328. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
  329. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
  330. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
  331. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +34 -58
  332. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
  333. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +31 -55
  334. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +31 -55
  335. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +31 -55
  336. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +31 -55
  337. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
  338. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +31 -55
  339. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +31 -55
  340. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +31 -55
  341. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +31 -55
  342. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +31 -55
  343. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
  344. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/{multipliers-without-plug-loads.osw → multipliers-without-tv-plug-loads.osw} +35 -59
  345. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +337 -0
  346. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
  347. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +31 -55
  348. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +31 -55
  349. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +31 -55
  350. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
  351. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +31 -55
  352. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
  353. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +31 -55
  354. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +31 -55
  355. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +31 -55
  356. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +31 -55
  357. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +31 -55
  358. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +31 -55
  359. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +31 -55
  360. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +31 -55
  361. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -57
  362. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +31 -55
  363. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
  364. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
  365. data/example_files/resources/hpxml-measures/Changelog.md +238 -0
  366. data/example_files/resources/hpxml-measures/Gemfile +4 -2
  367. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +265 -838
  368. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +135 -114
  369. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +5 -97
  370. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +573 -193
  371. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +2 -28
  372. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +114 -22
  373. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +107 -176
  374. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -180
  375. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +481 -94
  376. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +2 -6
  377. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +23 -11
  378. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +27 -25
  379. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +735 -453
  380. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +417 -105
  381. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1377 -1335
  382. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1393 -1467
  383. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +2 -1
  384. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +20 -7
  385. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +64 -3
  386. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +2 -22
  387. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -3
  388. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +15 -6
  389. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +7 -1
  390. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
  391. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +1 -1
  392. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +3 -4
  393. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +31 -30
  394. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +4 -1
  395. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +62 -16
  396. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +507 -628
  397. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +3 -0
  398. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +4 -1
  399. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +321 -6
  400. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -0
  401. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +3 -0
  402. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -0
  403. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +3 -0
  404. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +3 -0
  405. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +25 -1
  406. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +3 -0
  407. data/example_files/resources/hpxml-measures/README.md +4 -4
  408. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +111 -37
  409. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +318 -490
  410. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +237 -183
  411. data/example_files/resources/hpxml-measures/docs/source/conf.py +4 -1
  412. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +2 -2
  413. data/example_files/resources/hpxml-measures/docs/source/intro.rst +3 -105
  414. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +476 -351
  415. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +154 -130
  416. data/example_files/resources/hpxml-measures/tasks.rb +1287 -511
  417. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
  418. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
  419. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
  420. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
  421. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
  422. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
  423. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
  424. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
  425. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +23 -5
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +1 -1
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +2 -1
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +2 -1
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +2 -1
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +534 -0
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +2 -1
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +1 -1
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +1 -1
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +1 -0
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +1 -1
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +1 -1
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +1 -1
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +1 -1
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +3 -3
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +1 -1
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +1 -1
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +1 -1
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +1 -1
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +1 -1
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +1 -1
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +1 -1
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +1 -1
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +1 -1
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +0 -1
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +4 -4
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +20 -4
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +27 -18
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +27 -18
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +0 -1
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +4 -4
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +20 -4
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +20 -4
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +22 -11
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +0 -1
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +4 -4
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +20 -4
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +22 -12
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +22 -12
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +1 -1
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +2 -3
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +1 -1
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +2 -1
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +1 -1
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +1 -1
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +1 -1
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +1 -1
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +1 -1
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +1 -1
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +14 -2
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +0 -1
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +0 -1
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +1 -1
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +563 -564
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +1 -1
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +1 -4
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +1 -1
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +1 -4
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +1 -1
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +0 -1
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +0 -1
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +0 -1
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +0 -1
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +0 -1
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +1 -1
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +1 -1
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +1 -1
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +0 -1
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +1 -1
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +0 -1
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +1 -0
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +1 -1
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +1 -1
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +1 -1
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +1 -1
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +1 -1
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +1 -1
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +1 -1
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +1 -1
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +1 -1
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +1 -1
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +1 -1
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +1 -1
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +1 -1
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +1 -1
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +1 -1
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +1 -1
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +1 -1
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +1 -1
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +1 -1
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +1 -1
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +1 -1
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +1 -1
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +1 -1
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +1 -1
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +1 -1
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +1 -1
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +1 -1
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +1 -1
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +1 -1
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +1 -1
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +1 -1
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +2 -2
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +1 -1
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +1 -1
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +1 -1
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +1 -1
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +1 -1
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +1 -1
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +1 -1
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +1 -1
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +1 -1
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +1 -1
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +1 -1
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +6 -1
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +1 -1
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +600 -0
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +1 -1
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +1 -1
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +1 -1
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2474 -0
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +1 -1
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +1 -1
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +576 -561
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +1 -1
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +643 -0
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +1 -1
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +1 -1
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +1 -1
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +3 -3
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +1 -1
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +2 -2
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +2 -2
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +1 -1
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +2 -2
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +1 -1
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +1 -1
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +1 -1
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +555 -0
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +561 -0
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +1 -4
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +1 -1
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +1 -1
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +552 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +557 -0
  570. 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 → base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml} +1 -4
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed.xml} +1 -4
  572. 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 → base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml} +559 -559
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed.xml} +556 -556
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml} +559 -556
  575. 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 → base-hvac-autosize-air-to-air-heat-pump-var-speed.xml} +556 -559
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml → base-hvac-autosize-boiler-elec-only.xml} +517 -518
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml → base-hvac-autosize-boiler-gas-central-ac-1-speed.xml} +568 -569
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml → base-hvac-autosize-boiler-gas-only.xml} +518 -519
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml → base-hvac-autosize-central-ac-only-1-speed.xml} +1 -4
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml → base-hvac-autosize-central-ac-only-2-speed.xml} +546 -546
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml → base-hvac-autosize-central-ac-only-var-speed.xml} +546 -546
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml → base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml} +1 -7
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml} +1 -4
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml} +1 -4
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml → base-hvac-autosize-elec-resistance-only.xml} +508 -509
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml → base-hvac-autosize-evap-cooler-furnace-gas.xml} +552 -552
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml → base-hvac-autosize-floor-furnace-propane-only.xml} +511 -512
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml → base-hvac-autosize-furnace-elec-only.xml} +546 -546
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-2-speed.xml} +559 -559
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-var-speed.xml} +559 -559
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +547 -0
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml → base-hvac-autosize-furnace-gas-room-ac.xml} +557 -557
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +554 -0
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +559 -0
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml} +561 -562
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml → base-hvac-autosize-ground-to-air-heat-pump.xml} +558 -559
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +546 -0
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml} +1 -4
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml} +1 -4
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml} +1 -4
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +556 -0
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-room-ac-only-autosize.xml → base-hvac-autosize-room-ac-only.xml} +507 -508
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-stove-oil-only-autosize.xml → base-hvac-autosize-stove-oil-only.xml} +511 -512
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml → base-hvac-autosize-wall-furnace-elec-only.xml} +511 -512
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +559 -559
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +0 -1
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +0 -1
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +1 -2
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +0 -1
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +0 -1
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +0 -1
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +0 -1
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +1 -4
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +1 -1
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +1 -1
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +1 -7
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +0 -1
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +1 -4
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +1 -4
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +1 -1
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +1 -1
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +1 -4
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +1 -1
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +0 -1
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +2 -1
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -1
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -4
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +512 -513
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +512 -513
  631. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +547 -547
  632. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +1 -1
  633. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +1 -1
  634. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +1 -1
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +1 -1
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +547 -550
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +1 -1
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +1 -1
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +1 -1
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +1 -1
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +0 -1
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +556 -0
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +562 -0
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +561 -562
  645. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/slab-zero-exposed-perimeter.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +567 -561
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +565 -562
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +566 -0
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +566 -0
  649. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml} +570 -564
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +571 -0
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +571 -0
  652. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-install-quality-all-furnace-gas-only.xml} +551 -549
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +565 -0
  654. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml} +551 -548
  655. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +564 -558
  656. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +568 -0
  657. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +565 -0
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +569 -0
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +1 -4
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +0 -4
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +1 -4
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +1 -4
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +1 -4
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +0 -4
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +916 -913
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +837 -834
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +0 -1
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +1 -1
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +1 -1
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +0 -1
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +0 -1
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +1 -1
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +512 -513
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +512 -513
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +1 -1
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +1 -1
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +512 -513
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +1 -1
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +1 -1
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -1
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +1 -1
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +34 -23
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +1 -1
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +34 -23
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +562 -0
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +516 -0
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +1 -1
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +516 -0
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +576 -0
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +1 -1
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +1 -1
  693. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +0 -1
  694. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -1
  695. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +1 -1
  696. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +1 -1
  697. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +1 -1
  698. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +1 -1
  699. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +1 -1
  700. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +1 -1
  701. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +1 -1
  702. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +2 -1
  703. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +1 -1
  704. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +1 -1
  705. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +1 -0
  706. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +1 -1
  707. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +5 -1
  708. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +9 -1
  709. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +1 -1
  710. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +1 -1
  711. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +563 -0
  712. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +5 -1
  713. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1654 -0
  714. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +1 -1
  715. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +563 -0
  716. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +1 -1
  717. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +1 -1
  718. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +1 -1
  719. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +1 -1
  720. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +1 -1
  721. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +1 -1
  722. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +1 -1
  723. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +1 -1
  724. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
  725. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +0 -1
  726. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +1 -1
  727. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +1 -1
  728. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +1 -1
  729. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +534 -0
  730. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +534 -0
  731. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -1
  732. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +1 -1
  733. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +1 -1
  734. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +1 -1
  735. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +562 -0
  736. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +562 -0
  737. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +1 -1
  738. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +1 -1
  739. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +1 -1
  740. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +1 -1
  741. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +2 -2
  742. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +2 -2
  743. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +4 -4
  744. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +447 -0
  745. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +1 -1
  746. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +1 -1
  747. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +1 -1
  748. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +1 -1
  749. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +1 -1
  750. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +11 -58
  751. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +759 -0
  752. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +758 -0
  753. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +760 -0
  754. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +758 -0
  755. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +562 -0
  756. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +459 -0
  757. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +578 -0
  758. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +1 -4
  759. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +916 -913
  760. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +916 -913
  761. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +2 -7
  762. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -1
  763. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -1
  764. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +916 -913
  765. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +1 -1
  766. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +1 -1
  767. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +562 -0
  768. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +1 -1
  769. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +1 -1
  770. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +1 -1
  771. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +1 -1
  772. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +2 -2
  773. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +1 -1
  774. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +1 -1
  775. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +1 -1
  776. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +573 -0
  777. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +590 -0
  778. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +590 -0
  779. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +562 -0
  780. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +1 -1
  781. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +1 -1
  782. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +464 -0
  783. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +562 -0
  784. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +450 -0
  785. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +1 -4
  786. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +0 -1
  787. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +1 -1
  788. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +1 -1
  789. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +472 -0
  790. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +1 -1
  791. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +6 -1
  792. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +1 -1
  793. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +912 -909
  794. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +1 -1
  795. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +1 -1
  796. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +1 -1
  797. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +12 -2
  798. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +1 -1
  799. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1654 -0
  800. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1654 -0
  801. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ideal-air.xml → invalid_files/multiple-shared-cooling-systems.xml} +431 -498
  802. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
  803. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +1 -1
  804. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +1 -1
  805. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +1 -1
  806. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +1 -1
  807. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +1 -1
  808. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +1 -1
  809. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +1 -1
  810. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +1 -4
  811. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -1
  812. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -1
  813. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +1 -4
  814. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -1
  815. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +1 -1
  816. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +1 -1
  817. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +1 -1
  818. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +1 -1
  819. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +1 -1
  820. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +1 -1
  821. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +1 -1
  822. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +1 -1
  823. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +1 -1
  824. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +1 -1
  825. data/example_files/resources/hpxml-measures/workflow/template.osw +4 -1
  826. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +0 -3
  827. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +0 -3
  828. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +0 -3
  829. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +0 -3
  830. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +0 -3
  831. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +0 -3
  832. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +0 -3
  833. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +0 -3
  834. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +0 -3
  835. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +0 -3
  836. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +0 -3
  837. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +0 -3
  838. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +0 -3
  839. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +0 -3
  840. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +0 -3
  841. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +0 -3
  842. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +0 -3
  843. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +0 -3
  844. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +0 -3
  845. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +0 -3
  846. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +0 -3
  847. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +0 -3
  848. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +0 -3
  849. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +0 -3
  850. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +0 -3
  851. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +0 -3
  852. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +232 -360
  853. data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
  854. data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
  855. data/lib/uo_cli.rb +187 -44
  856. data/lib/uo_cli/version.rb +17 -7
  857. data/requirements.txt +2 -0
  858. data/uo_cli.gemspec +2 -2
  859. metadata +248 -64
  860. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
  861. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
  862. data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
  863. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
  864. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
  865. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
  866. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
  867. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
  868. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
  869. data/example_files/resources/hpxml-measures/.circleci/config.yml +0 -20
  870. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
  871. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +0 -369
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>1539.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>12312.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>3078.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>24624.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -28,9 +28,6 @@
28
28
  <NumberofBedrooms>3</NumberofBedrooms>
29
29
  <ConditionedFloorArea>3078.0</ConditionedFloorArea>
30
30
  <ConditionedBuildingVolume>24624.0</ConditionedBuildingVolume>
31
- <extension>
32
- <UseOnlyIdealAirSystem>true</UseOnlyIdealAirSystem>
33
- </extension>
34
31
  </BuildingConstruction>
35
32
  </BuildingSummary>
36
33
  <ClimateandRiskZones>
@@ -2,9 +2,9 @@
2
2
 
3
3
  require_relative '../../HPXMLtoOpenStudio/resources/minitest_helper'
4
4
  require 'openstudio'
5
- require 'openstudio/measure/ShowRunnerOutput'
6
5
  require 'minitest/autorun'
7
6
  require 'fileutils'
7
+ require 'parallel'
8
8
  require_relative '../../HPXMLtoOpenStudio/measure.rb'
9
9
  require_relative '../../HPXMLtoOpenStudio/resources/constants'
10
10
  require_relative '../../HPXMLtoOpenStudio/resources/meta_measure'
@@ -12,12 +12,8 @@ require_relative '../../HPXMLtoOpenStudio/resources/unit_conversions'
12
12
  require_relative '../../HPXMLtoOpenStudio/resources/xmlhelper'
13
13
 
14
14
  class HPXMLTest < MiniTest::Test
15
- @@simulation_runtime_key = 'Simulation Runtime'
16
15
  @@workflow_runtime_key = 'Workflow Runtime'
17
16
 
18
- @@os_log = OpenStudio::StringStreamLogSink.new
19
- @@os_log.setLogLevel(OpenStudio::Warn)
20
-
21
17
  def before_setup
22
18
  @this_dir = File.dirname(__FILE__)
23
19
  @results_dir = File.join(@this_dir, 'results')
@@ -25,44 +21,37 @@ class HPXMLTest < MiniTest::Test
25
21
  end
26
22
 
27
23
  def test_simulations
28
- sample_files_dir = File.absolute_path(File.join(@this_dir, '..', 'sample_files'))
29
- autosize_dir = File.absolute_path(File.join(@this_dir, '..', 'sample_files', 'hvac_autosizing'))
30
-
31
24
  results_out = File.join(@results_dir, 'results.csv')
32
25
  File.delete(results_out) if File.exist? results_out
33
26
  sizing_out = File.join(@results_dir, 'results_hvac_sizing.csv')
34
27
  File.delete(sizing_out) if File.exist? sizing_out
35
28
 
36
- test_dirs = [sample_files_dir,
37
- autosize_dir]
38
-
39
29
  xmls = []
40
- test_dirs.each do |test_dir|
41
- Dir["#{test_dir}/*.xml"].sort.each do |xml|
42
- xmls << File.absolute_path(xml)
43
- end
30
+ sample_files_dir = File.absolute_path(File.join(@this_dir, '..', 'sample_files'))
31
+ Dir["#{sample_files_dir}/*.xml"].sort.each do |xml|
32
+ xmls << File.absolute_path(xml)
44
33
  end
45
34
 
46
35
  # Test simulations
47
36
  puts "Running #{xmls.size} HPXML files..."
48
37
  all_results = {}
49
38
  all_sizing_results = {}
50
- xmls.each do |xml|
51
- all_results[xml], all_sizing_results[xml] = _run_xml(xml)
39
+ Parallel.map(xmls, in_threads: Parallel.processor_count) do |xml|
40
+ xml_name = File.basename(xml)
41
+ all_results[xml_name], all_sizing_results[xml_name] = _run_xml(xml, Parallel.worker_number)
52
42
  end
53
43
 
54
- _write_summary_results(all_results, results_out)
55
- _write_hvac_sizing_results(all_sizing_results, sizing_out)
44
+ _write_summary_results(all_results.sort_by { |k, v| k.downcase }.to_h, results_out)
45
+ _write_hvac_sizing_results(all_sizing_results.sort_by { |k, v| k.downcase }.to_h, sizing_out)
56
46
  end
57
47
 
58
48
  def test_ashrae_140
59
- ashrae140_dir = File.absolute_path(File.join(@this_dir, 'ASHRAE_Standard_140'))
60
-
61
49
  ashrae140_out = File.join(@results_dir, 'results_ashrae_140.csv')
62
50
  File.delete(ashrae140_out) if File.exist? ashrae140_out
63
51
 
64
52
  xmls = []
65
- Dir["#{ashrae140_dir}/*.xml"].sort.each do |xml|
53
+ ashrae_140_dir = File.absolute_path(File.join(@this_dir, 'ASHRAE_Standard_140'))
54
+ Dir["#{ashrae_140_dir}/*.xml"].sort.each do |xml|
66
55
  xmls << File.absolute_path(xml)
67
56
  end
68
57
 
@@ -70,27 +59,28 @@ class HPXMLTest < MiniTest::Test
70
59
  puts "Running #{xmls.size} HPXML files..."
71
60
  all_results = {}
72
61
  all_sizing_results = {}
73
- xmls.each do |xml|
74
- all_results[xml], all_sizing_results[xml] = _run_xml(xml)
62
+ Parallel.map(xmls, in_threads: Parallel.processor_count) do |xml|
63
+ xml_name = File.basename(xml)
64
+ all_results[xml_name], all_sizing_results[xml_name] = _run_xml(xml, Parallel.worker_number)
75
65
  end
76
66
 
77
- _write_ashrae_140_results(all_results, ashrae140_dir, ashrae140_out)
67
+ _write_ashrae_140_results(all_results.sort_by { |k, v| k.downcase }.to_h, ashrae140_out)
78
68
  end
79
69
 
80
- def test_run_simulation_rb
81
- # Check that simulation works using run_simulation.rb script
70
+ def test_run_simulation_json_output
71
+ # Check that the simulation produces JSON outputs (instead of CSV outputs) if requested
82
72
  os_cli = OpenStudio.getOpenStudioCLI
83
73
  rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
84
74
  xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base.xml')
85
- command = "#{os_cli} #{rb_path} -x #{xml} --debug --hourly ALL"
75
+ command = "#{os_cli} #{rb_path} -x #{xml} --debug --hourly ALL --output-format json"
86
76
  system(command, err: File::NULL)
87
77
 
88
78
  # Check for output files
89
79
  sql_path = File.join(File.dirname(xml), 'run', 'eplusout.sql')
90
80
  assert(File.exist? sql_path)
91
- csv_output_path = File.join(File.dirname(xml), 'run', 'results_annual.csv')
81
+ csv_output_path = File.join(File.dirname(xml), 'run', 'results_annual.json')
92
82
  assert(File.exist? csv_output_path)
93
- csv_output_path = File.join(File.dirname(xml), 'run', 'results_timeseries.csv')
83
+ csv_output_path = File.join(File.dirname(xml), 'run', 'results_timeseries.json')
94
84
  assert(File.exist? csv_output_path)
95
85
 
96
86
  # Check for debug files
@@ -154,29 +144,42 @@ class HPXMLTest < MiniTest::Test
154
144
  def test_invalid
155
145
  sample_files_dir = File.join(@this_dir, '..', 'sample_files')
156
146
 
157
- expected_error_msgs = { 'cfis-with-hydronic-distribution.xml' => ["Attached HVAC distribution system 'HVACDistribution' cannot be hydronic for ventilation fan 'MechanicalVentilation'."],
158
- 'clothes-dryer-location.xml' => ["ClothesDryer location is 'garage' but building does not have this location specified."],
159
- 'clothes-washer-location.xml' => ["ClothesWasher location is 'garage' but building does not have this location specified."],
160
- 'cooking-range-location.xml' => ["CookingRange location is 'garage' but building does not have this location specified."],
161
- 'dishwasher-location.xml' => ["Dishwasher location is 'garage' but building does not have this location specified."],
147
+ expected_error_msgs = { 'boiler-invalid-afue.xml' => ['Expected AnnualHeatingEfficiency[Units="AFUE"]/Value to be less than or equal to 1'],
148
+ 'cfis-with-hydronic-distribution.xml' => ["Attached HVAC distribution system 'HVACDistribution' cannot be hydronic for ventilation fan 'MechanicalVentilation'."],
149
+ 'clothes-dryer-location.xml' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
150
+ 'clothes-washer-location.xml' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
151
+ 'cooking-range-location.xml' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
152
+ 'dehumidifier-fraction-served.xml' => ['Expected FractionDehumidificationLoadServed to sum to <= 1, but calculated sum is 1.1.'],
153
+ 'dehumidifier-setpoints.xml' => ['All dehumidifiers must have the same setpoint but multiple setpoints were specified.'],
154
+ 'dishwasher-location.xml' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
162
155
  'dhw-frac-load-served.xml' => ['Expected FractionDHWLoadServed to sum to 1, but calculated sum is 1.15.'],
163
156
  'dhw-invalid-ef-tank.xml' => ['Expected EnergyFactor to be less than 1 [context: /HPXML/Building/BuildingDetails/Systems/WaterHeating/WaterHeatingSystem[WaterHeaterType="storage water heater"]]'],
164
157
  'dhw-invalid-uef-tank-heat-pump.xml' => ['Expected UniformEnergyFactor to be greater than 1 [context: /HPXML/Building/BuildingDetails/Systems/WaterHeating/WaterHeatingSystem[WaterHeaterType="heat pump water heater"]]'],
165
- 'duct-location.xml' => ["Duct location is 'garage' but building does not have this location specified."],
166
- 'duct-location-unconditioned-space.xml' => ["Expected DuctLocation to be 'living space' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'attic - vented' or 'attic - unvented' or 'garage' or 'exterior wall' or 'under slab' or 'roof deck' or 'outside' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/*/Ducts[DuctType=\"supply\" or DuctType=\"return\"]]"],
158
+ 'duct-leakage-cfm25.xml' => ['Expected Value to be greater than or equal to 0 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/DuctLeakageMeasurement/DuctLeakage[Units="CFM25"]]'],
159
+ 'duct-leakage-percent.xml' => ['Expected Value to be less than 1 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/DuctLeakageMeasurement/DuctLeakage[Units="Percent"]]'],
160
+ 'duct-location.xml' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
161
+ 'duct-location-unconditioned-space.xml' => ["Expected DuctLocation to be 'living space' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'attic - vented' or 'attic - unvented' or 'garage' or 'exterior wall' or 'under slab' or 'roof deck' or 'outside' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/*/Ducts]"],
167
162
  'duplicate-id.xml' => ["Duplicate SystemIdentifier IDs detected for 'WindowNorth'."],
168
- 'enclosure-attic-missing-roof.xml' => ['There must be at least one roof adjacent to attic - unvented.'],
169
- 'enclosure-basement-missing-exterior-foundation-wall.xml' => ['There must be at least one exterior foundation wall adjacent to basement - unconditioned.'],
170
- 'enclosure-basement-missing-slab.xml' => ['There must be at least one slab adjacent to basement - unconditioned.'],
171
- 'enclosure-floor-area-exceeds-cfa.xml' => ['Sum of floor/slab area adjacent to conditioned space (1350.0) is greater than conditioned floor area (540.0).'],
172
- 'enclosure-garage-missing-exterior-wall.xml' => ['There must be at least one exterior wall/foundation wall adjacent to garage.'],
173
- 'enclosure-garage-missing-roof-ceiling.xml' => ['There must be at least one roof/ceiling adjacent to garage.'],
174
- 'enclosure-garage-missing-slab.xml' => ['There must be at least one slab adjacent to garage.'],
175
- 'enclosure-living-missing-ceiling-roof.xml' => ['There must be at least one ceiling/roof adjacent to conditioned space.'],
176
- 'enclosure-living-missing-exterior-wall.xml' => ['There must be at least one exterior wall adjacent to conditioned space.'],
177
- 'enclosure-living-missing-floor-slab.xml' => ['There must be at least one floor/slab adjacent to conditioned space.'],
178
- 'heat-pump-mixed-fixed-and-autosize-capacities.xml' => ["HeatPump 'HeatPump' must have both HeatingCapacity and HeatingCapacity17F provided or not provided."],
179
- 'heat-pump-mixed-fixed-and-autosize-capacities2.xml' => ["HeatPump 'HeatPump' must have both HeatingCapacity and BackupHeatingCapacity provided or not provided."],
163
+ 'enclosure-attic-missing-roof.xml' => ['There must be at least one roof adjacent to "attic - unvented". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="attic - unvented" or ExteriorAdjacentTo="attic - unvented"]]]'],
164
+ 'enclosure-basement-missing-exterior-foundation-wall.xml' => ['There must be at least one exterior foundation wall adjacent to "basement - unconditioned". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="basement - unconditioned" or ExteriorAdjacentTo="basement - unconditioned"]]]'],
165
+ 'enclosure-basement-missing-slab.xml' => ['There must be at least one slab adjacent to "basement - unconditioned". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="basement - unconditioned" or ExteriorAdjacentTo="basement - unconditioned"]]]'],
166
+ 'enclosure-floor-area-exceeds-cfa.xml' => ['Expected ConditionedFloorArea to be greater than or equal to the sum of conditioned slab/floor areas. [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
167
+ 'enclosure-floor-area-exceeds-cfa2.xml' => ['Expected ConditionedFloorArea to be greater than or equal to the sum of conditioned slab/floor areas. [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
168
+ 'enclosure-garage-missing-exterior-wall.xml' => ['There must be at least one exterior wall/foundation wall adjacent to "garage". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="garage" or ExteriorAdjacentTo="garage"]]]'],
169
+ 'enclosure-garage-missing-roof-ceiling.xml' => ['There must be at least one roof/ceiling adjacent to "garage". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="garage" or ExteriorAdjacentTo="garage"]]]'],
170
+ 'enclosure-garage-missing-slab.xml' => ['There must be at least one slab adjacent to "garage". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="garage" or ExteriorAdjacentTo="garage"]]]'],
171
+ 'enclosure-living-missing-ceiling-roof.xml' => ['There must be at least one ceiling/roof adjacent to conditioned space. [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="living space"]]]',
172
+ 'There must be at least one floor adjacent to "attic - unvented". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="attic - unvented" or ExteriorAdjacentTo="attic - unvented"]]]'],
173
+ 'enclosure-living-missing-exterior-wall.xml' => ['There must be at least one exterior wall adjacent to conditioned space. [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="living space"]]]'],
174
+ 'enclosure-living-missing-floor-slab.xml' => ['There must be at least one floor/slab adjacent to conditioned space. [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="living space"]]]'],
175
+ 'frac-sensible-plug-load.xml' => ['Expected extension/FracSensible to be greater than or equal to 0 [context: /HPXML/Building/BuildingDetails/MiscLoads/PlugLoad[PlugLoadType="other" or PlugLoadType="TV other" or PlugLoadType="electric vehicle charging" or PlugLoadType="well pump"]]'],
176
+ 'frac-total-plug-load.xml' => ['Expected sum of extension/FracSensible and extension/FracLatent to be less than or equal to 1 [context: /HPXML/Building/BuildingDetails/MiscLoads/PlugLoad[PlugLoadType="other" or PlugLoadType="TV other" or PlugLoadType="electric vehicle charging" or PlugLoadType="well pump"]]'],
177
+ 'frac-sensible-fuel-load.xml' => ['Expected extension/FracSensible to be greater than or equal to 0 [context: /HPXML/Building/BuildingDetails/MiscLoads/FuelLoad[FuelLoadType="grill" or FuelLoadType="lighting" or FuelLoadType="fireplace"]]'],
178
+ 'frac-total-fuel-load.xml' => ['Expected sum of extension/FracSensible and extension/FracLatent to be less than or equal to 1 [context: /HPXML/Building/BuildingDetails/MiscLoads/FuelLoad[FuelLoadType="grill" or FuelLoadType="lighting" or FuelLoadType="fireplace"]]'],
179
+ 'furnace-invalid-afue.xml' => ['Expected AnnualHeatingEfficiency[Units="AFUE"]/Value to be less than or equal to 1'],
180
+ 'generator-output-greater-than-consumption.xml' => ['Expected AnnualConsumptionkBtu to be greater than AnnualOutputkWh*3412 [context: /HPXML/Building/BuildingDetails/Systems/extension/Generators/Generator]'],
181
+ 'generator-number-of-bedrooms-served.xml' => ['Expected NumberofBedroomsServed to be greater than ../../../../BuildingSummary/BuildingConstruction/NumberofBedrooms [context: /HPXML/Building/BuildingDetails/Systems/extension/Generators/Generator[IsSharedSystem="true"]]'],
182
+ 'heat-pump-mixed-fixed-and-autosize-capacities.xml' => ['Expected 0 or 2 element(s) for xpath: HeatingCapacity | BackupHeatingCapacity [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACPlant/HeatPump[BackupSystemFuel]]'],
180
183
  'hvac-invalid-distribution-system-type.xml' => ["Incorrect HVAC distribution system type for HVAC type: 'Furnace'. Should be one of: ["],
181
184
  'hvac-distribution-multiple-attached-cooling.xml' => ["Multiple cooling systems found attached to distribution system 'HVACDistribution2'."],
182
185
  'hvac-distribution-multiple-attached-heating.xml' => ["Multiple heating systems found attached to distribution system 'HVACDistribution'."],
@@ -184,14 +187,12 @@ class HPXMLTest < MiniTest::Test
184
187
  'hvac-dse-multiple-attached-heating.xml' => ["Multiple heating systems found attached to distribution system 'HVACDistribution'."],
185
188
  'hvac-frac-load-served.xml' => ['Expected FractionCoolLoadServed to sum to <= 1, but calculated sum is 1.2.',
186
189
  'Expected FractionHeatLoadServed to sum to <= 1, but calculated sum is 1.1.'],
187
- 'hvac-distribution-return-duct-leakage-missing.xml' => ["Return ducts exist but leakage was not specified for distribution system 'HVACDistribution'."],
188
- 'hvac-inconsistent-fan-powers.xml' => ["Fan powers for heating system 'HeatingSystem' and cooling system 'CoolingSystem' must be the same."],
189
- 'invalid-datatype-boolean.xml' => ["Cannot convert 'FOOBAR' to boolean."],
190
- 'invalid-datatype-boolean2.xml' => ["Cannot convert '' to boolean."],
191
- 'invalid-datatype-integer.xml' => ["Cannot convert '2.5' to integer."],
192
- 'invalid-datatype-integer2.xml' => ["Cannot convert '' to integer."],
193
- 'invalid-datatype-float.xml' => ["Cannot convert 'FOOBAR' to float."],
194
- 'invalid-datatype-float2.xml' => ["Cannot convert '' to float."],
190
+ 'hvac-distribution-return-duct-leakage-missing.xml' => ['Expected 1 element(s) for xpath: DuctLeakageMeasurement[DuctType="return"]/DuctLeakage[(Units="CFM25" or Units="Percent") and TotalOrToOutside="to outside"] [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution]'],
191
+ 'hvac-inconsistent-fan-powers.xml' => ["Fan powers for heating system 'HeatingSystem' and cooling system 'CoolingSystem' are attached to a single distribution system and therefore must be the same."],
192
+ 'invalid-assembly-effective-rvalue.xml' => ['Expected Insulation/AssemblyEffectiveRValue to be greater than 0 [context: /HPXML/Building/BuildingDetails/Enclosure/Walls/Wall]'],
193
+ 'invalid-datatype-boolean.xml' => ["Cannot convert 'FOOBAR' to boolean for Roof/RadiantBarrier."],
194
+ 'invalid-datatype-integer.xml' => ["Cannot convert '2.5' to integer for BuildingConstruction/NumberofBedrooms."],
195
+ 'invalid-datatype-float.xml' => ["Cannot convert 'FOOBAR' to float for Slab/extension/CarpetFraction."],
195
196
  'invalid-daylight-saving.xml' => ['Daylight Saving End Day of Month (31) must be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.'],
196
197
  'invalid-distribution-cfa-served.xml' => ['The total conditioned floor area served by the HVAC distribution system(s) for heating is larger than the conditioned floor area of the building.',
197
198
  'The total conditioned floor area served by the HVAC distribution system(s) for cooling is larger than the conditioned floor area of the building.'],
@@ -205,6 +206,12 @@ class HPXMLTest < MiniTest::Test
205
206
  "The building is of type 'single-family detached' but the surface 'FoundationWallOther' is adjacent to Attached/Multifamily space 'other housing unit'.",
206
207
  "The building is of type 'single-family detached' but the surface 'FloorOther' is adjacent to Attached/Multifamily space 'other housing unit'.",
207
208
  "The building is of type 'single-family detached' but the surface 'CeilingOther' is adjacent to Attached/Multifamily space 'other housing unit'."],
209
+ 'invalid-foundation-wall-properties.xml' => ['Expected DepthBelowGrade to be less than or equal to Height [context: /HPXML/Building/BuildingDetails/Enclosure/FoundationWalls/FoundationWall]',
210
+ 'Expected extension/DistanceToBottomOfInsulation to be greater than or equal to extension/DistanceToTopOfInsulation [context: /HPXML/Building/BuildingDetails/Enclosure/FoundationWalls/FoundationWall/Insulation/Layer[InstallationType="continuous - exterior" or InstallationType="continuous - interior"]]',
211
+ 'Expected extension/DistanceToBottomOfInsulation to be less than or equal to ../../Height [context: /HPXML/Building/BuildingDetails/Enclosure/FoundationWalls/FoundationWall/Insulation/Layer[InstallationType="continuous - exterior" or InstallationType="continuous - interior"]]'],
212
+ 'invalid-id.xml' => ["Empty SystemIdentifier ID ('') detected for skylights."],
213
+ 'invalid-id2.xml' => ['Expected id attribute for SystemIdentifier [context: /HPXML/Building/BuildingDetails/Enclosure/Skylights/Skylight]'],
214
+ 'invalid-infiltration-volume.xml' => ['Expected InfiltrationVolume to be greater than or equal to ../../../BuildingSummary/BuildingConstruction/ConditionedBuildingVolume [context: /HPXML/Building/BuildingDetails/Enclosure/AirInfiltration/AirInfiltrationMeasurement[BuildingAirLeakage/UnitofMeasure[text()="ACH" or text()="CFM"]]]'],
208
215
  'invalid-input-parameters.xml' => ["Expected Transaction to be 'create' or 'update' [context: /HPXML/XMLTransactionHeaderInformation]",
209
216
  "Expected SiteType to be 'rural' or 'suburban' or 'urban' [context: /HPXML/Building/BuildingDetails/BuildingSummary/Site]",
210
217
  "Expected Year to be '2012' or '2009' or '2006' or '2003' [context: /HPXML/Building/BuildingDetails/ClimateandRiskZones/ClimateZoneIECC]",
@@ -212,30 +219,38 @@ class HPXMLTest < MiniTest::Test
212
219
  'Expected RadiantBarrierGrade to be less than or equal to 3 [context: /HPXML/Building/BuildingDetails/Enclosure/Roofs/Roof]',
213
220
  'Expected EnergyFactor to be less than or equal to 5 [context: /HPXML/Building/BuildingDetails/Appliances/Dishwasher]'],
214
221
  'invalid-neighbor-shading-azimuth.xml' => ['A neighbor building has an azimuth (145) not equal to the azimuth of any wall.'],
222
+ 'invalid-number-of-bedrooms-served.xml' => ['Expected extension/NumberofBedroomsServed to be greater than ../../../BuildingSummary/BuildingConstruction/NumberofBedrooms [context: /HPXML/Building/BuildingDetails/Systems/Photovoltaics/PVSystem[IsSharedSystem="true"]]'],
223
+ 'invalid-number-of-conditioned-floors.xml' => ['Expected NumberofConditionedFloors to be greater than or equal to NumberofConditionedFloorsAboveGrade [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
224
+ 'invalid-number-of-units-served.xml' => ['Expected NumberofUnitsServed to be greater than 1 [context: /HPXML/Building/BuildingDetails/Systems/WaterHeating/WaterHeatingSystem[IsSharedSystem="true"]]'],
215
225
  'invalid-relatedhvac-dhw-indirect.xml' => ["RelatedHVACSystem 'HeatingSystem_bad' not found for water heating system 'WaterHeater'"],
216
226
  'invalid-relatedhvac-desuperheater.xml' => ["RelatedHVACSystem 'CoolingSystem_bad' not found for water heating system 'WaterHeater'."],
217
227
  'invalid-schema-version.xml' => ['HPXML version 3.0 is required.'],
228
+ 'invalid-shared-vent-in-unit-flowrate.xml' => ['Expected extension/InUnitFlowRate to be less than RatedFlowRate [context: /HPXML/Building/BuildingDetails/Systems/MechanicalVentilation/VentilationFans/VentilationFan[UsedForWholeBuildingVentilation="true" and IsSharedSystem="true"]]'],
218
229
  'invalid-timestep.xml' => ['Timestep (45) must be one of: 60, 30, 20, 15, 12, 10, 6, 5, 4, 3, 2, 1.'],
219
230
  'invalid-runperiod.xml' => ['Run Period End Day of Month (31) must be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.'],
220
- 'invalid-window-height.xml' => ["For Window 'WindowEast', overhangs distance to bottom (2.0) must be greater than distance to top (2.0)."],
231
+ 'invalid-window-height.xml' => ['Expected DistanceToBottomOfWindow to be greater than DistanceToTopOfWindow [context: /HPXML/Building/BuildingDetails/Enclosure/Windows/Window/Overhangs]'],
221
232
  'lighting-fractions.xml' => ['Sum of fractions of interior lighting (1.15) is greater than 1.'],
222
- 'mismatched-slab-and-foundation-wall.xml' => ["Foundation wall 'FoundationWall' is adjacent to 'basement - conditioned' but no corresponding slab was found adjacent to"],
223
233
  'missing-elements.xml' => ['Expected 1 element(s) for xpath: NumberofConditionedFloors [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]',
224
234
  'Expected 1 element(s) for xpath: ConditionedFloorArea [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
225
- 'missing-duct-location.xml' => ['Expected 0 or 2 element(s) for xpath: DuctSurfaceArea | DuctLocation [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/*/Ducts[DuctType="supply" or DuctType="return"]]'],
226
- 'missing-duct-location-and-surface-area.xml' => ['Error: The location and surface area of all ducts must be provided or blank.'],
235
+ 'missing-duct-location.xml' => ['Expected 0 or 2 element(s) for xpath: DuctSurfaceArea | DuctLocation [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/*/Ducts]'],
227
236
  'multifamily-reference-appliance.xml' => ["The building is of type 'single-family detached' but"],
228
237
  'multifamily-reference-duct.xml' => ["The building is of type 'single-family detached' but"],
229
238
  'multifamily-reference-surface.xml' => ["The building is of type 'single-family detached' but"],
230
239
  'multifamily-reference-water-heater.xml' => ["The building is of type 'single-family detached' but"],
240
+ 'multiple-buildings-without-building-id.xml' => ['Multiple Building elements defined in HPXML file; Building ID argument must be provided.'],
241
+ 'multiple-buildings-wrong-building-id.xml' => ["Could not find Building element with ID 'MyFoo'."],
242
+ 'multiple-shared-cooling-systems.xml' => ['More than one shared cooling system found.'],
243
+ 'multiple-shared-heating-systems.xml' => ['More than one shared heating system found.'],
231
244
  'net-area-negative-wall.xml' => ["Calculated a negative net surface area for surface 'Wall'."],
232
245
  'net-area-negative-roof.xml' => ["Calculated a negative net surface area for surface 'Roof'."],
233
- 'num-bedrooms-exceeds-limit.xml' => ['Number of bedrooms (40) exceeds limit of (CFA-120)/70=36.9.'],
246
+ 'num-bedrooms-exceeds-limit.xml' => ['Expected NumberofBedrooms to be less than or equal to (ConditionedFloorArea-120)/70 [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
234
247
  'orphaned-hvac-distribution.xml' => ["Distribution system 'HVACDistribution' found but no HVAC system attached to it."],
235
- 'refrigerator-location.xml' => ["Refrigerator location is 'garage' but building does not have this location specified."],
248
+ 'refrigerator-location.xml' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
249
+ 'refrigerators-multiple-primary.xml' => ['More than one refrigerator designated as the primary.'],
250
+ 'refrigerators-no-primary.xml' => ['Could not find a primary refrigerator.'],
236
251
  'repeated-relatedhvac-dhw-indirect.xml' => ["RelatedHVACSystem 'HeatingSystem' is attached to multiple water heating systems."],
237
252
  'repeated-relatedhvac-desuperheater.xml' => ["RelatedHVACSystem 'CoolingSystem' is attached to multiple water heating systems."],
238
- 'slab-zero-exposed-perimeter.xml' => ["Exposed perimeter for Slab 'Slab' must be greater than zero."],
253
+ 'slab-zero-exposed-perimeter.xml' => ['Expected ExposedPerimeter to be greater than 0 [context: /HPXML/Building/BuildingDetails/Enclosure/Slabs/Slab]'],
239
254
  'solar-thermal-system-with-combi-tankless.xml' => ["Water heating system 'WaterHeater' connected to solar thermal system 'SolarThermalSystem' cannot be a space-heating boiler."],
240
255
  'solar-thermal-system-with-desuperheater.xml' => ["Water heating system 'WaterHeater' connected to solar thermal system 'SolarThermalSystem' cannot be attached to a desuperheater."],
241
256
  'solar-thermal-system-with-dhw-indirect.xml' => ["Water heating system 'WaterHeater' connected to solar thermal system 'SolarThermalSystem' cannot be a space-heating boiler."],
@@ -247,14 +262,13 @@ class HPXMLTest < MiniTest::Test
247
262
  'unattached-shared-clothes-washer-water-heater.xml' => ["Attached water heating system 'foobar' not found for clothes washer"],
248
263
  'unattached-shared-dishwasher-water-heater.xml' => ["Attached water heating system 'foobar' not found for dishwasher"],
249
264
  'unattached-window.xml' => ["Attached wall 'foobar' not found for window 'WindowNorth'."],
250
- 'water-heater-location.xml' => ["WaterHeatingSystem location is 'crawlspace - vented' but building does not have this location specified."],
251
- 'water-heater-location-other.xml' => ["Expected Location to be 'living space' or 'basement - unconditioned' or 'basement - conditioned' or 'attic - unvented' or 'attic - vented' or 'garage' or 'crawlspace - unvented' or 'crawlspace - vented' or 'other exterior' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/WaterHeating/WaterHeatingSystem]"],
252
- 'refrigerators-multiple-primary.xml' => ['More than one refrigerator designated as the primary.'],
253
- 'refrigerators-no-primary.xml' => ['Could not find a primary refrigerator.'] }
265
+ 'water-heater-location.xml' => ['A location is specified as "crawlspace - vented" but no surfaces were found adjacent to this space type.'],
266
+ 'water-heater-location-other.xml' => ["Expected Location to be 'living space' or 'basement - unconditioned' or 'basement - conditioned' or 'attic - unvented' or 'attic - vented' or 'garage' or 'crawlspace - unvented' or 'crawlspace - vented' or 'other exterior' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/WaterHeating/WaterHeatingSystem]"] }
254
267
 
255
268
  # Test simulations
256
- Dir["#{sample_files_dir}/invalid_files/*.xml"].sort.each do |xml|
257
- _run_xml(File.absolute_path(xml), true, expected_error_msgs[File.basename(xml)])
269
+ xmls = Dir["#{sample_files_dir}/invalid_files/*.xml"].sort
270
+ Parallel.map(xmls, in_threads: Parallel.processor_count) do |xml|
271
+ _run_xml(File.absolute_path(xml), Parallel.worker_number, true, expected_error_msgs[File.basename(xml)])
258
272
  end
259
273
  end
260
274
 
@@ -277,58 +291,25 @@ class HPXMLTest < MiniTest::Test
277
291
  end
278
292
  end
279
293
 
280
- def _run_xml(xml, expect_error = false, expect_error_msgs = nil)
294
+ def _run_xml(xml, worker_num = nil, expect_error = false, expect_error_msgs = nil)
281
295
  print "Testing #{File.basename(xml)}...\n"
282
- rundir = File.join(@this_dir, 'run')
283
-
284
- measures_dir = File.join(@this_dir, '..', '..')
285
-
286
- measures = {}
296
+ rundir = File.join(@this_dir, "test#{worker_num}")
287
297
 
288
- # Add HPXML translator measure to workflow
289
- measure_subdir = 'HPXMLtoOpenStudio'
290
- args = {}
291
- args['hpxml_path'] = xml
292
- args['output_dir'] = File.absolute_path(rundir)
293
- args['debug'] = true
294
- update_args_hash(measures, measure_subdir, args)
295
-
296
- # Add reporting measure to workflow
297
298
  # Uses 'monthly' to verify timeseries results match annual results via error-checking
298
299
  # inside the SimulationOutputReport measure.
299
- measure_subdir = 'SimulationOutputReport'
300
- args = {}
301
- args['timeseries_frequency'] = 'monthly'
302
- args['include_timeseries_fuel_consumptions'] = true
303
- args['include_timeseries_end_use_consumptions'] = true
304
- args['include_timeseries_hot_water_uses'] = true
305
- args['include_timeseries_total_loads'] = true
306
- args['include_timeseries_component_loads'] = true
307
- args['include_timeseries_zone_temperatures'] = true
308
- args['include_timeseries_airflows'] = true
309
- args['include_timeseries_weather'] = true
310
- update_args_hash(measures, measure_subdir, args)
311
-
312
- # Add output variables for combi system energy check and CFIS
313
- output_vars = [['Water Heater Source Side Heat Transfer Energy', 'runperiod', '*'],
314
- ['Baseboard Total Heating Energy', 'runperiod', '*'],
315
- ['Boiler Heating Energy', 'runperiod', '*'],
316
- ['Fluid Heat Exchanger Heat Transfer Energy', 'runperiod', '*'],
317
- ['Fan Electricity Rate', 'runperiod', '*'],
318
- ['Fan Runtime Fraction', 'runperiod', '*'],
319
- ['Electric Equipment Electricity Energy', 'runperiod', Constants.ObjectNameMechanicalVentilationHouseFanCFIS]]
320
-
321
- # Run workflow
300
+ cli_path = OpenStudio.getOpenStudioCLI
301
+ building_id = ''
302
+ if xml.include? 'base-multiple-buildings.xml'
303
+ building_id = '--building-id MyBuilding'
304
+ elsif xml.include? 'multiple-buildings-wrong-building-id.xml'
305
+ building_id = '--building-id MyFoo'
306
+ end
307
+ command = "\"#{cli_path}\" \"#{File.join(File.dirname(__FILE__), '../run_simulation.rb')}\" -x #{xml} -o #{rundir} --debug --monthly ALL #{building_id}"
322
308
  workflow_start = Time.now
323
- results = run_hpxml_workflow(rundir, xml, measures, measures_dir,
324
- debug: true, output_vars: output_vars,
325
- run_measures_only: expect_error)
326
- workflow_time = (Time.now - workflow_start).round(1)
327
- success = results[:success]
328
- runner = results[:runner]
329
- sim_time = results[:sim_time]
330
- puts "Completed in #{workflow_time} seconds."
331
- puts
309
+ success = system(command)
310
+ workflow_time = Time.now - workflow_start
311
+
312
+ rundir = File.join(rundir, 'run')
332
313
 
333
314
  # Check results
334
315
  if expect_error
@@ -357,7 +338,6 @@ class HPXMLTest < MiniTest::Test
357
338
  return
358
339
  end
359
340
 
360
- show_output(runner.result) unless success
361
341
  assert_equal(true, success)
362
342
 
363
343
  # Check for output files
@@ -367,16 +347,26 @@ class HPXMLTest < MiniTest::Test
367
347
  assert(File.exist? timeseries_csv_path)
368
348
 
369
349
  # Get results
370
- results = _get_results(rundir, sim_time, workflow_time, annual_csv_path, xml)
371
- sizing_results = _get_sizing_results(rundir)
350
+ results = _get_results(rundir, workflow_time, annual_csv_path, xml)
372
351
 
373
352
  # Check outputs
374
- _verify_outputs(runner, rundir, xml, results)
353
+ hpxml_defaults_path = File.join(rundir, 'in.xml')
354
+ stron_paths = [File.join(File.dirname(__FILE__), '..', '..', 'HPXMLtoOpenStudio', 'resources', 'EPvalidator.xml')]
355
+ hpxml = HPXML.new(hpxml_path: hpxml_defaults_path, schematron_validators: stron_paths) # Validate in.xml to ensure it can be run back through OS-HPXML
356
+ if not hpxml.errors.empty?
357
+ puts 'ERRORS:'
358
+ hpxml.errors.each do |error|
359
+ puts error
360
+ end
361
+ flunk "EPvalidator.xml error in #{hpxml_defaults_path}."
362
+ end
363
+ sizing_results = _get_sizing_results(hpxml, xml)
364
+ _verify_outputs(rundir, xml, results, hpxml)
375
365
 
376
366
  return results, sizing_results
377
367
  end
378
368
 
379
- def _get_results(rundir, sim_time, workflow_time, annual_csv_path, xml)
369
+ def _get_results(rundir, workflow_time, annual_csv_path, xml)
380
370
  # Grab all outputs from reporting measure CSV annual results
381
371
  results = {}
382
372
  CSV.foreach(annual_csv_path) do |row|
@@ -385,35 +375,6 @@ class HPXMLTest < MiniTest::Test
385
375
  results[row[0]] = Float(row[1])
386
376
  end
387
377
 
388
- sql_path = File.join(rundir, 'eplusout.sql')
389
- sqlFile = OpenStudio::SqlFile.new(sql_path, false)
390
-
391
- # Obtain HVAC capacities
392
- # TODO: Add to reporting measure?
393
- htg_cap_w = 0
394
- for spd in [4, 2]
395
- # Get capacity of highest speed for multi-speed coil
396
- query = "SELECT SUM(Value) FROM ComponentSizes WHERE CompType='Coil:Heating:DX:MultiSpeed' AND Description LIKE '%User-Specified Speed #{spd}%Capacity' AND Units='W'"
397
- htg_cap_w += sqlFile.execAndReturnFirstDouble(query).get
398
- break if htg_cap_w > 0
399
- end
400
- query = "SELECT SUM(Value) FROM ComponentSizes WHERE ((CompType LIKE 'Coil:Heating:%' OR CompType LIKE 'Boiler:%' OR CompType LIKE 'ZONEHVAC:BASEBOARD:%') AND CompType!='Coil:Heating:DX:MultiSpeed') AND Description LIKE '%User-Specified%Capacity' AND Units='W'"
401
- htg_cap_w += sqlFile.execAndReturnFirstDouble(query).get
402
- results['Capacity: Heating (W)'] = htg_cap_w
403
-
404
- clg_cap_w = 0
405
- for spd in [4, 2]
406
- # Get capacity of highest speed for multi-speed coil
407
- query = "SELECT SUM(Value) FROM ComponentSizes WHERE CompType='Coil:Cooling:DX:MultiSpeed' AND Description LIKE 'User-Specified Speed #{spd}%Total%Capacity' AND Units='W'"
408
- clg_cap_w += sqlFile.execAndReturnFirstDouble(query).get
409
- break if clg_cap_w > 0
410
- end
411
- query = "SELECT SUM(Value) FROM ComponentSizes WHERE CompType LIKE 'Coil:Cooling:%' AND CompType!='Coil:Cooling:DX:MultiSpeed' AND Description LIKE '%User-Specified%Total%Capacity' AND Units='W'"
412
- clg_cap_w += sqlFile.execAndReturnFirstDouble(query).get
413
- results['Capacity: Cooling (W)'] = clg_cap_w
414
-
415
- sqlFile.close
416
-
417
378
  # Check discrepancy between total load and sum of component loads
418
379
  if not xml.include? 'ASHRAE_Standard_140'
419
380
  sum_component_htg_loads = results.select { |k, v| k.start_with? 'Component Load: Heating:' }.map { |k, v| v }.sum(0.0)
@@ -424,38 +385,81 @@ class HPXMLTest < MiniTest::Test
424
385
  assert_operator(residual_clg_load.abs, :<, 0.5)
425
386
  end
426
387
 
427
- results[@@simulation_runtime_key] = sim_time
428
388
  results[@@workflow_runtime_key] = workflow_time
429
389
 
430
390
  return results
431
391
  end
432
392
 
433
- def _get_sizing_results(rundir)
393
+ def _get_sizing_results(hpxml, xml)
434
394
  results = {}
435
- File.readlines(File.join(rundir, 'run.log')).each do |s|
436
- next unless s.start_with?('Heat ') || s.start_with?('Cool ')
437
- next unless s.include? '='
438
-
439
- vals = s.split('=')
440
- prop = vals[0].strip
441
- vals = vals[1].split(' ')
442
- value = Float(vals[0].strip)
443
- prop += " [#{vals[1].strip}]" # add units
444
- results[prop] = 0.0 if results[prop].nil?
445
- results[prop] += value
395
+ return if xml.include? 'ASHRAE_Standard_140'
396
+
397
+ # Heating design loads
398
+ hpxml.hvac_plant.class::HDL_ATTRS.each do |attr, element_name|
399
+ results["heating_load_#{attr.to_s.gsub('hdl_', '')} [Btuh]"] = hpxml.hvac_plant.send(attr.to_s)
400
+ end
401
+
402
+ # Cooling sensible design loads
403
+ hpxml.hvac_plant.class::CDL_SENS_ATTRS.each do |attr, element_name|
404
+ results["cooling_load_#{attr.to_s.gsub('cdl_', '')} [Btuh]"] = hpxml.hvac_plant.send(attr.to_s)
405
+ end
406
+
407
+ # Cooling latent design loads
408
+ hpxml.hvac_plant.class::CDL_LAT_ATTRS.each do |attr, element_name|
409
+ results["cooling_load_#{attr.to_s.gsub('cdl_', '')} [Btuh]"] = hpxml.hvac_plant.send(attr.to_s)
410
+ end
411
+
412
+ # Heating capacities/airflows
413
+ results['heating_capacity [Btuh]'] = 0.0
414
+ results['heating_backup_capacity [Btuh]'] = 0.0
415
+ results['heating_airflow [cfm]'] = 0.0
416
+ (hpxml.heating_systems + hpxml.heat_pumps).each do |htg_sys|
417
+ results['heating_capacity [Btuh]'] += htg_sys.heating_capacity
418
+ if htg_sys.respond_to? :backup_heating_capacity
419
+ results['heating_backup_capacity [Btuh]'] += htg_sys.backup_heating_capacity
420
+ end
421
+ results['heating_airflow [cfm]'] += htg_sys.heating_airflow_cfm
422
+ end
423
+
424
+ # Cooling capacity/airflows
425
+ results['cooling_capacity [Btuh]'] = 0.0
426
+ results['cooling_airflow [cfm]'] = 0.0
427
+ (hpxml.cooling_systems + hpxml.heat_pumps).each do |clg_sys|
428
+ results['cooling_capacity [Btuh]'] += clg_sys.cooling_capacity
429
+ results['cooling_airflow [cfm]'] += clg_sys.cooling_airflow_cfm
446
430
  end
431
+
447
432
  assert(!results.empty?)
433
+
434
+ if (hpxml.heating_systems + hpxml.heat_pumps).select { |h| h.fraction_heat_load_served.to_f > 0 }.empty?
435
+ # No heating equipment; check for zero heating capacities/airflows/duct loads
436
+ assert_equal(0.0, results['heating_capacity [Btuh]'])
437
+ assert_equal(0.0, results['heating_backup_capacity [Btuh]'])
438
+ assert_equal(0.0, results['heating_airflow [cfm]'])
439
+ assert_equal(0.0, results['heating_load_ducts [Btuh]'])
440
+ end
441
+ if (hpxml.cooling_systems + hpxml.heat_pumps).select { |c| c.fraction_cool_load_served.to_f > 0 }.empty?
442
+ # No cooling equipment; check for zero cooling capacities/airflows/duct loads
443
+ assert_equal(0.0, results['cooling_capacity [Btuh]'])
444
+ assert_equal(0.0, results['cooling_airflow [cfm]'])
445
+ assert_equal(0.0, results['cooling_load_sens_ducts [Btuh]'])
446
+ assert_equal(0.0, results['cooling_load_lat_ducts [Btuh]'])
447
+ end
448
+ if hpxml.hvac_distributions.map { |dist| dist.ducts.size }.empty?
449
+ # No ducts; check for zero duct loads
450
+ assert_equal(0.0, results['heating_load_ducts [Btuh]'])
451
+ assert_equal(0.0, results['cooling_load_sens_ducts [Btuh]'])
452
+ assert_equal(0.0, results['cooling_load_lat_ducts [Btuh]'])
453
+ end
454
+
448
455
  return results
449
456
  end
450
457
 
451
- def _verify_outputs(runner, rundir, hpxml_path, results)
458
+ def _verify_outputs(rundir, hpxml_path, results, hpxml)
452
459
  sql_path = File.join(rundir, 'eplusout.sql')
453
460
  assert(File.exist? sql_path)
454
461
 
455
462
  sqlFile = OpenStudio::SqlFile.new(sql_path, false)
456
- hpxml_defaults_path = File.join(rundir, 'in.xml')
457
- hpxml = HPXML.new(hpxml_path: hpxml_defaults_path)
458
- HVAC.apply_shared_systems(hpxml)
459
463
 
460
464
  # Collapse windows further using same logic as measure.rb
461
465
  hpxml.windows.each do |window|
@@ -469,10 +473,11 @@ class HPXMLTest < MiniTest::Test
469
473
  next if log_line.include? 'Warning: Could not load nokogiri, no HPXML validation performed.'
470
474
  next if log_line.start_with? 'Info: '
471
475
  next if log_line.start_with? 'Executing command'
472
- next if (log_line.start_with?('Heat ') || log_line.start_with?('Cool ')) && log_line.include?('=')
473
476
  next if log_line.include? "-cache.csv' could not be found; regenerating it."
474
- next if log_line.include?('Warning: HVACDistribution') && log_line.include?('has ducts entirely within conditioned space but there is non-zero leakage to the outside.')
475
477
 
478
+ if hpxml_path.include? 'base-atticroof-conditioned.xml'
479
+ next if log_line.include?('Ducts are entirely within conditioned space but there is moderate leakage to the outside. Leakage to the outside is typically zero or near-zero in these situations, consider revising leakage values. Leakage will be modeled as heat lost to the ambient environment.')
480
+ end
476
481
  if hpxml.clothes_washers.empty?
477
482
  next if log_line.include? 'No clothes washer specified, the model will not include clothes washer energy use.'
478
483
  end
@@ -489,13 +494,13 @@ class HPXMLTest < MiniTest::Test
489
494
  next if log_line.include? 'No cooking range specified, the model will not include cooking range/oven energy use.'
490
495
  end
491
496
  if hpxml.water_heating_systems.empty?
492
- next if log_line.include? 'No water heater specified, the model will not include water heating energy use.'
497
+ next if log_line.include? 'No water heating specified, the model will not include water heating energy use.'
493
498
  end
494
499
  if (hpxml.heating_systems + hpxml.heat_pumps).select { |h| h.fraction_heat_load_served.to_f > 0 }.empty?
495
- next if log_line.include? 'No heating system specified, the model will not include space heating energy use.'
500
+ next if log_line.include? 'No space heating specified, the model will not include space heating energy use.'
496
501
  end
497
502
  if (hpxml.cooling_systems + hpxml.heat_pumps).select { |c| c.fraction_cool_load_served.to_f > 0 }.empty?
498
- next if log_line.include? 'No cooling system specified, the model will not include space cooling energy use.'
503
+ next if log_line.include? 'No space cooling specified, the model will not include space cooling energy use.'
499
504
  end
500
505
  if hpxml.plug_loads.select { |p| p.plug_load_type == HPXML::PlugLoadTypeOther }.empty?
501
506
  next if log_line.include? "No '#{HPXML::PlugLoadTypeOther}' plug loads specified, the model will not include misc plug load energy use."
@@ -506,6 +511,9 @@ class HPXMLTest < MiniTest::Test
506
511
  if hpxml.lighting_groups.empty?
507
512
  next if log_line.include? 'No lighting specified, the model will not include lighting energy use.'
508
513
  end
514
+ if hpxml.windows.empty?
515
+ next if log_line.include? 'No windows specified, the model will not include window heat transfer.'
516
+ end
509
517
 
510
518
  flunk "Unexpected warning found in run.log: #{log_line}"
511
519
  end
@@ -567,10 +575,19 @@ class HPXMLTest < MiniTest::Test
567
575
  if hpxml.cooling_systems.select { |c| c.cooling_system_type == HPXML::HVACTypeRoomAirConditioner }.size > 0
568
576
  next if err_line.include? 'GetDXCoils: Coil:Cooling:DX:SingleSpeed="ROOM AC CLG COIL" curve values' # TODO: Double-check Room AC curves
569
577
  end
570
- if hpxml.hvac_distributions.select { |d| d.hydronic_and_air_type.to_s == HPXML::HydronicAndAirTypeFanCoil }.size > 0
578
+ if hpxml.hvac_distributions.select { |d| d.air_type.to_s == HPXML::AirTypeFanCoil }.size > 0
571
579
  next if err_line.include? 'In calculating the design coil UA for Coil:Cooling:Water' # Warning for unused cooling coil for fan coil
572
580
  end
573
- if hpxml_path.include?('base-schedules-stochastic.xml') || hpxml_path.include?('base-schedules-user-specified.xml')
581
+ if hpxml_path.include?('ASHRAE_Standard_140') || (hpxml.windows.size == 0)
582
+ next if err_line.include? 'GetShadowingInput: DetailedSkyDiffuseModeling is chosen but not needed'
583
+ end
584
+ if hpxml_path.include? 'base-enclosure-split-surfaces2.xml'
585
+ next if err_line.include? 'GetSurfaceData: Very small surface area' # FUTURE: Prevent this warning
586
+ end
587
+ if hpxml_path.include?('ground-to-air-heat-pump-cooling-only.xml') || hpxml_path.include?('ground-to-air-heat-pump-heating-only.xml')
588
+ next if err_line.include? 'COIL:HEATING:WATERTOAIRHEATPUMP:EQUATIONFIT' # heating capacity is > 20% different than cooling capacity; safe to ignore
589
+ end
590
+ if hpxml_path.include?('base-schedules-stochastic.xml') || hpxml_path.include?('base-schedules-stochastic-vacant.xml') || hpxml_path.include?('base-schedules-user-specified.xml')
574
591
  next if err_line.include?('GetCurrentScheduleValue: Schedule=') && err_line.include?('is a Schedule:File')
575
592
  end
576
593
 
@@ -665,9 +682,11 @@ class HPXMLTest < MiniTest::Test
665
682
  num_expected_kiva_instances = { 'base-foundation-ambient.xml' => 0, # no foundation in contact w/ ground
666
683
  'base-foundation-multiple.xml' => 2, # additional instance for 2nd foundation type
667
684
  'base-enclosure-2stories-garage.xml' => 2, # additional instance for garage
685
+ 'base-foundation-basement-garage.xml' => 2, # additional instance for garage
668
686
  'base-enclosure-garage.xml' => 2, # additional instance for garage
669
687
  'base-foundation-walkout-basement.xml' => 4, # 3 foundation walls plus a no-wall exposed perimeter
670
- 'base-foundation-complex.xml' => 10 } # lots of foundations for testing
688
+ 'base-foundation-complex.xml' => 10, # lots of foundations for testing
689
+ 'base-enclosure-split-surfaces2.xml' => 81 } # lots of foundations for testing
671
690
 
672
691
  if not num_expected_kiva_instances[File.basename(hpxml_path)].nil?
673
692
  assert_equal(num_expected_kiva_instances[File.basename(hpxml_path)], num_kiva_instances)
@@ -982,154 +1001,14 @@ class HPXMLTest < MiniTest::Test
982
1001
  assert_in_epsilon(hpxml_value, sql_value, 0.02)
983
1002
  end
984
1003
 
985
- # HVAC Heating Systems
986
- hpxml.heating_systems.each do |heating_system|
987
- next unless heating_system.fraction_heat_load_served > 0
988
- next unless hpxml.heating_systems.size == 1
989
-
990
- next unless (not heating_system.fan_watts.nil?) || (not heating_system.fan_watts_per_cfm.nil?)
991
- # Compare fan power from timeseries output
992
- next if hpxml.cooling_systems.size + hpxml.heat_pumps.size > 0 # Skip if other system types (which could result in A) multiple supply fans or B) different supply fan power consumption in the cooling season)
993
-
994
- if not heating_system.fan_watts.nil?
995
- hpxml_value = heating_system.fan_watts
996
- else
997
- query = "SELECT SUM(Value) FROM ComponentSizes WHERE Description='User-Specified Heating Supply Air Flow Rate'"
998
- heating_cfm = UnitConversions.convert(sqlFile.execAndReturnFirstDouble(query).get, 'm^3/s', 'cfm')
999
- hpxml_value = heating_system.fan_watts_per_cfm * heating_cfm
1000
- end
1001
- query = "SELECT SUM(VariableValue) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Avg' AND VariableName='Fan Runtime Fraction' AND ReportingFrequency='Run Period')"
1002
- avg_rtf = sqlFile.execAndReturnFirstDouble(query).get
1003
- query = "SELECT SUM(VariableValue) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Avg' AND VariableName='Fan Electricity Rate' AND ReportingFrequency='Run Period')"
1004
- avg_w = sqlFile.execAndReturnFirstDouble(query).get
1005
- sql_value = avg_w / avg_rtf
1006
- assert_in_epsilon(sql_value, hpxml_value, 0.01)
1007
- end
1008
-
1009
- # HVAC Cooling Systems
1010
- hpxml.cooling_systems.each do |cooling_system|
1011
- next unless cooling_system.fraction_cool_load_served > 0
1012
- next unless hpxml.cooling_systems.size == 1
1013
- next unless not cooling_system.fan_watts_per_cfm.nil?
1014
- next if hpxml.heating_systems.size + hpxml.heat_pumps.size > 0 # Skip if other system types (which could result in A) multiple supply fans or B) different supply fan power consumption in the heating season)
1015
- next unless cooling_system.compressor_type == HPXML::HVACCompressorTypeSingleStage
1016
-
1017
- # Compare fan power from timeseries output
1018
- query = "SELECT SUM(Value) FROM ComponentSizes WHERE Description='User-Specified Cooling Supply Air Flow Rate'"
1019
- cooling_cfm = UnitConversions.convert(sqlFile.execAndReturnFirstDouble(query).get, 'm^3/s', 'cfm')
1020
- hpxml_value = cooling_system.fan_watts_per_cfm * cooling_cfm
1021
- query = "SELECT SUM(VariableValue) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Avg' AND VariableName='Fan Runtime Fraction' AND ReportingFrequency='Run Period')"
1022
- avg_rtf = sqlFile.execAndReturnFirstDouble(query).get
1023
- query = "SELECT SUM(VariableValue) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Avg' AND VariableName='Fan Electricity Rate' AND ReportingFrequency='Run Period')"
1024
- avg_w = sqlFile.execAndReturnFirstDouble(query).get
1025
- sql_value = avg_w / avg_rtf
1026
- assert_in_epsilon(sql_value, hpxml_value, 0.01)
1027
- end
1028
-
1029
- # HVAC Capacities
1030
- htg_cap = nil
1031
- clg_cap = nil
1032
- hpxml.heating_systems.each do |heating_system|
1033
- htg_sys_cap = heating_system.heating_capacity.to_f
1034
- if htg_sys_cap > 0
1035
- htg_cap = 0 if htg_cap.nil?
1036
- htg_cap += htg_sys_cap
1037
- end
1038
- end
1039
- hpxml.cooling_systems.each do |cooling_system|
1040
- clg_sys_cap = cooling_system.cooling_capacity.to_f
1041
- clg_cap_mult = 1.0
1042
- if cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
1043
- # TODO: Generalize this
1044
- clg_cap_mult = 1.20
1045
- end
1046
- if clg_sys_cap > 0
1047
- clg_cap = 0 if clg_cap.nil?
1048
- clg_cap += (clg_sys_cap * clg_cap_mult)
1049
- end
1050
- end
1051
- hpxml.heat_pumps.each do |heat_pump|
1052
- hp_cap_clg = heat_pump.cooling_capacity.to_f
1053
- hp_cap_htg = heat_pump.heating_capacity.to_f
1054
- clg_cap_mult = 1.0
1055
- htg_cap_mult = 1.0
1056
- if heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit
1057
- # TODO: Generalize this
1058
- clg_cap_mult = 1.20
1059
- htg_cap_mult = 1.20
1060
- elsif (heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpAirToAir) && (heat_pump.cooling_efficiency_seer > 21)
1061
- # TODO: Generalize this
1062
- htg_cap_mult = 1.17
1063
- end
1064
- supp_hp_cap = heat_pump.backup_heating_capacity.to_f
1065
- if hp_cap_clg > 0
1066
- clg_cap = 0 if clg_cap.nil?
1067
- clg_cap += (hp_cap_clg * clg_cap_mult)
1068
- end
1069
- if hp_cap_htg > 0
1070
- htg_cap = 0 if htg_cap.nil?
1071
- htg_cap += (hp_cap_htg * htg_cap_mult)
1072
- end
1073
- if supp_hp_cap > 0
1074
- htg_cap = 0 if htg_cap.nil?
1075
- htg_cap += supp_hp_cap
1076
- end
1077
- end
1078
- if not clg_cap.nil?
1079
- sql_value = UnitConversions.convert(results['Capacity: Cooling (W)'], 'W', 'Btu/hr')
1080
- if clg_cap == 0
1081
- assert_operator(sql_value, :<, 1)
1082
- elsif clg_cap > 0
1083
- if hpxml.header.allow_increased_fixed_capacities
1084
- assert_operator(sql_value, :>=, clg_cap)
1085
- else
1086
- assert_in_epsilon(clg_cap, sql_value, 0.01)
1087
- end
1088
- else # autosized
1089
- assert_operator(sql_value, :>, 1)
1090
- end
1091
- end
1092
- if not htg_cap.nil?
1093
- sql_value = UnitConversions.convert(results['Capacity: Heating (W)'], 'W', 'Btu/hr')
1094
- if htg_cap == 0
1095
- assert_operator(sql_value, :<, 1)
1096
- elsif htg_cap > 0
1097
- if hpxml.header.allow_increased_fixed_capacities
1098
- assert_operator(sql_value, :>=, htg_cap)
1099
- else
1100
- assert_in_epsilon(htg_cap, sql_value, 0.01)
1101
- end
1102
- else # autosized
1103
- assert_operator(sql_value, :>, 1)
1104
- end
1105
- end
1106
-
1107
1004
  # HVAC Load Fractions
1108
- if not hpxml_path.include? 'location-miami'
1005
+ if (not hpxml_path.include? 'location-miami') && (not hpxml_path.include? 'location-honolulu') && (not hpxml_path.include? 'location-phoenix')
1109
1006
  htg_energy = results.select { |k, v| (k.include?(': Heating (MBtu)') || k.include?(': Heating Fans/Pumps (MBtu)')) && !k.include?('Load') }.map { |k, v| v }.sum(0.0)
1110
1007
  assert_equal(hpxml.total_fraction_heat_load_served > 0, htg_energy > 0)
1111
1008
  end
1112
1009
  clg_energy = results.select { |k, v| (k.include?(': Cooling (MBtu)') || k.include?(': Cooling Fans/Pumps (MBtu)')) && !k.include?('Load') }.map { |k, v| v }.sum(0.0)
1113
1010
  assert_equal(hpxml.total_fraction_cool_load_served > 0, clg_energy > 0)
1114
1011
 
1115
- # Water Heater
1116
- if hpxml.water_heating_systems.select { |wh| [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? wh.water_heater_type }.size > 0
1117
- query = "SELECT SUM(ABS(VariableValue)/1000000000) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Sum' AND VariableName='Fluid Heat Exchanger Heat Transfer Energy' AND ReportingFrequency='Run Period' AND VariableUnits='J')"
1118
- combi_hx_load = sqlFile.execAndReturnFirstDouble(query).get.round(2)
1119
- query = "SELECT SUM(ABS(VariableValue)/1000000000) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Sum' AND VariableName='Boiler Heating Energy' AND ReportingFrequency='Run Period' AND VariableUnits='J')"
1120
- combi_htg_load = sqlFile.execAndReturnFirstDouble(query).get.round(2)
1121
-
1122
- # Check combi system energy balance
1123
- query = "SELECT SUM(ABS(VariableValue)/1000000000) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Sum' AND VariableName='Water Heater Source Side Heat Transfer Energy' AND VariableUnits='J')"
1124
- combi_tank_source_load = sqlFile.execAndReturnFirstDouble(query).get.round(2)
1125
- assert_in_epsilon(combi_hx_load, combi_tank_source_load, 0.02)
1126
-
1127
- # Check boiler, hx, pump, heating coil energy balance
1128
- query = "SELECT SUM(ABS(VariableValue)/1000000000) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Sum' AND VariableName='Baseboard Total Heating Energy' AND VariableUnits='J')"
1129
- boiler_space_heating_load = sqlFile.execAndReturnFirstDouble(query).get.round(2)
1130
- assert_in_epsilon(combi_hx_load + boiler_space_heating_load, combi_htg_load, 0.02)
1131
- end
1132
-
1133
1012
  # Mechanical Ventilation
1134
1013
  fan_cfis = hpxml.ventilation_fans.select { |vent_mech| vent_mech.used_for_whole_building_ventilation && (vent_mech.fan_type == HPXML::MechVentTypeCFIS) }
1135
1014
  fan_sup = hpxml.ventilation_fans.select { |vent_mech| vent_mech.used_for_whole_building_ventilation && (vent_mech.fan_type == HPXML::MechVentTypeSupply) }
@@ -1139,43 +1018,36 @@ class HPXMLTest < MiniTest::Test
1139
1018
  vent_fan_bath = hpxml.ventilation_fans.select { |vent_mech| vent_mech.used_for_local_ventilation && (vent_mech.fan_location == HPXML::LocationBath) }
1140
1019
 
1141
1020
  if not (fan_cfis + fan_sup + fan_exh + fan_bal + vent_fan_kitchen + vent_fan_bath).empty?
1142
- mv_energy = UnitConversions.convert(results['Electricity: Mech Vent (MBtu)'], 'MBtu', 'GJ')
1021
+ mv_energy = UnitConversions.convert(results['End Use: Electricity: Mech Vent (MBtu)'], 'MBtu', 'GJ')
1143
1022
 
1144
1023
  if not fan_cfis.empty?
1145
- # CFIS, check for positive mech vent energy that is less than the energy if it had run 24/7
1146
- # CFIS Fan energy
1147
- query = "SELECT SUM(ABS(VariableValue)/1000000000) FROM ReportVariableData WHERE ReportVariableDataDictionaryIndex IN (SELECT ReportVariableDataDictionaryIndex FROM ReportVariableDataDictionary WHERE VariableType='Sum' AND KeyValue LIKE '#{Constants.ObjectNameMechanicalVentilationHouseFanCFIS.upcase}%' AND VariableName='Electric Equipment Electricity Energy' AND ReportingFrequency='Run Period' AND VariableUnits='J')"
1148
- cfis_energy = sqlFile.execAndReturnFirstDouble(query).get
1149
- fan_gj = fan_cfis.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1150
- if fan_gj > 0
1151
- assert_operator(cfis_energy, :>, 0)
1152
- assert_operator(cfis_energy, :<, fan_gj)
1153
- else
1154
- assert_equal(cfis_energy, 0.0)
1024
+ if (fan_sup + fan_exh + fan_bal + vent_fan_kitchen + vent_fan_bath).empty?
1025
+ # CFIS only, check for positive mech vent energy that is less than the energy if it had run 24/7
1026
+ fan_gj = fan_cfis.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1027
+ assert_operator(mv_energy, :>, 0)
1028
+ assert_operator(mv_energy, :<, fan_gj)
1155
1029
  end
1156
-
1157
- mv_energy -= cfis_energy
1158
- end
1159
-
1160
- # Supply, exhaust, ERV, HRV, etc., check for appropriate mech vent energy
1161
- fan_gj = 0
1162
- if not fan_sup.empty?
1163
- fan_gj += fan_sup.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1164
- end
1165
- if not fan_exh.empty?
1166
- fan_gj += fan_exh.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1167
- end
1168
- if not fan_bal.empty?
1169
- fan_gj += fan_bal.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1170
- end
1171
- if not vent_fan_kitchen.empty?
1172
- fan_gj += vent_fan_kitchen.map { |vent_kitchen| UnitConversions.convert(vent_kitchen.unit_fan_power * vent_kitchen.hours_in_operation * vent_kitchen.quantity * 365.0, 'Wh', 'GJ') }.sum(0.0)
1173
- end
1174
- if not vent_fan_bath.empty?
1175
- fan_gj += vent_fan_bath.map { |vent_bath| UnitConversions.convert(vent_bath.unit_fan_power * vent_bath.hours_in_operation * vent_bath.quantity * 365.0, 'Wh', 'GJ') }.sum(0.0)
1030
+ else
1031
+ # Supply, exhaust, ERV, HRV, etc., check for appropriate mech vent energy
1032
+ fan_gj = 0
1033
+ if not fan_sup.empty?
1034
+ fan_gj += fan_sup.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1035
+ end
1036
+ if not fan_exh.empty?
1037
+ fan_gj += fan_exh.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1038
+ end
1039
+ if not fan_bal.empty?
1040
+ fan_gj += fan_bal.map { |vent_mech| UnitConversions.convert(vent_mech.unit_fan_power * vent_mech.hours_in_operation * 365.0, 'Wh', 'GJ') }.sum(0.0)
1041
+ end
1042
+ if not vent_fan_kitchen.empty?
1043
+ fan_gj += vent_fan_kitchen.map { |vent_kitchen| UnitConversions.convert(vent_kitchen.unit_fan_power * vent_kitchen.hours_in_operation * vent_kitchen.quantity * 365.0, 'Wh', 'GJ') }.sum(0.0)
1044
+ end
1045
+ if not vent_fan_bath.empty?
1046
+ fan_gj += vent_fan_bath.map { |vent_bath| UnitConversions.convert(vent_bath.unit_fan_power * vent_bath.hours_in_operation * vent_bath.quantity * 365.0, 'Wh', 'GJ') }.sum(0.0)
1047
+ end
1048
+ # Maximum error that can be caused by rounding
1049
+ assert_in_delta(mv_energy, fan_gj, 0.006)
1176
1050
  end
1177
- # Maximum error that can be caused by rounding
1178
- assert_in_delta(mv_energy, fan_gj, 0.006)
1179
1051
  end
1180
1052
 
1181
1053
  # Clothes Washer
@@ -1239,8 +1111,10 @@ class HPXMLTest < MiniTest::Test
1239
1111
  end
1240
1112
 
1241
1113
  # Lighting
1242
- ltg_energy = results.select { |k, v| k.include? 'Electricity: Lighting' }.map { |k, v| v }.sum(0.0)
1243
- assert_equal(hpxml.lighting_groups.size > 0, ltg_energy > 0)
1114
+ ltg_energy = results.select { |k, v| k.include? 'End Use: Electricity: Lighting' }.map { |k, v| v }.sum(0.0)
1115
+ if hpxml.header.schedules_path.nil?
1116
+ assert_equal(hpxml.lighting_groups.size > 0, ltg_energy > 0)
1117
+ end
1244
1118
 
1245
1119
  # Get fuels
1246
1120
  htg_fuels = []
@@ -1270,11 +1144,11 @@ class HPXMLTest < MiniTest::Test
1270
1144
  HPXML::FuelTypeCoal].each do |fuel|
1271
1145
  fuel_name = fuel.split.map(&:capitalize).join(' ')
1272
1146
  fuel_name += ' Cord' if fuel_name == 'Wood'
1273
- energy_htg = results.fetch("#{fuel_name}: Heating (MBtu)", 0)
1274
- energy_dhw = results.fetch("#{fuel_name}: Hot Water (MBtu)", 0)
1275
- energy_cd = results.fetch("#{fuel_name}: Clothes Dryer (MBtu)", 0)
1276
- energy_cr = results.fetch("#{fuel_name}: Range/Oven (MBtu)", 0)
1277
- if htg_fuels.include?(fuel) && (not hpxml_path.include? 'location-miami')
1147
+ energy_htg = results.fetch("End Use: #{fuel_name}: Heating (MBtu)", 0)
1148
+ energy_dhw = results.fetch("End Use: #{fuel_name}: Hot Water (MBtu)", 0)
1149
+ energy_cd = results.fetch("End Use: #{fuel_name}: Clothes Dryer (MBtu)", 0)
1150
+ energy_cr = results.fetch("End Use: #{fuel_name}: Range/Oven (MBtu)", 0)
1151
+ if htg_fuels.include?(fuel) && (not hpxml_path.include? 'location-miami') && (not hpxml_path.include? 'location-honolulu') && (not hpxml_path.include? 'location-phoenix')
1278
1152
  assert_operator(energy_htg, :>, 0)
1279
1153
  else
1280
1154
  assert_equal(0, energy_htg)
@@ -1355,7 +1229,7 @@ class HPXMLTest < MiniTest::Test
1355
1229
  puts "Wrote HVAC sizing results to #{csv_out}."
1356
1230
  end
1357
1231
 
1358
- def _write_ashrae_140_results(all_results, ashrae140_dir, csv_out)
1232
+ def _write_ashrae_140_results(all_results, csv_out)
1359
1233
  require 'csv'
1360
1234
 
1361
1235
  htg_loads = {}
@@ -1363,7 +1237,6 @@ class HPXMLTest < MiniTest::Test
1363
1237
  CSV.open(csv_out, 'w') do |csv|
1364
1238
  csv << ['Test Case', 'Annual Heating Load [MMBtu]', 'Annual Cooling Load [MMBtu]']
1365
1239
  all_results.sort.each do |xml, xml_results|
1366
- next unless xml.include? ashrae140_dir
1367
1240
  next unless xml.include? 'C.xml'
1368
1241
 
1369
1242
  htg_load = xml_results['Load: Heating (MBtu)'].round(2)
@@ -1372,7 +1245,6 @@ class HPXMLTest < MiniTest::Test
1372
1245
  htg_loads[test_name] = htg_load
1373
1246
  end
1374
1247
  all_results.sort.each do |xml, xml_results|
1375
- next unless xml.include? ashrae140_dir
1376
1248
  next unless xml.include? 'L.xml'
1377
1249
 
1378
1250
  clg_load = xml_results['Load: Cooling (MBtu)'].round(2)