urbanopt-cli 0.4.1 → 0.6.1

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 (944) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/CHANGELOG.md +59 -0
  4. data/CMakeLists.txt +17 -17
  5. data/FindOpenStudioSDK.cmake +12 -7
  6. data/Gemfile +8 -10
  7. data/LICENSE.md +11 -1
  8. data/README.md +1 -0
  9. data/Rakefile +16 -6
  10. data/example_files/Gemfile +25 -9
  11. data/example_files/example_project.json +35 -20
  12. data/example_files/example_project_combined.json +100 -5
  13. data/example_files/example_project_with_electric_network.json +2116 -0
  14. data/example_files/mappers/Baseline.rb +111 -51
  15. data/example_files/mappers/CreateBar.rb +19 -7
  16. data/example_files/mappers/EvCharging.rb +141 -0
  17. data/example_files/mappers/Floorspace.rb +29 -17
  18. data/example_files/mappers/HighEfficiency.rb +20 -8
  19. data/example_files/mappers/HighEfficiencyCreateBar.rb +19 -8
  20. data/example_files/mappers/HighEfficiencyFloorspace.rb +19 -8
  21. data/example_files/mappers/ThermalStorage.rb +16 -6
  22. data/example_files/mappers/base_workflow.osw +26 -1
  23. data/example_files/mappers/floorspace_workflow.osw +9 -0
  24. data/example_files/measures/BuildResidentialModel/measure.rb +249 -134
  25. data/example_files/reopt/base_assumptions.json +2 -2
  26. data/example_files/reopt/multiPV_assumptions.json +4 -3
  27. data/example_files/residential/clothes_dryer.tsv +7 -7
  28. data/example_files/residential/clothes_washer.tsv +2 -2
  29. data/example_files/residential/cooling_system.tsv +42 -22
  30. data/example_files/residential/dishwasher.tsv +1 -1
  31. data/example_files/residential/exhaust.tsv +3 -0
  32. data/example_files/residential/heat_pump.tsv +62 -40
  33. data/example_files/residential/water_heater.tsv +1 -1
  34. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +14 -0
  35. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +116 -0
  36. data/example_files/resources/hpxml-measures/.gitignore +1 -8
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1088 -1329
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1819 -1383
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +450 -362
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +165 -112
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.json +388 -0
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.md +43 -0
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +56 -82
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +57 -83
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → base-appliances-dehumidifier-ief-whole-home.osw} +59 -85
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +56 -82
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +56 -82
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +56 -82
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +61 -87
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +56 -82
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +56 -82
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +56 -82
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +56 -82
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +56 -82
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +56 -82
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +56 -82
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +341 -0
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +341 -0
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +70 -95
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +70 -95
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +341 -0
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +341 -0
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +341 -0
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +59 -85
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +56 -82
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +56 -82
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +56 -82
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +56 -82
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +56 -82
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +56 -82
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +56 -82
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +56 -82
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +56 -82
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +56 -82
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +56 -82
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +56 -82
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +57 -83
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +56 -82
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +56 -82
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +56 -82
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +56 -82
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +56 -82
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +56 -82
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +56 -82
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +56 -82
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +56 -82
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +56 -82
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +56 -82
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +56 -82
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +338 -0
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +56 -82
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +338 -0
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +56 -82
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +56 -82
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +338 -0
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +56 -82
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +56 -82
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +56 -82
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +56 -82
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +56 -82
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +56 -83
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +337 -0
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +56 -82
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +337 -0
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +56 -82
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +56 -82
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +56 -82
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +56 -82
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +56 -82
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +56 -82
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +56 -82
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +56 -82
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +56 -82
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +56 -82
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +56 -82
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +56 -82
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +56 -82
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +56 -82
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +56 -82
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +57 -83
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +57 -83
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +56 -82
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +56 -82
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +56 -82
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +56 -82
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +55 -81
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +55 -81
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +55 -81
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +55 -81
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +55 -81
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +56 -82
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +56 -82
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +56 -82
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +56 -82
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +56 -82
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +56 -82
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +56 -82
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +56 -82
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +56 -82
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +56 -82
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +56 -82
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +56 -82
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +56 -82
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +56 -82
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +55 -81
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +55 -81
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +55 -81
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +55 -81
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +56 -82
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +56 -82
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +56 -82
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +56 -82
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +57 -83
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +56 -82
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +56 -82
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +57 -83
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +56 -82
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +56 -82
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +56 -82
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +56 -82
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +56 -82
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +56 -82
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +56 -82
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +56 -82
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +56 -82
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +56 -82
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +56 -84
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +339 -0
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +56 -82
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +56 -82
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +56 -82
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +56 -82
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +57 -83
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +57 -83
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +56 -82
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +57 -83
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +56 -82
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +56 -82
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +56 -82
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +56 -82
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +56 -82
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +56 -82
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +56 -82
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +57 -83
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +56 -82
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +56 -82
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +64 -90
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +56 -82
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +69 -95
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +337 -0
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +56 -82
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +56 -82
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +64 -92
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +57 -83
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +56 -82
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +56 -82
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +56 -82
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +56 -82
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +56 -82
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +56 -82
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +56 -82
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +56 -82
  228. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +57 -83
  229. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +60 -86
  230. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +60 -86
  231. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +56 -82
  232. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
  233. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +52 -78
  234. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +52 -78
  235. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +59 -85
  236. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +56 -82
  237. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +56 -82
  238. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +56 -82
  239. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +56 -82
  240. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +56 -82
  241. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +56 -82
  242. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +56 -82
  243. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +56 -82
  244. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +71 -57
  245. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +56 -82
  246. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
  247. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
  248. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
  249. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
  250. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
  251. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
  252. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
  253. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
  254. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
  255. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
  256. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
  257. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
  258. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
  259. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
  260. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
  261. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
  262. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
  263. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
  264. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
  265. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
  266. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
  267. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
  268. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
  269. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
  270. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
  271. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  272. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
  273. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  274. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
  275. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  276. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
  277. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  278. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
  279. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  280. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
  281. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  282. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
  283. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  284. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
  285. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  286. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
  287. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  288. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
  289. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
  290. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
  291. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  292. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
  293. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  294. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
  295. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  296. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
  297. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  298. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
  299. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  300. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
  301. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  302. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
  303. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  304. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
  305. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  306. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
  307. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  308. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
  309. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
  310. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
  311. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
  312. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +339 -0
  313. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → extra-bldgtype-single-family-attached-double-exterior.osw} +62 -89
  314. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
  315. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-bldgtype-single-family-attached-single-exterior-front.osw} +60 -86
  316. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
  317. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
  318. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
  319. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
  320. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
  321. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → extra-bldgtype-single-family-attached-unconditioned-basement.osw} +64 -91
  322. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
  323. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
  324. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
  325. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
  326. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
  327. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
  328. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +56 -82
  329. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
  330. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
  331. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
  332. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +56 -82
  333. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
  334. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +337 -0
  335. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +337 -0
  336. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +56 -82
  337. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +338 -0
  338. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
  339. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
  340. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
  341. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +58 -84
  342. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
  343. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-portable-heater.osw → extra-second-heating-system-portable-heater-to-heating-system.osw} +56 -82
  344. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +56 -82
  345. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
  346. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
  347. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
  348. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
  349. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
  350. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +59 -85
  351. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
  352. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +56 -82
  353. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +56 -82
  354. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +56 -82
  355. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +56 -82
  356. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
  357. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +56 -82
  358. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +64 -89
  359. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +64 -89
  360. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +63 -88
  361. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +54 -80
  362. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
  363. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +337 -0
  364. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-vehicle-plug-loads.osw} +58 -84
  365. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
  366. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +56 -82
  367. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +56 -82
  368. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +56 -82
  369. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
  370. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +56 -82
  371. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
  372. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +58 -84
  373. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +58 -84
  374. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +56 -82
  375. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +56 -82
  376. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +337 -0
  377. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +56 -82
  378. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +56 -82
  379. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +56 -82
  380. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +59 -85
  381. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +58 -84
  382. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +56 -82
  383. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
  384. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
  385. data/example_files/resources/hpxml-measures/Changelog.md +249 -0
  386. data/example_files/resources/hpxml-measures/Gemfile +2 -5
  387. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +404 -1357
  388. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +247 -171
  389. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +11 -101
  390. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +824 -301
  391. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +18 -35
  392. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +526 -0
  393. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +135 -207
  394. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +14 -186
  395. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +549 -93
  396. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +12 -15
  397. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +78 -0
  398. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +413 -15
  399. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +48 -37
  400. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1627 -1227
  401. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +1192 -434
  402. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1555 -1616
  403. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1436 -1479
  404. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +3 -2
  405. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +22 -10
  406. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +85 -19
  407. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
  408. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +22 -46
  409. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +22 -21
  410. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +51 -14
  411. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +24 -7
  412. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
  413. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
  414. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
  415. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +106 -75
  416. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +109 -34
  417. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +22 -36
  418. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1565 -768
  419. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +151 -0
  420. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +101 -0
  421. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +9 -18
  422. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +316 -28
  423. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +53 -0
  424. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +4 -2
  425. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +13 -11
  426. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +4 -2
  427. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +5 -3
  428. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +13 -11
  429. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +102 -62
  430. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +189 -35
  431. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
  432. data/example_files/resources/hpxml-measures/README.md +5 -5
  433. data/example_files/resources/hpxml-measures/Rakefile +2 -10
  434. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +416 -299
  435. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +364 -481
  436. data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
  437. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +327 -320
  438. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
  439. data/example_files/resources/hpxml-measures/docs/source/conf.py +11 -5
  440. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +6 -6
  441. data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
  442. data/example_files/resources/hpxml-measures/docs/source/intro.rst +7 -109
  443. data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
  444. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2482 -0
  445. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +282 -0
  446. data/example_files/resources/hpxml-measures/tasks.rb +2494 -1248
  447. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
  448. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
  449. data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
  450. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
  451. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
  452. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
  453. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
  454. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
  455. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
  456. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +96 -21
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +558 -559
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +8 -7
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → base-appliances-dehumidifier-ief-whole-home.xml} +10 -9
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +535 -0
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +525 -524
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +558 -559
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +564 -565
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +513 -513
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +558 -559
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +558 -559
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +558 -559
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +565 -566
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +633 -634
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +531 -532
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +517 -518
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +562 -563
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +565 -566
  474. 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} +34 -62
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +554 -0
  476. 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} +34 -62
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +34 -62
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +34 -62
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +425 -0
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +427 -0
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +479 -0
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +474 -0
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +408 -0
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +406 -0
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +409 -0
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +457 -0
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +407 -0
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +408 -0
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +456 -0
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +451 -0
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +460 -0
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +466 -0
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +43 -415
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +489 -0
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +473 -0
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +465 -0
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +458 -0
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +451 -0
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +448 -0
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +619 -0
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +516 -519
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +516 -519
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +550 -551
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +7 -9
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +563 -564
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +548 -549
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +550 -551
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +550 -551
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +567 -568
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +517 -520
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +517 -520
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +518 -521
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +525 -528
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +517 -520
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +567 -568
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +568 -569
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +566 -567
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +522 -525
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +562 -563
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +575 -578
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +497 -497
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +565 -566
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +565 -566
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +565 -566
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +565 -566
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +565 -566
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +577 -578
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +577 -578
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +577 -578
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +570 -571
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +577 -578
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +577 -578
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +563 -564
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +564 -0
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +563 -564
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +565 -0
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +563 -564
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +561 -562
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +564 -0
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +569 -570
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +576 -577
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +561 -562
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +563 -564
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +563 -564
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +561 -562
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +561 -0
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +560 -561
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +561 -0
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +568 -569
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +575 -576
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +560 -561
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +560 -561
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +661 -664
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +575 -576
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +562 -563
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +562 -563
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +562 -563
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +562 -563
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +636 -639
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +562 -563
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +562 -563
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +562 -563
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +565 -566
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +561 -562
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +582 -578
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +590 -591
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +601 -0
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +590 -591
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +517 -0
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2474 -2493
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2475 -0
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +754 -755
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +504 -505
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +23 -9
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +498 -497
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +644 -0
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +724 -729
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +562 -563
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +562 -563
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +685 -688
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +516 -517
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +609 -610
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +558 -559
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +573 -574
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +573 -574
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +573 -574
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +576 -577
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +627 -628
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml} +8 -12
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml} +9 -9
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +561 -562
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +561 -562
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +561 -562
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +553 -0
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml} +5 -6
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +561 -0
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +558 -0
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml} +4 -5
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed.xml} +4 -5
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml} +4 -5
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed.xml} +4 -5
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml → base-hvac-autosize-boiler-elec-only.xml} +2 -5
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml → base-hvac-autosize-boiler-gas-central-ac-1-speed.xml} +4 -6
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml → base-hvac-autosize-boiler-gas-only.xml} +2 -5
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml → base-hvac-autosize-central-ac-only-1-speed.xml} +547 -548
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml → base-hvac-autosize-central-ac-only-2-speed.xml} +4 -5
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml → base-hvac-autosize-central-ac-only-var-speed.xml} +4 -5
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml → base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml} +570 -571
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +559 -0
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml} +557 -558
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml → base-hvac-autosize-elec-resistance-only.xml} +2 -5
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml → base-hvac-autosize-evap-cooler-furnace-gas.xml} +4 -5
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml → base-hvac-autosize-floor-furnace-propane-only.xml} +5 -6
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml → base-hvac-autosize-furnace-elec-only.xml} +4 -5
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-2-speed.xml} +4 -5
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-var-speed.xml} +4 -5
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-autosize-furnace-gas-only.xml} +4 -6
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml → base-hvac-autosize-furnace-gas-room-ac.xml} +4 -5
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +555 -0
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +560 -0
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml} +4 -6
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml → base-hvac-autosize-ground-to-air-heat-pump.xml} +4 -6
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +547 -0
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml} +551 -552
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml} +556 -557
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +560 -0
  631. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted.xml} +556 -557
  632. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-room-ac-only-autosize.xml → base-hvac-autosize-room-ac-only.xml} +2 -5
  633. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-stove-oil-only-autosize.xml → base-hvac-autosize-stove-oil-only.xml} +5 -6
  634. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml → base-hvac-autosize-wall-furnace-elec-only.xml} +5 -6
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +4 -5
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +518 -521
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +518 -521
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +519 -522
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +518 -521
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +518 -521
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +518 -521
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +548 -549
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +548 -549
  645. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +548 -549
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +575 -576
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +532 -535
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +562 -563
  649. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +562 -563
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +562 -563
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +562 -563
  652. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +561 -562
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +562 -563
  654. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +509 -512
  655. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +555 -555
  656. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +536 -528
  657. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +503 -505
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +6 -7
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +6 -57
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +6 -7
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +549 -0
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +562 -563
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +548 -549
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +562 -563
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +562 -563
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +5 -7
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +560 -561
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +548 -549
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +548 -549
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +548 -549
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +576 -579
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +557 -0
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +563 -0
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +7 -9
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +8 -9
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +13 -8
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +567 -0
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +567 -0
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml +572 -0
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +572 -0
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +572 -0
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-only.xml +553 -0
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +566 -0
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml} +10 -5
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +13 -8
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +569 -0
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml} +9 -10
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +570 -0
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +547 -548
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +508 -511
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +554 -555
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +560 -561
  693. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +560 -561
  694. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +515 -518
  695. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +21 -13
  696. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +486 -489
  697. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +6 -57
  698. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +567 -0
  699. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +570 -571
  700. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +508 -511
  701. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +508 -511
  702. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +562 -563
  703. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +6 -7
  704. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +6 -7
  705. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +565 -566
  706. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +562 -563
  707. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +6 -7
  708. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +573 -574
  709. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +585 -586
  710. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +488 -489
  711. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +562 -563
  712. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +573 -563
  713. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +516 -517
  714. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +573 -563
  715. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +563 -0
  716. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +517 -0
  717. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +516 -517
  718. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +517 -0
  719. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +577 -0
  720. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +574 -575
  721. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +590 -591
  722. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +545 -548
  723. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +549 -541
  724. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +575 -576
  725. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +576 -577
  726. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +576 -577
  727. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +574 -575
  728. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +574 -575
  729. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +575 -576
  730. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +575 -576
  731. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +796 -795
  732. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +574 -575
  733. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +572 -573
  734. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +478 -495
  735. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +579 -0
  736. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +758 -833
  737. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +749 -820
  738. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +550 -559
  739. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +575 -576
  740. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-calendar-year.xml → base-misc-shielding-of-home.xml} +7 -8
  741. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +728 -725
  742. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1657 -0
  743. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +6 -7
  744. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +564 -0
  745. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +6 -7
  746. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +6 -7
  747. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +563 -564
  748. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +569 -570
  749. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +565 -566
  750. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +566 -567
  751. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +562 -563
  752. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +562 -563
  753. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
  754. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +532 -535
  755. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +562 -563
  756. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +562 -563
  757. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +562 -563
  758. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +535 -0
  759. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +535 -0
  760. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +575 -578
  761. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +7 -8
  762. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +564 -0
  763. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +562 -563
  764. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +563 -0
  765. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +563 -0
  766. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +562 -563
  767. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +562 -563
  768. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +562 -563
  769. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +546 -547
  770. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +543 -544
  771. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +546 -545
  772. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +563 -0
  773. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +448 -0
  774. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +613 -616
  775. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +626 -629
  776. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +610 -611
  777. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +550 -551
  778. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +472 -473
  779. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +488 -534
  780. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +760 -0
  781. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +759 -0
  782. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +761 -0
  783. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +759 -0
  784. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +563 -0
  785. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +460 -0
  786. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +579 -0
  787. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +559 -560
  788. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +21 -13
  789. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +21 -13
  790. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +528 -534
  791. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +546 -549
  792. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +546 -549
  793. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +21 -13
  794. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +569 -0
  795. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +570 -571
  796. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +407 -0
  797. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +563 -0
  798. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +563 -0
  799. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +563 -0
  800. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +563 -0
  801. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +569 -567
  802. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +562 -563
  803. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +562 -563
  804. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +466 -0
  805. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +644 -0
  806. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{appliances-location-unconditioned-space.xml → invalid-foundation-wall-properties.xml} +39 -29
  807. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +591 -0
  808. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +591 -0
  809. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +563 -0
  810. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +565 -0
  811. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +575 -576
  812. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +465 -0
  813. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{slab-zero-exposed-perimeter.xml → invalid-number-of-conditioned-floors.xml} +7 -8
  814. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +451 -0
  815. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +550 -551
  816. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +517 -520
  817. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +564 -565
  818. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +563 -0
  819. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +473 -0
  820. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +562 -563
  821. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +582 -578
  822. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +562 -563
  823. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +21 -13
  824. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +560 -561
  825. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +562 -563
  826. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +562 -563
  827. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +575 -566
  828. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +562 -563
  829. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1657 -0
  830. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1657 -0
  831. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +432 -0
  832. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
  833. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +590 -591
  834. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +562 -563
  835. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +563 -0
  836. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +546 -547
  837. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +562 -563
  838. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +568 -569
  839. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +568 -569
  840. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +563 -564
  841. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +526 -529
  842. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +571 -0
  843. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +531 -534
  844. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +565 -566
  845. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +531 -534
  846. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +575 -576
  847. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +562 -563
  848. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +562 -563
  849. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +465 -827
  850. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +465 -827
  851. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +590 -591
  852. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +577 -578
  853. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +562 -563
  854. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +562 -563
  855. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +562 -563
  856. data/example_files/resources/hpxml-measures/workflow/template.osw +5 -1
  857. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -17
  858. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -17
  859. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -17
  860. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -17
  861. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -17
  862. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -17
  863. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -17
  864. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -17
  865. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -17
  866. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -17
  867. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -17
  868. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -17
  869. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -17
  870. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -17
  871. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -17
  872. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -17
  873. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -17
  874. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -17
  875. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -17
  876. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -17
  877. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -17
  878. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -17
  879. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -19
  880. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -19
  881. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -19
  882. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -19
  883. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +294 -0
  884. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +27 -0
  885. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +294 -0
  886. data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +130 -0
  887. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +522 -527
  888. data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
  889. data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
  890. data/example_files/validation_schema.yaml +149 -0
  891. data/example_files/visualization/input_visualization_feature.html +213 -56
  892. data/example_files/visualization/input_visualization_scenario.html +92 -30
  893. data/lib/uo_cli.rb +406 -128
  894. data/lib/uo_cli/version.rb +17 -7
  895. data/requirements.txt +2 -0
  896. data/scripts/setup-env-gitbash.sh +5 -5
  897. data/scripts/setup-env-unix.sh +4 -4
  898. data/scripts/setup-env.bat +14 -11
  899. data/scripts/setup-env.ps1 +13 -10
  900. data/uo_cli.gemspec +10 -8
  901. metadata +390 -130
  902. data/developer_nrel_key.rb +0 -31
  903. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
  904. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
  905. data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
  906. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
  907. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
  908. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
  909. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
  910. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
  911. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
  912. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
  913. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -61
  914. data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
  915. data/example_files/resources/hpxml-measures/docs/source/simulation_output_report.rst +0 -252
  916. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
  917. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
  918. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
  919. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
  920. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
  921. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +0 -501
  922. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -838
  923. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
  924. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
  925. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
  926. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
  927. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
  928. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
  929. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
  930. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
  931. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
  932. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
  933. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
  934. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
  935. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
  936. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
  937. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
  938. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
  939. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
  940. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
  941. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
  942. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
  943. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
  944. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-interior-shading.xml +0 -564
@@ -1,94 +1,176 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class HPXMLDefaults
4
- def self.apply(hpxml, cfa, nbeds, ncfl, ncfl_ag, has_uncond_bsmnt, eri_version, epw_file, runner)
5
- apply_header(hpxml, epw_file, runner)
4
+ # Note: Each HPXML object (e.g., HPXML::Wall) has an additional_properties
5
+ # child object where # custom information can be attached to the object without
6
+ # being written to the HPXML file. This is useful to associate additional values
7
+ # with the HPXML objects that will ultimately get passed around.
8
+
9
+ def self.apply(hpxml, eri_version, weather, epw_file: nil)
10
+ cfa = hpxml.building_construction.conditioned_floor_area
11
+ nbeds = hpxml.building_construction.number_of_bedrooms
12
+ ncfl = hpxml.building_construction.number_of_conditioned_floors
13
+ ncfl_ag = hpxml.building_construction.number_of_conditioned_floors_above_grade
14
+ has_uncond_bsmnt = hpxml.has_space_type(HPXML::LocationBasementUnconditioned)
15
+
16
+ apply_header(hpxml, epw_file)
6
17
  apply_site(hpxml)
7
18
  apply_building_occupancy(hpxml, nbeds)
8
19
  apply_building_construction(hpxml, cfa, nbeds)
20
+ apply_infiltration(hpxml)
9
21
  apply_attics(hpxml)
10
22
  apply_foundations(hpxml)
11
- apply_infiltration(hpxml)
12
23
  apply_roofs(hpxml)
13
- apply_walls(hpxml)
14
24
  apply_rim_joists(hpxml)
25
+ apply_walls(hpxml)
26
+ apply_foundation_walls(hpxml)
27
+ apply_slabs(hpxml)
15
28
  apply_windows(hpxml)
16
29
  apply_skylights(hpxml)
17
- apply_hvac(hpxml)
30
+ apply_hvac(hpxml, weather)
31
+ apply_hvac_control(hpxml)
18
32
  apply_hvac_distribution(hpxml, ncfl, ncfl_ag)
33
+ apply_ventilation_fans(hpxml)
19
34
  apply_water_heaters(hpxml, nbeds, eri_version)
20
35
  apply_hot_water_distribution(hpxml, cfa, ncfl, has_uncond_bsmnt)
21
36
  apply_water_fixtures(hpxml)
22
37
  apply_solar_thermal_systems(hpxml)
23
- apply_ventilation_fans(hpxml)
38
+ apply_appliances(hpxml, nbeds, eri_version)
39
+ apply_lighting(hpxml)
24
40
  apply_ceiling_fans(hpxml, nbeds)
41
+ apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
25
42
  apply_plug_loads(hpxml, cfa, nbeds)
26
43
  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
44
  apply_pv_systems(hpxml)
45
+ apply_generators(hpxml)
46
+
47
+ # Do HVAC sizing after all other defaults have been applied
48
+ apply_hvac_sizing(hpxml, weather, cfa, nbeds)
31
49
  end
32
50
 
33
51
  private
34
52
 
35
- def self.apply_header(hpxml, epw_file, runner)
36
- hpxml.header.timestep = 60 if hpxml.header.timestep.nil?
53
+ def self.apply_header(hpxml, epw_file)
54
+ if hpxml.header.timestep.nil?
55
+ hpxml.header.timestep = 60
56
+ hpxml.header.timestep_isdefaulted = true
57
+ end
58
+
59
+ if hpxml.header.sim_begin_month.nil?
60
+ hpxml.header.sim_begin_month = 1
61
+ hpxml.header.sim_begin_month_isdefaulted = true
62
+ end
63
+ if hpxml.header.sim_begin_day.nil?
64
+ hpxml.header.sim_begin_day = 1
65
+ hpxml.header.sim_begin_day_isdefaulted = true
66
+ end
67
+ if hpxml.header.sim_end_month.nil?
68
+ hpxml.header.sim_end_month = 12
69
+ hpxml.header.sim_end_month_isdefaulted = true
70
+ end
71
+ if hpxml.header.sim_end_day.nil?
72
+ hpxml.header.sim_end_day = 31
73
+ hpxml.header.sim_end_day_isdefaulted = true
74
+ end
37
75
 
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
- if epw_file.startDateActualYear.is_initialized # AMY
76
+ if (not epw_file.nil?) && epw_file.startDateActualYear.is_initialized # AMY
43
77
  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
78
+ if hpxml.header.sim_calendar_year != epw_file.startDateActualYear.get
79
+ hpxml.header.sim_calendar_year = epw_file.startDateActualYear.get
80
+ hpxml.header.sim_calendar_year_isdefaulted = true
81
+ end
82
+ else
83
+ hpxml.header.sim_calendar_year = epw_file.startDateActualYear.get
84
+ hpxml.header.sim_calendar_year_isdefaulted = true
45
85
  end
46
- hpxml.header.sim_calendar_year = epw_file.startDateActualYear.get
47
86
  else
48
- hpxml.header.sim_calendar_year = 2007 if hpxml.header.sim_calendar_year.nil? # For consistency with SAM utility bill calculations
87
+ if hpxml.header.sim_calendar_year.nil?
88
+ hpxml.header.sim_calendar_year = 2007 # For consistency with SAM utility bill calculations
89
+ hpxml.header.sim_calendar_year_isdefaulted = true
90
+ end
91
+ end
92
+
93
+ if hpxml.header.dst_enabled.nil?
94
+ hpxml.header.dst_enabled = true # Assume DST since it occurs in most US locations
95
+ hpxml.header.dst_enabled_isdefaulted = true
49
96
  end
50
97
 
51
- hpxml.header.dst_enabled = true if hpxml.header.dst_enabled.nil? # Assume DST since it occurs in most US locations
52
- 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?
98
+ if hpxml.header.dst_enabled && (not epw_file.nil?)
99
+ 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
100
  if epw_file.daylightSavingStartDate.is_initialized && epw_file.daylightSavingEndDate.is_initialized
55
101
  # Use weather file DST dates if available
56
102
  dst_start_date = epw_file.daylightSavingStartDate.get
57
103
  dst_end_date = epw_file.daylightSavingEndDate.get
58
104
  hpxml.header.dst_begin_month = dst_start_date.monthOfYear.value
59
- hpxml.header.dst_begin_day_of_month = dst_start_date.dayOfMonth
105
+ hpxml.header.dst_begin_day = dst_start_date.dayOfMonth
60
106
  hpxml.header.dst_end_month = dst_end_date.monthOfYear.value
61
- hpxml.header.dst_end_day_of_month = dst_end_date.dayOfMonth
107
+ hpxml.header.dst_end_day = dst_end_date.dayOfMonth
62
108
  else
63
109
  # Roughly average US dates according to https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States
64
110
  hpxml.header.dst_begin_month = 3
65
- hpxml.header.dst_begin_day_of_month = 12
111
+ hpxml.header.dst_begin_day = 12
66
112
  hpxml.header.dst_end_month = 11
67
- hpxml.header.dst_end_day_of_month = 5
113
+ hpxml.header.dst_end_day = 5
68
114
  end
115
+ hpxml.header.dst_begin_month_isdefaulted = true
116
+ hpxml.header.dst_begin_day_isdefaulted = true
117
+ hpxml.header.dst_end_month_isdefaulted = true
118
+ hpxml.header.dst_end_day_isdefaulted = true
69
119
  end
70
120
  end
71
121
 
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?
122
+ if hpxml.header.allow_increased_fixed_capacities.nil?
123
+ hpxml.header.allow_increased_fixed_capacities = false
124
+ hpxml.header.allow_increased_fixed_capacities_isdefaulted = true
125
+ end
126
+ if hpxml.header.use_max_load_for_heat_pumps.nil?
127
+ hpxml.header.use_max_load_for_heat_pumps = true
128
+ hpxml.header.use_max_load_for_heat_pumps_isdefaulted = true
129
+ end
74
130
  end
75
131
 
76
132
  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?
133
+ if hpxml.site.site_type.nil?
134
+ hpxml.site.site_type = HPXML::SiteTypeSuburban
135
+ hpxml.site.site_type_isdefaulted = true
136
+ end
137
+
138
+ if hpxml.site.shielding_of_home.nil?
139
+ hpxml.site.shielding_of_home = HPXML::ShieldingNormal
140
+ hpxml.site.shielding_of_home_isdefaulted = true
141
+ end
142
+ hpxml.site.additional_properties.aim2_shelter_coeff = Airflow.get_aim2_shelter_coefficient(hpxml.site.shielding_of_home)
79
143
  end
80
144
 
81
145
  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?
146
+ if hpxml.building_occupancy.number_of_residents.nil?
147
+ hpxml.building_occupancy.number_of_residents = Geometry.get_occupancy_default_num(nbeds)
148
+ hpxml.building_occupancy.number_of_residents_isdefaulted = true
149
+ end
83
150
  end
84
151
 
85
152
  def self.apply_building_construction(hpxml, cfa, nbeds)
86
- if hpxml.building_construction.conditioned_building_volume.nil?
153
+ if hpxml.building_construction.conditioned_building_volume.nil? && hpxml.building_construction.average_ceiling_height.nil?
154
+ hpxml.building_construction.average_ceiling_height = 8.0
155
+ hpxml.building_construction.average_ceiling_height_isdefaulted = true
156
+ hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height
157
+ hpxml.building_construction.conditioned_building_volume_isdefaulted = true
158
+ elsif hpxml.building_construction.conditioned_building_volume.nil?
87
159
  hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height
160
+ hpxml.building_construction.conditioned_building_volume_isdefaulted = true
161
+ elsif hpxml.building_construction.average_ceiling_height.nil?
162
+ hpxml.building_construction.average_ceiling_height = hpxml.building_construction.conditioned_building_volume / cfa
163
+ hpxml.building_construction.average_ceiling_height_isdefaulted = true
164
+ end
165
+
166
+ if hpxml.building_construction.number_of_bathrooms.nil?
167
+ hpxml.building_construction.number_of_bathrooms = Float(Waterheater.get_default_num_bathrooms(nbeds)).to_i
168
+ hpxml.building_construction.number_of_bathrooms_isdefaulted = true
88
169
  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?
170
+
90
171
  if hpxml.building_construction.has_flue_or_chimney.nil?
91
172
  hpxml.building_construction.has_flue_or_chimney = false
173
+ hpxml.building_construction.has_flue_or_chimney_isdefaulted = true
92
174
  hpxml.heating_systems.each do |heating_system|
93
175
  if [HPXML::HVACTypeFurnace, HPXML::HVACTypeBoiler, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeStove, HPXML::HVACTypeFixedHeater].include? heating_system.heating_system_type
94
176
  if not heating_system.heating_efficiency_afue.nil?
@@ -116,63 +198,84 @@ class HPXMLDefaults
116
198
  end
117
199
  end
118
200
 
201
+ def self.apply_infiltration(hpxml)
202
+ measurements = []
203
+ infil_volume = nil
204
+ hpxml.air_infiltration_measurements.each do |measurement|
205
+ is_ach = ((measurement.unit_of_measure == HPXML::UnitsACH) && !measurement.house_pressure.nil?)
206
+ is_cfm = ((measurement.unit_of_measure == HPXML::UnitsCFM) && !measurement.house_pressure.nil?)
207
+ is_nach = (measurement.unit_of_measure == HPXML::UnitsACHNatural)
208
+ next unless (is_ach || is_cfm || is_nach)
209
+
210
+ measurements << measurement
211
+ next if measurement.infiltration_volume.nil?
212
+
213
+ infil_volume = measurement.infiltration_volume
214
+ end
215
+ if infil_volume.nil?
216
+ infil_volume = hpxml.building_construction.conditioned_building_volume
217
+ measurements.each do |measurement|
218
+ measurement.infiltration_volume = infil_volume
219
+ measurement.infiltration_volume_isdefaulted = true
220
+ end
221
+ end
222
+
223
+ return infil_volume
224
+ end
225
+
119
226
  def self.apply_attics(hpxml)
120
227
  return unless hpxml.has_space_type(HPXML::LocationAtticVented)
121
228
 
122
- vented_attic = nil
229
+ vented_attics = []
230
+ default_sla = Airflow.get_default_vented_attic_sla()
231
+ default_ach = nil
123
232
  hpxml.attics.each do |attic|
124
233
  next unless attic.attic_type == HPXML::AtticTypeVented
234
+ # check existing sla and ach
235
+ default_sla = attic.vented_attic_sla unless attic.vented_attic_sla.nil?
236
+ default_ach = attic.vented_attic_ach unless attic.vented_attic_ach.nil?
125
237
 
126
- vented_attic = attic
238
+ vented_attics << attic
127
239
  end
128
- if vented_attic.nil?
240
+ if vented_attics.empty?
129
241
  hpxml.attics.add(id: 'VentedAttic',
130
- attic_type: HPXML::AtticTypeVented)
131
- vented_attic = hpxml.attics[-1]
242
+ attic_type: HPXML::AtticTypeVented,
243
+ vented_attic_sla: default_sla)
244
+ hpxml.attics[-1].vented_attic_sla_isdefaulted = true
132
245
  end
133
- if vented_attic.vented_attic_sla.nil? && vented_attic.vented_attic_ach.nil?
134
- vented_attic.vented_attic_sla = Airflow.get_default_vented_attic_sla()
246
+ vented_attics.each do |vented_attic|
247
+ next unless (vented_attic.vented_attic_sla.nil? && vented_attic.vented_attic_ach.nil?)
248
+ if not default_ach.nil? # ACH specified
249
+ vented_attic.vented_attic_ach = default_ach
250
+ else # Use SLA
251
+ vented_attic.vented_attic_sla = default_sla
252
+ end
253
+ vented_attic.vented_attic_sla_isdefaulted = true
135
254
  end
136
255
  end
137
256
 
138
257
  def self.apply_foundations(hpxml)
139
258
  return unless hpxml.has_space_type(HPXML::LocationCrawlspaceVented)
140
259
 
141
- vented_crawl = nil
260
+ vented_crawls = []
261
+ default_sla = Airflow.get_default_vented_crawl_sla()
142
262
  hpxml.foundations.each do |foundation|
143
263
  next unless foundation.foundation_type == HPXML::FoundationTypeCrawlspaceVented
264
+ # check existing sla
265
+ default_sla = foundation.vented_crawlspace_sla unless foundation.vented_crawlspace_sla.nil?
144
266
 
145
- vented_crawl = foundation
267
+ vented_crawls << foundation
146
268
  end
147
- if vented_crawl.nil?
269
+ if vented_crawls.empty?
148
270
  hpxml.foundations.add(id: 'VentedCrawlspace',
149
- foundation_type: HPXML::FoundationTypeCrawlspaceVented)
150
- vented_crawl = hpxml.foundations[-1]
151
- end
152
- if vented_crawl.vented_crawlspace_sla.nil?
153
- 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
271
+ foundation_type: HPXML::FoundationTypeCrawlspaceVented,
272
+ vented_crawlspace_sla: default_sla)
273
+ hpxml.foundations[-1].vented_crawlspace_sla_isdefaulted = true
170
274
  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
275
+ vented_crawls.each do |vented_crawl|
276
+ next unless vented_crawl.vented_crawlspace_sla.nil?
277
+ vented_crawl.vented_crawlspace_sla = default_sla
278
+ vented_crawl.vented_crawlspace_sla_isdefaulted = true
176
279
  end
177
280
  end
178
281
 
@@ -180,11 +283,44 @@ class HPXMLDefaults
180
283
  hpxml.roofs.each do |roof|
181
284
  if roof.roof_type.nil?
182
285
  roof.roof_type = HPXML::RoofTypeAsphaltShingles
286
+ roof.roof_type_isdefaulted = true
287
+ end
288
+ if roof.emittance.nil?
289
+ roof.emittance = 0.90
290
+ roof.emittance_isdefaulted = true
291
+ end
292
+ if roof.radiant_barrier.nil?
293
+ roof.radiant_barrier = false
294
+ roof.radiant_barrier_isdefaulted = true
183
295
  end
184
296
  if roof.roof_color.nil?
185
297
  roof.roof_color = Constructions.get_default_roof_color(roof.roof_type, roof.solar_absorptance)
298
+ roof.roof_color_isdefaulted = true
186
299
  elsif roof.solar_absorptance.nil?
187
300
  roof.solar_absorptance = Constructions.get_default_roof_solar_absorptance(roof.roof_type, roof.roof_color)
301
+ roof.solar_absorptance_isdefaulted = true
302
+ end
303
+ end
304
+ end
305
+
306
+ def self.apply_rim_joists(hpxml)
307
+ hpxml.rim_joists.each do |rim_joist|
308
+ next unless rim_joist.is_exterior
309
+
310
+ if rim_joist.emittance.nil?
311
+ rim_joist.emittance = 0.90
312
+ rim_joist.emittance_isdefaulted = true
313
+ end
314
+ if rim_joist.siding.nil?
315
+ rim_joist.siding = HPXML::SidingTypeWood
316
+ rim_joist.siding_isdefaulted = true
317
+ end
318
+ if rim_joist.color.nil?
319
+ rim_joist.color = Constructions.get_default_wall_color(rim_joist.solar_absorptance)
320
+ rim_joist.color_isdefaulted = true
321
+ elsif rim_joist.solar_absorptance.nil?
322
+ rim_joist.solar_absorptance = Constructions.get_default_wall_solar_absorptance(rim_joist.color)
323
+ rim_joist.solar_absorptance_isdefaulted = true
188
324
  end
189
325
  end
190
326
  end
@@ -193,28 +329,49 @@ class HPXMLDefaults
193
329
  hpxml.walls.each do |wall|
194
330
  next unless wall.is_exterior
195
331
 
332
+ if wall.emittance.nil?
333
+ wall.emittance = 0.90
334
+ wall.emittance_isdefaulted = true
335
+ end
196
336
  if wall.siding.nil?
197
337
  wall.siding = HPXML::SidingTypeWood
338
+ wall.siding_isdefaulted = true
198
339
  end
199
340
  if wall.color.nil?
200
341
  wall.color = Constructions.get_default_wall_color(wall.solar_absorptance)
342
+ wall.color_isdefaulted = true
201
343
  elsif wall.solar_absorptance.nil?
202
344
  wall.solar_absorptance = Constructions.get_default_wall_solar_absorptance(wall.color)
345
+ wall.solar_absorptance_isdefaulted = true
203
346
  end
204
347
  end
205
348
  end
206
349
 
207
- def self.apply_rim_joists(hpxml)
208
- hpxml.rim_joists.each do |rim_joist|
209
- next unless rim_joist.is_exterior
350
+ def self.apply_foundation_walls(hpxml)
351
+ hpxml.foundation_walls.each do |foundation_wall|
352
+ if foundation_wall.thickness.nil?
353
+ foundation_wall.thickness = 8.0
354
+ foundation_wall.thickness_isdefaulted = true
355
+ end
356
+ end
357
+ end
210
358
 
211
- if rim_joist.siding.nil?
212
- rim_joist.siding = HPXML::SidingTypeWood
359
+ def self.apply_slabs(hpxml)
360
+ hpxml.slabs.each do |slab|
361
+ if slab.thickness.nil?
362
+ crawl_slab = [HPXML::LocationCrawlspaceVented, HPXML::LocationCrawlspaceUnvented].include?(slab.interior_adjacent_to)
363
+ slab.thickness = crawl_slab ? 0.0 : 4.0
364
+ slab.thickness_isdefaulted = true
213
365
  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)
366
+ conditioned_slab = [HPXML::LocationLivingSpace,
367
+ HPXML::LocationBasementConditioned].include?(slab.interior_adjacent_to)
368
+ if slab.carpet_r_value.nil?
369
+ slab.carpet_r_value = conditioned_slab ? 2.0 : 0.0
370
+ slab.carpet_r_value_isdefaulted = true
371
+ end
372
+ if slab.carpet_fraction.nil?
373
+ slab.carpet_fraction = conditioned_slab ? 0.8 : 0.0
374
+ slab.carpet_fraction_isdefaulted = true
218
375
  end
219
376
  end
220
377
  end
@@ -224,12 +381,23 @@ class HPXMLDefaults
224
381
  hpxml.windows.each do |window|
225
382
  if window.interior_shading_factor_summer.nil?
226
383
  window.interior_shading_factor_summer = default_shade_summer
384
+ window.interior_shading_factor_summer_isdefaulted = true
227
385
  end
228
386
  if window.interior_shading_factor_winter.nil?
229
387
  window.interior_shading_factor_winter = default_shade_winter
388
+ window.interior_shading_factor_winter_isdefaulted = true
389
+ end
390
+ if window.exterior_shading_factor_summer.nil?
391
+ window.exterior_shading_factor_summer = 1.0
392
+ window.exterior_shading_factor_summer_isdefaulted = true
393
+ end
394
+ if window.exterior_shading_factor_winter.nil?
395
+ window.exterior_shading_factor_winter = 1.0
396
+ window.exterior_shading_factor_winter_isdefaulted = true
230
397
  end
231
398
  if window.fraction_operable.nil?
232
399
  window.fraction_operable = Airflow.get_default_fraction_of_windows_operable()
400
+ window.fraction_operable_isdefaulted = true
233
401
  end
234
402
  end
235
403
  end
@@ -238,34 +406,48 @@ class HPXMLDefaults
238
406
  hpxml.skylights.each do |skylight|
239
407
  if skylight.interior_shading_factor_summer.nil?
240
408
  skylight.interior_shading_factor_summer = 1.0
409
+ skylight.interior_shading_factor_summer_isdefaulted = true
241
410
  end
242
411
  if skylight.interior_shading_factor_winter.nil?
243
412
  skylight.interior_shading_factor_winter = 1.0
413
+ skylight.interior_shading_factor_winter_isdefaulted = true
414
+ end
415
+ if skylight.exterior_shading_factor_summer.nil?
416
+ skylight.exterior_shading_factor_summer = 1.0
417
+ skylight.exterior_shading_factor_summer_isdefaulted = true
418
+ end
419
+ if skylight.exterior_shading_factor_winter.nil?
420
+ skylight.exterior_shading_factor_winter = 1.0
421
+ skylight.exterior_shading_factor_winter_isdefaulted = true
244
422
  end
245
423
  end
246
424
  end
247
425
 
248
- def self.apply_hvac(hpxml)
426
+ def self.apply_hvac(hpxml, weather)
427
+ HVAC.apply_shared_systems(hpxml)
428
+
249
429
  # Default AC/HP compressor type
250
430
  hpxml.cooling_systems.each do |cooling_system|
251
- next unless cooling_system.cooling_system_type == HPXML::HVACTypeCentralAirConditioner
252
431
  next unless cooling_system.compressor_type.nil?
253
432
 
254
- cooling_system.compressor_type = HVAC.get_default_compressor_type(cooling_system.cooling_efficiency_seer)
433
+ cooling_system.compressor_type = HVAC.get_default_compressor_type(cooling_system.cooling_system_type, cooling_system.cooling_efficiency_seer)
434
+ cooling_system.compressor_type_isdefaulted = true
255
435
  end
256
436
  hpxml.heat_pumps.each do |heat_pump|
257
- next unless heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpAirToAir
258
437
  next unless heat_pump.compressor_type.nil?
259
438
 
260
- heat_pump.compressor_type = HVAC.get_default_compressor_type(heat_pump.cooling_efficiency_seer)
439
+ heat_pump.compressor_type = HVAC.get_default_compressor_type(heat_pump.heat_pump_type, heat_pump.cooling_efficiency_seer)
440
+ heat_pump.compressor_type_isdefaulted = true
261
441
  end
262
442
 
263
443
  # Default boiler EAE
264
444
  hpxml.heating_systems.each do |heating_system|
265
- next unless heating_system.heating_system_type == HPXML::HVACTypeBoiler
266
445
  next unless heating_system.electric_auxiliary_energy.nil?
267
-
268
- heating_system.electric_auxiliary_energy = HVAC.get_electric_auxiliary_energy(heating_system)
446
+ heating_system.electric_auxiliary_energy_isdefaulted = true
447
+ heating_system.electric_auxiliary_energy = HVAC.get_default_boiler_eae(heating_system)
448
+ heating_system.shared_loop_watts = nil
449
+ heating_system.shared_loop_motor_efficiency = nil
450
+ heating_system.fan_coil_watts = nil
269
451
  end
270
452
 
271
453
  # Default AC/HP sensible heat ratio
@@ -280,10 +462,13 @@ class HPXMLDefaults
280
462
  elsif cooling_system.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
281
463
  cooling_system.cooling_shr = 0.78
282
464
  end
465
+ cooling_system.cooling_shr_isdefaulted = true
283
466
  elsif cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner
284
467
  cooling_system.cooling_shr = 0.65
468
+ cooling_system.cooling_shr_isdefaulted = true
285
469
  elsif cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
286
470
  cooling_system.cooling_shr = 0.73
471
+ cooling_system.cooling_shr_isdefaulted = true
287
472
  end
288
473
  end
289
474
  hpxml.heat_pumps.each do |heat_pump|
@@ -297,59 +482,282 @@ class HPXMLDefaults
297
482
  elsif heat_pump.compressor_type == HPXML::HVACCompressorTypeVariableSpeed
298
483
  heat_pump.cooling_shr = 0.78
299
484
  end
485
+ heat_pump.cooling_shr_isdefaulted = true
300
486
  elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit
301
487
  heat_pump.cooling_shr = 0.73
488
+ heat_pump.cooling_shr_isdefaulted = true
302
489
  elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
303
490
  heat_pump.cooling_shr = 0.732
491
+ heat_pump.cooling_shr_isdefaulted = true
304
492
  end
305
493
  end
306
494
 
307
- # Default GSHP pump/fan power
495
+ # GSHP pump power
308
496
  hpxml.heat_pumps.each do |heat_pump|
309
497
  next unless heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
498
+ next unless heat_pump.pump_watts_per_ton.nil?
499
+
500
+ heat_pump.pump_watts_per_ton = HVAC.get_default_gshp_pump_power()
501
+ heat_pump.pump_watts_per_ton_isdefaulted = true
502
+ end
503
+
504
+ # Charge defect ratio
505
+ hpxml.cooling_systems.each do |cooling_system|
506
+ next unless [HPXML::HVACTypeCentralAirConditioner,
507
+ HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
508
+ next unless cooling_system.charge_defect_ratio.nil?
310
509
 
311
- if heat_pump.fan_watts_per_cfm.nil?
312
- heat_pump.fan_watts_per_cfm = HVAC.get_default_gshp_fan_power()
510
+ cooling_system.charge_defect_ratio = 0.0
511
+ cooling_system.charge_defect_ratio_isdefaulted = true
512
+ cooling_system.charge_not_tested = nil
513
+ end
514
+ hpxml.heat_pumps.each do |heat_pump|
515
+ next unless [HPXML::HVACTypeHeatPumpAirToAir,
516
+ HPXML::HVACTypeHeatPumpMiniSplit,
517
+ HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
518
+ next unless heat_pump.charge_defect_ratio.nil?
519
+
520
+ heat_pump.charge_defect_ratio = 0.0
521
+ heat_pump.charge_defect_ratio_isdefaulted = true
522
+ heat_pump.charge_not_tested = nil
523
+ end
524
+
525
+ # Airflow defect ratio
526
+ hpxml.heating_systems.each do |heating_system|
527
+ next unless [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
528
+ next unless heating_system.airflow_defect_ratio.nil?
529
+
530
+ heating_system.airflow_defect_ratio = 0.0
531
+ heating_system.airflow_defect_ratio_isdefaulted = true
532
+ heating_system.airflow_not_tested = nil
533
+ end
534
+ hpxml.cooling_systems.each do |cooling_system|
535
+ next unless [HPXML::HVACTypeCentralAirConditioner,
536
+ HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
537
+ if cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner && cooling_system.distribution_system_idref.nil?
538
+ next # Ducted mini-splits only
313
539
  end
314
- if heat_pump.pump_watts_per_ton.nil?
315
- heat_pump.pump_watts_per_ton = HVAC.get_default_gshp_pump_power()
540
+ next unless cooling_system.airflow_defect_ratio.nil?
541
+
542
+ cooling_system.airflow_defect_ratio = 0.0
543
+ cooling_system.airflow_defect_ratio_isdefaulted = true
544
+ cooling_system.airflow_not_tested = nil
545
+ end
546
+ hpxml.heat_pumps.each do |heat_pump|
547
+ next unless [HPXML::HVACTypeHeatPumpAirToAir,
548
+ HPXML::HVACTypeHeatPumpGroundToAir,
549
+ HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
550
+ if heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit && heat_pump.distribution_system_idref.nil?
551
+ next # Ducted mini-splits only
316
552
  end
553
+ next unless heat_pump.airflow_defect_ratio.nil?
554
+
555
+ heat_pump.airflow_defect_ratio = 0.0
556
+ heat_pump.airflow_defect_ratio_isdefaulted = true
557
+ heat_pump.airflow_not_tested = nil
317
558
  end
318
559
 
319
- # HVAC capacities
320
- # Transition capacity elements from -1 to nil
560
+ # Fan power
561
+ psc_watts_per_cfm = 0.5 # W/cfm, PSC fan
562
+ ecm_watts_per_cfm = 0.375 # W/cfm, ECM fan
563
+ mini_split_ducted_watts_per_cfm = 0.18 # W/cfm, ducted mini split
321
564
  hpxml.heating_systems.each do |heating_system|
322
- if (not heating_system.heating_capacity.nil?) && (heating_system.heating_capacity < 0)
323
- heating_system.heating_capacity = nil
565
+ if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
566
+ if heating_system.fan_watts_per_cfm.nil?
567
+ if heating_system.distribution_system.air_type == HPXML::AirTypeGravity
568
+ heating_system.fan_watts_per_cfm = 0.0
569
+ elsif heating_system.heating_efficiency_afue > 0.9 # HEScore assumption
570
+ heating_system.fan_watts_per_cfm = ecm_watts_per_cfm
571
+ else
572
+ heating_system.fan_watts_per_cfm = psc_watts_per_cfm
573
+ end
574
+ heating_system.fan_watts_per_cfm_isdefaulted = true
575
+ heating_system.fan_power_not_tested = nil
576
+ end
577
+ elsif [HPXML::HVACTypeStove].include? heating_system.heating_system_type
578
+ if heating_system.fan_watts.nil?
579
+ heating_system.fan_watts = 40.0 # W
580
+ heating_system.fan_watts_isdefaulted = true
581
+ end
582
+ elsif [HPXML::HVACTypeWallFurnace,
583
+ HPXML::HVACTypeFloorFurnace,
584
+ HPXML::HVACTypePortableHeater,
585
+ HPXML::HVACTypeFixedHeater,
586
+ HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
587
+ if heating_system.fan_watts.nil?
588
+ heating_system.fan_watts = 0.0 # W/cfm, assume no fan power
589
+ heating_system.fan_watts_isdefaulted = true
590
+ end
324
591
  end
325
592
  end
326
593
  hpxml.cooling_systems.each do |cooling_system|
327
- if (not cooling_system.cooling_capacity.nil?) && (cooling_system.cooling_capacity < 0)
328
- cooling_system.cooling_capacity = nil
594
+ next unless cooling_system.fan_watts_per_cfm.nil?
595
+
596
+ if (not cooling_system.attached_heating_system.nil?) && (not cooling_system.attached_heating_system.fan_watts_per_cfm.nil?)
597
+ cooling_system.fan_watts_per_cfm = cooling_system.attached_heating_system.fan_watts_per_cfm
598
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
599
+ cooling_system.fan_power_not_tested = nil
600
+ elsif [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
601
+ if cooling_system.cooling_efficiency_seer > 13.5 # HEScore assumption
602
+ cooling_system.fan_watts_per_cfm = ecm_watts_per_cfm
603
+ else
604
+ cooling_system.fan_watts_per_cfm = psc_watts_per_cfm
605
+ end
606
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
607
+ cooling_system.fan_power_not_tested = nil
608
+ elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
609
+ if not cooling_system.distribution_system.nil?
610
+ cooling_system.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
611
+ end
612
+ cooling_system.fan_watts_per_cfm_isdefaulted = true
613
+ cooling_system.fan_power_not_tested = nil
614
+ elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
615
+ # Depends on airflow rate, so defaulted in hvac_sizing.rb
329
616
  end
330
617
  end
331
618
  hpxml.heat_pumps.each do |heat_pump|
332
- if (not heat_pump.cooling_capacity.nil?) && (heat_pump.cooling_capacity < 0)
333
- heat_pump.cooling_capacity = nil
619
+ next unless heat_pump.fan_watts_per_cfm.nil?
620
+
621
+ if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump.heat_pump_type
622
+ if heat_pump.heating_efficiency_hspf > 8.75 # HEScore assumption
623
+ heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
624
+ else
625
+ heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
626
+ end
627
+ heat_pump.fan_watts_per_cfm_isdefaulted = true
628
+ heat_pump.fan_power_not_tested = nil
629
+ elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
630
+ if heat_pump.heating_efficiency_cop > 8.75 / 3.2 # HEScore assumption
631
+ heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
632
+ else
633
+ heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
634
+ end
635
+ heat_pump.fan_watts_per_cfm_isdefaulted = true
636
+ heat_pump.fan_power_not_tested = nil
637
+ elsif [HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
638
+ if not heat_pump.distribution_system.nil?
639
+ heat_pump.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
640
+ end
641
+ heat_pump.fan_watts_per_cfm_isdefaulted = true
642
+ heat_pump.fan_power_not_tested = nil
334
643
  end
335
- if (not heat_pump.heating_capacity.nil?) && (heat_pump.heating_capacity < 0)
336
- heat_pump.heating_capacity = nil
644
+ end
645
+
646
+ # Detailed HVAC performance
647
+ hpxml.cooling_systems.each do |cooling_system|
648
+ clg_ap = cooling_system.additional_properties
649
+ if [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
650
+ # Note: We use HP cooling curve so that a central AC behaves the same.
651
+ HVAC.set_num_speeds(cooling_system)
652
+ HVAC.set_fan_power_rated(cooling_system)
653
+ HVAC.set_crankcase_assumptions(cooling_system)
654
+
655
+ HVAC.set_cool_c_d(cooling_system, clg_ap.num_speeds)
656
+ HVAC.set_cool_curves_ashp(cooling_system)
657
+ HVAC.set_cool_rated_cfm_per_ton(cooling_system)
658
+ HVAC.set_cool_rated_shrs_gross(cooling_system)
659
+ HVAC.set_cool_rated_eirs(cooling_system)
660
+
661
+ elsif [HPXML::HVACTypeRoomAirConditioner].include? cooling_system.cooling_system_type
662
+ HVAC.set_num_speeds(cooling_system)
663
+ HVAC.set_cool_c_d(cooling_system, clg_ap.num_speeds)
664
+ HVAC.set_cool_curves_room_ac(cooling_system)
665
+ HVAC.set_cool_rated_cfm_per_ton(cooling_system)
666
+ HVAC.set_cool_rated_shrs_gross(cooling_system)
667
+
668
+ elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
669
+ num_speeds = 10
670
+ HVAC.set_num_speeds(cooling_system)
671
+ HVAC.set_crankcase_assumptions(cooling_system)
672
+ HVAC.set_fan_power_rated(cooling_system)
673
+
674
+ HVAC.set_cool_c_d(cooling_system, num_speeds)
675
+ HVAC.set_cool_curves_mshp(cooling_system, num_speeds)
676
+ HVAC.set_cool_rated_cfm_per_ton_mshp(cooling_system, num_speeds)
677
+ HVAC.set_cool_rated_eirs_mshp(cooling_system, num_speeds)
678
+
679
+ HVAC.set_mshp_downselected_speed_indices(cooling_system)
680
+
681
+ elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
682
+ clg_ap.effectiveness = 0.72 # Assumption from HEScore
683
+
337
684
  end
338
- if (not heat_pump.heating_capacity_17F.nil?) && (heat_pump.heating_capacity_17F < 0)
339
- heat_pump.heating_capacity_17F = nil
685
+ end
686
+ hpxml.heating_systems.each do |heating_system|
687
+ htg_ap = heating_system.additional_properties
688
+ next unless [HPXML::HVACTypeStove,
689
+ HPXML::HVACTypePortableHeater,
690
+ HPXML::HVACTypeFixedHeater,
691
+ HPXML::HVACTypeWallFurnace,
692
+ HPXML::HVACTypeFloorFurnace,
693
+ HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
694
+ HVAC.set_heat_rated_cfm_per_ton(heating_system)
695
+ end
696
+ hpxml.heat_pumps.each do |heat_pump|
697
+ hp_ap = heat_pump.additional_properties
698
+ if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump.heat_pump_type
699
+ HVAC.set_num_speeds(heat_pump)
700
+ HVAC.set_fan_power_rated(heat_pump)
701
+ HVAC.set_crankcase_assumptions(heat_pump)
702
+ HVAC.set_heat_pump_temperatures(heat_pump)
703
+
704
+ HVAC.set_cool_c_d(heat_pump, hp_ap.num_speeds)
705
+ HVAC.set_cool_curves_ashp(heat_pump)
706
+ HVAC.set_cool_rated_cfm_per_ton(heat_pump)
707
+ HVAC.set_cool_rated_shrs_gross(heat_pump)
708
+ HVAC.set_cool_rated_eirs(heat_pump)
709
+
710
+ HVAC.set_heat_c_d(heat_pump, hp_ap.num_speeds)
711
+ HVAC.set_ashp_htg_curves(heat_pump)
712
+ HVAC.set_heat_rated_cfm_per_ton(heat_pump)
713
+ HVAC.set_heat_rated_eirs(heat_pump)
714
+
715
+ elsif [HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
716
+ num_speeds = 10
717
+ HVAC.set_num_speeds(heat_pump)
718
+ HVAC.set_crankcase_assumptions(heat_pump)
719
+ HVAC.set_fan_power_rated(heat_pump)
720
+ HVAC.set_heat_pump_temperatures(heat_pump)
721
+
722
+ HVAC.set_cool_c_d(heat_pump, num_speeds)
723
+ HVAC.set_cool_curves_mshp(heat_pump, num_speeds)
724
+ HVAC.set_cool_rated_cfm_per_ton_mshp(heat_pump, num_speeds)
725
+ HVAC.set_cool_rated_eirs_mshp(heat_pump, num_speeds)
726
+
727
+ HVAC.set_heat_c_d(heat_pump, num_speeds)
728
+ HVAC.set_heat_curves_mshp(heat_pump, num_speeds)
729
+ HVAC.set_heat_rated_cfm_per_ton_mshp(heat_pump, num_speeds)
730
+ HVAC.set_heat_rated_eirs_mshp(heat_pump, num_speeds)
731
+
732
+ HVAC.set_mshp_downselected_speed_indices(heat_pump)
733
+
734
+ elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
735
+ HVAC.set_gshp_assumptions(heat_pump, weather)
736
+ HVAC.set_curves_gshp(heat_pump)
737
+
738
+ elsif [HPXML::HVACTypeHeatPumpWaterLoopToAir].include? heat_pump.heat_pump_type
739
+ HVAC.set_heat_pump_temperatures(heat_pump)
740
+
340
741
  end
341
- if (not heat_pump.backup_heating_capacity.nil?) && (heat_pump.backup_heating_capacity < 0)
342
- heat_pump.backup_heating_capacity = nil
742
+ end
743
+ end
744
+
745
+ def self.apply_hvac_control(hpxml)
746
+ hpxml.hvac_controls.each do |hvac_control|
747
+ if not hvac_control.heating_setback_temp.nil?
748
+ if hvac_control.heating_setback_start_hour.nil?
749
+ hvac_control.heating_setback_start_hour = 23 # 11 pm
750
+ hvac_control.heating_setback_start_hour_isdefaulted = true
751
+ end
343
752
  end
344
- if heat_pump.cooling_capacity.nil? && (not heat_pump.heating_capacity.nil?)
345
- heat_pump.cooling_capacity = heat_pump.heating_capacity
346
- elsif heat_pump.heating_capacity.nil? && (not heat_pump.cooling_capacity.nil?)
347
- heat_pump.heating_capacity = heat_pump.cooling_capacity
753
+
754
+ next unless not hvac_control.cooling_setup_temp.nil?
755
+
756
+ if hvac_control.cooling_setup_start_hour.nil?
757
+ hvac_control.cooling_setup_start_hour = 9 # 9 am
758
+ hvac_control.cooling_setup_start_hour_isdefaulted = true
348
759
  end
349
760
  end
350
-
351
- # TODO: Default HeatingCapacity17F
352
- # TODO: Default Electric Auxiliary Energy (EAE; requires autosized HVAC capacity)
353
761
  end
354
762
 
355
763
  def self.apply_hvac_distribution(hpxml, ncfl, ncfl_ag)
@@ -360,16 +768,15 @@ class HPXMLDefaults
360
768
  n_ducts += hvac_distribution.ducts.size
361
769
  n_ducts_to_be_defaulted += hvac_distribution.ducts.select { |duct| duct.duct_surface_area.nil? && duct.duct_location.nil? }.size
362
770
  end
363
- if n_ducts_to_be_defaulted > 0 && (n_ducts != n_ducts_to_be_defaulted)
364
- fail 'The location and surface area of all ducts must be provided or blank.'
365
- end
771
+ fail if n_ducts_to_be_defaulted > 0 && (n_ducts != n_ducts_to_be_defaulted) # EPvalidator.xml should prevent this
366
772
 
367
773
  hpxml.hvac_distributions.each do |hvac_distribution|
368
- next unless [HPXML::HVACDistributionTypeAir, HPXML::HVACDistributionTypeHydronicAndAir].include? hvac_distribution.distribution_system_type
774
+ next unless [HPXML::HVACDistributionTypeAir].include? hvac_distribution.distribution_system_type
369
775
 
370
776
  # Default return registers
371
777
  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
778
+ hvac_distribution.number_of_return_registers = ncfl.ceil # Add 1 return register per conditioned floor if not provided
779
+ hvac_distribution.number_of_return_registers_isdefaulted = true
373
780
  end
374
781
 
375
782
  # Default ducts
@@ -394,24 +801,99 @@ class HPXMLDefaults
394
801
  hvac_distribution.ducts.add(duct_type: duct.duct_type,
395
802
  duct_insulation_r_value: duct.duct_insulation_r_value,
396
803
  duct_location: secondary_duct_location,
397
- duct_surface_area: secondary_duct_area)
804
+ duct_location_isdefaulted: true,
805
+ duct_surface_area: secondary_duct_area,
806
+ duct_surface_area_isdefaulted: true)
398
807
  end
399
808
  end
809
+ duct.duct_surface_area_isdefaulted = true
810
+ duct.duct_location_isdefaulted = true
400
811
  end
401
812
  end
402
813
  end
403
814
  end
404
815
 
816
+ def self.apply_ventilation_fans(hpxml)
817
+ # Default mech vent systems
818
+ hpxml.ventilation_fans.each do |vent_fan|
819
+ next unless vent_fan.used_for_whole_building_ventilation
820
+
821
+ if vent_fan.is_shared_system.nil?
822
+ vent_fan.is_shared_system = false
823
+ vent_fan.is_shared_system_isdefaulted = true
824
+ end
825
+ if vent_fan.hours_in_operation.nil?
826
+ vent_fan.hours_in_operation = (vent_fan.fan_type == HPXML::MechVentTypeCFIS) ? 8.0 : 24.0
827
+ vent_fan.hours_in_operation_isdefaulted = true
828
+ end
829
+ end
830
+
831
+ # Default kitchen fan
832
+ hpxml.ventilation_fans.each do |vent_fan|
833
+ next unless (vent_fan.used_for_local_ventilation && (vent_fan.fan_location == HPXML::LocationKitchen))
834
+
835
+ if vent_fan.quantity.nil?
836
+ vent_fan.quantity = 1
837
+ vent_fan.quantity_isdefaulted = true
838
+ end
839
+ if vent_fan.rated_flow_rate.nil?
840
+ vent_fan.rated_flow_rate = 100.0 # cfm, per BA HSP
841
+ vent_fan.rated_flow_rate_isdefaulted = true
842
+ end
843
+ if vent_fan.hours_in_operation.nil?
844
+ vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
845
+ vent_fan.hours_in_operation_isdefaulted = true
846
+ end
847
+ if vent_fan.fan_power.nil?
848
+ vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
849
+ vent_fan.fan_power_isdefaulted = true
850
+ end
851
+ if vent_fan.start_hour.nil?
852
+ vent_fan.start_hour = 18 # 6 pm, per BA HSP
853
+ vent_fan.start_hour_isdefaulted = true
854
+ end
855
+ end
856
+
857
+ # Default bath fans
858
+ hpxml.ventilation_fans.each do |vent_fan|
859
+ next unless (vent_fan.used_for_local_ventilation && (vent_fan.fan_location == HPXML::LocationBath))
860
+
861
+ if vent_fan.quantity.nil?
862
+ vent_fan.quantity = hpxml.building_construction.number_of_bathrooms
863
+ vent_fan.quantity_isdefaulted = true
864
+ end
865
+ if vent_fan.rated_flow_rate.nil?
866
+ vent_fan.rated_flow_rate = 50.0 # cfm, per BA HSP
867
+ vent_fan.rated_flow_rate_isdefaulted = true
868
+ end
869
+ if vent_fan.hours_in_operation.nil?
870
+ vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
871
+ vent_fan.hours_in_operation_isdefaulted = true
872
+ end
873
+ if vent_fan.fan_power.nil?
874
+ vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
875
+ vent_fan.fan_power_isdefaulted = true
876
+ end
877
+ if vent_fan.start_hour.nil?
878
+ vent_fan.start_hour = 7 # 7 am, per BA HSP
879
+ vent_fan.start_hour_isdefaulted = true
880
+ end
881
+ end
882
+ end
883
+
405
884
  def self.apply_water_heaters(hpxml, nbeds, eri_version)
406
885
  hpxml.water_heating_systems.each do |water_heating_system|
407
886
  if water_heating_system.is_shared_system.nil?
408
887
  water_heating_system.is_shared_system = false
888
+ water_heating_system.is_shared_system_isdefaulted = true
409
889
  end
410
890
  if water_heating_system.temperature.nil?
411
891
  water_heating_system.temperature = Waterheater.get_default_hot_water_temperature(eri_version)
892
+ water_heating_system.temperature_isdefaulted = true
412
893
  end
413
894
  if water_heating_system.performance_adjustment.nil?
414
895
  water_heating_system.performance_adjustment = Waterheater.get_default_performance_adjustment(water_heating_system)
896
+ water_heating_system.performance_adjustment_isdefaulted = true
415
897
  end
416
898
  if (water_heating_system.water_heater_type == HPXML::WaterHeaterTypeCombiStorage) && water_heating_system.standby_loss.nil?
417
899
  # Use equation fit from AHRI database
@@ -420,20 +902,25 @@ class HPXMLDefaults
420
902
  surface_area = Waterheater.calc_tank_areas(act_vol)[0]
421
903
  sqft_by_gal = surface_area / act_vol # sqft/gal
422
904
  water_heating_system.standby_loss = (2.9721 * sqft_by_gal - 0.4732).round(3) # linear equation assuming a constant u, F/hr
905
+ water_heating_system.standby_loss_isdefaulted = true
423
906
  end
424
907
  if (water_heating_system.water_heater_type == HPXML::WaterHeaterTypeStorage)
425
908
  if water_heating_system.heating_capacity.nil?
426
- 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
909
+ 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).round
910
+ water_heating_system.heating_capacity_isdefaulted = true
427
911
  end
428
912
  if water_heating_system.tank_volume.nil?
429
913
  water_heating_system.tank_volume = Waterheater.get_default_tank_volume(water_heating_system.fuel_type, nbeds, hpxml.building_construction.number_of_bathrooms)
914
+ water_heating_system.tank_volume_isdefaulted = true
430
915
  end
431
916
  if water_heating_system.recovery_efficiency.nil?
432
917
  water_heating_system.recovery_efficiency = Waterheater.get_default_recovery_efficiency(water_heating_system)
918
+ water_heating_system.recovery_efficiency_isdefaulted = true
433
919
  end
434
920
  end
435
921
  if water_heating_system.location.nil?
436
922
  water_heating_system.location = Waterheater.get_default_location(hpxml, hpxml.climate_and_risk_zones.iecc_zone)
923
+ water_heating_system.location_isdefaulted = true
437
924
  end
438
925
  end
439
926
  end
@@ -442,32 +929,46 @@ class HPXMLDefaults
442
929
  return if hpxml.hot_water_distributions.size == 0
443
930
 
444
931
  hot_water_distribution = hpxml.hot_water_distributions[0]
932
+
933
+ if hot_water_distribution.pipe_r_value.nil?
934
+ hot_water_distribution.pipe_r_value = 0.0
935
+ hot_water_distribution.pipe_r_value_isdefaulted = true
936
+ end
937
+
445
938
  if hot_water_distribution.system_type == HPXML::DHWDistTypeStandard
446
939
  if hot_water_distribution.standard_piping_length.nil?
447
940
  hot_water_distribution.standard_piping_length = HotWaterAndAppliances.get_default_std_pipe_length(has_uncond_bsmnt, cfa, ncfl)
941
+ hot_water_distribution.standard_piping_length_isdefaulted = true
448
942
  end
449
943
  elsif hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc
450
944
  if hot_water_distribution.recirculation_piping_length.nil?
451
945
  hot_water_distribution.recirculation_piping_length = HotWaterAndAppliances.get_default_recirc_loop_length(HotWaterAndAppliances.get_default_std_pipe_length(has_uncond_bsmnt, cfa, ncfl))
946
+ hot_water_distribution.recirculation_piping_length_isdefaulted = true
452
947
  end
453
948
  if hot_water_distribution.recirculation_branch_piping_length.nil?
454
949
  hot_water_distribution.recirculation_branch_piping_length = HotWaterAndAppliances.get_default_recirc_branch_loop_length()
950
+ hot_water_distribution.recirculation_branch_piping_length_isdefaulted = true
455
951
  end
456
952
  if hot_water_distribution.recirculation_pump_power.nil?
457
953
  hot_water_distribution.recirculation_pump_power = HotWaterAndAppliances.get_default_recirc_pump_power()
954
+ hot_water_distribution.recirculation_pump_power_isdefaulted = true
458
955
  end
459
956
  end
460
957
 
461
958
  if hot_water_distribution.has_shared_recirculation
462
959
  if hot_water_distribution.shared_recirculation_pump_power.nil?
463
960
  hot_water_distribution.shared_recirculation_pump_power = HotWaterAndAppliances.get_default_shared_recirc_pump_power()
961
+ hot_water_distribution.shared_recirculation_pump_power_isdefaulted = true
464
962
  end
465
963
  end
466
964
  end
467
965
 
468
966
  def self.apply_water_fixtures(hpxml)
967
+ return if hpxml.hot_water_distributions.size == 0
968
+
469
969
  if hpxml.water_heating.water_fixtures_usage_multiplier.nil?
470
970
  hpxml.water_heating.water_fixtures_usage_multiplier = 1.0
971
+ hpxml.water_heating.water_fixtures_usage_multiplier_isdefaulted = true
471
972
  end
472
973
  end
473
974
 
@@ -480,319 +981,45 @@ class HPXMLDefaults
480
981
  if not collector_area.nil? # Detailed solar water heater
481
982
  if solar_thermal_system.storage_volume.nil?
482
983
  solar_thermal_system.storage_volume = Waterheater.calc_default_solar_thermal_system_storage_volume(collector_area)
984
+ solar_thermal_system.storage_volume_isdefaulted = true
483
985
  end
484
986
  end
485
987
  end
486
988
 
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
989
+ def self.apply_pv_systems(hpxml)
990
+ hpxml.pv_systems.each do |pv_system|
991
+ if pv_system.is_shared_system.nil?
992
+ pv_system.is_shared_system = false
993
+ pv_system.is_shared_system_isdefaulted = true
502
994
  end
503
- if vent_fan.rated_flow_rate.nil?
504
- vent_fan.rated_flow_rate = 100.0 # cfm, per BA HSP
995
+ if pv_system.location.nil?
996
+ pv_system.location = HPXML::LocationRoof
997
+ pv_system.location_isdefaulted = true
505
998
  end
506
- if vent_fan.hours_in_operation.nil?
507
- vent_fan.hours_in_operation = 1.0 # hrs/day, per BA HSP
999
+ if pv_system.tracking.nil?
1000
+ pv_system.tracking = HPXML::PVTrackingTypeFixed
1001
+ pv_system.tracking_isdefaulted = true
508
1002
  end
509
- if vent_fan.fan_power.nil?
510
- vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
1003
+ if pv_system.module_type.nil?
1004
+ pv_system.module_type = HPXML::PVModuleTypeStandard
1005
+ pv_system.module_type_isdefaulted = true
511
1006
  end
512
- if vent_fan.start_hour.nil?
513
- vent_fan.start_hour = 18 # 6 pm, per BA HSP
1007
+ if pv_system.inverter_efficiency.nil?
1008
+ pv_system.inverter_efficiency = PV.get_default_inv_eff()
1009
+ pv_system.inverter_efficiency_isdefaulted = true
1010
+ end
1011
+ if pv_system.system_losses_fraction.nil?
1012
+ pv_system.system_losses_fraction = PV.get_default_system_losses(pv_system.year_modules_manufactured)
1013
+ pv_system.system_losses_fraction_isdefaulted = true
514
1014
  end
515
1015
  end
1016
+ end
516
1017
 
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'
1018
+ def self.apply_generators(hpxml)
1019
+ hpxml.generators.each do |generator|
1020
+ if generator.is_shared_system.nil?
1021
+ generator.is_shared_system = false
1022
+ generator.is_shared_system_isdefaulted = true
796
1023
  end
797
1024
  end
798
1025
  end
@@ -803,22 +1030,32 @@ class HPXMLDefaults
803
1030
  clothes_washer = hpxml.clothes_washers[0]
804
1031
  if clothes_washer.is_shared_appliance.nil?
805
1032
  clothes_washer.is_shared_appliance = false
1033
+ clothes_washer.is_shared_appliance_isdefaulted = true
806
1034
  end
807
1035
  if clothes_washer.location.nil?
808
1036
  clothes_washer.location = HPXML::LocationLivingSpace
1037
+ clothes_washer.location_isdefaulted = true
809
1038
  end
810
1039
  if clothes_washer.rated_annual_kwh.nil?
811
1040
  default_values = HotWaterAndAppliances.get_clothes_washer_default_values(eri_version)
812
1041
  clothes_washer.integrated_modified_energy_factor = default_values[:integrated_modified_energy_factor]
1042
+ clothes_washer.integrated_modified_energy_factor_isdefaulted = true
813
1043
  clothes_washer.rated_annual_kwh = default_values[:rated_annual_kwh]
1044
+ clothes_washer.rated_annual_kwh_isdefaulted = true
814
1045
  clothes_washer.label_electric_rate = default_values[:label_electric_rate]
1046
+ clothes_washer.label_electric_rate_isdefaulted = true
815
1047
  clothes_washer.label_gas_rate = default_values[:label_gas_rate]
1048
+ clothes_washer.label_gas_rate_isdefaulted = true
816
1049
  clothes_washer.label_annual_gas_cost = default_values[:label_annual_gas_cost]
1050
+ clothes_washer.label_annual_gas_cost_isdefaulted = true
817
1051
  clothes_washer.capacity = default_values[:capacity]
1052
+ clothes_washer.capacity_isdefaulted = true
818
1053
  clothes_washer.label_usage = default_values[:label_usage]
1054
+ clothes_washer.label_usage_isdefaulted = true
819
1055
  end
820
1056
  if clothes_washer.usage_multiplier.nil?
821
1057
  clothes_washer.usage_multiplier = 1.0
1058
+ clothes_washer.usage_multiplier_isdefaulted = true
822
1059
  end
823
1060
  end
824
1061
 
@@ -827,23 +1064,33 @@ class HPXMLDefaults
827
1064
  clothes_dryer = hpxml.clothes_dryers[0]
828
1065
  if clothes_dryer.is_shared_appliance.nil?
829
1066
  clothes_dryer.is_shared_appliance = false
1067
+ clothes_dryer.is_shared_appliance_isdefaulted = true
830
1068
  end
831
1069
  if clothes_dryer.location.nil?
832
1070
  clothes_dryer.location = HPXML::LocationLivingSpace
1071
+ clothes_dryer.location_isdefaulted = true
1072
+ end
1073
+ if clothes_dryer.combined_energy_factor.nil? && clothes_dryer.energy_factor.nil?
1074
+ default_values = HotWaterAndAppliances.get_clothes_dryer_default_values(eri_version, clothes_dryer.fuel_type)
1075
+ clothes_dryer.combined_energy_factor = default_values[:combined_energy_factor]
1076
+ clothes_dryer.combined_energy_factor_isdefaulted = true
833
1077
  end
834
1078
  if clothes_dryer.control_type.nil?
835
1079
  default_values = HotWaterAndAppliances.get_clothes_dryer_default_values(eri_version, clothes_dryer.fuel_type)
836
1080
  clothes_dryer.control_type = default_values[:control_type]
837
- clothes_dryer.combined_energy_factor = default_values[:combined_energy_factor]
1081
+ clothes_dryer.control_type_isdefaulted = true
838
1082
  end
839
1083
  if clothes_dryer.usage_multiplier.nil?
840
1084
  clothes_dryer.usage_multiplier = 1.0
1085
+ clothes_dryer.usage_multiplier_isdefaulted = true
841
1086
  end
842
1087
  if clothes_dryer.is_vented.nil?
843
1088
  clothes_dryer.is_vented = true
1089
+ clothes_dryer.is_vented_isdefaulted = true
844
1090
  end
845
1091
  if clothes_dryer.is_vented && clothes_dryer.vented_flow_rate.nil?
846
1092
  clothes_dryer.vented_flow_rate = 100.0
1093
+ clothes_dryer.vented_flow_rate_isdefaulted = true
847
1094
  end
848
1095
  end
849
1096
 
@@ -852,66 +1099,87 @@ class HPXMLDefaults
852
1099
  dishwasher = hpxml.dishwashers[0]
853
1100
  if dishwasher.is_shared_appliance.nil?
854
1101
  dishwasher.is_shared_appliance = false
1102
+ dishwasher.is_shared_appliance_isdefaulted = true
855
1103
  end
856
1104
  if dishwasher.location.nil?
857
1105
  dishwasher.location = HPXML::LocationLivingSpace
1106
+ dishwasher.location_isdefaulted = true
858
1107
  end
859
1108
  if dishwasher.place_setting_capacity.nil?
860
- default_values = HotWaterAndAppliances.get_dishwasher_default_values()
1109
+ default_values = HotWaterAndAppliances.get_dishwasher_default_values(eri_version)
861
1110
  dishwasher.rated_annual_kwh = default_values[:rated_annual_kwh]
1111
+ dishwasher.rated_annual_kwh_isdefaulted = true
862
1112
  dishwasher.label_electric_rate = default_values[:label_electric_rate]
1113
+ dishwasher.label_electric_rate_isdefaulted = true
863
1114
  dishwasher.label_gas_rate = default_values[:label_gas_rate]
1115
+ dishwasher.label_gas_rate_isdefaulted = true
864
1116
  dishwasher.label_annual_gas_cost = default_values[:label_annual_gas_cost]
1117
+ dishwasher.label_annual_gas_cost_isdefaulted = true
865
1118
  dishwasher.label_usage = default_values[:label_usage]
1119
+ dishwasher.label_usage_isdefaulted = true
866
1120
  dishwasher.place_setting_capacity = default_values[:place_setting_capacity]
1121
+ dishwasher.place_setting_capacity_isdefaulted = true
867
1122
  end
868
1123
  if dishwasher.usage_multiplier.nil?
869
1124
  dishwasher.usage_multiplier = 1.0
1125
+ dishwasher.usage_multiplier_isdefaulted = true
870
1126
  end
871
1127
  end
872
1128
 
873
1129
  # Default refrigerators
874
1130
  if hpxml.refrigerators.size == 1
875
1131
  hpxml.refrigerators[0].primary_indicator = true
1132
+ hpxml.refrigerators[0].primary_indicator_isdefaulted = true
876
1133
  end
877
1134
  hpxml.refrigerators.each do |refrigerator|
878
1135
  if not refrigerator.primary_indicator # extra refrigerator
879
1136
  if refrigerator.location.nil?
880
1137
  refrigerator.location = HotWaterAndAppliances.get_default_extra_refrigerator_and_freezer_locations(hpxml)
1138
+ refrigerator.location_isdefaulted = true
881
1139
  end
882
1140
  if refrigerator.adjusted_annual_kwh.nil? && refrigerator.rated_annual_kwh.nil?
883
1141
  default_values = HotWaterAndAppliances.get_extra_refrigerator_default_values
884
1142
  refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
1143
+ refrigerator.rated_annual_kwh_isdefaulted = true
885
1144
  end
886
1145
  if refrigerator.weekday_fractions.nil?
887
1146
  refrigerator.weekday_fractions = Schedule.ExtraRefrigeratorWeekdayFractions
1147
+ refrigerator.weekday_fractions_isdefaulted = true
888
1148
  end
889
1149
  if refrigerator.weekend_fractions.nil?
890
1150
  refrigerator.weekend_fractions = Schedule.ExtraRefrigeratorWeekendFractions
1151
+ refrigerator.weekend_fractions_isdefaulted = true
891
1152
  end
892
1153
  if refrigerator.monthly_multipliers.nil?
893
1154
  refrigerator.monthly_multipliers = Schedule.ExtraRefrigeratorMonthlyMultipliers
1155
+ refrigerator.monthly_multipliers_isdefaulted = true
894
1156
  end
895
1157
  else # primary refrigerator
896
1158
  if refrigerator.location.nil?
897
1159
  refrigerator.location = HPXML::LocationLivingSpace
1160
+ refrigerator.location_isdefaulted = true
898
1161
  end
899
1162
  if refrigerator.adjusted_annual_kwh.nil? && refrigerator.rated_annual_kwh.nil?
900
1163
  default_values = HotWaterAndAppliances.get_refrigerator_default_values(nbeds)
901
1164
  refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
1165
+ refrigerator.rated_annual_kwh_isdefaulted = true
902
1166
  end
903
1167
  if refrigerator.weekday_fractions.nil?
904
1168
  refrigerator.weekday_fractions = Schedule.RefrigeratorWeekdayFractions
1169
+ refrigerator.weekday_fractions_isdefaulted = true
905
1170
  end
906
1171
  if refrigerator.weekend_fractions.nil?
907
1172
  refrigerator.weekend_fractions = Schedule.RefrigeratorWeekendFractions
1173
+ refrigerator.weekend_fractions_isdefaulted = true
908
1174
  end
909
1175
  if refrigerator.monthly_multipliers.nil?
910
1176
  refrigerator.monthly_multipliers = Schedule.RefrigeratorMonthlyMultipliers
1177
+ refrigerator.monthly_multipliers_isdefaulted = true
911
1178
  end
912
1179
  end
913
1180
  if refrigerator.usage_multiplier.nil?
914
1181
  refrigerator.usage_multiplier = 1.0
1182
+ refrigerator.usage_multiplier_isdefaulted = true
915
1183
  end
916
1184
  end
917
1185
 
@@ -919,22 +1187,28 @@ class HPXMLDefaults
919
1187
  hpxml.freezers.each do |freezer|
920
1188
  if freezer.location.nil?
921
1189
  freezer.location = HotWaterAndAppliances.get_default_extra_refrigerator_and_freezer_locations(hpxml)
1190
+ freezer.location_isdefaulted = true
922
1191
  end
923
1192
  if freezer.adjusted_annual_kwh.nil? && freezer.rated_annual_kwh.nil?
924
1193
  default_values = HotWaterAndAppliances.get_freezer_default_values
925
1194
  freezer.rated_annual_kwh = default_values[:rated_annual_kwh]
1195
+ freezer.rated_annual_kwh_isdefaulted = true
926
1196
  end
927
1197
  if freezer.usage_multiplier.nil?
928
1198
  freezer.usage_multiplier = 1.0
1199
+ freezer.usage_multiplier_isdefaulted = true
929
1200
  end
930
1201
  if freezer.weekday_fractions.nil?
931
1202
  freezer.weekday_fractions = Schedule.FreezerWeekdayFractions
1203
+ freezer.weekday_fractions_isdefaulted = true
932
1204
  end
933
1205
  if freezer.weekend_fractions.nil?
934
1206
  freezer.weekend_fractions = Schedule.FreezerWeekendFractions
1207
+ freezer.weekend_fractions_isdefaulted = true
935
1208
  end
936
1209
  if freezer.monthly_multipliers.nil?
937
1210
  freezer.monthly_multipliers = Schedule.FreezerMonthlyMultipliers
1211
+ freezer.monthly_multipliers_isdefaulted = true
938
1212
  end
939
1213
  end
940
1214
 
@@ -943,22 +1217,28 @@ class HPXMLDefaults
943
1217
  cooking_range = hpxml.cooking_ranges[0]
944
1218
  if cooking_range.location.nil?
945
1219
  cooking_range.location = HPXML::LocationLivingSpace
1220
+ cooking_range.location_isdefaulted = true
946
1221
  end
947
1222
  if cooking_range.is_induction.nil?
948
1223
  default_values = HotWaterAndAppliances.get_range_oven_default_values()
949
1224
  cooking_range.is_induction = default_values[:is_induction]
1225
+ cooking_range.is_induction_isdefaulted = true
950
1226
  end
951
1227
  if cooking_range.usage_multiplier.nil?
952
1228
  cooking_range.usage_multiplier = 1.0
1229
+ cooking_range.usage_multiplier_isdefaulted = true
953
1230
  end
954
1231
  if cooking_range.weekday_fractions.nil?
955
1232
  cooking_range.weekday_fractions = Schedule.CookingRangeWeekdayFractions
1233
+ cooking_range.weekday_fractions_isdefaulted = true
956
1234
  end
957
1235
  if cooking_range.weekend_fractions.nil?
958
1236
  cooking_range.weekend_fractions = Schedule.CookingRangeWeekendFractions
1237
+ cooking_range.weekend_fractions_isdefaulted = true
959
1238
  end
960
1239
  if cooking_range.monthly_multipliers.nil?
961
1240
  cooking_range.monthly_multipliers = Schedule.CookingRangeMonthlyMultipliers
1241
+ cooking_range.monthly_multipliers_isdefaulted = true
962
1242
  end
963
1243
  end
964
1244
 
@@ -968,42 +1248,55 @@ class HPXMLDefaults
968
1248
  if oven.is_convection.nil?
969
1249
  default_values = HotWaterAndAppliances.get_range_oven_default_values()
970
1250
  oven.is_convection = default_values[:is_convection]
1251
+ oven.is_convection_isdefaulted = true
971
1252
  end
972
1253
  end
973
1254
  end
974
1255
 
975
1256
  def self.apply_lighting(hpxml)
1257
+ return if hpxml.lighting_groups.empty?
1258
+
976
1259
  if hpxml.lighting.interior_usage_multiplier.nil?
977
1260
  hpxml.lighting.interior_usage_multiplier = 1.0
1261
+ hpxml.lighting.interior_usage_multiplier_isdefaulted = true
978
1262
  end
979
1263
  if hpxml.lighting.garage_usage_multiplier.nil?
980
1264
  hpxml.lighting.garage_usage_multiplier = 1.0
1265
+ hpxml.lighting.garage_usage_multiplier_isdefaulted = true
981
1266
  end
982
1267
  if hpxml.lighting.exterior_usage_multiplier.nil?
983
1268
  hpxml.lighting.exterior_usage_multiplier = 1.0
1269
+ hpxml.lighting.exterior_usage_multiplier_isdefaulted = true
984
1270
  end
1271
+ # Schedules from T24 2016 Residential ACM Appendix C Table 8 Exterior Lighting Hourly Multiplier (Weekdays and weekends)
985
1272
  default_exterior_lighting_weekday_fractions = Schedule.LightingExteriorWeekdayFractions
986
1273
  default_exterior_lighting_weekend_fractions = Schedule.LightingExteriorWeekendFractions
987
1274
  default_exterior_lighting_monthly_multipliers = Schedule.LightingExteriorMonthlyMultipliers
988
1275
  if hpxml.has_space_type(HPXML::LocationGarage)
989
1276
  if hpxml.lighting.garage_weekday_fractions.nil?
990
1277
  hpxml.lighting.garage_weekday_fractions = default_exterior_lighting_weekday_fractions
1278
+ hpxml.lighting.garage_weekday_fractions_isdefaulted = true
991
1279
  end
992
1280
  if hpxml.lighting.garage_weekend_fractions.nil?
993
1281
  hpxml.lighting.garage_weekend_fractions = default_exterior_lighting_weekend_fractions
1282
+ hpxml.lighting.garage_weekend_fractions_isdefaulted = true
994
1283
  end
995
1284
  if hpxml.lighting.garage_monthly_multipliers.nil?
996
1285
  hpxml.lighting.garage_monthly_multipliers = default_exterior_lighting_monthly_multipliers
1286
+ hpxml.lighting.garage_monthly_multipliers_isdefaulted = true
997
1287
  end
998
1288
  end
999
1289
  if hpxml.lighting.exterior_weekday_fractions.nil?
1000
1290
  hpxml.lighting.exterior_weekday_fractions = default_exterior_lighting_weekday_fractions
1291
+ hpxml.lighting.exterior_weekday_fractions_isdefaulted = true
1001
1292
  end
1002
1293
  if hpxml.lighting.exterior_weekend_fractions.nil?
1003
1294
  hpxml.lighting.exterior_weekend_fractions = default_exterior_lighting_weekend_fractions
1295
+ hpxml.lighting.exterior_weekend_fractions_isdefaulted = true
1004
1296
  end
1005
1297
  if hpxml.lighting.exterior_monthly_multipliers.nil?
1006
1298
  hpxml.lighting.exterior_monthly_multipliers = default_exterior_lighting_monthly_multipliers
1299
+ hpxml.lighting.exterior_monthly_multipliers_isdefaulted = true
1007
1300
  end
1008
1301
  if hpxml.lighting.holiday_exists
1009
1302
  if hpxml.lighting.holiday_kwh_per_day.nil?
@@ -1013,35 +1306,500 @@ class HPXMLDefaults
1013
1306
  else # Multifamily and others
1014
1307
  hpxml.lighting.holiday_kwh_per_day = 0.55
1015
1308
  end
1309
+ hpxml.lighting.holiday_kwh_per_day_isdefaulted = true
1016
1310
  end
1017
1311
  if hpxml.lighting.holiday_period_begin_month.nil?
1018
1312
  hpxml.lighting.holiday_period_begin_month = 11
1019
- hpxml.lighting.holiday_period_begin_day_of_month = 24
1313
+ hpxml.lighting.holiday_period_begin_month_isdefaulted = true
1314
+ hpxml.lighting.holiday_period_begin_day = 24
1315
+ hpxml.lighting.holiday_period_begin_day_isdefaulted = true
1020
1316
  end
1021
- if hpxml.lighting.holiday_period_end_day_of_month.nil?
1317
+ if hpxml.lighting.holiday_period_end_day.nil?
1022
1318
  hpxml.lighting.holiday_period_end_month = 1
1023
- hpxml.lighting.holiday_period_end_day_of_month = 6
1319
+ hpxml.lighting.holiday_period_end_month_isdefaulted = true
1320
+ hpxml.lighting.holiday_period_end_day = 6
1321
+ hpxml.lighting.holiday_period_end_day_isdefaulted = true
1024
1322
  end
1025
1323
  if hpxml.lighting.holiday_weekday_fractions.nil?
1026
1324
  hpxml.lighting.holiday_weekday_fractions = Schedule.LightingExteriorHolidayWeekdayFractions
1325
+ hpxml.lighting.holiday_weekday_fractions_isdefaulted = true
1027
1326
  end
1028
1327
  if hpxml.lighting.holiday_weekend_fractions.nil?
1029
1328
  hpxml.lighting.holiday_weekend_fractions = Schedule.LightingExteriorHolidayWeekendFractions
1329
+ hpxml.lighting.holiday_weekend_fractions_isdefaulted = true
1030
1330
  end
1031
1331
  end
1032
1332
  end
1033
1333
 
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
1334
+ def self.apply_ceiling_fans(hpxml, nbeds)
1335
+ return if hpxml.ceiling_fans.size == 0
1336
+
1337
+ ceiling_fan = hpxml.ceiling_fans[0]
1338
+ if ceiling_fan.efficiency.nil?
1339
+ medium_cfm = 3000.0
1340
+ ceiling_fan.efficiency = medium_cfm / HVAC.get_default_ceiling_fan_power()
1341
+ ceiling_fan.efficiency_isdefaulted = true
1342
+ end
1343
+ if ceiling_fan.quantity.nil?
1344
+ ceiling_fan.quantity = HVAC.get_default_ceiling_fan_quantity(nbeds)
1345
+ ceiling_fan.quantity_isdefaulted = true
1346
+ end
1347
+ end
1348
+
1349
+ def self.apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
1350
+ hpxml.pools.each do |pool|
1351
+ next if pool.type == HPXML::TypeNone
1352
+
1353
+ if pool.pump_type != HPXML::TypeNone
1354
+ # Pump
1355
+ if pool.pump_kwh_per_year.nil?
1356
+ pool.pump_kwh_per_year = MiscLoads.get_pool_pump_default_values(cfa, nbeds)
1357
+ pool.pump_kwh_per_year_isdefaulted = true
1358
+ end
1359
+ if pool.pump_usage_multiplier.nil?
1360
+ pool.pump_usage_multiplier = 1.0
1361
+ pool.pump_usage_multiplier_isdefaulted = true
1362
+ end
1363
+ if pool.pump_weekday_fractions.nil?
1364
+ 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'
1365
+ pool.pump_weekday_fractions_isdefaulted = true
1366
+ end
1367
+ if pool.pump_weekend_fractions.nil?
1368
+ 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'
1369
+ pool.pump_weekend_fractions_isdefaulted = true
1370
+ end
1371
+ if pool.pump_monthly_multipliers.nil?
1372
+ 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'
1373
+ pool.pump_monthly_multipliers_isdefaulted = true
1374
+ end
1038
1375
  end
1039
- if pv_system.inverter_efficiency.nil?
1040
- pv_system.inverter_efficiency = PV.get_default_inv_eff()
1376
+
1377
+ next unless pool.heater_type != HPXML::TypeNone
1378
+
1379
+ # Heater
1380
+ if pool.heater_load_value.nil?
1381
+ default_heater_load_units, default_heater_load_value = MiscLoads.get_pool_heater_default_values(cfa, nbeds, pool.heater_type)
1382
+ pool.heater_load_units = default_heater_load_units
1383
+ pool.heater_load_value = default_heater_load_value
1384
+ pool.heater_load_value_isdefaulted = true
1041
1385
  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)
1386
+ if pool.heater_usage_multiplier.nil?
1387
+ pool.heater_usage_multiplier = 1.0
1388
+ pool.heater_usage_multiplier_isdefaulted = true
1389
+ end
1390
+ if pool.heater_weekday_fractions.nil?
1391
+ 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'
1392
+ pool.heater_weekday_fractions_isdefaulted = true
1393
+ end
1394
+ if pool.heater_weekend_fractions.nil?
1395
+ 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'
1396
+ pool.heater_weekend_fractions_isdefaulted = true
1397
+ end
1398
+ if pool.heater_monthly_multipliers.nil?
1399
+ 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'
1400
+ pool.heater_monthly_multipliers_isdefaulted = true
1401
+ end
1402
+ end
1403
+
1404
+ hpxml.hot_tubs.each do |hot_tub|
1405
+ next if hot_tub.type == HPXML::TypeNone
1406
+
1407
+ if hot_tub.pump_type != HPXML::TypeNone
1408
+ # Pump
1409
+ if hot_tub.pump_kwh_per_year.nil?
1410
+ hot_tub.pump_kwh_per_year = MiscLoads.get_hot_tub_pump_default_values(cfa, nbeds)
1411
+ hot_tub.pump_kwh_per_year_isdefaulted = true
1412
+ end
1413
+ if hot_tub.pump_usage_multiplier.nil?
1414
+ hot_tub.pump_usage_multiplier = 1.0
1415
+ hot_tub.pump_usage_multiplier_isdefaulted = true
1416
+ end
1417
+ if hot_tub.pump_weekday_fractions.nil?
1418
+ 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'
1419
+ hot_tub.pump_weekday_fractions_isdefaulted = true
1420
+ end
1421
+ if hot_tub.pump_weekend_fractions.nil?
1422
+ 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'
1423
+ hot_tub.pump_weekend_fractions_isdefaulted = true
1424
+ end
1425
+ if hot_tub.pump_monthly_multipliers.nil?
1426
+ 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'
1427
+ hot_tub.pump_monthly_multipliers_isdefaulted = true
1428
+ end
1429
+ end
1430
+
1431
+ next unless hot_tub.heater_type != HPXML::TypeNone
1432
+
1433
+ # Heater
1434
+ if hot_tub.heater_load_value.nil?
1435
+ default_heater_load_units, default_heater_load_value = MiscLoads.get_hot_tub_heater_default_values(cfa, nbeds, hot_tub.heater_type)
1436
+ hot_tub.heater_load_units = default_heater_load_units
1437
+ hot_tub.heater_load_value = default_heater_load_value
1438
+ hot_tub.heater_load_value_isdefaulted = true
1439
+ end
1440
+ if hot_tub.heater_usage_multiplier.nil?
1441
+ hot_tub.heater_usage_multiplier = 1.0
1442
+ hot_tub.heater_usage_multiplier_isdefaulted = true
1443
+ end
1444
+ if hot_tub.heater_weekday_fractions.nil?
1445
+ 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'
1446
+ hot_tub.heater_weekday_fractions_isdefaulted = true
1447
+ end
1448
+ if hot_tub.heater_weekend_fractions.nil?
1449
+ 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'
1450
+ hot_tub.heater_weekend_fractions_isdefaulted = true
1451
+ end
1452
+ if hot_tub.heater_monthly_multipliers.nil?
1453
+ 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'
1454
+ hot_tub.heater_monthly_multipliers_isdefaulted = true
1455
+ end
1456
+ end
1457
+ end
1458
+
1459
+ def self.apply_plug_loads(hpxml, cfa, nbeds)
1460
+ hpxml.plug_loads.each do |plug_load|
1461
+ if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
1462
+ default_annual_kwh, default_sens_frac, default_lat_frac = MiscLoads.get_residual_mels_default_values(cfa)
1463
+ if plug_load.kWh_per_year.nil?
1464
+ plug_load.kWh_per_year = default_annual_kwh
1465
+ plug_load.kWh_per_year_isdefaulted = true
1466
+ end
1467
+ if plug_load.frac_sensible.nil?
1468
+ plug_load.frac_sensible = default_sens_frac
1469
+ plug_load.frac_sensible_isdefaulted = true
1470
+ end
1471
+ if plug_load.frac_latent.nil?
1472
+ plug_load.frac_latent = default_lat_frac
1473
+ plug_load.frac_latent_isdefaulted = true
1474
+ end
1475
+ if plug_load.weekday_fractions.nil?
1476
+ plug_load.weekday_fractions = Schedule.PlugLoadsOtherWeekdayFractions
1477
+ plug_load.weekday_fractions_isdefaulted = true
1478
+ end
1479
+ if plug_load.weekend_fractions.nil?
1480
+ plug_load.weekend_fractions = Schedule.PlugLoadsOtherWeekendFractions
1481
+ plug_load.weekend_fractions_isdefaulted = true
1482
+ end
1483
+ if plug_load.monthly_multipliers.nil?
1484
+ plug_load.monthly_multipliers = Schedule.PlugLoadsOtherMonthlyMultipliers
1485
+ plug_load.monthly_multipliers_isdefaulted = true
1486
+ end
1487
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
1488
+ default_annual_kwh, default_sens_frac, default_lat_frac = MiscLoads.get_televisions_default_values(cfa, nbeds)
1489
+ if plug_load.kWh_per_year.nil?
1490
+ plug_load.kWh_per_year = default_annual_kwh
1491
+ plug_load.kWh_per_year_isdefaulted = true
1492
+ end
1493
+ if plug_load.frac_sensible.nil?
1494
+ plug_load.frac_sensible = default_sens_frac
1495
+ plug_load.frac_sensible_isdefaulted = true
1496
+ end
1497
+ if plug_load.frac_latent.nil?
1498
+ plug_load.frac_latent = default_lat_frac
1499
+ plug_load.frac_latent_isdefaulted = true
1500
+ end
1501
+ if plug_load.weekday_fractions.nil?
1502
+ plug_load.weekday_fractions = Schedule.PlugLoadsTVWeekdayFractions
1503
+ plug_load.weekday_fractions_isdefaulted = true
1504
+ end
1505
+ if plug_load.weekend_fractions.nil?
1506
+ plug_load.weekend_fractions = Schedule.PlugLoadsTVWeekendFractions
1507
+ plug_load.weekend_fractions_isdefaulted = true
1508
+ end
1509
+ if plug_load.monthly_multipliers.nil?
1510
+ plug_load.monthly_multipliers = Schedule.PlugLoadsTVMonthlyMultipliers
1511
+ plug_load.monthly_multipliers_isdefaulted = true
1512
+ end
1513
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
1514
+ default_annual_kwh = MiscLoads.get_electric_vehicle_charging_default_values
1515
+ if plug_load.kWh_per_year.nil?
1516
+ plug_load.kWh_per_year = default_annual_kwh
1517
+ plug_load.kWh_per_year_isdefaulted = true
1518
+ end
1519
+ if plug_load.frac_sensible.nil?
1520
+ plug_load.frac_sensible = 0.0
1521
+ plug_load.frac_sensible_isdefaulted = true
1522
+ end
1523
+ if plug_load.frac_latent.nil?
1524
+ plug_load.frac_latent = 0.0
1525
+ plug_load.frac_latent_isdefaulted = true
1526
+ end
1527
+ if plug_load.weekday_fractions.nil?
1528
+ plug_load.weekday_fractions = Schedule.PlugLoadsVehicleWeekdayFractions
1529
+ plug_load.weekday_fractions_isdefaulted = true
1530
+ end
1531
+ if plug_load.weekend_fractions.nil?
1532
+ plug_load.weekend_fractions = Schedule.PlugLoadsVehicleWeekendFractions
1533
+ plug_load.weekend_fractions_isdefaulted = true
1534
+ end
1535
+ if plug_load.monthly_multipliers.nil?
1536
+ plug_load.monthly_multipliers = Schedule.PlugLoadsVehicleMonthlyMultipliers
1537
+ plug_load.monthly_multipliers_isdefaulted = true
1538
+ end
1539
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
1540
+ default_annual_kwh = MiscLoads.get_well_pump_default_values(cfa, nbeds)
1541
+ if plug_load.kWh_per_year.nil?
1542
+ plug_load.kWh_per_year = default_annual_kwh
1543
+ plug_load.kWh_per_year_isdefaulted = true
1544
+ end
1545
+ if plug_load.frac_sensible.nil?
1546
+ plug_load.frac_sensible = 0.0
1547
+ plug_load.frac_sensible_isdefaulted = true
1548
+ end
1549
+ if plug_load.frac_latent.nil?
1550
+ plug_load.frac_latent = 0.0
1551
+ plug_load.frac_latent_isdefaulted = true
1552
+ end
1553
+ if plug_load.weekday_fractions.nil?
1554
+ plug_load.weekday_fractions = Schedule.PlugLoadsWellPumpWeekdayFractions
1555
+ plug_load.weekday_fractions_isdefaulted = true
1556
+ end
1557
+ if plug_load.weekend_fractions.nil?
1558
+ plug_load.weekend_fractions = Schedule.PlugLoadsWellPumpWeekendFractions
1559
+ plug_load.weekend_fractions_isdefaulted = true
1560
+ end
1561
+ if plug_load.monthly_multipliers.nil?
1562
+ plug_load.monthly_multipliers = Schedule.PlugLoadsWellPumpMonthlyMultipliers
1563
+ plug_load.monthly_multipliers_isdefaulted = true
1564
+ end
1565
+ end
1566
+ if plug_load.usage_multiplier.nil?
1567
+ plug_load.usage_multiplier = 1.0
1568
+ plug_load.usage_multiplier_isdefaulted = true
1569
+ end
1570
+ end
1571
+ end
1572
+
1573
+ def self.apply_fuel_loads(hpxml, cfa, nbeds)
1574
+ hpxml.fuel_loads.each do |fuel_load|
1575
+ if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
1576
+ if fuel_load.therm_per_year.nil?
1577
+ fuel_load.therm_per_year = MiscLoads.get_gas_grill_default_values(cfa, nbeds)
1578
+ fuel_load.therm_per_year_isdefaulted = true
1579
+ end
1580
+ if fuel_load.frac_sensible.nil?
1581
+ fuel_load.frac_sensible = 0.0
1582
+ fuel_load.frac_sensible_isdefaulted = true
1583
+ end
1584
+ if fuel_load.frac_latent.nil?
1585
+ fuel_load.frac_latent = 0.0
1586
+ fuel_load.frac_latent_isdefaulted = true
1587
+ end
1588
+ if fuel_load.weekday_fractions.nil?
1589
+ fuel_load.weekday_fractions = Schedule.FuelLoadsGrillWeekdayFractions
1590
+ fuel_load.weekday_fractions_isdefaulted = true
1591
+ end
1592
+ if fuel_load.weekend_fractions.nil?
1593
+ fuel_load.weekend_fractions = Schedule.FuelLoadsGrillWeekendFractions
1594
+ fuel_load.weekend_fractions_isdefaulted = true
1595
+ end
1596
+ if fuel_load.monthly_multipliers.nil?
1597
+ fuel_load.monthly_multipliers = Schedule.FuelLoadsGrillMonthlyMultipliers
1598
+ fuel_load.monthly_multipliers_isdefaulted = true
1599
+ end
1600
+ elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
1601
+ if fuel_load.therm_per_year.nil?
1602
+ fuel_load.therm_per_year = MiscLoads.get_gas_lighting_default_values(cfa, nbeds)
1603
+ fuel_load.therm_per_year_isdefaulted = true
1604
+ end
1605
+ if fuel_load.frac_sensible.nil?
1606
+ fuel_load.frac_sensible = 0.0
1607
+ fuel_load.frac_sensible_isdefaulted = true
1608
+ end
1609
+ if fuel_load.frac_latent.nil?
1610
+ fuel_load.frac_latent = 0.0
1611
+ fuel_load.frac_latent_isdefaulted = true
1612
+ end
1613
+ if fuel_load.weekday_fractions.nil?
1614
+ fuel_load.weekday_fractions = Schedule.FuelLoadsLightingWeekdayFractions
1615
+ fuel_load.weekday_fractions_isdefaulted = true
1616
+ end
1617
+ if fuel_load.weekend_fractions.nil?
1618
+ fuel_load.weekend_fractions = Schedule.FuelLoadsLightingWeekendFractions
1619
+ fuel_load.weekend_fractions_isdefaulted = true
1620
+ end
1621
+ if fuel_load.monthly_multipliers.nil?
1622
+ fuel_load.monthly_multipliers = Schedule.FuelLoadsLightingMonthlyMultipliers
1623
+ fuel_load.monthly_multipliers_isdefaulted = true
1624
+ end
1625
+ elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
1626
+ if fuel_load.therm_per_year.nil?
1627
+ fuel_load.therm_per_year = MiscLoads.get_gas_fireplace_default_values(cfa, nbeds)
1628
+ fuel_load.therm_per_year_isdefaulted = true
1629
+ end
1630
+ if fuel_load.frac_sensible.nil?
1631
+ fuel_load.frac_sensible = 0.5
1632
+ fuel_load.frac_sensible_isdefaulted = true
1633
+ end
1634
+ if fuel_load.frac_latent.nil?
1635
+ fuel_load.frac_latent = 0.1
1636
+ fuel_load.frac_latent_isdefaulted = true
1637
+ end
1638
+ if fuel_load.weekday_fractions.nil?
1639
+ fuel_load.weekday_fractions = Schedule.FuelLoadsFireplaceWeekdayFractions
1640
+ fuel_load.weekday_fractions_isdefaulted = true
1641
+ end
1642
+ if fuel_load.weekend_fractions.nil?
1643
+ fuel_load.weekend_fractions = Schedule.FuelLoadsFireplaceWeekendFractions
1644
+ fuel_load.weekend_fractions_isdefaulted = true
1645
+ end
1646
+ if fuel_load.monthly_multipliers.nil?
1647
+ fuel_load.monthly_multipliers = Schedule.FuelLoadsFireplaceMonthlyMultipliers
1648
+ fuel_load.monthly_multipliers_isdefaulted = true
1649
+ end
1044
1650
  end
1651
+ if fuel_load.usage_multiplier.nil?
1652
+ fuel_load.usage_multiplier = 1.0
1653
+ fuel_load.usage_multiplier_isdefaulted = true
1654
+ end
1655
+ end
1656
+ end
1657
+
1658
+ def self.apply_hvac_sizing(hpxml, weather, cfa, nbeds)
1659
+ # Convert negative values (e.g., -1) to nil as appropriate
1660
+ hpxml.hvac_systems.each do |hvac_system|
1661
+ if hvac_system.respond_to?(:heating_capacity) && hvac_system.heating_capacity.to_f < 0
1662
+ hvac_system.heating_capacity = nil
1663
+ end
1664
+ if hvac_system.respond_to?(:cooling_capacity) && hvac_system.cooling_capacity.to_f < 0
1665
+ hvac_system.cooling_capacity = nil
1666
+ end
1667
+ if hvac_system.respond_to?(:heating_capacity_17F) && hvac_system.heating_capacity_17F.to_f < 0
1668
+ hvac_system.heating_capacity_17F = nil
1669
+ end
1670
+ if hvac_system.respond_to?(:backup_heating_capacity) && hvac_system.backup_heating_capacity.to_f < 0
1671
+ hvac_system.backup_heating_capacity = nil
1672
+ end
1673
+ end
1674
+
1675
+ hvac_systems = HVAC.get_hpxml_hvac_systems(hpxml)
1676
+
1677
+ # Calculate building design loads and equipment capacities/airflows
1678
+ bldg_design_loads, all_hvac_sizing_values = HVACSizing.calculate(weather, hpxml, cfa, nbeds, hvac_systems)
1679
+
1680
+ hvacpl = hpxml.hvac_plant
1681
+ tol = 10 # Btuh
1682
+
1683
+ # Assign heating design loads back to HPXML object
1684
+ hvacpl.hdl_total = bldg_design_loads.Heat_Tot.round
1685
+ hvacpl.hdl_walls = bldg_design_loads.Heat_Walls.round
1686
+ hvacpl.hdl_ceilings = bldg_design_loads.Heat_Ceilings.round
1687
+ hvacpl.hdl_roofs = bldg_design_loads.Heat_Roofs.round
1688
+ hvacpl.hdl_floors = bldg_design_loads.Heat_Floors.round
1689
+ hvacpl.hdl_slabs = bldg_design_loads.Heat_Slabs.round
1690
+ hvacpl.hdl_windows = bldg_design_loads.Heat_Windows.round
1691
+ hvacpl.hdl_skylights = bldg_design_loads.Heat_Skylights.round
1692
+ hvacpl.hdl_doors = bldg_design_loads.Heat_Doors.round
1693
+ hvacpl.hdl_infilvent = bldg_design_loads.Heat_InfilVent.round
1694
+ hvacpl.hdl_ducts = bldg_design_loads.Heat_Ducts.round
1695
+ hdl_sum = (hvacpl.hdl_walls + hvacpl.hdl_ceilings + hvacpl.hdl_roofs +
1696
+ hvacpl.hdl_floors + hvacpl.hdl_slabs + hvacpl.hdl_windows +
1697
+ hvacpl.hdl_skylights + hvacpl.hdl_doors + hvacpl.hdl_infilvent +
1698
+ hvacpl.hdl_ducts)
1699
+ if (hdl_sum - hvacpl.hdl_total).abs > tol
1700
+ fail 'Heating design loads do not sum to total.'
1701
+ end
1702
+
1703
+ # Cooling sensible design loads back to HPXML object
1704
+ hvacpl.cdl_sens_total = bldg_design_loads.Cool_Sens.round
1705
+ hvacpl.cdl_sens_walls = bldg_design_loads.Cool_Walls.round
1706
+ hvacpl.cdl_sens_ceilings = bldg_design_loads.Cool_Ceilings.round
1707
+ hvacpl.cdl_sens_roofs = bldg_design_loads.Cool_Roofs.round
1708
+ hvacpl.cdl_sens_floors = bldg_design_loads.Cool_Floors.round
1709
+ hvacpl.cdl_sens_slabs = 0.0
1710
+ hvacpl.cdl_sens_windows = bldg_design_loads.Cool_Windows.round
1711
+ hvacpl.cdl_sens_skylights = bldg_design_loads.Cool_Skylights.round
1712
+ hvacpl.cdl_sens_doors = bldg_design_loads.Cool_Doors.round
1713
+ hvacpl.cdl_sens_infilvent = bldg_design_loads.Cool_Infil_Sens.round
1714
+ hvacpl.cdl_sens_ducts = bldg_design_loads.Cool_Ducts_Sens.round
1715
+ hvacpl.cdl_sens_intgains = bldg_design_loads.Cool_IntGains_Sens.round
1716
+ cdl_sens_sum = (hvacpl.cdl_sens_walls + hvacpl.cdl_sens_ceilings +
1717
+ hvacpl.cdl_sens_roofs + hvacpl.cdl_sens_floors +
1718
+ hvacpl.cdl_sens_slabs + hvacpl.cdl_sens_windows +
1719
+ hvacpl.cdl_sens_skylights + hvacpl.cdl_sens_doors +
1720
+ hvacpl.cdl_sens_infilvent + hvacpl.cdl_sens_ducts +
1721
+ hvacpl.cdl_sens_intgains)
1722
+ if (cdl_sens_sum - hvacpl.cdl_sens_total).abs > tol
1723
+ fail 'Cooling sensible design loads do not sum to total.'
1724
+ end
1725
+
1726
+ # Cooling latent design loads back to HPXML object
1727
+ hvacpl.cdl_lat_total = bldg_design_loads.Cool_Lat.round
1728
+ hvacpl.cdl_lat_ducts = bldg_design_loads.Cool_Ducts_Lat.round
1729
+ hvacpl.cdl_lat_infilvent = bldg_design_loads.Cool_Infil_Lat.round
1730
+ hvacpl.cdl_lat_intgains = bldg_design_loads.Cool_IntGains_Lat.round
1731
+ cdl_lat_sum = (hvacpl.cdl_lat_ducts + hvacpl.cdl_lat_infilvent +
1732
+ hvacpl.cdl_lat_intgains)
1733
+ if (cdl_lat_sum - hvacpl.cdl_lat_total).abs > tol
1734
+ fail 'Cooling latent design loads do not sum to total.'
1735
+ end
1736
+
1737
+ # Assign sizing values back to HPXML objects
1738
+ all_hvac_sizing_values.each do |hvac_system, hvac_sizing_values|
1739
+ htg_sys = hvac_system[:heating]
1740
+ clg_sys = hvac_system[:cooling]
1741
+
1742
+ # Heating system
1743
+ if not htg_sys.nil?
1744
+
1745
+ # Heating capacities
1746
+ if htg_sys.heating_capacity.nil? || ((htg_sys.heating_capacity - hvac_sizing_values.Heat_Capacity).abs >= 1.0)
1747
+ # Heating capacity @ 17F
1748
+ if htg_sys.respond_to? :heating_capacity_17F
1749
+ if (not htg_sys.heating_capacity.nil?) && (not htg_sys.heating_capacity_17F.nil?)
1750
+ # Fixed value entered; scale w/ heating_capacity in case allow_increased_fixed_capacities=true
1751
+ htg_cap_17f = htg_sys.heating_capacity_17F * hvac_sizing_values.Heat_Capacity.round / htg_sys.heating_capacity
1752
+ if (htg_sys.heating_capacity_17F - htg_cap_17f).abs >= 1.0
1753
+ htg_sys.heating_capacity_17F = htg_cap_17f.round
1754
+ htg_sys.heating_capacity_17F_isdefaulted = true
1755
+ end
1756
+ else
1757
+ # Autosized
1758
+ # FUTURE: Calculate HeatingCapacity17F from heat_cap_ft_spec? Might be confusing
1759
+ # since user would not be able to replicate the results using this value, as the
1760
+ # default curves are non-linear.
1761
+ end
1762
+ end
1763
+ htg_sys.heating_capacity = hvac_sizing_values.Heat_Capacity.round
1764
+ htg_sys.heating_capacity_isdefaulted = true
1765
+ end
1766
+ if htg_sys.respond_to? :backup_heating_capacity
1767
+ if not htg_sys.backup_heating_fuel.nil? # If there is a backup heating source
1768
+ if htg_sys.backup_heating_capacity.nil? || ((htg_sys.backup_heating_capacity - hvac_sizing_values.Heat_Capacity_Supp).abs >= 1.0)
1769
+ htg_sys.backup_heating_capacity = hvac_sizing_values.Heat_Capacity_Supp.round
1770
+ htg_sys.backup_heating_capacity_isdefaulted = true
1771
+ end
1772
+ else
1773
+ htg_sys.backup_heating_capacity = 0.0
1774
+ end
1775
+ end
1776
+
1777
+ # Heating airflow
1778
+ htg_sys.heating_airflow_cfm = hvac_sizing_values.Heat_Airflow.round
1779
+ htg_sys.heating_airflow_cfm_isdefaulted = true
1780
+
1781
+ # Heating GSHP loop
1782
+ if htg_sys.is_a? HPXML::HeatPump
1783
+ htg_sys.additional_properties.GSHP_Loop_flow = hvac_sizing_values.GSHP_Loop_flow
1784
+ htg_sys.additional_properties.GSHP_Bore_Depth = hvac_sizing_values.GSHP_Bore_Depth
1785
+ htg_sys.additional_properties.GSHP_Bore_Holes = hvac_sizing_values.GSHP_Bore_Holes
1786
+ htg_sys.additional_properties.GSHP_G_Functions = hvac_sizing_values.GSHP_G_Functions
1787
+ end
1788
+ end
1789
+
1790
+ # Cooling system
1791
+ next unless not clg_sys.nil?
1792
+
1793
+ # Cooling capacities
1794
+ if clg_sys.cooling_capacity.nil? || ((clg_sys.cooling_capacity - hvac_sizing_values.Cool_Capacity).abs >= 1.0)
1795
+ clg_sys.cooling_capacity = hvac_sizing_values.Cool_Capacity.round
1796
+ clg_sys.cooling_capacity_isdefaulted = true
1797
+ end
1798
+ clg_sys.additional_properties.cooling_capacity_sensible = hvac_sizing_values.Cool_Capacity_Sens.round
1799
+
1800
+ # Cooling airflow
1801
+ clg_sys.cooling_airflow_cfm = hvac_sizing_values.Cool_Airflow.round
1802
+ clg_sys.cooling_airflow_cfm_isdefaulted = true
1045
1803
  end
1046
1804
  end
1047
1805
  end