urbanopt-cli 0.4.1 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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