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
@@ -6,89 +6,157 @@ class HPXMLDefaults
6
6
  apply_site(hpxml)
7
7
  apply_building_occupancy(hpxml, nbeds)
8
8
  apply_building_construction(hpxml, cfa, nbeds)
9
+ apply_infiltration(hpxml)
9
10
  apply_attics(hpxml)
10
11
  apply_foundations(hpxml)
11
- apply_infiltration(hpxml)
12
12
  apply_roofs(hpxml)
13
- apply_walls(hpxml)
14
13
  apply_rim_joists(hpxml)
14
+ apply_walls(hpxml)
15
+ apply_foundation_walls(hpxml)
16
+ apply_slabs(hpxml)
15
17
  apply_windows(hpxml)
16
18
  apply_skylights(hpxml)
17
19
  apply_hvac(hpxml)
20
+ apply_hvac_control(hpxml)
18
21
  apply_hvac_distribution(hpxml, ncfl, ncfl_ag)
22
+ apply_ventilation_fans(hpxml)
19
23
  apply_water_heaters(hpxml, nbeds, eri_version)
20
24
  apply_hot_water_distribution(hpxml, cfa, ncfl, has_uncond_bsmnt)
21
25
  apply_water_fixtures(hpxml)
22
26
  apply_solar_thermal_systems(hpxml)
23
- apply_ventilation_fans(hpxml)
27
+ apply_appliances(hpxml, nbeds, eri_version)
28
+ apply_lighting(hpxml)
24
29
  apply_ceiling_fans(hpxml, nbeds)
30
+ apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
25
31
  apply_plug_loads(hpxml, cfa, nbeds)
26
32
  apply_fuel_loads(hpxml, cfa, nbeds)
27
- apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
28
- apply_appliances(hpxml, nbeds, eri_version)
29
- apply_lighting(hpxml)
30
33
  apply_pv_systems(hpxml)
34
+ apply_generators(hpxml)
31
35
  end
32
36
 
33
37
  private
34
38
 
35
39
  def self.apply_header(hpxml, epw_file, runner)
36
- hpxml.header.timestep = 60 if hpxml.header.timestep.nil?
40
+ if hpxml.header.timestep.nil?
41
+ hpxml.header.timestep = 60
42
+ hpxml.header.timestep_isdefaulted = true
43
+ end
44
+
45
+ if hpxml.header.sim_begin_month.nil?
46
+ hpxml.header.sim_begin_month = 1
47
+ hpxml.header.sim_begin_month_isdefaulted = true
48
+ end
49
+ if hpxml.header.sim_begin_day.nil?
50
+ hpxml.header.sim_begin_day = 1
51
+ hpxml.header.sim_begin_day_isdefaulted = true
52
+ end
53
+ if hpxml.header.sim_end_month.nil?
54
+ hpxml.header.sim_end_month = 12
55
+ hpxml.header.sim_end_month_isdefaulted = true
56
+ end
57
+ if hpxml.header.sim_end_day.nil?
58
+ hpxml.header.sim_end_day = 31
59
+ hpxml.header.sim_end_day_isdefaulted = true
60
+ end
37
61
 
38
- hpxml.header.sim_begin_month = 1 if hpxml.header.sim_begin_month.nil?
39
- hpxml.header.sim_begin_day_of_month = 1 if hpxml.header.sim_begin_day_of_month.nil?
40
- hpxml.header.sim_end_month = 12 if hpxml.header.sim_end_month.nil?
41
- hpxml.header.sim_end_day_of_month = 31 if hpxml.header.sim_end_day_of_month.nil?
42
62
  if epw_file.startDateActualYear.is_initialized # AMY
43
63
  if not hpxml.header.sim_calendar_year.nil?
44
- runner.registerWarning("Overriding Calendar Year (#{hpxml.header.sim_calendar_year}) with AMY year (#{epw_file.startDateActualYear.get}).") if hpxml.header.sim_calendar_year != epw_file.startDateActualYear.get
64
+ if hpxml.header.sim_calendar_year != epw_file.startDateActualYear.get
65
+ runner.registerWarning("Overriding Calendar Year (#{hpxml.header.sim_calendar_year}) with AMY year (#{epw_file.startDateActualYear.get}).")
66
+ hpxml.header.sim_calendar_year = epw_file.startDateActualYear.get
67
+ hpxml.header.sim_calendar_year_isdefaulted = true
68
+ end
69
+ else
70
+ hpxml.header.sim_calendar_year = epw_file.startDateActualYear.get
71
+ hpxml.header.sim_calendar_year_isdefaulted = true
45
72
  end
46
- hpxml.header.sim_calendar_year = epw_file.startDateActualYear.get
47
73
  else
48
- hpxml.header.sim_calendar_year = 2007 if hpxml.header.sim_calendar_year.nil? # For consistency with SAM utility bill calculations
74
+ if hpxml.header.sim_calendar_year.nil?
75
+ hpxml.header.sim_calendar_year = 2007 # For consistency with SAM utility bill calculations
76
+ hpxml.header.sim_calendar_year_isdefaulted = true
77
+ end
78
+ end
79
+
80
+ if hpxml.header.dst_enabled.nil?
81
+ hpxml.header.dst_enabled = true # Assume DST since it occurs in most US locations
82
+ hpxml.header.dst_enabled_isdefaulted = true
49
83
  end
50
84
 
51
- hpxml.header.dst_enabled = true if hpxml.header.dst_enabled.nil? # Assume DST since it occurs in most US locations
52
85
  if hpxml.header.dst_enabled
53
- if hpxml.header.dst_begin_month.nil? || hpxml.header.dst_begin_day_of_month.nil? || hpxml.header.dst_end_month.nil? || hpxml.header.dst_end_day_of_month.nil?
86
+ if hpxml.header.dst_begin_month.nil? || hpxml.header.dst_begin_day.nil? || hpxml.header.dst_end_month.nil? || hpxml.header.dst_end_day.nil?
54
87
  if epw_file.daylightSavingStartDate.is_initialized && epw_file.daylightSavingEndDate.is_initialized
55
88
  # Use weather file DST dates if available
56
89
  dst_start_date = epw_file.daylightSavingStartDate.get
57
90
  dst_end_date = epw_file.daylightSavingEndDate.get
58
91
  hpxml.header.dst_begin_month = dst_start_date.monthOfYear.value
59
- hpxml.header.dst_begin_day_of_month = dst_start_date.dayOfMonth
92
+ hpxml.header.dst_begin_day = dst_start_date.dayOfMonth
60
93
  hpxml.header.dst_end_month = dst_end_date.monthOfYear.value
61
- hpxml.header.dst_end_day_of_month = dst_end_date.dayOfMonth
94
+ hpxml.header.dst_end_day = dst_end_date.dayOfMonth
62
95
  else
63
96
  # Roughly average US dates according to https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States
64
97
  hpxml.header.dst_begin_month = 3
65
- hpxml.header.dst_begin_day_of_month = 12
98
+ hpxml.header.dst_begin_day = 12
66
99
  hpxml.header.dst_end_month = 11
67
- hpxml.header.dst_end_day_of_month = 5
100
+ hpxml.header.dst_end_day = 5
68
101
  end
102
+ hpxml.header.dst_begin_month_isdefaulted = true
103
+ hpxml.header.dst_begin_day_isdefaulted = true
104
+ hpxml.header.dst_end_month_isdefaulted = true
105
+ hpxml.header.dst_end_day_isdefaulted = true
69
106
  end
70
107
  end
71
108
 
72
- hpxml.header.allow_increased_fixed_capacities = false if hpxml.header.allow_increased_fixed_capacities.nil?
73
- hpxml.header.use_max_load_for_heat_pumps = true if hpxml.header.use_max_load_for_heat_pumps.nil?
109
+ if hpxml.header.allow_increased_fixed_capacities.nil?
110
+ hpxml.header.allow_increased_fixed_capacities = false
111
+ hpxml.header.allow_increased_fixed_capacities_isdefaulted = true
112
+ end
113
+ if hpxml.header.use_max_load_for_heat_pumps.nil?
114
+ hpxml.header.use_max_load_for_heat_pumps = true
115
+ hpxml.header.use_max_load_for_heat_pumps_isdefaulted = true
116
+ end
74
117
  end
75
118
 
76
119
  def self.apply_site(hpxml)
77
- hpxml.site.site_type = HPXML::SiteTypeSuburban if hpxml.site.site_type.nil?
78
- hpxml.site.shelter_coefficient = Airflow.get_default_shelter_coefficient() if hpxml.site.shelter_coefficient.nil?
120
+ if hpxml.site.site_type.nil?
121
+ hpxml.site.site_type = HPXML::SiteTypeSuburban
122
+ hpxml.site.site_type_isdefaulted = true
123
+ end
124
+
125
+ if hpxml.site.shelter_coefficient.nil?
126
+ hpxml.site.shelter_coefficient = Airflow.get_default_shelter_coefficient()
127
+ hpxml.site.shelter_coefficient_isdefaulted = true
128
+ end
79
129
  end
80
130
 
81
131
  def self.apply_building_occupancy(hpxml, nbeds)
82
- hpxml.building_occupancy.number_of_residents = Geometry.get_occupancy_default_num(nbeds) if hpxml.building_occupancy.number_of_residents.nil?
132
+ if hpxml.building_occupancy.number_of_residents.nil?
133
+ hpxml.building_occupancy.number_of_residents = Geometry.get_occupancy_default_num(nbeds)
134
+ hpxml.building_occupancy.number_of_residents_isdefaulted = true
135
+ end
83
136
  end
84
137
 
85
138
  def self.apply_building_construction(hpxml, cfa, nbeds)
86
- if hpxml.building_construction.conditioned_building_volume.nil?
139
+ if hpxml.building_construction.conditioned_building_volume.nil? && hpxml.building_construction.average_ceiling_height.nil?
140
+ hpxml.building_construction.average_ceiling_height = 8.0
141
+ hpxml.building_construction.average_ceiling_height_isdefaulted = true
87
142
  hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height
143
+ hpxml.building_construction.conditioned_building_volume_isdefaulted = true
144
+ elsif hpxml.building_construction.conditioned_building_volume.nil?
145
+ hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height
146
+ hpxml.building_construction.conditioned_building_volume_isdefaulted = true
147
+ elsif hpxml.building_construction.average_ceiling_height.nil?
148
+ hpxml.building_construction.average_ceiling_height = hpxml.building_construction.conditioned_building_volume / cfa
149
+ hpxml.building_construction.average_ceiling_height_isdefaulted = true
150
+ end
151
+
152
+ if hpxml.building_construction.number_of_bathrooms.nil?
153
+ hpxml.building_construction.number_of_bathrooms = Float(Waterheater.get_default_num_bathrooms(nbeds)).to_i
154
+ hpxml.building_construction.number_of_bathrooms_isdefaulted = true
88
155
  end
89
- hpxml.building_construction.number_of_bathrooms = Float(Waterheater.get_default_num_bathrooms(nbeds)).to_i if hpxml.building_construction.number_of_bathrooms.nil?
156
+
90
157
  if hpxml.building_construction.has_flue_or_chimney.nil?
91
158
  hpxml.building_construction.has_flue_or_chimney = false
159
+ hpxml.building_construction.has_flue_or_chimney_isdefaulted = true
92
160
  hpxml.heating_systems.each do |heating_system|
93
161
  if [HPXML::HVACTypeFurnace, HPXML::HVACTypeBoiler, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeStove, HPXML::HVACTypeFixedHeater].include? heating_system.heating_system_type
94
162
  if not heating_system.heating_efficiency_afue.nil?
@@ -116,6 +184,29 @@ class HPXMLDefaults
116
184
  end
117
185
  end
118
186
 
187
+ def self.apply_infiltration(hpxml)
188
+ measurements = []
189
+ infil_volume = nil
190
+ hpxml.air_infiltration_measurements.each do |measurement|
191
+ is_ach = ((measurement.unit_of_measure == HPXML::UnitsACH) && !measurement.house_pressure.nil?)
192
+ is_cfm = ((measurement.unit_of_measure == HPXML::UnitsCFM) && !measurement.house_pressure.nil?)
193
+ is_nach = (measurement.unit_of_measure == HPXML::UnitsACHNatural)
194
+ next unless (is_ach || is_cfm || is_nach)
195
+
196
+ measurements << measurement
197
+ next if measurement.infiltration_volume.nil?
198
+
199
+ infil_volume = measurement.infiltration_volume
200
+ end
201
+ if infil_volume.nil?
202
+ infil_volume = hpxml.building_construction.conditioned_building_volume
203
+ measurements.each do |measurement|
204
+ measurement.infiltration_volume = infil_volume
205
+ measurement.infiltration_volume_isdefaulted = true
206
+ end
207
+ end
208
+ end
209
+
119
210
  def self.apply_attics(hpxml)
120
211
  return unless hpxml.has_space_type(HPXML::LocationAtticVented)
121
212
 
@@ -132,6 +223,7 @@ class HPXMLDefaults
132
223
  end
133
224
  if vented_attic.vented_attic_sla.nil? && vented_attic.vented_attic_ach.nil?
134
225
  vented_attic.vented_attic_sla = Airflow.get_default_vented_attic_sla()
226
+ vented_attic.vented_attic_sla_isdefaulted = true
135
227
  end
136
228
  end
137
229
 
@@ -151,28 +243,7 @@ class HPXMLDefaults
151
243
  end
152
244
  if vented_crawl.vented_crawlspace_sla.nil?
153
245
  vented_crawl.vented_crawlspace_sla = Airflow.get_default_vented_crawl_sla()
154
- end
155
- end
156
-
157
- def self.apply_infiltration(hpxml)
158
- measurements = []
159
- infil_volume = nil
160
- hpxml.air_infiltration_measurements.each do |measurement|
161
- is_ach = ((measurement.unit_of_measure == HPXML::UnitsACH) && !measurement.house_pressure.nil?)
162
- is_cfm = ((measurement.unit_of_measure == HPXML::UnitsCFM) && !measurement.house_pressure.nil?)
163
- is_nach = (measurement.unit_of_measure == HPXML::UnitsACHNatural)
164
- next unless (is_ach || is_cfm || is_nach)
165
-
166
- measurements << measurement
167
- next if measurement.infiltration_volume.nil?
168
-
169
- infil_volume = measurement.infiltration_volume
170
- end
171
- if infil_volume.nil?
172
- infil_volume = hpxml.building_construction.conditioned_building_volume
173
- measurements.each do |measurement|
174
- measurement.infiltration_volume = infil_volume
175
- end
246
+ vented_crawl.vented_crawlspace_sla_isdefaulted = true
176
247
  end
177
248
  end
178
249
 
@@ -180,11 +251,44 @@ class HPXMLDefaults
180
251
  hpxml.roofs.each do |roof|
181
252
  if roof.roof_type.nil?
182
253
  roof.roof_type = HPXML::RoofTypeAsphaltShingles
254
+ roof.roof_type_isdefaulted = true
255
+ end
256
+ if roof.emittance.nil?
257
+ roof.emittance = 0.90
258
+ roof.emittance_isdefaulted = true
259
+ end
260
+ if roof.radiant_barrier.nil?
261
+ roof.radiant_barrier = false
262
+ roof.radiant_barrier_isdefaulted = true
183
263
  end
184
264
  if roof.roof_color.nil?
185
265
  roof.roof_color = Constructions.get_default_roof_color(roof.roof_type, roof.solar_absorptance)
266
+ roof.roof_color_isdefaulted = true
186
267
  elsif roof.solar_absorptance.nil?
187
268
  roof.solar_absorptance = Constructions.get_default_roof_solar_absorptance(roof.roof_type, roof.roof_color)
269
+ roof.solar_absorptance_isdefaulted = true
270
+ end
271
+ end
272
+ end
273
+
274
+ def self.apply_rim_joists(hpxml)
275
+ hpxml.rim_joists.each do |rim_joist|
276
+ next unless rim_joist.is_exterior
277
+
278
+ if rim_joist.emittance.nil?
279
+ rim_joist.emittance = 0.90
280
+ rim_joist.emittance_isdefaulted = true
281
+ end
282
+ if rim_joist.siding.nil?
283
+ rim_joist.siding = HPXML::SidingTypeWood
284
+ rim_joist.siding_isdefaulted = true
285
+ end
286
+ if rim_joist.color.nil?
287
+ rim_joist.color = Constructions.get_default_wall_color(rim_joist.solar_absorptance)
288
+ rim_joist.color_isdefaulted = true
289
+ elsif rim_joist.solar_absorptance.nil?
290
+ rim_joist.solar_absorptance = Constructions.get_default_wall_solar_absorptance(rim_joist.color)
291
+ rim_joist.solar_absorptance_isdefaulted = true
188
292
  end
189
293
  end
190
294
  end
@@ -193,28 +297,49 @@ class HPXMLDefaults
193
297
  hpxml.walls.each do |wall|
194
298
  next unless wall.is_exterior
195
299
 
300
+ if wall.emittance.nil?
301
+ wall.emittance = 0.90
302
+ wall.emittance_isdefaulted = true
303
+ end
196
304
  if wall.siding.nil?
197
305
  wall.siding = HPXML::SidingTypeWood
306
+ wall.siding_isdefaulted = true
198
307
  end
199
308
  if wall.color.nil?
200
309
  wall.color = Constructions.get_default_wall_color(wall.solar_absorptance)
310
+ wall.color_isdefaulted = true
201
311
  elsif wall.solar_absorptance.nil?
202
312
  wall.solar_absorptance = Constructions.get_default_wall_solar_absorptance(wall.color)
313
+ wall.solar_absorptance_isdefaulted = true
203
314
  end
204
315
  end
205
316
  end
206
317
 
207
- def self.apply_rim_joists(hpxml)
208
- hpxml.rim_joists.each do |rim_joist|
209
- next unless rim_joist.is_exterior
318
+ def self.apply_foundation_walls(hpxml)
319
+ hpxml.foundation_walls.each do |foundation_wall|
320
+ if foundation_wall.thickness.nil?
321
+ foundation_wall.thickness = 8.0
322
+ foundation_wall.thickness_isdefaulted = true
323
+ end
324
+ end
325
+ end
210
326
 
211
- if rim_joist.siding.nil?
212
- rim_joist.siding = HPXML::SidingTypeWood
327
+ def self.apply_slabs(hpxml)
328
+ hpxml.slabs.each do |slab|
329
+ if slab.thickness.nil?
330
+ crawl_slab = [HPXML::LocationCrawlspaceVented, HPXML::LocationCrawlspaceUnvented].include?(slab.interior_adjacent_to)
331
+ slab.thickness = crawl_slab ? 0.0 : 4.0
332
+ slab.thickness_isdefaulted = true
213
333
  end
214
- if rim_joist.color.nil?
215
- rim_joist.color = Constructions.get_default_wall_color(rim_joist.solar_absorptance)
216
- elsif rim_joist.solar_absorptance.nil?
217
- rim_joist.solar_absorptance = Constructions.get_default_wall_solar_absorptance(rim_joist.color)
334
+ conditioned_slab = [HPXML::LocationLivingSpace,
335
+ HPXML::LocationBasementConditioned].include?(slab.interior_adjacent_to)
336
+ if slab.carpet_r_value.nil?
337
+ slab.carpet_r_value = conditioned_slab ? 2.0 : 0.0
338
+ slab.carpet_r_value_isdefaulted = true
339
+ end
340
+ if slab.carpet_fraction.nil?
341
+ slab.carpet_fraction = conditioned_slab ? 0.8 : 0.0
342
+ slab.carpet_fraction_isdefaulted = true
218
343
  end
219
344
  end
220
345
  end
@@ -224,12 +349,15 @@ class HPXMLDefaults
224
349
  hpxml.windows.each do |window|
225
350
  if window.interior_shading_factor_summer.nil?
226
351
  window.interior_shading_factor_summer = default_shade_summer
352
+ window.interior_shading_factor_summer_isdefaulted = true
227
353
  end
228
354
  if window.interior_shading_factor_winter.nil?
229
355
  window.interior_shading_factor_winter = default_shade_winter
356
+ window.interior_shading_factor_winter_isdefaulted = true
230
357
  end
231
358
  if window.fraction_operable.nil?
232
359
  window.fraction_operable = Airflow.get_default_fraction_of_windows_operable()
360
+ window.fraction_operable_isdefaulted = true
233
361
  end
234
362
  end
235
363
  end
@@ -238,9 +366,11 @@ class HPXMLDefaults
238
366
  hpxml.skylights.each do |skylight|
239
367
  if skylight.interior_shading_factor_summer.nil?
240
368
  skylight.interior_shading_factor_summer = 1.0
369
+ skylight.interior_shading_factor_summer_isdefaulted = true
241
370
  end
242
371
  if skylight.interior_shading_factor_winter.nil?
243
372
  skylight.interior_shading_factor_winter = 1.0
373
+ skylight.interior_shading_factor_winter_isdefaulted = true
244
374
  end
245
375
  end
246
376
  end
@@ -248,24 +378,24 @@ class HPXMLDefaults
248
378
  def self.apply_hvac(hpxml)
249
379
  # Default AC/HP compressor type
250
380
  hpxml.cooling_systems.each do |cooling_system|
251
- next unless cooling_system.cooling_system_type == HPXML::HVACTypeCentralAirConditioner
252
381
  next unless cooling_system.compressor_type.nil?
253
382
 
254
- cooling_system.compressor_type = HVAC.get_default_compressor_type(cooling_system.cooling_efficiency_seer)
383
+ cooling_system.compressor_type = HVAC.get_default_compressor_type(cooling_system.cooling_system_type, cooling_system.cooling_efficiency_seer)
384
+ cooling_system.compressor_type_isdefaulted = true
255
385
  end
256
386
  hpxml.heat_pumps.each do |heat_pump|
257
- next unless heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpAirToAir
258
387
  next unless heat_pump.compressor_type.nil?
259
388
 
260
- heat_pump.compressor_type = HVAC.get_default_compressor_type(heat_pump.cooling_efficiency_seer)
389
+ heat_pump.compressor_type = HVAC.get_default_compressor_type(heat_pump.heat_pump_type, heat_pump.cooling_efficiency_seer)
390
+ heat_pump.compressor_type_isdefaulted = true
261
391
  end
262
392
 
263
393
  # Default boiler EAE
264
394
  hpxml.heating_systems.each do |heating_system|
265
- next unless heating_system.heating_system_type == HPXML::HVACTypeBoiler
266
- next unless heating_system.electric_auxiliary_energy.nil?
267
-
268
- heating_system.electric_auxiliary_energy = HVAC.get_electric_auxiliary_energy(heating_system)
395
+ if heating_system.electric_auxiliary_energy.nil?
396
+ heating_system.electric_auxiliary_energy_isdefaulted = true
397
+ heating_system.electric_auxiliary_energy = HVAC.get_default_boiler_eae(heating_system)
398
+ end
269
399
  end
270
400
 
271
401
  # Default AC/HP sensible heat ratio
@@ -280,10 +410,13 @@ class HPXMLDefaults
280
410
  elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
281
411
  cooling_system.cooling_shr = 0.78
282
412
  end
413
+ cooling_system.cooling_shr_isdefaulted = true
283
414
  elsif cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner
284
415
  cooling_system.cooling_shr = 0.65
416
+ cooling_system.cooling_shr_isdefaulted = true
285
417
  elsif cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
286
418
  cooling_system.cooling_shr = 0.73
419
+ cooling_system.cooling_shr_isdefaulted = true
287
420
  end
288
421
  end
289
422
  hpxml.heat_pumps.each do |heat_pump|
@@ -297,22 +430,104 @@ class HPXMLDefaults
297
430
  elsif heat_pump.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
298
431
  heat_pump.cooling_shr = 0.78
299
432
  end
433
+ heat_pump.cooling_shr_isdefaulted = true
300
434
  elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit
301
435
  heat_pump.cooling_shr = 0.73
436
+ heat_pump.cooling_shr_isdefaulted = true
302
437
  elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
303
438
  heat_pump.cooling_shr = 0.732
439
+ heat_pump.cooling_shr_isdefaulted = true
304
440
  end
305
441
  end
306
442
 
307
- # Default GSHP pump/fan power
443
+ # GSHP pump power
308
444
  hpxml.heat_pumps.each do |heat_pump|
309
445
  next unless heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
446
+ next unless heat_pump.pump_watts_per_ton.nil?
447
+
448
+ heat_pump.pump_watts_per_ton = HVAC.get_default_gshp_pump_power()
449
+ heat_pump.pump_watts_per_ton_isdefaulted = true
450
+ end
310
451
 
311
- if heat_pump.fan_watts_per_cfm.nil?
312
- heat_pump.fan_watts_per_cfm = HVAC.get_default_gshp_fan_power()
452
+ # Fan power
453
+ psc_watts_per_cfm = 0.5 # W/cfm, PSC fan
454
+ ecm_watts_per_cfm = 0.375 # W/cfm, ECM fan
455
+ mini_split_ducted_watts_per_cfm = 0.18 # W/cfm, ducted mini split
456
+ mini_split_ductless_watts_per_cfm = 0.07 # W/cfm, ductless mini split
457
+ hpxml.heating_systems.each do |heating_system|
458
+ if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
459
+ if heating_system.fan_watts_per_cfm.nil?
460
+ if heating_system.heating_efficiency_afue > 0.9 # HEScore assumption
461
+ heating_system.fan_watts_per_cfm = ecm_watts_per_cfm
462
+ else
463
+ heating_system.fan_watts_per_cfm = psc_watts_per_cfm
464
+ end
465
+ heating_system.fan_watts_per_cfm_isdefaulted = true
466
+ end
467
+ elsif [HPXML::HVACTypeStove].include? heating_system.heating_system_type
468
+ if heating_system.fan_watts.nil?
469
+ heating_system.fan_watts = 40.0 # W
470
+ heating_system.fan_watts_isdefaulted = true
471
+ end
472
+ elsif [HPXML::HVACTypeWallFurnace,
473
+ HPXML::HVACTypeFloorFurnace,
474
+ HPXML::HVACTypePortableHeater,
475
+ HPXML::HVACTypeFixedHeater,
476
+ HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
477
+ if heating_system.fan_watts.nil?
478
+ heating_system.fan_watts = 0.0 # W/cfm, assume no fan power
479
+ heating_system.fan_watts_isdefaulted = true
480
+ end
481
+ end
482
+ end
483
+ hpxml.cooling_systems.each do |cooling_system|
484
+ next unless cooling_system.fan_watts_per_cfm.nil?
485
+
486
+ if (not cooling_system.attached_heating_system.nil?) && (not cooling_system.attached_heating_system.fan_watts_per_cfm.nil?)
487
+ cooling_system.fan_watts_per_cfm = cooling_system.attached_heating_system.fan_watts_per_cfm
488
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
489
+ elsif [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
490
+ if cooling_system.cooling_efficiency_seer > 13.5 # HEScore assumption
491
+ cooling_system.fan_watts_per_cfm = ecm_watts_per_cfm
492
+ else
493
+ cooling_system.fan_watts_per_cfm = psc_watts_per_cfm
494
+ end
495
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
496
+ elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
497
+ if not cooling_system.distribution_system.nil?
498
+ cooling_system.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
499
+ else
500
+ cooling_system.fan_watts_per_cfm = mini_split_ductless_watts_per_cfm
501
+ end
502
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
503
+ elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
504
+ # Depends on airflow rate, so defaulted in hvac_sizing.rb
313
505
  end
314
- if heat_pump.pump_watts_per_ton.nil?
315
- heat_pump.pump_watts_per_ton = HVAC.get_default_gshp_pump_power()
506
+ end
507
+ hpxml.heat_pumps.each do |heat_pump|
508
+ next unless heat_pump.fan_watts_per_cfm.nil?
509
+
510
+ if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump.heat_pump_type
511
+ if heat_pump.heating_efficiency_hspf > 8.75 # HEScore assumption
512
+ heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
513
+ else
514
+ heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
515
+ end
516
+ heat_pump.fan_watts_per_cfm_isdefaulted = true
517
+ elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
518
+ if heat_pump.heating_efficiency_cop > 8.75 / 3.2 # HEScore assumption
519
+ heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
520
+ else
521
+ heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
522
+ end
523
+ heat_pump.fan_watts_per_cfm_isdefaulted = true
524
+ elsif [HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
525
+ if not heat_pump.distribution_system.nil?
526
+ heat_pump.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
527
+ else
528
+ heat_pump.fan_watts_per_cfm = mini_split_ductless_watts_per_cfm
529
+ end
530
+ heat_pump.fan_watts_per_cfm_isdefaulted = true
316
531
  end
317
532
  end
318
533
 
@@ -348,8 +563,24 @@ class HPXMLDefaults
348
563
  end
349
564
  end
350
565
 
351
- # TODO: Default HeatingCapacity17F
352
- # TODO: Default Electric Auxiliary Energy (EAE; requires autosized HVAC capacity)
566
+ # TODO: Default HeatingCapacity17F?
567
+ end
568
+
569
+ def self.apply_hvac_control(hpxml)
570
+ hpxml.hvac_controls.each do |hvac_control|
571
+ if not hvac_control.heating_setback_temp.nil?
572
+ if hvac_control.heating_setback_start_hour.nil?
573
+ hvac_control.heating_setback_start_hour = 23 # 11 pm
574
+ hvac_control.heating_setback_start_hour_isdefaulted = true
575
+ end
576
+ end
577
+
578
+ next unless not hvac_control.cooling_setup_temp.nil?
579
+ if hvac_control.cooling_setup_start_hour.nil?
580
+ hvac_control.cooling_setup_start_hour = 9 # 9 am
581
+ hvac_control.cooling_setup_start_hour_isdefaulted = true
582
+ end
583
+ end
353
584
  end
354
585
 
355
586
  def self.apply_hvac_distribution(hpxml, ncfl, ncfl_ag)
@@ -369,7 +600,8 @@ class HPXMLDefaults
369
600
 
370
601
  # Default return registers
371
602
  if hvac_distribution.number_of_return_registers.nil?
372
- hvac_distribution.number_of_return_registers = ncfl # Add 1 return register per conditioned floor if not provided
603
+ hvac_distribution.number_of_return_registers = ncfl.ceil # Add 1 return register per conditioned floor if not provided
604
+ hvac_distribution.number_of_return_registers_isdefaulted = true
373
605
  end
374
606
 
375
607
  # Default ducts
@@ -394,24 +626,99 @@ class HPXMLDefaults
394
626
  hvac_distribution.ducts.add(duct_type: duct.duct_type,
395
627
  duct_insulation_r_value: duct.duct_insulation_r_value,
396
628
  duct_location: secondary_duct_location,
397
- duct_surface_area: secondary_duct_area)
629
+ duct_location_isdefaulted: true,
630
+ duct_surface_area: secondary_duct_area,
631
+ duct_surface_area_isdefaulted: true)
398
632
  end
399
633
  end
634
+ duct.duct_surface_area_isdefaulted = true
635
+ duct.duct_location_isdefaulted = true
400
636
  end
401
637
  end
402
638
  end
403
639
  end
404
640
 
641
+ def self.apply_ventilation_fans(hpxml)
642
+ # Default mech vent systems
643
+ hpxml.ventilation_fans.each do |vent_fan|
644
+ next unless vent_fan.used_for_whole_building_ventilation
645
+
646
+ if vent_fan.is_shared_system.nil?
647
+ vent_fan.is_shared_system = false
648
+ vent_fan.is_shared_system_isdefaulted = true
649
+ end
650
+ if vent_fan.hours_in_operation.nil?
651
+ vent_fan.hours_in_operation = (vent_fan.fan_type == HPXML::MechVentTypeCFIS) ? 8.0 : 24.0
652
+ vent_fan.hours_in_operation_isdefaulted = true
653
+ end
654
+ end
655
+
656
+ # Default kitchen fan
657
+ hpxml.ventilation_fans.each do |vent_fan|
658
+ next unless (vent_fan.used_for_local_ventilation && (vent_fan.fan_location == HPXML::LocationKitchen))
659
+
660
+ if vent_fan.quantity.nil?
661
+ vent_fan.quantity = 1
662
+ vent_fan.quantity_isdefaulted = true
663
+ end
664
+ if vent_fan.rated_flow_rate.nil?
665
+ vent_fan.rated_flow_rate = 100.0 # cfm, per BA HSP
666
+ vent_fan.rated_flow_rate_isdefaulted = true
667
+ end
668
+ if vent_fan.hours_in_operation.nil?
669
+ vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
670
+ vent_fan.hours_in_operation_isdefaulted = true
671
+ end
672
+ if vent_fan.fan_power.nil?
673
+ vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
674
+ vent_fan.fan_power_isdefaulted = true
675
+ end
676
+ if vent_fan.start_hour.nil?
677
+ vent_fan.start_hour = 18 # 6 pm, per BA HSP
678
+ vent_fan.start_hour_isdefaulted = true
679
+ end
680
+ end
681
+
682
+ # Default bath fans
683
+ hpxml.ventilation_fans.each do |vent_fan|
684
+ next unless (vent_fan.used_for_local_ventilation && (vent_fan.fan_location == HPXML::LocationBath))
685
+
686
+ if vent_fan.quantity.nil?
687
+ vent_fan.quantity = hpxml.building_construction.number_of_bathrooms
688
+ vent_fan.quantity_isdefaulted = true
689
+ end
690
+ if vent_fan.rated_flow_rate.nil?
691
+ vent_fan.rated_flow_rate = 50.0 # cfm, per BA HSP
692
+ vent_fan.rated_flow_rate_isdefaulted = true
693
+ end
694
+ if vent_fan.hours_in_operation.nil?
695
+ vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
696
+ vent_fan.hours_in_operation_isdefaulted = true
697
+ end
698
+ if vent_fan.fan_power.nil?
699
+ vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
700
+ vent_fan.fan_power_isdefaulted = true
701
+ end
702
+ if vent_fan.start_hour.nil?
703
+ vent_fan.start_hour = 7 # 7 am, per BA HSP
704
+ vent_fan.start_hour_isdefaulted = true
705
+ end
706
+ end
707
+ end
708
+
405
709
  def self.apply_water_heaters(hpxml, nbeds, eri_version)
406
710
  hpxml.water_heating_systems.each do |water_heating_system|
407
711
  if water_heating_system.is_shared_system.nil?
408
712
  water_heating_system.is_shared_system = false
713
+ water_heating_system.is_shared_system_isdefaulted = true
409
714
  end
410
715
  if water_heating_system.temperature.nil?
411
716
  water_heating_system.temperature = Waterheater.get_default_hot_water_temperature(eri_version)
717
+ water_heating_system.temperature_isdefaulted = true
412
718
  end
413
719
  if water_heating_system.performance_adjustment.nil?
414
720
  water_heating_system.performance_adjustment = Waterheater.get_default_performance_adjustment(water_heating_system)
721
+ water_heating_system.performance_adjustment_isdefaulted = true
415
722
  end
416
723
  if (water_heating_system.water_heater_type == HPXML::WaterHeaterTypeCombiStorage) && water_heating_system.standby_loss.nil?
417
724
  # Use equation fit from AHRI database
@@ -420,20 +727,25 @@ class HPXMLDefaults
420
727
  surface_area = Waterheater.calc_tank_areas(act_vol)[0]
421
728
  sqft_by_gal = surface_area / act_vol # sqft/gal
422
729
  water_heating_system.standby_loss = (2.9721 * sqft_by_gal - 0.4732).round(3) # linear equation assuming a constant u, F/hr
730
+ water_heating_system.standby_loss_isdefaulted = true
423
731
  end
424
732
  if (water_heating_system.water_heater_type == HPXML::WaterHeaterTypeStorage)
425
733
  if water_heating_system.heating_capacity.nil?
426
734
  water_heating_system.heating_capacity = Waterheater.get_default_heating_capacity(water_heating_system.fuel_type, nbeds, hpxml.water_heating_systems.size, hpxml.building_construction.number_of_bathrooms) * 1000.0
735
+ water_heating_system.heating_capacity_isdefaulted = true
427
736
  end
428
737
  if water_heating_system.tank_volume.nil?
429
738
  water_heating_system.tank_volume = Waterheater.get_default_tank_volume(water_heating_system.fuel_type, nbeds, hpxml.building_construction.number_of_bathrooms)
739
+ water_heating_system.tank_volume_isdefaulted = true
430
740
  end
431
741
  if water_heating_system.recovery_efficiency.nil?
432
742
  water_heating_system.recovery_efficiency = Waterheater.get_default_recovery_efficiency(water_heating_system)
743
+ water_heating_system.recovery_efficiency_isdefaulted = true
433
744
  end
434
745
  end
435
746
  if water_heating_system.location.nil?
436
747
  water_heating_system.location = Waterheater.get_default_location(hpxml, hpxml.climate_and_risk_zones.iecc_zone)
748
+ water_heating_system.location_isdefaulted = true
437
749
  end
438
750
  end
439
751
  end
@@ -442,25 +754,36 @@ class HPXMLDefaults
442
754
  return if hpxml.hot_water_distributions.size == 0
443
755
 
444
756
  hot_water_distribution = hpxml.hot_water_distributions[0]
757
+
758
+ if hot_water_distribution.pipe_r_value.nil?
759
+ hot_water_distribution.pipe_r_value = 0.0
760
+ hot_water_distribution.pipe_r_value_isdefaulted = true
761
+ end
762
+
445
763
  if hot_water_distribution.system_type == HPXML::DHWDistTypeStandard
446
764
  if hot_water_distribution.standard_piping_length.nil?
447
765
  hot_water_distribution.standard_piping_length = HotWaterAndAppliances.get_default_std_pipe_length(has_uncond_bsmnt, cfa, ncfl)
766
+ hot_water_distribution.standard_piping_length_isdefaulted = true
448
767
  end
449
768
  elsif hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
450
769
  if hot_water_distribution.recirculation_piping_length.nil?
451
770
  hot_water_distribution.recirculation_piping_length = HotWaterAndAppliances.get_default_recirc_loop_length(HotWaterAndAppliances.get_default_std_pipe_length(has_uncond_bsmnt, cfa, ncfl))
771
+ hot_water_distribution.recirculation_piping_length_isdefaulted = true
452
772
  end
453
773
  if hot_water_distribution.recirculation_branch_piping_length.nil?
454
774
  hot_water_distribution.recirculation_branch_piping_length = HotWaterAndAppliances.get_default_recirc_branch_loop_length()
775
+ hot_water_distribution.recirculation_branch_piping_length_isdefaulted = true
455
776
  end
456
777
  if hot_water_distribution.recirculation_pump_power.nil?
457
778
  hot_water_distribution.recirculation_pump_power = HotWaterAndAppliances.get_default_recirc_pump_power()
779
+ hot_water_distribution.recirculation_pump_power_isdefaulted = true
458
780
  end
459
781
  end
460
782
 
461
783
  if hot_water_distribution.has_shared_recirculation
462
784
  if hot_water_distribution.shared_recirculation_pump_power.nil?
463
785
  hot_water_distribution.shared_recirculation_pump_power = HotWaterAndAppliances.get_default_shared_recirc_pump_power()
786
+ hot_water_distribution.shared_recirculation_pump_power_isdefaulted = true
464
787
  end
465
788
  end
466
789
  end
@@ -468,6 +791,7 @@ class HPXMLDefaults
468
791
  def self.apply_water_fixtures(hpxml)
469
792
  if hpxml.water_heating.water_fixtures_usage_multiplier.nil?
470
793
  hpxml.water_heating.water_fixtures_usage_multiplier = 1.0
794
+ hpxml.water_heating.water_fixtures_usage_multiplier_isdefaulted = true
471
795
  end
472
796
  end
473
797
 
@@ -480,319 +804,45 @@ class HPXMLDefaults
480
804
  if not collector_area.nil? # Detailed solar water heater
481
805
  if solar_thermal_system.storage_volume.nil?
482
806
  solar_thermal_system.storage_volume = Waterheater.calc_default_solar_thermal_system_storage_volume(collector_area)
807
+ solar_thermal_system.storage_volume_isdefaulted = true
483
808
  end
484
809
  end
485
810
  end
486
811
 
487
- def self.apply_ventilation_fans(hpxml)
488
- # Default mech vent systems
489
- hpxml.ventilation_fans.each do |vent_fan|
490
- next unless vent_fan.used_for_whole_building_ventilation
491
- next unless vent_fan.is_shared_system.nil?
492
-
493
- vent_fan.is_shared_system = false
494
- end
495
-
496
- # Default kitchen fan
497
- hpxml.ventilation_fans.each do |vent_fan|
498
- next unless (vent_fan.used_for_local_ventilation && (vent_fan.fan_location == HPXML::LocationKitchen))
499
-
500
- if vent_fan.quantity.nil?
501
- vent_fan.quantity = 1
812
+ def self.apply_pv_systems(hpxml)
813
+ hpxml.pv_systems.each do |pv_system|
814
+ if pv_system.is_shared_system.nil?
815
+ pv_system.is_shared_system = false
816
+ pv_system.is_shared_system_isdefaulted = true
502
817
  end
503
- if vent_fan.rated_flow_rate.nil?
504
- vent_fan.rated_flow_rate = 100.0 # cfm, per BA HSP
818
+ if pv_system.location.nil?
819
+ pv_system.location = HPXML::LocationRoof
820
+ pv_system.location_isdefaulted = true
505
821
  end
506
- if vent_fan.hours_in_operation.nil?
507
- vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
822
+ if pv_system.tracking.nil?
823
+ pv_system.tracking = HPXML::PVTrackingTypeFixed
824
+ pv_system.tracking_isdefaulted = true
508
825
  end
509
- if vent_fan.fan_power.nil?
510
- vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
826
+ if pv_system.module_type.nil?
827
+ pv_system.module_type = HPXML::PVModuleTypeStandard
828
+ pv_system.module_type_isdefaulted = true
511
829
  end
512
- if vent_fan.start_hour.nil?
513
- vent_fan.start_hour = 18 # 6 pm, per BA HSP
830
+ if pv_system.inverter_efficiency.nil?
831
+ pv_system.inverter_efficiency = PV.get_default_inv_eff()
832
+ pv_system.inverter_efficiency_isdefaulted = true
833
+ end
834
+ if pv_system.system_losses_fraction.nil?
835
+ pv_system.system_losses_fraction = PV.get_default_system_losses(pv_system.year_modules_manufactured)
836
+ pv_system.system_losses_fraction_isdefaulted = true
514
837
  end
515
838
  end
839
+ end
516
840
 
517
- # Default bath fans
518
- hpxml.ventilation_fans.each do |vent_fan|
519
- next unless (vent_fan.used_for_local_ventilation && (vent_fan.fan_location == HPXML::LocationBath))
520
-
521
- if vent_fan.quantity.nil?
522
- vent_fan.quantity = hpxml.building_construction.number_of_bathrooms
523
- end
524
- if vent_fan.rated_flow_rate.nil?
525
- vent_fan.rated_flow_rate = 50.0 # cfm, per BA HSP
526
- end
527
- if vent_fan.hours_in_operation.nil?
528
- vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
529
- end
530
- if vent_fan.fan_power.nil?
531
- vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
532
- end
533
- if vent_fan.start_hour.nil?
534
- vent_fan.start_hour = 7 # 7 am, per BA HSP
535
- end
536
- end
537
- end
538
-
539
- def self.apply_ceiling_fans(hpxml, nbeds)
540
- return if hpxml.ceiling_fans.size == 0
541
-
542
- ceiling_fan = hpxml.ceiling_fans[0]
543
- if ceiling_fan.efficiency.nil?
544
- medium_cfm = 3000.0
545
- ceiling_fan.efficiency = medium_cfm / HVAC.get_default_ceiling_fan_power()
546
- end
547
- if ceiling_fan.quantity.nil?
548
- ceiling_fan.quantity = HVAC.get_default_ceiling_fan_quantity(nbeds)
549
- end
550
- end
551
-
552
- def self.apply_plug_loads(hpxml, cfa, nbeds)
553
- hpxml.plug_loads.each do |plug_load|
554
- if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
555
- default_annual_kwh, default_sens_frac, default_lat_frac = MiscLoads.get_residual_mels_default_values(cfa)
556
- if plug_load.kWh_per_year.nil?
557
- plug_load.kWh_per_year = default_annual_kwh
558
- end
559
- if plug_load.frac_sensible.nil?
560
- plug_load.frac_sensible = default_sens_frac
561
- end
562
- if plug_load.frac_latent.nil?
563
- plug_load.frac_latent = default_lat_frac
564
- end
565
- if plug_load.location.nil?
566
- plug_load.location = HPXML::LocationInterior
567
- end
568
- if plug_load.weekday_fractions.nil?
569
- plug_load.weekday_fractions = Schedule.PlugLoadsOtherWeekdayFractions
570
- end
571
- if plug_load.weekend_fractions.nil?
572
- plug_load.weekend_fractions = Schedule.PlugLoadsOtherWeekendFractions
573
- end
574
- if plug_load.monthly_multipliers.nil?
575
- plug_load.monthly_multipliers = Schedule.PlugLoadsOtherMonthlyMultipliers
576
- end
577
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
578
- default_annual_kwh, default_sens_frac, default_lat_frac = MiscLoads.get_televisions_default_values(cfa, nbeds)
579
- if plug_load.kWh_per_year.nil?
580
- plug_load.kWh_per_year = default_annual_kwh
581
- end
582
- if plug_load.frac_sensible.nil?
583
- plug_load.frac_sensible = default_sens_frac
584
- end
585
- if plug_load.frac_latent.nil?
586
- plug_load.frac_latent = default_lat_frac
587
- end
588
- if plug_load.location.nil?
589
- plug_load.location = HPXML::LocationInterior
590
- end
591
- if plug_load.weekday_fractions.nil?
592
- plug_load.weekday_fractions = Schedule.PlugLoadsTVWeekdayFractions
593
- end
594
- if plug_load.weekend_fractions.nil?
595
- plug_load.weekend_fractions = Schedule.PlugLoadsTVWeekendFractions
596
- end
597
- if plug_load.monthly_multipliers.nil?
598
- plug_load.monthly_multipliers = Schedule.PlugLoadsTVMonthlyMultipliers
599
- end
600
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
601
- default_annual_kwh = MiscLoads.get_electric_vehicle_charging_default_values
602
- if plug_load.kWh_per_year.nil?
603
- plug_load.kWh_per_year = default_annual_kwh
604
- end
605
- if plug_load.frac_sensible.nil?
606
- plug_load.frac_sensible = 0.0
607
- end
608
- if plug_load.frac_latent.nil?
609
- plug_load.frac_latent = 0.0
610
- end
611
- if plug_load.location.nil?
612
- plug_load.location = HPXML::LocationExterior
613
- end
614
- if plug_load.weekday_fractions.nil?
615
- plug_load.weekday_fractions = Schedule.PlugLoadsVehicleWeekdayFractions
616
- end
617
- if plug_load.weekend_fractions.nil?
618
- plug_load.weekend_fractions = Schedule.PlugLoadsVehicleWeekendFractions
619
- end
620
- if plug_load.monthly_multipliers.nil?
621
- plug_load.monthly_multipliers = Schedule.PlugLoadsVehicleMonthlyMultipliers
622
- end
623
- elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
624
- default_annual_kwh = MiscLoads.get_well_pump_default_values(cfa, nbeds)
625
- if plug_load.kWh_per_year.nil?
626
- plug_load.kWh_per_year = default_annual_kwh
627
- end
628
- if plug_load.frac_sensible.nil?
629
- plug_load.frac_sensible = 0.0
630
- end
631
- if plug_load.frac_latent.nil?
632
- plug_load.frac_latent = 0.0
633
- end
634
- if plug_load.location.nil?
635
- plug_load.location = HPXML::LocationExterior
636
- end
637
- if plug_load.weekday_fractions.nil?
638
- plug_load.weekday_fractions = Schedule.PlugLoadsWellPumpWeekdayFractions
639
- end
640
- if plug_load.weekend_fractions.nil?
641
- plug_load.weekend_fractions = Schedule.PlugLoadsWellPumpWeekendFractions
642
- end
643
- if plug_load.monthly_multipliers.nil?
644
- plug_load.monthly_multipliers = Schedule.PlugLoadsWellPumpMonthlyMultipliers
645
- end
646
- end
647
- if plug_load.usage_multiplier.nil?
648
- plug_load.usage_multiplier = 1.0
649
- end
650
- end
651
- end
652
-
653
- def self.apply_fuel_loads(hpxml, cfa, nbeds)
654
- hpxml.fuel_loads.each do |fuel_load|
655
- if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
656
- if fuel_load.therm_per_year.nil?
657
- fuel_load.therm_per_year = MiscLoads.get_gas_grill_default_values(cfa, nbeds)
658
- end
659
- if fuel_load.frac_sensible.nil?
660
- fuel_load.frac_sensible = 0.0
661
- end
662
- if fuel_load.frac_latent.nil?
663
- fuel_load.frac_latent = 0.0
664
- end
665
- if fuel_load.location.nil?
666
- fuel_load.location = HPXML::LocationExterior
667
- end
668
- if fuel_load.weekday_fractions.nil?
669
- fuel_load.weekday_fractions = Schedule.FuelLoadsGrillWeekdayFractions
670
- end
671
- if fuel_load.weekend_fractions.nil?
672
- fuel_load.weekend_fractions = Schedule.FuelLoadsGrillWeekendFractions
673
- end
674
- if fuel_load.monthly_multipliers.nil?
675
- fuel_load.monthly_multipliers = Schedule.FuelLoadsGrillMonthlyMultipliers
676
- end
677
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
678
- if fuel_load.therm_per_year.nil?
679
- fuel_load.therm_per_year = MiscLoads.get_gas_lighting_default_values(cfa, nbeds)
680
- end
681
- if fuel_load.frac_sensible.nil?
682
- fuel_load.frac_sensible = 0.0
683
- end
684
- if fuel_load.frac_latent.nil?
685
- fuel_load.frac_latent = 0.0
686
- end
687
- if fuel_load.location.nil?
688
- fuel_load.location = HPXML::LocationExterior
689
- end
690
- if fuel_load.weekday_fractions.nil?
691
- fuel_load.weekday_fractions = Schedule.FuelLoadsLightingWeekdayFractions
692
- end
693
- if fuel_load.weekend_fractions.nil?
694
- fuel_load.weekend_fractions = Schedule.FuelLoadsLightingWeekendFractions
695
- end
696
- if fuel_load.monthly_multipliers.nil?
697
- fuel_load.monthly_multipliers = Schedule.FuelLoadsLightingMonthlyMultipliers
698
- end
699
- elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
700
- if fuel_load.therm_per_year.nil?
701
- fuel_load.therm_per_year = MiscLoads.get_gas_fireplace_default_values(cfa, nbeds)
702
- end
703
- if fuel_load.frac_sensible.nil?
704
- fuel_load.frac_sensible = 0.5
705
- end
706
- if fuel_load.frac_latent.nil?
707
- fuel_load.frac_latent = 0.1
708
- end
709
- if fuel_load.location.nil?
710
- fuel_load.location = HPXML::LocationInterior
711
- end
712
- if fuel_load.weekday_fractions.nil?
713
- fuel_load.weekday_fractions = Schedule.FuelLoadsFireplaceWeekdayFractions
714
- end
715
- if fuel_load.weekend_fractions.nil?
716
- fuel_load.weekend_fractions = Schedule.FuelLoadsFireplaceWeekendFractions
717
- end
718
- if fuel_load.monthly_multipliers.nil?
719
- fuel_load.monthly_multipliers = Schedule.FuelLoadsFireplaceMonthlyMultipliers
720
- end
721
- end
722
- if fuel_load.usage_multiplier.nil?
723
- fuel_load.usage_multiplier = 1.0
724
- end
725
- end
726
- end
727
-
728
- def self.apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
729
- hpxml.pools.each do |pool|
730
- if pool.pump_kwh_per_year.nil?
731
- pool.pump_kwh_per_year = MiscLoads.get_pool_pump_default_values(cfa, nbeds)
732
- end
733
- if pool.heater_load_value.nil?
734
- default_heater_load_units, default_heater_load_value = MiscLoads.get_pool_heater_default_values(cfa, nbeds, pool.heater_type)
735
- pool.heater_load_units = default_heater_load_units
736
- pool.heater_load_value = default_heater_load_value
737
- end
738
- if pool.heater_usage_multiplier.nil?
739
- pool.heater_usage_multiplier = 1.0
740
- end
741
- if pool.pump_usage_multiplier.nil?
742
- pool.pump_usage_multiplier = 1.0
743
- end
744
- if pool.pump_weekday_fractions.nil?
745
- pool.pump_weekday_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
746
- end
747
- if pool.pump_weekend_fractions.nil?
748
- pool.pump_weekend_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
749
- end
750
- if pool.pump_monthly_multipliers.nil?
751
- pool.pump_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'
752
- end
753
- if pool.heater_weekday_fractions.nil?
754
- pool.heater_weekday_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
755
- end
756
- if pool.heater_weekend_fractions.nil?
757
- pool.heater_weekend_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
758
- end
759
- if pool.heater_monthly_multipliers.nil?
760
- pool.heater_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'
761
- end
762
- end
763
-
764
- hpxml.hot_tubs.each do |hot_tub|
765
- if hot_tub.pump_kwh_per_year.nil?
766
- hot_tub.pump_kwh_per_year = MiscLoads.get_hot_tub_pump_default_values(cfa, nbeds)
767
- end
768
- if hot_tub.heater_load_value.nil?
769
- default_heater_load_units, default_heater_load_value = MiscLoads.get_hot_tub_heater_default_values(cfa, nbeds, hot_tub.heater_type)
770
- hot_tub.heater_load_units = default_heater_load_units
771
- hot_tub.heater_load_value = default_heater_load_value
772
- end
773
- if hot_tub.heater_usage_multiplier.nil?
774
- hot_tub.heater_usage_multiplier = 1.0
775
- end
776
- if hot_tub.pump_usage_multiplier.nil?
777
- hot_tub.pump_usage_multiplier = 1.0
778
- end
779
- if hot_tub.pump_weekday_fractions.nil?
780
- hot_tub.pump_weekday_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
781
- end
782
- if hot_tub.pump_weekend_fractions.nil?
783
- hot_tub.pump_weekend_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
784
- end
785
- if hot_tub.pump_monthly_multipliers.nil?
786
- hot_tub.pump_monthly_multipliers = '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921'
787
- end
788
- if hot_tub.heater_weekday_fractions.nil?
789
- hot_tub.heater_weekday_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
790
- end
791
- if hot_tub.heater_weekend_fractions.nil?
792
- hot_tub.heater_weekend_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
793
- end
794
- if hot_tub.heater_monthly_multipliers.nil?
795
- hot_tub.heater_monthly_multipliers = '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
841
+ def self.apply_generators(hpxml)
842
+ hpxml.generators.each do |generator|
843
+ if generator.is_shared_system.nil?
844
+ generator.is_shared_system = false
845
+ generator.is_shared_system_isdefaulted = true
796
846
  end
797
847
  end
798
848
  end
@@ -803,22 +853,32 @@ class HPXMLDefaults
803
853
  clothes_washer = hpxml.clothes_washers[0]
804
854
  if clothes_washer.is_shared_appliance.nil?
805
855
  clothes_washer.is_shared_appliance = false
856
+ clothes_washer.is_shared_appliance_isdefaulted = true
806
857
  end
807
858
  if clothes_washer.location.nil?
808
859
  clothes_washer.location = HPXML::LocationLivingSpace
860
+ clothes_washer.location_isdefaulted = true
809
861
  end
810
862
  if clothes_washer.rated_annual_kwh.nil?
811
863
  default_values = HotWaterAndAppliances.get_clothes_washer_default_values(eri_version)
812
864
  clothes_washer.integrated_modified_energy_factor = default_values[:integrated_modified_energy_factor]
865
+ clothes_washer.integrated_modified_energy_factor_isdefaulted = true
813
866
  clothes_washer.rated_annual_kwh = default_values[:rated_annual_kwh]
867
+ clothes_washer.rated_annual_kwh_isdefaulted = true
814
868
  clothes_washer.label_electric_rate = default_values[:label_electric_rate]
869
+ clothes_washer.label_electric_rate_isdefaulted = true
815
870
  clothes_washer.label_gas_rate = default_values[:label_gas_rate]
871
+ clothes_washer.label_gas_rate_isdefaulted = true
816
872
  clothes_washer.label_annual_gas_cost = default_values[:label_annual_gas_cost]
873
+ clothes_washer.label_annual_gas_cost_isdefaulted = true
817
874
  clothes_washer.capacity = default_values[:capacity]
875
+ clothes_washer.capacity_isdefaulted = true
818
876
  clothes_washer.label_usage = default_values[:label_usage]
877
+ clothes_washer.label_usage_isdefaulted = true
819
878
  end
820
879
  if clothes_washer.usage_multiplier.nil?
821
880
  clothes_washer.usage_multiplier = 1.0
881
+ clothes_washer.usage_multiplier_isdefaulted = true
822
882
  end
823
883
  end
824
884
 
@@ -827,23 +887,30 @@ class HPXMLDefaults
827
887
  clothes_dryer = hpxml.clothes_dryers[0]
828
888
  if clothes_dryer.is_shared_appliance.nil?
829
889
  clothes_dryer.is_shared_appliance = false
890
+ clothes_dryer.is_shared_appliance_isdefaulted = true
830
891
  end
831
892
  if clothes_dryer.location.nil?
832
893
  clothes_dryer.location = HPXML::LocationLivingSpace
894
+ clothes_dryer.location_isdefaulted = true
833
895
  end
834
896
  if clothes_dryer.control_type.nil?
835
897
  default_values = HotWaterAndAppliances.get_clothes_dryer_default_values(eri_version, clothes_dryer.fuel_type)
836
898
  clothes_dryer.control_type = default_values[:control_type]
899
+ clothes_dryer.control_type_isdefaulted = true
837
900
  clothes_dryer.combined_energy_factor = default_values[:combined_energy_factor]
901
+ clothes_dryer.combined_energy_factor_isdefaulted = true
838
902
  end
839
903
  if clothes_dryer.usage_multiplier.nil?
840
904
  clothes_dryer.usage_multiplier = 1.0
905
+ clothes_dryer.usage_multiplier_isdefaulted = true
841
906
  end
842
907
  if clothes_dryer.is_vented.nil?
843
908
  clothes_dryer.is_vented = true
909
+ clothes_dryer.is_vented_isdefaulted = true
844
910
  end
845
911
  if clothes_dryer.is_vented && clothes_dryer.vented_flow_rate.nil?
846
912
  clothes_dryer.vented_flow_rate = 100.0
913
+ clothes_dryer.vented_flow_rate_isdefaulted = true
847
914
  end
848
915
  end
849
916
 
@@ -852,66 +919,87 @@ class HPXMLDefaults
852
919
  dishwasher = hpxml.dishwashers[0]
853
920
  if dishwasher.is_shared_appliance.nil?
854
921
  dishwasher.is_shared_appliance = false
922
+ dishwasher.is_shared_appliance_isdefaulted = true
855
923
  end
856
924
  if dishwasher.location.nil?
857
925
  dishwasher.location = HPXML::LocationLivingSpace
926
+ dishwasher.location_isdefaulted = true
858
927
  end
859
928
  if dishwasher.place_setting_capacity.nil?
860
- default_values = HotWaterAndAppliances.get_dishwasher_default_values()
929
+ default_values = HotWaterAndAppliances.get_dishwasher_default_values(eri_version)
861
930
  dishwasher.rated_annual_kwh = default_values[:rated_annual_kwh]
931
+ dishwasher.rated_annual_kwh_isdefaulted = true
862
932
  dishwasher.label_electric_rate = default_values[:label_electric_rate]
933
+ dishwasher.label_electric_rate_isdefaulted = true
863
934
  dishwasher.label_gas_rate = default_values[:label_gas_rate]
935
+ dishwasher.label_gas_rate_isdefaulted = true
864
936
  dishwasher.label_annual_gas_cost = default_values[:label_annual_gas_cost]
937
+ dishwasher.label_annual_gas_cost_isdefaulted = true
865
938
  dishwasher.label_usage = default_values[:label_usage]
939
+ dishwasher.label_usage_isdefaulted = true
866
940
  dishwasher.place_setting_capacity = default_values[:place_setting_capacity]
941
+ dishwasher.place_setting_capacity_isdefaulted = true
867
942
  end
868
943
  if dishwasher.usage_multiplier.nil?
869
944
  dishwasher.usage_multiplier = 1.0
945
+ dishwasher.usage_multiplier_isdefaulted = true
870
946
  end
871
947
  end
872
948
 
873
949
  # Default refrigerators
874
950
  if hpxml.refrigerators.size == 1
875
951
  hpxml.refrigerators[0].primary_indicator = true
952
+ hpxml.refrigerators[0].primary_indicator_isdefaulted = true
876
953
  end
877
954
  hpxml.refrigerators.each do |refrigerator|
878
955
  if not refrigerator.primary_indicator # extra refrigerator
879
956
  if refrigerator.location.nil?
880
957
  refrigerator.location = HotWaterAndAppliances.get_default_extra_refrigerator_and_freezer_locations(hpxml)
958
+ refrigerator.location_isdefaulted = true
881
959
  end
882
960
  if refrigerator.adjusted_annual_kwh.nil? && refrigerator.rated_annual_kwh.nil?
883
961
  default_values = HotWaterAndAppliances.get_extra_refrigerator_default_values
884
962
  refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
963
+ refrigerator.rated_annual_kwh_isdefaulted = true
885
964
  end
886
965
  if refrigerator.weekday_fractions.nil?
887
966
  refrigerator.weekday_fractions = Schedule.ExtraRefrigeratorWeekdayFractions
967
+ refrigerator.weekday_fractions_isdefaulted = true
888
968
  end
889
969
  if refrigerator.weekend_fractions.nil?
890
970
  refrigerator.weekend_fractions = Schedule.ExtraRefrigeratorWeekendFractions
971
+ refrigerator.weekend_fractions_isdefaulted = true
891
972
  end
892
973
  if refrigerator.monthly_multipliers.nil?
893
974
  refrigerator.monthly_multipliers = Schedule.ExtraRefrigeratorMonthlyMultipliers
975
+ refrigerator.monthly_multipliers_isdefaulted = true
894
976
  end
895
977
  else # primary refrigerator
896
978
  if refrigerator.location.nil?
897
979
  refrigerator.location = HPXML::LocationLivingSpace
980
+ refrigerator.location_isdefaulted = true
898
981
  end
899
982
  if refrigerator.adjusted_annual_kwh.nil? && refrigerator.rated_annual_kwh.nil?
900
983
  default_values = HotWaterAndAppliances.get_refrigerator_default_values(nbeds)
901
984
  refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
985
+ refrigerator.rated_annual_kwh_isdefaulted = true
902
986
  end
903
987
  if refrigerator.weekday_fractions.nil?
904
988
  refrigerator.weekday_fractions = Schedule.RefrigeratorWeekdayFractions
989
+ refrigerator.weekday_fractions_isdefaulted = true
905
990
  end
906
991
  if refrigerator.weekend_fractions.nil?
907
992
  refrigerator.weekend_fractions = Schedule.RefrigeratorWeekendFractions
993
+ refrigerator.weekend_fractions_isdefaulted = true
908
994
  end
909
995
  if refrigerator.monthly_multipliers.nil?
910
996
  refrigerator.monthly_multipliers = Schedule.RefrigeratorMonthlyMultipliers
997
+ refrigerator.monthly_multipliers_isdefaulted = true
911
998
  end
912
999
  end
913
1000
  if refrigerator.usage_multiplier.nil?
914
1001
  refrigerator.usage_multiplier = 1.0
1002
+ refrigerator.usage_multiplier_isdefaulted = true
915
1003
  end
916
1004
  end
917
1005
 
@@ -919,22 +1007,28 @@ class HPXMLDefaults
919
1007
  hpxml.freezers.each do |freezer|
920
1008
  if freezer.location.nil?
921
1009
  freezer.location = HotWaterAndAppliances.get_default_extra_refrigerator_and_freezer_locations(hpxml)
1010
+ freezer.location_isdefaulted = true
922
1011
  end
923
1012
  if freezer.adjusted_annual_kwh.nil? && freezer.rated_annual_kwh.nil?
924
1013
  default_values = HotWaterAndAppliances.get_freezer_default_values
925
1014
  freezer.rated_annual_kwh = default_values[:rated_annual_kwh]
1015
+ freezer.rated_annual_kwh_isdefaulted = true
926
1016
  end
927
1017
  if freezer.usage_multiplier.nil?
928
1018
  freezer.usage_multiplier = 1.0
1019
+ freezer.usage_multiplier_isdefaulted = true
929
1020
  end
930
1021
  if freezer.weekday_fractions.nil?
931
1022
  freezer.weekday_fractions = Schedule.FreezerWeekdayFractions
1023
+ freezer.weekday_fractions_isdefaulted = true
932
1024
  end
933
1025
  if freezer.weekend_fractions.nil?
934
1026
  freezer.weekend_fractions = Schedule.FreezerWeekendFractions
1027
+ freezer.weekend_fractions_isdefaulted = true
935
1028
  end
936
1029
  if freezer.monthly_multipliers.nil?
937
1030
  freezer.monthly_multipliers = Schedule.FreezerMonthlyMultipliers
1031
+ freezer.monthly_multipliers_isdefaulted = true
938
1032
  end
939
1033
  end
940
1034
 
@@ -943,22 +1037,28 @@ class HPXMLDefaults
943
1037
  cooking_range = hpxml.cooking_ranges[0]
944
1038
  if cooking_range.location.nil?
945
1039
  cooking_range.location = HPXML::LocationLivingSpace
1040
+ cooking_range.location_isdefaulted = true
946
1041
  end
947
1042
  if cooking_range.is_induction.nil?
948
1043
  default_values = HotWaterAndAppliances.get_range_oven_default_values()
949
1044
  cooking_range.is_induction = default_values[:is_induction]
1045
+ cooking_range.is_induction_isdefaulted = true
950
1046
  end
951
1047
  if cooking_range.usage_multiplier.nil?
952
1048
  cooking_range.usage_multiplier = 1.0
1049
+ cooking_range.usage_multiplier_isdefaulted = true
953
1050
  end
954
1051
  if cooking_range.weekday_fractions.nil?
955
1052
  cooking_range.weekday_fractions = Schedule.CookingRangeWeekdayFractions
1053
+ cooking_range.weekday_fractions_isdefaulted = true
956
1054
  end
957
1055
  if cooking_range.weekend_fractions.nil?
958
1056
  cooking_range.weekend_fractions = Schedule.CookingRangeWeekendFractions
1057
+ cooking_range.weekend_fractions_isdefaulted = true
959
1058
  end
960
1059
  if cooking_range.monthly_multipliers.nil?
961
1060
  cooking_range.monthly_multipliers = Schedule.CookingRangeMonthlyMultipliers
1061
+ cooking_range.monthly_multipliers_isdefaulted = true
962
1062
  end
963
1063
  end
964
1064
 
@@ -968,6 +1068,7 @@ class HPXMLDefaults
968
1068
  if oven.is_convection.nil?
969
1069
  default_values = HotWaterAndAppliances.get_range_oven_default_values()
970
1070
  oven.is_convection = default_values[:is_convection]
1071
+ oven.is_convection_isdefaulted = true
971
1072
  end
972
1073
  end
973
1074
  end
@@ -975,35 +1076,45 @@ class HPXMLDefaults
975
1076
  def self.apply_lighting(hpxml)
976
1077
  if hpxml.lighting.interior_usage_multiplier.nil?
977
1078
  hpxml.lighting.interior_usage_multiplier = 1.0
1079
+ hpxml.lighting.interior_usage_multiplier_isdefaulted = true
978
1080
  end
979
1081
  if hpxml.lighting.garage_usage_multiplier.nil?
980
1082
  hpxml.lighting.garage_usage_multiplier = 1.0
1083
+ hpxml.lighting.garage_usage_multiplier_isdefaulted = true
981
1084
  end
982
1085
  if hpxml.lighting.exterior_usage_multiplier.nil?
983
1086
  hpxml.lighting.exterior_usage_multiplier = 1.0
1087
+ hpxml.lighting.exterior_usage_multiplier_isdefaulted = true
984
1088
  end
1089
+ # Schedules from T24 2016 Residential ACM Appendix C Table 8 Exterior Lighting Hourly Multiplier (Weekdays and weekends)
985
1090
  default_exterior_lighting_weekday_fractions = Schedule.LightingExteriorWeekdayFractions
986
1091
  default_exterior_lighting_weekend_fractions = Schedule.LightingExteriorWeekendFractions
987
1092
  default_exterior_lighting_monthly_multipliers = Schedule.LightingExteriorMonthlyMultipliers
988
1093
  if hpxml.has_space_type(HPXML::LocationGarage)
989
1094
  if hpxml.lighting.garage_weekday_fractions.nil?
990
1095
  hpxml.lighting.garage_weekday_fractions = default_exterior_lighting_weekday_fractions
1096
+ hpxml.lighting.garage_weekday_fractions_isdefaulted = true
991
1097
  end
992
1098
  if hpxml.lighting.garage_weekend_fractions.nil?
993
1099
  hpxml.lighting.garage_weekend_fractions = default_exterior_lighting_weekend_fractions
1100
+ hpxml.lighting.garage_weekend_fractions_isdefaulted = true
994
1101
  end
995
1102
  if hpxml.lighting.garage_monthly_multipliers.nil?
996
1103
  hpxml.lighting.garage_monthly_multipliers = default_exterior_lighting_monthly_multipliers
1104
+ hpxml.lighting.garage_monthly_multipliers_isdefaulted = true
997
1105
  end
998
1106
  end
999
1107
  if hpxml.lighting.exterior_weekday_fractions.nil?
1000
1108
  hpxml.lighting.exterior_weekday_fractions = default_exterior_lighting_weekday_fractions
1109
+ hpxml.lighting.exterior_weekday_fractions_isdefaulted = true
1001
1110
  end
1002
1111
  if hpxml.lighting.exterior_weekend_fractions.nil?
1003
1112
  hpxml.lighting.exterior_weekend_fractions = default_exterior_lighting_weekend_fractions
1113
+ hpxml.lighting.exterior_weekend_fractions_isdefaulted = true
1004
1114
  end
1005
1115
  if hpxml.lighting.exterior_monthly_multipliers.nil?
1006
1116
  hpxml.lighting.exterior_monthly_multipliers = default_exterior_lighting_monthly_multipliers
1117
+ hpxml.lighting.exterior_monthly_multipliers_isdefaulted = true
1007
1118
  end
1008
1119
  if hpxml.lighting.holiday_exists
1009
1120
  if hpxml.lighting.holiday_kwh_per_day.nil?
@@ -1013,34 +1124,333 @@ class HPXMLDefaults
1013
1124
  else # Multifamily and others
1014
1125
  hpxml.lighting.holiday_kwh_per_day = 0.55
1015
1126
  end
1127
+ hpxml.lighting.holiday_kwh_per_day_isdefaulted = true
1016
1128
  end
1017
1129
  if hpxml.lighting.holiday_period_begin_month.nil?
1018
1130
  hpxml.lighting.holiday_period_begin_month = 11
1019
- hpxml.lighting.holiday_period_begin_day_of_month = 24
1131
+ hpxml.lighting.holiday_period_begin_month_isdefaulted = true
1132
+ hpxml.lighting.holiday_period_begin_day = 24
1133
+ hpxml.lighting.holiday_period_begin_day_isdefaulted = true
1020
1134
  end
1021
- if hpxml.lighting.holiday_period_end_day_of_month.nil?
1135
+ if hpxml.lighting.holiday_period_end_day.nil?
1022
1136
  hpxml.lighting.holiday_period_end_month = 1
1023
- hpxml.lighting.holiday_period_end_day_of_month = 6
1137
+ hpxml.lighting.holiday_period_end_month_isdefaulted = true
1138
+ hpxml.lighting.holiday_period_end_day = 6
1139
+ hpxml.lighting.holiday_period_end_day_isdefaulted = true
1024
1140
  end
1025
1141
  if hpxml.lighting.holiday_weekday_fractions.nil?
1026
1142
  hpxml.lighting.holiday_weekday_fractions = Schedule.LightingExteriorHolidayWeekdayFractions
1143
+ hpxml.lighting.holiday_weekday_fractions_isdefaulted = true
1027
1144
  end
1028
1145
  if hpxml.lighting.holiday_weekend_fractions.nil?
1029
1146
  hpxml.lighting.holiday_weekend_fractions = Schedule.LightingExteriorHolidayWeekendFractions
1147
+ hpxml.lighting.holiday_weekend_fractions_isdefaulted = true
1030
1148
  end
1031
1149
  end
1032
1150
  end
1033
1151
 
1034
- def self.apply_pv_systems(hpxml)
1035
- hpxml.pv_systems.each do |pv_system|
1036
- if pv_system.is_shared_system.nil?
1037
- pv_system.is_shared_system = false
1152
+ def self.apply_ceiling_fans(hpxml, nbeds)
1153
+ return if hpxml.ceiling_fans.size == 0
1154
+
1155
+ ceiling_fan = hpxml.ceiling_fans[0]
1156
+ if ceiling_fan.efficiency.nil?
1157
+ medium_cfm = 3000.0
1158
+ ceiling_fan.efficiency = medium_cfm / HVAC.get_default_ceiling_fan_power()
1159
+ ceiling_fan.efficiency_isdefaulted = true
1160
+ end
1161
+ if ceiling_fan.quantity.nil?
1162
+ ceiling_fan.quantity = HVAC.get_default_ceiling_fan_quantity(nbeds)
1163
+ ceiling_fan.quantity_isdefaulted = true
1164
+ end
1165
+ end
1166
+
1167
+ def self.apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
1168
+ hpxml.pools.each do |pool|
1169
+ if pool.pump_kwh_per_year.nil?
1170
+ pool.pump_kwh_per_year = MiscLoads.get_pool_pump_default_values(cfa, nbeds)
1171
+ pool.pump_kwh_per_year_isdefaulted = true
1038
1172
  end
1039
- if pv_system.inverter_efficiency.nil?
1040
- pv_system.inverter_efficiency = PV.get_default_inv_eff()
1173
+ if pool.heater_load_value.nil?
1174
+ default_heater_load_units, default_heater_load_value = MiscLoads.get_pool_heater_default_values(cfa, nbeds, pool.heater_type)
1175
+ pool.heater_load_units = default_heater_load_units
1176
+ pool.heater_load_value = default_heater_load_value
1177
+ pool.heater_load_value_isdefaulted = true
1041
1178
  end
1042
- if pv_system.system_losses_fraction.nil?
1043
- pv_system.system_losses_fraction = PV.get_default_system_losses(pv_system.year_modules_manufactured)
1179
+ if pool.heater_usage_multiplier.nil?
1180
+ pool.heater_usage_multiplier = 1.0
1181
+ pool.heater_usage_multiplier_isdefaulted = true
1182
+ end
1183
+ if pool.pump_usage_multiplier.nil?
1184
+ pool.pump_usage_multiplier = 1.0
1185
+ pool.pump_usage_multiplier_isdefaulted = true
1186
+ end
1187
+ if pool.pump_weekday_fractions.nil?
1188
+ pool.pump_weekday_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
1189
+ pool.pump_weekday_fractions_isdefaulted = true
1190
+ end
1191
+ if pool.pump_weekend_fractions.nil?
1192
+ pool.pump_weekend_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
1193
+ pool.pump_weekend_fractions_isdefaulted = true
1194
+ end
1195
+ if pool.pump_monthly_multipliers.nil?
1196
+ pool.pump_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'
1197
+ pool.pump_monthly_multipliers_isdefaulted = true
1198
+ end
1199
+ if pool.heater_weekday_fractions.nil?
1200
+ pool.heater_weekday_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
1201
+ pool.heater_weekday_fractions_isdefaulted = true
1202
+ end
1203
+ if pool.heater_weekend_fractions.nil?
1204
+ pool.heater_weekend_fractions = '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
1205
+ pool.heater_weekend_fractions_isdefaulted = true
1206
+ end
1207
+ if pool.heater_monthly_multipliers.nil?
1208
+ pool.heater_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'
1209
+ pool.heater_monthly_multipliers_isdefaulted = true
1210
+ end
1211
+ end
1212
+
1213
+ hpxml.hot_tubs.each do |hot_tub|
1214
+ if hot_tub.pump_kwh_per_year.nil?
1215
+ hot_tub.pump_kwh_per_year = MiscLoads.get_hot_tub_pump_default_values(cfa, nbeds)
1216
+ hot_tub.pump_kwh_per_year_isdefaulted = true
1217
+ end
1218
+ if hot_tub.heater_load_value.nil?
1219
+ default_heater_load_units, default_heater_load_value = MiscLoads.get_hot_tub_heater_default_values(cfa, nbeds, hot_tub.heater_type)
1220
+ hot_tub.heater_load_units = default_heater_load_units
1221
+ hot_tub.heater_load_value = default_heater_load_value
1222
+ hot_tub.heater_load_value_isdefaulted = true
1223
+ end
1224
+ if hot_tub.heater_usage_multiplier.nil?
1225
+ hot_tub.heater_usage_multiplier = 1.0
1226
+ hot_tub.heater_usage_multiplier_isdefaulted = true
1227
+ end
1228
+ if hot_tub.pump_usage_multiplier.nil?
1229
+ hot_tub.pump_usage_multiplier = 1.0
1230
+ hot_tub.pump_usage_multiplier_isdefaulted = true
1231
+ end
1232
+ if hot_tub.pump_weekday_fractions.nil?
1233
+ hot_tub.pump_weekday_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1234
+ hot_tub.pump_weekday_fractions_isdefaulted = true
1235
+ end
1236
+ if hot_tub.pump_weekend_fractions.nil?
1237
+ hot_tub.pump_weekend_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1238
+ hot_tub.pump_weekend_fractions_isdefaulted = true
1239
+ end
1240
+ if hot_tub.pump_monthly_multipliers.nil?
1241
+ hot_tub.pump_monthly_multipliers = '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921'
1242
+ hot_tub.pump_monthly_multipliers_isdefaulted = true
1243
+ end
1244
+ if hot_tub.heater_weekday_fractions.nil?
1245
+ hot_tub.heater_weekday_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1246
+ hot_tub.heater_weekday_fractions_isdefaulted = true
1247
+ end
1248
+ if hot_tub.heater_weekend_fractions.nil?
1249
+ hot_tub.heater_weekend_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1250
+ hot_tub.heater_weekend_fractions_isdefaulted = true
1251
+ end
1252
+ if hot_tub.heater_monthly_multipliers.nil?
1253
+ hot_tub.heater_monthly_multipliers = '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
1254
+ hot_tub.heater_monthly_multipliers_isdefaulted = true
1255
+ end
1256
+ end
1257
+ end
1258
+
1259
+ def self.apply_plug_loads(hpxml, cfa, nbeds)
1260
+ hpxml.plug_loads.each do |plug_load|
1261
+ if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
1262
+ default_annual_kwh, default_sens_frac, default_lat_frac = MiscLoads.get_residual_mels_default_values(cfa)
1263
+ if plug_load.kWh_per_year.nil?
1264
+ plug_load.kWh_per_year = default_annual_kwh
1265
+ plug_load.kWh_per_year_isdefaulted = true
1266
+ end
1267
+ if plug_load.frac_sensible.nil?
1268
+ plug_load.frac_sensible = default_sens_frac
1269
+ plug_load.frac_sensible_isdefaulted = true
1270
+ end
1271
+ if plug_load.frac_latent.nil?
1272
+ plug_load.frac_latent = default_lat_frac
1273
+ plug_load.frac_latent_isdefaulted = true
1274
+ end
1275
+ if plug_load.weekday_fractions.nil?
1276
+ plug_load.weekday_fractions = Schedule.PlugLoadsOtherWeekdayFractions
1277
+ plug_load.weekday_fractions_isdefaulted = true
1278
+ end
1279
+ if plug_load.weekend_fractions.nil?
1280
+ plug_load.weekend_fractions = Schedule.PlugLoadsOtherWeekendFractions
1281
+ plug_load.weekend_fractions_isdefaulted = true
1282
+ end
1283
+ if plug_load.monthly_multipliers.nil?
1284
+ plug_load.monthly_multipliers = Schedule.PlugLoadsOtherMonthlyMultipliers
1285
+ plug_load.monthly_multipliers_isdefaulted = true
1286
+ end
1287
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
1288
+ default_annual_kwh, default_sens_frac, default_lat_frac = MiscLoads.get_televisions_default_values(cfa, nbeds)
1289
+ if plug_load.kWh_per_year.nil?
1290
+ plug_load.kWh_per_year = default_annual_kwh
1291
+ plug_load.kWh_per_year_isdefaulted = true
1292
+ end
1293
+ if plug_load.frac_sensible.nil?
1294
+ plug_load.frac_sensible = default_sens_frac
1295
+ plug_load.frac_sensible_isdefaulted = true
1296
+ end
1297
+ if plug_load.frac_latent.nil?
1298
+ plug_load.frac_latent = default_lat_frac
1299
+ plug_load.frac_latent_isdefaulted = true
1300
+ end
1301
+ if plug_load.weekday_fractions.nil?
1302
+ plug_load.weekday_fractions = Schedule.PlugLoadsTVWeekdayFractions
1303
+ plug_load.weekday_fractions_isdefaulted = true
1304
+ end
1305
+ if plug_load.weekend_fractions.nil?
1306
+ plug_load.weekend_fractions = Schedule.PlugLoadsTVWeekendFractions
1307
+ plug_load.weekend_fractions_isdefaulted = true
1308
+ end
1309
+ if plug_load.monthly_multipliers.nil?
1310
+ plug_load.monthly_multipliers = Schedule.PlugLoadsTVMonthlyMultipliers
1311
+ plug_load.monthly_multipliers_isdefaulted = true
1312
+ end
1313
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
1314
+ default_annual_kwh = MiscLoads.get_electric_vehicle_charging_default_values
1315
+ if plug_load.kWh_per_year.nil?
1316
+ plug_load.kWh_per_year = default_annual_kwh
1317
+ plug_load.kWh_per_year_isdefaulted = true
1318
+ end
1319
+ if plug_load.frac_sensible.nil?
1320
+ plug_load.frac_sensible = 0.0
1321
+ plug_load.frac_sensible_isdefaulted = true
1322
+ end
1323
+ if plug_load.frac_latent.nil?
1324
+ plug_load.frac_latent = 0.0
1325
+ plug_load.frac_latent_isdefaulted = true
1326
+ end
1327
+ if plug_load.weekday_fractions.nil?
1328
+ plug_load.weekday_fractions = Schedule.PlugLoadsVehicleWeekdayFractions
1329
+ plug_load.weekday_fractions_isdefaulted = true
1330
+ end
1331
+ if plug_load.weekend_fractions.nil?
1332
+ plug_load.weekend_fractions = Schedule.PlugLoadsVehicleWeekendFractions
1333
+ plug_load.weekend_fractions_isdefaulted = true
1334
+ end
1335
+ if plug_load.monthly_multipliers.nil?
1336
+ plug_load.monthly_multipliers = Schedule.PlugLoadsVehicleMonthlyMultipliers
1337
+ plug_load.monthly_multipliers_isdefaulted = true
1338
+ end
1339
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
1340
+ default_annual_kwh = MiscLoads.get_well_pump_default_values(cfa, nbeds)
1341
+ if plug_load.kWh_per_year.nil?
1342
+ plug_load.kWh_per_year = default_annual_kwh
1343
+ plug_load.kWh_per_year_isdefaulted = true
1344
+ end
1345
+ if plug_load.frac_sensible.nil?
1346
+ plug_load.frac_sensible = 0.0
1347
+ plug_load.frac_sensible_isdefaulted = true
1348
+ end
1349
+ if plug_load.frac_latent.nil?
1350
+ plug_load.frac_latent = 0.0
1351
+ plug_load.frac_latent_isdefaulted = true
1352
+ end
1353
+ if plug_load.weekday_fractions.nil?
1354
+ plug_load.weekday_fractions = Schedule.PlugLoadsWellPumpWeekdayFractions
1355
+ plug_load.weekday_fractions_isdefaulted = true
1356
+ end
1357
+ if plug_load.weekend_fractions.nil?
1358
+ plug_load.weekend_fractions = Schedule.PlugLoadsWellPumpWeekendFractions
1359
+ plug_load.weekend_fractions_isdefaulted = true
1360
+ end
1361
+ if plug_load.monthly_multipliers.nil?
1362
+ plug_load.monthly_multipliers = Schedule.PlugLoadsWellPumpMonthlyMultipliers
1363
+ plug_load.monthly_multipliers_isdefaulted = true
1364
+ end
1365
+ end
1366
+ if plug_load.usage_multiplier.nil?
1367
+ plug_load.usage_multiplier = 1.0
1368
+ plug_load.usage_multiplier_isdefaulted = true
1369
+ end
1370
+ end
1371
+ end
1372
+
1373
+ def self.apply_fuel_loads(hpxml, cfa, nbeds)
1374
+ hpxml.fuel_loads.each do |fuel_load|
1375
+ if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
1376
+ if fuel_load.therm_per_year.nil?
1377
+ fuel_load.therm_per_year = MiscLoads.get_gas_grill_default_values(cfa, nbeds)
1378
+ fuel_load.therm_per_year_isdefaulted = true
1379
+ end
1380
+ if fuel_load.frac_sensible.nil?
1381
+ fuel_load.frac_sensible = 0.0
1382
+ fuel_load.frac_sensible_isdefaulted = true
1383
+ end
1384
+ if fuel_load.frac_latent.nil?
1385
+ fuel_load.frac_latent = 0.0
1386
+ fuel_load.frac_latent_isdefaulted = true
1387
+ end
1388
+ if fuel_load.weekday_fractions.nil?
1389
+ fuel_load.weekday_fractions = Schedule.FuelLoadsGrillWeekdayFractions
1390
+ fuel_load.weekday_fractions_isdefaulted = true
1391
+ end
1392
+ if fuel_load.weekend_fractions.nil?
1393
+ fuel_load.weekend_fractions = Schedule.FuelLoadsGrillWeekendFractions
1394
+ fuel_load.weekend_fractions_isdefaulted = true
1395
+ end
1396
+ if fuel_load.monthly_multipliers.nil?
1397
+ fuel_load.monthly_multipliers = Schedule.FuelLoadsGrillMonthlyMultipliers
1398
+ fuel_load.monthly_multipliers_isdefaulted = true
1399
+ end
1400
+ elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
1401
+ if fuel_load.therm_per_year.nil?
1402
+ fuel_load.therm_per_year = MiscLoads.get_gas_lighting_default_values(cfa, nbeds)
1403
+ fuel_load.therm_per_year_isdefaulted = true
1404
+ end
1405
+ if fuel_load.frac_sensible.nil?
1406
+ fuel_load.frac_sensible = 0.0
1407
+ fuel_load.frac_sensible_isdefaulted = true
1408
+ end
1409
+ if fuel_load.frac_latent.nil?
1410
+ fuel_load.frac_latent = 0.0
1411
+ fuel_load.frac_latent_isdefaulted = true
1412
+ end
1413
+ if fuel_load.weekday_fractions.nil?
1414
+ fuel_load.weekday_fractions = Schedule.FuelLoadsLightingWeekdayFractions
1415
+ fuel_load.weekday_fractions_isdefaulted = true
1416
+ end
1417
+ if fuel_load.weekend_fractions.nil?
1418
+ fuel_load.weekend_fractions = Schedule.FuelLoadsLightingWeekendFractions
1419
+ fuel_load.weekend_fractions_isdefaulted = true
1420
+ end
1421
+ if fuel_load.monthly_multipliers.nil?
1422
+ fuel_load.monthly_multipliers = Schedule.FuelLoadsLightingMonthlyMultipliers
1423
+ fuel_load.monthly_multipliers_isdefaulted = true
1424
+ end
1425
+ elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
1426
+ if fuel_load.therm_per_year.nil?
1427
+ fuel_load.therm_per_year = MiscLoads.get_gas_fireplace_default_values(cfa, nbeds)
1428
+ fuel_load.therm_per_year_isdefaulted = true
1429
+ end
1430
+ if fuel_load.frac_sensible.nil?
1431
+ fuel_load.frac_sensible = 0.5
1432
+ fuel_load.frac_sensible_isdefaulted = true
1433
+ end
1434
+ if fuel_load.frac_latent.nil?
1435
+ fuel_load.frac_latent = 0.1
1436
+ fuel_load.frac_latent_isdefaulted = true
1437
+ end
1438
+ if fuel_load.weekday_fractions.nil?
1439
+ fuel_load.weekday_fractions = Schedule.FuelLoadsFireplaceWeekdayFractions
1440
+ fuel_load.weekday_fractions_isdefaulted = true
1441
+ end
1442
+ if fuel_load.weekend_fractions.nil?
1443
+ fuel_load.weekend_fractions = Schedule.FuelLoadsFireplaceWeekendFractions
1444
+ fuel_load.weekend_fractions_isdefaulted = true
1445
+ end
1446
+ if fuel_load.monthly_multipliers.nil?
1447
+ fuel_load.monthly_multipliers = Schedule.FuelLoadsFireplaceMonthlyMultipliers
1448
+ fuel_load.monthly_multipliers_isdefaulted = true
1449
+ end
1450
+ end
1451
+ if fuel_load.usage_multiplier.nil?
1452
+ fuel_load.usage_multiplier = 1.0
1453
+ fuel_load.usage_multiplier_isdefaulted = true
1044
1454
  end
1045
1455
  end
1046
1456
  end