urbanopt-cli 0.5.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (907) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/CHANGELOG.md +43 -1
  4. data/CMakeLists.txt +14 -14
  5. data/FindOpenStudioSDK.cmake +11 -6
  6. data/Gemfile +11 -5
  7. data/LICENSE.md +11 -1
  8. data/Rakefile +16 -6
  9. data/example_files/Gemfile +8 -8
  10. data/example_files/example_project_combined.json +100 -5
  11. data/example_files/example_project_with_streets.json +826 -0
  12. data/example_files/mappers/Baseline.rb +107 -59
  13. data/example_files/mappers/CreateBar.rb +17 -7
  14. data/example_files/mappers/EvCharging.rb +20 -10
  15. data/example_files/mappers/Floorspace.rb +17 -7
  16. data/example_files/mappers/HighEfficiency.rb +20 -8
  17. data/example_files/mappers/HighEfficiencyCreateBar.rb +19 -8
  18. data/example_files/mappers/HighEfficiencyFloorspace.rb +19 -8
  19. data/example_files/mappers/ThermalStorage.rb +16 -6
  20. data/example_files/measures/BuildResidentialModel/measure.rb +249 -134
  21. data/example_files/reopt/base_assumptions.json +2 -2
  22. data/example_files/reopt/multiPV_assumptions.json +4 -3
  23. data/example_files/residential/clothes_dryer.tsv +7 -7
  24. data/example_files/residential/clothes_washer.tsv +1 -1
  25. data/example_files/residential/cooling_system.tsv +42 -22
  26. data/example_files/residential/dishwasher.tsv +1 -1
  27. data/example_files/residential/exhaust.tsv +3 -0
  28. data/example_files/residential/heat_pump.tsv +62 -40
  29. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +2 -1
  30. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +116 -0
  31. data/example_files/resources/hpxml-measures/.gitignore +1 -8
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +746 -1236
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1550 -1215
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +432 -343
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +134 -91
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.json +388 -0
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.md +43 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +36 -60
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +35 -59
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +35 -59
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +35 -59
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +36 -60
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +36 -60
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +41 -65
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +36 -60
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +36 -60
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +36 -60
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +36 -60
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +36 -60
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +36 -60
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +36 -60
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +341 -0
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +341 -0
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +39 -63
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +39 -63
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +39 -63
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +39 -63
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +39 -63
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +36 -60
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +36 -61
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +36 -61
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +36 -60
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +36 -61
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +36 -61
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +36 -61
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +36 -61
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +36 -60
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +36 -60
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +36 -60
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +36 -61
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +36 -60
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +37 -61
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +36 -60
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +36 -60
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +36 -60
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +36 -60
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +36 -60
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +36 -60
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +36 -60
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +36 -60
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +36 -60
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +36 -60
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +36 -60
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +36 -60
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +36 -60
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +36 -60
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +36 -60
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +36 -60
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +36 -60
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +36 -60
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +36 -60
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +36 -60
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +36 -60
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +36 -60
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +36 -60
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +36 -60
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +36 -60
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +36 -60
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +36 -60
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +36 -60
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +36 -60
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +36 -60
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +36 -60
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +36 -60
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +36 -60
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +36 -60
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +36 -60
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +36 -60
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +36 -60
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +36 -60
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +36 -60
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +36 -60
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +36 -60
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +36 -60
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +37 -61
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +37 -61
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +36 -60
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +36 -60
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +36 -60
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +36 -60
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +35 -59
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +35 -59
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +35 -59
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +35 -59
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +35 -59
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +36 -61
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +36 -60
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +36 -60
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +36 -60
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +36 -60
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +36 -61
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +36 -61
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +36 -60
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +36 -60
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +36 -60
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +36 -61
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +36 -60
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +36 -60
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +36 -62
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +35 -60
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +35 -60
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +35 -59
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +35 -59
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +36 -61
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +36 -60
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +36 -60
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +36 -60
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +37 -61
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +36 -61
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +36 -61
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +37 -62
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +36 -61
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +36 -60
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +36 -60
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +36 -60
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +36 -60
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +36 -61
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +36 -60
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +36 -60
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +36 -60
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +36 -60
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +36 -62
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-plug-loads-additional-multipliers.osw → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw} +41 -63
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +36 -61
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +36 -61
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +36 -61
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +36 -61
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +37 -62
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +37 -62
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +36 -60
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +37 -62
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +36 -60
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +36 -60
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +36 -60
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +36 -61
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +36 -61
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +36 -60
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +36 -61
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +36 -60
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +36 -60
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +36 -60
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +45 -69
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +36 -60
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +49 -73
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → base-location-honolulu-hi.osw} +39 -63
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +36 -60
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +36 -60
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +44 -70
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +37 -61
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +36 -60
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +36 -60
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +36 -60
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +36 -60
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +36 -60
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +36 -60
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +36 -60
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +36 -60
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +34 -58
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +34 -58
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +34 -58
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +36 -60
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
  228. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +35 -59
  229. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +36 -60
  230. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +39 -63
  231. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +36 -60
  232. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +36 -60
  233. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +36 -60
  234. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +36 -60
  235. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +36 -60
  236. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +36 -60
  237. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +36 -60
  238. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +36 -60
  239. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +60 -57
  240. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +36 -60
  241. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
  242. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
  243. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
  244. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
  245. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
  246. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
  247. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
  248. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
  249. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
  250. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
  251. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
  252. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
  253. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
  254. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
  255. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
  256. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
  257. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
  258. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
  259. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
  260. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
  261. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
  262. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
  263. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
  264. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
  265. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
  266. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  267. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
  268. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  269. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
  270. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  271. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
  272. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  273. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
  274. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  275. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
  276. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  277. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
  278. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  279. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
  280. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  281. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
  282. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  283. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
  284. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
  285. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
  286. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  287. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
  288. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  289. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
  290. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  291. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
  292. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  293. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
  294. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  295. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
  296. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  297. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
  298. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  299. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
  300. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  301. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
  302. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  303. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
  304. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
  305. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
  306. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
  307. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +339 -0
  308. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +339 -0
  309. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
  310. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +339 -0
  311. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
  312. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
  313. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
  314. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
  315. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
  316. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +339 -0
  317. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
  318. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
  319. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
  320. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
  321. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
  322. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
  323. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +36 -60
  324. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
  325. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
  326. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
  327. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +36 -60
  328. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
  329. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +337 -0
  330. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +337 -0
  331. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +36 -60
  332. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +36 -60
  333. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
  334. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
  335. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
  336. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +38 -62
  337. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
  338. 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} +36 -60
  339. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +36 -60
  340. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
  341. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
  342. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
  343. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
  344. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
  345. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +39 -63
  346. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
  347. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +36 -60
  348. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +36 -60
  349. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +36 -60
  350. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +36 -60
  351. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
  352. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +36 -60
  353. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +39 -63
  354. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +39 -63
  355. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +38 -62
  356. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +36 -60
  357. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
  358. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/{multipliers-without-plug-loads.osw → multipliers-without-tv-plug-loads.osw} +40 -64
  359. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +337 -0
  360. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
  361. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +36 -60
  362. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +36 -60
  363. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +36 -60
  364. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
  365. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +36 -60
  366. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
  367. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +36 -60
  368. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +36 -60
  369. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +36 -60
  370. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +36 -60
  371. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +337 -0
  372. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +36 -60
  373. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +36 -60
  374. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +36 -60
  375. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -60
  376. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +38 -62
  377. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -60
  378. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
  379. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
  380. data/example_files/resources/hpxml-measures/Changelog.md +249 -0
  381. data/example_files/resources/hpxml-measures/Gemfile +3 -4
  382. data/example_files/resources/hpxml-measures/Gemfile.lock +27 -32
  383. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +318 -1283
  384. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -121
  385. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +7 -97
  386. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +600 -203
  387. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +21 -28
  388. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +114 -22
  389. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +112 -177
  390. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +16 -180
  391. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +543 -94
  392. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
  393. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +4 -7
  394. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +410 -14
  395. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +27 -25
  396. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +782 -460
  397. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +455 -107
  398. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1466 -1403
  399. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1391 -1467
  400. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +2 -1
  401. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +20 -7
  402. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +85 -13
  403. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
  404. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +14 -33
  405. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +3 -4
  406. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +43 -7
  407. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +24 -7
  408. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
  409. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
  410. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +4 -4
  411. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +32 -30
  412. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +6 -29
  413. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +523 -635
  414. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +151 -0
  415. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +3 -1
  416. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +4 -2
  417. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +297 -7
  418. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +0 -1
  419. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -1
  420. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +3 -1
  421. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -1
  422. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +3 -1
  423. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +3 -1
  424. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +26 -3
  425. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +3 -1
  426. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
  427. data/example_files/resources/hpxml-measures/README.md +4 -5
  428. data/example_files/resources/hpxml-measures/Rakefile +1 -2
  429. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +140 -47
  430. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +351 -495
  431. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +260 -189
  432. data/example_files/resources/hpxml-measures/docs/source/conf.py +4 -1
  433. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +3 -3
  434. data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -105
  435. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +538 -396
  436. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +158 -130
  437. data/example_files/resources/hpxml-measures/tasks.rb +1497 -736
  438. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
  439. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
  440. data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
  441. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
  442. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
  443. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
  444. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
  445. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
  446. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
  447. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +36 -5
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +4 -3
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +5 -3
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +5 -3
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +535 -0
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +5 -3
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +4 -3
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +4 -3
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +4 -2
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +4 -3
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +4 -3
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +4 -3
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +4 -3
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +6 -5
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +4 -3
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +4 -3
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +4 -3
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +4 -3
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +4 -3
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +4 -3
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +4 -3
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +4 -3
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +4 -3
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +0 -1
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +4 -4
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +3 -5
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +28 -18
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +28 -18
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +0 -1
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +4 -4
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +3 -5
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +3 -5
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +23 -11
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +0 -1
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +4 -4
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +3 -5
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +23 -12
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +23 -12
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +4 -3
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +6 -6
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +4 -3
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +8 -5
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +4 -3
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +4 -3
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +4 -3
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +4 -3
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +4 -3
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +4 -3
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +17 -4
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +1 -2
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +1 -2
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +3 -2
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -564
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +4 -3
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +3 -5
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +3 -2
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +3 -5
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +4 -3
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +1 -2
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +1 -2
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +1 -2
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +1 -2
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +1 -2
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +4 -3
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +4 -3
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +4 -3
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +1 -2
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +4 -3
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +1 -2
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +4 -2
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +4 -3
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +4 -3
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +4 -3
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +4 -3
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +4 -3
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +4 -3
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +4 -3
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +4 -3
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +4 -3
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +4 -3
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +4 -3
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +4 -3
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +4 -3
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +4 -3
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +4 -3
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +4 -3
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +4 -3
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +4 -3
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +4 -3
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +4 -3
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +4 -3
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +4 -3
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +4 -3
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +4 -3
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +4 -3
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +4 -3
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +4 -3
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +4 -3
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +4 -3
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +4 -3
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +4 -3
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +5 -4
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +4 -3
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +4 -3
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +4 -3
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +4 -3
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +4 -3
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +4 -3
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +4 -3
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +4 -3
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +4 -3
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +4 -3
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +5 -4
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +9 -3
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +4 -3
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +601 -0
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +6 -5
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +4 -3
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +22 -21
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2475 -0
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +4 -3
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +4 -3
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +577 -561
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +4 -3
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +644 -0
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +4 -3
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +4 -3
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +4 -3
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +6 -5
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +4 -3
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +5 -4
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +5 -4
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +4 -3
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +5 -4
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +4 -3
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +4 -3
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +4 -3
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +556 -0
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +562 -0
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +6 -8
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +6 -5
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +6 -5
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +553 -0
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +558 -0
  591. 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-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml} +2 -4
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +558 -0
  593. 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} +560 -559
  594. 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} +557 -556
  595. 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} +560 -559
  596. 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} +557 -556
  597. 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} +517 -518
  598. 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} +569 -569
  599. 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} +518 -519
  600. 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} +2 -4
  601. 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} +547 -546
  602. 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} +547 -546
  603. 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} +2 -7
  604. 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-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml} +2 -4
  605. 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} +2 -4
  606. 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} +508 -509
  607. 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} +553 -552
  608. 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} +511 -512
  609. 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} +547 -546
  610. 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} +560 -559
  611. 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} +560 -559
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +548 -0
  613. 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} +558 -557
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +555 -0
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +560 -0
  616. 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} +562 -562
  617. 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} +559 -559
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +547 -0
  619. 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} +2 -4
  620. 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} +2 -4
  621. 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-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml} +2 -4
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +557 -0
  623. 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} +507 -508
  624. 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} +511 -512
  625. 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} +511 -512
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +560 -559
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +1 -2
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +1 -2
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +4 -4
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +1 -2
  631. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +1 -2
  632. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +1 -2
  633. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +1 -2
  634. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +3 -5
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +3 -2
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +3 -2
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +7 -12
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +2 -3
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +5 -7
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +5 -7
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +5 -4
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +5 -4
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +5 -7
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +4 -3
  645. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +1 -2
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +4 -2
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +11 -1
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -4
  649. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +512 -513
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +512 -563
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +512 -513
  652. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -547
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +4 -3
  654. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +3 -2
  655. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +4 -3
  656. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +4 -3
  657. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +548 -550
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +4 -3
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +3 -2
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +3 -2
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +3 -2
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +4 -5
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +557 -0
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +563 -0
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -562
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/slab-zero-exposed-perimeter.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +568 -561
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +566 -559
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +567 -0
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +567 -0
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml} +571 -564
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +572 -0
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +572 -0
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-install-quality-all-furnace-gas-only.xml} +552 -549
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +566 -0
  675. 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} +552 -548
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +565 -558
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +569 -0
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +566 -0
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +570 -0
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +3 -5
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +1 -5
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +3 -5
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +5 -7
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +6 -8
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +3 -7
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +920 -913
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +0 -1
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +512 -563
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +7 -6
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +4 -3
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +1 -2
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +1 -2
  693. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +4 -3
  694. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +512 -513
  695. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +512 -513
  696. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +4 -3
  697. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +4 -3
  698. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +512 -513
  699. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +4 -3
  700. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +4 -3
  701. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +4 -3
  702. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +4 -3
  703. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +37 -25
  704. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +4 -3
  705. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +37 -25
  706. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +563 -0
  707. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +517 -0
  708. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +4 -3
  709. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +517 -0
  710. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +577 -0
  711. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +4 -3
  712. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +4 -3
  713. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +2 -3
  714. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +11 -1
  715. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +4 -3
  716. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +4 -3
  717. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +4 -3
  718. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +4 -3
  719. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +4 -3
  720. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +4 -3
  721. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +4 -3
  722. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +32 -29
  723. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +4 -3
  724. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +4 -3
  725. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +4 -2
  726. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +5 -4
  727. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +8 -3
  728. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +12 -3
  729. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +4 -3
  730. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +4 -3
  731. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +564 -0
  732. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +8 -3
  733. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1657 -0
  734. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +4 -3
  735. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +564 -0
  736. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +4 -3
  737. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +4 -3
  738. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +4 -3
  739. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +4 -3
  740. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +4 -3
  741. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +4 -3
  742. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +4 -3
  743. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +4 -3
  744. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
  745. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +1 -2
  746. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +4 -3
  747. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +4 -3
  748. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +4 -3
  749. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → invalid_files/dehumidifier-fraction-served.xml} +534 -523
  750. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +535 -0
  751. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +1 -2
  752. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +4 -3
  753. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +4 -3
  754. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +4 -3
  755. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +563 -0
  756. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +563 -0
  757. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +4 -3
  758. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +4 -3
  759. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +4 -3
  760. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +4 -3
  761. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +5 -4
  762. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +5 -4
  763. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +7 -6
  764. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +448 -0
  765. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +4 -3
  766. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +4 -3
  767. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +4 -3
  768. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +4 -3
  769. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +4 -3
  770. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +14 -60
  771. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +760 -0
  772. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +759 -0
  773. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +761 -0
  774. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +759 -0
  775. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +563 -0
  776. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +460 -0
  777. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +579 -0
  778. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +3 -5
  779. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +920 -913
  780. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +920 -913
  781. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +3 -7
  782. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +3 -4
  783. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +3 -4
  784. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +920 -913
  785. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +4 -3
  786. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +4 -3
  787. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +407 -0
  788. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +563 -0
  789. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +4 -3
  790. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +4 -3
  791. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +4 -3
  792. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +4 -3
  793. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +5 -4
  794. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +4 -3
  795. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +4 -3
  796. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +4 -3
  797. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +574 -0
  798. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +591 -0
  799. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +591 -0
  800. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +563 -0
  801. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +4 -3
  802. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +4 -3
  803. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +465 -0
  804. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +563 -0
  805. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +451 -0
  806. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +3 -5
  807. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +1 -2
  808. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +4 -3
  809. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +4 -3
  810. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +473 -0
  811. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +4 -3
  812. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +9 -3
  813. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +4 -3
  814. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +916 -909
  815. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +4 -3
  816. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +4 -3
  817. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +4 -3
  818. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +15 -4
  819. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +4 -3
  820. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1657 -0
  821. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1657 -0
  822. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ideal-air.xml → invalid_files/multiple-shared-cooling-systems.xml} +431 -498
  823. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
  824. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +5 -4
  825. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +4 -3
  826. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +4 -3
  827. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +3 -2
  828. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +4 -3
  829. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +4 -3
  830. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +4 -3
  831. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +3 -5
  832. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +1 -2
  833. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +571 -0
  834. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +1 -2
  835. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +3 -5
  836. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +1 -2
  837. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +4 -3
  838. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +4 -3
  839. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +4 -3
  840. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +4 -3
  841. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +4 -3
  842. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +6 -5
  843. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +4 -3
  844. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +4 -3
  845. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +4 -3
  846. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +4 -3
  847. data/example_files/resources/hpxml-measures/workflow/template.osw +5 -1
  848. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +0 -3
  849. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +0 -3
  850. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +0 -3
  851. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +0 -3
  852. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +0 -3
  853. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +0 -3
  854. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +0 -3
  855. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +0 -3
  856. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +0 -3
  857. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +0 -3
  858. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +0 -3
  859. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +0 -3
  860. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +0 -3
  861. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +0 -3
  862. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +0 -3
  863. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +0 -3
  864. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +0 -3
  865. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +0 -3
  866. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +0 -3
  867. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +0 -3
  868. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +0 -3
  869. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +0 -3
  870. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +0 -3
  871. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +0 -3
  872. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +0 -3
  873. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +0 -3
  874. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +294 -0
  875. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +27 -0
  876. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +294 -0
  877. data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +130 -0
  878. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +324 -382
  879. data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
  880. data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
  881. data/example_files/visualization/input_visualization_feature.html +13 -14
  882. data/example_files/visualization/input_visualization_scenario.html +14 -9
  883. data/lib/uo_cli.rb +293 -60
  884. data/lib/uo_cli/version.rb +17 -7
  885. data/requirements.txt +2 -0
  886. data/scripts/setup-env-gitbash.sh +4 -4
  887. data/scripts/setup-env-unix.sh +4 -4
  888. data/scripts/setup-env.bat +3 -3
  889. data/scripts/setup-env.ps1 +3 -3
  890. data/uo_cli.gemspec +10 -7
  891. metadata +320 -82
  892. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
  893. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
  894. data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
  895. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
  896. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
  897. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
  898. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
  899. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
  900. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
  901. data/example_files/resources/hpxml-measures/.circleci/config.yml +0 -20
  902. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
  903. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -74
  904. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +0 -369
  905. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +0 -109
  906. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -835
  907. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +0 -563
@@ -21,7 +21,8 @@
21
21
  "add_blended_rates_to_urdb_rate": false,
22
22
  "net_metering_limit_kw": 0,
23
23
  "interconnection_limit_kw": 100000000.0,
24
- "urdb_label": "5e162e2a5457a3d50873e3af"
24
+ "blended_monthly_demand_charges_us_dollars_per_kw": [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
25
+ "blended_monthly_rates_us_dollars_per_kwh": [0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13]
25
26
  },
26
27
  "Wind": {
27
28
  "min_kw": 0,
@@ -50,7 +51,6 @@
50
51
  "pv_name": "Roof - South Face",
51
52
  "location":"roof",
52
53
  "existing_kw": 0,
53
- "existing_kw": 0,
54
54
  "min_kw": 0,
55
55
  "max_kw": 1000000000.0,
56
56
  "installed_cost_us_dollars_per_kw": 1600,
@@ -21,7 +21,8 @@
21
21
  "add_blended_rates_to_urdb_rate": false,
22
22
  "net_metering_limit_kw": 0,
23
23
  "interconnection_limit_kw": 100000000.0,
24
- "urdb_label": "5e162e2a5457a3d50873e3af"
24
+ "blended_monthly_demand_charges_us_dollars_per_kw": [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
25
+ "blended_monthly_rates_us_dollars_per_kwh": [0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13]
25
26
  },
26
27
  "Wind": {
27
28
  "min_kw": 0,
@@ -50,7 +51,7 @@
50
51
  "pv_name": "Roof - South Face",
51
52
  "location":"roof",
52
53
  "existing_kw": 0,
53
- "min_kw": 1.6,
54
+ "min_kw": 0,
54
55
  "max_kw": 1000000000.0,
55
56
  "installed_cost_us_dollars_per_kw": 1600,
56
57
  "om_cost_us_dollars_per_kw": 16,
@@ -85,7 +86,7 @@
85
86
  {
86
87
  "pv_name": "Groundmount",
87
88
  "location":"ground",
88
- "existing_kw": 5,
89
+ "existing_kw": 0,
89
90
  "min_kw": 0,
90
91
  "max_kw": 1000000000.0,
91
92
  "installed_cost_us_dollars_per_kw": 2200,
@@ -1,7 +1,7 @@
1
- Dependency=Template Month Dependency=Template Year Dependency=clothes_dryer_fuel_type clothes_dryer_efficiency_cef clothes_dryer_control_type Source
2
- lb/kWh type
3
- Sep 2020 electricity 3.93 timer "ResStock ""Electric, Premium, EnergyStar 100% Usage"""
4
- Sep 2020 natural gas 3.03 timer "ResStock ""Gas, Premium, 100% Usage"""
5
- Sep 2020 fuel oil 3.03 timer Engineering judgment
6
- Sep 2020 propane 3.03 timer Engineering judgment
7
- Sep 2020 wood 3.03 timer Engineering judgment
1
+ Dependency=Template Month Dependency=Template Year Dependency=clothes_dryer_fuel_type clothes_dryer_efficiency Source
2
+ lb/kWh
3
+ Sep 2020 electricity 3.93 "ResStock ""Electric, Premium, EnergyStar 100% Usage"""
4
+ Sep 2020 natural gas 3.03 "ResStock ""Gas, Premium, 100% Usage"""
5
+ Sep 2020 fuel oil 3.03 Engineering judgment
6
+ Sep 2020 propane 3.03 Engineering judgment
7
+ Sep 2020 wood 3.03 Engineering judgment
@@ -1,3 +1,3 @@
1
- Dependency=Template Month Dependency=Template Year clothes_washer_efficiency_imef clothes_washer_rated_annual_kwh clothes_washer_label_electric_rate clothes_washer_label_gas_rate clothes_washer_label_annual_gas_cost clothes_washer_label_usage clothes_washer_capacity Source
1
+ Dependency=Template Month Dependency=Template Year clothes_washer_efficiency clothes_washer_rated_annual_kwh clothes_washer_label_electric_rate clothes_washer_label_gas_rate clothes_washer_label_annual_gas_cost clothes_washer_label_usage clothes_washer_capacity Source
2
2
  ft^2/kWh-cyc kWh/yr $/kWh $/therm $ cyc/wk ft^3
3
3
  Sep 2020 2.92 75 0.12 1.09 7 6 4.5 "ResStock ""EnergyStar Most Efficient, 100% Usage"""
@@ -1,22 +1,42 @@
1
- Dependency=Climate Zone Dependency=Template Month Dependency=Template Year Dependency=cooling_system_type cooling_system_cooling_efficiency_seer Source
2
- SEER
3
- 1A Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
4
- 1B Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
5
- 1C Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
6
- 2A Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
7
- 2B Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
8
- 2C Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
9
- 3A Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
10
- 3B Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
11
- 3C Sep 2020 central air conditioner 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
12
- 4A Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
13
- 4B Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
14
- 4C Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
15
- 5A Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
16
- 5B Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
17
- 5C Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
18
- 6A Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
19
- 6B Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
20
- 6C Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
21
- 7 Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
22
- 8 Sep 2020 central air conditioner 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
1
+ Dependency=Climate Zone Dependency=Template Month Dependency=Template Year Dependency=cooling_system_type cooling_system_cooling_efficiency_type cooling_system_cooling_efficiency Source
2
+
3
+ 1A Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
4
+ 1B Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
5
+ 1C Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
6
+ 2A Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
7
+ 2B Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
8
+ 2C Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
9
+ 3A Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
10
+ 3B Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
11
+ 3C Sep 2020 central air conditioner SEER 15 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
12
+ 4A Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
13
+ 4B Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
14
+ 4C Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
15
+ 5A Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
16
+ 5B Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
17
+ 5C Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
18
+ 6A Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
19
+ 6B Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
20
+ 6C Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
21
+ 7 Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
22
+ 8 Sep 2020 central air conditioner SEER 13 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
23
+ 1A Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
24
+ 1B Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
25
+ 1C Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
26
+ 2A Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
27
+ 2B Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
28
+ 2C Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
29
+ 3A Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
30
+ 3B Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
31
+ 3C Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
32
+ 4A Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
33
+ 4B Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
34
+ 4C Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
35
+ 5A Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
36
+ 5B Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
37
+ 5C Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
38
+ 6A Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
39
+ 6B Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
40
+ 6C Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
41
+ 7 Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
42
+ 8 Sep 2020 room air conditioner EER 8.5 "ResStock ""Room AC, EER 8.5"""
@@ -1,3 +1,3 @@
1
- Dependency=Template Month Dependency=Template Year dishwasher_efficiency_kwh dishwasher_label_electric_rate dishwasher_label_gas_rate dishwasher_label_annual_gas_cost dishwasher_label_usage dishwasher_place_setting_capacity Source
1
+ Dependency=Template Month Dependency=Template Year dishwasher_efficiency dishwasher_label_electric_rate dishwasher_label_gas_rate dishwasher_label_annual_gas_cost dishwasher_label_usage dishwasher_place_setting_capacity Source
2
2
  kWh/yr $/kWh $/therm $ cyc/wk #
3
3
  Sep 2020 199 0.12 1.09 18 4 12 "ResStock ""199 Rated kWh, 100% Usage"""
@@ -0,0 +1,3 @@
1
+ Dependency=Template Month Dependency=Template Year kitchen_fans_quantity bathroom_fans_quantity
2
+
3
+ Sep 2020 auto auto
@@ -1,40 +1,62 @@
1
- Dependency=Climate Zone Dependency=Template Month Dependency=Template Year Dependency=heat_pump_type heat_pump_heating_efficiency_hspf heat_pump_heating_efficiency_cop heat_pump_cooling_efficiency_seer heat_pump_cooling_efficiency_eer heat_pump_backup_fuel Source
2
- HSPF COP SEER EER type
3
- 1A Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
4
- 1B Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
5
- 1C Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
6
- 2A Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
7
- 2B Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
8
- 2C Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
9
- 3A Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
10
- 3B Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
11
- 3C Sep 2020 air-to-air 8.2 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
12
- 4A Sep 2020 air-to-air 8.5 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
13
- 4B Sep 2020 air-to-air 8.5 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
14
- 4C Sep 2020 air-to-air 9.25 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
15
- 5A Sep 2020 air-to-air 9.25 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
16
- 5B Sep 2020 air-to-air 9.25 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
17
- 5C Sep 2020 air-to-air 9.25 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
18
- 6A Sep 2020 air-to-air 9.5 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
19
- 6B Sep 2020 air-to-air 9.5 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
20
- 6C Sep 2020 air-to-air 9.5 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
21
- 1A Sep 2020 mini-split 10 19 electricity Engineering judgment
22
- 1B Sep 2020 mini-split 10 19 electricity Engineering judgment
23
- 1C Sep 2020 mini-split 10 19 electricity Engineering judgment
24
- 2A Sep 2020 mini-split 10 19 electricity Engineering judgment
25
- 2B Sep 2020 mini-split 10 19 electricity Engineering judgment
26
- 2C Sep 2020 mini-split 10 19 electricity Engineering judgment
27
- 3A Sep 2020 mini-split 10 19 electricity Engineering judgment
28
- 3B Sep 2020 mini-split 10 19 electricity Engineering judgment
29
- 3C Sep 2020 mini-split 10 19 electricity Engineering judgment
30
- 4A Sep 2020 mini-split 10 19 electricity Engineering judgment
31
- 4B Sep 2020 mini-split 10 19 electricity Engineering judgment
32
- 4C Sep 2020 mini-split 10 19 electricity Engineering judgment
33
- 5A Sep 2020 mini-split 10 19 electricity Engineering judgment
34
- 5B Sep 2020 mini-split 10 19 electricity Engineering judgment
35
- 5C Sep 2020 mini-split 10 19 electricity Engineering judgment
36
- 6A Sep 2020 mini-split 10 19 electricity Engineering judgment
37
- 6B Sep 2020 mini-split 10 19 electricity Engineering judgment
38
- 6C Sep 2020 mini-split 10 19 electricity Engineering judgment
39
- 7 Sep 2020 ground-to-air 3.6 17.1 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
40
- 8 Sep 2020 ground-to-air 3.6 17.1 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
1
+ Dependency=Climate Zone Dependency=Template Month Dependency=Template Year Dependency=heat_pump_type heat_pump_heating_efficiency_type heat_pump_heating_efficiency heat_pump_cooling_efficiency_type heat_pump_cooling_efficiency heat_pump_backup_fuel Source
2
+ type
3
+ 1A Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
4
+ 1B Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
5
+ 1C Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
6
+ 2A Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
7
+ 2B Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
8
+ 2C Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
9
+ 3A Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
10
+ 3B Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
11
+ 3C Sep 2020 air-to-air HSPF 8.2 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
12
+ 4A Sep 2020 air-to-air HSPF 8.5 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
13
+ 4B Sep 2020 air-to-air HSPF 8.5 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
14
+ 4C Sep 2020 air-to-air HSPF 9.25 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
15
+ 5A Sep 2020 air-to-air HSPF 9.25 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
16
+ 5B Sep 2020 air-to-air HSPF 9.25 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
17
+ 5C Sep 2020 air-to-air HSPF 9.25 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
18
+ 6A Sep 2020 air-to-air HSPF 9.5 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
19
+ 6B Sep 2020 air-to-air HSPF 9.5 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
20
+ 6C Sep 2020 air-to-air HSPF 9.5 SEER 15 electricity "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
21
+ 7 Sep 2020 air-to-air HSPF 9.5 SEER 15 electricity Engineering judgment
22
+ 8 Sep 2020 air-to-air HSPF 9.5 SEER 15 electricity Engineering judgment
23
+ 1A Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
24
+ 1B Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
25
+ 1C Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
26
+ 2A Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
27
+ 2B Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
28
+ 2C Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
29
+ 3A Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
30
+ 3B Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
31
+ 3C Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
32
+ 4A Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
33
+ 4B Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
34
+ 4C Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
35
+ 5A Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
36
+ 5B Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
37
+ 5C Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
38
+ 6A Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
39
+ 6B Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
40
+ 6C Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
41
+ 7 Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
42
+ 8 Sep 2020 mini-split HSPF 10 SEER 19 electricity Engineering judgment
43
+ 1A Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
44
+ 1B Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
45
+ 1C Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
46
+ 2A Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
47
+ 2B Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
48
+ 2C Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
49
+ 3A Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
50
+ 3B Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
51
+ 3C Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
52
+ 4A Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
53
+ 4B Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
54
+ 4C Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
55
+ 5A Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
56
+ 5B Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
57
+ 5C Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
58
+ 6A Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
59
+ 6B Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
60
+ 6C Sep 2020 ground-to-air COP 3.6 EER 17.1 Engineering judgment
61
+ 7 Sep 2020 ground-to-air COP 3.6 EER 17.1 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
62
+ 8 Sep 2020 ground-to-air COP 3.6 EER 17.1 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
@@ -9,5 +9,6 @@ Not all may apply:
9
9
  - [ ] EPvalidator.xml has been updated
10
10
  - [ ] Tests (and test files) have been updated
11
11
  - [ ] Documentation has been updated
12
+ - [ ] Changelog has been updated
12
13
  - [ ] `openstudio tasks.rb update_measures` has been run
13
- - [ ] No unexpected regression test changes on CI
14
+ - [ ] No unexpected regression test changes on CI (checked comparison artifacts)
@@ -0,0 +1,116 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ types: [ synchronize, opened, ready_for_review ]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ container:
14
+ image: docker://nrel/openstudio:develop
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+
18
+ - name: Install gems
19
+ run: |
20
+ rm -f Gemfile.lock && bundle install
21
+
22
+ - name: Run tests
23
+ run: |
24
+ bundle exec rake test_all
25
+
26
+ - name: Store results
27
+ uses: actions/upload-artifact@v2
28
+ with:
29
+ path: workflow/tests/results
30
+ name: results
31
+
32
+ compare-results:
33
+ if: github.event_name == 'pull_request'
34
+ runs-on: ubuntu-latest
35
+ needs: build
36
+ steps:
37
+ - uses: actions/checkout@v2
38
+ with:
39
+ ref: ${{ github.event.pull_request.base.sha }}
40
+
41
+ - name: Store base results
42
+ uses: actions/upload-artifact@v2
43
+ with:
44
+ path: workflow/tests/base_results
45
+ name: base_results
46
+
47
+ - uses: actions/checkout@v2
48
+ with:
49
+ ref: ${{ github.event.pull_request.head.sha }}
50
+
51
+ - name: Download base results
52
+ uses: actions/download-artifact@v2
53
+ with:
54
+ path: |
55
+ base_results
56
+ name: base_results
57
+
58
+ - name: Download feature results
59
+ uses: actions/download-artifact@v2
60
+ with:
61
+ path: |
62
+ results
63
+ name: results
64
+
65
+ - name: Compare results
66
+ run: |
67
+ cp -r base_results/results*.csv workflow/tests/base_results
68
+ mkdir workflow/tests/results
69
+ cp -r results/results* workflow/tests/results
70
+ ruby workflow/tests/compare.rb
71
+
72
+ - name: Store comparisons
73
+ uses: actions/upload-artifact@v2
74
+ with:
75
+ path: workflow/tests/comparisons
76
+ name: comparisons
77
+
78
+ update-results:
79
+ if: github.event.pull_request.draft != true
80
+ runs-on: ubuntu-latest
81
+ needs: compare-results
82
+ steps:
83
+ - uses: actions/checkout@v2
84
+ with:
85
+ ref: ${{ github.event.pull_request.head.sha }}
86
+
87
+ - name: Setup git branch
88
+ shell: bash
89
+ run: |
90
+ branch_name="${{ github.head_ref }}"
91
+ branch_sha="${{ github.event.pull_request.head.sha }}"
92
+ echo "Checking out branch: $branch_name, $branch_sha"
93
+ git checkout -b $branch_name || git checkout $branch_name
94
+
95
+ - name: Download feature results
96
+ uses: actions/download-artifact@v2
97
+ with:
98
+ path: |
99
+ results
100
+ name: results
101
+
102
+ - name: Commit latest results
103
+ shell: bash
104
+ run: |
105
+ git status
106
+ cp -r results/results* workflow/tests/base_results
107
+ git add workflow/tests/base_results
108
+ git status
109
+ if [[ $(git diff --cached --exit-code) ]]; then
110
+ git config --global user.email "github-action@users.noreply.github.com"
111
+ git config --global user.name "GitHub Action"
112
+ git commit -m "Latest results."
113
+ branch_name="${{ github.head_ref }}"
114
+ echo "Pushing to branch: $branch_name"
115
+ git push -u origin $branch_name
116
+ fi
@@ -241,8 +241,6 @@
241
241
  /weather/USA_AZ_Page.Muni.AWOS.723710_TMY3.epw
242
242
  /weather/USA_AZ_Phoenix-Deer.Valley.AP.722784_TMY3-cache.csv
243
243
  /weather/USA_AZ_Phoenix-Deer.Valley.AP.722784_TMY3.epw
244
- /weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv
245
- /weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw
246
244
  /weather/USA_AZ_Prescott-Love.Field.723723_TMY3-cache.csv
247
245
  /weather/USA_AZ_Prescott-Love.Field.723723_TMY3.epw
248
246
  /weather/USA_AZ_Safford.AWOS.722747_TMY3-cache.csv
@@ -593,8 +591,6 @@
593
591
  /weather/USA_HI_Barbers.Point.NAS.911780_TMY3.epw
594
592
  /weather/USA_HI_Hilo.Intl.AP.912850_TMY3-cache.csv
595
593
  /weather/USA_HI_Hilo.Intl.AP.912850_TMY3.epw
596
- /weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv
597
- /weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw
598
594
  /weather/USA_HI_Kahului.AP.911900_TMY3-cache.csv
599
595
  /weather/USA_HI_Kahului.AP.911900_TMY3.epw
600
596
  /weather/USA_HI_Kailua-Kaneohe.Bay.MCAS.911760_TMY3-cache.csv
@@ -1189,8 +1185,6 @@
1189
1185
  /weather/USA_MT_Great.Falls.Intl.AP.727750_TMY3.epw
1190
1186
  /weather/USA_MT_Havre.City-County.AP.727770_TMY3-cache.csv
1191
1187
  /weather/USA_MT_Havre.City-County.AP.727770_TMY3.epw
1192
- /weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv
1193
- /weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw
1194
1188
  /weather/USA_MT_Kalispell-Glacier.Park.Intl.AP.727790_TMY3-cache.csv
1195
1189
  /weather/USA_MT_Kalispell-Glacier.Park.Intl.AP.727790_TMY3.epw
1196
1190
  /weather/USA_MT_Lewistown.Muni.AP.726776_TMY3-cache.csv
@@ -1539,8 +1533,6 @@
1539
1533
  /weather/USA_OR_Portland-Hillsboro.AP.726986_TMY3.epw
1540
1534
  /weather/USA_OR_Portland-Troutdale.AP.726985_TMY3-cache.csv
1541
1535
  /weather/USA_OR_Portland-Troutdale.AP.726985_TMY3.epw
1542
- /weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv
1543
- /weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw
1544
1536
  /weather/USA_OR_Redmond-Roberts.Field.726835_TMY3-cache.csv
1545
1537
  /weather/USA_OR_Redmond-Roberts.Field.726835_TMY3.epw
1546
1538
  /weather/USA_OR_Roseburg.Rgnl.AP.726904_TMY3-cache.csv
@@ -2020,6 +2012,7 @@
2020
2012
  /workflow/out.osw
2021
2013
  /workflow/tests/results
2022
2014
  /workflow/tests/run
2015
+ /workflow/tests/test*
2023
2016
  /workflow/sample_files/results
2024
2017
  /workflow/sample_files/run
2025
2018
  /workflow/sample_files/invalid_files/results
@@ -9,7 +9,6 @@ require 'csv'
9
9
 
10
10
  require_relative 'resources/constants'
11
11
  require_relative 'resources/geometry'
12
- require_relative 'resources/location'
13
12
  require_relative 'resources/schedules'
14
13
 
15
14
  require_relative '../HPXMLtoOpenStudio/resources/constants'
@@ -18,7 +17,9 @@ require_relative '../HPXMLtoOpenStudio/resources/geometry'
18
17
  require_relative '../HPXMLtoOpenStudio/resources/hpxml'
19
18
  require_relative '../HPXMLtoOpenStudio/resources/hvac'
20
19
  require_relative '../HPXMLtoOpenStudio/resources/lighting'
20
+ require_relative '../HPXMLtoOpenStudio/resources/location'
21
21
  require_relative '../HPXMLtoOpenStudio/resources/materials'
22
+ require_relative '../HPXMLtoOpenStudio/resources/meta_measure'
22
23
  require_relative '../HPXMLtoOpenStudio/resources/psychrometrics'
23
24
  require_relative '../HPXMLtoOpenStudio/resources/schedules'
24
25
  require_relative '../HPXMLtoOpenStudio/resources/unit_conversions'
@@ -190,7 +191,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
190
191
  args << arg
191
192
 
192
193
  unit_type_choices = OpenStudio::StringVector.new
193
- unit_type_choices << HPXML::ResidentialTypeManufactured
194
194
  unit_type_choices << HPXML::ResidentialTypeSFD
195
195
  unit_type_choices << HPXML::ResidentialTypeSFA
196
196
  unit_type_choices << HPXML::ResidentialTypeApartment
@@ -211,7 +211,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
211
211
  arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('geometry_num_floors_above_grade', true)
212
212
  arg.setDisplayName('Geometry: Number of Floors')
213
213
  arg.setUnits('#')
214
- arg.setDescription("The number of floors above grade (in the unit if #{HPXML::ResidentialTypeSFA}, and in the building if #{HPXML::ResidentialTypeApartment}).")
214
+ arg.setDescription("The number of floors above grade (in the unit if #{HPXML::ResidentialTypeSFD} or #{HPXML::ResidentialTypeSFA}, and in the building if #{HPXML::ResidentialTypeApartment}). Conditioned attics are included.")
215
215
  arg.setDefaultValue(2)
216
216
  args << arg
217
217
 
@@ -225,7 +225,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
225
225
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_orientation', true)
226
226
  arg.setDisplayName('Geometry: Orientation')
227
227
  arg.setUnits('degrees')
228
- arg.setDescription("The house's orientation is measured clockwise from due south when viewed from above (e.g., North=0, East=90, South=180, West=270).")
228
+ arg.setDescription("The unit's orientation is measured clockwise from due south when viewed from above (e.g., North=0, East=90, South=180, West=270).")
229
229
  arg.setDefaultValue(180.0)
230
230
  args << arg
231
231
 
@@ -244,28 +244,28 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
244
244
 
245
245
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_corridor_position', corridor_position_choices, true)
246
246
  arg.setDisplayName('Geometry: Corridor Position')
247
- arg.setDescription('The position of the corridor.')
247
+ arg.setDescription("The position of the corridor. Only applies to #{HPXML::ResidentialTypeSFA} and #{HPXML::ResidentialTypeApartment} units. Exterior corridors are shaded, but not enclosed. Interior corridors are enclosed and conditioned.")
248
248
  arg.setDefaultValue('Double-Loaded Interior')
249
249
  args << arg
250
250
 
251
251
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_corridor_width', true)
252
252
  arg.setDisplayName('Geometry: Corridor Width')
253
253
  arg.setUnits('ft')
254
- arg.setDescription('The width of the corridor.')
254
+ arg.setDescription("The width of the corridor. Only applies to #{HPXML::ResidentialTypeApartment} units.")
255
255
  arg.setDefaultValue(10.0)
256
256
  args << arg
257
257
 
258
258
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_inset_width', true)
259
259
  arg.setDisplayName('Geometry: Inset Width')
260
260
  arg.setUnits('ft')
261
- arg.setDescription('The width of the inset.')
261
+ arg.setDescription("The width of the inset. Only applies to #{HPXML::ResidentialTypeApartment} units.")
262
262
  arg.setDefaultValue(0.0)
263
263
  args << arg
264
264
 
265
265
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_inset_depth', true)
266
266
  arg.setDisplayName('Geometry: Inset Depth')
267
267
  arg.setUnits('ft')
268
- arg.setDescription('The depth of the inset.')
268
+ arg.setDescription("The depth of the inset. Only applies to #{HPXML::ResidentialTypeApartment} units.")
269
269
  arg.setDefaultValue(0.0)
270
270
  args << arg
271
271
 
@@ -275,35 +275,35 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
275
275
 
276
276
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_inset_position', inset_position_choices, true)
277
277
  arg.setDisplayName('Geometry: Inset Position')
278
- arg.setDescription('The position of the inset.')
278
+ arg.setDescription("The position of the inset. Only applies to #{HPXML::ResidentialTypeApartment} units.")
279
279
  arg.setDefaultValue('Right')
280
280
  args << arg
281
281
 
282
282
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_balcony_depth', true)
283
283
  arg.setDisplayName('Geometry: Balcony Depth')
284
284
  arg.setUnits('ft')
285
- arg.setDescription('The depth of the balcony.')
285
+ arg.setDescription("The depth of the balcony. Only applies to #{HPXML::ResidentialTypeApartment} units.")
286
286
  arg.setDefaultValue(0.0)
287
287
  args << arg
288
288
 
289
289
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_garage_width', true)
290
290
  arg.setDisplayName('Geometry: Garage Width')
291
291
  arg.setUnits('ft')
292
- arg.setDescription('The width of the garage. Enter zero for no garage.')
292
+ arg.setDescription("The width of the garage. Enter zero for no garage. Only applies to #{HPXML::ResidentialTypeSFD} units.")
293
293
  arg.setDefaultValue(0.0)
294
294
  args << arg
295
295
 
296
296
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_garage_depth', true)
297
297
  arg.setDisplayName('Geometry: Garage Depth')
298
298
  arg.setUnits('ft')
299
- arg.setDescription('The depth of the garage.')
299
+ arg.setDescription("The depth of the garage. Only applies to #{HPXML::ResidentialTypeSFD} units.")
300
300
  arg.setDefaultValue(20.0)
301
301
  args << arg
302
302
 
303
303
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_garage_protrusion', true)
304
304
  arg.setDisplayName('Geometry: Garage Protrusion')
305
305
  arg.setUnits('frac')
306
- arg.setDescription('The fraction of the garage that is protruding from the living space.')
306
+ arg.setDescription("The fraction of the garage that is protruding from the living space. Only applies to #{HPXML::ResidentialTypeSFD} units.")
307
307
  arg.setDefaultValue(0.0)
308
308
  args << arg
309
309
 
@@ -313,7 +313,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
313
313
 
314
314
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_garage_position', garage_position_choices, true)
315
315
  arg.setDisplayName('Geometry: Garage Position')
316
- arg.setDescription('The position of the garage.')
316
+ arg.setDescription("The position of the garage. Only applies to #{HPXML::ResidentialTypeSFD} units.")
317
317
  arg.setDefaultValue('Right')
318
318
  args << arg
319
319
 
@@ -345,6 +345,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
345
345
  arg.setDefaultValue(0.0)
346
346
  args << arg
347
347
 
348
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_rim_joist_height', true)
349
+ arg.setDisplayName('Geometry: Rim Joist Height')
350
+ arg.setUnits('in')
351
+ arg.setDescription('The height of the rim joists. Only applies to basements/crawlspaces.')
352
+ arg.setDefaultValue(9.25)
353
+ args << arg
354
+
348
355
  roof_type_choices = OpenStudio::StringVector.new
349
356
  roof_type_choices << 'gable'
350
357
  roof_type_choices << 'hip'
@@ -352,7 +359,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
352
359
 
353
360
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_roof_type', roof_type_choices, true)
354
361
  arg.setDisplayName('Geometry: Roof Type')
355
- arg.setDescription('The roof type of the building.')
362
+ arg.setDescription("The roof type of the building. Assumed flat for #{HPXML::ResidentialTypeApartment} units.")
356
363
  arg.setDefaultValue('gable')
357
364
  args << arg
358
365
 
@@ -415,6 +422,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
415
422
  arg.setDefaultValue(Constants.Auto)
416
423
  args << arg
417
424
 
425
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('geometry_has_flue_or_chimney', true)
426
+ arg.setDisplayName('Geometry: Has Flue or Chimney')
427
+ arg.setDescription('Whether there is a flue or chimney.')
428
+ arg.setDefaultValue(Constants.Auto)
429
+ args << arg
430
+
418
431
  level_choices = OpenStudio::StringVector.new
419
432
  level_choices << 'Bottom'
420
433
  level_choices << 'Middle'
@@ -438,19 +451,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
438
451
  arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('geometry_building_num_units', false)
439
452
  arg.setDisplayName('Geometry: Building Number of Units')
440
453
  arg.setUnits('#')
441
- arg.setDescription("The number of units in the building. This is required for #{HPXML::ResidentialTypeSFA} and #{HPXML::ResidentialTypeApartment} buildings.")
454
+ arg.setDescription("The number of units in the building. This is required for #{HPXML::ResidentialTypeSFA} and #{HPXML::ResidentialTypeApartment} units.")
442
455
  args << arg
443
456
 
444
457
  arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('geometry_building_num_bedrooms', false)
445
458
  arg.setDisplayName('Geometry: Building Number of Bedrooms')
446
459
  arg.setUnits('#')
447
- arg.setDescription("The number of bedrooms in the building. This is required for #{HPXML::ResidentialTypeSFA} and #{HPXML::ResidentialTypeApartment} buildings with shared PV systems.")
460
+ arg.setDescription("The number of bedrooms in the building. This is required for #{HPXML::ResidentialTypeSFA} and #{HPXML::ResidentialTypeApartment} units with shared PV systems.")
448
461
  args << arg
449
462
 
450
463
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('floor_assembly_r', true)
451
464
  arg.setDisplayName('Floor: Assembly R-value')
452
465
  arg.setUnits('h-ft^2-R/Btu')
453
- arg.setDescription('Assembly R-value for the floor (foundation ceiling). Ignored if a slab foundation.')
466
+ arg.setDescription('Assembly R-value for the floor (foundation ceiling). Ignored if the building has a slab foundation.')
454
467
  arg.setDefaultValue(30)
455
468
  args << arg
456
469
 
@@ -468,11 +481,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
468
481
  arg.setDefaultValue(0)
469
482
  args << arg
470
483
 
471
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_distance_to_bottom', true)
484
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('foundation_wall_insulation_distance_to_bottom', true)
472
485
  arg.setDisplayName('Foundation: Wall Insulation Distance To Bottom')
473
486
  arg.setUnits('ft')
474
- arg.setDescription('The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces.')
475
- arg.setDefaultValue(0)
487
+ arg.setDescription("The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. A value of '#{Constants.Auto}' will use the same height as the foundation.")
488
+ arg.setDefaultValue(Constants.Auto)
476
489
  args << arg
477
490
 
478
491
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_assembly_r', false)
@@ -487,6 +500,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
487
500
  arg.setDefaultValue(Constants.Auto)
488
501
  args << arg
489
502
 
503
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('rim_joist_assembly_r', true)
504
+ arg.setDisplayName('Rim Joist: Assembly R-value')
505
+ arg.setUnits('h-ft^2-R/Btu')
506
+ arg.setDescription('Assembly R-value for the rim joists. Only applies to basements/crawlspaces.')
507
+ arg.setDefaultValue(23)
508
+ args << arg
509
+
490
510
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_perimeter_insulation_r', true)
491
511
  arg.setDisplayName('Slab: Perimeter Insulation Nominal R-value')
492
512
  arg.setUnits('h-ft^2-R/Btu')
@@ -556,7 +576,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
556
576
  args << arg
557
577
 
558
578
  color_choices = OpenStudio::StringVector.new
559
- color_choices << Constants.Auto
560
579
  color_choices << HPXML::ColorDark
561
580
  color_choices << HPXML::ColorLight
562
581
  color_choices << HPXML::ColorMedium
@@ -566,7 +585,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
566
585
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_color', color_choices, true)
567
586
  arg.setDisplayName('Roof: Color')
568
587
  arg.setDescription('The color of the roof.')
569
- arg.setDefaultValue(Constants.Auto)
588
+ arg.setDefaultValue(HPXML::ColorMedium)
570
589
  args << arg
571
590
 
572
591
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('roof_assembly_r', true)
@@ -576,22 +595,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
576
595
  arg.setDefaultValue(2.3)
577
596
  args << arg
578
597
 
579
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('roof_solar_absorptance', true)
580
- arg.setDisplayName('Roof: Solar Absorptance')
581
- arg.setDescription('The solar absorptance of the roof.')
582
- arg.setDefaultValue(Constants.Auto)
583
- args << arg
584
-
585
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('roof_emittance', true)
586
- arg.setDisplayName('Roof: Emittance')
587
- arg.setDescription('The emittance of the roof.')
588
- arg.setDefaultValue(Constants.Auto)
589
- args << arg
590
-
591
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('roof_radiant_barrier', true)
598
+ arg = OpenStudio::Measure::OSArgument::makeBoolArgument('roof_radiant_barrier', true)
592
599
  arg.setDisplayName('Roof: Has Radiant Barrier')
593
600
  arg.setDescription('Specifies whether the attic has a radiant barrier.')
594
- arg.setDefaultValue(Constants.Auto)
601
+ arg.setDefaultValue(false)
595
602
  args << arg
596
603
 
597
604
  roof_radiant_barrier_grade_choices = OpenStudio::StringVector.new
@@ -608,28 +615,28 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
608
615
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_front_distance', true)
609
616
  arg.setDisplayName('Neighbor: Front Distance')
610
617
  arg.setUnits('ft')
611
- arg.setDescription('The minimum distance between the simulated house and the neighboring house to the front (not including eaves). A value of zero indicates no neighbors.')
618
+ arg.setDescription('The minimum distance between the simulated unit and the neighboring building to the front (not including eaves). A value of zero indicates no neighbors.')
612
619
  arg.setDefaultValue(0.0)
613
620
  args << arg
614
621
 
615
622
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_back_distance', true)
616
623
  arg.setDisplayName('Neighbor: Back Distance')
617
624
  arg.setUnits('ft')
618
- arg.setDescription('The minimum distance between the simulated house and the neighboring house to the back (not including eaves). A value of zero indicates no neighbors.')
625
+ arg.setDescription('The minimum distance between the simulated unit and the neighboring building to the back (not including eaves). A value of zero indicates no neighbors.')
619
626
  arg.setDefaultValue(0.0)
620
627
  args << arg
621
628
 
622
629
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_left_distance', true)
623
630
  arg.setDisplayName('Neighbor: Left Distance')
624
631
  arg.setUnits('ft')
625
- arg.setDescription('The minimum distance between the simulated house and the neighboring house to the left (not including eaves). A value of zero indicates no neighbors.')
632
+ arg.setDescription('The minimum distance between the simulated unit and the neighboring building to the left (not including eaves). A value of zero indicates no neighbors.')
626
633
  arg.setDefaultValue(10.0)
627
634
  args << arg
628
635
 
629
636
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_right_distance', true)
630
637
  arg.setDisplayName('Neighbor: Right Distance')
631
638
  arg.setUnits('ft')
632
- arg.setDescription('The minimum distance between the simulated house and the neighboring house to the right (not including eaves). A value of zero indicates no neighbors.')
639
+ arg.setDescription('The minimum distance between the simulated unit and the neighboring building to the right (not including eaves). A value of zero indicates no neighbors.')
633
640
  arg.setDefaultValue(10.0)
634
641
  args << arg
635
642
 
@@ -690,13 +697,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
690
697
 
691
698
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_siding_type', wall_siding_type_choices, false)
692
699
  arg.setDisplayName('Wall: Siding Type')
693
- arg.setDescription('The siding type of the exterior walls.')
700
+ arg.setDescription('The siding type of the exterior walls. Also applies to rim joists.')
694
701
  args << arg
695
702
 
696
703
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_color', color_choices, true)
697
704
  arg.setDisplayName('Wall: Color')
698
- arg.setDescription('The color of the exterior walls.')
699
- arg.setDefaultValue(Constants.Auto)
705
+ arg.setDescription('The color of the exterior walls. Also applies to rim joists.')
706
+ arg.setDefaultValue(HPXML::ColorMedium)
700
707
  args << arg
701
708
 
702
709
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('wall_assembly_r', true)
@@ -706,63 +713,51 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
706
713
  arg.setDefaultValue(13)
707
714
  args << arg
708
715
 
709
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('wall_solar_absorptance', true)
710
- arg.setDisplayName('Wall: Solar Absorptance')
711
- arg.setDescription('The solar absorptance of the exterior walls.')
712
- arg.setDefaultValue(Constants.Auto)
713
- args << arg
714
-
715
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('wall_emittance', true)
716
- arg.setDisplayName('Wall: Emittance')
717
- arg.setDescription('The emittance of the exterior walls.')
718
- arg.setDefaultValue(Constants.Auto)
719
- args << arg
720
-
721
716
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_front_wwr', true)
722
717
  arg.setDisplayName('Windows: Front Window-to-Wall Ratio')
723
- arg.setDescription("The ratio of window area to wall area for the building's front facade. Enter 0 if specifying Front Window Area instead.")
718
+ arg.setDescription("The ratio of window area to wall area for the unit's front facade. Enter 0 if specifying Front Window Area instead.")
724
719
  arg.setDefaultValue(0.18)
725
720
  args << arg
726
721
 
727
722
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_back_wwr', true)
728
723
  arg.setDisplayName('Windows: Back Window-to-Wall Ratio')
729
- arg.setDescription("The ratio of window area to wall area for the building's back facade. Enter 0 if specifying Back Window Area instead.")
724
+ arg.setDescription("The ratio of window area to wall area for the unit's back facade. Enter 0 if specifying Back Window Area instead.")
730
725
  arg.setDefaultValue(0.18)
731
726
  args << arg
732
727
 
733
728
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_left_wwr', true)
734
729
  arg.setDisplayName('Windows: Left Window-to-Wall Ratio')
735
- arg.setDescription("The ratio of window area to wall area for the building's left facade. Enter 0 if specifying Left Window Area instead.")
730
+ arg.setDescription("The ratio of window area to wall area for the unit's left facade (when viewed from the front). Enter 0 if specifying Left Window Area instead.")
736
731
  arg.setDefaultValue(0.18)
737
732
  args << arg
738
733
 
739
734
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_right_wwr', true)
740
735
  arg.setDisplayName('Windows: Right Window-to-Wall Ratio')
741
- arg.setDescription("The ratio of window area to wall area for the building's right facade. Enter 0 if specifying Right Window Area instead.")
736
+ arg.setDescription("The ratio of window area to wall area for the unit's right facade (when viewed from the front). Enter 0 if specifying Right Window Area instead.")
742
737
  arg.setDefaultValue(0.18)
743
738
  args << arg
744
739
 
745
740
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_area_front', true)
746
741
  arg.setDisplayName('Windows: Front Window Area')
747
- arg.setDescription("The amount of window area on the building's front facade. Enter 0 if specifying Front Window-to-Wall Ratio instead.")
742
+ arg.setDescription("The amount of window area on the unit's front facade. Enter 0 if specifying Front Window-to-Wall Ratio instead.")
748
743
  arg.setDefaultValue(0)
749
744
  args << arg
750
745
 
751
746
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_area_back', true)
752
747
  arg.setDisplayName('Windows: Back Window Area')
753
- arg.setDescription("The amount of window area on the building's back facade. Enter 0 if specifying Back Window-to-Wall Ratio instead.")
748
+ arg.setDescription("The amount of window area on the unit's back facade. Enter 0 if specifying Back Window-to-Wall Ratio instead.")
754
749
  arg.setDefaultValue(0)
755
750
  args << arg
756
751
 
757
752
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_area_left', true)
758
753
  arg.setDisplayName('Windows: Left Window Area')
759
- arg.setDescription("The amount of window area on the building's left facade. Enter 0 if specifying Left Window-to-Wall Ratio instead.")
754
+ arg.setDescription("The amount of window area on the unit's left facade (when viewed from the front). Enter 0 if specifying Left Window-to-Wall Ratio instead.")
760
755
  arg.setDefaultValue(0)
761
756
  args << arg
762
757
 
763
758
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_area_right', true)
764
759
  arg.setDisplayName('Windows: Right Window Area')
765
- arg.setDescription("The amount of window area on the building's right facade. Enter 0 if specifying Right Window-to-Wall Ratio instead.")
760
+ arg.setDescription("The amount of window area on the unit's right facade (when viewed from the front). Enter 0 if specifying Right Window-to-Wall Ratio instead.")
766
761
  arg.setDefaultValue(0)
767
762
  args << arg
768
763
 
@@ -800,6 +795,16 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
800
795
  arg.setDescription('Interior shading multiplier for the cooling season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
801
796
  args << arg
802
797
 
798
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_exterior_shading_winter', false)
799
+ arg.setDisplayName('Windows: Winter Exterior Shading')
800
+ arg.setDescription('Exterior shading multiplier for the heating season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
801
+ args << arg
802
+
803
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_exterior_shading_summer', false)
804
+ arg.setDisplayName('Windows: Summer Exterior Shading')
805
+ arg.setDescription('Exterior shading multiplier for the cooling season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
806
+ args << arg
807
+
803
808
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('overhangs_front_depth', true)
804
809
  arg.setDisplayName('Overhangs: Front Facade Depth')
805
810
  arg.setDescription('Specifies the depth of overhangs for windows on the front facade.')
@@ -850,25 +855,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
850
855
 
851
856
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('skylight_area_front', true)
852
857
  arg.setDisplayName('Skylights: Front Roof Area')
853
- arg.setDescription("The amount of skylight area on the building's front conditioned roof facade.")
858
+ arg.setDescription("The amount of skylight area on the unit's front conditioned roof facade.")
854
859
  arg.setDefaultValue(0)
855
860
  args << arg
856
861
 
857
862
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('skylight_area_back', true)
858
863
  arg.setDisplayName('Skylights: Back Roof Area')
859
- arg.setDescription("The amount of skylight area on the building's back conditioned roof facade.")
864
+ arg.setDescription("The amount of skylight area on the unit's back conditioned roof facade.")
860
865
  arg.setDefaultValue(0)
861
866
  args << arg
862
867
 
863
868
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('skylight_area_left', true)
864
869
  arg.setDisplayName('Skylights: Left Roof Area')
865
- arg.setDescription("The amount of skylight area on the building's left conditioned roof facade.")
870
+ arg.setDescription("The amount of skylight area on the unit's left conditioned roof facade (when viewed from the front).")
866
871
  arg.setDefaultValue(0)
867
872
  args << arg
868
873
 
869
874
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('skylight_area_right', true)
870
875
  arg.setDisplayName('Skylights: Right Roof Area')
871
- arg.setDescription("The amount of skylight area on the building's right conditioned roof facade.")
876
+ arg.setDescription("The amount of skylight area on the unit's right conditioned roof facade (when viewed from the front).")
872
877
  arg.setDefaultValue(0)
873
878
  args << arg
874
879
 
@@ -923,10 +928,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
923
928
  arg.setDefaultValue(3)
924
929
  args << arg
925
930
 
926
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('air_leakage_shelter_coefficient', true)
927
- arg.setDisplayName('Air Leakage: Shelter Coefficient')
928
- arg.setUnits('Frac')
929
- arg.setDescription('The local shelter coefficient (AIM-2 infiltration model) accounts for nearby buildings, trees, and obstructions.')
931
+ air_leakage_shielding_of_home_choices = OpenStudio::StringVector.new
932
+ air_leakage_shielding_of_home_choices << Constants.Auto
933
+ air_leakage_shielding_of_home_choices << HPXML::ShieldingExposed
934
+ air_leakage_shielding_of_home_choices << HPXML::ShieldingNormal
935
+ air_leakage_shielding_of_home_choices << HPXML::ShieldingWellShielded
936
+
937
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('air_leakage_shielding_of_home', air_leakage_shielding_of_home_choices, true)
938
+ arg.setDisplayName('Air Leakage: Shielding of Home')
939
+ arg.setDescription('Presence of nearby buildings, trees, obstructions for infiltration model.')
930
940
  arg.setDefaultValue(Constants.Auto)
931
941
  args << arg
932
942
 
@@ -941,6 +951,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
941
951
  heating_system_type_choices << HPXML::HVACTypePortableHeater
942
952
  heating_system_type_choices << HPXML::HVACTypeFireplace
943
953
  heating_system_type_choices << HPXML::HVACTypeFixedHeater
954
+ heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Baseboard"
955
+ heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Ductless Fan Coil"
944
956
 
945
957
  heating_system_fuel_choices = OpenStudio::StringVector.new
946
958
  heating_system_fuel_choices << HPXML::FuelTypeElectricity
@@ -958,6 +970,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
958
970
  cooling_system_type_choices << HPXML::HVACTypeEvaporativeCooler
959
971
  cooling_system_type_choices << HPXML::HVACTypeMiniSplitAirConditioner
960
972
 
973
+ cooling_efficiency_type_choices = OpenStudio::StringVector.new
974
+ cooling_efficiency_type_choices << HPXML::UnitsSEER
975
+ cooling_efficiency_type_choices << HPXML::UnitsEER
976
+
961
977
  compressor_type_choices = OpenStudio::StringVector.new
962
978
  compressor_type_choices << HPXML::HVACCompressorTypeSingleStage
963
979
  compressor_type_choices << HPXML::HVACCompressorTypeTwoStage
@@ -996,28 +1012,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
996
1012
  arg.setDefaultValue(1)
997
1013
  args << arg
998
1014
 
999
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_electric_auxiliary_energy', false)
1000
- arg.setDisplayName('Heating System: Electric Auxiliary Energy')
1001
- arg.setDescription("The electric auxiliary energy of the heating system. Applies to #{HPXML::HVACTypeBoiler}.")
1002
- arg.setUnits('kWh/yr')
1003
- args << arg
1004
-
1005
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fan_power_watts_per_cfm', false)
1006
- arg.setDisplayName('Heating System: Fan Power')
1007
- arg.setDescription("Blower fan power. Applies to #{HPXML::HVACTypeFurnace}.")
1008
- arg.setUnits('W/CFM')
1009
- args << arg
1010
-
1011
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fan_power_watts', false)
1012
- arg.setDisplayName('Heating System: Fan Power')
1013
- arg.setDescription("Blower fan power. Ignored for #{HPXML::HVACTypeElectricResistance}, #{HPXML::HVACTypeFurnace}, and #{HPXML::HVACTypeBoiler}.")
1014
- arg.setUnits('W')
1015
- args << arg
1016
-
1017
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heating_system_has_flue_or_chimney', true)
1018
- arg.setDisplayName('Heating System: Has Flue or Chimney')
1019
- arg.setDescription('Whether the heating system has a flue or chimney.')
1020
- arg.setDefaultValue(false)
1015
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_airflow_defect_ratio', false)
1016
+ arg.setDisplayName('Heating System: Airflow Defect Ratio')
1017
+ arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heating system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeFurnace}.")
1018
+ arg.setUnits('Frac')
1021
1019
  args << arg
1022
1020
 
1023
1021
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_type', cooling_system_type_choices, true)
@@ -1026,18 +1024,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1026
1024
  arg.setDefaultValue(HPXML::HVACTypeCentralAirConditioner)
1027
1025
  args << arg
1028
1026
 
1029
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_efficiency_seer', true)
1030
- arg.setDisplayName('Cooling System: Rated SEER')
1031
- arg.setUnits('SEER')
1032
- arg.setDescription("The rated efficiency value of the #{HPXML::HVACTypeCentralAirConditioner} cooling system.")
1033
- arg.setDefaultValue(13.0)
1027
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_efficiency_type', cooling_efficiency_type_choices, true)
1028
+ arg.setDisplayName('Cooling System: Efficiency Type')
1029
+ arg.setDescription("The efficiency type of the cooling system. System types #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner} use #{HPXML::UnitsSEER}. System type #{HPXML::HVACTypeRoomAirConditioner} uses #{HPXML::UnitsEER}. Ignored for system type #{HPXML::HVACTypeEvaporativeCooler}.")
1030
+ arg.setDefaultValue(HPXML::UnitsSEER)
1034
1031
  args << arg
1035
1032
 
1036
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_efficiency_eer', true)
1037
- arg.setDisplayName('Cooling System: Rated EER')
1038
- arg.setUnits('EER')
1039
- arg.setDescription("The rated efficiency value of the #{HPXML::HVACTypeRoomAirConditioner} cooling system.")
1040
- arg.setDefaultValue(8.5)
1033
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_efficiency', true)
1034
+ arg.setDisplayName('Cooling System: Efficiency')
1035
+ arg.setUnits("#{HPXML::UnitsSEER} or #{HPXML::UnitsEER}")
1036
+ arg.setDescription("The rated efficiency value of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}.")
1037
+ arg.setDefaultValue(13.0)
1041
1038
  args << arg
1042
1039
 
1043
1040
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_compressor_type', compressor_type_choices, false)
@@ -1047,13 +1044,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1047
1044
 
1048
1045
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_sensible_heat_fraction', false)
1049
1046
  arg.setDisplayName('Cooling System: Cooling Sensible Heat Fraction')
1050
- arg.setDescription('The sensible heat fraction of the cooling system. Ignored for evaporative cooler.')
1047
+ arg.setDescription("The sensible heat fraction of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}.")
1051
1048
  arg.setUnits('Frac')
1052
1049
  args << arg
1053
1050
 
1054
1051
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('cooling_system_cooling_capacity', true)
1055
1052
  arg.setDisplayName('Cooling System: Cooling Capacity')
1056
- arg.setDescription("The output cooling capacity of the cooling system. If using '#{Constants.Auto}', the autosizing algorithm will use ACCA Manual J/S to set the capacity to meet its load served. Ignored for evaporative cooler.")
1053
+ arg.setDescription("The output cooling capacity of the cooling system. If using '#{Constants.Auto}', the autosizing algorithm will use ACCA Manual J/S to set the capacity to meet its load served.")
1057
1054
  arg.setUnits('tons')
1058
1055
  arg.setDefaultValue(Constants.Auto)
1059
1056
  args << arg
@@ -1067,14 +1064,20 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1067
1064
 
1068
1065
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooling_system_is_ducted', true)
1069
1066
  arg.setDisplayName('Cooling System: Is Ducted')
1070
- arg.setDescription("Whether the cooling system is ducted or not. Only used for #{HPXML::HVACTypeEvaporativeCooler} and #{HPXML::HVACTypeMiniSplitAirConditioner}.")
1067
+ arg.setDescription("Whether the cooling system is ducted or not. Only used for #{HPXML::HVACTypeMiniSplitAirConditioner} and #{HPXML::HVACTypeEvaporativeCooler}.")
1071
1068
  arg.setDefaultValue(false)
1072
1069
  args << arg
1073
1070
 
1074
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_fan_power_watts_per_cfm', false)
1075
- arg.setDisplayName('Cooling System: Fan Power')
1076
- arg.setDescription("Blower fan power. Applies to #{HPXML::HVACTypeCentralAirConditioner}, #{HPXML::HVACTypeEvaporativeCooler}, and #{HPXML::HVACTypeMiniSplitAirConditioner}.")
1077
- arg.setUnits('W/CFM')
1071
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_airflow_defect_ratio', false)
1072
+ arg.setDisplayName('Cooling System: Airflow Defect Ratio')
1073
+ arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the cooling system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeCentralAirConditioner} and ducted #{HPXML::HVACTypeMiniSplitAirConditioner}.")
1074
+ arg.setUnits('Frac')
1075
+ args << arg
1076
+
1077
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_charge_defect_ratio', false)
1078
+ arg.setDisplayName('Cooling System: Charge Defect Ratio')
1079
+ arg.setDescription("The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge) / DesignCharge, of the cooling system per ANSI/RESNET/ACCA Standard 310. A value of zero means no refrigerant charge defect. Applies only to #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner}.")
1080
+ arg.setUnits('Frac')
1078
1081
  args << arg
1079
1082
 
1080
1083
  heat_pump_type_choices = OpenStudio::StringVector.new
@@ -1083,6 +1086,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1083
1086
  heat_pump_type_choices << HPXML::HVACTypeHeatPumpMiniSplit
1084
1087
  heat_pump_type_choices << HPXML::HVACTypeHeatPumpGroundToAir
1085
1088
 
1089
+ heat_pump_heating_efficiency_type_choices = OpenStudio::StringVector.new
1090
+ heat_pump_heating_efficiency_type_choices << HPXML::UnitsHSPF
1091
+ heat_pump_heating_efficiency_type_choices << HPXML::UnitsCOP
1092
+
1086
1093
  heat_pump_fuel_choices = OpenStudio::StringVector.new
1087
1094
  heat_pump_fuel_choices << HPXML::FuelTypeElectricity
1088
1095
 
@@ -1099,32 +1106,30 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1099
1106
  arg.setDefaultValue('none')
1100
1107
  args << arg
1101
1108
 
1102
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_efficiency_hspf', true)
1103
- arg.setDisplayName('Heat Pump: Rated Heating HSPF')
1104
- arg.setUnits('HSPF')
1105
- arg.setDescription("The rated heating efficiency value of the #{HPXML::HVACTypeHeatPumpAirToAir}/#{HPXML::HVACTypeHeatPumpMiniSplit} heat pump.")
1106
- arg.setDefaultValue(7.7)
1109
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_heating_efficiency_type', heat_pump_heating_efficiency_type_choices, true)
1110
+ arg.setDisplayName('Heat Pump: Heating Efficiency Type')
1111
+ arg.setDescription("The heating efficiency type of heat pump. System types #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit} use #{HPXML::UnitsHSPF}. System type #{HPXML::HVACTypeHeatPumpGroundToAir} uses #{HPXML::UnitsCOP}.")
1112
+ arg.setDefaultValue(HPXML::UnitsHSPF)
1107
1113
  args << arg
1108
1114
 
1109
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_efficiency_cop', true)
1110
- arg.setDisplayName('Heat Pump: Rated Heating COP')
1111
- arg.setUnits('COP')
1112
- arg.setDescription("The rated heating efficiency value of the #{HPXML::HVACTypeHeatPumpGroundToAir} heat pump.")
1113
- arg.setDefaultValue(3.6)
1115
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_efficiency', true)
1116
+ arg.setDisplayName('Heat Pump: Heating Efficiency')
1117
+ arg.setUnits("#{HPXML::UnitsHSPF} or #{HPXML::UnitsCOP}")
1118
+ arg.setDescription('The rated heating efficiency value of the heat pump.')
1119
+ arg.setDefaultValue(7.7)
1114
1120
  args << arg
1115
1121
 
1116
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_efficiency_seer', true)
1117
- arg.setDisplayName('Heat Pump: Rated Cooling SEER')
1118
- arg.setUnits('SEER')
1119
- arg.setDescription("The rated cooling efficiency value of the #{HPXML::HVACTypeHeatPumpAirToAir}/#{HPXML::HVACTypeHeatPumpMiniSplit} heat pump.")
1120
- arg.setDefaultValue(13.0)
1122
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_efficiency_type', cooling_efficiency_type_choices, true)
1123
+ arg.setDisplayName('Heat Pump: Cooling Efficiency Type')
1124
+ arg.setDescription("The cooling efficiency type of heat pump. System types #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit} use #{HPXML::UnitsSEER}. System type #{HPXML::HVACTypeHeatPumpGroundToAir} uses #{HPXML::UnitsEER}.")
1125
+ arg.setDefaultValue(HPXML::UnitsSEER)
1121
1126
  args << arg
1122
1127
 
1123
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_efficiency_eer', true)
1124
- arg.setDisplayName('Heat Pump: Rated Cooling EER')
1125
- arg.setUnits('EER')
1126
- arg.setDescription("The rated cooling efficiency value of the #{HPXML::HVACTypeHeatPumpGroundToAir} heat pump.")
1127
- arg.setDefaultValue(16.6)
1128
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_efficiency', true)
1129
+ arg.setDisplayName('Heat Pump: Cooling Efficiency')
1130
+ arg.setUnits("#{HPXML::UnitsSEER} or #{HPXML::UnitsEER}")
1131
+ arg.setDescription('The rated cooling efficiency value of the heat pump.')
1132
+ arg.setDefaultValue(13.0)
1128
1133
  args << arg
1129
1134
 
1130
1135
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_compressor_type', compressor_type_choices, false)
@@ -1145,7 +1150,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1145
1150
  arg.setDefaultValue(Constants.Auto)
1146
1151
  args << arg
1147
1152
 
1148
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('heat_pump_heating_capacity_17F', true)
1153
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('heat_pump_heating_capacity_17_f', true)
1149
1154
  arg.setDisplayName('Heat Pump: Heating Capacity 17F')
1150
1155
  arg.setDescription("The output heating capacity of the heat pump at 17F. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}.")
1151
1156
  arg.setUnits('Btu/hr')
@@ -1194,101 +1199,96 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1194
1199
 
1195
1200
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_switchover_temp', false)
1196
1201
  arg.setDisplayName('Heat Pump: Backup Heating Switchover Temperature')
1197
- arg.setDescription('The temperature at which the heat pump stops operating and the backup heating system starts running. Only applies to air-to-air and mini-split.')
1202
+ arg.setDescription('The temperature at which the heat pump stops operating and the backup heating system starts running. Only applies to air-to-air and mini-split. If not provided, backup heating will operate as needed when heat pump capacity is insufficient.')
1198
1203
  arg.setUnits('deg-F')
1199
1204
  args << arg
1200
1205
 
1201
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heat_pump_mini_split_is_ducted', false)
1202
- arg.setDisplayName('Heat Pump: Mini-Split Is Ducted')
1203
- arg.setDescription('Whether the mini-split heat pump is ducted or not.')
1204
- args << arg
1205
-
1206
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_pump_power_watts_per_ton', false)
1207
- arg.setDisplayName('Heat Pump: Ground-to-Air Pump Power')
1208
- arg.setDescription('Ground loop circulator pump power during operation of the heat pump.')
1209
- arg.setUnits('W/ton')
1210
- args << arg
1211
-
1212
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_fan_power_watts_per_cfm', false)
1213
- arg.setDisplayName('Heat Pump: Fan Power')
1214
- arg.setDescription('Blower fan power.')
1215
- arg.setUnits('W/CFM')
1206
+ arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heat_pump_is_ducted', false)
1207
+ arg.setDisplayName('Heat Pump: Is Ducted')
1208
+ arg.setDescription("Whether the heat pump is ducted or not. Only used for #{HPXML::HVACTypeHeatPumpMiniSplit}.")
1216
1209
  args << arg
1217
1210
 
1218
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekday_temp', true)
1219
- arg.setDisplayName('Heating Setpoint: Weekday Temperature')
1220
- arg.setDescription('Specify the weekday heating setpoint temperature.')
1221
- arg.setUnits('deg-F')
1222
- arg.setDefaultValue(71)
1211
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_airflow_defect_ratio', false)
1212
+ arg.setDisplayName('Heat Pump: Airflow Defect Ratio')
1213
+ arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heat pump per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeHeatPumpAirToAir}, ducted #{HPXML::HVACTypeHeatPumpMiniSplit}, and #{HPXML::HVACTypeHeatPumpGroundToAir}.")
1214
+ arg.setUnits('Frac')
1223
1215
  args << arg
1224
1216
 
1225
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekend_temp', true)
1226
- arg.setDisplayName('Heating Setpoint: Weekend Temperature')
1227
- arg.setDescription('Specify the weekend heating setpoint temperature.')
1228
- arg.setUnits('deg-F')
1229
- arg.setDefaultValue(71)
1217
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_charge_defect_ratio', false)
1218
+ arg.setDisplayName('Heat Pump: Charge Defect Ratio')
1219
+ arg.setDescription('The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge) / DesignCharge, of the heat pump per ANSI/RESNET/ACCA Standard 310. A value of zero means no refrigerant charge defect. Applies to all heat pump types.')
1220
+ arg.setUnits('Frac')
1230
1221
  args << arg
1231
1222
 
1232
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekday_offset_magnitude', false)
1233
- arg.setDisplayName('Heating Setpoint: Weekday Offset Magnitude')
1234
- arg.setDescription('Specify the weekday heating offset magnitude.')
1235
- arg.setUnits('deg-F')
1236
- args << arg
1223
+ heating_system_type_2_choices = OpenStudio::StringVector.new
1224
+ heating_system_type_2_choices << 'none'
1225
+ heating_system_type_2_choices << HPXML::HVACTypeWallFurnace
1226
+ heating_system_type_2_choices << HPXML::HVACTypeFloorFurnace
1227
+ heating_system_type_2_choices << HPXML::HVACTypeBoiler
1228
+ heating_system_type_2_choices << HPXML::HVACTypeElectricResistance
1229
+ heating_system_type_2_choices << HPXML::HVACTypeStove
1230
+ heating_system_type_2_choices << HPXML::HVACTypePortableHeater
1231
+ heating_system_type_2_choices << HPXML::HVACTypeFireplace
1237
1232
 
1238
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekend_offset_magnitude', false)
1239
- arg.setDisplayName('Heating Setpoint: Weekend Offset Magnitude')
1240
- arg.setDescription('Specify the weekend heating offset magnitude.')
1241
- arg.setUnits('deg-F')
1233
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_type_2', heating_system_type_2_choices, true)
1234
+ arg.setDisplayName('Heating System 2: Type')
1235
+ arg.setDescription('The type of the second heating system.')
1236
+ arg.setDefaultValue('none')
1242
1237
  args << arg
1243
1238
 
1244
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekday_schedule', false)
1245
- arg.setDisplayName('Heating Setpoint: Weekday Schedule')
1246
- arg.setDescription('Specify the 24-hour comma-separated weekday heating schedule of 0s and 1s.')
1247
- arg.setUnits('deg-F')
1239
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_fuel_2', heating_system_fuel_choices, true)
1240
+ arg.setDisplayName('Heating System 2: Fuel Type')
1241
+ arg.setDescription("The fuel type of the second heating system. Ignored for #{HPXML::HVACTypeElectricResistance}.")
1242
+ arg.setDefaultValue(HPXML::FuelTypeElectricity)
1248
1243
  args << arg
1249
1244
 
1250
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekend_schedule', false)
1251
- arg.setDisplayName('Heating Setpoint: Weekend Schedule')
1252
- arg.setDescription('Specify the 24-hour comma-separated weekend heating schedule of 0s and 1s.')
1253
- arg.setUnits('deg-F')
1245
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_efficiency_2', true)
1246
+ arg.setDisplayName('Heating System 2: Rated AFUE or Percent')
1247
+ arg.setUnits('Frac')
1248
+ arg.setDescription('For Furnace/WallFurnace/FloorFurnace/Boiler second heating system, the rated AFUE value. For ElectricResistance/Stove/PortableHeater/Fireplace, the rated Percent value.')
1249
+ arg.setDefaultValue(1.0)
1254
1250
  args << arg
1255
1251
 
1256
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekday_temp', true)
1257
- arg.setDisplayName('Cooling Setpoint: Weekday Temperature')
1258
- arg.setDescription('Specify the weekday cooling setpoint temperature.')
1259
- arg.setUnits('deg-F')
1260
- arg.setDefaultValue(76)
1252
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('heating_system_heating_capacity_2', true)
1253
+ arg.setDisplayName('Heating System 2: Heating Capacity')
1254
+ arg.setDescription("The output heating capacity of the second heating system. If using '#{Constants.Auto}', the autosizing algorithm will use ACCA Manual J/S to set the capacity to meet its load served.")
1255
+ arg.setUnits('Btu/hr')
1256
+ arg.setDefaultValue(Constants.Auto)
1261
1257
  args << arg
1262
1258
 
1263
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekend_temp', true)
1264
- arg.setDisplayName('Cooling Setpoint: Weekend Temperature')
1265
- arg.setDescription('Specify the weekend cooling setpoint temperature.')
1266
- arg.setUnits('deg-F')
1267
- arg.setDefaultValue(76)
1259
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fraction_heat_load_served_2', true)
1260
+ arg.setDisplayName('Heating System 2: Fraction Heat Load Served')
1261
+ arg.setDescription('The heat load served fraction of the second heating system.')
1262
+ arg.setUnits('Frac')
1263
+ arg.setDefaultValue(0.25)
1268
1264
  args << arg
1269
1265
 
1270
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekday_offset_magnitude', false)
1271
- arg.setDisplayName('Cooling Setpoint: Weekday Offset Magnitude')
1272
- arg.setDescription('Specify the weekday cooling offset magnitude.')
1266
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekday', true)
1267
+ arg.setDisplayName('Heating Setpoint: Weekday Schedule')
1268
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekday heating schedule.')
1273
1269
  arg.setUnits('deg-F')
1270
+ arg.setDefaultValue('71')
1274
1271
  args << arg
1275
1272
 
1276
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekend_offset_magnitude', false)
1277
- arg.setDisplayName('Cooling Setpoint: Weekend Offset Magnitude')
1278
- arg.setDescription('Specify the weekend cooling offset magnitude.')
1273
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekend', true)
1274
+ arg.setDisplayName('Heating Setpoint: Weekend Schedule')
1275
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekend heating schedule.')
1279
1276
  arg.setUnits('deg-F')
1277
+ arg.setDefaultValue('71')
1280
1278
  args << arg
1281
1279
 
1282
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekday_schedule', false)
1280
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekday', true)
1283
1281
  arg.setDisplayName('Cooling Setpoint: Weekday Schedule')
1284
- arg.setDescription('Specify the 24-hour comma-separated weekday cooling schedule of 0s and 1s.')
1282
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekday cooling schedule.')
1285
1283
  arg.setUnits('deg-F')
1284
+ arg.setDefaultValue('76')
1286
1285
  args << arg
1287
1286
 
1288
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekend_schedule', false)
1287
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekend', true)
1289
1288
  arg.setDisplayName('Cooling Setpoint: Weekend Schedule')
1290
- arg.setDescription('Specify the 24-hour comma-separated weekend cooling schedule of 0s and 1s.')
1289
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekend cooling schedule.')
1291
1290
  arg.setUnits('deg-F')
1291
+ arg.setDefaultValue('76')
1292
1292
  args << arg
1293
1293
 
1294
1294
  duct_leakage_units_choices = OpenStudio::StringVector.new
@@ -1380,71 +1380,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1380
1380
 
1381
1381
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('ducts_number_of_return_registers', true)
1382
1382
  arg.setDisplayName('Ducts: Number of Return Registers')
1383
- arg.setDescription('The number of return registers of the ducts.')
1383
+ arg.setDescription("The number of return registers of the ducts. Ignored for ducted #{HPXML::HVACTypeEvaporativeCooler}.")
1384
1384
  arg.setUnits('#')
1385
1385
  arg.setDefaultValue(Constants.Auto)
1386
1386
  args << arg
1387
1387
 
1388
- heating_system_type_2_choices = OpenStudio::StringVector.new
1389
- heating_system_type_2_choices << 'none'
1390
- heating_system_type_2_choices << HPXML::HVACTypeWallFurnace
1391
- heating_system_type_2_choices << HPXML::HVACTypeFloorFurnace
1392
- heating_system_type_2_choices << HPXML::HVACTypeElectricResistance
1393
- heating_system_type_2_choices << HPXML::HVACTypeStove
1394
- heating_system_type_2_choices << HPXML::HVACTypePortableHeater
1395
- heating_system_type_2_choices << HPXML::HVACTypeFireplace
1396
-
1397
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_type_2', heating_system_type_2_choices, true)
1398
- arg.setDisplayName('Heating System 2: Type')
1399
- arg.setDescription('The type of the second heating system.')
1400
- arg.setDefaultValue('none')
1401
- args << arg
1402
-
1403
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_fuel_2', heating_system_fuel_choices, true)
1404
- arg.setDisplayName('Heating System 2: Fuel Type')
1405
- arg.setDescription('The fuel type of the second heating system. Ignored for ElectricResistance.')
1406
- arg.setDefaultValue(HPXML::FuelTypeElectricity)
1407
- args << arg
1408
-
1409
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_efficiency_2', true)
1410
- arg.setDisplayName('Heating System 2: Rated AFUE or Percent')
1411
- arg.setUnits('Frac')
1412
- arg.setDescription('For Furnace/WallFurnace/FloorFurnace/Boiler second heating system, the rated AFUE value. For ElectricResistance/Stove/PortableHeater/Fireplace, the rated Percent value.')
1413
- arg.setDefaultValue(1.0)
1414
- args << arg
1415
-
1416
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('heating_system_heating_capacity_2', true)
1417
- arg.setDisplayName('Heating System 2: Heating Capacity')
1418
- arg.setDescription("The output heating capacity of the second heating system. If using '#{Constants.Auto}', the autosizing algorithm will use ACCA Manual J/S to set the capacity to meet its load served.")
1419
- arg.setUnits('Btu/hr')
1420
- arg.setDefaultValue(Constants.Auto)
1421
- args << arg
1422
-
1423
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fraction_heat_load_served_2', true)
1424
- arg.setDisplayName('Heating System 2: Fraction Heat Load Served')
1425
- arg.setDescription('The heat load served fraction of the second heating system.')
1426
- arg.setUnits('Frac')
1427
- arg.setDefaultValue(0.25)
1428
- args << arg
1429
-
1430
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_electric_auxiliary_energy_2', false)
1431
- arg.setDisplayName('Heating System 2: Electric Auxiliary Energy')
1432
- arg.setDescription('The electric auxiliary energy of the second heating system.')
1433
- arg.setUnits('kWh/yr')
1434
- args << arg
1435
-
1436
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fan_power_watts_2', false)
1437
- arg.setDisplayName('Heating System 2: Fan Power')
1438
- arg.setDescription("Blower fan power. Ignored for #{HPXML::HVACTypeElectricResistance}.")
1439
- arg.setUnits('W/CFM')
1440
- args << arg
1441
-
1442
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heating_system_has_flue_or_chimney_2', true)
1443
- arg.setDisplayName('Heating System 2: Has Flue or Chimney')
1444
- arg.setDescription('Whether the second heating system has a flue or chimney.')
1445
- arg.setDefaultValue(false)
1446
- args << arg
1447
-
1448
1388
  mech_vent_fan_type_choices = OpenStudio::StringVector.new
1449
1389
  mech_vent_fan_type_choices << 'none'
1450
1390
  mech_vent_fan_type_choices << HPXML::MechVentTypeExhaust
@@ -1474,11 +1414,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1474
1414
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_hours_in_operation', true)
1475
1415
  arg.setDisplayName('Mechanical Ventilation: Hours In Operation')
1476
1416
  arg.setDescription('The hours in operation of the mechanical ventilation.')
1477
- arg.setUnits('hrs')
1417
+ arg.setUnits('hrs/day')
1478
1418
  arg.setDefaultValue(24)
1479
1419
  args << arg
1480
1420
 
1481
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_total_recovery_efficiency_type', mech_vent_recovery_efficiency_type_choices, true)
1421
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_recovery_efficiency_type', mech_vent_recovery_efficiency_type_choices, true)
1482
1422
  arg.setDisplayName('Mechanical Ventilation: Total Recovery Efficiency Type')
1483
1423
  arg.setDescription('The total recovery efficiency type of the mechanical ventilation.')
1484
1424
  arg.setDefaultValue('Unadjusted')
@@ -1486,20 +1426,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1486
1426
 
1487
1427
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_total_recovery_efficiency', true)
1488
1428
  arg.setDisplayName('Mechanical Ventilation: Total Recovery Efficiency')
1489
- arg.setDescription('The Unadjusted or Adjusted total recovery efficiency of the mechanical ventilation.')
1429
+ arg.setDescription("The Unadjusted or Adjusted total recovery efficiency of the mechanical ventilation. Applies to #{HPXML::MechVentTypeERV}.")
1490
1430
  arg.setUnits('Frac')
1491
1431
  arg.setDefaultValue(0.48)
1492
1432
  args << arg
1493
1433
 
1494
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_sensible_recovery_efficiency_type', mech_vent_recovery_efficiency_type_choices, true)
1495
- arg.setDisplayName('Mechanical Ventilation: Sensible Recovery Efficiency Type')
1496
- arg.setDescription('The sensible recovery efficiency type of the mechanical ventilation.')
1497
- arg.setDefaultValue('Unadjusted')
1498
- args << arg
1499
-
1500
1434
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_sensible_recovery_efficiency', true)
1501
1435
  arg.setDisplayName('Mechanical Ventilation: Sensible Recovery Efficiency')
1502
- arg.setDescription('The Unadjusted or Adjusted sensible recovery efficiency of the mechanical ventilation.')
1436
+ arg.setDescription("The Unadjusted or Adjusted sensible recovery efficiency of the mechanical ventilation. Applies to #{HPXML::MechVentTypeERV} and #{HPXML::MechVentTypeHRV}.")
1503
1437
  arg.setUnits('Frac')
1504
1438
  arg.setDefaultValue(0.72)
1505
1439
  args << arg
@@ -1526,12 +1460,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1526
1460
 
1527
1461
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('shared_mech_vent_preheating_fuel', heating_system_fuel_choices, false)
1528
1462
  arg.setDisplayName('Shared Mechanical Ventilation: Preheating Fuel')
1529
- arg.setDescription('Fuel type of the preconditioning heating equipment.')
1463
+ arg.setDescription('Fuel type of the preconditioning heating equipment. Only used for a shared mechanical ventilation system.')
1530
1464
  args << arg
1531
1465
 
1532
1466
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('shared_mech_vent_preheating_efficiency', false)
1533
1467
  arg.setDisplayName('Shared Mechanical Ventilation: Preheating Efficiency')
1534
- arg.setDescription('Efficiency of the preconditioning heating equipment.')
1468
+ arg.setDescription('Efficiency of the preconditioning heating equipment. Only used for a shared mechanical ventilation system.')
1535
1469
  arg.setUnits('COP')
1536
1470
  args << arg
1537
1471
 
@@ -1546,12 +1480,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1546
1480
 
1547
1481
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('shared_mech_vent_precooling_fuel', cooling_system_fuel_choices, false)
1548
1482
  arg.setDisplayName('Shared Mechanical Ventilation: Precooling Fuel')
1549
- arg.setDescription('Fuel type of the preconditioning cooling equipment.')
1483
+ arg.setDescription('Fuel type of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system.')
1550
1484
  args << arg
1551
1485
 
1552
1486
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('shared_mech_vent_precooling_efficiency', false)
1553
1487
  arg.setDisplayName('Shared Mechanical Ventilation: Precooling Efficiency')
1554
- arg.setDescription('Efficiency of the preconditioning cooling equipment.')
1488
+ arg.setDescription('Efficiency of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system.')
1555
1489
  arg.setUnits('COP')
1556
1490
  args << arg
1557
1491
 
@@ -1561,7 +1495,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1561
1495
  arg.setUnits('Frac')
1562
1496
  args << arg
1563
1497
 
1564
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_fan_type_2', mech_vent_fan_type_choices, true)
1498
+ mech_vent_fan_type_2_choices = OpenStudio::StringVector.new
1499
+ mech_vent_fan_type_2_choices << 'none'
1500
+ mech_vent_fan_type_2_choices << HPXML::MechVentTypeExhaust
1501
+ mech_vent_fan_type_2_choices << HPXML::MechVentTypeSupply
1502
+ mech_vent_fan_type_2_choices << HPXML::MechVentTypeERV
1503
+ mech_vent_fan_type_2_choices << HPXML::MechVentTypeHRV
1504
+ mech_vent_fan_type_2_choices << HPXML::MechVentTypeBalanced
1505
+
1506
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_fan_type_2', mech_vent_fan_type_2_choices, true)
1565
1507
  arg.setDisplayName('Mechanical Ventilation 2: Fan Type')
1566
1508
  arg.setDescription("The type of the second mechanical ventilation. Use 'none' if there is no second mechanical ventilation system.")
1567
1509
  arg.setDefaultValue('none')
@@ -1577,11 +1519,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1577
1519
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_hours_in_operation_2', true)
1578
1520
  arg.setDisplayName('Mechanical Ventilation 2: Hours In Operation')
1579
1521
  arg.setDescription('The hours in operation of the second mechanical ventilation.')
1580
- arg.setUnits('hrs')
1522
+ arg.setUnits('hrs/day')
1581
1523
  arg.setDefaultValue(24)
1582
1524
  args << arg
1583
1525
 
1584
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_total_recovery_efficiency_type_2', mech_vent_recovery_efficiency_type_choices, true)
1526
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_recovery_efficiency_type_2', mech_vent_recovery_efficiency_type_choices, true)
1585
1527
  arg.setDisplayName('Mechanical Ventilation 2: Total Recovery Efficiency Type')
1586
1528
  arg.setDescription('The total recovery efficiency type of the second mechanical ventilation.')
1587
1529
  arg.setDefaultValue('Unadjusted')
@@ -1589,20 +1531,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1589
1531
 
1590
1532
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_total_recovery_efficiency_2', true)
1591
1533
  arg.setDisplayName('Mechanical Ventilation 2: Total Recovery Efficiency')
1592
- arg.setDescription('The Unadjusted or Adjusted total recovery efficiency of the second mechanical ventilation.')
1534
+ arg.setDescription("The Unadjusted or Adjusted total recovery efficiency of the second mechanical ventilation. Applies to #{HPXML::MechVentTypeERV}.")
1593
1535
  arg.setUnits('Frac')
1594
1536
  arg.setDefaultValue(0.48)
1595
1537
  args << arg
1596
1538
 
1597
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_sensible_recovery_efficiency_type_2', mech_vent_recovery_efficiency_type_choices, true)
1598
- arg.setDisplayName('Mechanical Ventilation 2: Sensible Recovery Efficiency Type')
1599
- arg.setDescription('The sensible recovery efficiency type of the second mechanical ventilation.')
1600
- arg.setDefaultValue('Unadjusted')
1601
- args << arg
1602
-
1603
1539
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_sensible_recovery_efficiency_2', true)
1604
1540
  arg.setDisplayName('Mechanical Ventilation 2: Sensible Recovery Efficiency')
1605
- arg.setDescription('The Unadjusted or Adjusted sensible recovery efficiency of the second mechanical ventilation.')
1541
+ arg.setDescription("The Unadjusted or Adjusted sensible recovery efficiency of the second mechanical ventilation. Applies to #{HPXML::MechVentTypeERV} and #{HPXML::MechVentTypeHRV}.")
1606
1542
  arg.setUnits('Frac')
1607
1543
  arg.setDefaultValue(0.72)
1608
1544
  args << arg
@@ -1614,76 +1550,74 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1614
1550
  arg.setDefaultValue(30)
1615
1551
  args << arg
1616
1552
 
1617
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('kitchen_fans_present', true)
1618
- arg.setDisplayName('Kitchen Fans: Present')
1619
- arg.setDescription('Whether there are kitchen fans.')
1620
- arg.setDefaultValue(false)
1621
- args << arg
1622
-
1623
- arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_quantity', false)
1553
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_quantity', true)
1624
1554
  arg.setDisplayName('Kitchen Fans: Quantity')
1625
1555
  arg.setDescription('The quantity of the kitchen fans.')
1626
1556
  arg.setUnits('#')
1557
+ arg.setDefaultValue(Constants.Auto)
1627
1558
  args << arg
1628
1559
 
1629
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_flow_rate', false)
1560
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_flow_rate', false)
1630
1561
  arg.setDisplayName('Kitchen Fans: Flow Rate')
1631
1562
  arg.setDescription('The flow rate of the kitchen fan.')
1632
1563
  arg.setUnits('CFM')
1564
+ arg.setDefaultValue(Constants.Auto)
1633
1565
  args << arg
1634
1566
 
1635
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_hours_in_operation', false)
1567
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_hours_in_operation', false)
1636
1568
  arg.setDisplayName('Kitchen Fans: Hours In Operation')
1637
1569
  arg.setDescription('The hours in operation of the kitchen fan.')
1638
- arg.setUnits('hrs')
1570
+ arg.setUnits('hrs/day')
1571
+ arg.setDefaultValue(Constants.Auto)
1639
1572
  args << arg
1640
1573
 
1641
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_power', false)
1574
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_power', false)
1642
1575
  arg.setDisplayName('Kitchen Fans: Fan Power')
1643
1576
  arg.setDescription('The fan power of the kitchen fan.')
1644
1577
  arg.setUnits('W')
1578
+ arg.setDefaultValue(Constants.Auto)
1645
1579
  args << arg
1646
1580
 
1647
- arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_start_hour', false)
1581
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_start_hour', false)
1648
1582
  arg.setDisplayName('Kitchen Fans: Start Hour')
1649
1583
  arg.setDescription('The start hour of the kitchen fan.')
1650
1584
  arg.setUnits('hr')
1585
+ arg.setDefaultValue(Constants.Auto)
1651
1586
  args << arg
1652
1587
 
1653
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('bathroom_fans_present', true)
1654
- arg.setDisplayName('Bathroom Fans: Present')
1655
- arg.setDescription('Whether there are bathroom fans.')
1656
- arg.setDefaultValue(false)
1657
- args << arg
1658
-
1659
- arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_quantity', false)
1588
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_quantity', true)
1660
1589
  arg.setDisplayName('Bathroom Fans: Quantity')
1661
1590
  arg.setDescription('The quantity of the bathroom fans.')
1662
1591
  arg.setUnits('#')
1592
+ arg.setDefaultValue(Constants.Auto)
1663
1593
  args << arg
1664
1594
 
1665
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_flow_rate', false)
1595
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_flow_rate', false)
1666
1596
  arg.setDisplayName('Bathroom Fans: Flow Rate')
1667
1597
  arg.setDescription('The flow rate of the bathroom fans.')
1668
1598
  arg.setUnits('CFM')
1599
+ arg.setDefaultValue(Constants.Auto)
1669
1600
  args << arg
1670
1601
 
1671
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_hours_in_operation', false)
1602
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_hours_in_operation', false)
1672
1603
  arg.setDisplayName('Bathroom Fans: Hours In Operation')
1673
1604
  arg.setDescription('The hours in operation of the bathroom fans.')
1674
- arg.setUnits('hrs')
1605
+ arg.setUnits('hrs/day')
1606
+ arg.setDefaultValue(Constants.Auto)
1675
1607
  args << arg
1676
1608
 
1677
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_power', false)
1609
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_power', false)
1678
1610
  arg.setDisplayName('Bathroom Fans: Fan Power')
1679
1611
  arg.setDescription('The fan power of the bathroom fans.')
1680
1612
  arg.setUnits('W')
1613
+ arg.setDefaultValue(Constants.Auto)
1681
1614
  args << arg
1682
1615
 
1683
- arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_start_hour', false)
1616
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_start_hour', false)
1684
1617
  arg.setDisplayName('Bathroom Fans: Start Hour')
1685
1618
  arg.setDescription('The start hour of the bathroom fans.')
1686
1619
  arg.setUnits('hr')
1620
+ arg.setDefaultValue(Constants.Auto)
1687
1621
  args << arg
1688
1622
 
1689
1623
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('whole_house_fan_present', true)
@@ -1762,18 +1696,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1762
1696
 
1763
1697
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('water_heater_tank_volume', true)
1764
1698
  arg.setDisplayName('Water Heater: Tank Volume')
1765
- arg.setDescription("Nominal volume of water heater tank. Set to #{Constants.Auto} to have volume autosized. Only applies to #{HPXML::WaterHeaterTypeStorage}, #{HPXML::WaterHeaterTypeHeatPump}, and #{HPXML::WaterHeaterTypeCombiStorage}.")
1699
+ arg.setDescription("Nominal volume of water heater tank. Set to '#{Constants.Auto}' to have volume autosized. Only applies to #{HPXML::WaterHeaterTypeStorage}, #{HPXML::WaterHeaterTypeHeatPump}, and #{HPXML::WaterHeaterTypeCombiStorage}.")
1766
1700
  arg.setUnits('gal')
1767
1701
  arg.setDefaultValue(Constants.Auto)
1768
1702
  args << arg
1769
1703
 
1770
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('water_heater_heating_capacity', true)
1771
- arg.setDisplayName('Water Heater: Input Capacity')
1772
- arg.setDescription("The maximum energy input rating of water heater. Set to #{Constants.Auto} to have this field autosized. Only applies to #{HPXML::WaterHeaterTypeStorage}.")
1773
- arg.setUnits('Btu/hr')
1774
- arg.setDefaultValue(Constants.Auto)
1775
- args << arg
1776
-
1777
1704
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_efficiency_type', water_heater_efficiency_type_choices, true)
1778
1705
  arg.setDisplayName('Water Heater: Efficiency Type')
1779
1706
  arg.setDescription('The efficiency type of water heater. Does not apply to space-heating boilers.')
@@ -1819,12 +1746,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1819
1746
  arg.setDefaultValue(Constants.Auto)
1820
1747
  args << arg
1821
1748
 
1822
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('water_heater_has_flue_or_chimney', true)
1823
- arg.setDisplayName('Water Heater: Has Flue or Chimney')
1824
- arg.setDescription('Whether the water heater has a flue or chimney.')
1825
- arg.setDefaultValue(false)
1826
- args << arg
1827
-
1828
1749
  arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('water_heater_num_units_served', true)
1829
1750
  arg.setDisplayName('Water Heater: Number of Units Served')
1830
1751
  arg.setDescription("Number of dwelling units served (directly or indirectly) by the water heater. Must be 1 if #{HPXML::ResidentialTypeSFD}. Used to apportion water heater tank losses to the unit.")
@@ -2262,13 +2183,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2262
2183
  arg.setDefaultValue(Constants.Auto)
2263
2184
  args << arg
2264
2185
 
2265
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('dehumidifier_present', true)
2266
- arg.setDisplayName('Dehumidifier: Present')
2267
- arg.setDescription('Whether there is a dehumidifier.')
2268
- arg.setDefaultValue(false)
2269
- args << arg
2270
-
2271
2186
  dehumidifier_type_choices = OpenStudio::StringVector.new
2187
+ dehumidifier_type_choices << 'none'
2272
2188
  dehumidifier_type_choices << HPXML::DehumidifierTypePortable
2273
2189
  dehumidifier_type_choices << HPXML::DehumidifierTypeWholeHome
2274
2190
 
@@ -2279,26 +2195,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2279
2195
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dehumidifier_type', dehumidifier_type_choices, true)
2280
2196
  arg.setDisplayName('Dehumidifier: Type')
2281
2197
  arg.setDescription('The type of dehumidifier.')
2282
- arg.setDefaultValue(HPXML::DehumidifierTypePortable)
2198
+ arg.setDefaultValue('none')
2283
2199
  args << arg
2284
2200
 
2285
2201
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dehumidifier_efficiency_type', dehumidifier_efficiency_type_choices, true)
2286
2202
  arg.setDisplayName('Dehumidifier: Efficiency Type')
2287
2203
  arg.setDescription('The efficiency type of dehumidifier.')
2288
- arg.setDefaultValue('EnergyFactor')
2204
+ arg.setDefaultValue('IntegratedEnergyFactor')
2289
2205
  args << arg
2290
2206
 
2291
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dehumidifier_efficiency_ef', true)
2292
- arg.setDisplayName('Dehumidifier: Energy Factor')
2207
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dehumidifier_efficiency', true)
2208
+ arg.setDisplayName('Dehumidifier: Efficiency')
2293
2209
  arg.setUnits('liters/kWh')
2294
- arg.setDescription('The Energy Factor (EF) of the dehumidifier.')
2295
- arg.setDefaultValue(1.8)
2296
- args << arg
2297
-
2298
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dehumidifier_efficiency_ief', true)
2299
- arg.setDisplayName('Dehumidifier: Integrated Energy Factor')
2300
- arg.setUnits('liters/kWh')
2301
- arg.setDescription('The Integrated Energy Factor (IEF) of the dehumidifier.')
2210
+ arg.setDescription('The efficiency of the dehumidifier.')
2302
2211
  arg.setDefaultValue(1.5)
2303
2212
  args << arg
2304
2213
 
@@ -2323,14 +2232,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2323
2232
  arg.setDefaultValue(1)
2324
2233
  args << arg
2325
2234
 
2326
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('clothes_washer_present', true)
2327
- arg.setDisplayName('Clothes Washer: Present')
2328
- arg.setDescription('Whether there is a clothes washer.')
2329
- arg.setDefaultValue(true)
2330
- args << arg
2331
-
2332
2235
  appliance_location_choices = OpenStudio::StringVector.new
2333
2236
  appliance_location_choices << Constants.Auto
2237
+ appliance_location_choices << 'none'
2334
2238
  appliance_location_choices << HPXML::LocationLivingSpace
2335
2239
  appliance_location_choices << HPXML::LocationBasementConditioned
2336
2240
  appliance_location_choices << HPXML::LocationBasementUnconditioned
@@ -2352,21 +2256,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2352
2256
 
2353
2257
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_washer_efficiency_type', clothes_washer_efficiency_type_choices, true)
2354
2258
  arg.setDisplayName('Clothes Washer: Efficiency Type')
2355
- arg.setDescription('The efficiency type of clothes washer.')
2259
+ arg.setDescription('The efficiency type of the clothes washer.')
2356
2260
  arg.setDefaultValue('IntegratedModifiedEnergyFactor')
2357
2261
  args << arg
2358
2262
 
2359
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_washer_efficiency_mef', true)
2360
- arg.setDisplayName('Clothes Washer: Modified Energy Factor')
2361
- arg.setUnits('ft^3/kWh-cycle')
2362
- arg.setDescription('The Modified Energy Factor (MEF) is the capacity of the clothes container divided by the total clothes washer energy consumption per cycle, where the energy consumption is the sum of the machine electrical energy consumption, the hot water energy consumption, the energy required for removal of the remaining moisture in the wash load, standby energy, and off-mode energy consumption.')
2363
- arg.setDefaultValue(Constants.Auto)
2364
- args << arg
2365
-
2366
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_washer_efficiency_imef', true)
2367
- arg.setDisplayName('Clothes Washer: Integrated Modified Energy Factor')
2263
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_washer_efficiency', true)
2264
+ arg.setDisplayName('Clothes Washer: Efficiency')
2368
2265
  arg.setUnits('ft^3/kWh-cyc')
2369
- arg.setDescription('The energy performance metric for ENERGY STAR certified residential clothes washers as of March 7, 2015.')
2266
+ arg.setDescription('The efficiency of the clothes washer.')
2370
2267
  arg.setDefaultValue(Constants.Auto)
2371
2268
  args << arg
2372
2269
 
@@ -2418,12 +2315,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2418
2315
  arg.setDefaultValue(1.0)
2419
2316
  args << arg
2420
2317
 
2421
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('clothes_dryer_present', true)
2422
- arg.setDisplayName('Clothes Dryer: Present')
2423
- arg.setDescription('Whether there is a clothes dryer.')
2424
- arg.setDefaultValue(true)
2425
- args << arg
2426
-
2427
2318
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_location', appliance_location_choices, true)
2428
2319
  arg.setDisplayName('Clothes Dryer: Location')
2429
2320
  arg.setDescription('The space type for the clothes dryer location.')
@@ -2438,11 +2329,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2438
2329
  clothes_dryer_fuel_choices << HPXML::FuelTypeWoodCord
2439
2330
  clothes_dryer_fuel_choices << HPXML::FuelTypeCoal
2440
2331
 
2441
- clothes_dryer_control_type_choices = OpenStudio::StringVector.new
2442
- clothes_dryer_control_type_choices << Constants.Auto
2443
- clothes_dryer_control_type_choices << HPXML::ClothesDryerControlTypeTimer
2444
- clothes_dryer_control_type_choices << HPXML::ClothesDryerControlTypeMoisture
2445
-
2446
2332
  clothes_dryer_efficiency_type_choices = OpenStudio::StringVector.new
2447
2333
  clothes_dryer_efficiency_type_choices << 'EnergyFactor'
2448
2334
  clothes_dryer_efficiency_type_choices << 'CombinedEnergyFactor'
@@ -2455,27 +2341,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2455
2341
 
2456
2342
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_efficiency_type', clothes_dryer_efficiency_type_choices, true)
2457
2343
  arg.setDisplayName('Clothes Dryer: Efficiency Type')
2458
- arg.setDescription('The efficiency type of clothes dryer.')
2344
+ arg.setDescription('The efficiency type of the clothes dryer.')
2459
2345
  arg.setDefaultValue('CombinedEnergyFactor')
2460
2346
  args << arg
2461
2347
 
2462
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_efficiency_ef', true)
2463
- arg.setDisplayName('Clothes Dryer: Energy Factor')
2348
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_dryer_efficiency', true)
2349
+ arg.setDisplayName('Clothes Dryer: Efficiency')
2464
2350
  arg.setUnits('lb/kWh')
2465
- arg.setDescription('The energy performance metric for ENERGY STAR certified residential clothes dryers prior to September 13, 2013. The new metric is Combined Energy Factor.')
2466
- arg.setDefaultValue(3.4615)
2467
- args << arg
2468
-
2469
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_dryer_efficiency_cef', true)
2470
- arg.setDisplayName('Clothes Dryer: Combined Energy Factor')
2471
- arg.setUnits('lb/kWh')
2472
- arg.setDescription('The Combined Energy Factor (CEF) measures the pounds of clothing that can be dried per kWh (Fuel equivalent) of electricity, including energy consumed during Stand-by and Off modes.')
2473
- arg.setDefaultValue(Constants.Auto)
2474
- args << arg
2475
-
2476
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_control_type', clothes_dryer_control_type_choices, true)
2477
- arg.setDisplayName('Clothes Dryer: Control Type')
2478
- arg.setDescription('Type of control used by the clothes dryer.')
2351
+ arg.setDescription('The efficiency of the clothes dryer.')
2479
2352
  arg.setDefaultValue(Constants.Auto)
2480
2353
  args << arg
2481
2354
 
@@ -2492,12 +2365,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2492
2365
  arg.setDefaultValue(1.0)
2493
2366
  args << arg
2494
2367
 
2495
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('dishwasher_present', true)
2496
- arg.setDisplayName('Dishwasher: Present')
2497
- arg.setDescription('Whether there is a dishwasher.')
2498
- arg.setDefaultValue(true)
2499
- args << arg
2500
-
2501
2368
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dishwasher_location', appliance_location_choices, true)
2502
2369
  arg.setDisplayName('Dishwasher: Location')
2503
2370
  arg.setDescription('The space type for the dishwasher location.')
@@ -2514,19 +2381,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2514
2381
  arg.setDefaultValue('RatedAnnualkWh')
2515
2382
  args << arg
2516
2383
 
2517
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('dishwasher_efficiency_kwh', true)
2518
- arg.setDisplayName('Dishwasher: Rated Annual kWh')
2519
- arg.setUnits('kWh/yr')
2520
- arg.setDescription('The rated annual kWh of the dishwasher.')
2384
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('dishwasher_efficiency', true)
2385
+ arg.setDisplayName('Dishwasher: Efficiency')
2386
+ arg.setUnits('RatedAnnualkWh or EnergyFactor')
2387
+ arg.setDescription('The efficiency of the dishwasher.')
2521
2388
  arg.setDefaultValue(Constants.Auto)
2522
2389
  args << arg
2523
2390
 
2524
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_efficiency_ef', true)
2525
- arg.setDisplayName('Dishwasher: Energy Factor')
2526
- arg.setDescription('The energy factor of the dishwasher.')
2527
- arg.setDefaultValue(0.46)
2528
- args << arg
2529
-
2530
2391
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('dishwasher_label_electric_rate', true)
2531
2392
  arg.setDisplayName('Dishwasher: Label Electric Rate')
2532
2393
  arg.setUnits('$/kWh')
@@ -2568,12 +2429,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2568
2429
  arg.setDefaultValue(1.0)
2569
2430
  args << arg
2570
2431
 
2571
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('refrigerator_present', true)
2572
- arg.setDisplayName('Refrigerator: Present')
2573
- arg.setDescription('Whether there is a refrigerator.')
2574
- arg.setDefaultValue(true)
2575
- args << arg
2576
-
2577
2432
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('refrigerator_location', appliance_location_choices, true)
2578
2433
  arg.setDisplayName('Refrigerator: Location')
2579
2434
  arg.setDescription('The space type for the refrigerator location.')
@@ -2593,12 +2448,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2593
2448
  arg.setDefaultValue(1.0)
2594
2449
  args << arg
2595
2450
 
2596
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('extra_refrigerator_present', true)
2597
- arg.setDisplayName('Extra Refrigerator: Present')
2598
- arg.setDescription('Whether there is an extra refrigerator.')
2599
- arg.setDefaultValue(false)
2600
- args << arg
2601
-
2602
2451
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('extra_refrigerator_location', appliance_location_choices, true)
2603
2452
  arg.setDisplayName('Extra Refrigerator: Location')
2604
2453
  arg.setDescription('The space type for the extra refrigerator location.')
@@ -2618,12 +2467,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2618
2467
  arg.setDefaultValue(1.0)
2619
2468
  args << arg
2620
2469
 
2621
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('freezer_present', true)
2622
- arg.setDisplayName('Freezer: Present')
2623
- arg.setDescription('Whether there is a freezer.')
2624
- arg.setDefaultValue(false)
2625
- args << arg
2626
-
2627
2470
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('freezer_location', appliance_location_choices, true)
2628
2471
  arg.setDisplayName('Freezer: Location')
2629
2472
  arg.setDescription('The space type for the freezer location.')
@@ -2651,12 +2494,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2651
2494
  cooking_range_oven_fuel_choices << HPXML::FuelTypeWoodCord
2652
2495
  cooking_range_oven_fuel_choices << HPXML::FuelTypeCoal
2653
2496
 
2654
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooking_range_oven_present', true)
2655
- arg.setDisplayName('Cooking Range/Oven: Present')
2656
- arg.setDescription('Whether there is a cooking range/oven.')
2657
- arg.setDefaultValue(true)
2658
- args << arg
2659
-
2660
2497
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooking_range_oven_location', appliance_location_choices, true)
2661
2498
  arg.setDisplayName('Cooking Range/Oven: Location')
2662
2499
  arg.setDescription('The space type for the cooking range/oven location.')
@@ -2725,12 +2562,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2725
2562
  arg.setDefaultValue(1.0)
2726
2563
  args << arg
2727
2564
 
2728
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_television_usage_multiplier_2', true)
2729
- arg.setDisplayName('Plug Loads: Television Usage Multiplier 2')
2730
- arg.setDefaultValue(1.0)
2731
- arg.setDescription('Additional multiplier on the television energy usage that can reflect, e.g., high/low usage occupants.')
2732
- args << arg
2733
-
2734
2565
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('plug_loads_other_annual_kwh', true)
2735
2566
  arg.setDisplayName('Plug Loads: Other Annual kWh')
2736
2567
  arg.setDescription('The annual energy consumption of the other residual plug loads.')
@@ -2758,12 +2589,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2758
2589
  arg.setDefaultValue(1.0)
2759
2590
  args << arg
2760
2591
 
2761
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_other_usage_multiplier_2', true)
2762
- arg.setDisplayName('Plug Loads: Other Usage Multiplier 2')
2763
- arg.setDescription('Additional multiplier on the other energy usage that can reflect, e.g., high/low usage occupants.')
2764
- arg.setDefaultValue(1.0)
2765
- args << arg
2766
-
2767
2592
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('plug_loads_well_pump_present', true)
2768
2593
  arg.setDisplayName('Plug Loads: Well Pump Present')
2769
2594
  arg.setDescription('Whether there is a well pump.')
@@ -2780,13 +2605,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2780
2605
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_well_pump_usage_multiplier', true)
2781
2606
  arg.setDisplayName('Plug Loads: Well Pump Usage Multiplier')
2782
2607
  arg.setDescription('Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants.')
2783
- arg.setDefaultValue(0.0)
2784
- args << arg
2785
-
2786
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_well_pump_usage_multiplier_2', true)
2787
- arg.setDisplayName('Plug Loads: Well Pump Usage Multiplier 2')
2788
- arg.setDescription('Additional multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants.')
2789
- arg.setDefaultValue(0.0)
2608
+ arg.setDefaultValue(1.0)
2790
2609
  args << arg
2791
2610
 
2792
2611
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('plug_loads_vehicle_present', true)
@@ -2805,13 +2624,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2805
2624
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_vehicle_usage_multiplier', true)
2806
2625
  arg.setDisplayName('Plug Loads: Vehicle Usage Multiplier')
2807
2626
  arg.setDescription('Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants.')
2808
- arg.setDefaultValue(0.0)
2809
- args << arg
2810
-
2811
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_vehicle_usage_multiplier_2', true)
2812
- arg.setDisplayName('Plug Loads: Vehicle Usage Multiplier 2')
2813
- arg.setDescription('Additional multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants.')
2814
- arg.setDefaultValue(0.0)
2627
+ arg.setDefaultValue(1.0)
2815
2628
  args << arg
2816
2629
 
2817
2630
  fuel_loads_fuel_choices = OpenStudio::StringVector.new
@@ -2916,7 +2729,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2916
2729
  args << arg
2917
2730
 
2918
2731
  heater_type_choices = OpenStudio::StringVector.new
2919
- heater_type_choices << 'none'
2732
+ heater_type_choices << HPXML::TypeNone
2920
2733
  heater_type_choices << HPXML::HeaterTypeElectricResistance
2921
2734
  heater_type_choices << HPXML::HeaterTypeGas
2922
2735
  heater_type_choices << HPXML::HeaterTypeHeatPump
@@ -2943,7 +2756,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2943
2756
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pool_heater_type', heater_type_choices, true)
2944
2757
  arg.setDisplayName('Pool: Heater Type')
2945
2758
  arg.setDescription("The type of pool heater. Use 'none' if there is no pool heater.")
2946
- arg.setDefaultValue('none')
2759
+ arg.setDefaultValue(HPXML::TypeNone)
2947
2760
  args << arg
2948
2761
 
2949
2762
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('pool_heater_annual_kwh', true)
@@ -2988,7 +2801,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2988
2801
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('hot_tub_heater_type', heater_type_choices, true)
2989
2802
  arg.setDisplayName('Hot Tub: Heater Type')
2990
2803
  arg.setDescription("The type of hot tub heater. Use 'none' if there is no hot tub heater.")
2991
- arg.setDefaultValue('none')
2804
+ arg.setDefaultValue(HPXML::TypeNone)
2992
2805
  args << arg
2993
2806
 
2994
2807
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('hot_tub_heater_annual_kwh', true)
@@ -3023,13 +2836,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3023
2836
  return false
3024
2837
  end
3025
2838
 
2839
+ Geometry.tear_down_model(model, runner)
2840
+
3026
2841
  Version.check_openstudio_version()
3027
2842
 
3028
2843
  # assign the user inputs to variables
3029
- args = get_argument_values(runner, user_arguments)
3030
- args[:hpxml_path] = runner.getStringArgumentValue('hpxml_path', user_arguments)
3031
- args[:software_program_used] = runner.getOptionalStringArgumentValue('software_program_used', user_arguments)
3032
- args[:software_program_version] = runner.getOptionalStringArgumentValue('software_program_version', user_arguments)
2844
+ args = get_argument_values(runner, arguments(model), user_arguments)
2845
+ args = Hash[args.collect { |k, v| [k.to_sym, v] }]
2846
+ args[:geometry_rim_joist_height] /= 12.0
3033
2847
  args[:geometry_roof_pitch] = { '1:12' => 1.0 / 12.0, '2:12' => 2.0 / 12.0, '3:12' => 3.0 / 12.0, '4:12' => 4.0 / 12.0, '5:12' => 5.0 / 12.0, '6:12' => 6.0 / 12.0, '7:12' => 7.0 / 12.0, '8:12' => 8.0 / 12.0, '9:12' => 9.0 / 12.0, '10:12' => 10.0 / 12.0, '11:12' => 11.0 / 12.0, '12:12' => 12.0 / 12.0 }[args[:geometry_roof_pitch]]
3034
2848
 
3035
2849
  # Argument error checks
@@ -3081,414 +2895,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3081
2895
  runner.registerInfo("Wrote file: #{hpxml_path}")
3082
2896
  end
3083
2897
 
3084
- def get_argument_values(runner, user_arguments)
3085
- return { simulation_control_timestep: runner.getOptionalIntegerArgumentValue('simulation_control_timestep', user_arguments),
3086
- simulation_control_run_period_begin_month: runner.getOptionalIntegerArgumentValue('simulation_control_run_period_begin_month', user_arguments),
3087
- simulation_control_run_period_begin_day_of_month: runner.getOptionalIntegerArgumentValue('simulation_control_run_period_begin_day_of_month', user_arguments),
3088
- simulation_control_run_period_end_month: runner.getOptionalIntegerArgumentValue('simulation_control_run_period_end_month', user_arguments),
3089
- simulation_control_run_period_end_day_of_month: runner.getOptionalIntegerArgumentValue('simulation_control_run_period_end_day_of_month', user_arguments),
3090
- simulation_control_run_period_calendar_year: runner.getOptionalIntegerArgumentValue('simulation_control_run_period_calendar_year', user_arguments),
3091
- simulation_control_daylight_saving_enabled: runner.getOptionalStringArgumentValue('simulation_control_daylight_saving_enabled', user_arguments),
3092
- simulation_control_daylight_saving_begin_month: runner.getOptionalIntegerArgumentValue('simulation_control_daylight_saving_begin_month', user_arguments),
3093
- simulation_control_daylight_saving_begin_day_of_month: runner.getOptionalIntegerArgumentValue('simulation_control_daylight_saving_begin_day_of_month', user_arguments),
3094
- simulation_control_daylight_saving_end_month: runner.getOptionalIntegerArgumentValue('simulation_control_daylight_saving_end_month', user_arguments),
3095
- simulation_control_daylight_saving_end_day_of_month: runner.getOptionalIntegerArgumentValue('simulation_control_daylight_saving_end_day_of_month', user_arguments),
3096
- schedules_type: runner.getStringArgumentValue('schedules_type', user_arguments),
3097
- schedules_path: runner.getOptionalStringArgumentValue('schedules_path', user_arguments),
3098
- schedules_vacancy_begin_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_begin_month', user_arguments),
3099
- schedules_vacancy_begin_day_of_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_begin_day_of_month', user_arguments),
3100
- schedules_vacancy_end_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_end_month', user_arguments),
3101
- schedules_vacancy_end_day_of_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_end_day_of_month', user_arguments),
3102
- schedules_random_seed: runner.getOptionalIntegerArgumentValue('schedules_random_seed', user_arguments),
3103
- weather_station_epw_filepath: runner.getStringArgumentValue('weather_station_epw_filepath', user_arguments),
3104
- site_type: runner.getOptionalStringArgumentValue('site_type', user_arguments),
3105
- geometry_unit_type: runner.getStringArgumentValue('geometry_unit_type', user_arguments),
3106
- geometry_cfa: runner.getDoubleArgumentValue('geometry_cfa', user_arguments),
3107
- geometry_num_floors_above_grade: runner.getIntegerArgumentValue('geometry_num_floors_above_grade', user_arguments),
3108
- geometry_wall_height: runner.getDoubleArgumentValue('geometry_wall_height', user_arguments),
3109
- geometry_orientation: runner.getDoubleArgumentValue('geometry_orientation', user_arguments),
3110
- geometry_aspect_ratio: runner.getDoubleArgumentValue('geometry_aspect_ratio', user_arguments),
3111
- geometry_corridor_position: runner.getStringArgumentValue('geometry_corridor_position', user_arguments),
3112
- geometry_corridor_width: runner.getDoubleArgumentValue('geometry_corridor_width', user_arguments),
3113
- geometry_inset_width: runner.getDoubleArgumentValue('geometry_inset_width', user_arguments),
3114
- geometry_inset_depth: runner.getDoubleArgumentValue('geometry_inset_depth', user_arguments),
3115
- geometry_inset_position: runner.getStringArgumentValue('geometry_inset_position', user_arguments),
3116
- geometry_balcony_depth: runner.getDoubleArgumentValue('geometry_balcony_depth', user_arguments),
3117
- geometry_garage_width: runner.getDoubleArgumentValue('geometry_garage_width', user_arguments),
3118
- geometry_garage_depth: runner.getDoubleArgumentValue('geometry_garage_depth', user_arguments),
3119
- geometry_garage_protrusion: runner.getDoubleArgumentValue('geometry_garage_protrusion', user_arguments),
3120
- geometry_garage_position: runner.getStringArgumentValue('geometry_garage_position', user_arguments),
3121
- geometry_foundation_type: runner.getStringArgumentValue('geometry_foundation_type', user_arguments),
3122
- geometry_foundation_height: runner.getDoubleArgumentValue('geometry_foundation_height', user_arguments),
3123
- geometry_foundation_height_above_grade: runner.getDoubleArgumentValue('geometry_foundation_height_above_grade', user_arguments),
3124
- geometry_roof_type: runner.getStringArgumentValue('geometry_roof_type', user_arguments),
3125
- geometry_roof_pitch: runner.getStringArgumentValue('geometry_roof_pitch', user_arguments),
3126
- geometry_attic_type: runner.getStringArgumentValue('geometry_attic_type', user_arguments),
3127
- geometry_eaves_depth: runner.getDoubleArgumentValue('geometry_eaves_depth', user_arguments),
3128
- geometry_num_bedrooms: runner.getIntegerArgumentValue('geometry_num_bedrooms', user_arguments),
3129
- geometry_num_bathrooms: runner.getStringArgumentValue('geometry_num_bathrooms', user_arguments),
3130
- geometry_num_occupants: runner.getStringArgumentValue('geometry_num_occupants', user_arguments),
3131
- geometry_level: runner.getOptionalStringArgumentValue('geometry_level', user_arguments),
3132
- geometry_horizontal_location: runner.getOptionalStringArgumentValue('geometry_horizontal_location', user_arguments),
3133
- geometry_building_num_units: runner.getOptionalIntegerArgumentValue('geometry_building_num_units', user_arguments),
3134
- geometry_building_num_bedrooms: runner.getOptionalIntegerArgumentValue('geometry_building_num_bedrooms', user_arguments),
3135
- floor_assembly_r: runner.getDoubleArgumentValue('floor_assembly_r', user_arguments),
3136
- foundation_wall_insulation_r: runner.getDoubleArgumentValue('foundation_wall_insulation_r', user_arguments),
3137
- foundation_wall_insulation_distance_to_top: runner.getDoubleArgumentValue('foundation_wall_insulation_distance_to_top', user_arguments),
3138
- foundation_wall_insulation_distance_to_bottom: runner.getDoubleArgumentValue('foundation_wall_insulation_distance_to_bottom', user_arguments),
3139
- foundation_wall_assembly_r: runner.getOptionalDoubleArgumentValue('foundation_wall_assembly_r', user_arguments),
3140
- foundation_wall_thickness: runner.getStringArgumentValue('foundation_wall_thickness', user_arguments),
3141
- slab_perimeter_insulation_r: runner.getDoubleArgumentValue('slab_perimeter_insulation_r', user_arguments),
3142
- slab_perimeter_depth: runner.getDoubleArgumentValue('slab_perimeter_depth', user_arguments),
3143
- slab_under_insulation_r: runner.getDoubleArgumentValue('slab_under_insulation_r', user_arguments),
3144
- slab_under_width: runner.getDoubleArgumentValue('slab_under_width', user_arguments),
3145
- slab_thickness: runner.getStringArgumentValue('slab_thickness', user_arguments),
3146
- slab_carpet_fraction: runner.getStringArgumentValue('slab_carpet_fraction', user_arguments),
3147
- slab_carpet_r: runner.getStringArgumentValue('slab_carpet_r', user_arguments),
3148
- ceiling_assembly_r: runner.getDoubleArgumentValue('ceiling_assembly_r', user_arguments),
3149
- roof_material_type: runner.getOptionalStringArgumentValue('roof_material_type', user_arguments),
3150
- roof_color: runner.getStringArgumentValue('roof_color', user_arguments),
3151
- roof_assembly_r: runner.getDoubleArgumentValue('roof_assembly_r', user_arguments),
3152
- roof_solar_absorptance: runner.getStringArgumentValue('roof_solar_absorptance', user_arguments),
3153
- roof_emittance: runner.getStringArgumentValue('roof_emittance', user_arguments),
3154
- roof_radiant_barrier: runner.getStringArgumentValue('roof_radiant_barrier', user_arguments),
3155
- roof_radiant_barrier_grade: runner.getStringArgumentValue('roof_radiant_barrier_grade', user_arguments),
3156
- neighbor_front_distance: runner.getDoubleArgumentValue('neighbor_front_distance', user_arguments),
3157
- neighbor_back_distance: runner.getDoubleArgumentValue('neighbor_back_distance', user_arguments),
3158
- neighbor_left_distance: runner.getDoubleArgumentValue('neighbor_left_distance', user_arguments),
3159
- neighbor_right_distance: runner.getDoubleArgumentValue('neighbor_right_distance', user_arguments),
3160
- neighbor_front_height: runner.getStringArgumentValue('neighbor_front_height', user_arguments),
3161
- neighbor_back_height: runner.getStringArgumentValue('neighbor_back_height', user_arguments),
3162
- neighbor_left_height: runner.getStringArgumentValue('neighbor_left_height', user_arguments),
3163
- neighbor_right_height: runner.getStringArgumentValue('neighbor_right_height', user_arguments),
3164
- wall_type: runner.getStringArgumentValue('wall_type', user_arguments),
3165
- wall_siding_type: runner.getOptionalStringArgumentValue('wall_siding_type', user_arguments),
3166
- wall_color: runner.getStringArgumentValue('wall_color', user_arguments),
3167
- wall_assembly_r: runner.getDoubleArgumentValue('wall_assembly_r', user_arguments),
3168
- wall_solar_absorptance: runner.getStringArgumentValue('wall_solar_absorptance', user_arguments),
3169
- wall_emittance: runner.getStringArgumentValue('wall_emittance', user_arguments),
3170
- window_front_wwr: runner.getDoubleArgumentValue('window_front_wwr', user_arguments),
3171
- window_back_wwr: runner.getDoubleArgumentValue('window_back_wwr', user_arguments),
3172
- window_left_wwr: runner.getDoubleArgumentValue('window_left_wwr', user_arguments),
3173
- window_right_wwr: runner.getDoubleArgumentValue('window_right_wwr', user_arguments),
3174
- window_area_front: runner.getDoubleArgumentValue('window_area_front', user_arguments),
3175
- window_area_back: runner.getDoubleArgumentValue('window_area_back', user_arguments),
3176
- window_area_left: runner.getDoubleArgumentValue('window_area_left', user_arguments),
3177
- window_area_right: runner.getDoubleArgumentValue('window_area_right', user_arguments),
3178
- window_aspect_ratio: runner.getDoubleArgumentValue('window_aspect_ratio', user_arguments),
3179
- window_fraction_operable: runner.getOptionalDoubleArgumentValue('window_fraction_operable', user_arguments),
3180
- window_ufactor: runner.getDoubleArgumentValue('window_ufactor', user_arguments),
3181
- window_shgc: runner.getDoubleArgumentValue('window_shgc', user_arguments),
3182
- window_interior_shading_winter: runner.getOptionalDoubleArgumentValue('window_interior_shading_winter', user_arguments),
3183
- window_interior_shading_summer: runner.getOptionalDoubleArgumentValue('window_interior_shading_summer', user_arguments),
3184
- overhangs_front_depth: runner.getDoubleArgumentValue('overhangs_front_depth', user_arguments),
3185
- overhangs_front_distance_to_top_of_window: runner.getDoubleArgumentValue('overhangs_front_distance_to_top_of_window', user_arguments),
3186
- overhangs_back_depth: runner.getDoubleArgumentValue('overhangs_back_depth', user_arguments),
3187
- overhangs_back_distance_to_top_of_window: runner.getDoubleArgumentValue('overhangs_back_distance_to_top_of_window', user_arguments),
3188
- overhangs_left_depth: runner.getDoubleArgumentValue('overhangs_left_depth', user_arguments),
3189
- overhangs_left_distance_to_top_of_window: runner.getDoubleArgumentValue('overhangs_left_distance_to_top_of_window', user_arguments),
3190
- overhangs_right_depth: runner.getDoubleArgumentValue('overhangs_right_depth', user_arguments),
3191
- overhangs_right_distance_to_top_of_window: runner.getDoubleArgumentValue('overhangs_right_distance_to_top_of_window', user_arguments),
3192
- skylight_area_front: runner.getDoubleArgumentValue('skylight_area_front', user_arguments),
3193
- skylight_area_back: runner.getDoubleArgumentValue('skylight_area_back', user_arguments),
3194
- skylight_area_left: runner.getDoubleArgumentValue('skylight_area_left', user_arguments),
3195
- skylight_area_right: runner.getDoubleArgumentValue('skylight_area_right', user_arguments),
3196
- skylight_ufactor: runner.getDoubleArgumentValue('skylight_ufactor', user_arguments),
3197
- skylight_shgc: runner.getDoubleArgumentValue('skylight_shgc', user_arguments),
3198
- door_area: runner.getDoubleArgumentValue('door_area', user_arguments),
3199
- door_rvalue: runner.getDoubleArgumentValue('door_rvalue', user_arguments),
3200
- air_leakage_units: runner.getStringArgumentValue('air_leakage_units', user_arguments),
3201
- air_leakage_house_pressure: runner.getDoubleArgumentValue('air_leakage_house_pressure', user_arguments),
3202
- air_leakage_value: runner.getDoubleArgumentValue('air_leakage_value', user_arguments),
3203
- air_leakage_shelter_coefficient: runner.getStringArgumentValue('air_leakage_shelter_coefficient', user_arguments),
3204
- heating_system_type: runner.getStringArgumentValue('heating_system_type', user_arguments),
3205
- heating_system_fuel: runner.getStringArgumentValue('heating_system_fuel', user_arguments),
3206
- heating_system_heating_efficiency: runner.getDoubleArgumentValue('heating_system_heating_efficiency', user_arguments),
3207
- heating_system_heating_capacity: runner.getStringArgumentValue('heating_system_heating_capacity', user_arguments),
3208
- heating_system_fraction_heat_load_served: runner.getDoubleArgumentValue('heating_system_fraction_heat_load_served', user_arguments),
3209
- heating_system_electric_auxiliary_energy: runner.getOptionalDoubleArgumentValue('heating_system_electric_auxiliary_energy', user_arguments),
3210
- heating_system_fan_power_watts_per_cfm: runner.getOptionalDoubleArgumentValue('heating_system_fan_power_watts_per_cfm', user_arguments),
3211
- heating_system_fan_power_watts: runner.getOptionalDoubleArgumentValue('heating_system_fan_power_watts', user_arguments),
3212
- heating_system_has_flue_or_chimney: runner.getBoolArgumentValue('heating_system_has_flue_or_chimney', user_arguments),
3213
- cooling_system_type: runner.getStringArgumentValue('cooling_system_type', user_arguments),
3214
- cooling_system_cooling_efficiency_seer: runner.getDoubleArgumentValue('cooling_system_cooling_efficiency_seer', user_arguments),
3215
- cooling_system_cooling_efficiency_eer: runner.getDoubleArgumentValue('cooling_system_cooling_efficiency_eer', user_arguments),
3216
- cooling_system_cooling_compressor_type: runner.getOptionalStringArgumentValue('cooling_system_cooling_compressor_type', user_arguments),
3217
- cooling_system_cooling_sensible_heat_fraction: runner.getOptionalDoubleArgumentValue('cooling_system_cooling_sensible_heat_fraction', user_arguments),
3218
- cooling_system_cooling_capacity: runner.getStringArgumentValue('cooling_system_cooling_capacity', user_arguments),
3219
- cooling_system_fraction_cool_load_served: runner.getDoubleArgumentValue('cooling_system_fraction_cool_load_served', user_arguments),
3220
- cooling_system_is_ducted: runner.getBoolArgumentValue('cooling_system_is_ducted', user_arguments),
3221
- cooling_system_fan_power_watts_per_cfm: runner.getOptionalDoubleArgumentValue('cooling_system_fan_power_watts_per_cfm', user_arguments),
3222
- heat_pump_type: runner.getStringArgumentValue('heat_pump_type', user_arguments),
3223
- heat_pump_heating_efficiency_hspf: runner.getDoubleArgumentValue('heat_pump_heating_efficiency_hspf', user_arguments),
3224
- heat_pump_heating_efficiency_cop: runner.getDoubleArgumentValue('heat_pump_heating_efficiency_cop', user_arguments),
3225
- heat_pump_cooling_efficiency_seer: runner.getDoubleArgumentValue('heat_pump_cooling_efficiency_seer', user_arguments),
3226
- heat_pump_cooling_efficiency_eer: runner.getDoubleArgumentValue('heat_pump_cooling_efficiency_eer', user_arguments),
3227
- heat_pump_cooling_compressor_type: runner.getOptionalStringArgumentValue('heat_pump_cooling_compressor_type', user_arguments),
3228
- heat_pump_cooling_sensible_heat_fraction: runner.getOptionalDoubleArgumentValue('heat_pump_cooling_sensible_heat_fraction', user_arguments),
3229
- heat_pump_heating_capacity: runner.getStringArgumentValue('heat_pump_heating_capacity', user_arguments),
3230
- heat_pump_heating_capacity_17F: runner.getStringArgumentValue('heat_pump_heating_capacity_17F', user_arguments),
3231
- heat_pump_cooling_capacity: runner.getStringArgumentValue('heat_pump_cooling_capacity', user_arguments),
3232
- heat_pump_fraction_heat_load_served: runner.getDoubleArgumentValue('heat_pump_fraction_heat_load_served', user_arguments),
3233
- heat_pump_fraction_cool_load_served: runner.getDoubleArgumentValue('heat_pump_fraction_cool_load_served', user_arguments),
3234
- heat_pump_backup_fuel: runner.getStringArgumentValue('heat_pump_backup_fuel', user_arguments),
3235
- heat_pump_backup_heating_efficiency: runner.getDoubleArgumentValue('heat_pump_backup_heating_efficiency', user_arguments),
3236
- heat_pump_backup_heating_capacity: runner.getStringArgumentValue('heat_pump_backup_heating_capacity', user_arguments),
3237
- heat_pump_backup_heating_switchover_temp: runner.getOptionalDoubleArgumentValue('heat_pump_backup_heating_switchover_temp', user_arguments),
3238
- heat_pump_mini_split_is_ducted: runner.getOptionalStringArgumentValue('heat_pump_mini_split_is_ducted', user_arguments),
3239
- heat_pump_pump_power_watts_per_ton: runner.getOptionalDoubleArgumentValue('heat_pump_pump_power_watts_per_ton', user_arguments),
3240
- heat_pump_fan_power_watts_per_cfm: runner.getOptionalDoubleArgumentValue('heat_pump_fan_power_watts_per_cfm', user_arguments),
3241
- setpoint_heating_weekday_temp: runner.getDoubleArgumentValue('setpoint_heating_weekday_temp', user_arguments),
3242
- setpoint_heating_weekend_temp: runner.getDoubleArgumentValue('setpoint_heating_weekend_temp', user_arguments),
3243
- setpoint_heating_weekday_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_heating_weekday_offset_magnitude', user_arguments),
3244
- setpoint_heating_weekend_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_heating_weekend_offset_magnitude', user_arguments),
3245
- setpoint_heating_weekday_schedule: runner.getOptionalStringArgumentValue('setpoint_heating_weekday_schedule', user_arguments),
3246
- setpoint_heating_weekend_schedule: runner.getOptionalStringArgumentValue('setpoint_heating_weekend_schedule', user_arguments),
3247
- setpoint_cooling_weekday_temp: runner.getDoubleArgumentValue('setpoint_cooling_weekday_temp', user_arguments),
3248
- setpoint_cooling_weekend_temp: runner.getDoubleArgumentValue('setpoint_cooling_weekend_temp', user_arguments),
3249
- setpoint_cooling_weekday_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_cooling_weekday_offset_magnitude', user_arguments),
3250
- setpoint_cooling_weekend_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_cooling_weekend_offset_magnitude', user_arguments),
3251
- setpoint_cooling_weekday_schedule: runner.getOptionalStringArgumentValue('setpoint_cooling_weekday_schedule', user_arguments),
3252
- setpoint_cooling_weekend_schedule: runner.getOptionalStringArgumentValue('setpoint_cooling_weekend_schedule', user_arguments),
3253
- ducts_supply_leakage_units: runner.getStringArgumentValue('ducts_supply_leakage_units', user_arguments),
3254
- ducts_return_leakage_units: runner.getStringArgumentValue('ducts_return_leakage_units', user_arguments),
3255
- ducts_supply_leakage_value: runner.getDoubleArgumentValue('ducts_supply_leakage_value', user_arguments),
3256
- ducts_return_leakage_value: runner.getDoubleArgumentValue('ducts_return_leakage_value', user_arguments),
3257
- ducts_supply_insulation_r: runner.getDoubleArgumentValue('ducts_supply_insulation_r', user_arguments),
3258
- ducts_return_insulation_r: runner.getDoubleArgumentValue('ducts_return_insulation_r', user_arguments),
3259
- ducts_supply_location: runner.getStringArgumentValue('ducts_supply_location', user_arguments),
3260
- ducts_return_location: runner.getStringArgumentValue('ducts_return_location', user_arguments),
3261
- ducts_supply_surface_area: runner.getStringArgumentValue('ducts_supply_surface_area', user_arguments),
3262
- ducts_return_surface_area: runner.getStringArgumentValue('ducts_return_surface_area', user_arguments),
3263
- ducts_number_of_return_registers: runner.getStringArgumentValue('ducts_number_of_return_registers', user_arguments),
3264
- heating_system_type_2: runner.getStringArgumentValue('heating_system_type_2', user_arguments),
3265
- heating_system_fuel_2: runner.getStringArgumentValue('heating_system_fuel_2', user_arguments),
3266
- heating_system_heating_efficiency_2: runner.getDoubleArgumentValue('heating_system_heating_efficiency_2', user_arguments),
3267
- heating_system_heating_capacity_2: runner.getStringArgumentValue('heating_system_heating_capacity_2', user_arguments),
3268
- heating_system_fraction_heat_load_served_2: runner.getDoubleArgumentValue('heating_system_fraction_heat_load_served_2', user_arguments),
3269
- heating_system_electric_auxiliary_energy_2: runner.getOptionalDoubleArgumentValue('heating_system_electric_auxiliary_energy_2', user_arguments),
3270
- heating_system_fan_power_watts_2: runner.getOptionalDoubleArgumentValue('heating_system_fan_power_watts_2', user_arguments),
3271
- heating_system_has_flue_or_chimney_2: runner.getBoolArgumentValue('heating_system_has_flue_or_chimney_2', user_arguments),
3272
- mech_vent_fan_type: runner.getStringArgumentValue('mech_vent_fan_type', user_arguments),
3273
- mech_vent_flow_rate: runner.getDoubleArgumentValue('mech_vent_flow_rate', user_arguments),
3274
- mech_vent_hours_in_operation: runner.getDoubleArgumentValue('mech_vent_hours_in_operation', user_arguments),
3275
- mech_vent_total_recovery_efficiency_type: runner.getStringArgumentValue('mech_vent_total_recovery_efficiency_type', user_arguments),
3276
- mech_vent_total_recovery_efficiency: runner.getDoubleArgumentValue('mech_vent_total_recovery_efficiency', user_arguments),
3277
- mech_vent_sensible_recovery_efficiency_type: runner.getStringArgumentValue('mech_vent_sensible_recovery_efficiency_type', user_arguments),
3278
- mech_vent_sensible_recovery_efficiency: runner.getDoubleArgumentValue('mech_vent_sensible_recovery_efficiency', user_arguments),
3279
- mech_vent_fan_power: runner.getDoubleArgumentValue('mech_vent_fan_power', user_arguments),
3280
- mech_vent_num_units_served: runner.getIntegerArgumentValue('mech_vent_num_units_served', user_arguments),
3281
- shared_mech_vent_frac_recirculation: runner.getOptionalDoubleArgumentValue('shared_mech_vent_frac_recirculation', user_arguments),
3282
- shared_mech_vent_preheating_fuel: runner.getOptionalStringArgumentValue('shared_mech_vent_preheating_fuel', user_arguments),
3283
- shared_mech_vent_preheating_efficiency: runner.getOptionalDoubleArgumentValue('shared_mech_vent_preheating_efficiency', user_arguments),
3284
- shared_mech_vent_preheating_fraction_heat_load_served: runner.getOptionalDoubleArgumentValue('shared_mech_vent_preheating_fraction_heat_load_served', user_arguments),
3285
- shared_mech_vent_precooling_fuel: runner.getOptionalStringArgumentValue('shared_mech_vent_precooling_fuel', user_arguments),
3286
- shared_mech_vent_precooling_efficiency: runner.getOptionalDoubleArgumentValue('shared_mech_vent_precooling_efficiency', user_arguments),
3287
- shared_mech_vent_precooling_fraction_cool_load_served: runner.getOptionalDoubleArgumentValue('shared_mech_vent_precooling_fraction_cool_load_served', user_arguments),
3288
- mech_vent_fan_type_2: runner.getStringArgumentValue('mech_vent_fan_type_2', user_arguments),
3289
- mech_vent_flow_rate_2: runner.getDoubleArgumentValue('mech_vent_flow_rate_2', user_arguments),
3290
- mech_vent_hours_in_operation_2: runner.getDoubleArgumentValue('mech_vent_hours_in_operation_2', user_arguments),
3291
- mech_vent_total_recovery_efficiency_type_2: runner.getStringArgumentValue('mech_vent_total_recovery_efficiency_type_2', user_arguments),
3292
- mech_vent_total_recovery_efficiency_2: runner.getDoubleArgumentValue('mech_vent_total_recovery_efficiency_2', user_arguments),
3293
- mech_vent_sensible_recovery_efficiency_type_2: runner.getStringArgumentValue('mech_vent_sensible_recovery_efficiency_type_2', user_arguments),
3294
- mech_vent_sensible_recovery_efficiency_2: runner.getDoubleArgumentValue('mech_vent_sensible_recovery_efficiency_2', user_arguments),
3295
- mech_vent_fan_power_2: runner.getDoubleArgumentValue('mech_vent_fan_power_2', user_arguments),
3296
- kitchen_fans_present: runner.getBoolArgumentValue('kitchen_fans_present', user_arguments),
3297
- kitchen_fans_quantity: runner.getOptionalIntegerArgumentValue('kitchen_fans_quantity', user_arguments),
3298
- kitchen_fans_flow_rate: runner.getOptionalDoubleArgumentValue('kitchen_fans_flow_rate', user_arguments),
3299
- kitchen_fans_hours_in_operation: runner.getOptionalDoubleArgumentValue('kitchen_fans_hours_in_operation', user_arguments),
3300
- kitchen_fans_power: runner.getOptionalDoubleArgumentValue('kitchen_fans_power', user_arguments),
3301
- kitchen_fans_start_hour: runner.getOptionalIntegerArgumentValue('kitchen_fans_start_hour', user_arguments),
3302
- bathroom_fans_present: runner.getBoolArgumentValue('bathroom_fans_present', user_arguments),
3303
- bathroom_fans_quantity: runner.getOptionalIntegerArgumentValue('bathroom_fans_quantity', user_arguments),
3304
- bathroom_fans_flow_rate: runner.getOptionalDoubleArgumentValue('bathroom_fans_flow_rate', user_arguments),
3305
- bathroom_fans_hours_in_operation: runner.getOptionalDoubleArgumentValue('bathroom_fans_hours_in_operation', user_arguments),
3306
- bathroom_fans_power: runner.getOptionalDoubleArgumentValue('bathroom_fans_power', user_arguments),
3307
- bathroom_fans_start_hour: runner.getOptionalIntegerArgumentValue('bathroom_fans_start_hour', user_arguments),
3308
- whole_house_fan_present: runner.getBoolArgumentValue('whole_house_fan_present', user_arguments),
3309
- whole_house_fan_flow_rate: runner.getDoubleArgumentValue('whole_house_fan_flow_rate', user_arguments),
3310
- whole_house_fan_power: runner.getDoubleArgumentValue('whole_house_fan_power', user_arguments),
3311
- water_heater_type: runner.getStringArgumentValue('water_heater_type', user_arguments),
3312
- water_heater_fuel_type: runner.getStringArgumentValue('water_heater_fuel_type', user_arguments),
3313
- water_heater_location: runner.getStringArgumentValue('water_heater_location', user_arguments),
3314
- water_heater_tank_volume: runner.getStringArgumentValue('water_heater_tank_volume', user_arguments),
3315
- water_heater_heating_capacity: runner.getStringArgumentValue('water_heater_heating_capacity', user_arguments),
3316
- water_heater_efficiency_type: runner.getStringArgumentValue('water_heater_efficiency_type', user_arguments),
3317
- water_heater_efficiency: runner.getDoubleArgumentValue('water_heater_efficiency', user_arguments),
3318
- water_heater_first_hour_rating: runner.getDoubleArgumentValue('water_heater_first_hour_rating', user_arguments),
3319
- water_heater_recovery_efficiency: runner.getStringArgumentValue('water_heater_recovery_efficiency', user_arguments),
3320
- water_heater_standby_loss: runner.getOptionalDoubleArgumentValue('water_heater_standby_loss', user_arguments),
3321
- water_heater_jacket_rvalue: runner.getOptionalDoubleArgumentValue('water_heater_jacket_rvalue', user_arguments),
3322
- water_heater_setpoint_temperature: runner.getStringArgumentValue('water_heater_setpoint_temperature', user_arguments),
3323
- water_heater_has_flue_or_chimney: runner.getBoolArgumentValue('water_heater_has_flue_or_chimney', user_arguments),
3324
- water_heater_num_units_served: runner.getIntegerArgumentValue('water_heater_num_units_served', user_arguments),
3325
- dhw_distribution_system_type: runner.getStringArgumentValue('dhw_distribution_system_type', user_arguments),
3326
- dhw_distribution_standard_piping_length: runner.getStringArgumentValue('dhw_distribution_standard_piping_length', user_arguments),
3327
- dhw_distribution_recirc_control_type: runner.getStringArgumentValue('dhw_distribution_recirc_control_type', user_arguments),
3328
- dhw_distribution_recirc_piping_length: runner.getStringArgumentValue('dhw_distribution_recirc_piping_length', user_arguments),
3329
- dhw_distribution_recirc_branch_piping_length: runner.getStringArgumentValue('dhw_distribution_recirc_branch_piping_length', user_arguments),
3330
- dhw_distribution_recirc_pump_power: runner.getStringArgumentValue('dhw_distribution_recirc_pump_power', user_arguments),
3331
- dhw_distribution_pipe_r: runner.getStringArgumentValue('dhw_distribution_pipe_r', user_arguments),
3332
- dwhr_facilities_connected: runner.getStringArgumentValue('dwhr_facilities_connected', user_arguments),
3333
- dwhr_equal_flow: runner.getBoolArgumentValue('dwhr_equal_flow', user_arguments),
3334
- dwhr_efficiency: runner.getDoubleArgumentValue('dwhr_efficiency', user_arguments),
3335
- water_fixtures_shower_low_flow: runner.getBoolArgumentValue('water_fixtures_shower_low_flow', user_arguments),
3336
- water_fixtures_sink_low_flow: runner.getBoolArgumentValue('water_fixtures_sink_low_flow', user_arguments),
3337
- water_fixtures_usage_multiplier: runner.getDoubleArgumentValue('water_fixtures_usage_multiplier', user_arguments),
3338
- solar_thermal_system_type: runner.getStringArgumentValue('solar_thermal_system_type', user_arguments),
3339
- solar_thermal_collector_area: runner.getDoubleArgumentValue('solar_thermal_collector_area', user_arguments),
3340
- solar_thermal_collector_loop_type: runner.getStringArgumentValue('solar_thermal_collector_loop_type', user_arguments),
3341
- solar_thermal_collector_type: runner.getStringArgumentValue('solar_thermal_collector_type', user_arguments),
3342
- solar_thermal_collector_azimuth: runner.getDoubleArgumentValue('solar_thermal_collector_azimuth', user_arguments),
3343
- solar_thermal_collector_tilt: runner.getStringArgumentValue('solar_thermal_collector_tilt', user_arguments),
3344
- solar_thermal_collector_rated_optical_efficiency: runner.getDoubleArgumentValue('solar_thermal_collector_rated_optical_efficiency', user_arguments),
3345
- solar_thermal_collector_rated_thermal_losses: runner.getDoubleArgumentValue('solar_thermal_collector_rated_thermal_losses', user_arguments),
3346
- solar_thermal_storage_volume: runner.getStringArgumentValue('solar_thermal_storage_volume', user_arguments),
3347
- solar_thermal_solar_fraction: runner.getDoubleArgumentValue('solar_thermal_solar_fraction', user_arguments),
3348
- pv_system_module_type_1: runner.getStringArgumentValue('pv_system_module_type_1', user_arguments),
3349
- pv_system_location_1: runner.getStringArgumentValue('pv_system_location_1', user_arguments),
3350
- pv_system_tracking_1: runner.getStringArgumentValue('pv_system_tracking_1', user_arguments),
3351
- pv_system_array_azimuth_1: runner.getDoubleArgumentValue('pv_system_array_azimuth_1', user_arguments),
3352
- pv_system_array_tilt_1: runner.getStringArgumentValue('pv_system_array_tilt_1', user_arguments),
3353
- pv_system_max_power_output_1: runner.getDoubleArgumentValue('pv_system_max_power_output_1', user_arguments),
3354
- pv_system_inverter_efficiency_1: runner.getOptionalDoubleArgumentValue('pv_system_inverter_efficiency_1', user_arguments),
3355
- pv_system_system_losses_fraction_1: runner.getOptionalDoubleArgumentValue('pv_system_system_losses_fraction_1', user_arguments),
3356
- pv_system_num_units_served_1: runner.getIntegerArgumentValue('pv_system_num_units_served_1', user_arguments),
3357
- pv_system_module_type_2: runner.getStringArgumentValue('pv_system_module_type_2', user_arguments),
3358
- pv_system_location_2: runner.getStringArgumentValue('pv_system_location_2', user_arguments),
3359
- pv_system_tracking_2: runner.getStringArgumentValue('pv_system_tracking_2', user_arguments),
3360
- pv_system_array_azimuth_2: runner.getDoubleArgumentValue('pv_system_array_azimuth_2', user_arguments),
3361
- pv_system_array_tilt_2: runner.getStringArgumentValue('pv_system_array_tilt_2', user_arguments),
3362
- pv_system_max_power_output_2: runner.getDoubleArgumentValue('pv_system_max_power_output_2', user_arguments),
3363
- pv_system_inverter_efficiency_2: runner.getOptionalDoubleArgumentValue('pv_system_inverter_efficiency_2', user_arguments),
3364
- pv_system_system_losses_fraction_2: runner.getOptionalDoubleArgumentValue('pv_system_system_losses_fraction_2', user_arguments),
3365
- pv_system_num_units_served_2: runner.getIntegerArgumentValue('pv_system_num_units_served_2', user_arguments),
3366
- lighting_fraction_cfl_interior: runner.getDoubleArgumentValue('lighting_fraction_cfl_interior', user_arguments),
3367
- lighting_fraction_lfl_interior: runner.getDoubleArgumentValue('lighting_fraction_lfl_interior', user_arguments),
3368
- lighting_fraction_led_interior: runner.getDoubleArgumentValue('lighting_fraction_led_interior', user_arguments),
3369
- lighting_usage_multiplier_interior: runner.getDoubleArgumentValue('lighting_usage_multiplier_interior', user_arguments),
3370
- lighting_fraction_cfl_exterior: runner.getDoubleArgumentValue('lighting_fraction_cfl_exterior', user_arguments),
3371
- lighting_fraction_lfl_exterior: runner.getDoubleArgumentValue('lighting_fraction_lfl_exterior', user_arguments),
3372
- lighting_fraction_led_exterior: runner.getDoubleArgumentValue('lighting_fraction_led_exterior', user_arguments),
3373
- lighting_usage_multiplier_exterior: runner.getDoubleArgumentValue('lighting_usage_multiplier_exterior', user_arguments),
3374
- lighting_fraction_cfl_garage: runner.getDoubleArgumentValue('lighting_fraction_cfl_garage', user_arguments),
3375
- lighting_fraction_lfl_garage: runner.getDoubleArgumentValue('lighting_fraction_lfl_garage', user_arguments),
3376
- lighting_fraction_led_garage: runner.getDoubleArgumentValue('lighting_fraction_led_garage', user_arguments),
3377
- lighting_usage_multiplier_garage: runner.getDoubleArgumentValue('lighting_usage_multiplier_garage', user_arguments),
3378
- holiday_lighting_present: runner.getBoolArgumentValue('holiday_lighting_present', user_arguments),
3379
- holiday_lighting_daily_kwh: runner.getStringArgumentValue('holiday_lighting_daily_kwh', user_arguments),
3380
- holiday_lighting_period_begin_month: runner.getStringArgumentValue('holiday_lighting_period_begin_month', user_arguments),
3381
- holiday_lighting_period_begin_day_of_month: runner.getStringArgumentValue('holiday_lighting_period_begin_day_of_month', user_arguments),
3382
- holiday_lighting_period_end_month: runner.getStringArgumentValue('holiday_lighting_period_end_month', user_arguments),
3383
- holiday_lighting_period_end_day_of_month: runner.getStringArgumentValue('holiday_lighting_period_end_day_of_month', user_arguments),
3384
- dehumidifier_present: runner.getBoolArgumentValue('dehumidifier_present', user_arguments),
3385
- dehumidifier_type: runner.getStringArgumentValue('dehumidifier_type', user_arguments),
3386
- dehumidifier_efficiency_type: runner.getStringArgumentValue('dehumidifier_efficiency_type', user_arguments),
3387
- dehumidifier_efficiency_ef: runner.getDoubleArgumentValue('dehumidifier_efficiency_ef', user_arguments),
3388
- dehumidifier_efficiency_ief: runner.getDoubleArgumentValue('dehumidifier_efficiency_ief', user_arguments),
3389
- dehumidifier_capacity: runner.getDoubleArgumentValue('dehumidifier_capacity', user_arguments),
3390
- dehumidifier_rh_setpoint: runner.getDoubleArgumentValue('dehumidifier_rh_setpoint', user_arguments),
3391
- dehumidifier_fraction_dehumidification_load_served: runner.getDoubleArgumentValue('dehumidifier_fraction_dehumidification_load_served', user_arguments),
3392
- clothes_washer_present: runner.getBoolArgumentValue('clothes_washer_present', user_arguments),
3393
- clothes_washer_location: runner.getStringArgumentValue('clothes_washer_location', user_arguments),
3394
- clothes_washer_efficiency_type: runner.getStringArgumentValue('clothes_washer_efficiency_type', user_arguments),
3395
- clothes_washer_efficiency_mef: runner.getStringArgumentValue('clothes_washer_efficiency_mef', user_arguments),
3396
- clothes_washer_efficiency_imef: runner.getStringArgumentValue('clothes_washer_efficiency_imef', user_arguments),
3397
- clothes_washer_rated_annual_kwh: runner.getStringArgumentValue('clothes_washer_rated_annual_kwh', user_arguments),
3398
- clothes_washer_label_electric_rate: runner.getStringArgumentValue('clothes_washer_label_electric_rate', user_arguments),
3399
- clothes_washer_label_gas_rate: runner.getStringArgumentValue('clothes_washer_label_gas_rate', user_arguments),
3400
- clothes_washer_label_annual_gas_cost: runner.getStringArgumentValue('clothes_washer_label_annual_gas_cost', user_arguments),
3401
- clothes_washer_label_usage: runner.getStringArgumentValue('clothes_washer_label_usage', user_arguments),
3402
- clothes_washer_capacity: runner.getStringArgumentValue('clothes_washer_capacity', user_arguments),
3403
- clothes_washer_usage_multiplier: runner.getDoubleArgumentValue('clothes_washer_usage_multiplier', user_arguments),
3404
- clothes_dryer_present: runner.getBoolArgumentValue('clothes_dryer_present', user_arguments),
3405
- clothes_dryer_location: runner.getStringArgumentValue('clothes_dryer_location', user_arguments),
3406
- clothes_dryer_fuel_type: runner.getStringArgumentValue('clothes_dryer_fuel_type', user_arguments),
3407
- clothes_dryer_efficiency_type: runner.getStringArgumentValue('clothes_dryer_efficiency_type', user_arguments),
3408
- clothes_dryer_efficiency_ef: runner.getDoubleArgumentValue('clothes_dryer_efficiency_ef', user_arguments),
3409
- clothes_dryer_efficiency_cef: runner.getStringArgumentValue('clothes_dryer_efficiency_cef', user_arguments),
3410
- clothes_dryer_control_type: runner.getStringArgumentValue('clothes_dryer_control_type', user_arguments),
3411
- clothes_dryer_vented_flow_rate: runner.getStringArgumentValue('clothes_dryer_vented_flow_rate', user_arguments),
3412
- clothes_dryer_usage_multiplier: runner.getDoubleArgumentValue('clothes_dryer_usage_multiplier', user_arguments),
3413
- dishwasher_present: runner.getBoolArgumentValue('dishwasher_present', user_arguments),
3414
- dishwasher_location: runner.getStringArgumentValue('dishwasher_location', user_arguments),
3415
- dishwasher_efficiency_type: runner.getStringArgumentValue('dishwasher_efficiency_type', user_arguments),
3416
- dishwasher_efficiency_kwh: runner.getStringArgumentValue('dishwasher_efficiency_kwh', user_arguments),
3417
- dishwasher_efficiency_ef: runner.getDoubleArgumentValue('dishwasher_efficiency_ef', user_arguments),
3418
- dishwasher_label_electric_rate: runner.getStringArgumentValue('dishwasher_label_electric_rate', user_arguments),
3419
- dishwasher_label_gas_rate: runner.getStringArgumentValue('dishwasher_label_gas_rate', user_arguments),
3420
- dishwasher_label_annual_gas_cost: runner.getStringArgumentValue('dishwasher_label_annual_gas_cost', user_arguments),
3421
- dishwasher_label_usage: runner.getStringArgumentValue('dishwasher_label_usage', user_arguments),
3422
- dishwasher_place_setting_capacity: runner.getStringArgumentValue('dishwasher_place_setting_capacity', user_arguments),
3423
- dishwasher_usage_multiplier: runner.getDoubleArgumentValue('dishwasher_usage_multiplier', user_arguments),
3424
- refrigerator_present: runner.getBoolArgumentValue('refrigerator_present', user_arguments),
3425
- refrigerator_location: runner.getStringArgumentValue('refrigerator_location', user_arguments),
3426
- refrigerator_rated_annual_kwh: runner.getStringArgumentValue('refrigerator_rated_annual_kwh', user_arguments),
3427
- refrigerator_usage_multiplier: runner.getDoubleArgumentValue('refrigerator_usage_multiplier', user_arguments),
3428
- extra_refrigerator_present: runner.getBoolArgumentValue('extra_refrigerator_present', user_arguments),
3429
- extra_refrigerator_location: runner.getStringArgumentValue('extra_refrigerator_location', user_arguments),
3430
- extra_refrigerator_rated_annual_kwh: runner.getStringArgumentValue('extra_refrigerator_rated_annual_kwh', user_arguments),
3431
- extra_refrigerator_usage_multiplier: runner.getDoubleArgumentValue('extra_refrigerator_usage_multiplier', user_arguments),
3432
- freezer_present: runner.getBoolArgumentValue('freezer_present', user_arguments),
3433
- freezer_location: runner.getStringArgumentValue('freezer_location', user_arguments),
3434
- freezer_rated_annual_kwh: runner.getStringArgumentValue('freezer_rated_annual_kwh', user_arguments),
3435
- freezer_usage_multiplier: runner.getDoubleArgumentValue('freezer_usage_multiplier', user_arguments),
3436
- cooking_range_oven_present: runner.getBoolArgumentValue('cooking_range_oven_present', user_arguments),
3437
- cooking_range_oven_location: runner.getStringArgumentValue('cooking_range_oven_location', user_arguments),
3438
- cooking_range_oven_fuel_type: runner.getStringArgumentValue('cooking_range_oven_fuel_type', user_arguments),
3439
- cooking_range_oven_is_induction: runner.getOptionalStringArgumentValue('cooking_range_oven_is_induction', user_arguments),
3440
- cooking_range_oven_is_convection: runner.getOptionalStringArgumentValue('cooking_range_oven_is_convection', user_arguments),
3441
- cooking_range_oven_usage_multiplier: runner.getDoubleArgumentValue('cooking_range_oven_usage_multiplier', user_arguments),
3442
- ceiling_fan_present: runner.getBoolArgumentValue('ceiling_fan_present', user_arguments),
3443
- ceiling_fan_efficiency: runner.getStringArgumentValue('ceiling_fan_efficiency', user_arguments),
3444
- ceiling_fan_quantity: runner.getStringArgumentValue('ceiling_fan_quantity', user_arguments),
3445
- ceiling_fan_cooling_setpoint_temp_offset: runner.getDoubleArgumentValue('ceiling_fan_cooling_setpoint_temp_offset', user_arguments),
3446
- plug_loads_television_annual_kwh: runner.getStringArgumentValue('plug_loads_television_annual_kwh', user_arguments),
3447
- plug_loads_television_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_television_usage_multiplier', user_arguments),
3448
- plug_loads_television_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_television_usage_multiplier_2', user_arguments),
3449
- plug_loads_other_annual_kwh: runner.getStringArgumentValue('plug_loads_other_annual_kwh', user_arguments),
3450
- plug_loads_other_frac_sensible: runner.getStringArgumentValue('plug_loads_other_frac_sensible', user_arguments),
3451
- plug_loads_other_frac_latent: runner.getStringArgumentValue('plug_loads_other_frac_latent', user_arguments),
3452
- plug_loads_other_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_other_usage_multiplier', user_arguments),
3453
- plug_loads_other_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_other_usage_multiplier_2', user_arguments),
3454
- plug_loads_well_pump_present: runner.getBoolArgumentValue('plug_loads_well_pump_present', user_arguments),
3455
- plug_loads_well_pump_annual_kwh: runner.getStringArgumentValue('plug_loads_well_pump_annual_kwh', user_arguments),
3456
- plug_loads_well_pump_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_well_pump_usage_multiplier', user_arguments),
3457
- plug_loads_well_pump_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_well_pump_usage_multiplier_2', user_arguments),
3458
- plug_loads_vehicle_present: runner.getBoolArgumentValue('plug_loads_vehicle_present', user_arguments),
3459
- plug_loads_vehicle_annual_kwh: runner.getStringArgumentValue('plug_loads_vehicle_annual_kwh', user_arguments),
3460
- plug_loads_vehicle_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_vehicle_usage_multiplier', user_arguments),
3461
- plug_loads_vehicle_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_vehicle_usage_multiplier_2', user_arguments),
3462
- fuel_loads_grill_present: runner.getBoolArgumentValue('fuel_loads_grill_present', user_arguments),
3463
- fuel_loads_grill_fuel_type: runner.getStringArgumentValue('fuel_loads_grill_fuel_type', user_arguments),
3464
- fuel_loads_grill_annual_therm: runner.getStringArgumentValue('fuel_loads_grill_annual_therm', user_arguments),
3465
- fuel_loads_grill_usage_multiplier: runner.getDoubleArgumentValue('fuel_loads_grill_usage_multiplier', user_arguments),
3466
- fuel_loads_lighting_present: runner.getBoolArgumentValue('fuel_loads_lighting_present', user_arguments),
3467
- fuel_loads_lighting_fuel_type: runner.getStringArgumentValue('fuel_loads_lighting_fuel_type', user_arguments),
3468
- fuel_loads_lighting_annual_therm: runner.getStringArgumentValue('fuel_loads_lighting_annual_therm', user_arguments),
3469
- fuel_loads_lighting_usage_multiplier: runner.getDoubleArgumentValue('fuel_loads_lighting_usage_multiplier', user_arguments),
3470
- fuel_loads_fireplace_present: runner.getBoolArgumentValue('fuel_loads_fireplace_present', user_arguments),
3471
- fuel_loads_fireplace_fuel_type: runner.getStringArgumentValue('fuel_loads_fireplace_fuel_type', user_arguments),
3472
- fuel_loads_fireplace_annual_therm: runner.getStringArgumentValue('fuel_loads_fireplace_annual_therm', user_arguments),
3473
- fuel_loads_fireplace_frac_sensible: runner.getStringArgumentValue('fuel_loads_fireplace_frac_sensible', user_arguments),
3474
- fuel_loads_fireplace_frac_latent: runner.getStringArgumentValue('fuel_loads_fireplace_frac_latent', user_arguments),
3475
- fuel_loads_fireplace_usage_multiplier: runner.getDoubleArgumentValue('fuel_loads_fireplace_usage_multiplier', user_arguments),
3476
- pool_present: runner.getBoolArgumentValue('pool_present', user_arguments),
3477
- pool_pump_annual_kwh: runner.getStringArgumentValue('pool_pump_annual_kwh', user_arguments),
3478
- pool_pump_usage_multiplier: runner.getDoubleArgumentValue('pool_pump_usage_multiplier', user_arguments),
3479
- pool_heater_type: runner.getStringArgumentValue('pool_heater_type', user_arguments),
3480
- pool_heater_annual_kwh: runner.getStringArgumentValue('pool_heater_annual_kwh', user_arguments),
3481
- pool_heater_annual_therm: runner.getStringArgumentValue('pool_heater_annual_therm', user_arguments),
3482
- pool_heater_usage_multiplier: runner.getDoubleArgumentValue('pool_heater_usage_multiplier', user_arguments),
3483
- hot_tub_present: runner.getBoolArgumentValue('hot_tub_present', user_arguments),
3484
- hot_tub_pump_annual_kwh: runner.getStringArgumentValue('hot_tub_pump_annual_kwh', user_arguments),
3485
- hot_tub_pump_usage_multiplier: runner.getDoubleArgumentValue('hot_tub_pump_usage_multiplier', user_arguments),
3486
- hot_tub_heater_type: runner.getStringArgumentValue('hot_tub_heater_type', user_arguments),
3487
- hot_tub_heater_annual_kwh: runner.getStringArgumentValue('hot_tub_heater_annual_kwh', user_arguments),
3488
- hot_tub_heater_annual_therm: runner.getStringArgumentValue('hot_tub_heater_annual_therm', user_arguments),
3489
- hot_tub_heater_usage_multiplier: runner.getDoubleArgumentValue('hot_tub_heater_usage_multiplier', user_arguments) }
3490
- end
3491
-
3492
2898
  def validate_arguments(args)
3493
2899
  warnings = []
3494
2900
  errors = []
@@ -3554,9 +2960,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3554
2960
  errors << "ducts_supply_location=#{args[:ducts_supply_location]} and ducts_supply_surface_area=#{args[:ducts_supply_surface_area]} and ducts_return_location=#{args[:ducts_return_location]} and ducts_return_surface_area=#{args[:ducts_return_surface_area]}" if error
3555
2961
 
3556
2962
  # second heating system fraction heat load served non less than 50%
3557
- warning = (args[:heating_system_type_2] != 'none') && (args[:heating_system_fraction_heat_load_served_2] >= 0.5)
2963
+ warning = (args[:heating_system_type_2] != 'none') && (args[:heating_system_fraction_heat_load_served_2] >= 0.5) && (args[:heating_system_fraction_heat_load_served_2] < 1.0)
3558
2964
  warnings << "heating_system_type_2=#{args[:heating_system_type_2]} and heating_system_fraction_heat_load_served_2=#{args[:heating_system_fraction_heat_load_served_2]}" if warning
3559
2965
 
2966
+ # second heating system fraction heat load served is 100%
2967
+ error = (args[:heating_system_type_2] != 'none') && (args[:heating_system_fraction_heat_load_served_2] == 1.0)
2968
+ errors << "heating_system_type_2=#{args[:heating_system_type_2]} and heating_system_fraction_heat_load_served_2=#{args[:heating_system_fraction_heat_load_served_2]}" if error
2969
+
2970
+ # second heating system but no primary heating system
2971
+ error = (args[:heating_system_type] == 'none') && (args[:heat_pump_type] == 'none') && (args[:heating_system_type_2] != 'none')
2972
+ errors << "heating_system_type=#{args[:heating_system_type]} and heat_pump_type=#{args[:heat_pump_type]} and heating_system_type_2=#{args[:heating_system_type_2]}" if error
2973
+
3560
2974
  # single-family attached and num units, horizontal location not specified
3561
2975
  error = (args[:geometry_unit_type] == HPXML::ResidentialTypeSFA) && (!args[:geometry_building_num_units].is_initialized || !args[:geometry_horizontal_location].is_initialized)
3562
2976
  errors << "geometry_unit_type=#{args[:geometry_unit_type]} and geometry_building_num_units=#{args[:geometry_building_num_units].is_initialized} and geometry_horizontal_location=#{args[:geometry_horizontal_location].is_initialized}" if error
@@ -3581,18 +2995,56 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3581
2995
  warning = (args[:geometry_attic_type] == HPXML::AtticTypeConditioned) && (args[:geometry_roof_type] != 'flat') && (args[:ceiling_assembly_r] > 2.1)
3582
2996
  warnings << "geometry_attic_type=#{args[:geometry_attic_type]} and ceiling_assembly_r=#{args[:ceiling_assembly_r]}" if warning
3583
2997
 
2998
+ # conditioned attic but only one above-grade floor
2999
+ error = (args[:geometry_num_floors_above_grade] == 1 && args[:geometry_attic_type] == HPXML::AtticTypeConditioned)
3000
+ errors << "geometry_num_floors_above_grade=#{args[:geometry_num_floors_above_grade]} and geometry_attic_type=#{args[:geometry_attic_type]}" if error
3001
+
3584
3002
  # dhw indirect but no boiler
3585
3003
  error = ((args[:water_heater_type] == HPXML::WaterHeaterTypeCombiStorage) || (args[:water_heater_type] == HPXML::WaterHeaterTypeCombiTankless)) && (args[:heating_system_type] != HPXML::HVACTypeBoiler)
3586
3004
  errors << "water_heater_type=#{args[:water_heater_type]} and heating_system_type=#{args[:heating_system_type]}" if error
3587
3005
 
3588
- # no plug loads but specifying usage multipliers
3589
- warning = (args[:plug_loads_television_annual_kwh] == 0.0 && (args[:plug_loads_television_usage_multiplier] != 0.0 || args[:plug_loads_television_usage_multiplier_2] != 0.0)) || (args[:plug_loads_other_annual_kwh] == 0.0 && (args[:plug_loads_other_usage_multiplier] != 0.0 || args[:plug_loads_other_usage_multiplier_2] != 0.0)) || (!args[:plug_loads_well_pump_present] && (args[:plug_loads_well_pump_usage_multiplier] != 0.0 || args[:plug_loads_well_pump_usage_multiplier_2] != 0.0)) || (!args[:plug_loads_vehicle_present] && (args[:plug_loads_vehicle_usage_multiplier] != 0.0 || args[:plug_loads_vehicle_usage_multiplier_2] != 0.0))
3590
- warnings << "plug_loads_television_annual_kwh=#{args[:plug_loads_television_annual_kwh]} and plug_loads_television_usage_multiplier=#{args[:plug_loads_television_usage_multiplier]} and plug_loads_television_usage_multiplier_2=#{args[:plug_loads_television_usage_multiplier_2]} and plug_loads_other_annual_kwh=#{args[:plug_loads_other_annual_kwh]} and plug_loads_other_usage_multiplier=#{args[:plug_loads_other_usage_multiplier]} and plug_loads_other_usage_multiplier_2=#{args[:plug_loads_other_usage_multiplier_2]} and plug_loads_well_pump_present=#{args[:plug_loads_well_pump_present]} and plug_loads_well_pump_usage_multiplier=#{args[:plug_loads_well_pump_usage_multiplier]} and plug_loads_well_pump_usage_multiplier_2=#{args[:plug_loads_well_pump_usage_multiplier_2]} and plug_loads_vehicle_present=#{args[:plug_loads_vehicle_present]} and plug_loads_vehicle_usage_multiplier=#{args[:plug_loads_vehicle_usage_multiplier]} and plug_loads_vehicle_usage_multiplier_2=#{args[:plug_loads_vehicle_usage_multiplier_2]}" if warning
3006
+ # no tv plug loads but specifying usage multipliers
3007
+ if args[:plug_loads_television_annual_kwh] != Constants.Auto
3008
+ warning = (args[:plug_loads_television_annual_kwh].to_f == 0.0 && args[:plug_loads_television_usage_multiplier] != 0.0)
3009
+ warnings << "plug_loads_television_annual_kwh=#{args[:plug_loads_television_annual_kwh]} and plug_loads_television_usage_multiplier=#{args[:plug_loads_television_usage_multiplier]}" if warning
3010
+ end
3011
+
3012
+ # no other plug loads but specifying usage multipliers
3013
+ if args[:plug_loads_other_annual_kwh] != Constants.Auto
3014
+ warning = (args[:plug_loads_other_annual_kwh].to_f == 0.0 && args[:plug_loads_other_usage_multiplier] != 0.0)
3015
+ warnings << "plug_loads_other_annual_kwh=#{args[:plug_loads_other_annual_kwh]} and plug_loads_other_usage_multiplier=#{args[:plug_loads_other_usage_multiplier]}" if warning
3016
+ end
3017
+
3018
+ # no well pump plug loads but specifying usage multipliers
3019
+ if args[:plug_loads_well_pump_annual_kwh] != Constants.Auto
3020
+ warning = (args[:plug_loads_well_pump_annual_kwh].to_f == 0.0 && args[:plug_loads_well_pump_usage_multiplier] != 0.0)
3021
+ warnings << "plug_loads_well_pump_annual_kwh=#{args[:plug_loads_well_pump_annual_kwh]} and plug_loads_well_pump_usage_multiplier=#{args[:plug_loads_well_pump_usage_multiplier]}" if warning
3022
+ end
3023
+
3024
+ # no vehicle plug loads but specifying usage multipliers
3025
+ if args[:plug_loads_vehicle_annual_kwh] != Constants.Auto
3026
+ warning = (args[:plug_loads_vehicle_annual_kwh].to_f && args[:plug_loads_vehicle_usage_multiplier] != 0.0)
3027
+ warnings << "plug_loads_vehicle_annual_kwh=#{args[:plug_loads_vehicle_annual_kwh]} and plug_loads_vehicle_usage_multiplier=#{args[:plug_loads_vehicle_usage_multiplier]}" if warning
3028
+ end
3591
3029
 
3592
3030
  # no fuel loads but specifying usage multipliers
3593
3031
  warning = (!args[:fuel_loads_grill_present] && args[:fuel_loads_grill_usage_multiplier] != 0.0) || (!args[:fuel_loads_lighting_present] && args[:fuel_loads_lighting_usage_multiplier] != 0.0) || (!args[:fuel_loads_fireplace_present] && args[:fuel_loads_fireplace_usage_multiplier] != 0.0)
3594
3032
  warnings << "fuel_loads_grill_present=#{args[:fuel_loads_grill_present]} and fuel_loads_grill_usage_multiplier=#{args[:fuel_loads_grill_usage_multiplier]} and fuel_loads_lighting_present=#{args[:fuel_loads_lighting_present]} and fuel_loads_lighting_usage_multiplier=#{args[:fuel_loads_lighting_usage_multiplier]} and fuel_loads_fireplace_present=#{args[:fuel_loads_fireplace_present]} and fuel_loads_fireplace_usage_multiplier=#{args[:fuel_loads_fireplace_usage_multiplier]}" if warning
3595
3033
 
3034
+ # foundation wall insulation distance to bottom is greater than foundation wall height
3035
+ if args[:foundation_wall_insulation_distance_to_bottom] != Constants.Auto
3036
+ error = (args[:foundation_wall_insulation_distance_to_bottom].to_f > args[:geometry_foundation_height])
3037
+ errors << "foundation_wall_insulation_distance_to_bottom=#{args[:foundation_wall_insulation_distance_to_bottom]} and geometry_foundation_height=#{args[:geometry_foundation_height]}" if error
3038
+ end
3039
+
3040
+ # number of bedrooms not greater than zero
3041
+ error = (args[:geometry_num_bedrooms] <= 0)
3042
+ errors << "geometry_num_bedrooms=#{args[:geometry_num_bedrooms]}" if error
3043
+
3044
+ # single-family detached with shared system
3045
+ error = [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type]) && args[:heating_system_type].include?('Shared')
3046
+ errors << "geometry_unit_type=#{args[:geometry_unit_type]} and heating_system_type=#{args[:heating_system_type]}" if error
3047
+
3596
3048
  return warnings, errors
3597
3049
  end
3598
3050
 
@@ -3625,9 +3077,7 @@ end
3625
3077
 
3626
3078
  class HPXMLFile
3627
3079
  def self.create(runner, model, args, epw_file)
3628
- model_geometry = OpenStudio::Model::Model.new
3629
-
3630
- success = create_geometry_envelope(runner, model_geometry, args)
3080
+ success = create_geometry_envelope(runner, model, args)
3631
3081
  return false if not success
3632
3082
 
3633
3083
  success = create_schedules(runner, model, epw_file, args)
@@ -3635,27 +3085,30 @@ class HPXMLFile
3635
3085
 
3636
3086
  hpxml = HPXML.new
3637
3087
 
3638
- set_header(hpxml, runner, args)
3088
+ set_header(hpxml, runner, args, epw_file)
3639
3089
  set_site(hpxml, runner, args)
3640
3090
  set_neighbor_buildings(hpxml, runner, args)
3641
3091
  set_building_occupancy(hpxml, runner, args)
3642
3092
  set_building_construction(hpxml, runner, args)
3643
3093
  set_climate_and_risk_zones(hpxml, runner, args, epw_file)
3644
3094
  set_air_infiltration_measurements(hpxml, runner, args)
3645
- set_attics(hpxml, runner, model_geometry, args)
3646
- set_foundations(hpxml, runner, model_geometry, args)
3647
- set_roofs(hpxml, runner, model_geometry, args)
3648
- set_rim_joists(hpxml, runner, model_geometry, args)
3649
- set_walls(hpxml, runner, model_geometry, args)
3650
- set_foundation_walls(hpxml, runner, model_geometry, args)
3651
- set_frame_floors(hpxml, runner, model_geometry, args)
3652
- set_slabs(hpxml, runner, model_geometry, args)
3653
- set_windows(hpxml, runner, model_geometry, args)
3654
- set_skylights(hpxml, runner, model_geometry, args)
3655
- set_doors(hpxml, runner, model_geometry, args)
3095
+
3096
+ set_attics(hpxml, runner, model, args)
3097
+ set_foundations(hpxml, runner, model, args)
3098
+ set_roofs(hpxml, runner, model, args)
3099
+ set_rim_joists(hpxml, runner, model, args)
3100
+ set_walls(hpxml, runner, model, args)
3101
+ set_foundation_walls(hpxml, runner, model, args)
3102
+ set_frame_floors(hpxml, runner, model, args)
3103
+ set_slabs(hpxml, runner, model, args)
3104
+ set_windows(hpxml, runner, model, args)
3105
+ set_skylights(hpxml, runner, model, args)
3106
+ set_doors(hpxml, runner, model, args)
3107
+
3656
3108
  set_heating_systems(hpxml, runner, args)
3657
3109
  set_cooling_systems(hpxml, runner, args)
3658
3110
  set_heat_pumps(hpxml, runner, args)
3111
+ set_secondary_heating_systems(hpxml, runner, args)
3659
3112
  set_hvac_distribution(hpxml, runner, args)
3660
3113
  set_hvac_control(hpxml, runner, args)
3661
3114
  set_ventilation_fans(hpxml, runner, args)
@@ -3699,6 +3152,13 @@ class HPXMLFile
3699
3152
  if args[:geometry_foundation_type] == HPXML::FoundationTypeSlab
3700
3153
  args[:geometry_foundation_height] = 0.0
3701
3154
  args[:geometry_foundation_height_above_grade] = 0.0
3155
+ args[:geometry_rim_joist_height] = 0.0
3156
+ elsif args[:geometry_foundation_type] == HPXML::FoundationTypeAmbient
3157
+ args[:geometry_rim_joist_height] = 0.0
3158
+ end
3159
+
3160
+ if args[:geometry_attic_type] == HPXML::AtticTypeConditioned
3161
+ args[:geometry_num_floors_above_grade] -= 1
3702
3162
  end
3703
3163
 
3704
3164
  if args[:geometry_unit_type] == HPXML::ResidentialTypeSFD
@@ -3706,6 +3166,8 @@ class HPXMLFile
3706
3166
  elsif args[:geometry_unit_type] == HPXML::ResidentialTypeSFA
3707
3167
  success = Geometry.create_single_family_attached(runner: runner, model: model, **args)
3708
3168
  elsif args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
3169
+ args[:geometry_roof_type] = 'flat'
3170
+ args[:geometry_attic_type] = HPXML::AtticTypeVented
3709
3171
  success = Geometry.create_multifamily(runner: runner, model: model, **args)
3710
3172
  end
3711
3173
  return false if not success
@@ -3767,7 +3229,7 @@ class HPXMLFile
3767
3229
  return false if not success
3768
3230
 
3769
3231
  # export the schedule
3770
- args[:schedules_path] = '../schedules.csv'
3232
+ args[:schedules_path] = "../#{File.basename(args[:hpxml_path], '.xml')}_schedules.csv"
3771
3233
  success = schedule_generator.export(schedules_path: File.expand_path(args[:schedules_path]))
3772
3234
  return false if not success
3773
3235
 
@@ -3776,7 +3238,7 @@ class HPXMLFile
3776
3238
  return true
3777
3239
  end
3778
3240
 
3779
- def self.set_header(hpxml, runner, args)
3241
+ def self.set_header(hpxml, runner, args, epw_file)
3780
3242
  hpxml.header.xml_type = 'HPXML'
3781
3243
  hpxml.header.xml_generated_by = 'BuildResidentialHPXML'
3782
3244
  hpxml.header.transaction = 'create'
@@ -3826,20 +3288,21 @@ class HPXMLFile
3826
3288
  end
3827
3289
 
3828
3290
  hpxml.header.building_id = 'MyBuilding'
3291
+ hpxml.header.state_code = epw_file.stateProvinceRegion
3829
3292
  hpxml.header.event_type = 'proposed workscope'
3830
3293
  hpxml.header.schedules_path = args[:schedules_path]
3831
3294
  end
3832
3295
 
3833
3296
  def self.set_site(hpxml, runner, args)
3834
- if args[:air_leakage_shelter_coefficient] != Constants.Auto
3835
- shelter_coefficient = args[:air_leakage_shelter_coefficient]
3297
+ if args[:air_leakage_shielding_of_home] != Constants.Auto
3298
+ shielding_of_home = args[:air_leakage_shielding_of_home]
3836
3299
  end
3837
3300
 
3838
3301
  if args[:site_type].is_initialized
3839
3302
  hpxml.site.site_type = args[:site_type].get
3840
3303
  end
3841
3304
 
3842
- hpxml.site.shelter_coefficient = shelter_coefficient
3305
+ hpxml.site.shielding_of_home = shielding_of_home
3843
3306
  end
3844
3307
 
3845
3308
  def self.set_neighbor_buildings(hpxml, runner, args)
@@ -3896,11 +3359,9 @@ class HPXMLFile
3896
3359
  hpxml.building_construction.conditioned_building_volume = conditioned_building_volume
3897
3360
  hpxml.building_construction.average_ceiling_height = args[:geometry_wall_height]
3898
3361
  hpxml.building_construction.residential_facility_type = args[:geometry_unit_type]
3899
-
3900
- if (args[:heating_system_type] != 'none' && args[:heating_system_has_flue_or_chimney]) ||
3901
- (args[:heating_system_type_2] != 'none' && args[:heating_system_has_flue_or_chimney_2]) ||
3902
- (args[:water_heater_type] != 'none' && args[:water_heater_has_flue_or_chimney])
3903
- hpxml.building_construction.has_flue_or_chimney = true
3362
+ if args[:geometry_has_flue_or_chimney] != Constants.Auto
3363
+ has_flue_or_chimney = args[:geometry_has_flue_or_chimney]
3364
+ hpxml.building_construction.has_flue_or_chimney = has_flue_or_chimney
3904
3365
  end
3905
3366
  end
3906
3367
 
@@ -3939,7 +3400,6 @@ class HPXMLFile
3939
3400
 
3940
3401
  def self.set_attics(hpxml, runner, model, args)
3941
3402
  return if args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
3942
- return if args[:geometry_unit_type] == HPXML::ResidentialTypeSFA # TODO: remove when we can model single-family attached units
3943
3403
 
3944
3404
  if args[:geometry_roof_type] == 'flat'
3945
3405
  hpxml.attics.add(id: HPXML::AtticTypeFlatRoof,
@@ -3974,27 +3434,13 @@ class HPXMLFile
3974
3434
  roof_type = args[:roof_material_type].get
3975
3435
  end
3976
3436
 
3977
- if args[:roof_color] == Constants.Auto && args[:roof_solar_absorptance] == Constants.Auto
3978
- solar_absorptance = 0.7
3979
- end
3980
-
3981
3437
  if args[:roof_color] != Constants.Auto
3982
3438
  roof_color = args[:roof_color]
3983
3439
  end
3984
3440
 
3985
- if args[:roof_solar_absorptance] != Constants.Auto
3986
- solar_absorptance = args[:roof_solar_absorptance]
3987
- end
3988
-
3989
- if args[:roof_emittance] != Constants.Auto
3990
- emittance = args[:roof_emittance]
3991
- end
3992
-
3993
- if args[:roof_radiant_barrier] != Constants.Auto
3994
- radiant_barrier = args[:roof_radiant_barrier]
3995
- if to_boolean(radiant_barrier)
3996
- radiant_barrier_grade = args[:roof_radiant_barrier_grade]
3997
- end
3441
+ radiant_barrier = args[:roof_radiant_barrier]
3442
+ if args[:roof_radiant_barrier]
3443
+ radiant_barrier_grade = args[:roof_radiant_barrier_grade]
3998
3444
  end
3999
3445
 
4000
3446
  if args[:geometry_roof_type] == 'flat'
@@ -4009,8 +3455,6 @@ class HPXMLFile
4009
3455
  area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round,
4010
3456
  roof_type: roof_type,
4011
3457
  roof_color: roof_color,
4012
- solar_absorptance: solar_absorptance,
4013
- emittance: emittance,
4014
3458
  pitch: args[:geometry_roof_pitch],
4015
3459
  radiant_barrier: radiant_barrier,
4016
3460
  radiant_barrier_grade: radiant_barrier_grade,
@@ -4020,8 +3464,59 @@ class HPXMLFile
4020
3464
 
4021
3465
  def self.set_rim_joists(hpxml, runner, model, args)
4022
3466
  model.getSurfaces.sort.each do |surface|
4023
- # TODO
3467
+ next if surface.surfaceType != 'Wall'
3468
+ next unless ['Outdoors', 'Adiabatic'].include? surface.outsideBoundaryCondition
3469
+ next unless Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
3470
+
3471
+ interior_adjacent_to = get_adjacent_to(surface)
3472
+ next unless [HPXML::LocationBasementConditioned, HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
3473
+
3474
+ exterior_adjacent_to = HPXML::LocationOutside
3475
+ if surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to foundation space
3476
+ adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
3477
+ if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
3478
+ unless [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type])
3479
+ exterior_adjacent_to = interior_adjacent_to
3480
+ if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
3481
+ exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3482
+ end
3483
+ end
3484
+ else # adjacent to a space that is explicitly in the model, e.g., corridor
3485
+ exterior_adjacent_to = get_adjacent_to(adjacent_surface)
3486
+ end
3487
+ end
3488
+
3489
+ if exterior_adjacent_to == HPXML::LocationOutside && args[:wall_siding_type].is_initialized
3490
+ siding = args[:wall_siding_type].get
3491
+ end
3492
+
3493
+ if args[:wall_color] != Constants.Auto
3494
+ color = args[:wall_color]
3495
+ end
3496
+
3497
+ if interior_adjacent_to == exterior_adjacent_to
3498
+ insulation_assembly_r_value = 4.0 # Uninsulated
3499
+ else
3500
+ insulation_assembly_r_value = args[:rim_joist_assembly_r]
3501
+ end
3502
+
3503
+ hpxml.rim_joists.add(id: valid_attr(surface.name),
3504
+ exterior_adjacent_to: exterior_adjacent_to,
3505
+ interior_adjacent_to: interior_adjacent_to,
3506
+ area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round(1),
3507
+ siding: siding,
3508
+ color: color,
3509
+ insulation_assembly_r_value: insulation_assembly_r_value)
3510
+ end
3511
+ end
3512
+
3513
+ def self.get_unexposed_garage_perimeter(hpxml, args)
3514
+ # this is perimeter adjacent to a 100% protruding garage that is not exposed
3515
+ # we need this because it's difficult to set this surface to Adiabatic using our geometry methods
3516
+ if (args[:geometry_garage_protrusion] == 1.0) && (args[:geometry_garage_width] * args[:geometry_garage_depth] > 0)
3517
+ return args[:geometry_garage_width]
4024
3518
  end
3519
+ return 0
4025
3520
  end
4026
3521
 
4027
3522
  def self.get_adiabatic_adjacent_surface(model, surface)
@@ -4050,6 +3545,7 @@ class HPXMLFile
4050
3545
  def self.set_walls(hpxml, runner, model, args)
4051
3546
  model.getSurfaces.sort.each do |surface|
4052
3547
  next if surface.surfaceType != 'Wall'
3548
+ next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
4053
3549
 
4054
3550
  interior_adjacent_to = get_adjacent_to(surface)
4055
3551
  next unless [HPXML::LocationLivingSpace, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented, HPXML::LocationGarage].include? interior_adjacent_to
@@ -4130,19 +3626,20 @@ class HPXMLFile
4130
3626
  model.getSurfaces.sort.each do |surface|
4131
3627
  next if surface.surfaceType != 'Wall'
4132
3628
  next unless ['Foundation', 'Adiabatic'].include? surface.outsideBoundaryCondition
3629
+ next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
4133
3630
 
4134
3631
  interior_adjacent_to = get_adjacent_to(surface)
4135
3632
  next unless [HPXML::LocationBasementConditioned, HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
4136
3633
 
4137
3634
  exterior_adjacent_to = HPXML::LocationGround
4138
3635
  if surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to foundation space
4139
- next if [HPXML::ResidentialTypeSFD, HPXML::ResidentialTypeManufactured].include? args[:geometry_unit_type] # these are surfaces for kiva
4140
-
4141
3636
  adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
4142
3637
  if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
4143
- exterior_adjacent_to = interior_adjacent_to
4144
- if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
4145
- exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3638
+ unless [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type])
3639
+ exterior_adjacent_to = interior_adjacent_to
3640
+ if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
3641
+ exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3642
+ end
4146
3643
  end
4147
3644
  else # adjacent to a space that is explicitly in the model, e.g., corridor
4148
3645
  exterior_adjacent_to = get_adjacent_to(adjacent_surface)
@@ -4160,6 +3657,9 @@ class HPXMLFile
4160
3657
  insulation_exterior_r_value = args[:foundation_wall_insulation_r]
4161
3658
  insulation_exterior_distance_to_top = args[:foundation_wall_insulation_distance_to_top]
4162
3659
  insulation_exterior_distance_to_bottom = args[:foundation_wall_insulation_distance_to_bottom]
3660
+ if insulation_exterior_distance_to_bottom == Constants.Auto
3661
+ insulation_exterior_distance_to_bottom = args[:geometry_foundation_height]
3662
+ end
4163
3663
  end
4164
3664
  insulation_interior_r_value = 0
4165
3665
  insulation_interior_distance_to_top = 0
@@ -4250,6 +3750,11 @@ class HPXMLFile
4250
3750
  has_foundation_walls = true
4251
3751
  end
4252
3752
  exposed_perimeter = Geometry.calculate_exposed_perimeter(model, [surface], has_foundation_walls).round
3753
+ next if exposed_perimeter == 0 # this could be, e.g., the foundation floor of an interior corridor
3754
+
3755
+ if [HPXML::LocationCrawlspaceVented, HPXML::LocationCrawlspaceUnvented, HPXML::LocationBasementUnconditioned, HPXML::LocationBasementConditioned].include? interior_adjacent_to
3756
+ exposed_perimeter -= get_unexposed_garage_perimeter(hpxml, args)
3757
+ end
4253
3758
 
4254
3759
  if [HPXML::LocationLivingSpace, HPXML::LocationGarage].include? interior_adjacent_to
4255
3760
  depth_below_grade = 0
@@ -4301,39 +3806,37 @@ class HPXMLFile
4301
3806
  sub_surface_height = Geometry.get_surface_height(sub_surface)
4302
3807
  sub_surface_facade = Geometry.get_facade_for_surface(sub_surface)
4303
3808
 
4304
- if (sub_surface_facade == Constants.FacadeFront) && (args[:overhangs_front_depth] > 0)
3809
+ if (sub_surface_facade == Constants.FacadeFront) && ((args[:overhangs_front_depth] > 0) || args[:overhangs_front_distance_to_top_of_window] > 0)
4305
3810
  overhangs_depth = args[:overhangs_front_depth]
4306
3811
  overhangs_distance_to_top_of_window = args[:overhangs_front_distance_to_top_of_window]
4307
3812
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4308
- elsif (sub_surface_facade == Constants.FacadeBack) && (args[:overhangs_back_depth] > 0)
3813
+ elsif (sub_surface_facade == Constants.FacadeBack) && ((args[:overhangs_back_depth] > 0) || args[:overhangs_back_distance_to_top_of_window] > 0)
4309
3814
  overhangs_depth = args[:overhangs_back_depth]
4310
3815
  overhangs_distance_to_top_of_window = args[:overhangs_back_distance_to_top_of_window]
4311
3816
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4312
- elsif (sub_surface_facade == Constants.FacadeLeft) && (args[:overhangs_left_depth] > 0)
3817
+ elsif (sub_surface_facade == Constants.FacadeLeft) && ((args[:overhangs_left_depth] > 0) || args[:overhangs_left_distance_to_top_of_window] > 0)
4313
3818
  overhangs_depth = args[:overhangs_left_depth]
4314
3819
  overhangs_distance_to_top_of_window = args[:overhangs_left_distance_to_top_of_window]
4315
3820
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4316
- elsif (sub_surface_facade == Constants.FacadeRight) && (args[:overhangs_right_depth] > 0)
3821
+ elsif (sub_surface_facade == Constants.FacadeRight) && ((args[:overhangs_right_depth] > 0) || args[:overhangs_right_distance_to_top_of_window] > 0)
4317
3822
  overhangs_depth = args[:overhangs_right_depth]
4318
3823
  overhangs_distance_to_top_of_window = args[:overhangs_right_distance_to_top_of_window]
4319
3824
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4320
3825
  elsif args[:geometry_eaves_depth] > 0
4321
- eaves_z = args[:geometry_wall_height] * args[:geometry_num_floors_above_grade]
3826
+ # Get max z coordinate of eaves
3827
+ eaves_z = args[:geometry_wall_height] * args[:geometry_num_floors_above_grade] + args[:geometry_rim_joist_height]
3828
+ if args[:geometry_attic_type] == HPXML::AtticTypeConditioned
3829
+ eaves_z += Geometry.get_conditioned_attic_height(model.getSpaces)
3830
+ end
4322
3831
  if args[:geometry_foundation_type] == HPXML::FoundationTypeAmbient
4323
3832
  eaves_z += args[:geometry_foundation_height]
4324
3833
  end
4325
- sub_surface_z = -9e99
4326
- space = sub_surface.space.get
4327
- z_origin = space.zOrigin
4328
- sub_surface.vertices.each do |vertex|
4329
- z = vertex.z + z_origin
4330
- next if z < sub_surface_z
4331
-
4332
- sub_surface_z = z
4333
- end
4334
- sub_surface_z = UnitConversions.convert(sub_surface_z, 'm', 'ft')
3834
+
3835
+ # Get max z coordinate of this window
3836
+ sub_surface_z = Geometry.getSurfaceZValues([sub_surface]).max + UnitConversions.convert(sub_surface.space.get.zOrigin, 'm', 'ft')
3837
+
4335
3838
  overhangs_depth = args[:geometry_eaves_depth]
4336
- overhangs_distance_to_top_of_window = eaves_z - sub_surface_z
3839
+ overhangs_distance_to_top_of_window = eaves_z - sub_surface_z # difference between max z coordinates of eaves and this window
4337
3840
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4338
3841
  end
4339
3842
 
@@ -4347,6 +3850,14 @@ class HPXMLFile
4347
3850
  interior_shading_factor_summer = args[:window_interior_shading_summer].get
4348
3851
  end
4349
3852
 
3853
+ if args[:window_exterior_shading_winter].is_initialized
3854
+ exterior_shading_factor_winter = args[:window_exterior_shading_winter].get
3855
+ end
3856
+
3857
+ if args[:window_exterior_shading_summer].is_initialized
3858
+ exterior_shading_factor_summer = args[:window_exterior_shading_summer].get
3859
+ end
3860
+
4350
3861
  if args[:window_fraction_operable].is_initialized
4351
3862
  fraction_operable = args[:window_fraction_operable].get
4352
3863
  end
@@ -4361,6 +3872,8 @@ class HPXMLFile
4361
3872
  overhangs_distance_to_bottom_of_window: overhangs_distance_to_bottom_of_window,
4362
3873
  interior_shading_factor_winter: interior_shading_factor_winter,
4363
3874
  interior_shading_factor_summer: interior_shading_factor_summer,
3875
+ exterior_shading_factor_winter: exterior_shading_factor_winter,
3876
+ exterior_shading_factor_summer: exterior_shading_factor_summer,
4364
3877
  fraction_operable: fraction_operable,
4365
3878
  wall_idref: valid_attr(surface.name))
4366
3879
  end # sub_surfaces
@@ -4417,84 +3930,49 @@ class HPXMLFile
4417
3930
  heating_capacity = args[:heating_system_heating_capacity]
4418
3931
  end
4419
3932
 
4420
- if args[:heating_system_electric_auxiliary_energy].is_initialized
4421
- if args[:heating_system_electric_auxiliary_energy].get > 0
4422
- electric_auxiliary_energy = args[:heating_system_electric_auxiliary_energy].get
4423
- end
4424
- end
4425
-
4426
3933
  if heating_system_type == HPXML::HVACTypeElectricResistance
4427
3934
  heating_system_fuel = HPXML::FuelTypeElectricity
4428
3935
  else
4429
3936
  heating_system_fuel = args[:heating_system_fuel]
4430
3937
  end
4431
3938
 
4432
- if [HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeBoiler].include? heating_system_type
3939
+ if [HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace].include?(heating_system_type) || heating_system_type.include?(HPXML::HVACTypeBoiler)
4433
3940
  heating_efficiency_afue = args[:heating_system_heating_efficiency]
4434
- elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace, HPXML::HVACTypeFixedHeater].include? heating_system_type
3941
+ elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace, HPXML::HVACTypeFixedHeater].include?(heating_system_type)
4435
3942
  heating_efficiency_percent = args[:heating_system_heating_efficiency]
4436
3943
  end
4437
3944
 
4438
- if [HPXML::HVACTypeFurnace].include? heating_system_type
4439
- if args[:heating_system_fan_power_watts_per_cfm].is_initialized
4440
- fan_watts_per_cfm = args[:heating_system_fan_power_watts_per_cfm].get
4441
- end
4442
- elsif [HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace, HPXML::HVACTypeFixedHeater].include? heating_system_type
4443
- if args[:heating_system_fan_power_watts].is_initialized
4444
- fan_watts = args[:heating_system_fan_power_watts].get
3945
+ if args[:heating_system_airflow_defect_ratio].is_initialized
3946
+ if [HPXML::HVACTypeFurnace].include? heating_system_type
3947
+ airflow_defect_ratio = args[:heating_system_airflow_defect_ratio].get
4445
3948
  end
4446
3949
  end
4447
3950
 
4448
- hpxml.heating_systems.add(id: 'HeatingSystem',
4449
- heating_system_type: heating_system_type,
4450
- heating_system_fuel: heating_system_fuel,
4451
- heating_capacity: heating_capacity,
4452
- fraction_heat_load_served: args[:heating_system_fraction_heat_load_served],
4453
- electric_auxiliary_energy: electric_auxiliary_energy,
4454
- heating_efficiency_afue: heating_efficiency_afue,
4455
- heating_efficiency_percent: heating_efficiency_percent,
4456
- fan_watts_per_cfm: fan_watts_per_cfm,
4457
- fan_watts: fan_watts)
4458
-
4459
- heating_system_type_2 = args[:heating_system_type_2]
4460
-
4461
- return if heating_system_type_2 == 'none'
4462
-
4463
- if args[:heating_system_heating_capacity_2] != Constants.Auto
4464
- heating_capacity_2 = args[:heating_system_heating_capacity_2]
4465
- end
4466
-
4467
- if args[:heating_system_electric_auxiliary_energy_2].is_initialized
4468
- if args[:heating_system_electric_auxiliary_energy_2].get > 0
4469
- electric_auxiliary_energy_2 = args[:heating_system_electric_auxiliary_energy_2].get
4470
- end
3951
+ fraction_heat_load_served = args[:heating_system_fraction_heat_load_served]
3952
+ if args[:heating_system_type_2] != 'none' && fraction_heat_load_served + args[:heating_system_fraction_heat_load_served_2] > 1.0
3953
+ fraction_heat_load_served = 1.0 - args[:heating_system_fraction_heat_load_served_2]
4471
3954
  end
4472
3955
 
4473
- if args[:heating_system_fuel_2] == HPXML::HVACTypeElectricResistance
4474
- heating_system_fuel_2 = HPXML::FuelTypeElectricity
4475
- else
4476
- heating_system_fuel_2 = args[:heating_system_fuel_2]
4477
- end
4478
-
4479
- if [HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace].include? heating_system_type_2
4480
- heating_efficiency_afue_2 = args[:heating_system_heating_efficiency_2]
4481
- elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace].include? heating_system_type_2
4482
- heating_efficiency_percent_2 = args[:heating_system_heating_efficiency_2]
3956
+ if heating_system_type.include?('Shared')
3957
+ is_shared_system = true
3958
+ number_of_units_served = args[:geometry_building_num_units].get
3959
+ heating_capacity = nil
4483
3960
  end
4484
3961
 
4485
- if args[:heating_system_fan_power_watts_2].is_initialized
4486
- fan_watts = args[:heating_system_fan_power_watts_2].get
3962
+ if heating_system_type.include?(HPXML::HVACTypeBoiler)
3963
+ heating_system_type = HPXML::HVACTypeBoiler
4487
3964
  end
4488
3965
 
4489
- hpxml.heating_systems.add(id: 'SecondHeatingSystem',
4490
- heating_system_type: heating_system_type_2,
4491
- heating_system_fuel: heating_system_fuel_2,
4492
- heating_capacity: heating_capacity_2,
4493
- fraction_heat_load_served: args[:heating_system_fraction_heat_load_served_2],
4494
- electric_auxiliary_energy: electric_auxiliary_energy_2,
4495
- heating_efficiency_afue: heating_efficiency_afue_2,
4496
- heating_efficiency_percent: heating_efficiency_percent_2,
4497
- fan_watts: fan_watts)
3966
+ hpxml.heating_systems.add(id: 'HeatingSystem',
3967
+ heating_system_type: heating_system_type,
3968
+ heating_system_fuel: heating_system_fuel,
3969
+ heating_capacity: heating_capacity,
3970
+ fraction_heat_load_served: fraction_heat_load_served,
3971
+ heating_efficiency_afue: heating_efficiency_afue,
3972
+ heating_efficiency_percent: heating_efficiency_percent,
3973
+ airflow_defect_ratio: airflow_defect_ratio,
3974
+ is_shared_system: is_shared_system,
3975
+ number_of_units_served: number_of_units_served)
4498
3976
  end
4499
3977
 
4500
3978
  def self.set_cooling_systems(hpxml, runner, args)
@@ -4502,10 +3980,8 @@ class HPXMLFile
4502
3980
 
4503
3981
  return if cooling_system_type == 'none'
4504
3982
 
4505
- if cooling_system_type != HPXML::HVACTypeEvaporativeCooler
4506
- if args[:cooling_system_cooling_capacity] != Constants.Auto
4507
- cooling_capacity = args[:cooling_system_cooling_capacity]
4508
- end
3983
+ if args[:cooling_system_cooling_capacity] != Constants.Auto
3984
+ cooling_capacity = args[:cooling_system_cooling_capacity]
4509
3985
  end
4510
3986
 
4511
3987
  if args[:cooling_system_cooling_compressor_type].is_initialized
@@ -4520,15 +3996,21 @@ class HPXMLFile
4520
3996
  end
4521
3997
  end
4522
3998
 
4523
- if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system_type
4524
- cooling_efficiency_seer = args[:cooling_system_cooling_efficiency_seer]
4525
- elsif [HPXML::HVACTypeRoomAirConditioner].include? cooling_system_type
4526
- cooling_efficiency_eer = args[:cooling_system_cooling_efficiency_eer]
3999
+ if args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsSEER
4000
+ cooling_efficiency_seer = args[:cooling_system_cooling_efficiency]
4001
+ elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsEER
4002
+ cooling_efficiency_eer = args[:cooling_system_cooling_efficiency]
4003
+ end
4004
+
4005
+ if args[:cooling_system_airflow_defect_ratio].is_initialized
4006
+ if [HPXML::HVACTypeCentralAirConditioner].include?(cooling_system_type) || ([HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system_type) && (args[:cooling_system_is_ducted]))
4007
+ airflow_defect_ratio = args[:cooling_system_airflow_defect_ratio].get
4008
+ end
4527
4009
  end
4528
4010
 
4529
- if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeEvaporativeCooler, HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system_type
4530
- if args[:cooling_system_fan_power_watts_per_cfm].is_initialized
4531
- fan_watts_per_cfm = args[:cooling_system_fan_power_watts_per_cfm].get
4011
+ if args[:cooling_system_charge_defect_ratio].is_initialized
4012
+ if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system_type)
4013
+ charge_defect_ratio = args[:cooling_system_charge_defect_ratio].get
4532
4014
  end
4533
4015
  end
4534
4016
 
@@ -4541,7 +4023,8 @@ class HPXMLFile
4541
4023
  cooling_shr: cooling_shr,
4542
4024
  cooling_efficiency_seer: cooling_efficiency_seer,
4543
4025
  cooling_efficiency_eer: cooling_efficiency_eer,
4544
- fan_watts_per_cfm: fan_watts_per_cfm)
4026
+ airflow_defect_ratio: airflow_defect_ratio,
4027
+ charge_defect_ratio: charge_defect_ratio)
4545
4028
  end
4546
4029
 
4547
4030
  def self.set_heat_pumps(hpxml, runner, args)
@@ -4554,8 +4037,8 @@ class HPXMLFile
4554
4037
  end
4555
4038
 
4556
4039
  if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump_type
4557
- if args[:heat_pump_heating_capacity_17F] != Constants.Auto
4558
- heating_capacity_17F = args[:heat_pump_heating_capacity_17F]
4040
+ if args[:heat_pump_heating_capacity_17_f] != Constants.Auto
4041
+ heating_capacity_17F = args[:heat_pump_heating_capacity_17_f]
4559
4042
  end
4560
4043
  end
4561
4044
 
@@ -4592,20 +4075,31 @@ class HPXMLFile
4592
4075
  cooling_shr = args[:heat_pump_cooling_sensible_heat_fraction].get
4593
4076
  end
4594
4077
 
4595
- if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump_type
4596
- heating_efficiency_hspf = args[:heat_pump_heating_efficiency_hspf]
4597
- cooling_efficiency_seer = args[:heat_pump_cooling_efficiency_seer]
4598
- elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump_type
4599
- heating_efficiency_cop = args[:heat_pump_heating_efficiency_cop]
4600
- cooling_efficiency_eer = args[:heat_pump_cooling_efficiency_eer]
4601
-
4602
- if args[:heat_pump_pump_power_watts_per_ton].is_initialized
4603
- pump_watts_per_ton = args[:heat_pump_pump_power_watts_per_ton].get
4078
+ if args[:heat_pump_heating_efficiency_type] == HPXML::UnitsHSPF
4079
+ heating_efficiency_hspf = args[:heat_pump_heating_efficiency]
4080
+ elsif args[:heat_pump_heating_efficiency_type] == HPXML::UnitsCOP
4081
+ heating_efficiency_cop = args[:heat_pump_heating_efficiency]
4082
+ end
4083
+
4084
+ if args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsSEER
4085
+ cooling_efficiency_seer = args[:heat_pump_cooling_efficiency]
4086
+ elsif args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsEER
4087
+ cooling_efficiency_eer = args[:heat_pump_cooling_efficiency]
4088
+ end
4089
+
4090
+ if args[:heat_pump_airflow_defect_ratio].is_initialized
4091
+ if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir].include?(heat_pump_type) || ([HPXML::HVACTypeHeatPumpMiniSplit].include?(heat_pump_type) && (args[:heat_pump_is_ducted]))
4092
+ airflow_defect_ratio = args[:heat_pump_airflow_defect_ratio].get
4604
4093
  end
4605
4094
  end
4606
4095
 
4607
- if args[:heat_pump_fan_power_watts_per_cfm].is_initialized
4608
- fan_watts_per_cfm = args[:heat_pump_fan_power_watts_per_cfm].get
4096
+ if args[:heat_pump_charge_defect_ratio].is_initialized
4097
+ charge_defect_ratio = args[:heat_pump_charge_defect_ratio].get
4098
+ end
4099
+
4100
+ fraction_heat_load_served = args[:heat_pump_fraction_heat_load_served]
4101
+ if args[:heating_system_type_2] != 'none' && fraction_heat_load_served + args[:heating_system_fraction_heat_load_served_2] > 1.0
4102
+ fraction_heat_load_served = 1.0 - args[:heating_system_fraction_heat_load_served_2]
4609
4103
  end
4610
4104
 
4611
4105
  hpxml.heat_pumps.add(id: 'HeatPump',
@@ -4616,7 +4110,7 @@ class HPXMLFile
4616
4110
  compressor_type: compressor_type,
4617
4111
  cooling_shr: cooling_shr,
4618
4112
  cooling_capacity: cooling_capacity,
4619
- fraction_heat_load_served: args[:heat_pump_fraction_heat_load_served],
4113
+ fraction_heat_load_served: fraction_heat_load_served,
4620
4114
  fraction_cool_load_served: args[:heat_pump_fraction_cool_load_served],
4621
4115
  backup_heating_fuel: backup_heating_fuel,
4622
4116
  backup_heating_capacity: backup_heating_capacity,
@@ -4627,31 +4121,67 @@ class HPXMLFile
4627
4121
  cooling_efficiency_seer: cooling_efficiency_seer,
4628
4122
  heating_efficiency_cop: heating_efficiency_cop,
4629
4123
  cooling_efficiency_eer: cooling_efficiency_eer,
4630
- pump_watts_per_ton: pump_watts_per_ton,
4631
- fan_watts_per_cfm: fan_watts_per_cfm)
4124
+ airflow_defect_ratio: airflow_defect_ratio,
4125
+ charge_defect_ratio: charge_defect_ratio)
4126
+ end
4127
+
4128
+ def self.set_secondary_heating_systems(hpxml, runner, args)
4129
+ heating_system_type = args[:heating_system_type_2]
4130
+
4131
+ return if heating_system_type == 'none'
4132
+
4133
+ if args[:heating_system_heating_capacity_2] != Constants.Auto
4134
+ heating_capacity = args[:heating_system_heating_capacity_2]
4135
+ end
4136
+
4137
+ if args[:heating_system_fuel_2] == HPXML::HVACTypeElectricResistance
4138
+ heating_system_fuel = HPXML::FuelTypeElectricity
4139
+ else
4140
+ heating_system_fuel = args[:heating_system_fuel_2]
4141
+ end
4142
+
4143
+ if [HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace].include?(heating_system_type) || heating_system_type.include?(HPXML::HVACTypeBoiler)
4144
+ heating_efficiency_afue = args[:heating_system_heating_efficiency_2]
4145
+ elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace].include?(heating_system_type)
4146
+ heating_efficiency_percent = args[:heating_system_heating_efficiency_2]
4147
+ end
4148
+
4149
+ if heating_system_type.include?(HPXML::HVACTypeBoiler)
4150
+ heating_system_type = HPXML::HVACTypeBoiler
4151
+ end
4152
+
4153
+ hpxml.heating_systems.add(id: 'SecondHeatingSystem',
4154
+ heating_system_type: heating_system_type,
4155
+ heating_system_fuel: heating_system_fuel,
4156
+ heating_capacity: heating_capacity,
4157
+ fraction_heat_load_served: args[:heating_system_fraction_heat_load_served_2],
4158
+ heating_efficiency_afue: heating_efficiency_afue,
4159
+ heating_efficiency_percent: heating_efficiency_percent)
4632
4160
  end
4633
4161
 
4634
4162
  def self.set_hvac_distribution(hpxml, runner, args)
4635
4163
  # HydronicDistribution?
4164
+ hydr_idx = 0
4636
4165
  hpxml.heating_systems.each do |heating_system|
4637
- next unless [HPXML::HVACTypeBoiler].include? heating_system.heating_system_type
4166
+ next unless [heating_system.heating_system_type].include?(HPXML::HVACTypeBoiler)
4167
+ next if args[:heating_system_type].include?('Fan Coil')
4638
4168
 
4639
- hpxml.hvac_distributions.add(id: 'HydronicDistribution',
4169
+ hydr_idx += 1
4170
+ hpxml.hvac_distributions.add(id: "HydronicDistribution#{hydr_idx}",
4640
4171
  distribution_system_type: HPXML::HVACDistributionTypeHydronic,
4641
4172
  hydronic_type: HPXML::HydronicTypeBaseboard)
4642
4173
  heating_system.distribution_system_idref = hpxml.hvac_distributions[-1].id
4643
- break
4644
4174
  end
4645
4175
 
4646
4176
  # AirDistribution?
4647
4177
  air_distribution_systems = []
4648
4178
  hpxml.heating_systems.each do |heating_system|
4649
- if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
4179
+ if [HPXML::HVACTypeFurnace].include?(heating_system.heating_system_type)
4650
4180
  air_distribution_systems << heating_system
4651
4181
  end
4652
4182
  end
4653
4183
  hpxml.cooling_systems.each do |cooling_system|
4654
- if [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
4184
+ if [HPXML::HVACTypeCentralAirConditioner].include?(cooling_system.cooling_system_type)
4655
4185
  air_distribution_systems << cooling_system
4656
4186
  elsif [HPXML::HVACTypeEvaporativeCooler, HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system.cooling_system_type) && args[:cooling_system_is_ducted]
4657
4187
  air_distribution_systems << cooling_system
@@ -4661,41 +4191,69 @@ class HPXMLFile
4661
4191
  if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
4662
4192
  air_distribution_systems << heat_pump
4663
4193
  elsif [HPXML::HVACTypeHeatPumpMiniSplit].include?(heat_pump.heat_pump_type)
4664
- if args[:heat_pump_mini_split_is_ducted].is_initialized
4665
- air_distribution_systems << heat_pump if to_boolean(args[:heat_pump_mini_split_is_ducted].get)
4194
+ if args[:heat_pump_is_ducted].is_initialized
4195
+ air_distribution_systems << heat_pump if to_boolean(args[:heat_pump_is_ducted].get)
4666
4196
  end
4667
4197
  end
4668
4198
  end
4669
- return unless air_distribution_systems.size > 0
4199
+
4200
+ # FanCoil?
4201
+ fan_coil_distribution_systems = []
4202
+ hpxml.heating_systems.each do |heating_system|
4203
+ if args[:heating_system_type].include?('Fan Coil')
4204
+ fan_coil_distribution_systems << heating_system
4205
+ end
4206
+ end
4207
+
4208
+ return if air_distribution_systems.size == 0 && fan_coil_distribution_systems.size == 0
4670
4209
 
4671
4210
  if args[:ducts_number_of_return_registers] != Constants.Auto
4672
4211
  number_of_return_registers = args[:ducts_number_of_return_registers]
4673
4212
  end
4674
4213
 
4675
- hpxml.hvac_distributions.add(id: 'AirDistribution',
4676
- distribution_system_type: HPXML::HVACDistributionTypeAir,
4677
- conditioned_floor_area_served: args[:geometry_cfa],
4678
- number_of_return_registers: number_of_return_registers)
4214
+ if [HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && hpxml.heating_systems.size == 0 && hpxml.heat_pumps.size == 0
4215
+ number_of_return_registers = nil
4216
+ if args[:cooling_system_is_ducted]
4217
+ number_of_return_registers = 0
4218
+ end
4219
+ end
4679
4220
 
4680
- air_distribution_systems.each do |hvac_system|
4681
- hvac_system.distribution_system_idref = hpxml.hvac_distributions[-1].id
4221
+ if air_distribution_systems.size > 0
4222
+ hpxml.hvac_distributions.add(id: 'AirDistribution',
4223
+ distribution_system_type: HPXML::HVACDistributionTypeAir,
4224
+ conditioned_floor_area_served: args[:geometry_cfa],
4225
+ air_type: HPXML::AirTypeRegularVelocity,
4226
+ number_of_return_registers: number_of_return_registers)
4227
+ air_distribution_systems.each do |hvac_system|
4228
+ hvac_system.distribution_system_idref = hpxml.hvac_distributions[-1].id
4229
+ end
4230
+ set_duct_leakages(args, hpxml.hvac_distributions[-1])
4231
+ set_ducts(args, hpxml.hvac_distributions[-1])
4682
4232
  end
4683
4233
 
4684
- # Duct Leakage
4685
- hpxml.hvac_distributions[-1].duct_leakage_measurements.add(duct_type: HPXML::DuctTypeSupply,
4686
- duct_leakage_units: args[:ducts_supply_leakage_units],
4687
- duct_leakage_value: args[:ducts_supply_leakage_value],
4688
- duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
4234
+ if fan_coil_distribution_systems.size > 0
4235
+ hpxml.hvac_distributions.add(id: 'FanCoilDistribution',
4236
+ distribution_system_type: HPXML::HVACDistributionTypeAir,
4237
+ air_type: HPXML::AirTypeFanCoil)
4238
+ fan_coil_distribution_systems.each do |hvac_system|
4239
+ hvac_system.distribution_system_idref = hpxml.hvac_distributions[-1].id
4240
+ end
4241
+ end
4242
+ end
4689
4243
 
4690
- if not ([HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && args[:cooling_system_is_ducted])
4244
+ def self.set_duct_leakages(args, hvac_distribution)
4245
+ hvac_distribution.duct_leakage_measurements.add(duct_type: HPXML::DuctTypeSupply,
4246
+ duct_leakage_units: args[:ducts_supply_leakage_units],
4247
+ duct_leakage_value: args[:ducts_supply_leakage_value],
4248
+ duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
4691
4249
 
4692
- hpxml.hvac_distributions[-1].duct_leakage_measurements.add(duct_type: HPXML::DuctTypeReturn,
4693
- duct_leakage_units: args[:ducts_return_leakage_units],
4694
- duct_leakage_value: args[:ducts_return_leakage_value],
4695
- duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
4696
- end
4250
+ hvac_distribution.duct_leakage_measurements.add(duct_type: HPXML::DuctTypeReturn,
4251
+ duct_leakage_units: args[:ducts_return_leakage_units],
4252
+ duct_leakage_value: args[:ducts_return_leakage_value],
4253
+ duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
4254
+ end
4697
4255
 
4698
- # Ducts
4256
+ def self.set_ducts(args, hvac_distribution)
4699
4257
  if args[:ducts_supply_location] != Constants.Auto
4700
4258
  ducts_supply_location = args[:ducts_supply_location]
4701
4259
  end
@@ -4712,64 +4270,36 @@ class HPXMLFile
4712
4270
  ducts_return_surface_area = args[:ducts_return_surface_area]
4713
4271
  end
4714
4272
 
4715
- hpxml.hvac_distributions[-1].ducts.add(duct_type: HPXML::DuctTypeSupply,
4716
- duct_insulation_r_value: args[:ducts_supply_insulation_r],
4717
- duct_location: ducts_supply_location,
4718
- duct_surface_area: ducts_supply_surface_area)
4273
+ hvac_distribution.ducts.add(duct_type: HPXML::DuctTypeSupply,
4274
+ duct_insulation_r_value: args[:ducts_supply_insulation_r],
4275
+ duct_location: ducts_supply_location,
4276
+ duct_surface_area: ducts_supply_surface_area)
4719
4277
 
4720
4278
  if not ([HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && args[:cooling_system_is_ducted])
4721
- hpxml.hvac_distributions[-1].ducts.add(duct_type: HPXML::DuctTypeReturn,
4722
- duct_insulation_r_value: args[:ducts_return_insulation_r],
4723
- duct_location: ducts_return_location,
4724
- duct_surface_area: ducts_return_surface_area)
4279
+ hvac_distribution.ducts.add(duct_type: HPXML::DuctTypeReturn,
4280
+ duct_insulation_r_value: args[:ducts_return_insulation_r],
4281
+ duct_location: ducts_return_location,
4282
+ duct_surface_area: ducts_return_surface_area)
4725
4283
  end
4726
4284
  end
4727
4285
 
4728
- def self.modify_setpoint_schedule(schedule, offset_magnitude, offset_schedule)
4729
- offset_schedule.each_with_index do |direction, i|
4730
- schedule[i] += offset_magnitude * direction
4731
- end
4732
- return schedule
4733
- end
4734
-
4735
4286
  def self.set_hvac_control(hpxml, runner, args)
4736
4287
  return if (args[:heating_system_type] == 'none') && (args[:cooling_system_type] == 'none') && (args[:heat_pump_type] == 'none')
4737
4288
 
4738
- weekday_heating_setpoints = [args[:setpoint_heating_weekday_temp]] * 24
4739
- weekend_heating_setpoints = [args[:setpoint_heating_weekend_temp]] * 24
4740
-
4741
- weekday_cooling_setpoints = [args[:setpoint_cooling_weekday_temp]] * 24
4742
- weekend_cooling_setpoints = [args[:setpoint_cooling_weekend_temp]] * 24
4743
-
4744
- if args[:setpoint_heating_weekday_offset_magnitude].is_initialized && args[:setpoint_heating_weekday_schedule].is_initialized
4745
- setpoint_heating_weekday_offset_magnitude = args[:setpoint_heating_weekday_offset_magnitude].get
4746
- setpoint_heating_weekday_schedule = args[:setpoint_heating_weekday_schedule].get.split(',').map { |i| Float(i) }
4747
- weekday_heating_setpoints = modify_setpoint_schedule(weekday_heating_setpoints, setpoint_heating_weekday_offset_magnitude, setpoint_heating_weekday_schedule)
4748
- end
4749
-
4750
- if args[:setpoint_heating_weekend_offset_magnitude].is_initialized && args[:setpoint_heating_weekend_schedule].is_initialized
4751
- setpoint_heating_weekend_offset_magnitude = args[:setpoint_heating_weekend_offset_magnitude].get
4752
- setpoint_heating_weekend_schedule = args[:setpoint_heating_weekend_schedule].get.split(',').map { |i| Float(i) }
4753
- weekend_heating_setpoints = modify_setpoint_schedule(weekend_heating_setpoints, setpoint_heating_weekend_offset_magnitude, setpoint_heating_weekend_schedule)
4754
- end
4755
-
4756
- if args[:setpoint_cooling_weekday_offset_magnitude].is_initialized && args[:setpoint_cooling_weekday_schedule].is_initialized
4757
- setpoint_cooling_weekday_offset_magnitude = args[:setpoint_cooling_weekday_offset_magnitude].get
4758
- setpoint_cooling_weekday_schedule = args[:setpoint_cooling_weekday_schedule].get.split(',').map { |i| Float(i) }
4759
- weekday_cooling_setpoints = modify_setpoint_schedule(weekday_cooling_setpoints, setpoint_cooling_weekday_offset_magnitude, setpoint_cooling_weekday_schedule)
4289
+ if args[:setpoint_heating_weekday] == args[:setpoint_heating_weekend] && !args[:setpoint_heating_weekday].include?(',')
4290
+ heating_setpoint_temp = args[:setpoint_heating_weekday]
4291
+ else
4292
+ weekday_heating_setpoints = args[:setpoint_heating_weekday]
4293
+ weekend_heating_setpoints = args[:setpoint_heating_weekend]
4760
4294
  end
4761
4295
 
4762
- if args[:setpoint_cooling_weekend_offset_magnitude].is_initialized && args[:setpoint_cooling_weekend_schedule].is_initialized
4763
- setpoint_cooling_weekend_offset_magnitude = args[:setpoint_cooling_weekend_offset_magnitude].get
4764
- setpoint_cooling_weekend_schedule = args[:setpoint_cooling_weekend_schedule].get.split(',').map { |i| Float(i) }
4765
- weekend_cooling_setpoints = modify_setpoint_schedule(weekend_cooling_setpoints, setpoint_cooling_weekend_offset_magnitude, setpoint_cooling_weekend_schedule)
4296
+ if args[:setpoint_cooling_weekday] == args[:setpoint_cooling_weekend] && !args[:setpoint_cooling_weekday].include?(',')
4297
+ cooling_setpoint_temp = args[:setpoint_cooling_weekday]
4298
+ else
4299
+ weekday_cooling_setpoints = args[:setpoint_cooling_weekday]
4300
+ weekend_cooling_setpoints = args[:setpoint_cooling_weekend]
4766
4301
  end
4767
4302
 
4768
- weekday_heating_setpoints = weekday_heating_setpoints.join(', ')
4769
- weekend_heating_setpoints = weekend_heating_setpoints.join(', ')
4770
- weekday_cooling_setpoints = weekday_cooling_setpoints.join(', ')
4771
- weekend_cooling_setpoints = weekend_cooling_setpoints.join(', ')
4772
-
4773
4303
  ceiling_fan_quantity = nil
4774
4304
  if args[:ceiling_fan_quantity] != Constants.Auto
4775
4305
  ceiling_fan_quantity = Float(args[:ceiling_fan_quantity])
@@ -4780,6 +4310,8 @@ class HPXMLFile
4780
4310
  end
4781
4311
 
4782
4312
  hpxml.hvac_controls.add(id: 'HVACControl',
4313
+ heating_setpoint_temp: heating_setpoint_temp,
4314
+ cooling_setpoint_temp: cooling_setpoint_temp,
4783
4315
  weekday_heating_setpoints: weekday_heating_setpoints,
4784
4316
  weekend_heating_setpoints: weekend_heating_setpoints,
4785
4317
  weekday_cooling_setpoints: weekday_cooling_setpoints,
@@ -4790,30 +4322,27 @@ class HPXMLFile
4790
4322
  def self.set_ventilation_fans(hpxml, runner, args)
4791
4323
  if args[:mech_vent_fan_type] != 'none'
4792
4324
 
4793
- if args[:mech_vent_fan_type].include? 'recovery ventilator'
4794
-
4795
- if args[:mech_vent_fan_type].include? 'energy'
4796
-
4797
- if args[:mech_vent_total_recovery_efficiency_type] == 'Unadjusted'
4798
- total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency]
4799
- elsif args[:mech_vent_total_recovery_efficiency_type] == 'Adjusted'
4800
- total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency]
4801
- end
4802
-
4325
+ if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type])
4326
+ if args[:mech_vent_recovery_efficiency_type] == 'Unadjusted'
4327
+ total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency]
4328
+ sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency]
4329
+ elsif args[:mech_vent_recovery_efficiency_type] == 'Adjusted'
4330
+ total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency]
4331
+ sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency]
4803
4332
  end
4804
-
4805
- if args[:mech_vent_sensible_recovery_efficiency_type] == 'Unadjusted'
4333
+ elsif [HPXML::MechVentTypeHRV].include?(args[:mech_vent_fan_type])
4334
+ if args[:mech_vent_recovery_efficiency_type] == 'Unadjusted'
4806
4335
  sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency]
4807
- elsif args[:mech_vent_sensible_recovery_efficiency_type] == 'Adjusted'
4336
+ elsif args[:mech_vent_recovery_efficiency_type] == 'Adjusted'
4808
4337
  sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency]
4809
4338
  end
4810
-
4811
4339
  end
4812
4340
 
4813
4341
  distribution_system_idref = nil
4814
4342
  if args[:mech_vent_fan_type] == HPXML::MechVentTypeCFIS
4815
4343
  hpxml.hvac_distributions.each do |hvac_distribution|
4816
4344
  next unless hvac_distribution.distribution_system_type == HPXML::HVACDistributionTypeAir
4345
+ next if hvac_distribution.air_type != HPXML::AirTypeRegularVelocity
4817
4346
 
4818
4347
  distribution_system_idref = hvac_distribution.id
4819
4348
  end
@@ -4859,32 +4388,20 @@ class HPXMLFile
4859
4388
 
4860
4389
  if args[:mech_vent_fan_type_2] != 'none'
4861
4390
 
4862
- if args[:mech_vent_fan_type_2].include? 'recovery ventilator'
4863
-
4864
- if args[:mech_vent_fan_type_2].include? 'energy'
4865
-
4866
- if args[:mech_vent_total_recovery_efficiency_type_2] == 'Unadjusted'
4867
- total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency_2]
4868
- elsif args[:mech_vent_total_recovery_efficiency_type_2] == 'Adjusted'
4869
- total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency_2]
4870
- end
4871
-
4872
- end
4391
+ if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type_2])
4873
4392
 
4874
- if args[:mech_vent_sensible_recovery_efficiency_type_2] == 'Unadjusted'
4393
+ if args[:mech_vent_recovery_efficiency_type_2] == 'Unadjusted'
4394
+ total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency_2]
4875
4395
  sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency_2]
4876
- elsif args[:mech_vent_sensible_recovery_efficiency_type_2] == 'Adjusted'
4396
+ elsif args[:mech_vent_recovery_efficiency_type_2] == 'Adjusted'
4397
+ total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency_2]
4877
4398
  sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency_2]
4878
4399
  end
4879
-
4880
- end
4881
-
4882
- distribution_system_idref = nil
4883
- if args[:mech_vent_fan_type_2] == HPXML::MechVentTypeCFIS
4884
- hpxml.hvac_distributions.each do |hvac_distribution|
4885
- next unless hvac_distribution.distribution_system_type == HPXML::HVACDistributionTypeAir
4886
-
4887
- distribution_system_idref = hvac_distribution.id
4400
+ elsif [HPXML::MechVentTypeHRV].include?(args[:mech_vent_fan_type_2])
4401
+ if args[:mech_vent_recovery_efficiency_type_2] == 'Unadjusted'
4402
+ sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency_2]
4403
+ elsif args[:mech_vent_recovery_efficiency_type_2] == 'Adjusted'
4404
+ sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency_2]
4888
4405
  end
4889
4406
  end
4890
4407
 
@@ -4897,29 +4414,36 @@ class HPXMLFile
4897
4414
  total_recovery_efficiency_adjusted: total_recovery_efficiency_adjusted,
4898
4415
  sensible_recovery_efficiency: sensible_recovery_efficiency,
4899
4416
  sensible_recovery_efficiency_adjusted: sensible_recovery_efficiency_adjusted,
4900
- fan_power: args[:mech_vent_fan_power_2],
4901
- distribution_system_idref: distribution_system_idref)
4417
+ fan_power: args[:mech_vent_fan_power_2])
4902
4418
  end
4903
4419
 
4904
- if args[:kitchen_fans_present]
4420
+ if (args[:kitchen_fans_quantity] == Constants.Auto) || (args[:kitchen_fans_quantity].to_i > 0)
4905
4421
  if args[:kitchen_fans_flow_rate].is_initialized
4906
- rated_flow_rate = args[:kitchen_fans_flow_rate].get
4422
+ if args[:kitchen_fans_flow_rate].get != Constants.Auto
4423
+ rated_flow_rate = args[:kitchen_fans_flow_rate].get.to_f
4424
+ end
4907
4425
  end
4908
4426
 
4909
4427
  if args[:kitchen_fans_power].is_initialized
4910
- fan_power = args[:kitchen_fans_power].get
4428
+ if args[:kitchen_fans_power].get != Constants.Auto
4429
+ fan_power = args[:kitchen_fans_power].get.to_f
4430
+ end
4911
4431
  end
4912
4432
 
4913
4433
  if args[:kitchen_fans_hours_in_operation].is_initialized
4914
- hours_in_operation = args[:kitchen_fans_hours_in_operation].get
4434
+ if args[:kitchen_fans_hours_in_operation].get != Constants.Auto
4435
+ hours_in_operation = args[:kitchen_fans_hours_in_operation].get.to_f
4436
+ end
4915
4437
  end
4916
4438
 
4917
4439
  if args[:kitchen_fans_start_hour].is_initialized
4918
- start_hour = args[:kitchen_fans_start_hour].get
4440
+ if args[:kitchen_fans_start_hour].get != Constants.Auto
4441
+ start_hour = args[:kitchen_fans_start_hour].get.to_i
4442
+ end
4919
4443
  end
4920
4444
 
4921
- if args[:kitchen_fans_quantity].is_initialized
4922
- quantity = args[:kitchen_fans_quantity].get
4445
+ if args[:kitchen_fans_quantity] != Constants.Auto
4446
+ quantity = args[:kitchen_fans_quantity].to_i
4923
4447
  end
4924
4448
 
4925
4449
  hpxml.ventilation_fans.add(id: 'KitchenRangeFan',
@@ -4932,25 +4456,33 @@ class HPXMLFile
4932
4456
  quantity: quantity)
4933
4457
  end
4934
4458
 
4935
- if args[:bathroom_fans_present]
4459
+ if (args[:bathroom_fans_quantity] == Constants.Auto) || (args[:bathroom_fans_quantity].to_i > 0)
4936
4460
  if args[:bathroom_fans_flow_rate].is_initialized
4937
- rated_flow_rate = args[:bathroom_fans_flow_rate].get
4461
+ if args[:bathroom_fans_flow_rate].get != Constants.Auto
4462
+ rated_flow_rate = args[:bathroom_fans_flow_rate].get.to_f
4463
+ end
4938
4464
  end
4939
4465
 
4940
4466
  if args[:bathroom_fans_power].is_initialized
4941
- fan_power = args[:bathroom_fans_power].get
4467
+ if args[:bathroom_fans_power].get != Constants.Auto
4468
+ fan_power = args[:bathroom_fans_power].get.to_f
4469
+ end
4942
4470
  end
4943
4471
 
4944
4472
  if args[:bathroom_fans_hours_in_operation].is_initialized
4945
- hours_in_operation = args[:bathroom_fans_hours_in_operation].get
4473
+ if args[:bathroom_fans_hours_in_operation].get != Constants.Auto
4474
+ hours_in_operation = args[:bathroom_fans_hours_in_operation].get.to_f
4475
+ end
4946
4476
  end
4947
4477
 
4948
4478
  if args[:bathroom_fans_start_hour].is_initialized
4949
- start_hour = args[:bathroom_fans_start_hour].get
4479
+ if args[:bathroom_fans_start_hour].get != Constants.Auto
4480
+ start_hour = args[:bathroom_fans_start_hour].get.to_i
4481
+ end
4950
4482
  end
4951
4483
 
4952
- if args[:bathroom_fans_quantity].is_initialized
4953
- quantity = args[:bathroom_fans_quantity].get
4484
+ if args[:bathroom_fans_quantity] != Constants.Auto
4485
+ quantity = args[:bathroom_fans_quantity].to_i
4954
4486
  end
4955
4487
 
4956
4488
  hpxml.ventilation_fans.add(id: 'BathFans',
@@ -4993,10 +4525,6 @@ class HPXMLFile
4993
4525
  tank_volume = args[:water_heater_tank_volume]
4994
4526
  end
4995
4527
 
4996
- if args[:water_heater_heating_capacity] != Constants.Auto
4997
- heating_capacity = args[:water_heater_heating_capacity]
4998
- end
4999
-
5000
4528
  if args[:water_heater_setpoint_temperature] != Constants.Auto
5001
4529
  temperature = args[:water_heater_setpoint_temperature]
5002
4530
  end
@@ -5064,7 +4592,6 @@ class HPXMLFile
5064
4592
  location: location,
5065
4593
  tank_volume: tank_volume,
5066
4594
  fraction_dhw_load_served: 1.0,
5067
- heating_capacity: heating_capacity,
5068
4595
  energy_factor: energy_factor,
5069
4596
  uniform_energy_factor: uniform_energy_factor,
5070
4597
  first_hour_rating: first_hour_rating,
@@ -5310,12 +4837,12 @@ class HPXMLFile
5310
4837
  end
5311
4838
 
5312
4839
  def self.set_dehumidifier(hpxml, runner, args)
5313
- return unless args[:dehumidifier_present]
4840
+ return if args[:dehumidifier_type] == 'none'
5314
4841
 
5315
4842
  if args[:dehumidifier_efficiency_type] == 'EnergyFactor'
5316
- energy_factor = args[:dehumidifier_efficiency_ef]
4843
+ energy_factor = args[:dehumidifier_efficiency]
5317
4844
  elsif args[:dehumidifier_efficiency_type] == 'IntegratedEnergyFactor'
5318
- integrated_energy_factor = args[:dehumidifier_efficiency_ief]
4845
+ integrated_energy_factor = args[:dehumidifier_efficiency]
5319
4846
  end
5320
4847
 
5321
4848
  hpxml.dehumidifiers.add(id: 'Dehumidifier',
@@ -5324,31 +4851,31 @@ class HPXMLFile
5324
4851
  energy_factor: energy_factor,
5325
4852
  integrated_energy_factor: integrated_energy_factor,
5326
4853
  rh_setpoint: args[:dehumidifier_rh_setpoint],
5327
- fraction_served: args[:dehumidifier_fraction_dehumidification_load_served])
4854
+ fraction_served: args[:dehumidifier_fraction_dehumidification_load_served],
4855
+ location: HPXML::LocationLivingSpace)
5328
4856
  end
5329
4857
 
5330
4858
  def self.set_clothes_washer(hpxml, runner, args)
5331
4859
  if args[:water_heater_type] == 'none'
5332
- args[:clothes_washer_present] = false
4860
+ args[:clothes_washer_location] = 'none'
5333
4861
  end
5334
4862
 
5335
- return unless args[:clothes_washer_present]
4863
+ return if args[:clothes_washer_location] == 'none'
5336
4864
 
5337
4865
  if args[:clothes_washer_rated_annual_kwh] != Constants.Auto
5338
4866
  rated_annual_kwh = args[:clothes_washer_rated_annual_kwh]
4867
+ return if Float(rated_annual_kwh) == 0
5339
4868
  end
5340
4869
 
5341
4870
  if args[:clothes_washer_location] != Constants.Auto
5342
4871
  location = args[:clothes_washer_location]
5343
4872
  end
5344
4873
 
5345
- if args[:clothes_washer_efficiency_type] == 'ModifiedEnergyFactor'
5346
- if args[:clothes_washer_efficiency_mef] != Constants.Auto
5347
- modified_energy_factor = args[:clothes_washer_efficiency_mef]
5348
- end
5349
- elsif args[:clothes_washer_efficiency_type] == 'IntegratedModifiedEnergyFactor'
5350
- if args[:clothes_washer_efficiency_imef] != Constants.Auto
5351
- integrated_modified_energy_factor = args[:clothes_washer_efficiency_imef]
4874
+ if args[:clothes_washer_efficiency] != Constants.Auto
4875
+ if args[:clothes_washer_efficiency_type] == 'ModifiedEnergyFactor'
4876
+ modified_energy_factor = args[:clothes_washer_efficiency].to_f
4877
+ elsif args[:clothes_washer_efficiency_type] == 'IntegratedModifiedEnergyFactor'
4878
+ integrated_modified_energy_factor = args[:clothes_washer_efficiency].to_f
5352
4879
  end
5353
4880
  end
5354
4881
 
@@ -5390,14 +4917,14 @@ class HPXMLFile
5390
4917
  end
5391
4918
 
5392
4919
  def self.set_clothes_dryer(hpxml, runner, args)
5393
- return unless args[:clothes_washer_present]
5394
- return unless args[:clothes_dryer_present]
5395
-
5396
- if args[:clothes_dryer_efficiency_type] == 'EnergyFactor'
5397
- energy_factor = args[:clothes_dryer_efficiency_ef]
5398
- elsif args[:clothes_dryer_efficiency_type] == 'CombinedEnergyFactor'
5399
- if args[:clothes_dryer_efficiency_cef] != Constants.Auto
5400
- combined_energy_factor = args[:clothes_dryer_efficiency_cef]
4920
+ return if args[:clothes_washer_location] == 'none'
4921
+ return if args[:clothes_dryer_location] == 'none'
4922
+
4923
+ if args[:clothes_dryer_efficiency] != Constants.Auto
4924
+ if args[:clothes_dryer_efficiency_type] == 'EnergyFactor'
4925
+ energy_factor = args[:clothes_dryer_efficiency].to_f
4926
+ elsif args[:clothes_dryer_efficiency_type] == 'CombinedEnergyFactor'
4927
+ combined_energy_factor = args[:clothes_dryer_efficiency].to_f
5401
4928
  end
5402
4929
  end
5403
4930
 
@@ -5405,10 +4932,6 @@ class HPXMLFile
5405
4932
  location = args[:clothes_dryer_location]
5406
4933
  end
5407
4934
 
5408
- if args[:clothes_dryer_control_type] != Constants.Auto
5409
- control_type = args[:clothes_dryer_control_type]
5410
- end
5411
-
5412
4935
  if args[:clothes_dryer_vented_flow_rate] != Constants.Auto
5413
4936
  is_vented = false
5414
4937
  if Float(args[:clothes_dryer_vented_flow_rate]) > 0
@@ -5426,25 +4949,25 @@ class HPXMLFile
5426
4949
  fuel_type: args[:clothes_dryer_fuel_type],
5427
4950
  energy_factor: energy_factor,
5428
4951
  combined_energy_factor: combined_energy_factor,
5429
- control_type: control_type,
5430
4952
  is_vented: is_vented,
5431
4953
  vented_flow_rate: vented_flow_rate,
5432
4954
  usage_multiplier: usage_multiplier)
5433
4955
  end
5434
4956
 
5435
4957
  def self.set_dishwasher(hpxml, runner, args)
5436
- return unless args[:dishwasher_present]
4958
+ return if args[:dishwasher_location] == 'none'
5437
4959
 
5438
4960
  if args[:dishwasher_location] != Constants.Auto
5439
4961
  location = args[:dishwasher_location]
5440
4962
  end
5441
4963
 
5442
4964
  if args[:dishwasher_efficiency_type] == 'RatedAnnualkWh'
5443
- if args[:dishwasher_efficiency_kwh] != Constants.Auto
5444
- rated_annual_kwh = args[:dishwasher_efficiency_kwh]
4965
+ if args[:dishwasher_efficiency] != Constants.Auto
4966
+ rated_annual_kwh = args[:dishwasher_efficiency]
4967
+ return if Float(rated_annual_kwh) == 0
5445
4968
  end
5446
4969
  elsif args[:dishwasher_efficiency_type] == 'EnergyFactor'
5447
- energy_factor = args[:dishwasher_efficiency_ef]
4970
+ energy_factor = args[:dishwasher_efficiency]
5448
4971
  end
5449
4972
 
5450
4973
  if args[:dishwasher_label_electric_rate] != Constants.Auto
@@ -5484,10 +5007,11 @@ class HPXMLFile
5484
5007
  end
5485
5008
 
5486
5009
  def self.set_refrigerator(hpxml, runner, args)
5487
- return unless args[:refrigerator_present]
5010
+ return if args[:refrigerator_location] == 'none'
5488
5011
 
5489
5012
  if args[:refrigerator_rated_annual_kwh] != Constants.Auto
5490
- refrigerator_rated_annual_kwh = args[:refrigerator_rated_annual_kwh]
5013
+ rated_annual_kwh = args[:refrigerator_rated_annual_kwh]
5014
+ return if Float(rated_annual_kwh) == 0
5491
5015
  end
5492
5016
 
5493
5017
  if args[:refrigerator_location] != Constants.Auto
@@ -5498,22 +5022,23 @@ class HPXMLFile
5498
5022
  usage_multiplier = args[:refrigerator_usage_multiplier]
5499
5023
  end
5500
5024
 
5501
- if args[:extra_refrigerator_present]
5025
+ if args[:extra_refrigerator_location] != 'none'
5502
5026
  primary_indicator = true
5503
5027
  end
5504
5028
 
5505
5029
  hpxml.refrigerators.add(id: 'Refrigerator',
5506
5030
  location: location,
5507
- rated_annual_kwh: refrigerator_rated_annual_kwh,
5031
+ rated_annual_kwh: rated_annual_kwh,
5508
5032
  primary_indicator: primary_indicator,
5509
5033
  usage_multiplier: usage_multiplier)
5510
5034
  end
5511
5035
 
5512
5036
  def self.set_extra_refrigerator(hpxml, runner, args)
5513
- return unless args[:extra_refrigerator_present]
5037
+ return if args[:extra_refrigerator_location] == 'none'
5514
5038
 
5515
5039
  if args[:extra_refrigerator_rated_annual_kwh] != Constants.Auto
5516
5040
  rated_annual_kwh = args[:extra_refrigerator_rated_annual_kwh]
5041
+ return if Float(rated_annual_kwh) == 0
5517
5042
  end
5518
5043
 
5519
5044
  if args[:extra_refrigerator_location] != Constants.Auto
@@ -5532,10 +5057,11 @@ class HPXMLFile
5532
5057
  end
5533
5058
 
5534
5059
  def self.set_freezer(hpxml, runner, args)
5535
- return unless args[:freezer_present]
5060
+ return if args[:freezer_location] == 'none'
5536
5061
 
5537
5062
  if args[:freezer_rated_annual_kwh] != Constants.Auto
5538
5063
  rated_annual_kwh = args[:freezer_rated_annual_kwh]
5064
+ return if Float(rated_annual_kwh) == 0
5539
5065
  end
5540
5066
 
5541
5067
  if args[:freezer_location] != Constants.Auto
@@ -5553,7 +5079,7 @@ class HPXMLFile
5553
5079
  end
5554
5080
 
5555
5081
  def self.set_cooking_range_oven(hpxml, runner, args)
5556
- return unless args[:cooking_range_oven_present]
5082
+ return if args[:cooking_range_oven_location] == 'none'
5557
5083
 
5558
5084
  if args[:cooking_range_oven_location] != Constants.Auto
5559
5085
  location = args[:cooking_range_oven_location]
@@ -5602,7 +5128,7 @@ class HPXMLFile
5602
5128
  kWh_per_year = args[:plug_loads_television_annual_kwh]
5603
5129
  end
5604
5130
 
5605
- usage_multiplier = args[:plug_loads_television_usage_multiplier] * args[:plug_loads_television_usage_multiplier_2]
5131
+ usage_multiplier = args[:plug_loads_television_usage_multiplier]
5606
5132
  if usage_multiplier == 1.0
5607
5133
  usage_multiplier = nil
5608
5134
  end
@@ -5626,7 +5152,7 @@ class HPXMLFile
5626
5152
  frac_latent = args[:plug_loads_other_frac_latent]
5627
5153
  end
5628
5154
 
5629
- usage_multiplier = args[:plug_loads_other_usage_multiplier] * args[:plug_loads_other_usage_multiplier_2]
5155
+ usage_multiplier = args[:plug_loads_other_usage_multiplier]
5630
5156
  if usage_multiplier == 1.0
5631
5157
  usage_multiplier = nil
5632
5158
  end
@@ -5646,7 +5172,7 @@ class HPXMLFile
5646
5172
  kWh_per_year = args[:plug_loads_well_pump_annual_kwh]
5647
5173
  end
5648
5174
 
5649
- usage_multiplier = args[:plug_loads_well_pump_usage_multiplier] * args[:plug_loads_well_pump_usage_multiplier_2]
5175
+ usage_multiplier = args[:plug_loads_well_pump_usage_multiplier]
5650
5176
  if usage_multiplier == 1.0
5651
5177
  usage_multiplier = nil
5652
5178
  end
@@ -5664,7 +5190,7 @@ class HPXMLFile
5664
5190
  kWh_per_year = args[:plug_loads_vehicle_annual_kwh]
5665
5191
  end
5666
5192
 
5667
- usage_multiplier = args[:plug_loads_vehicle_usage_multiplier] * args[:plug_loads_vehicle_usage_multiplier_2]
5193
+ usage_multiplier = args[:plug_loads_vehicle_usage_multiplier]
5668
5194
  if usage_multiplier == 1.0
5669
5195
  usage_multiplier = nil
5670
5196
  end
@@ -5750,18 +5276,20 @@ class HPXMLFile
5750
5276
  pump_usage_multiplier = args[:pool_pump_usage_multiplier]
5751
5277
  end
5752
5278
 
5753
- if args[:pool_heater_type] != 'none'
5754
- heater_type = args[:pool_heater_type]
5755
- end
5279
+ pool_heater_type = args[:pool_heater_type]
5756
5280
 
5757
- if args[:pool_heater_annual_kwh] != Constants.Auto
5758
- heater_load_units = 'kWh/year'
5759
- heater_load_value = args[:pool_heater_annual_kwh]
5281
+ if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(pool_heater_type)
5282
+ if args[:pool_heater_annual_kwh] != Constants.Auto
5283
+ heater_load_units = 'kWh/year'
5284
+ heater_load_value = args[:pool_heater_annual_kwh]
5285
+ end
5760
5286
  end
5761
5287
 
5762
- if args[:pool_heater_annual_therm] != Constants.Auto
5763
- heater_load_units = 'therm/year'
5764
- heater_load_value = args[:pool_heater_annual_therm]
5288
+ if [HPXML::HeaterTypeGas].include?(pool_heater_type)
5289
+ if args[:pool_heater_annual_therm] != Constants.Auto
5290
+ heater_load_units = 'therm/year'
5291
+ heater_load_value = args[:pool_heater_annual_therm]
5292
+ end
5765
5293
  end
5766
5294
 
5767
5295
  if args[:pool_heater_usage_multiplier] != 1.0
@@ -5769,9 +5297,11 @@ class HPXMLFile
5769
5297
  end
5770
5298
 
5771
5299
  hpxml.pools.add(id: 'Pool',
5300
+ type: HPXML::TypeUnknown,
5301
+ pump_type: HPXML::TypeUnknown,
5772
5302
  pump_kwh_per_year: pump_kwh_per_year,
5773
5303
  pump_usage_multiplier: pump_usage_multiplier,
5774
- heater_type: heater_type,
5304
+ heater_type: pool_heater_type,
5775
5305
  heater_load_units: heater_load_units,
5776
5306
  heater_load_value: heater_load_value,
5777
5307
  heater_usage_multiplier: heater_usage_multiplier)
@@ -5788,18 +5318,20 @@ class HPXMLFile
5788
5318
  pump_usage_multiplier = args[:hot_tub_pump_usage_multiplier]
5789
5319
  end
5790
5320
 
5791
- if args[:hot_tub_heater_type] != 'none'
5792
- heater_type = args[:hot_tub_heater_type]
5793
- end
5321
+ hot_tub_heater_type = args[:hot_tub_heater_type]
5794
5322
 
5795
- if args[:hot_tub_heater_annual_kwh] != Constants.Auto
5796
- heater_load_units = 'kWh/year'
5797
- heater_load_value = args[:hot_tub_heater_annual_kwh]
5323
+ if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(hot_tub_heater_type)
5324
+ if args[:hot_tub_heater_annual_kwh] != Constants.Auto
5325
+ heater_load_units = 'kWh/year'
5326
+ heater_load_value = args[:hot_tub_heater_annual_kwh]
5327
+ end
5798
5328
  end
5799
5329
 
5800
- if args[:hot_tub_heater_annual_therm] != Constants.Auto
5801
- heater_load_units = 'therm/year'
5802
- heater_load_value = args[:hot_tub_heater_annual_therm]
5330
+ if [HPXML::HeaterTypeGas].include?(hot_tub_heater_type)
5331
+ if args[:hot_tub_heater_annual_therm] != Constants.Auto
5332
+ heater_load_units = 'therm/year'
5333
+ heater_load_value = args[:hot_tub_heater_annual_therm]
5334
+ end
5803
5335
  end
5804
5336
 
5805
5337
  if args[:hot_tub_heater_usage_multiplier] != 1.0
@@ -5807,9 +5339,11 @@ class HPXMLFile
5807
5339
  end
5808
5340
 
5809
5341
  hpxml.hot_tubs.add(id: 'HotTub',
5342
+ type: HPXML::TypeUnknown,
5343
+ pump_type: HPXML::TypeUnknown,
5810
5344
  pump_kwh_per_year: pump_kwh_per_year,
5811
5345
  pump_usage_multiplier: pump_usage_multiplier,
5812
- heater_type: heater_type,
5346
+ heater_type: hot_tub_heater_type,
5813
5347
  heater_load_units: heater_load_units,
5814
5348
  heater_load_value: heater_load_value,
5815
5349
  heater_usage_multiplier: heater_usage_multiplier)
@@ -5827,31 +5361,7 @@ class HPXMLFile
5827
5361
  st = space.spaceType.get
5828
5362
  space_type = st.standardsSpaceType.get
5829
5363
 
5830
- if ['vented crawlspace'].include? space_type
5831
- return HPXML::LocationCrawlspaceVented
5832
- elsif ['unvented crawlspace'].include? space_type
5833
- return HPXML::LocationCrawlspaceUnvented
5834
- elsif ['garage'].include? space_type
5835
- return HPXML::LocationGarage
5836
- elsif ['living space'].include? space_type
5837
- if Geometry.space_is_below_grade(space)
5838
- return HPXML::LocationBasementConditioned
5839
- else
5840
- return HPXML::LocationLivingSpace
5841
- end
5842
- elsif ['vented attic'].include? space_type
5843
- return HPXML::LocationAtticVented
5844
- elsif ['unvented attic'].include? space_type
5845
- return HPXML::LocationAtticUnvented
5846
- elsif ['unconditioned basement'].include? space_type
5847
- return HPXML::LocationBasementUnconditioned
5848
- elsif ['corridor'].include? space_type
5849
- return HPXML::LocationOtherHousingUnit
5850
- elsif ['ambient'].include? space_type
5851
- return HPXML::LocationOutside
5852
- else
5853
- fail "Unhandled SpaceType value (#{space_type}) for surface '#{surface.name}'."
5854
- end
5364
+ return space_type
5855
5365
  end
5856
5366
 
5857
5367
  def self.get_surface_azimuth(surface, args)