urbanopt-cli 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (691) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/CMakeLists.txt +9 -9
  4. data/Gemfile +10 -12
  5. data/README.md +1 -0
  6. data/example_files/Gemfile +26 -10
  7. data/example_files/mappers/Baseline.rb +9 -0
  8. data/example_files/mappers/CreateBar.rb +2 -0
  9. data/example_files/mappers/Floorspace.rb +12 -10
  10. data/example_files/mappers/floorspace_workflow.osw +9 -0
  11. data/example_files/residential/clothes_washer.tsv +1 -1
  12. data/example_files/residential/water_heater.tsv +1 -1
  13. data/example_files/resources/hpxml-measures/.circleci/config.yml +20 -0
  14. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +13 -0
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +583 -334
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +687 -586
  17. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +21 -22
  18. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +34 -24
  19. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +14 -1
  20. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +33 -35
  21. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +33 -35
  22. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +34 -36
  23. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +361 -0
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +33 -35
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +33 -35
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +33 -35
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +33 -35
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +33 -35
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +33 -35
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +33 -35
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +33 -35
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +33 -35
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +33 -35
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +33 -35
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +47 -48
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +47 -48
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → base-bldgtype-multifamily-shared-pv.osw} +49 -50
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +365 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → base-bldgtype-multifamily.osw} +43 -44
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +36 -38
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +33 -34
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +33 -34
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +33 -35
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +33 -34
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +33 -34
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +33 -34
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +33 -34
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +33 -35
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +33 -35
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +33 -35
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +33 -34
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +33 -35
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +33 -35
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +33 -35
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +33 -35
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +33 -35
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +33 -35
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +33 -35
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +33 -35
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +33 -35
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +33 -35
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +33 -35
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +33 -35
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +33 -35
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +33 -35
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +362 -0
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +33 -35
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +362 -0
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +33 -35
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +33 -35
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +362 -0
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +33 -35
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +33 -35
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +33 -35
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +33 -35
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +33 -35
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +33 -36
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +361 -0
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +33 -35
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +361 -0
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +33 -35
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +33 -35
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +33 -35
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +33 -35
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +33 -35
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +33 -35
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +33 -35
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +33 -35
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +33 -35
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +33 -35
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +33 -35
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +33 -35
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +33 -35
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +33 -35
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +33 -35
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +33 -35
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +33 -35
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +33 -35
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +33 -35
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +33 -35
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +33 -35
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +33 -35
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +33 -35
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +33 -35
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +33 -35
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +33 -35
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +34 -35
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +33 -35
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +33 -35
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +33 -35
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +33 -35
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +33 -34
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +33 -34
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +33 -35
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +33 -35
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +33 -35
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +34 -35
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +33 -35
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +33 -35
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +35 -35
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +34 -35
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +34 -35
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +33 -35
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +33 -35
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +34 -35
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +33 -35
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +33 -35
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +33 -35
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +33 -35
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +34 -35
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +34 -35
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +34 -35
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +34 -35
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +33 -35
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +33 -35
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +33 -35
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +33 -35
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +34 -35
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +33 -35
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +33 -35
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +33 -35
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +33 -35
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +35 -37
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +34 -35
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +34 -35
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +34 -35
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +34 -35
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +34 -35
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +34 -35
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +33 -35
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +34 -35
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +33 -35
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +33 -35
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +33 -35
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +34 -35
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +34 -35
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +33 -35
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +34 -35
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +34 -36
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +33 -35
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +33 -35
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +33 -35
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +33 -35
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +33 -35
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +33 -35
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +33 -35
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +33 -35
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +33 -35
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +33 -35
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +33 -35
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +33 -35
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +33 -35
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +33 -35
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +33 -35
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +33 -35
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +33 -35
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +36 -38
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +39 -41
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +39 -41
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +33 -35
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -32
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +29 -31
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +33 -35
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +33 -35
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +33 -35
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +33 -35
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +33 -35
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +33 -35
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +33 -35
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +33 -35
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +19 -8
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +33 -35
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +33 -35
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +33 -35
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +369 -0
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-plug-loads-additional-multipliers.osw +361 -0
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +33 -35
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-schedules-random-seed.osw} +47 -50
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace.osw +33 -35
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater.osw +33 -35
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +33 -35
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-vacancy-6-months.osw +33 -35
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +33 -35
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +33 -35
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +33 -35
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +33 -35
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +33 -35
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +33 -35
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +41 -42
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +41 -42
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +40 -41
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +31 -33
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-plug-loads.osw} +35 -37
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +33 -35
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +33 -35
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +33 -35
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +33 -35
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +35 -37
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +35 -37
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +33 -35
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +33 -35
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +33 -35
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +33 -35
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +33 -35
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -38
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -35
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +33 -35
  228. data/example_files/resources/hpxml-measures/Gemfile +0 -2
  229. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +141 -129
  230. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +183 -153
  231. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +4 -4
  232. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +247 -121
  233. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +0 -10
  234. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +434 -0
  235. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +28 -35
  236. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -12
  237. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +60 -53
  238. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +11 -15
  239. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +81 -0
  240. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +3 -1
  241. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +21 -12
  242. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1150 -1072
  243. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +799 -389
  244. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +227 -351
  245. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +122 -89
  246. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +1 -1
  247. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +2 -3
  248. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +0 -6
  249. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +8 -13
  250. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +23 -21
  251. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +8 -7
  252. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +2 -2
  253. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
  254. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
  255. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +103 -72
  256. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +110 -37
  257. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +16 -7
  258. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +109 -0
  259. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1747 -838
  260. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +99 -0
  261. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +5 -16
  262. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +23 -25
  263. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -0
  264. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +1 -1
  265. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +10 -10
  266. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +1 -1
  267. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
  268. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +10 -10
  269. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +77 -60
  270. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +186 -34
  271. data/example_files/resources/hpxml-measures/README.md +1 -0
  272. data/example_files/resources/hpxml-measures/Rakefile +2 -9
  273. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +278 -254
  274. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +32 -5
  275. data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
  276. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +73 -137
  277. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
  278. data/example_files/resources/hpxml-measures/docs/source/conf.py +7 -4
  279. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +4 -4
  280. data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
  281. data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -5
  282. data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
  283. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2340 -0
  284. data/example_files/resources/hpxml-measures/docs/source/{simulation_output_report.rst → workflow_outputs.rst} +18 -16
  285. data/example_files/resources/hpxml-measures/tasks.rb +1154 -669
  286. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +64 -20
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +557 -559
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +523 -524
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +3 -4
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +524 -0
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +523 -524
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +557 -559
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +563 -565
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +511 -513
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +557 -559
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +557 -559
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +557 -559
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +564 -566
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +632 -634
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +530 -532
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +516 -518
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +561 -563
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +564 -566
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-multifamily-buffer-space.xml → base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml} +30 -59
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +553 -0
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-non-freezing-space.xml → base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml} +30 -59
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +30 -59
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +30 -59
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +426 -0
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +429 -0
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +469 -0
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +464 -0
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +409 -0
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +408 -0
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +411 -0
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +445 -0
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +408 -0
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +410 -0
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +445 -0
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +440 -0
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +459 -0
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +465 -0
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +35 -410
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +488 -0
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +472 -0
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +464 -0
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +457 -0
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +450 -0
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +447 -0
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +606 -0
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +517 -519
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +517 -519
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +549 -551
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -566
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +562 -564
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +550 -549
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +549 -551
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +552 -551
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +566 -568
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +518 -520
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +518 -520
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +519 -521
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +526 -528
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +518 -520
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +566 -568
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +567 -569
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +565 -567
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +523 -525
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +561 -563
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +576 -578
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +495 -497
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +564 -566
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +564 -566
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +564 -566
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +564 -566
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +564 -566
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +576 -578
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +576 -578
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +576 -578
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +569 -571
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +576 -578
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +576 -578
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +562 -564
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-window-interior-shading.xml → base-dhw-tank-elec-uef.xml} +8 -9
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +562 -564
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +564 -0
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +562 -564
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +560 -562
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-dhw-tank-heat-pump-uef.xml} +6 -13
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +568 -570
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +575 -577
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +560 -562
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +562 -564
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +562 -564
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +560 -562
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +560 -0
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +559 -561
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +560 -0
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +567 -569
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +574 -576
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +559 -561
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +559 -561
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +660 -664
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +574 -576
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +561 -563
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +561 -563
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +561 -563
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +561 -563
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +635 -639
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +561 -563
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +561 -563
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +561 -563
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +564 -566
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +560 -562
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +576 -578
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +589 -591
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +589 -591
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +516 -0
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2473 -2493
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +753 -755
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-interior-shading.xml +561 -563
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +503 -505
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +497 -497
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +723 -729
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +561 -563
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +561 -563
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +684 -688
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +515 -517
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +608 -610
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +557 -559
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +572 -574
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +572 -574
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +572 -574
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +575 -577
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +626 -628
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +563 -562
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +560 -562
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +560 -562
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +519 -521
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +519 -521
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +520 -522
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +519 -521
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +519 -521
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +519 -521
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +550 -549
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +547 -549
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +547 -549
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +580 -576
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +533 -535
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +564 -563
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +564 -563
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +561 -563
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +561 -563
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +563 -562
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +561 -563
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +510 -512
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +553 -555
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +526 -528
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +506 -505
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +513 -513
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +513 -513
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -0
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +561 -563
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +547 -549
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +561 -563
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +561 -563
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +550 -550
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +559 -561
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +547 -549
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +547 -549
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +547 -549
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +577 -579
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -564
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +498 -500
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +549 -548
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +512 -511
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +556 -555
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +562 -561
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +562 -561
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +519 -518
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +913 -912
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +834 -837
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +487 -489
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +566 -0
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +569 -571
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +509 -511
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +509 -511
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +561 -563
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +513 -513
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +513 -513
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +564 -566
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +561 -563
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +513 -513
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +572 -574
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +584 -586
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +487 -489
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +561 -563
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +561 -563
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +515 -517
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +561 -563
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +515 -517
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +573 -575
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +589 -591
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +546 -548
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +539 -541
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +574 -576
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +575 -577
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +575 -577
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +573 -575
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +573 -575
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +574 -576
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +574 -576
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +793 -795
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +573 -575
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +571 -573
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +476 -495
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +578 -0
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +753 -833
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +740 -820
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +549 -559
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +574 -576
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shelter-coefficient.xml +564 -566
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +723 -725
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +2 -4
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +2 -4
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +2 -4
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +562 -564
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +568 -570
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +564 -566
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +565 -567
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +561 -563
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +561 -563
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-autosize.xml +559 -561
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml +562 -561
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml +559 -558
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml +556 -558
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml +556 -558
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml +518 -520
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml +569 -571
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml +519 -521
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml +549 -548
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml +546 -548
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml +546 -548
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml +575 -571
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml +560 -559
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml +559 -558
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml +509 -511
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml +552 -554
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml +512 -512
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml +546 -548
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml +559 -561
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml +559 -561
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml +549 -549
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml +557 -559
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml +562 -564
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml +559 -561
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml +548 -547
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml +561 -560
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml +558 -557
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml +553 -552
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml +558 -557
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-room-ac-only-autosize.xml +508 -510
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-stove-oil-only-autosize.xml +512 -512
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml +512 -512
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +533 -535
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +561 -563
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +561 -563
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +561 -563
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +576 -578
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +3 -5
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +563 -0
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +561 -563
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +561 -563
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +561 -563
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +561 -563
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +545 -547
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +542 -544
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +545 -545
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +562 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +612 -616
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +625 -629
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +609 -611
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +549 -551
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +471 -473
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +534 -534
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +561 -560
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +562 -561
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +913 -912
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +913 -912
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +532 -534
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +547 -549
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +547 -549
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +913 -912
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{invalid-calendar-year.xml → hvac-inconsistent-fan-powers.xml} +8 -5
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +569 -571
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +562 -0
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +562 -0
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +562 -0
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +568 -567
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +561 -563
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +561 -563
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +465 -0
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +643 -0
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +564 -0
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +574 -576
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +552 -551
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +518 -520
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +563 -565
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +562 -0
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +561 -563
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +576 -578
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +561 -563
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +909 -908
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +559 -561
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +561 -563
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +561 -563
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +564 -566
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +561 -563
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +589 -591
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +561 -563
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +562 -0
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +545 -547
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +561 -563
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +567 -569
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +567 -569
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +565 -564
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +527 -529
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/slab-zero-exposed-perimeter.xml +561 -563
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +532 -534
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +567 -566
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +532 -534
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +574 -576
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +561 -563
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +561 -563
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +464 -827
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +464 -827
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +589 -591
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +576 -578
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +561 -563
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +561 -563
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +561 -563
  631. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -14
  632. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -14
  633. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -14
  634. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -14
  635. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -14
  636. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -14
  637. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -14
  638. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -14
  639. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -14
  640. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -14
  641. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -14
  642. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -14
  643. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -14
  644. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -14
  645. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -14
  646. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -14
  647. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -14
  648. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -14
  649. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -14
  650. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -14
  651. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -14
  652. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -14
  653. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -16
  654. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -16
  655. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -16
  656. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -16
  657. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +277 -224
  658. data/lib/uo_cli/version.rb +1 -1
  659. data/scripts/setup-env-gitbash.sh +4 -4
  660. data/scripts/setup-env.bat +14 -11
  661. data/scripts/setup-env.ps1 +13 -10
  662. data/uo_cli.gemspec +6 -4
  663. metadata +106 -57
  664. data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/appliances-location-unconditioned-space.xml +0 -564
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
@@ -1,14 +1,14 @@
1
- .. _simreport:
1
+ .. _workflow_outputs:
2
2
 
3
- SimulationOutputReport Measure
4
- ==============================
3
+ Workflow Outputs
4
+ ================
5
5
 
6
- The SimulationOutputReport reporting measure generates a variety of annual (and optionally, timeseries) outputs for a residential HPXML-based model.
6
+ OpenStudio-HPXML generates a variety of annual (and optionally, timeseries) outputs for a residential HPXML-based model.
7
7
 
8
8
  Annual Outputs
9
9
  --------------
10
10
 
11
- The measure will always generate an annual CSV output file called results_annual.csv, co-located with the EnergyPlus output.
11
+ OpenStudio-HPXML will always generate an annual CSV output file called results_annual.csv, co-located with the EnergyPlus output.
12
12
  The CSV file includes the following sections of output:
13
13
 
14
14
  Annual Energy Consumption by Fuel Type
@@ -20,7 +20,7 @@ Current fuel types are:
20
20
  Type Notes
21
21
  ========================== ===========================
22
22
  Electricity: Total (MBtu)
23
- Electricity: Net (MBtu) Excludes any PV generation.
23
+ Electricity: Net (MBtu) Excludes any power produced by PV or generators.
24
24
  Natural Gas: Total (MBtu)
25
25
  Fuel Oil: Total (MBtu) Includes "fuel oil", "fuel oil 1", "fuel oil 2", "fuel oil 4", "fuel oil 5/6", "kerosene", and "diesel"
26
26
  Propane: Total (MBtu)
@@ -34,9 +34,9 @@ Annual Energy Consumption By Fuel Type and End Use
34
34
 
35
35
  Current end use/fuel type combinations are:
36
36
 
37
- ================================================ =======
38
- Type Notes
39
- ================================================ =======
37
+ ========================================================== ====================================================
38
+ Type Notes
39
+ ========================================================== ====================================================
40
40
  Electricity: Heating (MBtu)
41
41
  Electricity: Heating Fans/Pumps (MBtu)
42
42
  Electricity: Cooling (MBtu)
@@ -67,7 +67,8 @@ Current end use/fuel type combinations are:
67
67
  Electricity: Pool Pump (MBtu)
68
68
  Electricity: Hot Tub Heater (MBtu)
69
69
  Electricity: Hot Tub Pump (MBtu)
70
- Electricity: PV (MBtu)
70
+ Electricity: PV (MBtu) Negative value for any power produced
71
+ Electricity: Generator (MBtu) Negative value for power produced
71
72
  Natural Gas: Heating (MBtu)
72
73
  Natural Gas: Hot Water (MBtu)
73
74
  Natural Gas: Clothes Dryer (MBtu)
@@ -79,6 +80,7 @@ Current end use/fuel type combinations are:
79
80
  Natural Gas: Grill (MBtu)
80
81
  Natural Gas: Lighting (MBtu)
81
82
  Natural Gas: Fireplace (MBtu)
83
+ Natural Gas: Generator (MBtu) Positive value for any fuel consumed
82
84
  Fuel Oil: Heating (MBtu)
83
85
  Fuel Oil: Hot Water (MBtu)
84
86
  Fuel Oil: Clothes Dryer (MBtu)
@@ -97,6 +99,7 @@ Current end use/fuel type combinations are:
97
99
  Propane: Grill (MBtu)
98
100
  Propane: Lighting (MBtu)
99
101
  Propane: Fireplace (MBtu)
102
+ Propane: Generator (MBtu) Positive value for any fuel consumed
100
103
  Wood Cord: Heating (MBtu)
101
104
  Wood Cord: Hot Water (MBtu)
102
105
  Wood Cord: Clothes Dryer (MBtu)
@@ -124,7 +127,7 @@ Current end use/fuel type combinations are:
124
127
  Coal: Grill (MBtu)
125
128
  Coal: Lighting (MBtu)
126
129
  Coal: Fireplace (MBtu)
127
- ================================================ =======
130
+ ========================================================== ====================================================
128
131
 
129
132
  Annual Building Loads
130
133
  ~~~~~~~~~~~~~~~~~~~~~
@@ -208,9 +211,8 @@ Current component loads disaggregated by Heating/Cooling are:
208
211
  Component Load: \*: Internal Mass (MBtu) Heat gain/loss from internal mass (e.g., furniture, interior walls/floors) in conditioned space
209
212
  Component Load: \*: Infiltration (MBtu) Heat gain/loss from airflow induced by stack and wind effects
210
213
  Component Load: \*: Natural Ventilation (MBtu) Heat gain/loss from airflow through operable windows
211
- Component Load: \*: Mechanical Ventilation (MBtu) Heat gain/loss from airflow/fan energy from a whole house mechanical ventilation system
214
+ Component Load: \*: Mechanical Ventilation (MBtu) Heat gain/loss from airflow/fan energy from mechanical ventilation systems (including clothes dryer exhaust)
212
215
  Component Load: \*: Whole House Fan (MBtu) Heat gain/loss from airflow due to a whole house fan
213
- Component Load; \*: Clothes Dryer Exhaust (MBtu) Heat gain/loss from airflow due to clothes dryer exhaust
214
216
  Component Load: \*: Ducts (MBtu) Heat gain/loss from conduction and leakage losses through supply/return ducts outside conditioned space
215
217
  Component Load: \*: Internal Gains (MBtu) Heat gain/loss from appliances, lighting, plug loads, water heater tank losses, etc. in the conditioned space
216
218
  ================================================= =========================================================================================================
@@ -233,7 +235,7 @@ Current annual hot water uses are:
233
235
  Timeseries Outputs
234
236
  ------------------
235
237
 
236
- The measure will generate a timeseries CSV output file if the Timeseries Reporting Frequency argument is specified and one or more Generate Timeseries Output arguments are true.
238
+ OpenStudio-HPXML can optionally generate a timeseries CSV output file.
237
239
  The timeseries output file is called results_timeseries.csv and co-located with the EnergyPlus output.
238
240
 
239
241
  Depending on the outputs requested, CSV files may include:
@@ -244,9 +246,9 @@ Depending on the outputs requested, CSV files may include:
244
246
  Fuel Consumptions Energy use for each fuel type (in kBtu for fossil fuels and kWh for electricity).
245
247
  End Use Consumptions Energy use for each end use type (in kBtu for fossil fuels and kWh for electricity).
246
248
  Hot Water Uses Water use for each end use type (in gallons).
247
- Total Loads Heating and cooling loads (in kBtu) for the building.
249
+ Total Loads Heating, cooling, and hot water loads (in kBtu) for the building.
248
250
  Component Loads Heating and cooling loads (in kBtu) disaggregated by component (e.g., Walls, Windows, Infiltration, Ducts, etc.).
249
251
  Zone Temperatures Average temperatures (in deg-F) for each space modeled (e.g., living space, attic, garage, basement, crawlspace, etc.).
250
- Airflows Airflow rates (in cfm) for infiltration, mechanical ventilation, natural ventilation, whole house fans, and clothes dryer exhaust.
252
+ Airflows Airflow rates (in cfm) for infiltration, mechanical ventilation (including clothes dryer exhaust), natural ventilation, whole house fans.
251
253
  Weather Weather file data including outdoor temperatures, relative humidity, wind speed, and solar.
252
254
  =================================== ==================================================================================================================================
@@ -7,15 +7,15 @@ def create_osws
7
7
 
8
8
  this_dir = File.dirname(__FILE__)
9
9
  tests_dir = File.join(this_dir, 'BuildResidentialHPXML/tests')
10
+ File.delete(*Dir.glob("#{tests_dir}/*.osw"))
10
11
 
11
12
  # Hash of OSW -> Parent OSW
12
13
  osws_files = {
13
14
  'base.osw' => nil, # single-family detached
14
- 'base-single-family-attached.osw' => 'base.osw',
15
- 'base-multifamily.osw' => 'base.osw',
16
15
  'base-appliances-coal.osw' => 'base.osw',
17
16
  'base-appliances-dehumidifier.osw' => 'base-location-dallas-tx.osw',
18
- 'base-appliances-dehumidifier-ief.osw' => 'base-appliances-dehumidifier.osw',
17
+ 'base-appliances-dehumidifier-ief-portable.osw' => 'base-appliances-dehumidifier.osw',
18
+ 'base-appliances-dehumidifier-ief-whole-home.osw' => 'base-appliances-dehumidifier-ief-portable.osw',
19
19
  'base-appliances-dehumidifier-50percent.osw' => 'base-appliances-dehumidifier.osw',
20
20
  'base-appliances-gas.osw' => 'base.osw',
21
21
  'base-appliances-modified.osw' => 'base.osw',
@@ -24,11 +24,25 @@ def create_osws
24
24
  'base-appliances-propane.osw' => 'base.osw',
25
25
  'base-appliances-wood.osw' => 'base.osw',
26
26
  # 'base-atticroof-cathedral.osw' => 'base.osw', # TODO: conditioned attic ceiling heights are greater than wall height
27
- # 'base-atticroof-conditioned.osw' => 'base.osw', # TODO: has both conditioned and unconditioned attics
27
+ # 'base-atticroof-conditioned.osw' => 'base.osw', # Not supporting attic kneewalls for now
28
28
  'base-atticroof-flat.osw' => 'base.osw',
29
29
  'base-atticroof-radiant-barrier.osw' => 'base-location-dallas-tx.osw',
30
30
  'base-atticroof-unvented-insulated-roof.osw' => 'base.osw',
31
31
  'base-atticroof-vented.osw' => 'base.osw',
32
+ 'base-bldgtype-multifamily.osw' => 'base.osw',
33
+ # 'base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.osw' => 'base.osw', # Not supporting units adjacent to other MF spaces for now
34
+ # 'base-bldgtype-multifamily-adjacent-to-multiple.osw' => 'base.osw', # Not supporting units adjacent to other MF spaces for now
35
+ # 'base-bldgtype-multifamily-adjacent-to-non-freezing-space.osw' => 'base.osw', # Not supporting units adjacent to other MF spaces for now
36
+ # 'base-bldgtype-multifamily-adjacent-to-other-heated-space.osw' => 'base.osw', # Not supporting units adjacent to other MF spaces for now
37
+ # 'base-bldgtype-multifamily-adjacent-to-other-housing-unit.osw' => 'base.osw', # Not supporting units adjacent to other MF spaces for now
38
+ # 'base-bldgtype-multifamily-shared-laundry-room.osw' => 'base.osw', # Not going to support shared laundry room
39
+ 'base-bldgtype-multifamily-shared-mechvent.osw' => 'base-bldgtype-multifamily.osw',
40
+ # 'base-bldgtype-multifamily-shared-mechvent-multiple.osw' => 'base.osw', # Not going to support > 2 MV systems
41
+ 'base-bldgtype-multifamily-shared-mechvent-preconditioning.osw' => 'base-bldgtype-multifamily-shared-mechvent.osw',
42
+ 'base-bldgtype-multifamily-shared-pv.osw' => 'base-bldgtype-multifamily.osw',
43
+ 'base-bldgtype-multifamily-shared-water-heater.osw' => 'base-bldgtype-multifamily.osw',
44
+ # 'base-bldgtype-multifamily-shared-water-heater-recirc.osw' => 'base.osw', $ Not supporting shared recirculation for now
45
+ 'base-bldgtype-single-family-attached.osw' => 'base.osw',
32
46
  'base-dhw-combi-tankless.osw' => 'base-dhw-indirect.osw',
33
47
  'base-dhw-combi-tankless-outside.osw' => 'base-dhw-combi-tankless.osw',
34
48
  # 'base-dhw-desuperheater.osw' => 'base.osw', # Not supporting desuperheater for now
@@ -55,9 +69,6 @@ def create_osws
55
69
  'base-dhw-recirc-nocontrol.osw' => 'base.osw',
56
70
  'base-dhw-recirc-temperature.osw' => 'base.osw',
57
71
  'base-dhw-recirc-timer.osw' => 'base.osw',
58
- # 'base-dhw-shared-laundry-room.osw' => 'base.osw',
59
- # 'base-dhw-shared-water-heater.osw' => 'base.osw',
60
- # 'base-dhw-shared-water-heater-recirc.osw' => 'base.osw',
61
72
  'base-dhw-solar-direct-evacuated-tube.osw' => 'base.osw',
62
73
  'base-dhw-solar-direct-flat-plate.osw' => 'base.osw',
63
74
  'base-dhw-solar-direct-ics.osw' => 'base.osw',
@@ -65,39 +76,37 @@ def create_osws
65
76
  'base-dhw-solar-indirect-flat-plate.osw' => 'base.osw',
66
77
  'base-dhw-solar-thermosyphon-flat-plate.osw' => 'base.osw',
67
78
  'base-dhw-tank-coal.osw' => 'base.osw',
79
+ 'base-dhw-tank-elec-uef.osw' => 'base.osw',
68
80
  'base-dhw-tank-gas.osw' => 'base.osw',
81
+ 'base-dhw-tank-gas-uef.osw' => 'base-dhw-tank-gas.osw',
69
82
  'base-dhw-tank-gas-outside.osw' => 'base.osw',
70
83
  'base-dhw-tank-heat-pump.osw' => 'base.osw',
71
84
  'base-dhw-tank-heat-pump-outside.osw' => 'base.osw',
85
+ 'base-dhw-tank-heat-pump-uef.osw' => 'base-dhw-tank-heat-pump.osw',
72
86
  'base-dhw-tank-heat-pump-with-solar.osw' => 'base.osw',
73
87
  'base-dhw-tank-heat-pump-with-solar-fraction.osw' => 'base.osw',
74
88
  'base-dhw-tankless-electric.osw' => 'base.osw',
75
89
  'base-dhw-tankless-electric-outside.osw' => 'base.osw',
90
+ 'base-dhw-tankless-electric-uef.osw' => 'base-dhw-tankless-electric.osw',
76
91
  'base-dhw-tankless-gas.osw' => 'base.osw',
92
+ 'base-dhw-tankless-gas-uef.osw' => 'base-dhw-tankless-gas.osw',
77
93
  'base-dhw-tankless-gas-with-solar.osw' => 'base.osw',
78
94
  'base-dhw-tankless-gas-with-solar-fraction.osw' => 'base.osw',
79
95
  'base-dhw-tankless-propane.osw' => 'base.osw',
80
96
  'base-dhw-tank-oil.osw' => 'base.osw',
81
97
  'base-dhw-tank-wood.osw' => 'base.osw',
82
- 'base-dhw-uef.osw' => 'base.osw',
83
98
  'base-enclosure-2stories.osw' => 'base.osw',
84
99
  'base-enclosure-2stories-garage.osw' => 'base.osw',
85
- # 'base-enclosure-attached-multifamily.osw' => 'base.osw',
86
100
  'base-enclosure-beds-1.osw' => 'base.osw',
87
101
  'base-enclosure-beds-2.osw' => 'base.osw',
88
102
  'base-enclosure-beds-4.osw' => 'base.osw',
89
103
  'base-enclosure-beds-5.osw' => 'base.osw',
90
- # 'base-enclosure-common-surfaces.osw' => 'base.osw',
91
104
  'base-enclosure-garage.osw' => 'base.osw',
92
105
  'base-enclosure-infil-ach-house-pressure.osw' => 'base.osw',
93
106
  'base-enclosure-infil-cfm-house-pressure.osw' => 'base-enclosure-infil-cfm50.osw',
94
107
  'base-enclosure-infil-cfm50.osw' => 'base.osw',
95
108
  'base-enclosure-infil-flue.osw' => 'base.osw',
96
109
  'base-enclosure-infil-natural-ach.osw' => 'base.osw',
97
- # 'base-enclosure-other-heated-space.osw' => 'base.osw', # TODO: uncomment when we can model multifamily with ambient foundation?
98
- # 'base-enclosure-other-housing-unit.osw' => 'base-foundation-ambient.osw', # TODO: uncomment when we can model multifamily with ambient foundation?
99
- # 'base-enclosure-other-multifamily-buffer-space.osw' => 'base.osw', # TODO: uncomment when we can model multifamily with ambient foundation?
100
- # 'base-enclosure-other-non-freezing-space.osw' => 'base.osw', # TODO: uncomment when we can model multifamily with ambient foundation?
101
110
  'base-enclosure-overhangs.osw' => 'base.osw',
102
111
  # 'base-enclosure-rooftypes.osw' => 'base.osw',
103
112
  # 'base-enclosure-skylights.osw' => 'base.osw', # There are no front roof surfaces, but 15.0 ft^2 of skylights were specified.
@@ -106,10 +115,10 @@ def create_osws
106
115
  # 'base-enclosure-windows-interior-shading.osw' => 'base.osw', # Not going to support interior shading by facade
107
116
  'base-enclosure-windows-none.osw' => 'base.osw',
108
117
  'base-foundation-ambient.osw' => 'base.osw',
109
- # 'base-foundation-complex.osw' => 'base.osw', # 1 kiva object instead of 10
118
+ # 'base-foundation-complex.osw' => 'base.osw', # Not going to support multiple foundation types
110
119
  'base-foundation-conditioned-basement-slab-insulation.osw' => 'base.osw',
111
120
  # 'base-foundation-conditioned-basement-wall-interior-insulation.osw' => 'base.osw',
112
- # 'base-foundation-multiple.osw' => 'base.osw', # Not supporting multiple foundations for now
121
+ # 'base-foundation-multiple.osw' => 'base.osw', # Not going to support multiple foundation types
113
122
  'base-foundation-slab.osw' => 'base.osw',
114
123
  'base-foundation-unconditioned-basement.osw' => 'base.osw',
115
124
  # 'base-foundation-unconditioned-basement-above-grade.osw' => 'base.osw', # TODO: add foundation wall windows
@@ -146,7 +155,6 @@ def create_osws
146
155
  'base-hvac-fireplace-wood-only.osw' => 'base.osw',
147
156
  'base-hvac-fixed-heater-gas-only.osw' => 'base.osw',
148
157
  'base-hvac-floor-furnace-propane-only.osw' => 'base.osw',
149
- # 'base-hvac-flowrate.osw' => 'base.osw', # Not going to support in the measure
150
158
  'base-hvac-furnace-elec-central-ac-1-speed.osw' => 'base.osw',
151
159
  'base-hvac-furnace-elec-only.osw' => 'base.osw',
152
160
  'base-hvac-furnace-gas-central-ac-2-speed.osw' => 'base.osw',
@@ -169,7 +177,8 @@ def create_osws
169
177
  # 'base-hvac-multiple2.osw' => 'base.osw', # Not supporting multiple heating/cooling systems for now
170
178
  'base-hvac-none.osw' => 'base.osw',
171
179
  'base-hvac-portable-heater-gas-only.osw' => 'base.osw',
172
- 'base-hvac-programmable-thermostat.osw' => 'base.osw',
180
+ # 'base-hvac-programmable-thermostat.osw' => 'base.osw',
181
+ # 'base-hvac-programmable-thermostat-detailed.osw' => 'base.osw',
173
182
  'base-hvac-room-ac-only.osw' => 'base.osw',
174
183
  'base-hvac-room-ac-only-33percent.osw' => 'base.osw',
175
184
  'base-hvac-setpoints.osw' => 'base.osw',
@@ -194,23 +203,18 @@ def create_osws
194
203
  'base-mechvent-erv.osw' => 'base.osw',
195
204
  'base-mechvent-erv-atre-asre.osw' => 'base.osw',
196
205
  'base-mechvent-exhaust.osw' => 'base.osw',
197
- # 'base-mechvent-exhaust-rated-flow-rate.osw' => 'base.osw', # No difference
198
206
  'base-mechvent-hrv.osw' => 'base.osw',
199
207
  'base-mechvent-hrv-asre.osw' => 'base.osw',
200
- # 'base-mechvent-multiple.osw' => 'base.osw',
201
- # 'base-mechvent-shared.osw' => 'base.osw',
202
- # 'base-mechvent-shared-multiple.osw' => 'base.osw',
203
- # 'base-mechvent-shared-preconditioning.osw' => 'base.osw',
208
+ # 'base-mechvent-multiple.osw' => 'base.osw', # Not going to support > 2 MV systems
204
209
  'base-mechvent-supply.osw' => 'base.osw',
205
210
  'base-mechvent-whole-house-fan.osw' => 'base.osw',
206
211
  'base-misc-defaults.osw' => 'base.osw',
207
- 'base-misc-loads-large-uncommon.osw' => 'base-enclosure-garage.osw',
212
+ 'base-misc-loads-large-uncommon.osw' => 'base.osw',
208
213
  'base-misc-loads-large-uncommon2.osw' => 'base-misc-loads-large-uncommon.osw',
209
214
  # 'base-misc-loads-none.osw' => 'base.osw',
210
215
  'base-misc-neighbor-shading.osw' => 'base.osw',
211
216
  'base-misc-usage-multiplier.osw' => 'base.osw',
212
217
  'base-pv.osw' => 'base.osw',
213
- # 'base-pv-shared.osw' => 'base.osw',
214
218
  'base-simcontrol-calendar-year-custom.osw' => 'base.osw',
215
219
  'base-simcontrol-daylight-saving-custom.osw' => 'base.osw',
216
220
  'base-simcontrol-daylight-saving-disabled.osw' => 'base.osw',
@@ -223,15 +227,14 @@ def create_osws
223
227
  'extra-auto.osw' => 'base.osw',
224
228
  'extra-pv-roofpitch.osw' => 'base.osw',
225
229
  'extra-dhw-solar-latitude.osw' => 'base.osw',
226
- 'extra-dhw-shared-water-heater.osw' => 'base-single-family-attached.osw',
227
230
  'extra-second-refrigerator.osw' => 'base.osw',
228
231
  'extra-second-heating-system-portable-heater.osw' => 'base.osw',
229
232
  'extra-second-heating-system-fireplace.osw' => 'base.osw',
230
- 'extra-pv-shared.osw' => 'base-single-family-attached.osw',
231
233
  'extra-enclosure-garage-partially-protruded.osw' => 'base.osw',
232
- 'extra-mechvent-shared.osw' => 'base-single-family-attached.osw',
233
- 'extra-mechvent-shared-preconditioning.osw' => 'extra-mechvent-shared.osw',
234
234
  'extra-vacancy-6-months.osw' => 'base-schedules-stochastic.osw',
235
+ 'extra-schedules-random-seed.osw' => 'base-schedules-stochastic.osw',
236
+ 'extra-hvac-programmable-thermostat.osw' => 'base.osw',
237
+ 'extra-plug-loads-additional-multipliers.osw' => 'base.osw',
235
238
 
236
239
  'invalid_files/non-electric-heat-pump-water-heater.osw' => 'base.osw',
237
240
  'invalid_files/heating-system-and-heat-pump.osw' => 'base.osw',
@@ -240,14 +243,14 @@ def create_osws
240
243
  'invalid_files/non-integer-ceiling-fan-quantity.osw' => 'base.osw',
241
244
  'invalid_files/single-family-detached-slab-non-zero-foundation-height.osw' => 'base.osw',
242
245
  'invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw' => 'base.osw',
243
- 'invalid_files/single-family-attached-ambient.osw' => 'base-single-family-attached.osw',
244
- 'invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw' => 'base-multifamily.osw',
245
- 'invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw' => 'base-multifamily.osw',
246
+ 'invalid_files/single-family-attached-ambient.osw' => 'base-bldgtype-single-family-attached.osw',
247
+ 'invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw' => 'base-bldgtype-multifamily.osw',
248
+ 'invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw' => 'base-bldgtype-multifamily.osw',
246
249
  'invalid_files/slab-non-zero-foundation-height-above-grade.osw' => 'base.osw',
247
250
  'invalid_files/ducts-location-and-areas-not-same-type.osw' => 'base.osw',
248
251
  'invalid_files/second-heating-system-serves-majority-heat.osw' => 'base.osw',
249
- 'invalid_files/single-family-attached-no-building-orientation.osw' => 'base-single-family-attached.osw',
250
- 'invalid_files/multifamily-no-building-orientation.osw' => 'base-multifamily.osw',
252
+ 'invalid_files/single-family-attached-no-building-orientation.osw' => 'base-bldgtype-single-family-attached.osw',
253
+ 'invalid_files/multifamily-no-building-orientation.osw' => 'base-bldgtype-multifamily.osw',
251
254
  'invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw' => 'base.osw',
252
255
  'invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw' => 'base.osw',
253
256
  'invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw' => 'base.osw',
@@ -255,7 +258,9 @@ def create_osws
255
258
  'invalid_files/unvented-attic-with-floor-and-roof-insulation.osw' => 'base.osw',
256
259
  'invalid_files/conditioned-basement-with-ceiling-insulation.osw' => 'base.osw',
257
260
  'invalid_files/conditioned-attic-with-floor-insulation.osw' => 'base.osw',
258
- 'invalid_files/dhw-indirect-without-boiler.osw' => 'base.osw'
261
+ 'invalid_files/dhw-indirect-without-boiler.osw' => 'base.osw',
262
+ 'invalid_files/multipliers-without-plug-loads.osw' => 'base.osw',
263
+ 'invalid_files/multipliers-without-fuel-loads.osw' => 'base.osw'
259
264
  }
260
265
 
261
266
  puts "Generating #{osws_files.size} OSW files..."
@@ -356,7 +361,6 @@ def get_values(osw_file, step)
356
361
  step.setArgument('geometry_foundation_height_above_grade', 1.0)
357
362
  step.setArgument('geometry_roof_type', 'gable')
358
363
  step.setArgument('geometry_roof_pitch', '6:12')
359
- step.setArgument('geometry_roof_structure', 'truss, cantilever')
360
364
  step.setArgument('geometry_attic_type', HPXML::AtticTypeUnvented)
361
365
  step.setArgument('geometry_eaves_depth', 0)
362
366
  step.setArgument('geometry_num_bedrooms', 3)
@@ -366,19 +370,21 @@ def get_values(osw_file, step)
366
370
  step.setArgument('foundation_wall_insulation_r', 8.9)
367
371
  step.setArgument('foundation_wall_insulation_distance_to_top', 0.0)
368
372
  step.setArgument('foundation_wall_insulation_distance_to_bottom', 8.0)
373
+ step.setArgument('foundation_wall_thickness', '8.0')
369
374
  step.setArgument('slab_perimeter_insulation_r', 0)
370
375
  step.setArgument('slab_perimeter_depth', 0)
371
376
  step.setArgument('slab_under_insulation_r', 0)
372
377
  step.setArgument('slab_under_width', 0)
373
- step.setArgument('slab_carpet_fraction', 0.0)
374
- step.setArgument('slab_carpet_r', 0.0)
378
+ step.setArgument('slab_thickness', '4.0')
379
+ step.setArgument('slab_carpet_fraction', '0.0')
380
+ step.setArgument('slab_carpet_r', '0.0')
375
381
  step.setArgument('ceiling_assembly_r', 39.3)
376
382
  step.setArgument('roof_material_type', HPXML::RoofTypeAsphaltShingles)
377
383
  step.setArgument('roof_color', Constants.Auto)
378
384
  step.setArgument('roof_assembly_r', 2.3)
379
385
  step.setArgument('roof_solar_absorptance', Constants.Auto)
380
- step.setArgument('roof_emittance', 0.92)
381
- step.setArgument('roof_radiant_barrier', false)
386
+ step.setArgument('roof_emittance', '0.92')
387
+ step.setArgument('roof_radiant_barrier', 'false')
382
388
  step.setArgument('roof_radiant_barrier_grade', '1')
383
389
  step.setArgument('neighbor_front_distance', 0)
384
390
  step.setArgument('neighbor_back_distance', 0)
@@ -393,7 +399,7 @@ def get_values(osw_file, step)
393
399
  step.setArgument('wall_color', Constants.Auto)
394
400
  step.setArgument('wall_assembly_r', 23)
395
401
  step.setArgument('wall_solar_absorptance', Constants.Auto)
396
- step.setArgument('wall_emittance', 0.92)
402
+ step.setArgument('wall_emittance', '0.92')
397
403
  step.setArgument('window_front_wwr', 0)
398
404
  step.setArgument('window_back_wwr', 0)
399
405
  step.setArgument('window_left_wwr', 0)
@@ -433,7 +439,6 @@ def get_values(osw_file, step)
433
439
  step.setArgument('heating_system_heating_efficiency', 0.92)
434
440
  step.setArgument('heating_system_heating_capacity', '64000.0')
435
441
  step.setArgument('heating_system_fraction_heat_load_served', 1)
436
- step.setArgument('heating_system_electric_auxiliary_energy', 0)
437
442
  step.setArgument('heating_system_has_flue_or_chimney', false)
438
443
  step.setArgument('cooling_system_type', HPXML::HVACTypeCentralAirConditioner)
439
444
  step.setArgument('cooling_system_cooling_efficiency_seer', 13.0)
@@ -458,14 +463,10 @@ def get_values(osw_file, step)
458
463
  step.setArgument('heat_pump_backup_fuel', 'none')
459
464
  step.setArgument('heat_pump_backup_heating_efficiency', 1)
460
465
  step.setArgument('heat_pump_backup_heating_capacity', '34121.0')
461
- step.setArgument('setpoint_heating_temp', 68)
462
- step.setArgument('setpoint_heating_setback_temp', 68)
463
- step.setArgument('setpoint_heating_setback_hours_per_week', 0)
464
- step.setArgument('setpoint_heating_setback_start_hour', 0)
465
- step.setArgument('setpoint_cooling_temp', 78)
466
- step.setArgument('setpoint_cooling_setup_temp', 78)
467
- step.setArgument('setpoint_cooling_setup_hours_per_week', 0)
468
- step.setArgument('setpoint_cooling_setup_start_hour', 0)
466
+ step.setArgument('setpoint_heating_weekday_temp', 68)
467
+ step.setArgument('setpoint_heating_weekend_temp', 68)
468
+ step.setArgument('setpoint_cooling_weekday_temp', 78)
469
+ step.setArgument('setpoint_cooling_weekend_temp', 78)
469
470
  step.setArgument('ducts_supply_leakage_units', HPXML::UnitsCFM25)
470
471
  step.setArgument('ducts_return_leakage_units', HPXML::UnitsCFM25)
471
472
  step.setArgument('ducts_supply_leakage_value', 75.0)
@@ -482,7 +483,6 @@ def get_values(osw_file, step)
482
483
  step.setArgument('heating_system_heating_efficiency_2', 1.0)
483
484
  step.setArgument('heating_system_heating_capacity_2', Constants.Auto)
484
485
  step.setArgument('heating_system_fraction_heat_load_served_2', 0.25)
485
- step.setArgument('heating_system_electric_auxiliary_energy_2', 0)
486
486
  step.setArgument('heating_system_has_flue_or_chimney_2', false)
487
487
  step.setArgument('mech_vent_fan_type', 'none')
488
488
  step.setArgument('mech_vent_flow_rate', 110)
@@ -492,7 +492,7 @@ def get_values(osw_file, step)
492
492
  step.setArgument('mech_vent_sensible_recovery_efficiency_type', 'Unadjusted')
493
493
  step.setArgument('mech_vent_sensible_recovery_efficiency', 0.72)
494
494
  step.setArgument('mech_vent_fan_power', 30)
495
- step.setArgument('mech_vent_is_shared_system', false)
495
+ step.setArgument('mech_vent_num_units_served', 1)
496
496
  step.setArgument('mech_vent_fan_type_2', 'none')
497
497
  step.setArgument('mech_vent_flow_rate_2', 110)
498
498
  step.setArgument('mech_vent_hours_in_operation_2', 24)
@@ -512,21 +512,20 @@ def get_values(osw_file, step)
512
512
  step.setArgument('water_heater_tank_volume', '40')
513
513
  step.setArgument('water_heater_heating_capacity', '18767')
514
514
  step.setArgument('water_heater_efficiency_type', 'EnergyFactor')
515
- step.setArgument('water_heater_efficiency_ef', 0.95)
516
- step.setArgument('water_heater_efficiency_uef', 0.93)
515
+ step.setArgument('water_heater_efficiency', 0.95)
517
516
  step.setArgument('water_heater_recovery_efficiency', '0.76')
518
517
  step.setArgument('water_heater_standby_loss', 0)
519
518
  step.setArgument('water_heater_jacket_rvalue', 0)
520
519
  step.setArgument('water_heater_setpoint_temperature', '125')
521
520
  step.setArgument('water_heater_has_flue_or_chimney', false)
522
- step.setArgument('water_heater_is_shared_system', false)
521
+ step.setArgument('water_heater_num_units_served', 1)
523
522
  step.setArgument('dhw_distribution_system_type', HPXML::DHWDistTypeStandard)
524
523
  step.setArgument('dhw_distribution_standard_piping_length', '50')
525
524
  step.setArgument('dhw_distribution_recirc_control_type', HPXML::DHWRecirControlTypeNone)
526
525
  step.setArgument('dhw_distribution_recirc_piping_length', '50')
527
526
  step.setArgument('dhw_distribution_recirc_branch_piping_length', '50')
528
527
  step.setArgument('dhw_distribution_recirc_pump_power', '50')
529
- step.setArgument('dhw_distribution_pipe_r', 0.0)
528
+ step.setArgument('dhw_distribution_pipe_r', '0.0')
530
529
  step.setArgument('dwhr_facilities_connected', 'none')
531
530
  step.setArgument('dwhr_equal_flow', true)
532
531
  step.setArgument('dwhr_efficiency', 0.55)
@@ -544,23 +543,23 @@ def get_values(osw_file, step)
544
543
  step.setArgument('solar_thermal_storage_volume', Constants.Auto)
545
544
  step.setArgument('solar_thermal_solar_fraction', 0)
546
545
  step.setArgument('pv_system_module_type_1', 'none')
547
- step.setArgument('pv_system_location_1', HPXML::LocationRoof)
548
- step.setArgument('pv_system_tracking_1', HPXML::PVTrackingTypeFixed)
546
+ step.setArgument('pv_system_location_1', Constants.Auto)
547
+ step.setArgument('pv_system_tracking_1', Constants.Auto)
549
548
  step.setArgument('pv_system_array_azimuth_1', 180)
550
549
  step.setArgument('pv_system_array_tilt_1', '20')
551
550
  step.setArgument('pv_system_max_power_output_1', 4000)
552
551
  step.setArgument('pv_system_inverter_efficiency_1', 0.96)
553
552
  step.setArgument('pv_system_system_losses_fraction_1', 0.14)
554
- step.setArgument('pv_system_is_shared_1', false)
553
+ step.setArgument('pv_system_num_units_served_1', 1)
555
554
  step.setArgument('pv_system_module_type_2', 'none')
556
- step.setArgument('pv_system_location_2', HPXML::LocationRoof)
557
- step.setArgument('pv_system_tracking_2', HPXML::PVTrackingTypeFixed)
555
+ step.setArgument('pv_system_location_2', Constants.Auto)
556
+ step.setArgument('pv_system_tracking_2', Constants.Auto)
558
557
  step.setArgument('pv_system_array_azimuth_2', 180)
559
558
  step.setArgument('pv_system_array_tilt_2', '20')
560
559
  step.setArgument('pv_system_max_power_output_2', 4000)
561
560
  step.setArgument('pv_system_inverter_efficiency_2', 0.96)
562
561
  step.setArgument('pv_system_system_losses_fraction_2', 0.14)
563
- step.setArgument('pv_system_is_shared_2', false)
562
+ step.setArgument('pv_system_num_units_served_2', 1)
564
563
  step.setArgument('lighting_fraction_cfl_interior', 0.4)
565
564
  step.setArgument('lighting_fraction_lfl_interior', 0.1)
566
565
  step.setArgument('lighting_fraction_led_interior', 0.25)
@@ -580,6 +579,7 @@ def get_values(osw_file, step)
580
579
  step.setArgument('holiday_lighting_period_end_month', Constants.Auto)
581
580
  step.setArgument('holiday_lighting_period_end_day_of_month', Constants.Auto)
582
581
  step.setArgument('dehumidifier_present', false)
582
+ step.setArgument('dehumidifier_type', HPXML::DehumidifierTypePortable)
583
583
  step.setArgument('dehumidifier_efficiency_type', 'EnergyFactor')
584
584
  step.setArgument('dehumidifier_efficiency_ef', 1.8)
585
585
  step.setArgument('dehumidifier_efficiency_ief', 1.5)
@@ -640,33 +640,36 @@ def get_values(osw_file, step)
640
640
  step.setArgument('ceiling_fan_efficiency', Constants.Auto)
641
641
  step.setArgument('ceiling_fan_quantity', Constants.Auto)
642
642
  step.setArgument('ceiling_fan_cooling_setpoint_temp_offset', 0)
643
+ step.setArgument('plug_loads_television_annual_kwh', '620.0')
644
+ step.setArgument('plug_loads_television_usage_multiplier', 1.0)
645
+ step.setArgument('plug_loads_television_usage_multiplier_2', 1.0)
643
646
  step.setArgument('plug_loads_other_annual_kwh', '2457.0')
644
647
  step.setArgument('plug_loads_other_frac_sensible', '0.855')
645
648
  step.setArgument('plug_loads_other_frac_latent', '0.045')
646
649
  step.setArgument('plug_loads_other_usage_multiplier', 1.0)
647
- step.setArgument('plug_loads_television_annual_kwh', '620.0')
648
- step.setArgument('plug_loads_television_usage_multiplier', 1.0)
650
+ step.setArgument('plug_loads_other_usage_multiplier_2', 1.0)
649
651
  step.setArgument('plug_loads_well_pump_present', false)
650
652
  step.setArgument('plug_loads_well_pump_annual_kwh', Constants.Auto)
651
- step.setArgument('plug_loads_well_pump_usage_multiplier', 1.0)
653
+ step.setArgument('plug_loads_well_pump_usage_multiplier', 0.0)
654
+ step.setArgument('plug_loads_well_pump_usage_multiplier_2', 0.0)
652
655
  step.setArgument('plug_loads_vehicle_present', false)
653
656
  step.setArgument('plug_loads_vehicle_annual_kwh', Constants.Auto)
654
- step.setArgument('plug_loads_vehicle_usage_multiplier', 1.0)
657
+ step.setArgument('plug_loads_vehicle_usage_multiplier', 0.0)
658
+ step.setArgument('plug_loads_vehicle_usage_multiplier_2', 0.0)
655
659
  step.setArgument('fuel_loads_grill_present', false)
656
660
  step.setArgument('fuel_loads_grill_fuel_type', HPXML::FuelTypeNaturalGas)
657
661
  step.setArgument('fuel_loads_grill_annual_therm', Constants.Auto)
658
- step.setArgument('fuel_loads_grill_location', Constants.Auto)
659
- step.setArgument('fuel_loads_grill_usage_multiplier', 1.0)
662
+ step.setArgument('fuel_loads_grill_usage_multiplier', 0.0)
660
663
  step.setArgument('fuel_loads_lighting_present', false)
661
664
  step.setArgument('fuel_loads_lighting_fuel_type', HPXML::FuelTypeNaturalGas)
662
665
  step.setArgument('fuel_loads_lighting_annual_therm', Constants.Auto)
663
- step.setArgument('fuel_loads_lighting_location', Constants.Auto)
664
- step.setArgument('fuel_loads_lighting_usage_multiplier', 1.0)
666
+ step.setArgument('fuel_loads_lighting_usage_multiplier', 0.0)
665
667
  step.setArgument('fuel_loads_fireplace_present', false)
666
668
  step.setArgument('fuel_loads_fireplace_fuel_type', HPXML::FuelTypeNaturalGas)
667
669
  step.setArgument('fuel_loads_fireplace_annual_therm', Constants.Auto)
668
- step.setArgument('fuel_loads_fireplace_location', Constants.Auto)
669
- step.setArgument('fuel_loads_fireplace_usage_multiplier', 1.0)
670
+ step.setArgument('fuel_loads_fireplace_frac_sensible', Constants.Auto)
671
+ step.setArgument('fuel_loads_fireplace_frac_latent', Constants.Auto)
672
+ step.setArgument('fuel_loads_fireplace_usage_multiplier', 0.0)
670
673
  step.setArgument('pool_present', false)
671
674
  step.setArgument('pool_pump_annual_kwh', Constants.Auto)
672
675
  step.setArgument('pool_pump_usage_multiplier', 1.0)
@@ -681,9 +684,9 @@ def get_values(osw_file, step)
681
684
  step.setArgument('hot_tub_heater_annual_kwh', Constants.Auto)
682
685
  step.setArgument('hot_tub_heater_annual_therm', Constants.Auto)
683
686
  step.setArgument('hot_tub_heater_usage_multiplier', 1.0)
684
- elsif ['base-single-family-attached.osw'].include? osw_file
687
+ elsif ['base-bldgtype-single-family-attached.osw'].include? osw_file
685
688
  step.setArgument('geometry_unit_type', HPXML::ResidentialTypeSFA)
686
- step.setArgument('geometry_cfa', 900.0)
689
+ step.setArgument('geometry_cfa', 1800.0)
687
690
  step.setArgument('geometry_corridor_position', 'None')
688
691
  step.setArgument('geometry_building_num_units', 3)
689
692
  step.setArgument('geometry_horizontal_location', 'Left')
@@ -695,14 +698,17 @@ def get_values(osw_file, step)
695
698
  step.setArgument('window_area_back', 0)
696
699
  step.setArgument('window_area_left', 0)
697
700
  step.setArgument('window_area_right', 0)
698
- elsif ['base-multifamily.osw'].include? osw_file
701
+ step.setArgument('plug_loads_other_annual_kwh', '1638.0')
702
+ elsif ['base-bldgtype-multifamily.osw'].include? osw_file
699
703
  step.setArgument('geometry_unit_type', HPXML::ResidentialTypeApartment)
700
704
  step.setArgument('geometry_cfa', 900.0)
701
705
  step.setArgument('geometry_corridor_position', 'None')
702
706
  step.setArgument('geometry_foundation_type', HPXML::FoundationTypeBasementUnconditioned)
703
- step.setArgument('geometry_level', 'Bottom')
707
+ step.setArgument('geometry_level', 'Middle')
704
708
  step.setArgument('geometry_horizontal_location', 'Left')
705
- step.setArgument('geometry_building_num_units', 3)
709
+ step.setArgument('geometry_building_num_units', 50)
710
+ step.setArgument('geometry_building_num_bedrooms', 50 * 3)
711
+ step.setArgument('geometry_num_floors_above_grade', 5)
706
712
  step.setArgument('window_front_wwr', 0.18)
707
713
  step.setArgument('window_back_wwr', 0.18)
708
714
  step.setArgument('window_left_wwr', 0.18)
@@ -713,6 +719,12 @@ def get_values(osw_file, step)
713
719
  step.setArgument('window_area_right', 0)
714
720
  step.setArgument('ducts_supply_leakage_value', 0.0)
715
721
  step.setArgument('ducts_return_leakage_value', 0.0)
722
+ step.setArgument('ducts_supply_location', HPXML::LocationLivingSpace)
723
+ step.setArgument('ducts_return_location', HPXML::LocationLivingSpace)
724
+ step.setArgument('ducts_supply_insulation_r', 0.0)
725
+ step.setArgument('ducts_return_insulation_r', 0.0)
726
+ step.setArgument('door_area', 20.0)
727
+ step.setArgument('plug_loads_other_annual_kwh', '819.0')
716
728
  elsif ['base-appliances-coal.osw'].include? osw_file
717
729
  step.setArgument('clothes_dryer_fuel_type', HPXML::FuelTypeCoal)
718
730
  step.setArgument('clothes_dryer_efficiency_cef', '3.3')
@@ -723,8 +735,10 @@ def get_values(osw_file, step)
723
735
  step.setArgument('dehumidifier_present', true)
724
736
  elsif ['base-appliances-dehumidifier-50percent.osw'].include? osw_file
725
737
  step.setArgument('dehumidifier_fraction_dehumidification_load_served', 0.5)
726
- elsif ['base-appliances-dehumidifier-ief.osw'].include? osw_file
738
+ elsif ['base-appliances-dehumidifier-ief-portable.osw'].include? osw_file
727
739
  step.setArgument('dehumidifier_efficiency_type', 'IntegratedEnergyFactor')
740
+ elsif ['base-appliances-dehumidifier-ief-whole-home.osw'].include? osw_file
741
+ step.setArgument('dehumidifier_type', HPXML::DehumidifierTypeWholeHome)
728
742
  elsif ['base-appliances-gas.osw'].include? osw_file
729
743
  step.setArgument('clothes_dryer_fuel_type', HPXML::FuelTypeNaturalGas)
730
744
  step.setArgument('clothes_dryer_efficiency_cef', '3.3')
@@ -793,7 +807,7 @@ def get_values(osw_file, step)
793
807
  step.setArgument('ducts_supply_location', HPXML::LocationBasementConditioned)
794
808
  step.setArgument('ducts_return_location', HPXML::LocationBasementConditioned)
795
809
  elsif ['base-atticroof-radiant-barrier.osw'].include? osw_file
796
- step.setArgument('roof_radiant_barrier', true)
810
+ step.setArgument('roof_radiant_barrier', 'true')
797
811
  step.setArgument('roof_radiant_barrier_grade', '2')
798
812
  elsif ['base-atticroof-unvented-insulated-roof.osw'].include? osw_file
799
813
  step.setArgument('ceiling_assembly_r', 2.1)
@@ -836,11 +850,11 @@ def get_values(osw_file, step)
836
850
  elsif ['base-dhw-recirc-demand.osw'].include? osw_file
837
851
  step.setArgument('dhw_distribution_system_type', HPXML::DHWDistTypeRecirc)
838
852
  step.setArgument('dhw_distribution_recirc_control_type', HPXML::DHWRecirControlTypeSensor)
839
- step.setArgument('dhw_distribution_pipe_r', 3.0)
853
+ step.setArgument('dhw_distribution_pipe_r', '3.0')
840
854
  elsif ['base-dhw-recirc-manual.osw'].include? osw_file
841
855
  step.setArgument('dhw_distribution_system_type', HPXML::DHWDistTypeRecirc)
842
856
  step.setArgument('dhw_distribution_recirc_control_type', HPXML::DHWRecirControlTypeManual)
843
- step.setArgument('dhw_distribution_pipe_r', 3.0)
857
+ step.setArgument('dhw_distribution_pipe_r', '3.0')
844
858
  elsif ['base-dhw-recirc-nocontrol.osw'].include? osw_file
845
859
  step.setArgument('dhw_distribution_system_type', HPXML::DHWDistTypeRecirc)
846
860
  elsif ['base-dhw-recirc-temperature.osw'].include? osw_file
@@ -849,6 +863,13 @@ def get_values(osw_file, step)
849
863
  elsif ['base-dhw-recirc-timer.osw'].include? osw_file
850
864
  step.setArgument('dhw_distribution_system_type', HPXML::DHWDistTypeRecirc)
851
865
  step.setArgument('dhw_distribution_recirc_control_type', HPXML::DHWRecirControlTypeTimer)
866
+ elsif ['base-bldgtype-multifamily-shared-water-heater.osw'].include? osw_file
867
+ step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
868
+ step.setArgument('water_heater_num_units_served', 6)
869
+ step.setArgument('water_heater_tank_volume', '120')
870
+ step.setArgument('water_heater_heating_capacity', '40000')
871
+ step.setArgument('water_heater_efficiency', 0.59)
872
+ step.setArgument('water_heater_recovery_efficiency', '0.76')
852
873
  elsif ['base-dhw-solar-direct-evacuated-tube.osw'].include? osw_file
853
874
  step.setArgument('solar_thermal_system_type', 'hot water')
854
875
  step.setArgument('solar_thermal_storage_volume', '60')
@@ -885,34 +906,54 @@ def get_values(osw_file, step)
885
906
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeCoal)
886
907
  step.setArgument('water_heater_tank_volume', '50')
887
908
  step.setArgument('water_heater_heating_capacity', '40000')
888
- step.setArgument('water_heater_efficiency_ef', 0.59)
909
+ step.setArgument('water_heater_efficiency', 0.59)
910
+ elsif ['base-dhw-tank-elec-uef.osw'].include? osw_file
911
+ step.setArgument('water_heater_tank_volume', '30')
912
+ step.setArgument('water_heater_heating_capacity', '15354')
913
+ step.setArgument('water_heater_efficiency_type', 'UniformEnergyFactor')
914
+ step.setArgument('water_heater_efficiency', 0.93)
915
+ step.setArgument('water_heater_first_hour_rating', 46)
916
+ step.setArgument('water_heater_recovery_efficiency', 0.98)
889
917
  elsif ['base-dhw-tank-gas.osw'].include? osw_file
890
918
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
891
919
  step.setArgument('water_heater_tank_volume', '50')
892
920
  step.setArgument('water_heater_heating_capacity', '40000')
893
- step.setArgument('water_heater_efficiency_ef', 0.59)
921
+ step.setArgument('water_heater_efficiency', 0.59)
922
+ elsif ['base-dhw-tank-gas-uef.osw'].include? osw_file
923
+ step.setArgument('water_heater_tank_volume', '30')
924
+ step.setArgument('water_heater_heating_capacity', '30000')
925
+ step.setArgument('water_heater_efficiency_type', 'UniformEnergyFactor')
926
+ step.setArgument('water_heater_efficiency', 0.59)
927
+ step.setArgument('water_heater_first_hour_rating', 56)
928
+ step.setArgument('water_heater_recovery_efficiency', 0.75)
894
929
  elsif ['base-dhw-tank-gas-outside.osw'].include? osw_file
895
930
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
896
931
  step.setArgument('water_heater_location', HPXML::LocationOtherExterior)
897
932
  step.setArgument('water_heater_tank_volume', '50')
898
933
  step.setArgument('water_heater_heating_capacity', '40000')
899
- step.setArgument('water_heater_efficiency_ef', 0.59)
934
+ step.setArgument('water_heater_efficiency', 0.59)
900
935
  elsif ['base-dhw-tank-heat-pump.osw'].include? osw_file
901
936
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeHeatPump)
902
937
  step.setArgument('water_heater_tank_volume', '80')
903
938
  step.setArgument('water_heater_heating_capacity', Constants.Auto)
904
- step.setArgument('water_heater_efficiency_ef', 2.3)
939
+ step.setArgument('water_heater_efficiency', 2.3)
905
940
  elsif ['base-dhw-tank-heat-pump-outside.osw'].include? osw_file
906
941
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeHeatPump)
907
942
  step.setArgument('water_heater_location', HPXML::LocationOtherExterior)
908
943
  step.setArgument('water_heater_tank_volume', '80')
909
944
  step.setArgument('water_heater_heating_capacity', Constants.Auto)
910
- step.setArgument('water_heater_efficiency_ef', 2.3)
945
+ step.setArgument('water_heater_efficiency', 2.3)
946
+ elsif ['base-dhw-tank-heat-pump-uef.osw'].include? osw_file
947
+ step.setArgument('water_heater_tank_volume', '50')
948
+ step.setArgument('water_heater_heating_capacity', '18767')
949
+ step.setArgument('water_heater_efficiency_type', 'UniformEnergyFactor')
950
+ step.setArgument('water_heater_efficiency', 3.75)
951
+ step.setArgument('water_heater_first_hour_rating', 60)
911
952
  elsif ['base-dhw-tank-heat-pump-with-solar.osw'].include? osw_file
912
953
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeHeatPump)
913
954
  step.setArgument('water_heater_tank_volume', '80')
914
955
  step.setArgument('water_heater_heating_capacity', Constants.Auto)
915
- step.setArgument('water_heater_efficiency_ef', 2.3)
956
+ step.setArgument('water_heater_efficiency', 2.3)
916
957
  step.setArgument('solar_thermal_system_type', 'hot water')
917
958
  step.setArgument('solar_thermal_collector_loop_type', HPXML::SolarThermalLoopTypeIndirect)
918
959
  step.setArgument('solar_thermal_collector_type', HPXML::SolarThermalTypeSingleGlazing)
@@ -923,29 +964,34 @@ def get_values(osw_file, step)
923
964
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeHeatPump)
924
965
  step.setArgument('water_heater_tank_volume', '80')
925
966
  step.setArgument('water_heater_heating_capacity', Constants.Auto)
926
- step.setArgument('water_heater_efficiency_ef', 2.3)
967
+ step.setArgument('water_heater_efficiency', 2.3)
927
968
  step.setArgument('solar_thermal_system_type', 'hot water')
928
969
  step.setArgument('solar_thermal_solar_fraction', 0.65)
929
970
  elsif ['base-dhw-tankless-electric.osw'].include? osw_file
930
971
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeTankless)
931
972
  step.setArgument('water_heater_tank_volume', Constants.Auto)
932
- step.setArgument('water_heater_efficiency_ef', 0.99)
973
+ step.setArgument('water_heater_efficiency', 0.99)
933
974
  elsif ['base-dhw-tankless-electric-outside.osw'].include? osw_file
934
975
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeTankless)
935
976
  step.setArgument('water_heater_location', HPXML::LocationOtherExterior)
936
977
  step.setArgument('water_heater_tank_volume', Constants.Auto)
937
- step.setArgument('water_heater_efficiency_ef', 0.99)
938
- step.setArgument('water_heater_performance_adjustment', 0.92)
978
+ step.setArgument('water_heater_efficiency', 0.99)
979
+ elsif ['base-dhw-tankless-electric-uef.osw'].include? osw_file
980
+ step.setArgument('water_heater_efficiency_type', 'UniformEnergyFactor')
981
+ step.setArgument('water_heater_efficiency', 0.98)
939
982
  elsif ['base-dhw-tankless-gas.osw'].include? osw_file
940
983
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeTankless)
941
984
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
942
985
  step.setArgument('water_heater_tank_volume', Constants.Auto)
943
- step.setArgument('water_heater_efficiency_ef', 0.82)
986
+ step.setArgument('water_heater_efficiency', 0.82)
987
+ elsif ['base-dhw-tankless-gas-uef.osw'].include? osw_file
988
+ step.setArgument('water_heater_efficiency_type', 'UniformEnergyFactor')
989
+ step.setArgument('water_heater_efficiency', 0.93)
944
990
  elsif ['base-dhw-tankless-gas-with-solar.osw'].include? osw_file
945
991
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeTankless)
946
992
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
947
993
  step.setArgument('water_heater_tank_volume', Constants.Auto)
948
- step.setArgument('water_heater_efficiency_ef', 0.82)
994
+ step.setArgument('water_heater_efficiency', 0.82)
949
995
  step.setArgument('solar_thermal_system_type', 'hot water')
950
996
  step.setArgument('solar_thermal_collector_loop_type', HPXML::SolarThermalLoopTypeIndirect)
951
997
  step.setArgument('solar_thermal_collector_type', HPXML::SolarThermalTypeSingleGlazing)
@@ -956,27 +1002,24 @@ def get_values(osw_file, step)
956
1002
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeTankless)
957
1003
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
958
1004
  step.setArgument('water_heater_tank_volume', Constants.Auto)
959
- step.setArgument('water_heater_efficiency_ef', 0.82)
1005
+ step.setArgument('water_heater_efficiency', 0.82)
960
1006
  step.setArgument('solar_thermal_system_type', 'hot water')
961
1007
  step.setArgument('solar_thermal_solar_fraction', 0.65)
962
1008
  elsif ['base-dhw-tankless-propane.osw'].include? osw_file
963
1009
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeTankless)
964
1010
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypePropane)
965
1011
  step.setArgument('water_heater_tank_volume', Constants.Auto)
966
- step.setArgument('water_heater_efficiency_ef', 0.82)
1012
+ step.setArgument('water_heater_efficiency', 0.82)
967
1013
  elsif ['base-dhw-tank-oil.osw'].include? osw_file
968
1014
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeOil)
969
1015
  step.setArgument('water_heater_tank_volume', '50')
970
1016
  step.setArgument('water_heater_heating_capacity', '40000')
971
- step.setArgument('water_heater_efficiency_ef', 0.59)
1017
+ step.setArgument('water_heater_efficiency', 0.59)
972
1018
  elsif ['base-dhw-tank-wood.osw'].include? osw_file
973
1019
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeWoodCord)
974
1020
  step.setArgument('water_heater_tank_volume', '50')
975
1021
  step.setArgument('water_heater_heating_capacity', '40000')
976
- step.setArgument('water_heater_efficiency_ef', 0.59)
977
- elsif ['base-dhw-uef.osw'].include? osw_file
978
- step.setArgument('water_heater_efficiency_type', 'UniformEnergyFactor')
979
- step.setArgument('water_heater_efficiency_uef', 0.93)
1022
+ step.setArgument('water_heater_efficiency', 0.59)
980
1023
  elsif ['base-enclosure-2stories.osw'].include? osw_file
981
1024
  step.setArgument('geometry_cfa', 4050.0)
982
1025
  step.setArgument('geometry_num_floors_above_grade', 2)
@@ -996,8 +1039,6 @@ def get_values(osw_file, step)
996
1039
  step.setArgument('ducts_supply_surface_area', '112.5')
997
1040
  step.setArgument('ducts_return_surface_area', '37.5')
998
1041
  step.setArgument('plug_loads_other_annual_kwh', '2957.5')
999
- elsif ['base-enclosure-attached-multifamily.osw'].include? osw_file
1000
-
1001
1042
  elsif ['base-enclosure-beds-1.osw'].include? osw_file
1002
1043
  step.setArgument('geometry_num_bedrooms', 1)
1003
1044
  step.setArgument('geometry_num_bathrooms', '1')
@@ -1117,8 +1158,8 @@ def get_values(osw_file, step)
1117
1158
  step.setArgument('geometry_foundation_height_above_grade', 0.0)
1118
1159
  step.setArgument('slab_under_insulation_r', 5)
1119
1160
  step.setArgument('slab_under_width', 999)
1120
- step.setArgument('slab_carpet_fraction', 1.0)
1121
- step.setArgument('slab_carpet_r', 2.5)
1161
+ step.setArgument('slab_carpet_fraction', '1.0')
1162
+ step.setArgument('slab_carpet_r', '2.5')
1122
1163
  step.setArgument('ducts_supply_location', HPXML::LocationUnderSlab)
1123
1164
  step.setArgument('ducts_return_location', HPXML::LocationUnderSlab)
1124
1165
  step.setArgument('plug_loads_other_annual_kwh', '1228.5')
@@ -1165,7 +1206,7 @@ def get_values(osw_file, step)
1165
1206
  step.setArgument('geometry_foundation_height_above_grade', 1.0)
1166
1207
  step.setArgument('floor_assembly_r', 18.7)
1167
1208
  step.setArgument('foundation_wall_insulation_distance_to_bottom', 4.0)
1168
- step.setArgument('slab_carpet_r', 2.5)
1209
+ step.setArgument('slab_carpet_r', '2.5')
1169
1210
  step.setArgument('ducts_supply_location', HPXML::LocationCrawlspaceUnvented)
1170
1211
  step.setArgument('ducts_return_location', HPXML::LocationCrawlspaceUnvented)
1171
1212
  step.setArgument('water_heater_location', HPXML::LocationCrawlspaceUnvented)
@@ -1177,7 +1218,7 @@ def get_values(osw_file, step)
1177
1218
  step.setArgument('geometry_foundation_height_above_grade', 1.0)
1178
1219
  step.setArgument('floor_assembly_r', 18.7)
1179
1220
  step.setArgument('foundation_wall_insulation_distance_to_bottom', 4.0)
1180
- step.setArgument('slab_carpet_r', 2.5)
1221
+ step.setArgument('slab_carpet_r', '2.5')
1181
1222
  step.setArgument('ducts_supply_location', HPXML::LocationCrawlspaceVented)
1182
1223
  step.setArgument('ducts_return_location', HPXML::LocationCrawlspaceVented)
1183
1224
  step.setArgument('water_heater_location', HPXML::LocationCrawlspaceVented)
@@ -1192,6 +1233,7 @@ def get_values(osw_file, step)
1192
1233
  step.setArgument('heat_pump_heating_capacity', '42000.0')
1193
1234
  step.setArgument('heat_pump_heating_capacity_17F', '26460.0')
1194
1235
  step.setArgument('heat_pump_backup_fuel', HPXML::FuelTypeElectricity)
1236
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.45)
1195
1237
  elsif ['base-hvac-air-to-air-heat-pump-2-speed.osw'].include? osw_file
1196
1238
  step.setArgument('heating_system_type', 'none')
1197
1239
  step.setArgument('cooling_system_type', 'none')
@@ -1244,6 +1286,7 @@ def get_values(osw_file, step)
1244
1286
  step.setArgument('cooling_system_type', 'none')
1245
1287
  elsif ['base-hvac-central-ac-only-1-speed.osw'].include? osw_file
1246
1288
  step.setArgument('heating_system_type', 'none')
1289
+ step.setArgument('cooling_system_fan_power_watts_per_cfm', 0.45)
1247
1290
  elsif ['base-hvac-central-ac-only-2-speed.osw'].include? osw_file
1248
1291
  step.setArgument('heating_system_type', 'none')
1249
1292
  step.setArgument('cooling_system_cooling_efficiency_seer', 18.0)
@@ -1260,6 +1303,7 @@ def get_values(osw_file, step)
1260
1303
  step.setArgument('heat_pump_heating_capacity_17F', '26460.0')
1261
1304
  step.setArgument('heat_pump_fraction_cool_load_served', 0)
1262
1305
  step.setArgument('heat_pump_backup_fuel', HPXML::FuelTypeElectricity)
1306
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.45)
1263
1307
  elsif ['base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw'].include? osw_file
1264
1308
  step.setArgument('cooling_system_type', 'none')
1265
1309
  step.setArgument('heat_pump_heating_efficiency_hspf', 7.7)
@@ -1287,6 +1331,7 @@ def get_values(osw_file, step)
1287
1331
  step.setArgument('heat_pump_backup_heating_efficiency', 0.95)
1288
1332
  step.setArgument('heat_pump_backup_heating_capacity', '36000.0')
1289
1333
  step.setArgument('heat_pump_backup_heating_switchover_temp', 25)
1334
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.2)
1290
1335
  elsif ['base-hvac-ducts-leakage-percent.osw'].include? osw_file
1291
1336
  step.setArgument('ducts_supply_leakage_units', HPXML::UnitsPercent)
1292
1337
  step.setArgument('ducts_return_leakage_units', HPXML::UnitsPercent)
@@ -1306,6 +1351,7 @@ def get_values(osw_file, step)
1306
1351
  step.setArgument('cooling_system_type', HPXML::HVACTypeEvaporativeCooler)
1307
1352
  step.removeArgument('cooling_system_cooling_compressor_type')
1308
1353
  step.removeArgument('cooling_system_cooling_sensible_heat_fraction')
1354
+ step.setArgument('cooling_system_fan_power_watts_per_cfm', 0.3)
1309
1355
  elsif ['base-hvac-evap-cooler-only-ducted.osw'].include? osw_file
1310
1356
  step.setArgument('heating_system_type', 'none')
1311
1357
  step.setArgument('cooling_system_type', HPXML::HVACTypeEvaporativeCooler)
@@ -1316,17 +1362,17 @@ def get_values(osw_file, step)
1316
1362
  step.setArgument('heating_system_type', HPXML::HVACTypeFireplace)
1317
1363
  step.setArgument('heating_system_fuel', HPXML::FuelTypeWoodCord)
1318
1364
  step.setArgument('heating_system_heating_efficiency', 0.8)
1319
- step.setArgument('heating_system_electric_auxiliary_energy', 100.0)
1365
+ step.setArgument('heating_system_fan_power_watts', 0.0)
1320
1366
  step.setArgument('cooling_system_type', 'none')
1321
1367
  elsif ['base-hvac-fixed-heater-gas-only.osw'].include? osw_file
1322
1368
  step.setArgument('heating_system_type', HPXML::HVACTypeFixedHeater)
1323
1369
  step.setArgument('heating_system_heating_efficiency', 1.0)
1324
- step.setArgument('heating_system_electric_auxiliary_energy', 100.0)
1370
+ step.setArgument('heating_system_fan_power_watts', 0.0)
1325
1371
  elsif ['base-hvac-floor-furnace-propane-only.osw'].include? osw_file
1326
1372
  step.setArgument('heating_system_type', HPXML::HVACTypeFloorFurnace)
1327
1373
  step.setArgument('heating_system_fuel', HPXML::FuelTypePropane)
1328
1374
  step.setArgument('heating_system_heating_efficiency', 0.8)
1329
- step.setArgument('heating_system_electric_auxiliary_energy', 200.0)
1375
+ step.setArgument('heating_system_fan_power_watts', 0.0)
1330
1376
  step.setArgument('cooling_system_type', 'none')
1331
1377
  elsif ['base-hvac-furnace-elec-central-ac-1-speed.osw'].include? osw_file
1332
1378
  step.setArgument('heating_system_fuel', HPXML::FuelTypeElectricity)
@@ -1343,7 +1389,7 @@ def get_values(osw_file, step)
1343
1389
  step.setArgument('cooling_system_cooling_compressor_type', HPXML::HVACCompressorTypeVariableSpeed)
1344
1390
  step.setArgument('cooling_system_cooling_sensible_heat_fraction', 0.78)
1345
1391
  elsif ['base-hvac-furnace-gas-only.osw'].include? osw_file
1346
- step.setArgument('heating_system_electric_auxiliary_energy', 700.0)
1392
+ step.setArgument('heating_system_fan_power_watts_per_cfm', 0.45)
1347
1393
  step.setArgument('cooling_system_type', 'none')
1348
1394
  elsif ['base-hvac-furnace-gas-room-ac.osw'].include? osw_file
1349
1395
  step.setArgument('cooling_system_type', HPXML::HVACTypeRoomAirConditioner)
@@ -1364,6 +1410,7 @@ def get_values(osw_file, step)
1364
1410
  step.setArgument('cooling_system_cooling_efficiency_seer', 19.0)
1365
1411
  step.removeArgument('cooling_system_cooling_compressor_type')
1366
1412
  step.setArgument('cooling_system_is_ducted', true)
1413
+ step.setArgument('cooling_system_fan_power_watts_per_cfm', 0.2)
1367
1414
  step.setArgument('ducts_supply_leakage_value', 15.0)
1368
1415
  step.setArgument('ducts_return_leakage_value', 5.0)
1369
1416
  step.setArgument('ducts_supply_insulation_r', 0.0)
@@ -1380,8 +1427,8 @@ def get_values(osw_file, step)
1380
1427
  step.removeArgument('heat_pump_cooling_compressor_type')
1381
1428
  step.setArgument('heat_pump_heating_capacity', '42000.0')
1382
1429
  step.setArgument('heat_pump_backup_fuel', HPXML::FuelTypeElectricity)
1383
- step.setArgument('heat_pump_ground_to_air_pump_power', 30.0)
1384
- step.setArgument('heat_pump_ground_to_air_fan_power', 0.5)
1430
+ step.setArgument('heat_pump_pump_power_watts_per_ton', 30.0)
1431
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.45)
1385
1432
  elsif ['base-hvac-mini-split-heat-pump-ducted.osw'].include? osw_file
1386
1433
  step.setArgument('heating_system_type', 'none')
1387
1434
  step.setArgument('cooling_system_type', 'none')
@@ -1393,6 +1440,7 @@ def get_values(osw_file, step)
1393
1440
  step.removeArgument('heat_pump_cooling_compressor_type')
1394
1441
  step.setArgument('heat_pump_backup_fuel', HPXML::FuelTypeElectricity)
1395
1442
  step.setArgument('heat_pump_mini_split_is_ducted', true)
1443
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.2)
1396
1444
  step.setArgument('ducts_supply_leakage_value', 15.0)
1397
1445
  step.setArgument('ducts_return_leakage_value', 5.0)
1398
1446
  step.setArgument('ducts_supply_insulation_r', 0.0)
@@ -1403,10 +1451,12 @@ def get_values(osw_file, step)
1403
1451
  step.setArgument('heat_pump_heating_capacity_17F', '0')
1404
1452
  step.setArgument('heat_pump_fraction_heat_load_served', 0)
1405
1453
  step.setArgument('heat_pump_backup_fuel', 'none')
1454
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.2)
1406
1455
  elsif ['base-hvac-mini-split-heat-pump-ducted-heating-only.osw'].include? osw_file
1407
1456
  step.setArgument('heat_pump_cooling_capacity', '0')
1408
1457
  step.setArgument('heat_pump_fraction_cool_load_served', 0)
1409
1458
  step.setArgument('heat_pump_backup_fuel', HPXML::FuelTypeElectricity)
1459
+ step.setArgument('heat_pump_fan_power_watts_per_cfm', 0.2)
1410
1460
  elsif ['base-hvac-mini-split-heat-pump-ductless.osw'].include? osw_file
1411
1461
  step.setArgument('heat_pump_backup_fuel', 'none')
1412
1462
  step.setArgument('heat_pump_mini_split_is_ducted', false)
@@ -1416,14 +1466,7 @@ def get_values(osw_file, step)
1416
1466
  elsif ['base-hvac-portable-heater-gas-only.osw'].include? osw_file
1417
1467
  step.setArgument('heating_system_type', HPXML::HVACTypePortableHeater)
1418
1468
  step.setArgument('heating_system_heating_efficiency', 1.0)
1419
- step.setArgument('heating_system_electric_auxiliary_energy', 100.0)
1420
- elsif ['base-hvac-programmable-thermostat.osw'].include? osw_file
1421
- step.setArgument('setpoint_heating_setback_temp', 66)
1422
- step.setArgument('setpoint_heating_setback_hours_per_week', 49)
1423
- step.setArgument('setpoint_heating_setback_start_hour', 23)
1424
- step.setArgument('setpoint_cooling_setup_temp', 80)
1425
- step.setArgument('setpoint_cooling_setup_hours_per_week', 42)
1426
- step.setArgument('setpoint_cooling_setup_start_hour', 9)
1469
+ step.setArgument('heating_system_fan_power_watts', 0.0)
1427
1470
  elsif ['base-hvac-room-ac-only.osw'].include? osw_file
1428
1471
  step.setArgument('heating_system_type', 'none')
1429
1472
  step.setArgument('cooling_system_type', HPXML::HVACTypeRoomAirConditioner)
@@ -1436,19 +1479,21 @@ def get_values(osw_file, step)
1436
1479
  step.setArgument('cooling_system_cooling_sensible_heat_fraction', 0.65)
1437
1480
  step.setArgument('cooling_system_fraction_cool_load_served', 0.33)
1438
1481
  elsif ['base-hvac-setpoints.osw'].include? osw_file
1439
- step.setArgument('setpoint_heating_temp', 60.0)
1440
- step.setArgument('setpoint_cooling_temp', 80.0)
1482
+ step.setArgument('setpoint_heating_weekday_temp', 60.0)
1483
+ step.setArgument('setpoint_heating_weekend_temp', 60.0)
1484
+ step.setArgument('setpoint_cooling_weekday_temp', 80.0)
1485
+ step.setArgument('setpoint_cooling_weekend_temp', 80.0)
1441
1486
  elsif ['base-hvac-stove-oil-only.osw'].include? osw_file
1442
1487
  step.setArgument('heating_system_type', HPXML::HVACTypeStove)
1443
1488
  step.setArgument('heating_system_fuel', HPXML::FuelTypeOil)
1444
1489
  step.setArgument('heating_system_heating_efficiency', 0.8)
1445
- step.setArgument('heating_system_electric_auxiliary_energy', 200.0)
1490
+ step.setArgument('heating_system_fan_power_watts', 40.0)
1446
1491
  step.setArgument('cooling_system_type', 'none')
1447
1492
  elsif ['base-hvac-stove-wood-pellets-only.osw'].include? osw_file
1448
1493
  step.setArgument('heating_system_type', HPXML::HVACTypeStove)
1449
1494
  step.setArgument('heating_system_fuel', HPXML::FuelTypeWoodPellets)
1450
1495
  step.setArgument('heating_system_heating_efficiency', 0.8)
1451
- step.setArgument('heating_system_electric_auxiliary_energy', 200.0)
1496
+ step.setArgument('heating_system_fan_power_watts', 40.0)
1452
1497
  step.setArgument('cooling_system_type', 'none')
1453
1498
  elsif ['base-hvac-undersized.osw'].include? osw_file
1454
1499
  step.setArgument('heating_system_heating_capacity', '6400.0')
@@ -1459,12 +1504,12 @@ def get_values(osw_file, step)
1459
1504
  step.setArgument('heating_system_type', HPXML::HVACTypeWallFurnace)
1460
1505
  step.setArgument('heating_system_fuel', HPXML::FuelTypeElectricity)
1461
1506
  step.setArgument('heating_system_heating_efficiency', 1.0)
1462
- step.setArgument('heating_system_electric_auxiliary_energy', 200.0)
1507
+ step.setArgument('heating_system_fan_power_watts', 0.0)
1463
1508
  step.setArgument('cooling_system_type', 'none')
1464
1509
  elsif ['base-lighting-ceiling-fans.osw'].include? osw_file
1465
1510
  step.setArgument('ceiling_fan_present', true)
1466
1511
  step.setArgument('ceiling_fan_efficiency', '100.0')
1467
- step.setArgument('ceiling_fan_quantity', '2')
1512
+ step.setArgument('ceiling_fan_quantity', '4')
1468
1513
  step.setArgument('ceiling_fan_cooling_setpoint_temp_offset', 0.5)
1469
1514
  elsif ['base-lighting-detailed.osw'].include? osw_file
1470
1515
  step.setArgument('holiday_lighting_present', true)
@@ -1529,6 +1574,22 @@ def get_values(osw_file, step)
1529
1574
  step.setArgument('mech_vent_sensible_recovery_efficiency_type', 'Adjusted')
1530
1575
  step.setArgument('mech_vent_sensible_recovery_efficiency', 0.79)
1531
1576
  step.setArgument('mech_vent_fan_power', 60)
1577
+ elsif ['base-bldgtype-multifamily-shared-mechvent.osw'].include? osw_file
1578
+ step.setArgument('mech_vent_fan_type', HPXML::MechVentTypeSupply)
1579
+ step.setArgument('mech_vent_flow_rate', 800)
1580
+ step.setArgument('mech_vent_fan_power', 240)
1581
+ step.setArgument('mech_vent_num_units_served', 10)
1582
+ step.setArgument('shared_mech_vent_frac_recirculation', 0.5)
1583
+ step.setArgument('mech_vent_fan_type_2', HPXML::MechVentTypeExhaust)
1584
+ step.setArgument('mech_vent_flow_rate_2', 72)
1585
+ step.setArgument('mech_vent_fan_power_2', 26)
1586
+ elsif ['base-bldgtype-multifamily-shared-mechvent-preconditioning.osw'].include? osw_file
1587
+ step.setArgument('shared_mech_vent_preheating_fuel', HPXML::FuelTypeNaturalGas)
1588
+ step.setArgument('shared_mech_vent_preheating_efficiency', 0.92)
1589
+ step.setArgument('shared_mech_vent_preheating_fraction_heat_load_served', 0.7)
1590
+ step.setArgument('shared_mech_vent_precooling_fuel', HPXML::FuelTypeElectricity)
1591
+ step.setArgument('shared_mech_vent_precooling_efficiency', 4.0)
1592
+ step.setArgument('shared_mech_vent_precooling_fraction_cool_load_served', 0.8)
1532
1593
  elsif ['base-mechvent-supply.osw'].include? osw_file
1533
1594
  step.setArgument('mech_vent_fan_type', HPXML::MechVentTypeSupply)
1534
1595
  elsif ['base-mechvent-whole-house-fan.osw'].include? osw_file
@@ -1538,11 +1599,17 @@ def get_values(osw_file, step)
1538
1599
  step.removeArgument('site_type')
1539
1600
  step.setArgument('geometry_num_bathrooms', Constants.Auto)
1540
1601
  step.setArgument('geometry_num_occupants', Constants.Auto)
1602
+ step.setArgument('foundation_wall_thickness', Constants.Auto)
1603
+ step.setArgument('slab_thickness', Constants.Auto)
1604
+ step.setArgument('slab_carpet_fraction', Constants.Auto)
1541
1605
  step.removeArgument('roof_material_type')
1542
1606
  step.setArgument('roof_color', HPXML::ColorLight)
1543
1607
  step.removeArgument('roof_material_type')
1608
+ step.setArgument('roof_emittance', Constants.Auto)
1609
+ step.setArgument('roof_radiant_barrier', Constants.Auto)
1544
1610
  step.removeArgument('wall_siding_type')
1545
1611
  step.setArgument('wall_color', HPXML::ColorMedium)
1612
+ step.setArgument('wall_emittance', Constants.Auto)
1546
1613
  step.removeArgument('window_fraction_operable')
1547
1614
  step.removeArgument('window_interior_shading_winter')
1548
1615
  step.removeArgument('window_interior_shading_summer')
@@ -1559,11 +1626,12 @@ def get_values(osw_file, step)
1559
1626
  step.setArgument('water_heater_heating_capacity', Constants.Auto)
1560
1627
  step.setArgument('water_heater_setpoint_temperature', Constants.Auto)
1561
1628
  step.setArgument('dhw_distribution_standard_piping_length', Constants.Auto)
1629
+ step.setArgument('dhw_distribution_pipe_r', Constants.Auto)
1562
1630
  step.setArgument('solar_thermal_system_type', 'hot water')
1563
1631
  step.setArgument('solar_thermal_collector_type', HPXML::SolarThermalTypeSingleGlazing)
1564
1632
  step.setArgument('solar_thermal_collector_rated_optical_efficiency', 0.77)
1565
1633
  step.setArgument('solar_thermal_collector_rated_thermal_losses', 0.793)
1566
- step.setArgument('pv_system_module_type_1', HPXML::PVModuleTypeStandard)
1634
+ step.setArgument('pv_system_module_type_1', Constants.Auto)
1567
1635
  step.removeArgument('pv_system_inverter_efficiency_1')
1568
1636
  step.removeArgument('pv_system_system_losses_fraction_1')
1569
1637
  step.setArgument('clothes_washer_location', Constants.Auto)
@@ -1579,6 +1647,7 @@ def get_values(osw_file, step)
1579
1647
  step.setArgument('clothes_dryer_efficiency_cef', Constants.Auto)
1580
1648
  step.setArgument('clothes_dryer_control_type', Constants.Auto)
1581
1649
  step.setArgument('clothes_dryer_vented_flow_rate', Constants.Auto)
1650
+ step.setArgument('dishwasher_location', Constants.Auto)
1582
1651
  step.setArgument('dishwasher_efficiency_kwh', Constants.Auto)
1583
1652
  step.setArgument('dishwasher_label_electric_rate', Constants.Auto)
1584
1653
  step.setArgument('dishwasher_label_gas_rate', Constants.Auto)
@@ -1587,6 +1656,7 @@ def get_values(osw_file, step)
1587
1656
  step.setArgument('dishwasher_place_setting_capacity', Constants.Auto)
1588
1657
  step.setArgument('refrigerator_location', Constants.Auto)
1589
1658
  step.setArgument('refrigerator_rated_annual_kwh', Constants.Auto)
1659
+ step.setArgument('cooking_range_oven_location', Constants.Auto)
1590
1660
  step.removeArgument('cooking_range_oven_is_induction')
1591
1661
  step.removeArgument('cooking_range_oven_is_convection')
1592
1662
  step.setArgument('ceiling_fan_present', true)
@@ -1602,18 +1672,25 @@ def get_values(osw_file, step)
1602
1672
  step.setArgument('freezer_rated_annual_kwh', '300.0')
1603
1673
  step.setArgument('plug_loads_well_pump_present', true)
1604
1674
  step.setArgument('plug_loads_well_pump_annual_kwh', '475.0')
1675
+ step.setArgument('plug_loads_well_pump_usage_multiplier', 1.0)
1676
+ step.setArgument('plug_loads_well_pump_usage_multiplier_2', 1.0)
1605
1677
  step.setArgument('plug_loads_vehicle_present', true)
1606
1678
  step.setArgument('plug_loads_vehicle_annual_kwh', '1500.0')
1679
+ step.setArgument('plug_loads_vehicle_usage_multiplier', 1.0)
1680
+ step.setArgument('plug_loads_vehicle_usage_multiplier_2', 1.0)
1607
1681
  step.setArgument('fuel_loads_grill_present', true)
1608
1682
  step.setArgument('fuel_loads_grill_fuel_type', HPXML::FuelTypePropane)
1609
1683
  step.setArgument('fuel_loads_grill_annual_therm', '25.0')
1610
- step.setArgument('fuel_loads_grill_location', HPXML::LocationExterior)
1684
+ step.setArgument('fuel_loads_grill_usage_multiplier', 1.0)
1611
1685
  step.setArgument('fuel_loads_lighting_present', true)
1612
1686
  step.setArgument('fuel_loads_lighting_annual_therm', '28.0')
1687
+ step.setArgument('fuel_loads_lighting_usage_multiplier', 1.0)
1613
1688
  step.setArgument('fuel_loads_fireplace_present', true)
1614
1689
  step.setArgument('fuel_loads_fireplace_fuel_type', HPXML::FuelTypeWoodCord)
1615
1690
  step.setArgument('fuel_loads_fireplace_annual_therm', '55.0')
1616
- step.setArgument('fuel_loads_fireplace_location', HPXML::LocationInterior)
1691
+ step.setArgument('fuel_loads_fireplace_frac_sensible', '0.5')
1692
+ step.setArgument('fuel_loads_fireplace_frac_latent', '0.1')
1693
+ step.setArgument('fuel_loads_fireplace_usage_multiplier', 1.0)
1617
1694
  step.setArgument('pool_present', true)
1618
1695
  step.setArgument('pool_heater_type', HPXML::HeaterTypeGas)
1619
1696
  step.setArgument('pool_pump_annual_kwh', '2700.0')
@@ -1658,7 +1735,6 @@ def get_values(osw_file, step)
1658
1735
  step.setArgument('fuel_loads_grill_present', true)
1659
1736
  step.setArgument('fuel_loads_grill_fuel_type', HPXML::FuelTypePropane)
1660
1737
  step.setArgument('fuel_loads_grill_annual_therm', '25.0')
1661
- step.setArgument('fuel_loads_grill_location', HPXML::LocationExterior)
1662
1738
  step.setArgument('fuel_loads_grill_usage_multiplier', 0.9)
1663
1739
  step.setArgument('fuel_loads_lighting_present', true)
1664
1740
  step.setArgument('fuel_loads_lighting_annual_therm', '28.0')
@@ -1666,7 +1742,8 @@ def get_values(osw_file, step)
1666
1742
  step.setArgument('fuel_loads_fireplace_present', true)
1667
1743
  step.setArgument('fuel_loads_fireplace_fuel_type', HPXML::FuelTypeWoodCord)
1668
1744
  step.setArgument('fuel_loads_fireplace_annual_therm', '55.0')
1669
- step.setArgument('fuel_loads_fireplace_location', HPXML::LocationInterior)
1745
+ step.setArgument('fuel_loads_fireplace_frac_sensible', '0.5')
1746
+ step.setArgument('fuel_loads_fireplace_frac_latent', '0.1')
1670
1747
  step.setArgument('fuel_loads_fireplace_usage_multiplier', 0.9)
1671
1748
  elsif ['base-misc-neighbor-shading.osw'].include? osw_file
1672
1749
  step.setArgument('neighbor_back_distance', 10)
@@ -1674,9 +1751,23 @@ def get_values(osw_file, step)
1674
1751
  step.setArgument('neighbor_front_height', '12')
1675
1752
  elsif ['base-pv.osw'].include? osw_file
1676
1753
  step.setArgument('pv_system_module_type_1', HPXML::PVModuleTypeStandard)
1754
+ step.setArgument('pv_system_location_1', HPXML::LocationRoof)
1755
+ step.setArgument('pv_system_tracking_1', HPXML::PVTrackingTypeFixed)
1677
1756
  step.setArgument('pv_system_module_type_2', HPXML::PVModuleTypePremium)
1757
+ step.setArgument('pv_system_location_2', HPXML::LocationRoof)
1758
+ step.setArgument('pv_system_tracking_2', HPXML::PVTrackingTypeFixed)
1678
1759
  step.setArgument('pv_system_array_azimuth_2', 90)
1679
1760
  step.setArgument('pv_system_max_power_output_2', 1500)
1761
+ elsif ['base-bldgtype-multifamily-shared-pv.osw'].include? osw_file
1762
+ step.setArgument('pv_system_num_units_served_1', 6)
1763
+ step.setArgument('pv_system_location_1', HPXML::LocationGround)
1764
+ step.setArgument('pv_system_module_type_1', HPXML::PVModuleTypeStandard)
1765
+ step.setArgument('pv_system_tracking_1', HPXML::PVTrackingTypeFixed)
1766
+ step.setArgument('pv_system_array_azimuth_1', 225)
1767
+ step.setArgument('pv_system_array_tilt_1', '30')
1768
+ step.setArgument('pv_system_max_power_output_1', 30000)
1769
+ step.setArgument('pv_system_inverter_efficiency_1', 0.96)
1770
+ step.setArgument('pv_system_system_losses_fraction_1', 0.14)
1680
1771
  elsif ['base-simcontrol-calendar-year-custom.osw'].include? osw_file
1681
1772
  step.setArgument('simulation_control_run_period_calendar_year', 2008)
1682
1773
  elsif ['base-simcontrol-daylight-saving-custom.osw'].include? osw_file
@@ -1722,8 +1813,6 @@ def get_values(osw_file, step)
1722
1813
  elsif ['extra-dhw-solar-latitude.osw'].include? osw_file
1723
1814
  step.setArgument('solar_thermal_system_type', 'hot water')
1724
1815
  step.setArgument('solar_thermal_collector_tilt', 'latitude-15')
1725
- elsif ['extra-dhw-shared-water-heater.osw'].include? osw_file
1726
- step.setArgument('water_heater_is_shared_system', true)
1727
1816
  elsif ['extra-second-refrigerator.osw'].include? osw_file
1728
1817
  step.setArgument('extra_refrigerator_present', true)
1729
1818
  elsif ['extra-second-heating-system-portable-heater.osw'].include? osw_file
@@ -1743,41 +1832,39 @@ def get_values(osw_file, step)
1743
1832
  step.setArgument('heating_system_fraction_heat_load_served', 0.75)
1744
1833
  step.setArgument('heating_system_type_2', HPXML::HVACTypeFireplace)
1745
1834
  step.setArgument('heating_system_heating_capacity_2', '16000.0')
1746
- elsif ['extra-pv-shared.osw'].include? osw_file
1747
- step.setArgument('geometry_building_num_bedrooms', 9)
1748
- step.setArgument('pv_system_module_type_1', HPXML::PVModuleTypeStandard)
1749
- step.setArgument('pv_system_is_shared_1', true)
1750
1835
  elsif ['extra-enclosure-garage-partially-protruded.osw'].include? osw_file
1751
1836
  step.setArgument('geometry_garage_width', 12)
1752
1837
  step.setArgument('geometry_garage_protrusion', 0.5)
1753
- elsif ['extra-mechvent-shared.osw'].include? osw_file
1754
- step.setArgument('mech_vent_fan_type', HPXML::MechVentTypeSupply)
1755
- step.setArgument('mech_vent_flow_rate', 800)
1756
- step.setArgument('mech_vent_fan_power', 240)
1757
- step.setArgument('mech_vent_is_shared_system', true)
1758
- step.setArgument('shared_mech_vent_in_unit_flow_rate', 80.0)
1759
- step.setArgument('shared_mech_vent_frac_recirculation', 0.5)
1760
- step.setArgument('mech_vent_fan_type_2', HPXML::MechVentTypeExhaust)
1761
- step.setArgument('mech_vent_flow_rate_2', 72)
1762
- step.setArgument('mech_vent_fan_power_2', 26)
1763
- elsif ['extra-mechvent-shared-preconditioning.osw'].include? osw_file
1764
- step.setArgument('shared_mech_vent_preheating_fuel', HPXML::FuelTypeNaturalGas)
1765
- step.setArgument('shared_mech_vent_preheating_efficiency', 0.92)
1766
- step.setArgument('shared_mech_vent_preheating_fraction_heat_load_served', 0.7)
1767
- step.setArgument('shared_mech_vent_precooling_fuel', HPXML::FuelTypeElectricity)
1768
- step.setArgument('shared_mech_vent_precooling_efficiency', 4.0)
1769
- step.setArgument('shared_mech_vent_precooling_fraction_cool_load_served', 0.8)
1770
1838
  elsif ['extra-vacancy-6-months.osw'].include? osw_file
1771
1839
  step.setArgument('schedules_vacancy_begin_month', 1)
1772
1840
  step.setArgument('schedules_vacancy_begin_day_of_month', 1)
1773
1841
  step.setArgument('schedules_vacancy_end_month', 6)
1774
1842
  step.setArgument('schedules_vacancy_end_day_of_month', 30)
1843
+ elsif ['extra-schedules-random-seed.osw'].include? osw_file
1844
+ step.setArgument('schedules_random_seed', 123)
1845
+ elsif ['extra-hvac-programmable-thermostat.osw'].include? osw_file
1846
+ step.setArgument('setpoint_heating_weekday_offset_magnitude', 4)
1847
+ step.setArgument('setpoint_heating_weekend_offset_magnitude', 4)
1848
+ step.setArgument('setpoint_heating_weekday_schedule', '-1, -1, -1, -1, -1, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1')
1849
+ step.setArgument('setpoint_heating_weekend_schedule', '-1, -1, -1, -1, -1, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1')
1850
+ step.setArgument('setpoint_cooling_weekday_offset_magnitude', 4)
1851
+ step.setArgument('setpoint_cooling_weekend_offset_magnitude', 4)
1852
+ step.setArgument('setpoint_cooling_weekday_schedule', '0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0')
1853
+ step.setArgument('setpoint_cooling_weekend_schedule', '0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0')
1854
+ elsif ['extra-plug-loads-additional-multipliers.osw'].include? osw_file
1855
+ step.setArgument('plug_loads_television_usage_multiplier_2', 1.5)
1856
+ step.setArgument('plug_loads_other_usage_multiplier_2', 1.5)
1857
+ step.setArgument('plug_loads_well_pump_present', true)
1858
+ step.setArgument('plug_loads_well_pump_usage_multiplier_2', 1.5)
1859
+ step.setArgument('plug_loads_vehicle_present', true)
1860
+ step.setArgument('plug_loads_vehicle_usage_multiplier_2', 1.5)
1775
1861
  end
1776
1862
 
1777
1863
  # Warnings/Errors
1778
1864
  if ['invalid_files/non-electric-heat-pump-water-heater.osw'].include? osw_file
1779
1865
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeHeatPump)
1780
1866
  step.setArgument('water_heater_fuel_type', HPXML::FuelTypeNaturalGas)
1867
+ step.setArgument('water_heater_efficiency', 2.3)
1781
1868
  elsif ['invalid_files/heating-system-and-heat-pump.osw'].include? osw_file
1782
1869
  step.setArgument('cooling_system_type', 'none')
1783
1870
  step.setArgument('heat_pump_type', HPXML::HVACTypeHeatPumpAirToAir)
@@ -1798,9 +1885,11 @@ def get_values(osw_file, step)
1798
1885
  elsif ['invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw'].include? osw_file
1799
1886
  step.setArgument('geometry_foundation_type', HPXML::FoundationTypeSlab)
1800
1887
  step.setArgument('geometry_foundation_height_above_grade', 0.0)
1888
+ step.setArgument('geometry_level', 'Bottom')
1801
1889
  elsif ['invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw'].include? osw_file
1802
1890
  step.setArgument('geometry_foundation_type', HPXML::FoundationTypeCrawlspaceUnvented)
1803
1891
  step.setArgument('geometry_foundation_height', 0.0)
1892
+ step.setArgument('geometry_level', 'Bottom')
1804
1893
  elsif ['invalid_files/slab-non-zero-foundation-height-above-grade.osw'].include? osw_file
1805
1894
  step.setArgument('geometry_foundation_type', HPXML::FoundationTypeSlab)
1806
1895
  step.setArgument('geometry_foundation_height', 0.0)
@@ -1821,7 +1910,7 @@ def get_values(osw_file, step)
1821
1910
  step.setArgument('geometry_foundation_type', HPXML::FoundationTypeCrawlspaceVented)
1822
1911
  step.setArgument('geometry_foundation_height', 3.0)
1823
1912
  step.setArgument('floor_assembly_r', 10)
1824
- elsif ['invalid_files/unvented-crawlspace-with-ceiling-insulation.osw'].include? osw_file
1913
+ elsif ['invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw'].include? osw_file
1825
1914
  step.setArgument('geometry_foundation_type', HPXML::FoundationTypeCrawlspaceUnvented)
1826
1915
  step.setArgument('geometry_foundation_height', 3.0)
1827
1916
  step.setArgument('floor_assembly_r', 10)
@@ -1841,6 +1930,17 @@ def get_values(osw_file, step)
1841
1930
  step.setArgument('geometry_attic_type', HPXML::AtticTypeConditioned)
1842
1931
  elsif ['invalid_files/dhw-indirect-without-boiler.osw'].include? osw_file
1843
1932
  step.setArgument('water_heater_type', HPXML::WaterHeaterTypeCombiStorage)
1933
+ elsif ['invalid_files/multipliers-without-plug-loads.osw'].include? osw_file
1934
+ step.setArgument('plug_loads_television_annual_kwh', '0.0')
1935
+ step.setArgument('plug_loads_other_annual_kwh', '0.0')
1936
+ step.setArgument('plug_loads_well_pump_usage_multiplier', 1.0)
1937
+ step.setArgument('plug_loads_well_pump_usage_multiplier_2', 1.0)
1938
+ step.setArgument('plug_loads_vehicle_usage_multiplier', 1.0)
1939
+ step.setArgument('plug_loads_vehicle_usage_multiplier_2', 1.0)
1940
+ elsif ['invalid_files/multipliers-without-fuel-loads.osw'].include? osw_file
1941
+ step.setArgument('fuel_loads_grill_usage_multiplier', 1.0)
1942
+ step.setArgument('fuel_loads_lighting_usage_multiplier', 1.0)
1943
+ step.setArgument('fuel_loads_fireplace_usage_multiplier', 1.0)
1844
1944
  end
1845
1945
  return step
1846
1946
  end
@@ -1856,6 +1956,7 @@ def create_hpxmls
1856
1956
 
1857
1957
  this_dir = File.dirname(__FILE__)
1858
1958
  sample_files_dir = File.join(this_dir, 'workflow/sample_files')
1959
+ hpxml_docs = {}
1859
1960
 
1860
1961
  # Hash of HPXML -> Parent HPXML
1861
1962
  hpxmls_files = {
@@ -1892,9 +1993,9 @@ def create_hpxmls
1892
1993
  'invalid_files/clothes-washer-location.xml' => 'base.xml',
1893
1994
  'invalid_files/clothes-dryer-location.xml' => 'base.xml',
1894
1995
  'invalid_files/cooking-range-location.xml' => 'base.xml',
1895
- 'invalid_files/appliances-location-unconditioned-space.xml' => 'base.xml',
1896
- 'invalid_files/coal-for-non-boiler-heating.xml' => 'base-hvac-stove-oil-only.xml',
1897
1996
  'invalid_files/dhw-frac-load-served.xml' => 'base-dhw-multiple.xml',
1997
+ 'invalid_files/dhw-invalid-ef-tank.xml' => 'base.xml',
1998
+ 'invalid_files/dhw-invalid-uef-tank-heat-pump.xml' => 'base-dhw-tank-heat-pump-uef.xml',
1898
1999
  'invalid_files/dishwasher-location.xml' => 'base.xml',
1899
2000
  'invalid_files/duct-location.xml' => 'base.xml',
1900
2001
  'invalid_files/duct-location-unconditioned-space.xml' => 'base.xml',
@@ -1902,6 +2003,7 @@ def create_hpxmls
1902
2003
  'invalid_files/enclosure-attic-missing-roof.xml' => 'base.xml',
1903
2004
  'invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml' => 'base-foundation-unconditioned-basement.xml',
1904
2005
  'invalid_files/enclosure-basement-missing-slab.xml' => 'base-foundation-unconditioned-basement.xml',
2006
+ 'invalid_files/enclosure-floor-area-exceeds-cfa.xml' => 'base.xml',
1905
2007
  'invalid_files/enclosure-garage-missing-exterior-wall.xml' => 'base-enclosure-garage.xml',
1906
2008
  'invalid_files/enclosure-garage-missing-roof-ceiling.xml' => 'base-enclosure-garage.xml',
1907
2009
  'invalid_files/enclosure-garage-missing-slab.xml' => 'base-enclosure-garage.xml',
@@ -1917,17 +2019,22 @@ def create_hpxmls
1917
2019
  'invalid_files/hvac-dse-multiple-attached-cooling.xml' => 'base-hvac-dse.xml',
1918
2020
  'invalid_files/hvac-dse-multiple-attached-heating.xml' => 'base-hvac-dse.xml',
1919
2021
  'invalid_files/hvac-frac-load-served.xml' => 'base-hvac-multiple.xml',
1920
- 'invalid_files/invalid-calendar-year.xml' => 'base.xml',
1921
- 'invalid_files/invalid-daylight-saving.xml' => 'base.xml',
2022
+ 'invalid_files/hvac-inconsistent-fan-powers.xml' => 'base.xml',
2023
+ 'invalid_files/invalid-datatype-boolean.xml' => 'base.xml',
2024
+ 'invalid_files/invalid-datatype-float.xml' => 'base.xml',
2025
+ 'invalid_files/invalid-datatype-integer.xml' => 'base.xml',
2026
+ 'invalid_files/invalid-daylight-saving.xml' => 'base-simcontrol-daylight-saving-custom.xml',
1922
2027
  'invalid_files/invalid-epw-filepath.xml' => 'base.xml',
1923
- 'invalid_files/invalid-facility-type.xml' => 'base-dhw-shared-laundry-room.xml',
2028
+ 'invalid_files/invalid-facility-type-equipment.xml' => 'base-bldgtype-multifamily-shared-laundry-room.xml',
2029
+ 'invalid_files/invalid-facility-type-surfaces.xml' => 'base.xml',
2030
+ 'invalid_files/invalid-input-parameters.xml' => 'base.xml',
1924
2031
  'invalid_files/invalid-neighbor-shading-azimuth.xml' => 'base-misc-neighbor-shading.xml',
1925
2032
  'invalid_files/invalid-relatedhvac-dhw-indirect.xml' => 'base-dhw-indirect.xml',
1926
2033
  'invalid_files/invalid-relatedhvac-desuperheater.xml' => 'base-hvac-central-ac-only-1-speed.xml',
1927
2034
  'invalid_files/invalid-runperiod.xml' => 'base.xml',
2035
+ 'invalid_files/invalid-schema-version.xml' => 'base.xml',
1928
2036
  'invalid_files/invalid-timestep.xml' => 'base.xml',
1929
2037
  'invalid_files/invalid-window-height.xml' => 'base-enclosure-overhangs.xml',
1930
- 'invalid_files/invalid-window-interior-shading.xml' => 'base.xml',
1931
2038
  'invalid_files/lighting-fractions.xml' => 'base.xml',
1932
2039
  'invalid_files/missing-elements.xml' => 'base.xml',
1933
2040
  'invalid_files/multifamily-reference-appliance.xml' => 'base.xml',
@@ -1936,6 +2043,7 @@ def create_hpxmls
1936
2043
  'invalid_files/multifamily-reference-water-heater.xml' => 'base.xml',
1937
2044
  'invalid_files/net-area-negative-roof.xml' => 'base-enclosure-skylights.xml',
1938
2045
  'invalid_files/net-area-negative-wall.xml' => 'base.xml',
2046
+ 'invalid_files/num-bedrooms-exceeds-limit.xml' => 'base.xml',
1939
2047
  'invalid_files/orphaned-hvac-distribution.xml' => 'base-hvac-furnace-gas-room-ac.xml',
1940
2048
  'invalid_files/refrigerator-location.xml' => 'base.xml',
1941
2049
  'invalid_files/repeated-relatedhvac-dhw-indirect.xml' => 'base-dhw-indirect.xml',
@@ -1949,8 +2057,8 @@ def create_hpxmls
1949
2057
  'invalid_files/unattached-hvac-distribution.xml' => 'base.xml',
1950
2058
  'invalid_files/unattached-skylight.xml' => 'base-enclosure-skylights.xml',
1951
2059
  'invalid_files/unattached-solar-thermal-system.xml' => 'base-dhw-solar-indirect-flat-plate.xml',
1952
- 'invalid_files/unattached-shared-clothes-washer-water-heater.xml' => 'base-dhw-shared-laundry-room.xml',
1953
- 'invalid_files/unattached-shared-dishwasher-water-heater.xml' => 'base-dhw-shared-laundry-room.xml',
2060
+ 'invalid_files/unattached-shared-clothes-washer-water-heater.xml' => 'base-bldgtype-multifamily-shared-laundry-room.xml',
2061
+ 'invalid_files/unattached-shared-dishwasher-water-heater.xml' => 'base-bldgtype-multifamily-shared-laundry-room.xml',
1954
2062
  'invalid_files/unattached-window.xml' => 'base.xml',
1955
2063
  'invalid_files/water-heater-location.xml' => 'base.xml',
1956
2064
  'invalid_files/water-heater-location-other.xml' => 'base.xml',
@@ -1960,8 +2068,9 @@ def create_hpxmls
1960
2068
  'invalid_files/refrigerators-no-primary.xml' => 'base.xml',
1961
2069
  'base-appliances-coal.xml' => 'base.xml',
1962
2070
  'base-appliances-dehumidifier.xml' => 'base-location-dallas-tx.xml',
1963
- 'base-appliances-dehumidifier-ief.xml' => 'base-appliances-dehumidifier.xml',
1964
2071
  'base-appliances-dehumidifier-50percent.xml' => 'base-appliances-dehumidifier.xml',
2072
+ 'base-appliances-dehumidifier-ief-portable.xml' => 'base-appliances-dehumidifier.xml',
2073
+ 'base-appliances-dehumidifier-ief-whole-home.xml' => 'base-appliances-dehumidifier-ief-portable.xml',
1965
2074
  'base-appliances-gas.xml' => 'base.xml',
1966
2075
  'base-appliances-modified.xml' => 'base.xml',
1967
2076
  'base-appliances-none.xml' => 'base.xml',
@@ -1974,6 +2083,37 @@ def create_hpxmls
1974
2083
  'base-atticroof-radiant-barrier.xml' => 'base-location-dallas-tx.xml',
1975
2084
  'base-atticroof-vented.xml' => 'base.xml',
1976
2085
  'base-atticroof-unvented-insulated-roof.xml' => 'base.xml',
2086
+ 'base-bldgtype-multifamily.xml' => 'base.xml',
2087
+ 'base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml' => 'base-bldgtype-multifamily.xml',
2088
+ 'base-bldgtype-multifamily-adjacent-to-other-heated-space.xml' => 'base-bldgtype-multifamily.xml',
2089
+ 'base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml' => 'base-bldgtype-multifamily.xml',
2090
+ 'base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml' => 'base-bldgtype-multifamily.xml',
2091
+ 'base-bldgtype-multifamily-adjacent-to-multiple.xml' => 'base-bldgtype-multifamily.xml',
2092
+ 'base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml' => 'base-bldgtype-multifamily.xml',
2093
+ 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml' => 'base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml',
2094
+ 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml' => 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml',
2095
+ 'base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml' => 'base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml',
2096
+ 'base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml' => 'base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml',
2097
+ 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml' => 'base-bldgtype-multifamily.xml',
2098
+ 'base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml' => 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml',
2099
+ 'base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml' => 'base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml',
2100
+ 'base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml' => 'base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml',
2101
+ 'base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml' => 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml',
2102
+ 'base-bldgtype-multifamily-shared-chiller-only-baseboard.xml' => 'base-bldgtype-multifamily.xml',
2103
+ 'base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml' => 'base-bldgtype-multifamily-shared-chiller-only-baseboard.xml',
2104
+ 'base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml' => 'base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml',
2105
+ 'base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml' => 'base-bldgtype-multifamily-shared-chiller-only-baseboard.xml',
2106
+ 'base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml' => 'base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml',
2107
+ 'base-bldgtype-multifamily-shared-generator.xml' => 'base-bldgtype-multifamily.xml',
2108
+ 'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml' => 'base-bldgtype-multifamily.xml',
2109
+ 'base-bldgtype-multifamily-shared-laundry-room.xml' => 'base-bldgtype-multifamily.xml',
2110
+ 'base-bldgtype-multifamily-shared-mechvent.xml' => 'base-bldgtype-multifamily.xml',
2111
+ 'base-bldgtype-multifamily-shared-mechvent-preconditioning.xml' => 'base-bldgtype-multifamily-shared-mechvent.xml',
2112
+ 'base-bldgtype-multifamily-shared-mechvent-multiple.xml' => 'base-bldgtype-multifamily.xml',
2113
+ 'base-bldgtype-multifamily-shared-pv.xml' => 'base-bldgtype-multifamily.xml',
2114
+ 'base-bldgtype-multifamily-shared-water-heater.xml' => 'base-bldgtype-multifamily.xml',
2115
+ 'base-bldgtype-multifamily-shared-water-heater-recirc.xml' => 'base-bldgtype-multifamily-shared-water-heater.xml',
2116
+ 'base-bldgtype-single-family-attached.xml' => 'base.xml',
1977
2117
  'base-dhw-combi-tankless.xml' => 'base-dhw-indirect.xml',
1978
2118
  'base-dhw-combi-tankless-outside.xml' => 'base-dhw-combi-tankless.xml',
1979
2119
  'base-dhw-desuperheater.xml' => 'base-hvac-central-ac-only-1-speed.xml',
@@ -1996,9 +2136,6 @@ def create_hpxmls
1996
2136
  'base-dhw-recirc-nocontrol.xml' => 'base.xml',
1997
2137
  'base-dhw-recirc-temperature.xml' => 'base.xml',
1998
2138
  'base-dhw-recirc-timer.xml' => 'base.xml',
1999
- 'base-dhw-shared-water-heater.xml' => 'base-enclosure-attached-multifamily.xml',
2000
- 'base-dhw-shared-water-heater-recirc.xml' => 'base-dhw-shared-water-heater.xml',
2001
- 'base-dhw-shared-laundry-room.xml' => 'base-enclosure-attached-multifamily.xml',
2002
2139
  'base-dhw-solar-direct-evacuated-tube.xml' => 'base.xml',
2003
2140
  'base-dhw-solar-direct-flat-plate.xml' => 'base.xml',
2004
2141
  'base-dhw-solar-direct-ics.xml' => 'base.xml',
@@ -2006,36 +2143,35 @@ def create_hpxmls
2006
2143
  'base-dhw-solar-indirect-flat-plate.xml' => 'base.xml',
2007
2144
  'base-dhw-solar-thermosyphon-flat-plate.xml' => 'base.xml',
2008
2145
  'base-dhw-tank-coal.xml' => 'base.xml',
2146
+ 'base-dhw-tank-elec-uef.xml' => 'base.xml',
2009
2147
  'base-dhw-tank-gas.xml' => 'base.xml',
2148
+ 'base-dhw-tank-gas-uef.xml' => 'base.xml',
2010
2149
  'base-dhw-tank-gas-outside.xml' => 'base-dhw-tank-gas.xml',
2011
2150
  'base-dhw-tank-heat-pump.xml' => 'base.xml',
2012
2151
  'base-dhw-tank-heat-pump-outside.xml' => 'base-dhw-tank-heat-pump.xml',
2152
+ 'base-dhw-tank-heat-pump-uef.xml' => 'base.xml',
2013
2153
  'base-dhw-tank-heat-pump-with-solar.xml' => 'base-dhw-tank-heat-pump.xml',
2014
2154
  'base-dhw-tank-heat-pump-with-solar-fraction.xml' => 'base-dhw-tank-heat-pump.xml',
2015
2155
  'base-dhw-tank-oil.xml' => 'base.xml',
2016
2156
  'base-dhw-tank-wood.xml' => 'base.xml',
2017
2157
  'base-dhw-tankless-electric.xml' => 'base.xml',
2158
+ 'base-dhw-tankless-electric-uef.xml' => 'base.xml',
2018
2159
  'base-dhw-tankless-electric-outside.xml' => 'base-dhw-tankless-electric.xml',
2019
2160
  'base-dhw-tankless-gas.xml' => 'base.xml',
2161
+ 'base-dhw-tankless-gas-uef.xml' => 'base.xml',
2020
2162
  'base-dhw-tankless-gas-with-solar.xml' => 'base-dhw-tankless-gas.xml',
2021
2163
  'base-dhw-tankless-gas-with-solar-fraction.xml' => 'base-dhw-tankless-gas.xml',
2022
2164
  'base-dhw-tankless-propane.xml' => 'base.xml',
2023
- 'base-dhw-uef.xml' => 'base.xml',
2024
2165
  'base-dhw-jacket-electric.xml' => 'base.xml',
2025
2166
  'base-dhw-jacket-gas.xml' => 'base-dhw-tank-gas.xml',
2026
2167
  'base-dhw-jacket-indirect.xml' => 'base-dhw-indirect.xml',
2027
2168
  'base-dhw-jacket-hpwh.xml' => 'base-dhw-tank-heat-pump.xml',
2028
2169
  'base-enclosure-2stories.xml' => 'base.xml',
2029
2170
  'base-enclosure-2stories-garage.xml' => 'base-enclosure-2stories.xml',
2030
- 'base-enclosure-other-housing-unit.xml' => 'base-foundation-ambient.xml',
2031
- 'base-enclosure-other-heated-space.xml' => 'base-foundation-ambient.xml',
2032
- 'base-enclosure-other-non-freezing-space.xml' => 'base-foundation-ambient.xml',
2033
- 'base-enclosure-other-multifamily-buffer-space.xml' => 'base-foundation-ambient.xml',
2034
2171
  'base-enclosure-beds-1.xml' => 'base.xml',
2035
2172
  'base-enclosure-beds-2.xml' => 'base.xml',
2036
2173
  'base-enclosure-beds-4.xml' => 'base.xml',
2037
2174
  'base-enclosure-beds-5.xml' => 'base.xml',
2038
- 'base-enclosure-common-surfaces.xml' => 'base-enclosure-attached-multifamily.xml',
2039
2175
  'base-enclosure-garage.xml' => 'base.xml',
2040
2176
  'base-enclosure-infil-ach-house-pressure.xml' => 'base.xml',
2041
2177
  'base-enclosure-infil-cfm-house-pressure.xml' => 'base-enclosure-infil-cfm50.xml',
@@ -2045,11 +2181,11 @@ def create_hpxmls
2045
2181
  'base-enclosure-overhangs.xml' => 'base.xml',
2046
2182
  'base-enclosure-rooftypes.xml' => 'base.xml',
2047
2183
  'base-enclosure-skylights.xml' => 'base.xml',
2184
+ 'base-enclosure-split-level.xml' => 'base-foundation-slab.xml',
2048
2185
  'base-enclosure-split-surfaces.xml' => 'base-enclosure-skylights.xml',
2049
2186
  'base-enclosure-walltypes.xml' => 'base.xml',
2050
2187
  'base-enclosure-windows-interior-shading.xml' => 'base.xml',
2051
2188
  'base-enclosure-windows-none.xml' => 'base.xml',
2052
- 'base-enclosure-attached-multifamily.xml' => 'base.xml',
2053
2189
  'base-foundation-multiple.xml' => 'base-foundation-unconditioned-basement.xml',
2054
2190
  'base-foundation-ambient.xml' => 'base.xml',
2055
2191
  'base-foundation-conditioned-basement-slab-insulation.xml' => 'base.xml',
@@ -2091,7 +2227,7 @@ def create_hpxmls
2091
2227
  'base-hvac-fireplace-wood-only.xml' => 'base.xml',
2092
2228
  'base-hvac-fixed-heater-gas-only.xml' => 'base.xml',
2093
2229
  'base-hvac-floor-furnace-propane-only.xml' => 'base.xml',
2094
- 'base-hvac-flowrate.xml' => 'base.xml',
2230
+ 'base-hvac-furnace-coal-only.xml' => 'base.xml',
2095
2231
  'base-hvac-furnace-elec-central-ac-1-speed.xml' => 'base.xml',
2096
2232
  'base-hvac-furnace-elec-only.xml' => 'base.xml',
2097
2233
  'base-hvac-furnace-gas-central-ac-2-speed.xml' => 'base.xml',
@@ -2115,25 +2251,10 @@ def create_hpxmls
2115
2251
  'base-hvac-none.xml' => 'base.xml',
2116
2252
  'base-hvac-portable-heater-gas-only.xml' => 'base.xml',
2117
2253
  'base-hvac-programmable-thermostat.xml' => 'base.xml',
2254
+ 'base-hvac-programmable-thermostat-detailed.xml' => 'base.xml',
2118
2255
  'base-hvac-room-ac-only.xml' => 'base.xml',
2119
2256
  'base-hvac-room-ac-only-33percent.xml' => 'base-hvac-room-ac-only.xml',
2120
2257
  'base-hvac-setpoints.xml' => 'base.xml',
2121
- 'base-hvac-shared-boiler-chiller-baseboard.xml' => 'base-enclosure-attached-multifamily.xml',
2122
- 'base-hvac-shared-boiler-chiller-fan-coil.xml' => 'base-hvac-shared-boiler-chiller-baseboard.xml',
2123
- 'base-hvac-shared-boiler-chiller-fan-coil-ducted.xml' => 'base-hvac-shared-boiler-chiller-fan-coil.xml',
2124
- 'base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml' => 'base-hvac-shared-boiler-chiller-baseboard.xml',
2125
- 'base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml' => 'base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml',
2126
- 'base-hvac-shared-boiler-only-baseboard.xml' => 'base-enclosure-attached-multifamily.xml',
2127
- 'base-hvac-shared-boiler-only-fan-coil.xml' => 'base-hvac-shared-boiler-only-baseboard.xml',
2128
- 'base-hvac-shared-boiler-only-fan-coil-ducted.xml' => 'base-hvac-shared-boiler-only-fan-coil.xml',
2129
- 'base-hvac-shared-boiler-only-fan-coil-eae.xml' => 'base-hvac-shared-boiler-only-fan-coil.xml',
2130
- 'base-hvac-shared-boiler-only-water-loop-heat-pump.xml' => 'base-hvac-shared-boiler-only-baseboard.xml',
2131
- 'base-hvac-shared-chiller-only-baseboard.xml' => 'base-enclosure-attached-multifamily.xml',
2132
- 'base-hvac-shared-chiller-only-fan-coil.xml' => 'base-hvac-shared-chiller-only-baseboard.xml',
2133
- 'base-hvac-shared-chiller-only-fan-coil-ducted.xml' => 'base-hvac-shared-chiller-only-fan-coil.xml',
2134
- 'base-hvac-shared-chiller-only-water-loop-heat-pump.xml' => 'base-hvac-shared-chiller-only-baseboard.xml',
2135
- 'base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml' => 'base-hvac-shared-chiller-only-water-loop-heat-pump.xml',
2136
- 'base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml' => 'base-enclosure-attached-multifamily.xml',
2137
2258
  'base-hvac-stove-oil-only.xml' => 'base.xml',
2138
2259
  'base-hvac-stove-wood-pellets-only.xml' => 'base.xml',
2139
2260
  'base-hvac-undersized.xml' => 'base.xml',
@@ -2159,20 +2280,17 @@ def create_hpxmls
2159
2280
  'base-mechvent-hrv.xml' => 'base.xml',
2160
2281
  'base-mechvent-hrv-asre.xml' => 'base.xml',
2161
2282
  'base-mechvent-multiple.xml' => 'base-mechvent-bath-kitchen-fans.xml',
2162
- 'base-mechvent-shared.xml' => 'base-enclosure-attached-multifamily.xml',
2163
- 'base-mechvent-shared-preconditioning.xml' => 'base-mechvent-shared.xml',
2164
- 'base-mechvent-shared-multiple.xml' => 'base-enclosure-attached-multifamily.xml',
2165
2283
  'base-mechvent-supply.xml' => 'base.xml',
2166
2284
  'base-mechvent-whole-house-fan.xml' => 'base.xml',
2167
2285
  'base-misc-defaults.xml' => 'base.xml',
2168
- 'base-misc-loads-large-uncommon.xml' => 'base-enclosure-garage.xml',
2286
+ 'base-misc-generators.xml' => 'base.xml',
2287
+ 'base-misc-loads-large-uncommon.xml' => 'base.xml',
2169
2288
  'base-misc-loads-large-uncommon2.xml' => 'base-misc-loads-large-uncommon.xml',
2170
2289
  'base-misc-loads-none.xml' => 'base.xml',
2171
2290
  'base-misc-neighbor-shading.xml' => 'base.xml',
2172
2291
  'base-misc-shelter-coefficient.xml' => 'base.xml',
2173
2292
  'base-misc-usage-multiplier.xml' => 'base.xml',
2174
2293
  'base-pv.xml' => 'base.xml',
2175
- 'base-pv-shared.xml' => 'base-enclosure-attached-multifamily.xml',
2176
2294
  'base-simcontrol-calendar-year-custom.xml' => 'base.xml',
2177
2295
  'base-simcontrol-daylight-saving-custom.xml' => 'base.xml',
2178
2296
  'base-simcontrol-daylight-saving-disabled.xml' => 'base.xml',
@@ -2267,6 +2385,7 @@ def create_hpxmls
2267
2385
  set_hpxml_water_fixtures(hpxml_file, hpxml)
2268
2386
  set_hpxml_solar_thermal_system(hpxml_file, hpxml)
2269
2387
  set_hpxml_pv_systems(hpxml_file, hpxml)
2388
+ set_hpxml_generators(hpxml_file, hpxml)
2270
2389
  set_hpxml_clothes_washer(hpxml_file, hpxml)
2271
2390
  set_hpxml_clothes_dryer(hpxml_file, hpxml)
2272
2391
  set_hpxml_dishwasher(hpxml_file, hpxml)
@@ -2285,10 +2404,20 @@ def create_hpxmls
2285
2404
  end
2286
2405
 
2287
2406
  hpxml_doc = hpxml.to_oga()
2407
+ hpxml_docs[File.basename(derivative)] = hpxml_doc
2288
2408
 
2289
2409
  if ['invalid_files/missing-elements.xml'].include? derivative
2290
2410
  XMLHelper.delete_element(hpxml_doc, '/HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction/NumberofConditionedFloors')
2291
2411
  XMLHelper.delete_element(hpxml_doc, '/HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction/ConditionedFloorArea')
2412
+ elsif ['invalid_files/invalid-datatype-boolean.xml'].include? derivative
2413
+ XMLHelper.get_element(hpxml_doc, '/HPXML/Building/BuildingDetails/Enclosure/Roofs/Roof/RadiantBarrier').inner_text = 'FOOBAR'
2414
+ elsif ['invalid_files/invalid-datatype-float.xml'].include? derivative
2415
+ XMLHelper.get_element(hpxml_doc, '/HPXML/Building/BuildingDetails/Enclosure/Slabs/Slab/extension/CarpetFraction').inner_text = 'FOOBAR'
2416
+ elsif ['invalid_files/invalid-datatype-integer.xml'].include? derivative
2417
+ XMLHelper.get_element(hpxml_doc, '/HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction/NumberofBedrooms').inner_text = '2.5'
2418
+ elsif ['invalid_files/invalid-schema-version.xml'].include? derivative
2419
+ root = XMLHelper.get_element(hpxml_doc, '/HPXML')
2420
+ XMLHelper.add_attribute(root, 'schemaVersion', '2.3')
2292
2421
  end
2293
2422
 
2294
2423
  if derivative.include? 'ASHRAE_Standard_140'
@@ -2306,8 +2435,7 @@ def create_hpxmls
2306
2435
  if errors.size > 0
2307
2436
  fail "ERRORS: #{errors}"
2308
2437
  end
2309
-
2310
- # Check for additional errors
2438
+ # Check for errors
2311
2439
  errors = hpxml.check_for_errors()
2312
2440
  if errors.size > 0
2313
2441
  fail "ERRORS: #{errors}"
@@ -2338,6 +2466,8 @@ def create_hpxmls
2338
2466
  puts "Warning: Extra HPXML file found at #{File.absolute_path(xml)}"
2339
2467
  end
2340
2468
  end
2469
+
2470
+ return hpxml_docs
2341
2471
  end
2342
2472
 
2343
2473
  def set_hpxml_header(hpxml_file, hpxml)
@@ -2360,38 +2490,38 @@ def set_hpxml_header(hpxml_file, hpxml)
2360
2490
  elsif ['base-simcontrol-daylight-saving-custom.xml'].include? hpxml_file
2361
2491
  hpxml.header.dst_enabled = true
2362
2492
  hpxml.header.dst_begin_month = 3
2363
- hpxml.header.dst_begin_day_of_month = 10
2493
+ hpxml.header.dst_begin_day = 10
2364
2494
  hpxml.header.dst_end_month = 11
2365
- hpxml.header.dst_end_day_of_month = 6
2495
+ hpxml.header.dst_end_day = 6
2366
2496
  elsif ['base-simcontrol-daylight-saving-disabled.xml'].include? hpxml_file
2367
2497
  hpxml.header.dst_enabled = false
2368
2498
  elsif ['base-simcontrol-timestep-10-mins.xml'].include? hpxml_file
2369
2499
  hpxml.header.timestep = 10
2370
2500
  elsif ['base-simcontrol-runperiod-1-month.xml'].include? hpxml_file
2371
2501
  hpxml.header.sim_begin_month = 1
2372
- hpxml.header.sim_begin_day_of_month = 1
2502
+ hpxml.header.sim_begin_day = 1
2373
2503
  hpxml.header.sim_end_month = 1
2374
- hpxml.header.sim_end_day_of_month = 31
2504
+ hpxml.header.sim_end_day = 31
2375
2505
  elsif ['base-hvac-undersized-allow-increased-fixed-capacities.xml'].include? hpxml_file
2376
2506
  hpxml.header.allow_increased_fixed_capacities = true
2377
2507
  elsif hpxml_file.include? 'manual-s-oversize-allowances.xml'
2378
2508
  hpxml.header.use_max_load_for_heat_pumps = false
2379
- elsif ['invalid_files/invalid-calendar-year.xml'].include? hpxml_file
2380
- hpxml.header.sim_calendar_year = 20018
2381
2509
  elsif ['invalid_files/invalid-timestep.xml'].include? hpxml_file
2382
2510
  hpxml.header.timestep = 45
2383
2511
  elsif ['invalid_files/invalid-runperiod.xml'].include? hpxml_file
2384
2512
  hpxml.header.sim_end_month = 4
2385
- hpxml.header.sim_end_day_of_month = 31
2513
+ hpxml.header.sim_end_day = 31
2386
2514
  elsif ['invalid_files/invalid-daylight-saving.xml'].include? hpxml_file
2387
2515
  hpxml.header.dst_end_month = 4
2388
- hpxml.header.dst_end_day_of_month = 31
2516
+ hpxml.header.dst_end_day = 31
2389
2517
  elsif ['base-misc-defaults.xml'].include? hpxml_file
2390
2518
  hpxml.header.timestep = nil
2391
2519
  elsif ['base-schedules-stochastic.xml'].include? hpxml_file
2392
2520
  hpxml.header.schedules_path = 'BuildResidentialHPXML/tests/schedules/stochastic.csv'
2393
2521
  elsif ['base-schedules-user-specified.xml'].include? hpxml_file
2394
2522
  hpxml.header.schedules_path = 'BuildResidentialHPXML/tests/schedules/user-specified.csv'
2523
+ elsif ['invalid_files/invalid-input-parameters.xml'].include? hpxml_file
2524
+ hpxml.header.transaction = 'modify'
2395
2525
  end
2396
2526
  end
2397
2527
 
@@ -2403,6 +2533,8 @@ def set_hpxml_site(hpxml_file, hpxml)
2403
2533
  hpxml.site.shelter_coefficient = 0.8
2404
2534
  elsif ['base-misc-defaults.xml'].include? hpxml_file
2405
2535
  hpxml.site.site_type = nil
2536
+ elsif ['invalid_files/invalid-input-parameters.xml'].include? hpxml_file
2537
+ hpxml.site.site_type = 'mountain'
2406
2538
  end
2407
2539
  end
2408
2540
 
@@ -2440,6 +2572,15 @@ def set_hpxml_building_construction(hpxml_file, hpxml)
2440
2572
  hpxml.building_construction.number_of_bathrooms = 2
2441
2573
  hpxml.building_construction.conditioned_floor_area = 2700
2442
2574
  hpxml.building_construction.conditioned_building_volume = 2700 * 8
2575
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
2576
+ hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeApartment
2577
+ hpxml.building_construction.number_of_conditioned_floors = 1
2578
+ hpxml.building_construction.conditioned_floor_area = 900
2579
+ hpxml.building_construction.conditioned_building_volume = 900 * 8
2580
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
2581
+ hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeSFA
2582
+ hpxml.building_construction.conditioned_floor_area = 1800
2583
+ hpxml.building_construction.conditioned_building_volume = 1800 * 8
2443
2584
  elsif ['base-enclosure-beds-1.xml'].include? hpxml_file
2444
2585
  hpxml.building_construction.number_of_bedrooms = 1
2445
2586
  hpxml.building_construction.number_of_bathrooms = 1
@@ -2479,17 +2620,19 @@ def set_hpxml_building_construction(hpxml_file, hpxml)
2479
2620
  hpxml.building_construction.conditioned_building_volume -= 400 * 2 * 8
2480
2621
  elsif ['base-misc-defaults.xml'].include? hpxml_file
2481
2622
  hpxml.building_construction.conditioned_building_volume = nil
2482
- hpxml.building_construction.average_ceiling_height = 8
2623
+ hpxml.building_construction.average_ceiling_height = nil
2483
2624
  hpxml.building_construction.number_of_bathrooms = nil
2484
- elsif ['base-enclosure-attached-multifamily.xml',
2485
- 'base-enclosure-other-housing-unit.xml',
2486
- 'base-enclosure-other-heated-space.xml',
2487
- 'base-enclosure-other-non-freezing-space.xml',
2488
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
2489
- hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeApartment
2490
2625
  elsif ['base-foundation-walkout-basement.xml'].include? hpxml_file
2491
2626
  hpxml.building_construction.number_of_conditioned_floors_above_grade += 1
2492
- elsif ['invalid_files/invalid-facility-type.xml'].include? hpxml_file
2627
+ elsif ['base-enclosure-split-level.xml'].include? hpxml_file
2628
+ hpxml.building_construction.number_of_conditioned_floors = 1.5
2629
+ hpxml.building_construction.number_of_conditioned_floors_above_grade = 1.5
2630
+ elsif ['invalid_files/enclosure-floor-area-exceeds-cfa.xml'].include? hpxml_file
2631
+ hpxml.building_construction.conditioned_floor_area /= 5.0
2632
+ elsif ['invalid_files/num-bedrooms-exceeds-limit.xml'].include? hpxml_file
2633
+ hpxml.building_construction.number_of_bedrooms = 40
2634
+ elsif ['invalid_files/invalid-facility-type-equipment.xml',
2635
+ 'invalid_files/invalid-facility-type-surfaces.xml'].include? hpxml_file
2493
2636
  hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeSFD
2494
2637
  end
2495
2638
  end
@@ -2543,6 +2686,8 @@ def set_hpxml_climate_and_risk_zones(hpxml_file, hpxml)
2543
2686
  hpxml.climate_and_risk_zones.weather_station_epw_filepath = 'US_CO_Boulder_AMY_2012.epw'
2544
2687
  elsif ['invalid_files/invalid-epw-filepath.xml'].include? hpxml_file
2545
2688
  hpxml.climate_and_risk_zones.weather_station_epw_filepath = 'foo.epw'
2689
+ elsif ['invalid_files/invalid-input-parameters.xml'].include? hpxml_file
2690
+ hpxml.climate_and_risk_zones.iecc_year = 2020
2546
2691
  end
2547
2692
  end
2548
2693
 
@@ -2599,6 +2744,8 @@ def set_hpxml_attics(hpxml_file, hpxml)
2599
2744
  hpxml.attics.add(id: 'UnventedAttic',
2600
2745
  attic_type: HPXML::AtticTypeUnvented,
2601
2746
  within_infiltration_volume: false)
2747
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
2748
+ hpxml.attics.clear
2602
2749
  elsif ['base-atticroof-cathedral.xml'].include? hpxml_file
2603
2750
  hpxml.attics.clear
2604
2751
  hpxml.attics.add(id: 'CathedralCeiling',
@@ -2610,11 +2757,6 @@ def set_hpxml_attics(hpxml_file, hpxml)
2610
2757
  hpxml.attics.clear
2611
2758
  hpxml.attics.add(id: 'FlatRoof',
2612
2759
  attic_type: HPXML::AtticTypeFlatRoof)
2613
- elsif ['base-enclosure-other-housing-unit.xml',
2614
- 'base-enclosure-other-heated-space.xml',
2615
- 'base-enclosure-other-non-freezing-space.xml',
2616
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
2617
- hpxml.attics.clear
2618
2760
  elsif ['base-atticroof-vented.xml'].include? hpxml_file
2619
2761
  hpxml.attics.clear
2620
2762
  hpxml.attics.add(id: 'VentedAttic',
@@ -2629,6 +2771,8 @@ def set_hpxml_foundations(hpxml_file, hpxml)
2629
2771
  if ['base.xml'].include? hpxml_file
2630
2772
  hpxml.foundations.add(id: 'ConditionedBasement',
2631
2773
  foundation_type: HPXML::FoundationTypeBasementConditioned)
2774
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
2775
+ hpxml.foundations.clear
2632
2776
  elsif ['base-foundation-vented-crawlspace.xml'].include? hpxml_file
2633
2777
  hpxml.foundations.clear
2634
2778
  hpxml.foundations.add(id: 'VentedCrawlspace',
@@ -2699,6 +2843,10 @@ def set_hpxml_roofs(hpxml_file, hpxml)
2699
2843
  pitch: 6,
2700
2844
  radiant_barrier: false,
2701
2845
  insulation_assembly_r_value: 2.3)
2846
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
2847
+ hpxml.roofs.clear
2848
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
2849
+ hpxml.roofs[0].area = 1006
2702
2850
  elsif ['base-enclosure-rooftypes.xml'].include? hpxml_file
2703
2851
  roof_types = [[HPXML::RoofTypeClayTile, HPXML::ColorLight],
2704
2852
  [HPXML::RoofTypeMetal, HPXML::ColorReflective],
@@ -2755,11 +2903,6 @@ def set_hpxml_roofs(hpxml_file, hpxml)
2755
2903
  hpxml.roofs[0].area += 670
2756
2904
  elsif ['base-atticroof-unvented-insulated-roof.xml'].include? hpxml_file
2757
2905
  hpxml.roofs[0].insulation_assembly_r_value = 25.8
2758
- elsif ['base-enclosure-other-housing-unit.xml',
2759
- 'base-enclosure-other-heated-space.xml',
2760
- 'base-enclosure-other-non-freezing-space.xml',
2761
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
2762
- hpxml.roofs.clear
2763
2906
  elsif ['base-enclosure-split-surfaces.xml'].include? hpxml_file
2764
2907
  for n in 1..hpxml.roofs.size
2765
2908
  hpxml.roofs[n - 1].area /= 9.0
@@ -2781,7 +2924,12 @@ def set_hpxml_roofs(hpxml_file, hpxml)
2781
2924
  roof.roof_type = nil
2782
2925
  roof.solar_absorptance = nil
2783
2926
  roof.roof_color = HPXML::ColorLight
2927
+ roof.emittance = nil
2928
+ roof.radiant_barrier = nil
2784
2929
  end
2930
+ elsif ['invalid_files/invalid-input-parameters.xml'].include? hpxml_file
2931
+ hpxml.roofs[0].radiant_barrier_grade = 4
2932
+ hpxml.roofs[0].azimuth = 365
2785
2933
  end
2786
2934
  end
2787
2935
 
@@ -2838,6 +2986,8 @@ def set_hpxml_rim_joists(hpxml_file, hpxml)
2838
2986
  solar_absorptance: 0.7,
2839
2987
  emittance: 0.92,
2840
2988
  insulation_assembly_r_value: 23.0)
2989
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
2990
+ hpxml.rim_joists.clear
2841
2991
  elsif ['base-enclosure-walltypes.xml'].include? hpxml_file
2842
2992
  siding_types = [[HPXML::SidingTypeAluminum, HPXML::ColorDark],
2843
2993
  [HPXML::SidingTypeBrick, HPXML::ColorReflective],
@@ -2858,9 +3008,6 @@ def set_hpxml_rim_joists(hpxml_file, hpxml)
2858
3008
  elsif ['base-foundation-ambient.xml',
2859
3009
  'base-foundation-slab.xml'].include? hpxml_file
2860
3010
  hpxml.rim_joists.clear
2861
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
2862
- hpxml.rim_joists[0].exterior_adjacent_to = HPXML::LocationOtherNonFreezingSpace
2863
- hpxml.rim_joists[0].siding = nil
2864
3011
  elsif ['base-foundation-unconditioned-basement.xml'].include? hpxml_file
2865
3012
  for i in 0..hpxml.rim_joists.size - 1
2866
3013
  hpxml.rim_joists[i].interior_adjacent_to = HPXML::LocationBasementUnconditioned
@@ -2909,11 +3056,20 @@ def set_hpxml_rim_joists(hpxml_file, hpxml)
2909
3056
  hpxml.rim_joists << hpxml.rim_joists[-1].dup
2910
3057
  hpxml.rim_joists[-1].id = 'TinyRimJoist'
2911
3058
  hpxml.rim_joists[-1].area = 0.05
3059
+ elsif ['invalid_files/invalid-facility-type-surfaces.xml'].include? hpxml_file
3060
+ hpxml.rim_joists.add(id: 'RimJoistOther',
3061
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3062
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3063
+ area: 116,
3064
+ solar_absorptance: 0.7,
3065
+ emittance: 0.92,
3066
+ insulation_assembly_r_value: 23.0)
2912
3067
  elsif ['base-misc-defaults.xml'].include? hpxml_file
2913
3068
  hpxml.rim_joists.each do |rim_joist|
2914
3069
  rim_joist.siding = nil
2915
3070
  rim_joist.solar_absorptance = nil
2916
3071
  rim_joist.color = HPXML::ColorMedium
3072
+ rim_joist.emittance = nil
2917
3073
  end
2918
3074
  end
2919
3075
  hpxml.rim_joists.each do |rim_joist|
@@ -3020,6 +3176,61 @@ def set_hpxml_walls(hpxml_file, hpxml)
3020
3176
  solar_absorptance: 0.7,
3021
3177
  emittance: 0.92,
3022
3178
  insulation_assembly_r_value: 4.0)
3179
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
3180
+ hpxml.walls.clear
3181
+ hpxml.walls.add(id: 'Wall',
3182
+ exterior_adjacent_to: HPXML::LocationOutside,
3183
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3184
+ wall_type: HPXML::WallTypeWoodStud,
3185
+ siding: HPXML::SidingTypeWood,
3186
+ area: 686,
3187
+ solar_absorptance: 0.7,
3188
+ emittance: 0.92,
3189
+ insulation_assembly_r_value: 23.0)
3190
+ hpxml.walls.add(id: 'WallOther',
3191
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3192
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3193
+ wall_type: HPXML::WallTypeWoodStud,
3194
+ area: 294,
3195
+ solar_absorptance: 0.7,
3196
+ emittance: 0.92,
3197
+ insulation_assembly_r_value: 4.0)
3198
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
3199
+ hpxml.walls.clear
3200
+ hpxml.walls.add(id: 'Wall',
3201
+ exterior_adjacent_to: HPXML::LocationOutside,
3202
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3203
+ wall_type: HPXML::WallTypeWoodStud,
3204
+ siding: HPXML::SidingTypeWood,
3205
+ area: 686,
3206
+ solar_absorptance: 0.7,
3207
+ emittance: 0.92,
3208
+ insulation_assembly_r_value: 23.0)
3209
+ hpxml.walls.add(id: 'WallOther',
3210
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3211
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3212
+ wall_type: HPXML::WallTypeWoodStud,
3213
+ area: 294,
3214
+ solar_absorptance: 0.7,
3215
+ emittance: 0.92,
3216
+ insulation_assembly_r_value: 4.0)
3217
+ hpxml.walls.add(id: 'WallAtticGable',
3218
+ exterior_adjacent_to: HPXML::LocationOutside,
3219
+ interior_adjacent_to: HPXML::LocationAtticUnvented,
3220
+ wall_type: HPXML::WallTypeWoodStud,
3221
+ siding: HPXML::SidingTypeWood,
3222
+ area: 169,
3223
+ solar_absorptance: 0.7,
3224
+ emittance: 0.92,
3225
+ insulation_assembly_r_value: 4.0)
3226
+ hpxml.walls.add(id: 'WallAtticOther',
3227
+ exterior_adjacent_to: HPXML::LocationAtticUnvented,
3228
+ interior_adjacent_to: HPXML::LocationAtticUnvented,
3229
+ wall_type: HPXML::WallTypeWoodStud,
3230
+ area: 169,
3231
+ solar_absorptance: 0.7,
3232
+ emittance: 0.92,
3233
+ insulation_assembly_r_value: 4.0)
3023
3234
  elsif ['base-atticroof-flat.xml'].include? hpxml_file
3024
3235
  hpxml.walls.delete_at(1)
3025
3236
  elsif ['base-atticroof-vented.xml'].include? hpxml_file
@@ -3055,7 +3266,8 @@ def set_hpxml_walls(hpxml_file, hpxml)
3055
3266
  solar_absorptance: 0.7,
3056
3267
  emittance: 0.92,
3057
3268
  insulation_assembly_r_value: 4.0)
3058
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
3269
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
3270
+ hpxml.walls[1].delete
3059
3271
  hpxml.walls.add(id: 'WallOtherHeatedSpace',
3060
3272
  exterior_adjacent_to: HPXML::LocationOtherHeatedSpace,
3061
3273
  interior_adjacent_to: HPXML::LocationLivingSpace,
@@ -3088,14 +3300,6 @@ def set_hpxml_walls(hpxml_file, hpxml)
3088
3300
  solar_absorptance: 0.7,
3089
3301
  emittance: 0.92,
3090
3302
  insulation_assembly_r_value: 4.0)
3091
- hpxml.walls.add(id: 'WallAtticLivingWall',
3092
- exterior_adjacent_to: HPXML::LocationAtticUnvented,
3093
- interior_adjacent_to: HPXML::LocationLivingSpace,
3094
- wall_type: HPXML::WallTypeWoodStud,
3095
- area: 50,
3096
- solar_absorptance: 0.7,
3097
- emittance: 0.92,
3098
- insulation_assembly_r_value: 4.0)
3099
3303
  elsif ['base-enclosure-walltypes.xml'].include? hpxml_file
3100
3304
  walls_map = { HPXML::WallTypeCMU => 12,
3101
3305
  HPXML::WallTypeDoubleWoodStud => 28.7,
@@ -3205,32 +3409,18 @@ def set_hpxml_walls(hpxml_file, hpxml)
3205
3409
  insulation_assembly_r_value: 4)
3206
3410
  elsif ['base-atticroof-unvented-insulated-roof.xml'].include? hpxml_file
3207
3411
  hpxml.walls[1].insulation_assembly_r_value = 23
3208
- elsif ['base-enclosure-other-housing-unit.xml',
3209
- 'base-enclosure-other-heated-space.xml',
3210
- 'base-enclosure-other-non-freezing-space.xml',
3211
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
3212
- hpxml.walls.delete_at(1)
3213
- hpxml.walls << hpxml.walls[0].dup
3214
- hpxml.walls[0].area *= 0.35
3215
- hpxml.walls[-1].area *= 0.65
3216
- hpxml.walls[-1].siding = nil
3217
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
3218
- hpxml.walls[-1].id = 'WallOtherHousingUnit'
3219
- hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3220
- hpxml.walls[-1].insulation_assembly_r_value = 4
3221
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
3222
- hpxml.walls[-1].id = 'WallOtherHeatedSpace'
3223
- hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
3224
- hpxml.walls[-1].insulation_assembly_r_value = 23
3225
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
3226
- hpxml.walls[-1].id = 'WallOtherNonFreezingSpace'
3227
- hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherNonFreezingSpace
3228
- hpxml.walls[-1].insulation_assembly_r_value = 23
3229
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
3230
- hpxml.walls[-1].id = 'WallOtherMultifamilyBufferSpace'
3231
- hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherMultifamilyBufferSpace
3232
- hpxml.walls[-1].insulation_assembly_r_value = 23
3233
- end
3412
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
3413
+ hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3414
+ hpxml.walls[-1].insulation_assembly_r_value = 4
3415
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
3416
+ hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
3417
+ hpxml.walls[-1].insulation_assembly_r_value = 23
3418
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
3419
+ hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherMultifamilyBufferSpace
3420
+ hpxml.walls[-1].insulation_assembly_r_value = 23
3421
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
3422
+ hpxml.walls[-1].exterior_adjacent_to = HPXML::LocationOtherNonFreezingSpace
3423
+ hpxml.walls[-1].insulation_assembly_r_value = 23
3234
3424
  elsif ['base-enclosure-split-surfaces.xml'].include? hpxml_file
3235
3425
  for n in 1..hpxml.walls.size
3236
3426
  hpxml.walls[n - 1].area /= 9.0
@@ -3242,27 +3432,26 @@ def set_hpxml_walls(hpxml_file, hpxml)
3242
3432
  hpxml.walls << hpxml.walls[-1].dup
3243
3433
  hpxml.walls[-1].id = 'TinyWall'
3244
3434
  hpxml.walls[-1].area = 0.05
3245
- elsif ['invalid_files/duplicate-id.xml'].include? hpxml_file
3246
- hpxml.walls[-1].id = hpxml.walls[0].id
3247
3435
  elsif ['invalid_files/enclosure-living-missing-exterior-wall.xml'].include? hpxml_file
3248
3436
  hpxml.walls[0].delete
3249
3437
  elsif ['invalid_files/enclosure-garage-missing-exterior-wall.xml'].include? hpxml_file
3250
3438
  hpxml.walls[-2].delete
3439
+ elsif ['invalid_files/invalid-facility-type-surfaces.xml'].include? hpxml_file
3440
+ hpxml.walls.add(id: 'WallOther',
3441
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3442
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3443
+ wall_type: HPXML::WallTypeWoodStud,
3444
+ area: 294,
3445
+ solar_absorptance: 0.7,
3446
+ emittance: 0.92,
3447
+ insulation_assembly_r_value: 4.0)
3251
3448
  elsif ['base-misc-defaults.xml'].include? hpxml_file
3252
3449
  hpxml.walls.each do |wall|
3253
3450
  wall.siding = nil
3254
3451
  wall.solar_absorptance = nil
3255
3452
  wall.color = HPXML::ColorMedium
3453
+ wall.emittance = nil
3256
3454
  end
3257
- elsif ['base-enclosure-common-surfaces.xml'].include? hpxml_file
3258
- hpxml.walls.add(id: 'CommonWallUnventedAttic',
3259
- exterior_adjacent_to: HPXML::LocationAtticUnvented,
3260
- interior_adjacent_to: HPXML::LocationAtticUnvented,
3261
- wall_type: HPXML::WallTypeWoodStud,
3262
- area: 113,
3263
- solar_absorptance: 0.7,
3264
- emittance: 0.92,
3265
- insulation_assembly_r_value: 4)
3266
3455
  end
3267
3456
  hpxml.walls.each do |wall|
3268
3457
  next unless wall.is_interior
@@ -3336,25 +3525,11 @@ def set_hpxml_foundation_walls(hpxml_file, hpxml)
3336
3525
  hpxml.foundation_walls[i].insulation_interior_distance_to_bottom = 7.25
3337
3526
  end
3338
3527
  elsif ['base.xml'].include? hpxml_file
3339
- hpxml. foundation_walls.add(id: 'FoundationWall',
3340
- exterior_adjacent_to: HPXML::LocationGround,
3341
- interior_adjacent_to: HPXML::LocationBasementConditioned,
3342
- height: 8,
3343
- area: 1200,
3344
- thickness: 8,
3345
- depth_below_grade: 7,
3346
- insulation_interior_r_value: 0,
3347
- insulation_interior_distance_to_top: 0,
3348
- insulation_interior_distance_to_bottom: 0,
3349
- insulation_exterior_distance_to_top: 0,
3350
- insulation_exterior_distance_to_bottom: 8,
3351
- insulation_exterior_r_value: 8.9)
3352
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
3353
- hpxml.foundation_walls.add(id: 'FoundationWallOtherNonFreezingSpace',
3354
- exterior_adjacent_to: HPXML::LocationOtherNonFreezingSpace,
3528
+ hpxml.foundation_walls.add(id: 'FoundationWall',
3529
+ exterior_adjacent_to: HPXML::LocationGround,
3355
3530
  interior_adjacent_to: HPXML::LocationBasementConditioned,
3356
3531
  height: 8,
3357
- area: 480,
3532
+ area: 1200,
3358
3533
  thickness: 8,
3359
3534
  depth_below_grade: 7,
3360
3535
  insulation_interior_r_value: 0,
@@ -3363,32 +3538,36 @@ def set_hpxml_foundation_walls(hpxml_file, hpxml)
3363
3538
  insulation_exterior_distance_to_top: 0,
3364
3539
  insulation_exterior_distance_to_bottom: 8,
3365
3540
  insulation_exterior_r_value: 8.9)
3366
- hpxml.foundation_walls.add(id: 'FoundationWallOtherMultifamilyBufferSpace',
3367
- exterior_adjacent_to: HPXML::LocationOtherMultifamilyBufferSpace,
3541
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
3542
+ hpxml.foundation_walls.clear
3543
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
3544
+ hpxml.foundation_walls.clear
3545
+ hpxml.foundation_walls.add(id: 'FoundationWall',
3546
+ exterior_adjacent_to: HPXML::LocationGround,
3368
3547
  interior_adjacent_to: HPXML::LocationBasementConditioned,
3369
- height: 4,
3370
- area: 120,
3548
+ height: 8,
3549
+ area: 686,
3371
3550
  thickness: 8,
3372
- depth_below_grade: 3,
3551
+ depth_below_grade: 7,
3373
3552
  insulation_interior_r_value: 0,
3374
3553
  insulation_interior_distance_to_top: 0,
3375
3554
  insulation_interior_distance_to_bottom: 0,
3376
3555
  insulation_exterior_distance_to_top: 0,
3377
- insulation_exterior_distance_to_bottom: 4,
3556
+ insulation_exterior_distance_to_bottom: 8,
3378
3557
  insulation_exterior_r_value: 8.9)
3379
- hpxml.foundation_walls.add(id: 'FoundationWallOtherHeatedSpace',
3380
- exterior_adjacent_to: HPXML::LocationOtherHeatedSpace,
3558
+ hpxml.foundation_walls.add(id: 'FoundationWallOther',
3559
+ exterior_adjacent_to: HPXML::LocationBasementConditioned,
3381
3560
  interior_adjacent_to: HPXML::LocationBasementConditioned,
3382
- height: 2,
3383
- area: 60,
3561
+ height: 8,
3562
+ area: 294,
3384
3563
  thickness: 8,
3385
- depth_below_grade: 1,
3564
+ depth_below_grade: 7,
3386
3565
  insulation_interior_r_value: 0,
3387
3566
  insulation_interior_distance_to_top: 0,
3388
3567
  insulation_interior_distance_to_bottom: 0,
3389
3568
  insulation_exterior_distance_to_top: 0,
3390
- insulation_exterior_distance_to_bottom: 2,
3391
- insulation_exterior_r_value: 8.9)
3569
+ insulation_exterior_distance_to_bottom: 0,
3570
+ insulation_exterior_r_value: 0)
3392
3571
  elsif ['base-foundation-conditioned-basement-wall-interior-insulation.xml'].include? hpxml_file
3393
3572
  hpxml.foundation_walls[0].insulation_interior_distance_to_top = 0
3394
3573
  hpxml.foundation_walls[0].insulation_interior_distance_to_bottom = 8
@@ -3575,28 +3754,18 @@ def set_hpxml_foundation_walls(hpxml_file, hpxml)
3575
3754
  hpxml.foundation_walls[-1].area = 0.05
3576
3755
  elsif ['base-enclosure-2stories-garage.xml'].include? hpxml_file
3577
3756
  hpxml.foundation_walls[-1].area = 880
3578
- elsif ['base-enclosure-common-surfaces.xml'].include? hpxml_file
3579
- hpxml.foundation_walls[1].area = 240
3580
- hpxml.foundation_walls.add(id: 'FoundationWallCrawlspace',
3581
- exterior_adjacent_to: HPXML::LocationGround,
3582
- interior_adjacent_to: HPXML::LocationCrawlspaceVented,
3583
- height: 4,
3584
- area: 240,
3757
+ elsif ['base-misc-defaults.xml'].include? hpxml_file
3758
+ hpxml.foundation_walls.each do |fwall|
3759
+ fwall.thickness = nil
3760
+ end
3761
+ elsif ['invalid_files/invalid-facility-type-surfaces.xml'].include? hpxml_file
3762
+ hpxml.foundation_walls.add(id: 'FoundationWallOther',
3763
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3764
+ interior_adjacent_to: HPXML::LocationBasementConditioned,
3765
+ height: 8,
3766
+ area: 294,
3585
3767
  thickness: 8,
3586
- depth_below_grade: 3,
3587
- insulation_interior_r_value: 0,
3588
- insulation_interior_distance_to_top: 0,
3589
- insulation_interior_distance_to_bottom: 0,
3590
- insulation_exterior_distance_to_top: 0,
3591
- insulation_exterior_distance_to_bottom: 0,
3592
- insulation_exterior_r_value: 0)
3593
- hpxml.foundation_walls.add(id: 'CommonFoundationWall',
3594
- exterior_adjacent_to: HPXML::LocationCrawlspaceVented,
3595
- interior_adjacent_to: HPXML::LocationCrawlspaceVented,
3596
- height: 4,
3597
- area: 240,
3598
- thickness: 5.5,
3599
- depth_below_grade: 3,
3768
+ depth_below_grade: 7,
3600
3769
  insulation_interior_r_value: 0,
3601
3770
  insulation_interior_distance_to_top: 0,
3602
3771
  insulation_interior_distance_to_bottom: 0,
@@ -3638,6 +3807,40 @@ def set_hpxml_frame_floors(hpxml_file, hpxml)
3638
3807
  interior_adjacent_to: HPXML::LocationLivingSpace,
3639
3808
  area: 1350,
3640
3809
  insulation_assembly_r_value: 39.3)
3810
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
3811
+ hpxml.frame_floors.clear
3812
+ hpxml.frame_floors.add(id: 'FloorOther',
3813
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3814
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3815
+ area: 900,
3816
+ insulation_assembly_r_value: 2.1,
3817
+ other_space_above_or_below: HPXML::FrameFloorOtherSpaceBelow)
3818
+ hpxml.frame_floors.add(id: 'CeilingOther',
3819
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3820
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3821
+ area: 900,
3822
+ insulation_assembly_r_value: 2.1,
3823
+ other_space_above_or_below: HPXML::FrameFloorOtherSpaceAbove)
3824
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
3825
+ hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3826
+ hpxml.frame_floors[1].exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3827
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
3828
+ hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
3829
+ hpxml.frame_floors[0].insulation_assembly_r_value = 18.7
3830
+ hpxml.frame_floors[1].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
3831
+ hpxml.frame_floors[1].insulation_assembly_r_value = 18.7
3832
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
3833
+ hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherNonFreezingSpace
3834
+ hpxml.frame_floors[0].insulation_assembly_r_value = 18.7
3835
+ hpxml.frame_floors[1].exterior_adjacent_to = HPXML::LocationOtherNonFreezingSpace
3836
+ hpxml.frame_floors[1].insulation_assembly_r_value = 18.7
3837
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
3838
+ hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherMultifamilyBufferSpace
3839
+ hpxml.frame_floors[0].insulation_assembly_r_value = 18.7
3840
+ hpxml.frame_floors[1].exterior_adjacent_to = HPXML::LocationOtherMultifamilyBufferSpace
3841
+ hpxml.frame_floors[1].insulation_assembly_r_value = 18.7
3842
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
3843
+ hpxml.frame_floors[0].area = 900
3641
3844
  elsif ['base-atticroof-flat.xml',
3642
3845
  'base-atticroof-cathedral.xml'].include? hpxml_file
3643
3846
  hpxml.frame_floors.delete_at(0)
@@ -3692,39 +3895,12 @@ def set_hpxml_frame_floors(hpxml_file, hpxml)
3692
3895
  insulation_assembly_r_value: 39.3)
3693
3896
  elsif ['base-atticroof-unvented-insulated-roof.xml'].include? hpxml_file
3694
3897
  hpxml.frame_floors[0].insulation_assembly_r_value = 2.1
3695
- elsif ['base-enclosure-other-housing-unit.xml',
3696
- 'base-enclosure-other-heated-space.xml',
3697
- 'base-enclosure-other-non-freezing-space.xml',
3698
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
3699
- hpxml.frame_floors.clear
3700
- hpxml.frame_floors.add(interior_adjacent_to: HPXML::LocationLivingSpace,
3701
- area: 1350,
3702
- other_space_above_or_below: HPXML::FrameFloorOtherSpaceAbove)
3703
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
3704
- hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3705
- hpxml.frame_floors[0].id = 'FloorBelowOtherHousingUnit'
3706
- hpxml.frame_floors[0].insulation_assembly_r_value = 2.1
3707
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
3708
- hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
3709
- hpxml.frame_floors[0].id = 'FloorBelowOtherHeatedSpace'
3710
- hpxml.frame_floors[0].insulation_assembly_r_value = 18.7
3711
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
3712
- hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherNonFreezingSpace
3713
- hpxml.frame_floors[0].id = 'FloorBelowOtherNonFreezingSpace'
3714
- hpxml.frame_floors[0].insulation_assembly_r_value = 18.7
3715
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
3716
- hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherMultifamilyBufferSpace
3717
- hpxml.frame_floors[0].id = 'FloorBelowOtherMultifamilyBufferSpace'
3718
- hpxml.frame_floors[0].insulation_assembly_r_value = 18.7
3719
- end
3720
- hpxml.frame_floors << hpxml.frame_floors[0].dup
3721
- hpxml.frame_floors[1].id = hpxml.frame_floors[0].id.gsub('Below', 'Above')
3722
- hpxml.frame_floors[1].other_space_above_or_below = HPXML::FrameFloorOtherSpaceBelow
3723
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
3898
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
3899
+ hpxml.frame_floors[0].delete
3724
3900
  hpxml.frame_floors.add(id: 'FloorAboveNonFreezingSpace',
3725
3901
  exterior_adjacent_to: HPXML::LocationOtherNonFreezingSpace,
3726
3902
  interior_adjacent_to: HPXML::LocationLivingSpace,
3727
- area: 1000,
3903
+ area: 550,
3728
3904
  insulation_assembly_r_value: 18.7,
3729
3905
  other_space_above_or_below: HPXML::FrameFloorOtherSpaceBelow)
3730
3906
  hpxml.frame_floors.add(id: 'FloorAboveMultifamilyBuffer',
@@ -3739,18 +3915,6 @@ def set_hpxml_frame_floors(hpxml_file, hpxml)
3739
3915
  area: 150,
3740
3916
  insulation_assembly_r_value: 2.1,
3741
3917
  other_space_above_or_below: HPXML::FrameFloorOtherSpaceBelow)
3742
- elsif ['base-enclosure-common-surfaces.xml'].include? hpxml_file
3743
- hpxml.frame_floors[1].area = 650
3744
- hpxml.frame_floors.add(id: 'FloorAboveVentedCrawlspace',
3745
- exterior_adjacent_to: HPXML::LocationCrawlspaceVented,
3746
- interior_adjacent_to: HPXML::LocationLivingSpace,
3747
- area: 350,
3748
- insulation_assembly_r_value: 18.7)
3749
- hpxml.frame_floors.add(id: 'CommonFrameFloorVentedCrawlspace',
3750
- exterior_adjacent_to: HPXML::LocationCrawlspaceVented,
3751
- interior_adjacent_to: HPXML::LocationCrawlspaceVented,
3752
- area: 350,
3753
- insulation_assembly_r_value: 3.0)
3754
3918
  elsif ['base-enclosure-split-surfaces.xml'].include? hpxml_file
3755
3919
  for n in 1..hpxml.frame_floors.size
3756
3920
  hpxml.frame_floors[n - 1].area /= 9.0
@@ -3776,6 +3940,19 @@ def set_hpxml_frame_floors(hpxml_file, hpxml)
3776
3940
  elsif ['invalid_files/multifamily-reference-surface.xml'].include? hpxml_file
3777
3941
  hpxml.frame_floors[0].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
3778
3942
  hpxml.frame_floors[0].other_space_above_or_below = HPXML::FrameFloorOtherSpaceAbove
3943
+ elsif ['invalid_files/invalid-facility-type-surfaces.xml'].include? hpxml_file
3944
+ hpxml.frame_floors.add(id: 'FloorOther',
3945
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3946
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3947
+ area: 900,
3948
+ insulation_assembly_r_value: 2.1,
3949
+ other_space_above_or_below: HPXML::FrameFloorOtherSpaceBelow)
3950
+ hpxml.frame_floors.add(id: 'CeilingOther',
3951
+ exterior_adjacent_to: HPXML::LocationOtherHousingUnit,
3952
+ interior_adjacent_to: HPXML::LocationLivingSpace,
3953
+ area: 900,
3954
+ insulation_assembly_r_value: 2.1,
3955
+ other_space_above_or_below: HPXML::FrameFloorOtherSpaceAbove)
3779
3956
  end
3780
3957
  end
3781
3958
 
@@ -3822,6 +3999,11 @@ def set_hpxml_slabs(hpxml_file, hpxml)
3822
3999
  under_slab_insulation_r_value: 0,
3823
4000
  carpet_fraction: 0,
3824
4001
  carpet_r_value: 0)
4002
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
4003
+ hpxml.slabs.clear
4004
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
4005
+ hpxml.slabs[0].area = 900
4006
+ hpxml.slabs[0].exposed_perimeter = 86
3825
4007
  elsif ['base-foundation-unconditioned-basement.xml'].include? hpxml_file
3826
4008
  hpxml.slabs[0].interior_adjacent_to = HPXML::LocationBasementUnconditioned
3827
4009
  elsif ['base-foundation-conditioned-basement-slab-insulation.xml'].include? hpxml_file
@@ -3936,20 +4118,12 @@ def set_hpxml_slabs(hpxml_file, hpxml)
3936
4118
  hpxml.slabs << hpxml.slabs[-1].dup
3937
4119
  hpxml.slabs[-1].id = 'TinySlab'
3938
4120
  hpxml.slabs[-1].area = 0.05
3939
- elsif ['base-enclosure-common-surfaces.xml'].include? hpxml_file
3940
- hpxml.slabs[0].area = 1000
3941
- hpxml.slabs[0].exposed_perimeter = 111
3942
- hpxml.slabs.add(id: 'SlabUnderCrawlspace',
3943
- interior_adjacent_to: HPXML::LocationCrawlspaceVented,
3944
- area: 350,
3945
- thickness: 0,
3946
- exposed_perimeter: 39,
3947
- perimeter_insulation_depth: 0,
3948
- under_slab_insulation_width: 0,
3949
- perimeter_insulation_r_value: 0,
3950
- under_slab_insulation_r_value: 0,
3951
- carpet_fraction: 0,
3952
- carpet_r_value: 0)
4121
+ elsif ['base-misc-defaults.xml'].include? hpxml_file
4122
+ hpxml.slabs.each do |slab|
4123
+ slab.thickness = nil
4124
+ slab.carpet_fraction = nil
4125
+ slab.carpet_fraction = nil
4126
+ end
3953
4127
  elsif ['invalid_files/mismatched-slab-and-foundation-wall.xml'].include? hpxml_file
3954
4128
  hpxml.slabs[0].interior_adjacent_to = HPXML::LocationBasementUnconditioned
3955
4129
  hpxml.slabs[0].depth_below_grade = 7.0
@@ -4062,6 +4236,64 @@ def set_hpxml_windows(hpxml_file, hpxml)
4062
4236
  interior_shading_factor_summer: 0.7,
4063
4237
  interior_shading_factor_winter: 0.85,
4064
4238
  wall_idref: 'Wall')
4239
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
4240
+ hpxml.windows.clear
4241
+ hpxml.windows.add(id: 'WindowNorth',
4242
+ area: 35.0,
4243
+ azimuth: 0,
4244
+ ufactor: 0.33,
4245
+ shgc: 0.45,
4246
+ fraction_operable: 0.67,
4247
+ interior_shading_factor_summer: 0.7,
4248
+ interior_shading_factor_winter: 0.85,
4249
+ wall_idref: 'Wall')
4250
+ hpxml.windows.add(id: 'WindowSouth',
4251
+ area: 35.0,
4252
+ azimuth: 180,
4253
+ ufactor: 0.33,
4254
+ shgc: 0.45,
4255
+ fraction_operable: 0.67,
4256
+ interior_shading_factor_summer: 0.7,
4257
+ interior_shading_factor_winter: 0.85,
4258
+ wall_idref: 'Wall')
4259
+ hpxml.windows.add(id: 'WindowWest',
4260
+ area: 53.0,
4261
+ azimuth: 270,
4262
+ ufactor: 0.33,
4263
+ shgc: 0.45,
4264
+ fraction_operable: 0.67,
4265
+ interior_shading_factor_summer: 0.7,
4266
+ interior_shading_factor_winter: 0.85,
4267
+ wall_idref: 'Wall')
4268
+ elsif ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
4269
+ hpxml.windows.clear
4270
+ hpxml.windows.add(id: 'WindowNorth',
4271
+ area: 35.4,
4272
+ azimuth: 0,
4273
+ ufactor: 0.33,
4274
+ shgc: 0.45,
4275
+ fraction_operable: 0.67,
4276
+ interior_shading_factor_summer: 0.7,
4277
+ interior_shading_factor_winter: 0.85,
4278
+ wall_idref: 'Wall')
4279
+ hpxml.windows.add(id: 'WindowSouth',
4280
+ area: 35.4,
4281
+ azimuth: 180,
4282
+ ufactor: 0.33,
4283
+ shgc: 0.45,
4284
+ fraction_operable: 0.67,
4285
+ interior_shading_factor_summer: 0.7,
4286
+ interior_shading_factor_winter: 0.85,
4287
+ wall_idref: 'Wall')
4288
+ hpxml.windows.add(id: 'WindowWest',
4289
+ area: 53.0,
4290
+ azimuth: 270,
4291
+ ufactor: 0.33,
4292
+ shgc: 0.45,
4293
+ fraction_operable: 0.67,
4294
+ interior_shading_factor_summer: 0.7,
4295
+ interior_shading_factor_winter: 0.85,
4296
+ wall_idref: 'Wall')
4065
4297
  elsif ['base-enclosure-overhangs.xml'].include? hpxml_file
4066
4298
  hpxml.windows[0].overhangs_depth = 2.5
4067
4299
  hpxml.windows[0].overhangs_distance_to_top_of_window = 0
@@ -4075,13 +4307,10 @@ def set_hpxml_windows(hpxml_file, hpxml)
4075
4307
  elsif ['base-enclosure-windows-interior-shading.xml'].include? hpxml_file
4076
4308
  hpxml.windows[1].interior_shading_factor_summer = 0.01
4077
4309
  hpxml.windows[1].interior_shading_factor_winter = 0.99
4078
- hpxml.windows[2].interior_shading_factor_summer = 0.0
4310
+ hpxml.windows[2].interior_shading_factor_summer = 0.5
4079
4311
  hpxml.windows[2].interior_shading_factor_winter = 0.5
4080
- hpxml.windows[3].interior_shading_factor_summer = 1.0
4312
+ hpxml.windows[3].interior_shading_factor_summer = 0.0
4081
4313
  hpxml.windows[3].interior_shading_factor_winter = 1.0
4082
- elsif ['invalid_files/invalid-window-interior-shading.xml'].include? hpxml_file
4083
- hpxml.windows[0].interior_shading_factor_summer = 0.85
4084
- hpxml.windows[0].interior_shading_factor_winter = 0.7
4085
4314
  elsif ['base-enclosure-windows-none.xml'].include? hpxml_file
4086
4315
  hpxml.windows.clear
4087
4316
  elsif ['invalid_files/net-area-negative-wall.xml'].include? hpxml_file
@@ -4165,10 +4394,10 @@ def set_hpxml_windows(hpxml_file, hpxml)
4165
4394
  shgc: 0.45,
4166
4395
  fraction_operable: 0.0,
4167
4396
  wall_idref: 'FoundationWall')
4168
- elsif ['base-enclosure-other-housing-unit.xml',
4169
- 'base-enclosure-other-heated-space.xml',
4170
- 'base-enclosure-other-non-freezing-space.xml',
4171
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
4397
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml',
4398
+ 'base-bldgtype-multifamily-adjacent-to-other-heated-space.xml',
4399
+ 'base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml',
4400
+ 'base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
4172
4401
  hpxml.windows.each do |window|
4173
4402
  window.area *= 0.35
4174
4403
  end
@@ -4237,14 +4466,16 @@ def set_hpxml_windows(hpxml_file, hpxml)
4237
4466
  window.interior_shading_factor_winter = nil
4238
4467
  window.fraction_operable = nil
4239
4468
  end
4240
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
4241
- hpxml.windows.add(id: 'InteriorWindow',
4469
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
4470
+ hpxml.windows.add(id: 'WindowOtherMultifamilyBufferSpace',
4242
4471
  area: 50,
4243
4472
  azimuth: 270,
4244
4473
  ufactor: 0.33,
4245
4474
  shgc: 0.45,
4246
4475
  fraction_operable: 0.67,
4247
4476
  wall_idref: 'WallOtherMultifamilyBufferSpace')
4477
+ elsif ['invalid_files/duplicate-id.xml'].include? hpxml_file
4478
+ hpxml.windows[-1].id = hpxml.windows[0].id
4248
4479
  end
4249
4480
  end
4250
4481
 
@@ -4309,6 +4540,13 @@ def set_hpxml_doors(hpxml_file, hpxml)
4309
4540
  area: 40,
4310
4541
  azimuth: 180,
4311
4542
  r_value: 4.4)
4543
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
4544
+ hpxml.doors.clear
4545
+ hpxml.doors.add(id: 'Door',
4546
+ wall_idref: 'Wall',
4547
+ area: 20,
4548
+ azimuth: 180,
4549
+ r_value: 4.4)
4312
4550
  elsif ['base-enclosure-garage.xml',
4313
4551
  'base-enclosure-2stories-garage.xml'].include? hpxml_file
4314
4552
  hpxml.doors.add(id: 'GarageDoorSouth',
@@ -4316,46 +4554,26 @@ def set_hpxml_doors(hpxml_file, hpxml)
4316
4554
  area: 70,
4317
4555
  azimuth: 180,
4318
4556
  r_value: 4.4)
4319
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
4320
- hpxml.doors.add(id: 'DoorOnWallOtherHeatedSpace',
4557
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
4558
+ hpxml.doors.add(id: 'DoorOtherHeatedSpace',
4321
4559
  wall_idref: 'WallOtherHeatedSpace',
4322
- area: 40,
4560
+ area: 20,
4323
4561
  azimuth: 0,
4324
4562
  r_value: 4.4)
4325
- hpxml.doors.add(id: 'DoorOnFoundationWallOtherNonFreezingSpace',
4326
- wall_idref: 'FoundationWallOtherNonFreezingSpace',
4327
- area: 40,
4328
- azimuth: 0,
4329
- r_value: 4.4)
4330
- hpxml.doors.add(id: 'DoorOnWallOtherHousingUnit',
4563
+ hpxml.doors.add(id: 'DoorOtherHousingUnit',
4331
4564
  wall_idref: 'WallOtherHousingUnit',
4332
- area: 40,
4565
+ area: 20,
4333
4566
  azimuth: 0,
4334
4567
  r_value: 4.4)
4335
- hpxml.doors.add(id: 'DoorOnWallAtticLivingWall',
4336
- wall_idref: 'WallAtticLivingWall',
4337
- area: 10,
4568
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml',
4569
+ 'base-bldgtype-multifamily-adjacent-to-other-heated-space.xml',
4570
+ 'base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml',
4571
+ 'base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
4572
+ hpxml.doors.add(id: 'DoorOther',
4573
+ wall_idref: 'WallOther',
4574
+ area: 20,
4338
4575
  azimuth: 0,
4339
4576
  r_value: 4.4)
4340
- elsif ['base-enclosure-other-housing-unit.xml',
4341
- 'base-enclosure-other-heated-space.xml',
4342
- 'base-enclosure-other-non-freezing-space.xml',
4343
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
4344
- hpxml.doors.add(id: 'DoorOnWallOtherHousingUnit',
4345
- wall_idref: 'WallOtherHousingUnit',
4346
- area: 40,
4347
- azimuth: 0,
4348
- r_value: 4.4)
4349
- if ['base-enclosure-other-heated-space.xml'].include? hpxml_file
4350
- hpxml.doors[-1].id = 'DoorOnWallOtherHeatedSpace'
4351
- hpxml.doors[-1].wall_idref = 'WallOtherHeatedSpace'
4352
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
4353
- hpxml.doors[-1].id = 'DoorOnWallOtherNonFreezingSpace'
4354
- hpxml.doors[-1].wall_idref = 'WallOtherNonFreezingSpace'
4355
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
4356
- hpxml.doors[-1].id = 'DoorOnWallOtherMultifamilyBufferSpace'
4357
- hpxml.doors[-1].wall_idref = 'WallOtherMultifamilyBufferSpace'
4358
- end
4359
4577
  elsif ['invalid_files/unattached-door.xml'].include? hpxml_file
4360
4578
  hpxml.doors[0].wall_idref = 'foobar'
4361
4579
  elsif ['base-enclosure-split-surfaces.xml'].include? hpxml_file
@@ -4409,10 +4627,12 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4409
4627
  'base-hvac-ideal-air.xml',
4410
4628
  'base-hvac-none.xml',
4411
4629
  'base-hvac-room-ac-only.xml',
4412
- 'base-hvac-shared-chiller-only-baseboard.xml',
4413
- 'base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml',
4630
+ 'base-bldgtype-multifamily-shared-chiller-only-baseboard.xml',
4631
+ 'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml',
4414
4632
  'invalid_files/orphaned-hvac-distribution.xml'].include? hpxml_file
4415
4633
  hpxml.heating_systems.clear
4634
+ elsif ['base-hvac-furnace-gas-only.xml'].include? hpxml_file
4635
+ hpxml.heating_systems[0].fan_watts_per_cfm = 0.45
4416
4636
  elsif ['base-hvac-boiler-elec-only.xml'].include? hpxml_file
4417
4637
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypeBoiler
4418
4638
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeElectricity
@@ -4442,12 +4662,12 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4442
4662
  elsif ['base-hvac-furnace-elec-only.xml'].include? hpxml_file
4443
4663
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeElectricity
4444
4664
  hpxml.heating_systems[0].heating_efficiency_afue = 1
4445
- elsif ['base-hvac-furnace-gas-only.xml'].include? hpxml_file
4446
- hpxml.heating_systems[0].electric_auxiliary_energy = 700
4447
4665
  elsif ['base-hvac-furnace-oil-only.xml'].include? hpxml_file
4448
4666
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeOil
4449
4667
  elsif ['base-hvac-furnace-propane-only.xml'].include? hpxml_file
4450
4668
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypePropane
4669
+ elsif ['base-hvac-furnace-coal-only.xml'].include? hpxml_file
4670
+ hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeCoal
4451
4671
  elsif ['base-hvac-furnace-wood-only.xml'].include? hpxml_file
4452
4672
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeWoodCord
4453
4673
  elsif ['base-hvac-multiple.xml'].include? hpxml_file
@@ -4465,8 +4685,7 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4465
4685
  heating_system_fuel: HPXML::FuelTypeNaturalGas,
4466
4686
  heating_capacity: 6400,
4467
4687
  heating_efficiency_afue: 0.92,
4468
- fraction_heat_load_served: 0.1,
4469
- electric_auxiliary_energy: 700)
4688
+ fraction_heat_load_served: 0.1)
4470
4689
  hpxml.heating_systems.add(id: 'HeatingSystem3',
4471
4690
  distribution_system_idref: 'HVACDistribution3',
4472
4691
  heating_system_type: HPXML::HVACTypeBoiler,
@@ -4494,14 +4713,14 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4494
4713
  heating_capacity: 6400,
4495
4714
  heating_efficiency_percent: 0.8,
4496
4715
  fraction_heat_load_served: 0.1,
4497
- electric_auxiliary_energy: 200)
4716
+ fan_watts: 40.0)
4498
4717
  hpxml.heating_systems.add(id: 'HeatingSystem7',
4499
4718
  heating_system_type: HPXML::HVACTypeWallFurnace,
4500
4719
  heating_system_fuel: HPXML::FuelTypePropane,
4501
4720
  heating_capacity: 6400,
4502
4721
  heating_efficiency_afue: 0.8,
4503
4722
  fraction_heat_load_served: 0.1,
4504
- electric_auxiliary_energy: 200)
4723
+ fan_watts: 0.0)
4505
4724
  elsif ['base-hvac-multiple2.xml'].include? hpxml_file
4506
4725
  hpxml.heating_systems.clear
4507
4726
  hpxml.heating_systems.add(id: 'HeatingSystem',
@@ -4517,8 +4736,7 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4517
4736
  heating_system_fuel: HPXML::FuelTypeElectricity,
4518
4737
  heating_capacity: 6400,
4519
4738
  heating_efficiency_afue: 0.92,
4520
- fraction_heat_load_served: 0.2,
4521
- electric_auxiliary_energy: 700)
4739
+ fraction_heat_load_served: 0.2)
4522
4740
  hpxml.heating_systems.add(id: 'HeatingSystem3',
4523
4741
  distribution_system_idref: 'HVACDistribution3',
4524
4742
  heating_system_type: HPXML::HVACTypeBoiler,
@@ -4533,7 +4751,7 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4533
4751
  heating_efficiency_percent: 1,
4534
4752
  fraction_heat_load_served: 0.1)
4535
4753
  elsif ['base-mechvent-multiple.xml',
4536
- 'base-mechvent-shared-multiple.xml'].include? hpxml_file
4754
+ 'base-bldgtype-multifamily-shared-mechvent-multiple.xml'].include? hpxml_file
4537
4755
  hpxml.heating_systems[0].heating_capacity /= 2.0
4538
4756
  hpxml.heating_systems[0].fraction_heat_load_served /= 2.0
4539
4757
  hpxml.heating_systems << hpxml.heating_systems[0].dup
@@ -4547,34 +4765,34 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4547
4765
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeWoodCord
4548
4766
  hpxml.heating_systems[0].heating_efficiency_afue = nil
4549
4767
  hpxml.heating_systems[0].heating_efficiency_percent = 0.8
4550
- hpxml.heating_systems[0].electric_auxiliary_energy = 100.0
4768
+ hpxml.heating_systems[0].fan_watts = 0.0
4551
4769
  elsif ['base-hvac-floor-furnace-propane-only.xml'].include? hpxml_file
4552
4770
  hpxml.heating_systems[0].distribution_system_idref = nil
4553
4771
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypeFloorFurnace
4554
4772
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypePropane
4555
4773
  hpxml.heating_systems[0].heating_efficiency_afue = 0.8
4556
- hpxml.heating_systems[0].electric_auxiliary_energy = 200
4774
+ hpxml.heating_systems[0].fan_watts = 0.0
4557
4775
  elsif ['base-hvac-portable-heater-gas-only.xml'].include? hpxml_file
4558
4776
  hpxml.heating_systems[0].distribution_system_idref = nil
4559
4777
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypePortableHeater
4560
4778
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeNaturalGas
4561
4779
  hpxml.heating_systems[0].heating_efficiency_afue = nil
4562
4780
  hpxml.heating_systems[0].heating_efficiency_percent = 1.0
4563
- hpxml.heating_systems[0].electric_auxiliary_energy = 100.0
4781
+ hpxml.heating_systems[0].fan_watts = 0.0
4564
4782
  elsif ['base-hvac-fixed-heater-gas-only.xml'].include? hpxml_file
4565
4783
  hpxml.heating_systems[0].distribution_system_idref = nil
4566
4784
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypeFixedHeater
4567
4785
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeNaturalGas
4568
4786
  hpxml.heating_systems[0].heating_efficiency_afue = nil
4569
4787
  hpxml.heating_systems[0].heating_efficiency_percent = 1.0
4570
- hpxml.heating_systems[0].electric_auxiliary_energy = 100.0
4788
+ hpxml.heating_systems[0].fan_watts = 0.0
4571
4789
  elsif ['base-hvac-stove-oil-only.xml',
4572
4790
  'base-hvac-stove-wood-pellets-only.xml'].include? hpxml_file
4573
4791
  hpxml.heating_systems[0].distribution_system_idref = nil
4574
4792
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypeStove
4575
4793
  hpxml.heating_systems[0].heating_efficiency_afue = nil
4576
4794
  hpxml.heating_systems[0].heating_efficiency_percent = 0.8
4577
- hpxml.heating_systems[0].electric_auxiliary_energy = 200
4795
+ hpxml.heating_systems[0].fan_watts = 40.0
4578
4796
  if hpxml_file == 'base-hvac-stove-oil-only.xml'
4579
4797
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeOil
4580
4798
  elsif hpxml_file == 'base-hvac-stove-wood-pellets-only.xml'
@@ -4585,7 +4803,7 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4585
4803
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypeWallFurnace
4586
4804
  hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeElectricity
4587
4805
  hpxml.heating_systems[0].heating_efficiency_afue = 1.0
4588
- hpxml.heating_systems[0].electric_auxiliary_energy = 200
4806
+ hpxml.heating_systems[0].fan_watts = 0.0
4589
4807
  elsif ['base-hvac-furnace-x3-dse.xml'].include? hpxml_file
4590
4808
  hpxml.heating_systems << hpxml.heating_systems[0].dup
4591
4809
  hpxml.heating_systems << hpxml.heating_systems[1].dup
@@ -4613,26 +4831,24 @@ def set_hpxml_heating_systems(hpxml_file, hpxml)
4613
4831
  hpxml.heating_systems[0].fraction_heat_load_served = 0.5
4614
4832
  hpxml.heating_systems << hpxml.heating_systems[0].dup
4615
4833
  hpxml.heating_systems[1].id += '2'
4616
- elsif ['invalid_files/coal-for-non-boiler-heating.xml'].include? hpxml_file
4617
- hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeCoal
4834
+ elsif ['invalid_files/hvac-inconsistent-fan-powers.xml'].include? hpxml_file
4835
+ hpxml.heating_systems[0].fan_watts_per_cfm = 0.45
4618
4836
  elsif ['base-hvac-undersized.xml'].include? hpxml_file
4619
4837
  hpxml.heating_systems[0].heating_capacity /= 10.0
4620
- elsif ['base-hvac-flowrate.xml'].include? hpxml_file
4621
- hpxml.heating_systems[0].heating_cfm = hpxml.heating_systems[0].heating_capacity * 360.0 / 12000.0
4622
- elsif ['base-hvac-shared-boiler-only-baseboard.xml',
4623
- 'base-hvac-shared-boiler-chiller-baseboard.xml'].include? hpxml_file
4838
+ elsif ['base-bldgtype-multifamily-shared-boiler-only-baseboard.xml',
4839
+ 'base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml'].include? hpxml_file
4624
4840
  hpxml.heating_systems[0].heating_system_type = HPXML::HVACTypeBoiler
4625
4841
  hpxml.heating_systems[0].is_shared_system = true
4626
4842
  hpxml.heating_systems[0].number_of_units_served = 6
4627
4843
  hpxml.heating_systems[0].heating_capacity = nil
4628
4844
  hpxml.heating_systems[0].shared_loop_watts = 600
4629
- elsif ['base-hvac-shared-boiler-only-fan-coil.xml',
4630
- 'base-hvac-shared-boiler-chiller-fan-coil.xml'].include? hpxml_file
4845
+ elsif ['base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml',
4846
+ 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml'].include? hpxml_file
4631
4847
  hpxml.heating_systems[0].fan_coil_watts = 150
4632
- elsif ['base-hvac-shared-boiler-only-water-loop-heat-pump.xml',
4633
- 'base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml'].include? hpxml_file
4848
+ elsif ['base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml',
4849
+ 'base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml'].include? hpxml_file
4634
4850
  hpxml.heating_systems[0].wlhp_heating_efficiency_cop = 4.4
4635
- elsif ['base-hvac-shared-boiler-only-fan-coil-eae.xml'].include? hpxml_file
4851
+ elsif ['base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml'].include? hpxml_file
4636
4852
  hpxml.heating_systems[0].fan_coil_watts = nil
4637
4853
  hpxml.heating_systems[0].shared_loop_watts = nil
4638
4854
  hpxml.heating_systems[0].electric_auxiliary_energy = 500.0
@@ -4664,6 +4880,7 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4664
4880
  'base-hvac-elec-resistance-only.xml',
4665
4881
  'base-hvac-fireplace-wood-only.xml',
4666
4882
  'base-hvac-floor-furnace-propane-only.xml',
4883
+ 'base-hvac-furnace-coal-only.xml',
4667
4884
  'base-hvac-furnace-elec-only.xml',
4668
4885
  'base-hvac-furnace-gas-only.xml',
4669
4886
  'base-hvac-furnace-oil-only.xml',
@@ -4676,9 +4893,11 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4676
4893
  'base-hvac-stove-oil-only.xml',
4677
4894
  'base-hvac-stove-wood-pellets-only.xml',
4678
4895
  'base-hvac-wall-furnace-elec-only.xml',
4679
- 'base-hvac-shared-boiler-only-baseboard.xml',
4680
- 'base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml'].include? hpxml_file
4896
+ 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml',
4897
+ 'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml'].include? hpxml_file
4681
4898
  hpxml.cooling_systems.clear
4899
+ elsif ['base-hvac-central-ac-only-1-speed.xml'].include? hpxml_file
4900
+ hpxml.cooling_systems[0].fan_watts_per_cfm = 0.45
4682
4901
  elsif ['base-hvac-boiler-gas-central-ac-1-speed.xml'].include? hpxml_file
4683
4902
  hpxml.cooling_systems[0].distribution_system_idref = 'HVACDistribution2'
4684
4903
  elsif ['base-hvac-furnace-gas-central-ac-2-speed.xml',
@@ -4696,6 +4915,7 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4696
4915
  hpxml.cooling_systems[0].cooling_efficiency_seer = 19
4697
4916
  hpxml.cooling_systems[0].cooling_shr = 0.73
4698
4917
  hpxml.cooling_systems[0].compressor_type = nil
4918
+ hpxml.cooling_systems[0].fan_watts_per_cfm = 0.2
4699
4919
  elsif ['base-hvac-mini-split-air-conditioner-only-ductless.xml'].include? hpxml_file
4700
4920
  hpxml.cooling_systems[0].distribution_system_idref = nil
4701
4921
  elsif ['base-hvac-furnace-gas-room-ac.xml',
@@ -4723,6 +4943,9 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4723
4943
  'base-hvac-evap-cooler-only.xml'].include? hpxml_file
4724
4944
  hpxml.cooling_systems[0].distribution_system_idref = nil
4725
4945
  end
4946
+ if ['base-hvac-evap-cooler-only.xml'].include? hpxml_file
4947
+ hpxml.cooling_systems[0].fan_watts_per_cfm = 0.3
4948
+ end
4726
4949
  elsif ['base-hvac-multiple.xml'].include? hpxml_file
4727
4950
  hpxml.cooling_systems[0].distribution_system_idref = 'HVACDistribution2'
4728
4951
  hpxml.cooling_systems[0].fraction_cool_load_served = 0.2
@@ -4747,7 +4970,7 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4747
4970
  cooling_efficiency_seer: 13,
4748
4971
  cooling_shr: 0.65)
4749
4972
  elsif ['base-mechvent-multiple.xml',
4750
- 'base-mechvent-shared-multiple.xml'].include? hpxml_file
4973
+ 'base-bldgtype-multifamily-shared-mechvent-multiple.xml'].include? hpxml_file
4751
4974
  hpxml.cooling_systems[0].fraction_cool_load_served /= 2.0
4752
4975
  hpxml.cooling_systems[0].cooling_capacity /= 2.0
4753
4976
  hpxml.cooling_systems << hpxml.cooling_systems[0].dup
@@ -4759,6 +4982,8 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4759
4982
  hpxml.cooling_systems[0].fraction_cool_load_served = 0.5
4760
4983
  hpxml.cooling_systems << hpxml.cooling_systems[0].dup
4761
4984
  hpxml.cooling_systems[1].id += '2'
4985
+ elsif ['invalid_files/hvac-inconsistent-fan-powers.xml'].include? hpxml_file
4986
+ hpxml.cooling_systems[0].fan_watts_per_cfm = 0.55
4762
4987
  elsif ['base-hvac-undersized.xml'].include? hpxml_file
4763
4988
  hpxml.cooling_systems[0].cooling_capacity /= 10.0
4764
4989
  elsif ['base-hvac-flowrate.xml'].include? hpxml_file
@@ -4766,10 +4991,10 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4766
4991
  elsif ['base-misc-defaults.xml'].include? hpxml_file
4767
4992
  hpxml.cooling_systems[0].cooling_shr = nil
4768
4993
  hpxml.cooling_systems[0].compressor_type = nil
4769
- elsif ['base-hvac-shared-chiller-only-baseboard.xml',
4770
- 'base-hvac-shared-boiler-chiller-baseboard.xml',
4771
- 'base-hvac-shared-chiller-only-water-loop-heat-pump.xml',
4772
- 'base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml'].include? hpxml_file
4994
+ elsif ['base-bldgtype-multifamily-shared-chiller-only-baseboard.xml',
4995
+ 'base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml',
4996
+ 'base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml',
4997
+ 'base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml'].include? hpxml_file
4773
4998
  hpxml.cooling_systems[0].cooling_system_type = HPXML::HVACTypeChiller
4774
4999
  hpxml.cooling_systems[0].is_shared_system = true
4775
5000
  hpxml.cooling_systems[0].number_of_units_served = 6
@@ -4782,13 +5007,13 @@ def set_hpxml_cooling_systems(hpxml_file, hpxml)
4782
5007
  hpxml.cooling_systems[0].wlhp_cooling_capacity = 24000
4783
5008
  hpxml.cooling_systems[0].wlhp_cooling_efficiency_eer = 12.8
4784
5009
  end
4785
- elsif ['base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml',
4786
- 'base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml'].include? hpxml_file
5010
+ elsif ['base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml',
5011
+ 'base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml'].include? hpxml_file
4787
5012
  hpxml.cooling_systems[0].cooling_system_type = HPXML::HVACTypeCoolingTower
4788
5013
  hpxml.cooling_systems[0].cooling_capacity = nil
4789
5014
  hpxml.cooling_systems[0].cooling_efficiency_kw_per_ton = nil
4790
- elsif ['base-hvac-shared-chiller-only-fan-coil.xml',
4791
- 'base-hvac-shared-boiler-chiller-fan-coil.xml'].include? hpxml_file
5015
+ elsif ['base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml',
5016
+ 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml'].include? hpxml_file
4792
5017
  hpxml.cooling_systems[0].fan_coil_watts = 150
4793
5018
  elsif hpxml_file.include?('hvac_autosizing') && (not hpxml.cooling_systems.nil?) && (hpxml.cooling_systems.size > 0)
4794
5019
  hpxml.cooling_systems[0].cooling_capacity = nil
@@ -4813,7 +5038,8 @@ def set_hpxml_heat_pumps(hpxml_file, hpxml)
4813
5038
  cooling_efficiency_seer: 13,
4814
5039
  heating_capacity_17F: 42000 * 0.630, # Based on OAT slope of default curves
4815
5040
  cooling_shr: 0.73,
4816
- compressor_type: HPXML::HVACCompressorTypeSingleStage)
5041
+ compressor_type: HPXML::HVACCompressorTypeSingleStage,
5042
+ fan_watts_per_cfm: 0.45)
4817
5043
  if hpxml_file == 'base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml'
4818
5044
  hpxml.heat_pumps[0].fraction_cool_load_served = 0
4819
5045
  end
@@ -4852,7 +5078,7 @@ def set_hpxml_heat_pumps(hpxml_file, hpxml)
4852
5078
  cooling_shr: 0.78,
4853
5079
  compressor_type: HPXML::HVACCompressorTypeVariableSpeed)
4854
5080
  elsif ['base-hvac-ground-to-air-heat-pump.xml',
4855
- 'base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml'].include? hpxml_file
5081
+ 'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml'].include? hpxml_file
4856
5082
  hpxml.heat_pumps.add(id: 'HeatPump',
4857
5083
  distribution_system_idref: 'HVACDistribution',
4858
5084
  heat_pump_type: HPXML::HVACTypeHeatPumpGroundToAir,
@@ -4868,8 +5094,8 @@ def set_hpxml_heat_pumps(hpxml_file, hpxml)
4868
5094
  cooling_efficiency_eer: 16.6,
4869
5095
  cooling_shr: 0.73,
4870
5096
  pump_watts_per_ton: 30.0,
4871
- fan_watts_per_cfm: 0.5)
4872
- if hpxml_file == 'base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml'
5097
+ fan_watts_per_cfm: 0.45)
5098
+ if hpxml_file == 'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml'
4873
5099
  hpxml.heat_pumps[-1].is_shared_system = true
4874
5100
  hpxml.heat_pumps[-1].number_of_units_served = 6
4875
5101
  hpxml.heat_pumps[-1].shared_loop_watts = 600
@@ -4890,7 +5116,8 @@ def set_hpxml_heat_pumps(hpxml_file, hpxml)
4890
5116
  heating_efficiency_hspf: 10,
4891
5117
  cooling_efficiency_seer: 19,
4892
5118
  heating_capacity_17F: 52000 * f,
4893
- cooling_shr: 0.73)
5119
+ cooling_shr: 0.73,
5120
+ fan_watts_per_cfm: 0.2)
4894
5121
  elsif ['base-hvac-mini-split-heat-pump-ducted-heating-only.xml'].include? hpxml_file
4895
5122
  hpxml.heat_pumps[0].cooling_capacity = 0
4896
5123
  hpxml.heat_pumps[0].fraction_cool_load_served = 0
@@ -5032,6 +5259,14 @@ def set_hpxml_hvac_control(hpxml_file, hpxml)
5032
5259
  hpxml.hvac_controls[0].cooling_setup_temp = 80
5033
5260
  hpxml.hvac_controls[0].cooling_setup_hours_per_week = 6 * 7
5034
5261
  hpxml.hvac_controls[0].cooling_setup_start_hour = 9 # 9am
5262
+ elsif ['base-hvac-programmable-thermostat-detailed.xml'].include? hpxml_file
5263
+ hpxml.hvac_controls[0].control_type = HPXML::HVACControlTypeProgrammable
5264
+ hpxml.hvac_controls[0].heating_setpoint_temp = nil
5265
+ hpxml.hvac_controls[0].cooling_setpoint_temp = nil
5266
+ hpxml.hvac_controls[0].weekday_heating_setpoints = '64, 64, 64, 64, 64, 64, 64, 74, 74, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 68, 68, 64, 64'
5267
+ hpxml.hvac_controls[0].weekend_heating_setpoints = '74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74'
5268
+ hpxml.hvac_controls[0].weekday_cooling_setpoints = '82, 82, 82, 82, 82, 82, 82, 72, 72, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 82, 82'
5269
+ hpxml.hvac_controls[0].weekend_cooling_setpoints = '78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78'
5035
5270
  elsif ['base-hvac-setpoints.xml'].include? hpxml_file
5036
5271
  hpxml.hvac_controls[0].heating_setpoint_temp = 60
5037
5272
  hpxml.hvac_controls[0].cooling_setpoint_temp = 80
@@ -5060,22 +5295,32 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml)
5060
5295
  duct_insulation_r_value: 0,
5061
5296
  duct_location: HPXML::LocationAtticUnvented,
5062
5297
  duct_surface_area: 50)
5298
+ elsif ['base-bldgtype-multifamily.xml'].include? hpxml_file
5299
+ hpxml.hvac_distributions.each do |hvac_distribution|
5300
+ hvac_distribution.duct_leakage_measurements.each do |duct_leakage_measurement|
5301
+ duct_leakage_measurement.duct_leakage_value = 0
5302
+ end
5303
+ hvac_distribution.ducts.each do |duct|
5304
+ duct.duct_location = HPXML::LocationLivingSpace
5305
+ duct.duct_insulation_r_value = 0
5306
+ end
5307
+ end
5063
5308
  elsif ['base-hvac-boiler-coal-only.xml',
5064
5309
  'base-hvac-boiler-elec-only.xml',
5065
5310
  'base-hvac-boiler-gas-only.xml',
5066
5311
  'base-hvac-boiler-oil-only.xml',
5067
5312
  'base-hvac-boiler-propane-only.xml',
5068
5313
  'base-hvac-boiler-wood-only.xml',
5069
- 'base-hvac-shared-boiler-only-baseboard.xml',
5070
- 'base-hvac-shared-chiller-only-baseboard.xml',
5071
- 'base-hvac-shared-boiler-chiller-baseboard.xml'].include? hpxml_file
5314
+ 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml',
5315
+ 'base-bldgtype-multifamily-shared-chiller-only-baseboard.xml',
5316
+ 'base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml'].include? hpxml_file
5072
5317
  hpxml.hvac_distributions[0].distribution_system_type = HPXML::HVACDistributionTypeHydronic
5073
5318
  hpxml.hvac_distributions[0].duct_leakage_measurements.clear
5074
5319
  hpxml.hvac_distributions[0].ducts.clear
5075
5320
  hpxml.hvac_distributions[0].hydronic_type = HPXML::HydronicTypeBaseboard
5076
- elsif ['base-hvac-shared-boiler-only-fan-coil.xml',
5077
- 'base-hvac-shared-chiller-only-fan-coil.xml',
5078
- 'base-hvac-shared-boiler-chiller-fan-coil.xml'].include? hpxml_file
5321
+ elsif ['base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml',
5322
+ 'base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml',
5323
+ 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml'].include? hpxml_file
5079
5324
  hpxml.hvac_distributions[0].distribution_system_type = HPXML::HVACDistributionTypeHydronicAndAir
5080
5325
  hpxml.hvac_distributions[0].hydronic_and_air_type = HPXML::HydronicAndAirTypeFanCoil
5081
5326
  elsif ['base-hvac-boiler-gas-central-ac-1-speed.xml'].include? hpxml_file
@@ -5193,7 +5438,7 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml)
5193
5438
  hpxml.hvac_distributions << hpxml.hvac_distributions[0].dup
5194
5439
  hpxml.hvac_distributions[-1].id = 'HVACDistribution5'
5195
5440
  elsif ['base-mechvent-multiple.xml',
5196
- 'base-mechvent-shared-multiple.xml'].include? hpxml_file
5441
+ 'base-bldgtype-multifamily-shared-mechvent-multiple.xml'].include? hpxml_file
5197
5442
  hpxml.hvac_distributions << hpxml.hvac_distributions[0].dup
5198
5443
  hpxml.hvac_distributions[1].id = 'HVACDistribution2'
5199
5444
  elsif ['base-hvac-dse.xml',
@@ -5265,7 +5510,7 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml)
5265
5510
  elsif ['invalid_files/duct-location-unconditioned-space.xml'].include? hpxml_file
5266
5511
  hpxml.hvac_distributions[0].ducts[0].duct_location = 'unconditioned space'
5267
5512
  hpxml.hvac_distributions[0].ducts[1].duct_location = 'unconditioned space'
5268
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
5513
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
5269
5514
  hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherHousingUnit
5270
5515
  hpxml.hvac_distributions[0].ducts.add(duct_type: HPXML::DuctTypeSupply,
5271
5516
  duct_insulation_r_value: 4,
@@ -5297,29 +5542,24 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml)
5297
5542
  hpxml.hvac_distributions[0].duct_leakage_measurements[0].duct_leakage_value = 1.5
5298
5543
  hpxml.hvac_distributions[0].duct_leakage_measurements[1].duct_leakage_value = 1.5
5299
5544
  end
5300
- elsif ['base-enclosure-other-heated-space.xml',
5301
- 'base-enclosure-other-non-freezing-space.xml',
5302
- 'base-enclosure-other-multifamily-buffer-space.xml',
5303
- 'base-enclosure-other-housing-unit.xml'].include? hpxml_file
5304
- if ['base-enclosure-other-heated-space.xml'].include? hpxml_file
5305
- hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherHeatedSpace
5306
- hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherHeatedSpace
5307
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
5308
- hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherNonFreezingSpace
5309
- hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherNonFreezingSpace
5310
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
5311
- hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherMultifamilyBufferSpace
5312
- hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherMultifamilyBufferSpace
5313
- elsif ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
5314
- hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherHousingUnit
5315
- hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherHousingUnit
5316
- end
5317
- elsif ['base-hvac-shared-boiler-only-water-loop-heat-pump.xml',
5318
- 'base-hvac-shared-chiller-only-water-loop-heat-pump.xml',
5319
- 'base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml',
5320
- 'base-hvac-shared-boiler-chiller-fan-coil-ducted.xml',
5321
- 'base-hvac-shared-boiler-only-fan-coil-ducted.xml',
5322
- 'base-hvac-shared-chiller-only-fan-coil-ducted.xml'].include? hpxml_file
5545
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
5546
+ hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherHousingUnit
5547
+ hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherHousingUnit
5548
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
5549
+ hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherHeatedSpace
5550
+ hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherHeatedSpace
5551
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
5552
+ hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherMultifamilyBufferSpace
5553
+ hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherMultifamilyBufferSpace
5554
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
5555
+ hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherNonFreezingSpace
5556
+ hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherNonFreezingSpace
5557
+ elsif ['base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml',
5558
+ 'base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml',
5559
+ 'base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml',
5560
+ 'base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml',
5561
+ 'base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml',
5562
+ 'base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml'].include? hpxml_file
5323
5563
  hpxml.hvac_distributions[0].distribution_system_type = HPXML::HVACDistributionTypeHydronicAndAir
5324
5564
  if hpxml_file.include? 'fan-coil'
5325
5565
  hpxml.hvac_distributions[0].hydronic_and_air_type = HPXML::HydronicAndAirTypeFanCoil
@@ -5500,7 +5740,7 @@ def set_hpxml_ventilation_fans(hpxml_file, hpxml)
5500
5740
  hpxml.ventilation_fans.add(id: 'BathFans',
5501
5741
  fan_location: HPXML::LocationBath,
5502
5742
  used_for_local_ventilation: true)
5503
- elsif ['base-mechvent-shared.xml'].include? hpxml_file
5743
+ elsif ['base-bldgtype-multifamily-shared-mechvent.xml'].include? hpxml_file
5504
5744
  # Shared supply + in-unit exhaust (roughly balanced)
5505
5745
  hpxml.ventilation_fans.add(id: 'SharedSupplyFan',
5506
5746
  fan_type: HPXML::MechVentTypeSupply,
@@ -5517,14 +5757,14 @@ def set_hpxml_ventilation_fans(hpxml_file, hpxml)
5517
5757
  hours_in_operation: 24,
5518
5758
  fan_power: 26,
5519
5759
  used_for_whole_building_ventilation: true)
5520
- elsif ['base-mechvent-shared-preconditioning.xml'].include? hpxml_file
5760
+ elsif ['base-bldgtype-multifamily-shared-mechvent-preconditioning.xml'].include? hpxml_file
5521
5761
  hpxml.ventilation_fans[0].preheating_fuel = HPXML::FuelTypeNaturalGas
5522
5762
  hpxml.ventilation_fans[0].preheating_efficiency_cop = 0.92
5523
5763
  hpxml.ventilation_fans[0].preheating_fraction_load_served = 0.7
5524
5764
  hpxml.ventilation_fans[0].precooling_fuel = HPXML::FuelTypeElectricity
5525
5765
  hpxml.ventilation_fans[0].precooling_efficiency_cop = 4.0
5526
5766
  hpxml.ventilation_fans[0].precooling_fraction_load_served = 0.8
5527
- elsif ['base-mechvent-shared-multiple.xml'].include? hpxml_file
5767
+ elsif ['base-bldgtype-multifamily-shared-mechvent-multiple.xml'].include? hpxml_file
5528
5768
  hpxml.ventilation_fans.add(id: 'SharedSupplyPreconditioned',
5529
5769
  fan_type: HPXML::MechVentTypeSupply,
5530
5770
  is_shared_system: true,
@@ -5779,9 +6019,42 @@ def set_hpxml_water_heating_systems(hpxml_file, hpxml)
5779
6019
  elsif hpxml_file == 'base-dhw-tankless-propane.xml'
5780
6020
  hpxml.water_heating_systems[0].fuel_type = HPXML::FuelTypePropane
5781
6021
  end
5782
- elsif ['base-dhw-uef.xml'].include? hpxml_file
6022
+ elsif ['base-dhw-tank-elec-uef.xml'].include? hpxml_file
6023
+ # Based on Richmond model number 6ESB30-2 in AHR directory
6024
+ hpxml.water_heating_systems[0].energy_factor = nil
6025
+ hpxml.water_heating_systems[0].uniform_energy_factor = 0.93
6026
+ hpxml.water_heating_systems[0].first_hour_rating = 46.0
6027
+ hpxml.water_heating_systems[0].tank_volume = 30.0
6028
+ hpxml.water_heating_systems[0].heating_capacity = 15354.0 # 4.5 kW
6029
+ elsif ['base-dhw-tank-gas-uef.xml'].include? hpxml_file
6030
+ # Based on AO Smith model number G6-MH3030NV 400 in AHRI directory
6031
+ hpxml.water_heating_systems[0].fuel_type = HPXML::FuelTypeNaturalGas
6032
+ hpxml.water_heating_systems[0].energy_factor = nil
6033
+ hpxml.water_heating_systems[0].uniform_energy_factor = 0.59
6034
+ hpxml.water_heating_systems[0].first_hour_rating = 56.0
6035
+ hpxml.water_heating_systems[0].tank_volume = 30.0
6036
+ hpxml.water_heating_systems[0].heating_capacity = 30000.0
6037
+ hpxml.water_heating_systems[0].recovery_efficiency = 0.75
6038
+ elsif ['base-dhw-tank-heat-pump-uef.xml'].include? hpxml_file
6039
+ # Based on Rheem model number XE40T10HS45U0 from AHRI directory
6040
+ hpxml.water_heating_systems[0].water_heater_type = HPXML::WaterHeaterTypeHeatPump
6041
+ hpxml.water_heating_systems[0].energy_factor = nil
6042
+ hpxml.water_heating_systems[0].uniform_energy_factor = 3.75
6043
+ hpxml.water_heating_systems[0].first_hour_rating = 60.0
6044
+ hpxml.water_heating_systems[0].tank_volume = 50.0
6045
+ elsif ['base-dhw-tankless-gas-uef.xml'].include? hpxml_file
6046
+ hpxml.water_heating_systems[0].water_heater_type = HPXML::WaterHeaterTypeTankless
6047
+ hpxml.water_heating_systems[0].fuel_type = HPXML::FuelTypeNaturalGas
6048
+ hpxml.water_heating_systems[0].tank_volume = nil
6049
+ hpxml.water_heating_systems[0].heating_capacity = nil
5783
6050
  hpxml.water_heating_systems[0].energy_factor = nil
5784
6051
  hpxml.water_heating_systems[0].uniform_energy_factor = 0.93
6052
+ elsif ['base-dhw-tankless-electric-uef.xml'].include? hpxml_file
6053
+ hpxml.water_heating_systems[0].water_heater_type = HPXML::WaterHeaterTypeTankless
6054
+ hpxml.water_heating_systems[0].tank_volume = nil
6055
+ hpxml.water_heating_systems[0].heating_capacity = nil
6056
+ hpxml.water_heating_systems[0].energy_factor = nil
6057
+ hpxml.water_heating_systems[0].uniform_energy_factor = 0.98
5785
6058
  elsif ['base-dhw-desuperheater.xml',
5786
6059
  'base-dhw-desuperheater-2-speed.xml',
5787
6060
  'base-dhw-desuperheater-var-speed.xml',
@@ -5856,21 +6129,16 @@ def set_hpxml_water_heating_systems(hpxml_file, hpxml)
5856
6129
  hpxml.water_heating_systems[1].id = 'WaterHeater2'
5857
6130
  elsif ['base-enclosure-garage.xml'].include? hpxml_file
5858
6131
  hpxml.water_heating_systems[0].location = HPXML::LocationGarage
5859
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
6132
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
5860
6133
  hpxml.water_heating_systems[0].location = HPXML::LocationLivingSpace
5861
- elsif ['base-enclosure-other-housing-unit.xml',
5862
- 'base-enclosure-other-heated-space.xml',
5863
- 'base-enclosure-other-non-freezing-space.xml',
5864
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
5865
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
5866
- hpxml.water_heating_systems[0].location = HPXML::LocationOtherHousingUnit
5867
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
5868
- hpxml.water_heating_systems[0].location = HPXML::LocationOtherHeatedSpace
5869
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
5870
- hpxml.water_heating_systems[0].location = HPXML::LocationOtherNonFreezingSpace
5871
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
5872
- hpxml.water_heating_systems[0].location = HPXML::LocationOtherMultifamilyBufferSpace
5873
- end
6134
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
6135
+ hpxml.water_heating_systems[0].location = HPXML::LocationOtherHousingUnit
6136
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
6137
+ hpxml.water_heating_systems[0].location = HPXML::LocationOtherHeatedSpace
6138
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
6139
+ hpxml.water_heating_systems[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6140
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
6141
+ hpxml.water_heating_systems[0].location = HPXML::LocationOtherNonFreezingSpace
5874
6142
  elsif ['base-dhw-none.xml'].include? hpxml_file
5875
6143
  hpxml.water_heating_systems.clear
5876
6144
  elsif ['base-misc-defaults.xml'].include? hpxml_file
@@ -5879,7 +6147,7 @@ def set_hpxml_water_heating_systems(hpxml_file, hpxml)
5879
6147
  hpxml.water_heating_systems[0].heating_capacity = nil
5880
6148
  hpxml.water_heating_systems[0].tank_volume = nil
5881
6149
  hpxml.water_heating_systems[0].recovery_efficiency = nil
5882
- elsif ['base-dhw-shared-water-heater.xml'].include? hpxml_file
6150
+ elsif ['base-bldgtype-multifamily-shared-water-heater.xml'].include? hpxml_file
5883
6151
  hpxml.water_heating_systems.clear
5884
6152
  hpxml.water_heating_systems.add(id: 'SharedWaterHeater',
5885
6153
  is_shared_system: true,
@@ -5887,13 +6155,13 @@ def set_hpxml_water_heating_systems(hpxml_file, hpxml)
5887
6155
  fuel_type: HPXML::FuelTypeNaturalGas,
5888
6156
  water_heater_type: HPXML::WaterHeaterTypeStorage,
5889
6157
  location: HPXML::LocationLivingSpace,
5890
- tank_volume: 50,
6158
+ tank_volume: 120,
5891
6159
  fraction_dhw_load_served: 1.0,
5892
6160
  heating_capacity: 40000,
5893
6161
  energy_factor: 0.59,
5894
6162
  recovery_efficiency: 0.76,
5895
6163
  temperature: Waterheater.get_default_hot_water_temperature(Constants.ERIVersions[-1]))
5896
- elsif ['base-dhw-shared-laundry-room.xml'].include? hpxml_file
6164
+ elsif ['base-bldgtype-multifamily-shared-laundry-room.xml'].include? hpxml_file
5897
6165
  hpxml.water_heating_systems[0].location = HPXML::LocationLivingSpace
5898
6166
  hpxml.water_heating_systems << hpxml.water_heating_systems[0].dup
5899
6167
  hpxml.water_heating_systems[1].id = 'SharedWaterHeater'
@@ -5903,6 +6171,10 @@ def set_hpxml_water_heating_systems(hpxml_file, hpxml)
5903
6171
  hpxml.water_heating_systems[1].location = HPXML::LocationOtherHeatedSpace
5904
6172
  elsif ['invalid_files/multifamily-reference-water-heater.xml'].include? hpxml_file
5905
6173
  hpxml.water_heating_systems[0].location = HPXML::LocationOtherNonFreezingSpace
6174
+ elsif ['invalid_files/dhw-invalid-ef-tank.xml'].include? hpxml_file
6175
+ hpxml.water_heating_systems[0].energy_factor = 1.0
6176
+ elsif ['invalid_files/dhw-invalid-uef-tank-heat-pump.xml'].include? hpxml_file
6177
+ hpxml.water_heating_systems[0].uniform_energy_factor = 1.0
5906
6178
  end
5907
6179
  end
5908
6180
 
@@ -5948,9 +6220,9 @@ def set_hpxml_hot_water_distribution(hpxml_file, hpxml)
5948
6220
  hpxml.hot_water_distributions[0].recirculation_piping_length = 50
5949
6221
  hpxml.hot_water_distributions[0].recirculation_branch_piping_length = 50
5950
6222
  hpxml.hot_water_distributions[0].recirculation_pump_power = 50
5951
- elsif ['base-dhw-shared-water-heater.xml'].include? hpxml_file
6223
+ elsif ['base-bldgtype-multifamily-shared-water-heater.xml'].include? hpxml_file
5952
6224
  hpxml.hot_water_distributions[0].id = 'SharedHotWaterDistribution'
5953
- elsif ['base-dhw-shared-water-heater-recirc.xml'].include? hpxml_file
6225
+ elsif ['base-bldgtype-multifamily-shared-water-heater-recirc.xml'].include? hpxml_file
5954
6226
  hpxml.hot_water_distributions[0].has_shared_recirculation = true
5955
6227
  hpxml.hot_water_distributions[0].shared_recirculation_number_of_units_served = 6
5956
6228
  hpxml.hot_water_distributions[0].shared_recirculation_pump_power = 220
@@ -5958,6 +6230,7 @@ def set_hpxml_hot_water_distribution(hpxml_file, hpxml)
5958
6230
  elsif ['base-dhw-none.xml'].include? hpxml_file
5959
6231
  hpxml.hot_water_distributions.clear
5960
6232
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6233
+ hpxml.hot_water_distributions[0].pipe_r_value = nil
5961
6234
  hpxml.hot_water_distributions[0].standard_piping_length = nil
5962
6235
  end
5963
6236
  end
@@ -6077,14 +6350,11 @@ def set_hpxml_pv_systems(hpxml_file, hpxml)
6077
6350
  system_losses_fraction: 0.14)
6078
6351
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6079
6352
  hpxml.pv_systems.add(id: 'PVSystem',
6080
- module_type: HPXML::PVModuleTypeStandard,
6081
- location: HPXML::LocationRoof,
6082
- tracking: HPXML::PVTrackingTypeFixed,
6083
6353
  array_azimuth: 180,
6084
6354
  array_tilt: 20,
6085
6355
  max_power_output: 4000,
6086
6356
  year_modules_manufactured: 2015)
6087
- elsif ['base-pv-shared.xml'].include? hpxml_file
6357
+ elsif ['base-bldgtype-multifamily-shared-pv.xml'].include? hpxml_file
6088
6358
  hpxml.pv_systems.add(id: 'PVSystem',
6089
6359
  is_shared_system: true,
6090
6360
  module_type: HPXML::PVModuleTypeStandard,
@@ -6095,7 +6365,27 @@ def set_hpxml_pv_systems(hpxml_file, hpxml)
6095
6365
  max_power_output: 30000,
6096
6366
  inverter_efficiency: 0.96,
6097
6367
  system_losses_fraction: 0.14,
6098
- number_of_bedrooms_served: 20)
6368
+ number_of_bedrooms_served: 18)
6369
+ end
6370
+ end
6371
+
6372
+ def set_hpxml_generators(hpxml_file, hpxml)
6373
+ if ['base-misc-generators.xml'].include? hpxml_file
6374
+ hpxml.generators.add(id: 'Generator',
6375
+ fuel_type: HPXML::FuelTypeNaturalGas,
6376
+ annual_consumption_kbtu: 8500,
6377
+ annual_output_kwh: 500)
6378
+ hpxml.generators.add(id: 'Generator2',
6379
+ fuel_type: HPXML::FuelTypePropane,
6380
+ annual_consumption_kbtu: 8500,
6381
+ annual_output_kwh: 500)
6382
+ elsif ['base-bldgtype-multifamily-shared-generator.xml'].include? hpxml_file
6383
+ hpxml.generators.add(id: 'Generator',
6384
+ is_shared_system: true,
6385
+ fuel_type: HPXML::FuelTypePropane,
6386
+ annual_consumption_kbtu: 85000,
6387
+ annual_output_kwh: 5000,
6388
+ number_of_bedrooms_served: 18)
6099
6389
  end
6100
6390
  end
6101
6391
 
@@ -6113,21 +6403,16 @@ def set_hpxml_clothes_washer(hpxml_file, hpxml)
6113
6403
  elsif ['base-appliances-none.xml',
6114
6404
  'base-dhw-none.xml'].include? hpxml_file
6115
6405
  hpxml.clothes_washers.clear
6116
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
6406
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
6117
6407
  hpxml.clothes_washers[0].location = HPXML::LocationLivingSpace
6118
- elsif ['base-enclosure-other-housing-unit.xml',
6119
- 'base-enclosure-other-heated-space.xml',
6120
- 'base-enclosure-other-non-freezing-space.xml',
6121
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6122
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
6123
- hpxml.clothes_washers[0].location = HPXML::LocationOtherHousingUnit
6124
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
6125
- hpxml.clothes_washers[0].location = HPXML::LocationOtherHeatedSpace
6126
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
6127
- hpxml.clothes_washers[0].location = HPXML::LocationOtherNonFreezingSpace
6128
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6129
- hpxml.clothes_washers[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6130
- end
6408
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
6409
+ hpxml.clothes_washers[0].location = HPXML::LocationOtherHousingUnit
6410
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
6411
+ hpxml.clothes_washers[0].location = HPXML::LocationOtherHeatedSpace
6412
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
6413
+ hpxml.clothes_washers[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6414
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
6415
+ hpxml.clothes_washers[0].location = HPXML::LocationOtherNonFreezingSpace
6131
6416
  elsif ['base-appliances-modified.xml'].include? hpxml_file
6132
6417
  imef = hpxml.clothes_washers[0].integrated_modified_energy_factor
6133
6418
  hpxml.clothes_washers[0].integrated_modified_energy_factor = nil
@@ -6139,8 +6424,6 @@ def set_hpxml_clothes_washer(hpxml_file, hpxml)
6139
6424
  elsif ['base-enclosure-garage.xml',
6140
6425
  'invalid_files/clothes-washer-location.xml'].include? hpxml_file
6141
6426
  hpxml.clothes_washers[0].location = HPXML::LocationGarage
6142
- elsif ['invalid_files/appliances-location-unconditioned-space.xml'].include? hpxml_file
6143
- hpxml.clothes_washers[0].location = 'unconditioned space'
6144
6427
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6145
6428
  hpxml.clothes_washers[0].location = nil
6146
6429
  hpxml.clothes_washers[0].modified_energy_factor = nil
@@ -6153,7 +6436,7 @@ def set_hpxml_clothes_washer(hpxml_file, hpxml)
6153
6436
  hpxml.clothes_washers[0].label_usage = nil
6154
6437
  elsif ['base-misc-usage-multiplier.xml'].include? hpxml_file
6155
6438
  hpxml.clothes_washers[0].usage_multiplier = 0.9
6156
- elsif ['base-dhw-shared-laundry-room.xml'].include? hpxml_file
6439
+ elsif ['base-bldgtype-multifamily-shared-laundry-room.xml'].include? hpxml_file
6157
6440
  hpxml.clothes_washers[0].is_shared_appliance = true
6158
6441
  hpxml.clothes_washers[0].id = 'SharedClothesWasher'
6159
6442
  hpxml.clothes_washers[0].location = HPXML::LocationOtherHeatedSpace
@@ -6177,21 +6460,16 @@ def set_hpxml_clothes_dryer(hpxml_file, hpxml)
6177
6460
  elsif ['base-appliances-none.xml',
6178
6461
  'base-dhw-none.xml'].include? hpxml_file
6179
6462
  hpxml.clothes_dryers.clear
6180
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
6463
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
6181
6464
  hpxml.clothes_dryers[0].location = HPXML::LocationLivingSpace
6182
- elsif ['base-enclosure-other-housing-unit.xml',
6183
- 'base-enclosure-other-heated-space.xml',
6184
- 'base-enclosure-other-non-freezing-space.xml',
6185
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6186
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
6187
- hpxml.clothes_dryers[0].location = HPXML::LocationOtherHousingUnit
6188
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
6189
- hpxml.clothes_dryers[0].location = HPXML::LocationOtherHeatedSpace
6190
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
6191
- hpxml.clothes_dryers[0].location = HPXML::LocationOtherNonFreezingSpace
6192
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6193
- hpxml.clothes_dryers[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6194
- end
6465
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
6466
+ hpxml.clothes_dryers[0].location = HPXML::LocationOtherHousingUnit
6467
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
6468
+ hpxml.clothes_dryers[0].location = HPXML::LocationOtherHeatedSpace
6469
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
6470
+ hpxml.clothes_dryers[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6471
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
6472
+ hpxml.clothes_dryers[0].location = HPXML::LocationOtherNonFreezingSpace
6195
6473
  elsif ['base-appliances-modified.xml'].include? hpxml_file
6196
6474
  cef = hpxml.clothes_dryers[-1].combined_energy_factor
6197
6475
  hpxml.clothes_dryers.clear
@@ -6229,8 +6507,6 @@ def set_hpxml_clothes_dryer(hpxml_file, hpxml)
6229
6507
  elsif ['base-enclosure-garage.xml',
6230
6508
  'invalid_files/clothes-dryer-location.xml'].include? hpxml_file
6231
6509
  hpxml.clothes_dryers[0].location = HPXML::LocationGarage
6232
- elsif ['invalid_files/appliances-location-unconditioned-space.xml'].include? hpxml_file
6233
- hpxml.clothes_dryers[0].location = 'unconditioned space'
6234
6510
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6235
6511
  hpxml.clothes_dryers[0].location = nil
6236
6512
  hpxml.clothes_dryers[0].energy_factor = nil
@@ -6238,7 +6514,7 @@ def set_hpxml_clothes_dryer(hpxml_file, hpxml)
6238
6514
  hpxml.clothes_dryers[0].control_type = nil
6239
6515
  hpxml.clothes_dryers[0].is_vented = nil
6240
6516
  hpxml.clothes_dryers[0].vented_flow_rate = nil
6241
- elsif ['base-dhw-shared-laundry-room.xml'].include? hpxml_file
6517
+ elsif ['base-bldgtype-multifamily-shared-laundry-room.xml'].include? hpxml_file
6242
6518
  hpxml.clothes_dryers[0].id = 'SharedClothesDryer'
6243
6519
  hpxml.clothes_dryers[0].location = HPXML::LocationOtherHeatedSpace
6244
6520
  hpxml.clothes_dryers[0].is_shared_appliance = true
@@ -6262,21 +6538,16 @@ def set_hpxml_dishwasher(hpxml_file, hpxml)
6262
6538
  hpxml.dishwashers[0].rated_annual_kwh = nil
6263
6539
  hpxml.dishwashers[0].energy_factor = HotWaterAndAppliances.calc_dishwasher_ef_from_annual_kwh(rated_annual_kwh).round(2)
6264
6540
  hpxml.dishwashers[0].place_setting_capacity = 6 # Compact
6265
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
6541
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
6266
6542
  hpxml.dishwashers[0].location = HPXML::LocationLivingSpace
6267
- elsif ['base-enclosure-other-housing-unit.xml',
6268
- 'base-enclosure-other-heated-space.xml',
6269
- 'base-enclosure-other-non-freezing-space.xml',
6270
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6271
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
6272
- hpxml.dishwashers[0].location = HPXML::LocationOtherHousingUnit
6273
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
6274
- hpxml.dishwashers[0].location = HPXML::LocationOtherHeatedSpace
6275
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
6276
- hpxml.dishwashers[0].location = HPXML::LocationOtherNonFreezingSpace
6277
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6278
- hpxml.dishwashers[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6279
- end
6543
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
6544
+ hpxml.dishwashers[0].location = HPXML::LocationOtherHousingUnit
6545
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
6546
+ hpxml.dishwashers[0].location = HPXML::LocationOtherHeatedSpace
6547
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
6548
+ hpxml.dishwashers[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6549
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
6550
+ hpxml.dishwashers[0].location = HPXML::LocationOtherNonFreezingSpace
6280
6551
  elsif ['base-appliances-none.xml',
6281
6552
  'base-dhw-none.xml'].include? hpxml_file
6282
6553
  hpxml.dishwashers.clear
@@ -6287,8 +6558,6 @@ def set_hpxml_dishwasher(hpxml_file, hpxml)
6287
6558
  elsif ['base-enclosure-garage.xml',
6288
6559
  'invalid_files/dishwasher-location.xml'].include? hpxml_file
6289
6560
  hpxml.dishwashers[0].location = HPXML::LocationGarage
6290
- elsif ['invalid_files/appliances-location-unconditioned-space.xml'].include? hpxml_file
6291
- hpxml.dishwashers[0].location = 'unconditioned space'
6292
6561
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6293
6562
  hpxml.dishwashers[0].rated_annual_kwh = nil
6294
6563
  hpxml.dishwashers[0].label_electric_rate = nil
@@ -6296,15 +6565,19 @@ def set_hpxml_dishwasher(hpxml_file, hpxml)
6296
6565
  hpxml.dishwashers[0].label_annual_gas_cost = nil
6297
6566
  hpxml.dishwashers[0].place_setting_capacity = nil
6298
6567
  hpxml.dishwashers[0].label_usage = nil
6568
+ hpxml.dishwashers[0].location = nil
6299
6569
  elsif ['base-misc-usage-multiplier.xml'].include? hpxml_file
6300
6570
  hpxml.dishwashers[0].usage_multiplier = 0.9
6301
- elsif ['base-dhw-shared-laundry-room.xml'].include? hpxml_file
6571
+ elsif ['base-bldgtype-multifamily-shared-laundry-room.xml'].include? hpxml_file
6302
6572
  hpxml.dishwashers[0].is_shared_appliance = true
6303
6573
  hpxml.dishwashers[0].id = 'SharedDishwasher'
6304
6574
  hpxml.dishwashers[0].location = HPXML::LocationOtherHeatedSpace
6305
6575
  hpxml.dishwashers[0].water_heating_system_idref = 'SharedWaterHeater'
6306
6576
  elsif ['invalid_files/unattached-shared-dishwasher-water-heater.xml'].include? hpxml_file
6307
6577
  hpxml.dishwashers[0].water_heating_system_idref = 'foobar'
6578
+ elsif ['invalid_files/invalid-input-parameters.xml'].include? hpxml_file
6579
+ hpxml.dishwashers[0].rated_annual_kwh = nil
6580
+ hpxml.dishwashers[0].energy_factor = 5.1
6308
6581
  end
6309
6582
  end
6310
6583
 
@@ -6318,21 +6591,16 @@ def set_hpxml_refrigerator(hpxml_file, hpxml)
6318
6591
  hpxml.refrigerators[0].adjusted_annual_kwh = 600
6319
6592
  elsif ['base-appliances-none.xml'].include? hpxml_file
6320
6593
  hpxml.refrigerators.clear
6321
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
6594
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
6322
6595
  hpxml.refrigerators[0].location = HPXML::LocationLivingSpace
6323
- elsif ['base-enclosure-other-housing-unit.xml',
6324
- 'base-enclosure-other-heated-space.xml',
6325
- 'base-enclosure-other-non-freezing-space.xml',
6326
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6327
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
6328
- hpxml.refrigerators[0].location = HPXML::LocationOtherHousingUnit
6329
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
6330
- hpxml.refrigerators[0].location = HPXML::LocationOtherHeatedSpace
6331
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
6332
- hpxml.refrigerators[0].location = HPXML::LocationOtherNonFreezingSpace
6333
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6334
- hpxml.refrigerators[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6335
- end
6596
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
6597
+ hpxml.refrigerators[0].location = HPXML::LocationOtherHousingUnit
6598
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
6599
+ hpxml.refrigerators[0].location = HPXML::LocationOtherHeatedSpace
6600
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
6601
+ hpxml.refrigerators[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6602
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
6603
+ hpxml.refrigerators[0].location = HPXML::LocationOtherNonFreezingSpace
6336
6604
  elsif ['base-foundation-unconditioned-basement.xml'].include? hpxml_file
6337
6605
  hpxml.refrigerators[0].location = HPXML::LocationBasementUnconditioned
6338
6606
  elsif ['base-atticroof-conditioned.xml'].include? hpxml_file
@@ -6340,8 +6608,6 @@ def set_hpxml_refrigerator(hpxml_file, hpxml)
6340
6608
  elsif ['base-enclosure-garage.xml',
6341
6609
  'invalid_files/refrigerator-location.xml'].include? hpxml_file
6342
6610
  hpxml.refrigerators[0].location = HPXML::LocationGarage
6343
- elsif ['invalid_files/appliances-location-unconditioned-space.xml'].include? hpxml_file
6344
- hpxml.refrigerators[0].location = 'unconditioned space'
6345
6611
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6346
6612
  hpxml.refrigerators[0].primary_indicator = nil
6347
6613
  hpxml.refrigerators[0].location = nil
@@ -6405,15 +6671,18 @@ end
6405
6671
  def set_hpxml_dehumidifier(hpxml_file, hpxml)
6406
6672
  if ['base-appliances-dehumidifier.xml'].include? hpxml_file
6407
6673
  hpxml.dehumidifiers.add(id: 'Dehumidifier',
6674
+ type: HPXML::DehumidifierTypePortable,
6408
6675
  capacity: 40,
6409
6676
  energy_factor: 1.8,
6410
6677
  rh_setpoint: 0.5,
6411
6678
  fraction_served: 1.0)
6412
- elsif ['base-appliances-dehumidifier-ief.xml'].include? hpxml_file
6413
- hpxml.dehumidifiers[0].energy_factor = nil
6414
- hpxml.dehumidifiers[0].integrated_energy_factor = 1.5
6415
6679
  elsif ['base-appliances-dehumidifier-50percent.xml'].include? hpxml_file
6416
6680
  hpxml.dehumidifiers[0].fraction_served = 0.5
6681
+ elsif ['base-appliances-dehumidifier-ief-portable.xml'].include? hpxml_file
6682
+ hpxml.dehumidifiers[0].energy_factor = nil
6683
+ hpxml.dehumidifiers[0].integrated_energy_factor = 1.5
6684
+ elsif ['base-appliances-dehumidifier-ief-whole-home.xml'].include? hpxml_file
6685
+ hpxml.dehumidifiers[0].type = HPXML::DehumidifierTypeWholeHome
6417
6686
  end
6418
6687
  end
6419
6688
 
@@ -6425,21 +6694,16 @@ def set_hpxml_cooking_range(hpxml_file, hpxml)
6425
6694
  is_induction: false)
6426
6695
  elsif ['base-appliances-none.xml'].include? hpxml_file
6427
6696
  hpxml.cooking_ranges.clear
6428
- elsif ['base-enclosure-attached-multifamily.xml'].include? hpxml_file
6697
+ elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
6429
6698
  hpxml.cooking_ranges[0].location = HPXML::LocationLivingSpace
6430
- elsif ['base-enclosure-other-housing-unit.xml',
6431
- 'base-enclosure-other-heated-space.xml',
6432
- 'base-enclosure-other-non-freezing-space.xml',
6433
- 'base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6434
- if ['base-enclosure-other-housing-unit.xml'].include? hpxml_file
6435
- hpxml.cooking_ranges[0].location = HPXML::LocationOtherHousingUnit
6436
- elsif ['base-enclosure-other-heated-space.xml'].include? hpxml_file
6437
- hpxml.cooking_ranges[0].location = HPXML::LocationOtherHeatedSpace
6438
- elsif ['base-enclosure-other-non-freezing-space.xml'].include? hpxml_file
6439
- hpxml.cooking_ranges[0].location = HPXML::LocationOtherNonFreezingSpace
6440
- elsif ['base-enclosure-other-multifamily-buffer-space.xml'].include? hpxml_file
6441
- hpxml.cooking_ranges[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6442
- end
6699
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'].include? hpxml_file
6700
+ hpxml.cooking_ranges[0].location = HPXML::LocationOtherHousingUnit
6701
+ elsif ['base-bldgtype-multifamily-adjacent-to-other-heated-space.xml'].include? hpxml_file
6702
+ hpxml.cooking_ranges[0].location = HPXML::LocationOtherHeatedSpace
6703
+ elsif ['base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml'].include? hpxml_file
6704
+ hpxml.cooking_ranges[0].location = HPXML::LocationOtherMultifamilyBufferSpace
6705
+ elsif ['base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml'].include? hpxml_file
6706
+ hpxml.cooking_ranges[0].location = HPXML::LocationOtherNonFreezingSpace
6443
6707
  elsif ['base-appliances-gas.xml'].include? hpxml_file
6444
6708
  hpxml.cooking_ranges[0].fuel_type = HPXML::FuelTypeNaturalGas
6445
6709
  hpxml.cooking_ranges[0].is_induction = false
@@ -6460,10 +6724,9 @@ def set_hpxml_cooking_range(hpxml_file, hpxml)
6460
6724
  elsif ['base-enclosure-garage.xml',
6461
6725
  'invalid_files/cooking-range-location.xml'].include? hpxml_file
6462
6726
  hpxml.cooking_ranges[0].location = HPXML::LocationGarage
6463
- elsif ['invalid_files/appliances-location-unconditioned-space.xml'].include? hpxml_file
6464
- hpxml.cooking_ranges[0].location = 'unconditioned space'
6465
6727
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6466
6728
  hpxml.cooking_ranges[0].is_induction = nil
6729
+ hpxml.cooking_ranges[0].location = nil
6467
6730
  elsif ['base-misc-usage-multiplier.xml'].include? hpxml_file
6468
6731
  hpxml.cooking_ranges[0].usage_multiplier = 0.9
6469
6732
  elsif ['base-misc-loads-large-uncommon.xml'].include? hpxml_file
@@ -6537,7 +6800,7 @@ def set_hpxml_ceiling_fans(hpxml_file, hpxml)
6537
6800
  if ['base-lighting-ceiling-fans.xml'].include? hpxml_file
6538
6801
  hpxml.ceiling_fans.add(id: 'CeilingFan',
6539
6802
  efficiency: 100,
6540
- quantity: 2)
6803
+ quantity: 4)
6541
6804
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6542
6805
  hpxml.ceiling_fans.add(id: 'CeilingFan',
6543
6806
  efficiency: nil,
@@ -6614,9 +6877,9 @@ def set_hpxml_lighting_schedule(hpxml_file, hpxml)
6614
6877
  hpxml.lighting.holiday_exists = true
6615
6878
  hpxml.lighting.holiday_kwh_per_day = 1.1
6616
6879
  hpxml.lighting.holiday_period_begin_month = 11
6617
- hpxml.lighting.holiday_period_begin_day_of_month = 24
6880
+ hpxml.lighting.holiday_period_begin_day = 24
6618
6881
  hpxml.lighting.holiday_period_end_month = 1
6619
- hpxml.lighting.holiday_period_end_day_of_month = 6
6882
+ hpxml.lighting.holiday_period_end_day = 6
6620
6883
  hpxml.lighting.holiday_weekday_fractions = '0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.008, 0.098, 0.168, 0.194, 0.284, 0.192, 0.037, 0.019'
6621
6884
  hpxml.lighting.holiday_weekend_fractions = '0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.008, 0.098, 0.168, 0.194, 0.284, 0.192, 0.037, 0.019'
6622
6885
  end
@@ -6628,11 +6891,8 @@ def set_hpxml_plug_loads(hpxml_file, hpxml)
6628
6891
  hpxml.plug_loads.add(id: 'PlugLoadMisc',
6629
6892
  plug_load_type: HPXML::PlugLoadTypeOther,
6630
6893
  kWh_per_year: 7302,
6631
- frac_sensible: 0.82,
6632
- frac_latent: 0.18)
6633
- hpxml.plug_loads.add(id: 'PlugLoadMisc2',
6634
- plug_load_type: HPXML::PlugLoadTypeTelevision,
6635
- kWh_per_year: 0)
6894
+ frac_sensible: 0.822,
6895
+ frac_latent: 0.178)
6636
6896
  elsif ['ASHRAE_Standard_140/L170AC.xml',
6637
6897
  'ASHRAE_Standard_140/L170AL.xml'].include? hpxml_file
6638
6898
  hpxml.plug_loads[0].kWh_per_year = 0
@@ -6658,9 +6918,6 @@ def set_hpxml_plug_loads(hpxml_file, hpxml)
6658
6918
  hpxml.plug_loads.add(id: 'PlugLoadMisc',
6659
6919
  plug_load_type: HPXML::PlugLoadTypeOther,
6660
6920
  kWh_per_year: 0)
6661
- hpxml.plug_loads.add(id: 'PlugLoadMisc2',
6662
- plug_load_type: HPXML::PlugLoadTypeTelevision,
6663
- kWh_per_year: 0)
6664
6921
  elsif ['base-misc-loads-large-uncommon.xml'].include? hpxml_file
6665
6922
  hpxml.plug_loads[0].weekday_fractions = '0.035, 0.033, 0.032, 0.031, 0.032, 0.033, 0.037, 0.042, 0.043, 0.043, 0.043, 0.044, 0.045, 0.045, 0.044, 0.046, 0.048, 0.052, 0.053, 0.05, 0.047, 0.045, 0.04, 0.036'
6666
6923
  hpxml.plug_loads[0].weekend_fractions = '0.035, 0.033, 0.032, 0.031, 0.032, 0.033, 0.037, 0.042, 0.043, 0.043, 0.043, 0.044, 0.045, 0.045, 0.044, 0.046, 0.048, 0.052, 0.053, 0.05, 0.047, 0.045, 0.04, 0.036'
@@ -6669,14 +6926,12 @@ def set_hpxml_plug_loads(hpxml_file, hpxml)
6669
6926
  hpxml.plug_loads[1].weekend_fractions = '0.045, 0.019, 0.01, 0.001, 0.001, 0.001, 0.005, 0.009, 0.018, 0.026, 0.032, 0.038, 0.04, 0.041, 0.043, 0.045, 0.05, 0.055, 0.07, 0.085, 0.097, 0.108, 0.089, 0.07'
6670
6927
  hpxml.plug_loads[1].monthly_multipliers = '1.137, 1.129, 0.961, 0.969, 0.961, 0.993, 0.996, 0.96, 0.993, 0.867, 0.86, 1.137'
6671
6928
  hpxml.plug_loads.add(id: 'PlugLoadMisc3',
6672
- location: HPXML::LocationExterior,
6673
6929
  plug_load_type: HPXML::PlugLoadTypeElectricVehicleCharging,
6674
6930
  kWh_per_year: 1500,
6675
6931
  weekday_fractions: '0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042',
6676
6932
  weekend_fractions: '0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042',
6677
6933
  monthly_multipliers: '1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1')
6678
6934
  hpxml.plug_loads.add(id: 'PlugLoadMisc4',
6679
- location: HPXML::LocationExterior,
6680
6935
  plug_load_type: HPXML::PlugLoadTypeWellPump,
6681
6936
  kWh_per_year: 475,
6682
6937
  weekday_fractions: '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065',
@@ -6696,14 +6951,13 @@ def set_hpxml_plug_loads(hpxml_file, hpxml)
6696
6951
  end
6697
6952
  end
6698
6953
  if hpxml_file.include?('ASHRAE_Standard_140')
6699
- hpxml.plug_loads[0].weekday_fractions = '0.020, 0.020, 0.020, 0.020, 0.020, 0.034, 0.043, 0.085, 0.050, 0.030, 0.030, 0.041, 0.030, 0.025, 0.026, 0.026, 0.039, 0.042, 0.045, 0.070, 0.070, 0.073, 0.073, 0.066'
6700
- hpxml.plug_loads[0].weekend_fractions = '0.020, 0.020, 0.020, 0.020, 0.020, 0.034, 0.043, 0.085, 0.050, 0.030, 0.030, 0.041, 0.030, 0.025, 0.026, 0.026, 0.039, 0.042, 0.045, 0.070, 0.070, 0.073, 0.073, 0.066'
6954
+ hpxml.plug_loads[0].weekday_fractions = '0.0203, 0.0203, 0.0203, 0.0203, 0.0203, 0.0339, 0.0426, 0.0852, 0.0497, 0.0304, 0.0304, 0.0406, 0.0304, 0.0254, 0.0264, 0.0264, 0.0386, 0.0416, 0.0447, 0.0700, 0.0700, 0.0731, 0.0731, 0.0660'
6955
+ hpxml.plug_loads[0].weekend_fractions = '0.0203, 0.0203, 0.0203, 0.0203, 0.0203, 0.0339, 0.0426, 0.0852, 0.0497, 0.0304, 0.0304, 0.0406, 0.0304, 0.0254, 0.0264, 0.0264, 0.0386, 0.0416, 0.0447, 0.0700, 0.0700, 0.0731, 0.0731, 0.0660'
6701
6956
  hpxml.plug_loads[0].monthly_multipliers = '1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0'
6702
6957
  elsif ['base-misc-defaults.xml'].include? hpxml_file
6703
6958
  hpxml.plug_loads[0].weekday_fractions = nil
6704
6959
  hpxml.plug_loads[0].weekend_fractions = nil
6705
6960
  hpxml.plug_loads[0].monthly_multipliers = nil
6706
- hpxml.plug_loads[0].location = nil
6707
6961
  end
6708
6962
  end
6709
6963
 
@@ -6711,7 +6965,6 @@ def set_hpxml_fuel_loads(hpxml_file, hpxml)
6711
6965
  if ['base-misc-loads-large-uncommon.xml',
6712
6966
  'base-misc-usage-multiplier.xml'].include? hpxml_file
6713
6967
  hpxml.fuel_loads.add(id: 'FuelLoadMisc',
6714
- location: HPXML::LocationExterior,
6715
6968
  fuel_load_type: HPXML::FuelLoadTypeGrill,
6716
6969
  fuel_type: HPXML::FuelTypePropane,
6717
6970
  therm_per_year: 25,
@@ -6726,9 +6979,10 @@ def set_hpxml_fuel_loads(hpxml_file, hpxml)
6726
6979
  weekend_fractions: '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065',
6727
6980
  monthly_multipliers: '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
6728
6981
  hpxml.fuel_loads.add(id: 'FuelLoadMisc3',
6729
- location: HPXML::LocationInterior,
6730
6982
  fuel_load_type: HPXML::FuelLoadTypeFireplace,
6731
6983
  fuel_type: HPXML::FuelTypeWoodCord,
6984
+ frac_sensible: 0.5,
6985
+ frac_latent: 0.1,
6732
6986
  therm_per_year: 55,
6733
6987
  weekday_fractions: '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065',
6734
6988
  weekend_fractions: '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065',
@@ -6763,6 +7017,205 @@ def download_epws
6763
7017
  exit!
6764
7018
  end
6765
7019
 
7020
+ def get_elements_from_sample_files(hpxml_docs)
7021
+ elements_being_used = []
7022
+ hpxml_docs.each do |xml, hpxml_doc|
7023
+ root = XMLHelper.get_element(hpxml_doc, '/HPXML')
7024
+ root.each_node do |node|
7025
+ next unless node.is_a?(Oga::XML::Element)
7026
+
7027
+ ancestors = []
7028
+ node.each_ancestor do |parent_node|
7029
+ ancestors << ['h:', parent_node.name].join()
7030
+ end
7031
+ parent_element_xpath = ancestors.reverse
7032
+ child_element_xpath = ['h:', node.name].join()
7033
+ element_xpath = [parent_element_xpath, child_element_xpath].join('/')
7034
+
7035
+ next if element_xpath.include? 'extension'
7036
+
7037
+ elements_being_used << element_xpath if not elements_being_used.include? element_xpath
7038
+ end
7039
+ end
7040
+
7041
+ return elements_being_used
7042
+ end
7043
+
7044
+ def create_schematron_hpxml_validator(hpxml_docs)
7045
+ elements_in_sample_files = get_elements_from_sample_files(hpxml_docs)
7046
+
7047
+ base_elements_xsd = File.read(File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'BaseElements.xsd'))
7048
+ base_elements_xsd_doc = Oga.parse_xml(base_elements_xsd)
7049
+
7050
+ # construct dictionary for enumerations and min/max values of HPXML data types
7051
+ hpxml_data_types_xsd = File.read(File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'HPXMLDataTypes.xsd'))
7052
+ hpxml_data_types_xsd_doc = Oga.parse_xml(hpxml_data_types_xsd)
7053
+ hpxml_data_types_dict = {}
7054
+ hpxml_data_types_xsd_doc.xpath('//xs:simpleType | //xs:complexType').each do |simple_type_element|
7055
+ enums = []
7056
+ simple_type_element.xpath('xs:restriction/xs:enumeration').each do |enum|
7057
+ enums << enum.get('value')
7058
+ end
7059
+ minInclusive_element = simple_type_element.at_xpath('xs:restriction/xs:minInclusive')
7060
+ min_inclusive = minInclusive_element.get('value') if not minInclusive_element.nil?
7061
+ maxInclusive_element = simple_type_element.at_xpath('xs:restriction/xs:maxInclusive')
7062
+ max_inclusive = maxInclusive_element.get('value') if not maxInclusive_element.nil?
7063
+ minExclusive_element = simple_type_element.at_xpath('xs:restriction/xs:minExclusive')
7064
+ min_exclusive = minExclusive_element.get('value') if not minExclusive_element.nil?
7065
+ maxExclusive_element = simple_type_element.at_xpath('xs:restriction/xs:maxExclusive')
7066
+ max_exclusive = maxExclusive_element.get('value') if not maxExclusive_element.nil?
7067
+
7068
+ simple_type_element_name = simple_type_element.get('name')
7069
+ hpxml_data_types_dict[simple_type_element_name] = {}
7070
+ hpxml_data_types_dict[simple_type_element_name][:enums] = enums
7071
+ hpxml_data_types_dict[simple_type_element_name][:min_inclusive] = min_inclusive
7072
+ hpxml_data_types_dict[simple_type_element_name][:max_inclusive] = max_inclusive
7073
+ hpxml_data_types_dict[simple_type_element_name][:min_exclusive] = min_exclusive
7074
+ hpxml_data_types_dict[simple_type_element_name][:max_exclusive] = max_exclusive
7075
+ end
7076
+
7077
+ # construct HPXMLvalidator.xml
7078
+ hpxml_validator = XMLHelper.create_doc(version = '1.0', encoding = 'UTF-8')
7079
+ root = XMLHelper.add_element(hpxml_validator, 'sch:schema')
7080
+ XMLHelper.add_attribute(root, 'xmlns:sch', 'http://purl.oclc.org/dsdl/schematron')
7081
+ XMLHelper.add_element(root, 'sch:title', 'HPXML Schematron Validator: HPXML.xsd', :string)
7082
+ name_space = XMLHelper.add_element(root, 'sch:ns')
7083
+ XMLHelper.add_attribute(name_space, 'uri', 'http://hpxmlonline.com/2019/10')
7084
+ XMLHelper.add_attribute(name_space, 'prefix', 'h')
7085
+ pattern = XMLHelper.add_element(root, 'sch:pattern')
7086
+
7087
+ # construct complexType and group elements dictionary
7088
+ complex_type_or_group_dict = {}
7089
+ ['//xs:complexType', '//xs:group', '//xs:element'].each do |param|
7090
+ base_elements_xsd_doc.xpath(param).each do |param_type|
7091
+ next if param_type.name == 'element' && (not ['XMLTransactionHeaderInformation', 'ProjectStatus', 'SoftwareInfo'].include?(param_type.get('name')))
7092
+ next if param_type.get('name').nil?
7093
+
7094
+ param_type_name = param_type.get('name')
7095
+ complex_type_or_group_dict[param_type_name] = {}
7096
+
7097
+ param_type.each_node do |element|
7098
+ next unless element.is_a? Oga::XML::Element
7099
+ next unless (element.name == 'element' || element.name == 'group')
7100
+ next if element.name == 'element' && (element.get('name').nil? && element.get('ref').nil?)
7101
+ next if element.name == 'group' && element.get('ref').nil?
7102
+
7103
+ ancestors = []
7104
+ element.each_ancestor do |node|
7105
+ next if node.get('name').nil?
7106
+ next if node.get('name') == param_type.get('name') # exclude complexType name from element xpath
7107
+
7108
+ ancestors << node.get('name')
7109
+ end
7110
+
7111
+ parent_element_names = ancestors.reverse
7112
+ if element.name == 'element'
7113
+ child_element_name = element.get('name')
7114
+ child_element_name = element.get('ref') if child_element_name.nil? # Backup
7115
+ element_type = element.get('type')
7116
+ element_type = element.get('ref') if element_type.nil? # Backup
7117
+ elsif element.name == 'group'
7118
+ child_element_name = nil # exclude group name from the element's xpath
7119
+ element_type = element.get('ref')
7120
+ end
7121
+ element_xpath = parent_element_names.push(child_element_name)
7122
+ complex_type_or_group_dict[param_type_name][element_xpath] = element_type
7123
+ end
7124
+ end
7125
+ end
7126
+
7127
+ element_xpaths = {}
7128
+ top_level_elements_of_interest = elements_in_sample_files.map { |e| e.split('/')[1].gsub('h:', '') }.uniq
7129
+ top_level_elements_of_interest.each do |element|
7130
+ top_level_element = []
7131
+ top_level_element << element
7132
+ top_level_element_type = element
7133
+ get_element_full_xpaths(element_xpaths, complex_type_or_group_dict, top_level_element, top_level_element_type)
7134
+ end
7135
+
7136
+ # Add enumeration and min/max numeric values
7137
+ rules = {}
7138
+ element_xpaths.each do |element_xpath, element_type|
7139
+ next if element_type.nil?
7140
+
7141
+ # Skip element xpaths not being used in sample files
7142
+ element_xpath_with_prefix = element_xpath.compact.map { |e| "h:#{e}" }
7143
+ context_xpath = element_xpath_with_prefix.join('/').chomp('/')
7144
+ next unless elements_in_sample_files.any? { |item| item.include? context_xpath }
7145
+
7146
+ hpxml_data_type_name = [element_type, '_simple'].join() # FUTURE: This may need to be improved later since enumeration and minimum/maximum values cannot be guaranteed to always be placed within simpleType.
7147
+ hpxml_data_type = hpxml_data_types_dict[hpxml_data_type_name]
7148
+ hpxml_data_type = hpxml_data_types_dict[element_type] if hpxml_data_type.nil? # Backup
7149
+ if hpxml_data_type.nil?
7150
+ fail "Could not find data type name for '#{element_type}'."
7151
+ end
7152
+
7153
+ next if hpxml_data_type[:enums].empty? && hpxml_data_type[:min_inclusive].nil? && hpxml_data_type[:max_inclusive].nil? && hpxml_data_type[:min_exclusive].nil? && hpxml_data_type[:max_exclusive].nil?
7154
+
7155
+ element_name = context_xpath.split('/')[-1]
7156
+ context_xpath = context_xpath.split('/')[0..-2].join('/').chomp('/').prepend('/h:HPXML/')
7157
+ rule = rules[context_xpath]
7158
+ if rule.nil?
7159
+ # Need new rule
7160
+ rule = XMLHelper.add_element(pattern, 'sch:rule')
7161
+ XMLHelper.add_attribute(rule, 'context', context_xpath)
7162
+ rules[context_xpath] = rule
7163
+ end
7164
+
7165
+ if not hpxml_data_type[:enums].empty?
7166
+ assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be \"#{hpxml_data_type[:enums].join('" or "')}\"", :string)
7167
+ XMLHelper.add_attribute(assertion, 'role', 'ERROR')
7168
+ XMLHelper.add_attribute(assertion, 'test', "#{element_name}[#{hpxml_data_type[:enums].map { |e| "text()=\"#{e}\"" }.join(' or ')}] or not(#{element_name})")
7169
+ else
7170
+ if hpxml_data_type[:min_inclusive]
7171
+ assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be greater than or equal to #{hpxml_data_type[:min_inclusive]}", :string)
7172
+ XMLHelper.add_attribute(assertion, 'role', 'ERROR')
7173
+ XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) &gt;= #{hpxml_data_type[:min_inclusive]} or not(#{element_name})")
7174
+ end
7175
+ if hpxml_data_type[:max_inclusive]
7176
+ assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be less than or equal to #{hpxml_data_type[:max_inclusive]}", :string)
7177
+ XMLHelper.add_attribute(assertion, 'role', 'ERROR')
7178
+ XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) &lt;= #{hpxml_data_type[:max_inclusive]} or not(#{element_name})")
7179
+ end
7180
+ if hpxml_data_type[:min_exclusive]
7181
+ assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be greater than #{hpxml_data_type[:min_exclusive]}", :string)
7182
+ XMLHelper.add_attribute(assertion, 'role', 'ERROR')
7183
+ XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) &gt; #{hpxml_data_type[:min_exclusive]} or not(#{element_name})")
7184
+ end
7185
+ if hpxml_data_type[:max_exclusive]
7186
+ assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be less than #{hpxml_data_type[:max_exclusive]}", :string)
7187
+ XMLHelper.add_attribute(assertion, 'role', 'ERROR')
7188
+ XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) &lt; #{hpxml_data_type[:max_exclusive]} or not(#{element_name})")
7189
+ end
7190
+ end
7191
+ end
7192
+
7193
+ XMLHelper.write_file(hpxml_validator, File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'HPXMLvalidator.xml'))
7194
+ end
7195
+
7196
+ def get_element_full_xpaths(element_xpaths, complex_type_or_group_dict, element_xpath, element_type)
7197
+ if not complex_type_or_group_dict.keys.include? element_type
7198
+ return element_xpaths[element_xpath] = element_type
7199
+ else
7200
+ complex_type_or_group = deep_copy_object(complex_type_or_group_dict[element_type])
7201
+ complex_type_or_group.each do |k, v|
7202
+ child_element_xpath = k.unshift(element_xpath).flatten!
7203
+ child_element_type = v
7204
+
7205
+ if not complex_type_or_group_dict.keys.include? child_element_type
7206
+ element_xpaths[child_element_xpath] = child_element_type
7207
+ next
7208
+ end
7209
+
7210
+ get_element_full_xpaths(element_xpaths, complex_type_or_group_dict, child_element_xpath, child_element_type)
7211
+ end
7212
+ end
7213
+ end
7214
+
7215
+ def deep_copy_object(obj)
7216
+ return Marshal.load(Marshal.dump(obj))
7217
+ end
7218
+
6766
7219
  command_list = [:update_measures, :cache_weather, :create_release_zips, :download_weather]
6767
7220
 
6768
7221
  def display_usage(command_list)
@@ -6788,8 +7241,15 @@ if ARGV[0].to_sym == :update_measures
6788
7241
  ENV['HOME'] = 'C:' if !ENV['HOME'].nil? && ENV['HOME'].start_with?('U:')
6789
7242
  ENV['HOMEDRIVE'] = 'C:\\' if !ENV['HOMEDRIVE'].nil? && ENV['HOMEDRIVE'].start_with?('U:')
6790
7243
 
6791
- create_osws
6792
- create_hpxmls
7244
+ # Create sample/test OSWs
7245
+ create_osws()
7246
+
7247
+ # Create sample/test HPXMLs
7248
+ hpxml_docs = create_hpxmls()
7249
+
7250
+ # Create Schematron file that reflects HPXML schema
7251
+ puts 'Generating HPXMLvalidator.xml...'
7252
+ create_schematron_hpxml_validator(hpxml_docs)
6793
7253
 
6794
7254
  # Apply rubocop
6795
7255
  cops = ['Layout',
@@ -6847,17 +7307,21 @@ if ARGV[0].to_sym == :download_weather
6847
7307
  end
6848
7308
 
6849
7309
  if ARGV[0].to_sym == :create_release_zips
6850
- # Generate documentation
6851
- puts 'Generating documentation...'
6852
- command = 'sphinx-build -b singlehtml docs/source documentation'
7310
+ require_relative 'HPXMLtoOpenStudio/resources/version'
7311
+
7312
+ release_map = { File.join(File.dirname(__FILE__), "OpenStudio-HPXML-v#{Version::OS_HPXML_Version}-minimal.zip") => false,
7313
+ File.join(File.dirname(__FILE__), "OpenStudio-HPXML-v#{Version::OS_HPXML_Version}-full.zip") => true }
7314
+
7315
+ release_map.keys.each do |zip_path|
7316
+ File.delete(zip_path) if File.exist? zip_path
7317
+ end
7318
+
7319
+ # Only include files under git version control
7320
+ command = 'git ls-files'
6853
7321
  begin
6854
- `#{command}`
6855
- if not File.exist? File.join(File.dirname(__FILE__), 'documentation', 'index.html')
6856
- puts 'Documentation was not successfully generated. Aborting...'
6857
- exit!
6858
- end
7322
+ git_files = `#{command}`
6859
7323
  rescue
6860
- puts "Command failed: '#{command}'. Perhaps sphinx needs to be installed?"
7324
+ puts "Command failed: '#{command}'. Perhaps git needs to be installed?"
6861
7325
  exit!
6862
7326
  end
6863
7327
 
@@ -6865,50 +7329,69 @@ if ARGV[0].to_sym == :create_release_zips
6865
7329
  'HPXMLtoOpenStudio/resources/*.*',
6866
7330
  'SimulationOutputReport/measure.*',
6867
7331
  'SimulationOutputReport/resources/*.*',
7332
+ 'BuildResidentialHPXML/measure.*',
7333
+ 'BuildResidentialHPXML/resources/*.*',
6868
7334
  'weather/*.*',
6869
7335
  'workflow/*.*',
6870
7336
  'workflow/sample_files/*.xml',
7337
+ 'workflow/tests/*.rb',
7338
+ 'workflow/tests/ASHRAE_Standard_140/*.xml',
6871
7339
  'documentation/index.html',
6872
7340
  'documentation/_static/**/*.*']
6873
7341
 
6874
- # Only include files under git version control
6875
- command = 'git ls-files'
6876
- begin
6877
- git_files = `#{command}`
6878
- rescue
6879
- puts "Command failed: '#{command}'. Perhaps git needs to be installed?"
6880
- exit!
6881
- end
6882
-
6883
- release_map = { File.join(File.dirname(__FILE__), 'release-minimal.zip') => false,
6884
- File.join(File.dirname(__FILE__), 'release-full.zip') => true }
7342
+ if not ENV['CI']
7343
+ # Run ASHRAE 140 files
7344
+ puts 'Running ASHRAE 140 tests (this will take a minute)...'
7345
+ command = "#{OpenStudio.getOpenStudioCLI} workflow/tests/hpxml_translator_test.rb --name=test_ashrae_140 > log.txt"
7346
+ system(command)
7347
+ results_csv_path = 'workflow/tests/results/results_ashrae_140.csv'
7348
+ if not File.exist? results_csv_path
7349
+ puts 'ASHRAE 140 results CSV file not generated. Aborting...'
7350
+ exit!
7351
+ end
7352
+ File.delete('log.txt')
6885
7353
 
6886
- release_map.keys.each do |zip_path|
6887
- File.delete(zip_path) if File.exist? zip_path
6888
- end
7354
+ # Generate documentation
7355
+ puts 'Generating documentation...'
7356
+ command = 'sphinx-build -b singlehtml docs/source documentation'
7357
+ begin
7358
+ `#{command}`
7359
+ if not File.exist? File.join(File.dirname(__FILE__), 'documentation', 'index.html')
7360
+ puts 'Documentation was not successfully generated. Aborting...'
7361
+ exit!
7362
+ end
7363
+ rescue
7364
+ puts "Command failed: '#{command}'. Perhaps sphinx needs to be installed?"
7365
+ exit!
7366
+ end
7367
+ FileUtils.rm_r(File.join(File.dirname(__FILE__), 'documentation', '_static', 'fonts'))
6889
7368
 
6890
- # Check if we need to download weather files for the full release zip
6891
- num_epws_expected = 1011
6892
- num_epws_local = 0
6893
- files.each do |f|
6894
- Dir[f].each do |file|
6895
- next unless file.end_with? '.epw'
7369
+ # Check if we need to download weather files for the full release zip
7370
+ num_epws_expected = 1011
7371
+ num_epws_local = 0
7372
+ files.each do |f|
7373
+ Dir[f].each do |file|
7374
+ next unless file.end_with? '.epw'
6896
7375
 
6897
- num_epws_local += 1
7376
+ num_epws_local += 1
7377
+ end
6898
7378
  end
6899
- end
6900
7379
 
6901
- # Make sure we have the full set of weather files
6902
- if num_epws_local < num_epws_expected
6903
- puts 'Fetching all weather files...'
6904
- command = "#{OpenStudio.getOpenStudioCLI} #{__FILE__} download_weather"
6905
- log = `#{command}`
7380
+ # Make sure we have the full set of weather files
7381
+ if num_epws_local < num_epws_expected
7382
+ puts 'Fetching all weather files...'
7383
+ command = "#{OpenStudio.getOpenStudioCLI} #{__FILE__} download_weather"
7384
+ log = `#{command}`
7385
+ end
6906
7386
  end
6907
7387
 
6908
7388
  # Create zip files
6909
7389
  release_map.each do |zip_path, include_all_epws|
6910
7390
  puts "Creating #{zip_path}..."
6911
7391
  zip = OpenStudio::ZipFile.new(zip_path, false)
7392
+ if not ENV['CI']
7393
+ zip.addFile(results_csv_path, File.join('OpenStudio-HPXML', results_csv_path))
7394
+ end
6912
7395
  files.each do |f|
6913
7396
  Dir[f].each do |file|
6914
7397
  if file.start_with? 'documentation'
@@ -6930,7 +7413,9 @@ if ARGV[0].to_sym == :create_release_zips
6930
7413
  end
6931
7414
 
6932
7415
  # Cleanup
6933
- FileUtils.rm_r(File.join(File.dirname(__FILE__), 'documentation'))
7416
+ if not ENV['CI']
7417
+ FileUtils.rm_r(File.join(File.dirname(__FILE__), 'documentation'))
7418
+ end
6934
7419
 
6935
7420
  puts 'Done.'
6936
7421
  end