urbanopt-cli 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/CMakeLists.txt +9 -9
  4. data/Gemfile +10 -12
  5. data/README.md +1 -0
  6. data/example_files/Gemfile +26 -10
  7. data/example_files/mappers/Baseline.rb +9 -0
  8. data/example_files/mappers/CreateBar.rb +2 -0
  9. data/example_files/mappers/Floorspace.rb +12 -10
  10. data/example_files/mappers/floorspace_workflow.osw +9 -0
  11. data/example_files/residential/clothes_washer.tsv +1 -1
  12. data/example_files/residential/water_heater.tsv +1 -1
  13. data/example_files/resources/hpxml-measures/.circleci/config.yml +20 -0
  14. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +13 -0
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +583 -334
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +687 -586
  17. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +21 -22
  18. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +34 -24
  19. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +14 -1
  20. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +33 -35
  21. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +33 -35
  22. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +34 -36
  23. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +361 -0
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +33 -35
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +33 -35
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +33 -35
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +33 -35
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +33 -35
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +33 -35
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +33 -35
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +33 -35
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +33 -35
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +33 -35
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +33 -35
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +47 -48
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +47 -48
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → base-bldgtype-multifamily-shared-pv.osw} +49 -50
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +365 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → base-bldgtype-multifamily.osw} +43 -44
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +36 -38
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +33 -34
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +33 -34
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +33 -35
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +33 -34
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +33 -34
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +33 -34
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +33 -34
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +33 -35
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +33 -35
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +33 -35
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +33 -34
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +33 -35
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +33 -35
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +33 -35
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +33 -35
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +33 -35
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +33 -35
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +33 -35
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +33 -35
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +33 -35
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +33 -35
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +33 -35
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +33 -35
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +33 -35
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +33 -35
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +362 -0
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +33 -35
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +362 -0
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +33 -35
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +33 -35
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +362 -0
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +33 -35
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +33 -35
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +33 -35
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +33 -35
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +33 -35
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +33 -36
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +361 -0
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +33 -35
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +361 -0
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +33 -35
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +33 -35
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +33 -35
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +33 -35
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +33 -35
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +33 -35
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +33 -35
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +33 -35
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +33 -35
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +33 -35
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +33 -35
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +33 -35
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +33 -35
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +33 -35
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +33 -35
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +33 -35
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +33 -35
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +33 -35
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +33 -35
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +33 -35
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +33 -35
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +33 -35
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +33 -35
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +33 -35
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +33 -35
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +33 -35
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +34 -35
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +33 -35
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +33 -35
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +33 -35
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +33 -35
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +33 -34
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +33 -34
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +33 -35
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +33 -35
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +33 -35
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +34 -35
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +33 -35
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +33 -35
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +35 -35
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +34 -35
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +34 -35
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +33 -35
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +33 -35
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +34 -35
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +33 -35
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +33 -35
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +33 -35
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +33 -35
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +34 -35
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +34 -35
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +34 -35
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +34 -35
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +33 -35
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +33 -35
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +33 -35
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +33 -35
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +34 -35
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +33 -35
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +33 -35
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +33 -35
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +33 -35
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +35 -37
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +34 -35
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +34 -35
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +34 -35
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +34 -35
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +34 -35
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +34 -35
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +33 -35
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +34 -35
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +33 -35
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +33 -35
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +33 -35
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +34 -35
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +34 -35
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +33 -35
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +34 -35
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +34 -36
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +33 -35
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +33 -35
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +33 -35
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +33 -35
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +33 -35
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +33 -35
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +33 -35
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +33 -35
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +33 -35
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +33 -35
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +33 -35
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +33 -35
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +33 -35
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +33 -35
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +33 -35
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +33 -35
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +33 -35
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +36 -38
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +39 -41
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +39 -41
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +33 -35
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -32
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +29 -31
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +33 -35
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +33 -35
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +33 -35
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +33 -35
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +33 -35
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +33 -35
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +33 -35
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +33 -35
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +19 -8
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +33 -35
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +33 -35
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +33 -35
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +369 -0
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-plug-loads-additional-multipliers.osw +361 -0
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +33 -35
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-schedules-random-seed.osw} +47 -50
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace.osw +33 -35
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater.osw +33 -35
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +33 -35
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-vacancy-6-months.osw +33 -35
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +33 -35
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +33 -35
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +33 -35
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +33 -35
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +33 -35
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +33 -35
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +41 -42
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +41 -42
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +40 -41
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +31 -33
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-plug-loads.osw} +35 -37
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +33 -35
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +33 -35
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +33 -35
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +33 -35
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +35 -37
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +35 -37
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +33 -35
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +33 -35
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +33 -35
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +33 -35
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +33 -35
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -38
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -35
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +33 -35
  228. data/example_files/resources/hpxml-measures/Gemfile +0 -2
  229. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +141 -129
  230. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +183 -153
  231. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +4 -4
  232. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +247 -121
  233. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +0 -10
  234. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +434 -0
  235. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +28 -35
  236. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -12
  237. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +60 -53
  238. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +11 -15
  239. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +81 -0
  240. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +3 -1
  241. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +21 -12
  242. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1150 -1072
  243. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +799 -389
  244. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +227 -351
  245. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +122 -89
  246. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +1 -1
  247. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +2 -3
  248. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +0 -6
  249. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +8 -13
  250. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +23 -21
  251. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +8 -7
  252. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +2 -2
  253. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
  254. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
  255. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +103 -72
  256. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +110 -37
  257. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +16 -7
  258. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +109 -0
  259. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1747 -838
  260. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +99 -0
  261. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +5 -16
  262. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +23 -25
  263. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -0
  264. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +1 -1
  265. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +10 -10
  266. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +1 -1
  267. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
  268. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +10 -10
  269. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +77 -60
  270. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +186 -34
  271. data/example_files/resources/hpxml-measures/README.md +1 -0
  272. data/example_files/resources/hpxml-measures/Rakefile +2 -9
  273. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +278 -254
  274. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +32 -5
  275. data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
  276. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +73 -137
  277. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
  278. data/example_files/resources/hpxml-measures/docs/source/conf.py +7 -4
  279. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +4 -4
  280. data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
  281. data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -5
  282. data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
  283. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2340 -0
  284. data/example_files/resources/hpxml-measures/docs/source/{simulation_output_report.rst → workflow_outputs.rst} +18 -16
  285. data/example_files/resources/hpxml-measures/tasks.rb +1154 -669
  286. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +64 -20
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +557 -559
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +523 -524
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +3 -4
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +524 -0
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +523 -524
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +557 -559
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +563 -565
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +511 -513
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +557 -559
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +557 -559
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +557 -559
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +564 -566
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +632 -634
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +530 -532
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +516 -518
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +561 -563
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +564 -566
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-multifamily-buffer-space.xml → base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml} +30 -59
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +553 -0
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-non-freezing-space.xml → base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml} +30 -59
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +30 -59
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +30 -59
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +426 -0
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +429 -0
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +469 -0
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +464 -0
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +409 -0
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +408 -0
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +411 -0
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +445 -0
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +408 -0
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +410 -0
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +445 -0
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +440 -0
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +459 -0
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +465 -0
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +35 -410
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +488 -0
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +472 -0
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +464 -0
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +457 -0
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +450 -0
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +447 -0
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +606 -0
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +517 -519
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +517 -519
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +549 -551
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -566
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +562 -564
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +550 -549
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +549 -551
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +552 -551
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +566 -568
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +518 -520
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +518 -520
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +519 -521
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +526 -528
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +518 -520
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +566 -568
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +567 -569
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +565 -567
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +523 -525
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +561 -563
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +576 -578
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +495 -497
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +564 -566
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +564 -566
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +564 -566
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +564 -566
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +564 -566
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +576 -578
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +576 -578
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +576 -578
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +569 -571
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +576 -578
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +576 -578
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +562 -564
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-window-interior-shading.xml → base-dhw-tank-elec-uef.xml} +8 -9
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +562 -564
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +564 -0
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +562 -564
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +560 -562
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-dhw-tank-heat-pump-uef.xml} +6 -13
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +568 -570
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +575 -577
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +560 -562
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +562 -564
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +562 -564
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +560 -562
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +560 -0
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +559 -561
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +560 -0
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +567 -569
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +574 -576
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +559 -561
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +559 -561
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +660 -664
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +574 -576
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +561 -563
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +561 -563
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +561 -563
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +561 -563
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +635 -639
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +561 -563
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +561 -563
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +561 -563
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +564 -566
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +560 -562
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +576 -578
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +589 -591
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +589 -591
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +516 -0
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2473 -2493
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +753 -755
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-interior-shading.xml +561 -563
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +503 -505
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +497 -497
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +723 -729
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +561 -563
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +561 -563
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +684 -688
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +515 -517
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +608 -610
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +557 -559
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +572 -574
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +572 -574
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +572 -574
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +575 -577
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +626 -628
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +563 -562
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +560 -562
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +560 -562
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +519 -521
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +519 -521
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +520 -522
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +519 -521
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +519 -521
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +519 -521
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +550 -549
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +547 -549
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +547 -549
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +580 -576
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +533 -535
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +564 -563
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +564 -563
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +561 -563
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +561 -563
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +563 -562
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +561 -563
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +510 -512
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +553 -555
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +526 -528
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +506 -505
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +513 -513
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +513 -513
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -0
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +561 -563
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +547 -549
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +561 -563
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +561 -563
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +550 -550
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +559 -561
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +547 -549
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +547 -549
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +547 -549
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +577 -579
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -564
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +498 -500
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +549 -548
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +512 -511
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +556 -555
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +562 -561
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +562 -561
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +519 -518
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +913 -912
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +834 -837
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +487 -489
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +566 -0
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +569 -571
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +509 -511
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +509 -511
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +561 -563
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +513 -513
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +513 -513
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +564 -566
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +561 -563
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +513 -513
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +572 -574
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +584 -586
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +487 -489
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +561 -563
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +561 -563
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +515 -517
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +561 -563
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +515 -517
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +573 -575
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +589 -591
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +546 -548
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +539 -541
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +574 -576
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +575 -577
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +575 -577
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +573 -575
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +573 -575
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +574 -576
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +574 -576
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +793 -795
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +573 -575
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +571 -573
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +476 -495
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +578 -0
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +753 -833
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +740 -820
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +549 -559
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +574 -576
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shelter-coefficient.xml +564 -566
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +723 -725
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +2 -4
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +2 -4
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +2 -4
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +562 -564
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +568 -570
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +564 -566
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +565 -567
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +561 -563
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +561 -563
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-autosize.xml +559 -561
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml +562 -561
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml +559 -558
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml +556 -558
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml +556 -558
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml +518 -520
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml +569 -571
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml +519 -521
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml +549 -548
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml +546 -548
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml +546 -548
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml +575 -571
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml +560 -559
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml +559 -558
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml +509 -511
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml +552 -554
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml +512 -512
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml +546 -548
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml +559 -561
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml +559 -561
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml +549 -549
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml +557 -559
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml +562 -564
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml +559 -561
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml +548 -547
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml +561 -560
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml +558 -557
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml +553 -552
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml +558 -557
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-room-ac-only-autosize.xml +508 -510
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-stove-oil-only-autosize.xml +512 -512
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml +512 -512
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +533 -535
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +561 -563
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +561 -563
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +561 -563
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +576 -578
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +3 -5
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +563 -0
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +561 -563
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +561 -563
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +561 -563
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +561 -563
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +545 -547
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +542 -544
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +545 -545
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +562 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +612 -616
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +625 -629
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +609 -611
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +549 -551
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +471 -473
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +534 -534
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +561 -560
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +562 -561
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +913 -912
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +913 -912
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +532 -534
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +547 -549
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +547 -549
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +913 -912
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{invalid-calendar-year.xml → hvac-inconsistent-fan-powers.xml} +8 -5
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +569 -571
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +562 -0
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +562 -0
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +562 -0
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +568 -567
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +561 -563
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +561 -563
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +465 -0
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +643 -0
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +564 -0
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +574 -576
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +552 -551
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +518 -520
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +563 -565
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +562 -0
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +561 -563
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +576 -578
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +561 -563
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +909 -908
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +559 -561
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +561 -563
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +561 -563
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +564 -566
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +561 -563
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +589 -591
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +561 -563
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +562 -0
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +545 -547
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +561 -563
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +567 -569
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +567 -569
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +565 -564
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +527 -529
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/slab-zero-exposed-perimeter.xml +561 -563
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +532 -534
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +567 -566
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +532 -534
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +574 -576
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +561 -563
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +561 -563
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +464 -827
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +464 -827
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +589 -591
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +576 -578
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +561 -563
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +561 -563
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +561 -563
  631. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -14
  632. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -14
  633. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -14
  634. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -14
  635. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -14
  636. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -14
  637. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -14
  638. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -14
  639. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -14
  640. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -14
  641. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -14
  642. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -14
  643. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -14
  644. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -14
  645. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -14
  646. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -14
  647. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -14
  648. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -14
  649. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -14
  650. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -14
  651. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -14
  652. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -14
  653. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -16
  654. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -16
  655. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -16
  656. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -16
  657. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +277 -224
  658. data/lib/uo_cli/version.rb +1 -1
  659. data/scripts/setup-env-gitbash.sh +4 -4
  660. data/scripts/setup-env.bat +14 -11
  661. data/scripts/setup-env.ps1 +13 -10
  662. data/uo_cli.gemspec +6 -4
  663. metadata +106 -57
  664. data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/appliances-location-unconditioned-space.xml +0 -564
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
@@ -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