urbanopt-cli 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (871) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -1
  3. data/CMakeLists.txt +8 -8
  4. data/LICENSE.md +11 -1
  5. data/Rakefile +16 -6
  6. data/example_files/example_project_combined.json +100 -5
  7. data/example_files/mappers/Baseline.rb +31 -18
  8. data/example_files/mappers/CreateBar.rb +16 -6
  9. data/example_files/mappers/EvCharging.rb +20 -10
  10. data/example_files/mappers/Floorspace.rb +16 -6
  11. data/example_files/mappers/HighEfficiencyCreateBar.rb +16 -6
  12. data/example_files/mappers/HighEfficiencyFloorspace.rb +16 -6
  13. data/example_files/mappers/ThermalStorage.rb +16 -6
  14. data/example_files/measures/BuildResidentialModel/measure.rb +211 -129
  15. data/example_files/residential/clothes_dryer.tsv +7 -7
  16. data/example_files/residential/clothes_washer.tsv +1 -1
  17. data/example_files/residential/cooling_system.tsv +42 -22
  18. data/example_files/residential/dishwasher.tsv +1 -1
  19. data/example_files/residential/exhaust.tsv +3 -0
  20. data/example_files/residential/heat_pump.tsv +62 -40
  21. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -0
  22. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +23 -0
  23. data/example_files/resources/hpxml-measures/.gitignore +1 -8
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +633 -1188
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1524 -1211
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +424 -335
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +104 -62
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +31 -55
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +30 -54
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +30 -54
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +30 -54
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +30 -54
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +31 -55
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +31 -55
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +36 -60
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +31 -55
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +31 -55
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +31 -55
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +31 -55
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +31 -55
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +31 -55
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +31 -55
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +31 -55
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +31 -55
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +31 -55
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +31 -55
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +31 -55
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +31 -55
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +31 -56
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +31 -56
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +31 -55
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +31 -56
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +31 -56
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +31 -56
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +31 -56
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +31 -55
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +31 -55
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +31 -55
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +31 -56
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +31 -55
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +32 -56
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +31 -55
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +31 -55
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +31 -55
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +31 -55
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +31 -55
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +31 -55
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +31 -55
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +31 -55
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +31 -55
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +31 -55
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +31 -55
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +31 -55
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +31 -55
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +31 -55
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +31 -55
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +31 -55
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +31 -55
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +31 -55
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +31 -55
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +31 -55
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +31 -55
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +31 -55
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +31 -55
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +31 -55
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +31 -55
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +31 -55
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +31 -55
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +31 -55
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +31 -55
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +31 -55
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +31 -55
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +31 -55
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +31 -55
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +31 -55
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +31 -55
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +31 -55
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +31 -55
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +31 -55
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +31 -55
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +31 -55
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +31 -55
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +31 -55
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +31 -55
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +32 -56
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +31 -55
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +31 -55
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +31 -55
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +31 -55
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +30 -54
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +30 -54
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +30 -54
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +30 -54
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +30 -54
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +31 -56
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +31 -55
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +31 -55
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +31 -55
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +31 -55
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +31 -56
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +31 -56
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +31 -55
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +31 -55
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +31 -55
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +31 -56
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +31 -55
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +31 -55
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +31 -57
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +31 -56
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +31 -56
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +31 -55
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +31 -55
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +32 -57
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +31 -55
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +31 -55
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +31 -55
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +32 -56
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +31 -56
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +31 -56
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +31 -56
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +31 -56
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +31 -55
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +31 -55
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +31 -55
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +31 -55
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +31 -56
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +31 -55
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +31 -55
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +31 -55
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +31 -55
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +31 -57
  160. 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} +36 -58
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +31 -56
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +31 -56
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +32 -57
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +32 -57
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +32 -57
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +32 -57
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +31 -55
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +31 -56
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +31 -55
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +31 -55
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +31 -55
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +31 -56
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +31 -56
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +31 -55
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +31 -56
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +31 -55
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +31 -55
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +31 -55
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +40 -64
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +31 -55
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +44 -68
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +337 -0
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +31 -55
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +31 -55
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +39 -65
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +32 -56
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +31 -55
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +31 -55
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +31 -55
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +31 -55
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +31 -55
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +31 -55
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +31 -55
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +31 -55
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +29 -53
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +29 -53
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +29 -53
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +31 -55
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -54
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +31 -55
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +34 -58
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +31 -55
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +31 -55
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +31 -55
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +31 -55
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +31 -55
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +31 -55
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +31 -55
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +31 -55
  228. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +57 -56
  229. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +31 -55
  230. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
  231. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
  232. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
  233. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
  234. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
  235. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
  236. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
  237. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
  238. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
  239. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
  240. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
  241. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
  242. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
  243. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
  244. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
  245. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
  246. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
  247. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
  248. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
  249. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
  250. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
  251. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
  252. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
  253. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
  254. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
  255. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  256. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
  257. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  258. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
  259. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  260. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
  261. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  262. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
  263. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  264. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
  265. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  266. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
  267. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  268. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
  269. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  270. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
  271. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  272. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
  273. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
  274. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
  275. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
  276. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
  277. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
  278. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
  279. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
  280. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
  281. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
  282. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
  283. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
  284. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
  285. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
  286. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
  287. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
  288. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
  289. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
  290. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
  291. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
  292. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
  293. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
  294. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
  295. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
  296. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +339 -0
  297. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
  298. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +339 -0
  299. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
  300. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
  301. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
  302. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
  303. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
  304. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +339 -0
  305. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
  306. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
  307. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
  308. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
  309. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
  310. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
  311. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +31 -55
  312. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
  313. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
  314. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
  315. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +31 -55
  316. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
  317. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +31 -55
  318. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +31 -55
  319. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
  320. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
  321. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
  322. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +34 -58
  323. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
  324. 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} +32 -56
  325. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +31 -55
  326. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
  327. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
  328. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
  329. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
  330. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
  331. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +34 -58
  332. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
  333. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +31 -55
  334. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +31 -55
  335. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +31 -55
  336. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +31 -55
  337. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
  338. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +31 -55
  339. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +31 -55
  340. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +31 -55
  341. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +31 -55
  342. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +31 -55
  343. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
  344. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/{multipliers-without-plug-loads.osw → multipliers-without-tv-plug-loads.osw} +35 -59
  345. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +337 -0
  346. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
  347. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +31 -55
  348. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +31 -55
  349. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +31 -55
  350. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
  351. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +31 -55
  352. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
  353. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +31 -55
  354. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +31 -55
  355. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +31 -55
  356. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +31 -55
  357. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +31 -55
  358. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +31 -55
  359. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +31 -55
  360. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +31 -55
  361. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -57
  362. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +31 -55
  363. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
  364. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
  365. data/example_files/resources/hpxml-measures/Changelog.md +238 -0
  366. data/example_files/resources/hpxml-measures/Gemfile +4 -2
  367. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +265 -838
  368. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +135 -114
  369. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +5 -97
  370. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +573 -193
  371. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +2 -28
  372. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +114 -22
  373. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +107 -176
  374. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -180
  375. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +481 -94
  376. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +2 -6
  377. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +23 -11
  378. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +27 -25
  379. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +735 -453
  380. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +417 -105
  381. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1377 -1335
  382. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1393 -1467
  383. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +2 -1
  384. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +20 -7
  385. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +64 -3
  386. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +2 -22
  387. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -3
  388. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +15 -6
  389. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +7 -1
  390. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
  391. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +1 -1
  392. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +3 -4
  393. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +31 -30
  394. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +4 -1
  395. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +62 -16
  396. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +507 -628
  397. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +3 -0
  398. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +4 -1
  399. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +321 -6
  400. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -0
  401. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +3 -0
  402. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -0
  403. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +3 -0
  404. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +3 -0
  405. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +25 -1
  406. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +3 -0
  407. data/example_files/resources/hpxml-measures/README.md +4 -4
  408. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +111 -37
  409. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +318 -490
  410. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +237 -183
  411. data/example_files/resources/hpxml-measures/docs/source/conf.py +4 -1
  412. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +2 -2
  413. data/example_files/resources/hpxml-measures/docs/source/intro.rst +3 -105
  414. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +476 -351
  415. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +154 -130
  416. data/example_files/resources/hpxml-measures/tasks.rb +1287 -511
  417. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
  418. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
  419. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
  420. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
  421. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
  422. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
  423. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
  424. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
  425. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +23 -5
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +1 -1
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +2 -1
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +2 -1
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +2 -1
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +534 -0
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +2 -1
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +1 -1
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +1 -1
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +1 -0
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +1 -1
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +1 -1
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +1 -1
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +1 -1
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +3 -3
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +1 -1
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +1 -1
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +1 -1
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +1 -1
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +1 -1
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +1 -1
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +1 -1
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +1 -1
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +1 -1
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +0 -1
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +4 -4
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +20 -4
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +27 -18
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +27 -18
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +0 -1
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +4 -4
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +20 -4
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +20 -4
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +22 -11
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +0 -1
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +4 -4
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +20 -4
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +22 -12
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +22 -12
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +1 -1
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +2 -3
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +1 -1
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +2 -1
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +1 -1
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +1 -1
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +1 -1
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +1 -1
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +1 -1
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +1 -1
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +14 -2
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +0 -1
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +0 -1
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +1 -1
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +563 -564
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +1 -1
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +1 -4
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +1 -1
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +1 -4
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +1 -1
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +0 -1
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +0 -1
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +0 -1
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +0 -1
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +0 -1
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +1 -1
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +1 -1
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +1 -1
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +0 -1
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +1 -1
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +0 -1
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +1 -0
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +1 -1
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +1 -1
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +1 -1
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +1 -1
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +1 -1
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +1 -1
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +1 -1
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +1 -1
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +1 -1
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +1 -1
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +1 -1
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +1 -1
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +1 -1
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +1 -1
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +1 -1
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +1 -1
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +1 -1
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +1 -1
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +1 -1
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +1 -1
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +1 -1
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +1 -1
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +1 -1
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +1 -1
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +1 -1
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +1 -1
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +1 -1
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +1 -1
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +1 -1
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +1 -1
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +1 -1
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +2 -2
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +1 -1
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +1 -1
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +1 -1
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +1 -1
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +1 -1
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +1 -1
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +1 -1
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +1 -1
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +1 -1
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +1 -1
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +1 -1
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +6 -1
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +1 -1
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +600 -0
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +1 -1
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +1 -1
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +1 -1
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2474 -0
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +1 -1
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +1 -1
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +576 -561
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +1 -1
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +643 -0
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +1 -1
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +1 -1
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +1 -1
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +3 -3
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +1 -1
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +2 -2
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +2 -2
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +1 -1
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +2 -2
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +1 -1
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +1 -1
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +1 -1
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +555 -0
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +561 -0
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +1 -4
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +1 -1
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +1 -1
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +552 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +557 -0
  570. 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} +1 -4
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed.xml} +1 -4
  572. 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} +559 -559
  573. 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} +556 -556
  574. 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-manual-s-oversize-allowances.xml} +559 -556
  575. 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.xml} +556 -559
  576. 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
  577. 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} +568 -569
  578. 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
  579. 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} +1 -4
  580. 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} +546 -546
  581. 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} +546 -546
  582. 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} +1 -7
  583. 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} +1 -4
  584. 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} +1 -4
  585. 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
  586. 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} +552 -552
  587. 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
  588. 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} +546 -546
  589. 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} +559 -559
  590. 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} +559 -559
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +547 -0
  592. 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} +557 -557
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +554 -0
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +559 -0
  595. 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} +561 -562
  596. 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} +558 -559
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +546 -0
  598. 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} +1 -4
  599. 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} +1 -4
  600. 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} +1 -4
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +556 -0
  602. 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
  603. 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
  604. 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
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +559 -559
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +0 -1
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +0 -1
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +1 -2
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +0 -1
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +0 -1
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +0 -1
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +0 -1
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +1 -4
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +1 -1
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +1 -1
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +1 -7
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +0 -1
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +1 -4
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +1 -4
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +1 -1
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +1 -1
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +1 -4
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +1 -1
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +0 -1
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +2 -1
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -1
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -4
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +512 -513
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +512 -513
  631. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +547 -547
  632. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +1 -1
  633. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +1 -1
  634. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +1 -1
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +1 -1
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +547 -550
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +1 -1
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +1 -1
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +1 -1
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +1 -1
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +0 -1
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +556 -0
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +562 -0
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +561 -562
  645. 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} +567 -561
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +565 -562
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +566 -0
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +566 -0
  649. 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} +570 -564
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +571 -0
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +571 -0
  652. 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} +551 -549
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +565 -0
  654. 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} +551 -548
  655. 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} +564 -558
  656. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +568 -0
  657. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +565 -0
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +569 -0
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +1 -4
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +0 -4
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +1 -4
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +1 -4
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +1 -4
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +0 -4
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +916 -913
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +837 -834
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +0 -1
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +1 -1
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +1 -1
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +0 -1
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +0 -1
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +1 -1
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +512 -513
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +512 -513
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +1 -1
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +1 -1
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +512 -513
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +1 -1
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +1 -1
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -1
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +1 -1
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +34 -23
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +1 -1
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +34 -23
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +562 -0
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +516 -0
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +1 -1
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +516 -0
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +576 -0
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +1 -1
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +1 -1
  693. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +0 -1
  694. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -1
  695. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +1 -1
  696. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +1 -1
  697. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +1 -1
  698. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +1 -1
  699. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +1 -1
  700. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +1 -1
  701. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +1 -1
  702. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +2 -1
  703. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +1 -1
  704. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +1 -1
  705. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +1 -0
  706. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +1 -1
  707. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +5 -1
  708. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +9 -1
  709. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +1 -1
  710. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +1 -1
  711. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +563 -0
  712. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +5 -1
  713. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1654 -0
  714. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +1 -1
  715. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +563 -0
  716. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +1 -1
  717. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +1 -1
  718. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +1 -1
  719. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +1 -1
  720. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +1 -1
  721. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +1 -1
  722. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +1 -1
  723. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +1 -1
  724. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
  725. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +0 -1
  726. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +1 -1
  727. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +1 -1
  728. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +1 -1
  729. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +534 -0
  730. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +534 -0
  731. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -1
  732. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +1 -1
  733. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +1 -1
  734. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +1 -1
  735. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +562 -0
  736. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +562 -0
  737. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +1 -1
  738. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +1 -1
  739. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +1 -1
  740. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +1 -1
  741. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +2 -2
  742. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +2 -2
  743. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +4 -4
  744. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +447 -0
  745. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +1 -1
  746. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +1 -1
  747. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +1 -1
  748. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +1 -1
  749. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +1 -1
  750. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +11 -58
  751. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +759 -0
  752. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +758 -0
  753. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +760 -0
  754. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +758 -0
  755. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +562 -0
  756. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +459 -0
  757. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +578 -0
  758. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +1 -4
  759. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +916 -913
  760. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +916 -913
  761. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +2 -7
  762. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -1
  763. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -1
  764. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +916 -913
  765. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +1 -1
  766. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +1 -1
  767. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +562 -0
  768. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +1 -1
  769. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +1 -1
  770. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +1 -1
  771. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +1 -1
  772. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +2 -2
  773. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +1 -1
  774. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +1 -1
  775. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +1 -1
  776. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +573 -0
  777. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +590 -0
  778. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +590 -0
  779. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +562 -0
  780. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +1 -1
  781. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +1 -1
  782. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +464 -0
  783. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +562 -0
  784. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +450 -0
  785. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +1 -4
  786. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +0 -1
  787. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +1 -1
  788. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +1 -1
  789. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +472 -0
  790. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +1 -1
  791. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +6 -1
  792. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +1 -1
  793. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +912 -909
  794. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +1 -1
  795. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +1 -1
  796. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +1 -1
  797. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +12 -2
  798. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +1 -1
  799. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1654 -0
  800. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1654 -0
  801. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ideal-air.xml → invalid_files/multiple-shared-cooling-systems.xml} +431 -498
  802. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
  803. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +1 -1
  804. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +1 -1
  805. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +1 -1
  806. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +1 -1
  807. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +1 -1
  808. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +1 -1
  809. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +1 -1
  810. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +1 -4
  811. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -1
  812. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -1
  813. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +1 -4
  814. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -1
  815. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +1 -1
  816. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +1 -1
  817. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +1 -1
  818. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +1 -1
  819. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +1 -1
  820. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +1 -1
  821. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +1 -1
  822. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +1 -1
  823. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +1 -1
  824. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +1 -1
  825. data/example_files/resources/hpxml-measures/workflow/template.osw +4 -1
  826. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +0 -3
  827. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +0 -3
  828. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +0 -3
  829. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +0 -3
  830. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +0 -3
  831. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +0 -3
  832. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +0 -3
  833. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +0 -3
  834. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +0 -3
  835. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +0 -3
  836. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +0 -3
  837. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +0 -3
  838. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +0 -3
  839. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +0 -3
  840. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +0 -3
  841. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +0 -3
  842. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +0 -3
  843. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +0 -3
  844. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +0 -3
  845. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +0 -3
  846. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +0 -3
  847. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +0 -3
  848. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +0 -3
  849. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +0 -3
  850. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +0 -3
  851. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +0 -3
  852. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +232 -360
  853. data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
  854. data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
  855. data/lib/uo_cli.rb +187 -44
  856. data/lib/uo_cli/version.rb +17 -7
  857. data/requirements.txt +2 -0
  858. data/uo_cli.gemspec +2 -2
  859. metadata +248 -64
  860. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
  861. data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
  862. data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
  863. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
  864. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
  865. data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
  866. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
  867. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
  868. data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
  869. data/example_files/resources/hpxml-measures/.circleci/config.yml +0 -20
  870. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
  871. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +0 -369
@@ -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
14
  - [ ] No unexpected regression test changes on CI
@@ -0,0 +1,23 @@
1
+ name: ci
2
+ on: [push]
3
+ jobs:
4
+ build:
5
+ runs-on: ubuntu-latest
6
+ container:
7
+ image: docker://nrel/openstudio:3.1.0
8
+ steps:
9
+ - uses: actions/checkout@v2
10
+
11
+ - name: Install gems
12
+ run: |
13
+ rm -f Gemfile.lock && bundle install
14
+
15
+ - name: Run tests
16
+ run: |
17
+ bundle exec rake test_all
18
+
19
+ - name: Store results
20
+ uses: actions/upload-artifact@v2
21
+ with:
22
+ path: workflow/tests/results
23
+ name: results
@@ -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.")
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
 
@@ -958,6 +968,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
958
968
  cooling_system_type_choices << HPXML::HVACTypeEvaporativeCooler
959
969
  cooling_system_type_choices << HPXML::HVACTypeMiniSplitAirConditioner
960
970
 
971
+ cooling_efficiency_type_choices = OpenStudio::StringVector.new
972
+ cooling_efficiency_type_choices << HPXML::UnitsSEER
973
+ cooling_efficiency_type_choices << HPXML::UnitsEER
974
+
961
975
  compressor_type_choices = OpenStudio::StringVector.new
962
976
  compressor_type_choices << HPXML::HVACCompressorTypeSingleStage
963
977
  compressor_type_choices << HPXML::HVACCompressorTypeTwoStage
@@ -996,28 +1010,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
996
1010
  arg.setDefaultValue(1)
997
1011
  args << arg
998
1012
 
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)
1013
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_airflow_defect_ratio', false)
1014
+ arg.setDisplayName('Heating System: Airflow Defect Ratio')
1015
+ 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}.")
1016
+ arg.setUnits('Frac')
1021
1017
  args << arg
1022
1018
 
1023
1019
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_type', cooling_system_type_choices, true)
@@ -1026,18 +1022,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1026
1022
  arg.setDefaultValue(HPXML::HVACTypeCentralAirConditioner)
1027
1023
  args << arg
1028
1024
 
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)
1025
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_efficiency_type', cooling_efficiency_type_choices, true)
1026
+ arg.setDisplayName('Cooling System: Efficiency Type')
1027
+ 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}.")
1028
+ arg.setDefaultValue(HPXML::UnitsSEER)
1034
1029
  args << arg
1035
1030
 
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)
1031
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_efficiency', true)
1032
+ arg.setDisplayName('Cooling System: Efficiency')
1033
+ arg.setUnits("#{HPXML::UnitsSEER} or #{HPXML::UnitsEER}")
1034
+ arg.setDescription("The rated efficiency value of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}.")
1035
+ arg.setDefaultValue(13.0)
1041
1036
  args << arg
1042
1037
 
1043
1038
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_compressor_type', compressor_type_choices, false)
@@ -1047,13 +1042,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1047
1042
 
1048
1043
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_sensible_heat_fraction', false)
1049
1044
  arg.setDisplayName('Cooling System: Cooling Sensible Heat Fraction')
1050
- arg.setDescription('The sensible heat fraction of the cooling system. Ignored for evaporative cooler.')
1045
+ arg.setDescription("The sensible heat fraction of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}.")
1051
1046
  arg.setUnits('Frac')
1052
1047
  args << arg
1053
1048
 
1054
1049
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('cooling_system_cooling_capacity', true)
1055
1050
  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.")
1051
+ 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
1052
  arg.setUnits('tons')
1058
1053
  arg.setDefaultValue(Constants.Auto)
1059
1054
  args << arg
@@ -1067,14 +1062,20 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1067
1062
 
1068
1063
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooling_system_is_ducted', true)
1069
1064
  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}.")
1065
+ arg.setDescription("Whether the cooling system is ducted or not. Only used for #{HPXML::HVACTypeMiniSplitAirConditioner} and #{HPXML::HVACTypeEvaporativeCooler}.")
1071
1066
  arg.setDefaultValue(false)
1072
1067
  args << arg
1073
1068
 
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')
1069
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_airflow_defect_ratio', false)
1070
+ arg.setDisplayName('Cooling System: Airflow Defect Ratio')
1071
+ 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}.")
1072
+ arg.setUnits('Frac')
1073
+ args << arg
1074
+
1075
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_charge_defect_ratio', false)
1076
+ arg.setDisplayName('Cooling System: Charge Defect Ratio')
1077
+ 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}.")
1078
+ arg.setUnits('Frac')
1078
1079
  args << arg
1079
1080
 
1080
1081
  heat_pump_type_choices = OpenStudio::StringVector.new
@@ -1083,6 +1084,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1083
1084
  heat_pump_type_choices << HPXML::HVACTypeHeatPumpMiniSplit
1084
1085
  heat_pump_type_choices << HPXML::HVACTypeHeatPumpGroundToAir
1085
1086
 
1087
+ heat_pump_heating_efficiency_type_choices = OpenStudio::StringVector.new
1088
+ heat_pump_heating_efficiency_type_choices << HPXML::UnitsHSPF
1089
+ heat_pump_heating_efficiency_type_choices << HPXML::UnitsCOP
1090
+
1086
1091
  heat_pump_fuel_choices = OpenStudio::StringVector.new
1087
1092
  heat_pump_fuel_choices << HPXML::FuelTypeElectricity
1088
1093
 
@@ -1099,32 +1104,30 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1099
1104
  arg.setDefaultValue('none')
1100
1105
  args << arg
1101
1106
 
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)
1107
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_heating_efficiency_type', heat_pump_heating_efficiency_type_choices, true)
1108
+ arg.setDisplayName('Heat Pump: Heating Efficiency Type')
1109
+ 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}.")
1110
+ arg.setDefaultValue(HPXML::UnitsHSPF)
1107
1111
  args << arg
1108
1112
 
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)
1113
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_efficiency', true)
1114
+ arg.setDisplayName('Heat Pump: Heating Efficiency')
1115
+ arg.setUnits("#{HPXML::UnitsHSPF} or #{HPXML::UnitsCOP}")
1116
+ arg.setDescription('The rated heating efficiency value of the heat pump.')
1117
+ arg.setDefaultValue(7.7)
1114
1118
  args << arg
1115
1119
 
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)
1120
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_efficiency_type', cooling_efficiency_type_choices, true)
1121
+ arg.setDisplayName('Heat Pump: Cooling Efficiency Type')
1122
+ 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}.")
1123
+ arg.setDefaultValue(HPXML::UnitsSEER)
1121
1124
  args << arg
1122
1125
 
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)
1126
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_efficiency', true)
1127
+ arg.setDisplayName('Heat Pump: Cooling Efficiency')
1128
+ arg.setUnits("#{HPXML::UnitsSEER} or #{HPXML::UnitsEER}")
1129
+ arg.setDescription('The rated cooling efficiency value of the heat pump.')
1130
+ arg.setDefaultValue(13.0)
1128
1131
  args << arg
1129
1132
 
1130
1133
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_compressor_type', compressor_type_choices, false)
@@ -1145,7 +1148,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1145
1148
  arg.setDefaultValue(Constants.Auto)
1146
1149
  args << arg
1147
1150
 
1148
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('heat_pump_heating_capacity_17F', true)
1151
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('heat_pump_heating_capacity_17_f', true)
1149
1152
  arg.setDisplayName('Heat Pump: Heating Capacity 17F')
1150
1153
  arg.setDescription("The output heating capacity of the heat pump at 17F. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}.")
1151
1154
  arg.setUnits('Btu/hr')
@@ -1194,101 +1197,96 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1194
1197
 
1195
1198
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_switchover_temp', false)
1196
1199
  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.')
1200
+ 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
1201
  arg.setUnits('deg-F')
1199
1202
  args << arg
1200
1203
 
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')
1204
+ arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heat_pump_is_ducted', false)
1205
+ arg.setDisplayName('Heat Pump: Is Ducted')
1206
+ arg.setDescription("Whether the heat pump is ducted or not. Only used for #{HPXML::HVACTypeHeatPumpMiniSplit}.")
1210
1207
  args << arg
1211
1208
 
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')
1216
- args << arg
1217
-
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)
1209
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_airflow_defect_ratio', false)
1210
+ arg.setDisplayName('Heat Pump: Airflow Defect Ratio')
1211
+ 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}.")
1212
+ arg.setUnits('Frac')
1223
1213
  args << arg
1224
1214
 
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)
1215
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_charge_defect_ratio', false)
1216
+ arg.setDisplayName('Heat Pump: Charge Defect Ratio')
1217
+ 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.')
1218
+ arg.setUnits('Frac')
1230
1219
  args << arg
1231
1220
 
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
1221
+ heating_system_type_2_choices = OpenStudio::StringVector.new
1222
+ heating_system_type_2_choices << 'none'
1223
+ heating_system_type_2_choices << HPXML::HVACTypeWallFurnace
1224
+ heating_system_type_2_choices << HPXML::HVACTypeFloorFurnace
1225
+ heating_system_type_2_choices << HPXML::HVACTypeBoiler
1226
+ heating_system_type_2_choices << HPXML::HVACTypeElectricResistance
1227
+ heating_system_type_2_choices << HPXML::HVACTypeStove
1228
+ heating_system_type_2_choices << HPXML::HVACTypePortableHeater
1229
+ heating_system_type_2_choices << HPXML::HVACTypeFireplace
1237
1230
 
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')
1231
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_type_2', heating_system_type_2_choices, true)
1232
+ arg.setDisplayName('Heating System 2: Type')
1233
+ arg.setDescription('The type of the second heating system.')
1234
+ arg.setDefaultValue('none')
1242
1235
  args << arg
1243
1236
 
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')
1237
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_fuel_2', heating_system_fuel_choices, true)
1238
+ arg.setDisplayName('Heating System 2: Fuel Type')
1239
+ arg.setDescription("The fuel type of the second heating system. Ignored for #{HPXML::HVACTypeElectricResistance}.")
1240
+ arg.setDefaultValue(HPXML::FuelTypeElectricity)
1248
1241
  args << arg
1249
1242
 
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')
1243
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_efficiency_2', true)
1244
+ arg.setDisplayName('Heating System 2: Rated AFUE or Percent')
1245
+ arg.setUnits('Frac')
1246
+ arg.setDescription('For Furnace/WallFurnace/FloorFurnace/Boiler second heating system, the rated AFUE value. For ElectricResistance/Stove/PortableHeater/Fireplace, the rated Percent value.')
1247
+ arg.setDefaultValue(1.0)
1254
1248
  args << arg
1255
1249
 
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)
1250
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('heating_system_heating_capacity_2', true)
1251
+ arg.setDisplayName('Heating System 2: Heating Capacity')
1252
+ 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.")
1253
+ arg.setUnits('Btu/hr')
1254
+ arg.setDefaultValue(Constants.Auto)
1261
1255
  args << arg
1262
1256
 
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)
1257
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fraction_heat_load_served_2', true)
1258
+ arg.setDisplayName('Heating System 2: Fraction Heat Load Served')
1259
+ arg.setDescription('The heat load served fraction of the second heating system.')
1260
+ arg.setUnits('Frac')
1261
+ arg.setDefaultValue(0.25)
1268
1262
  args << arg
1269
1263
 
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.')
1264
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekday', true)
1265
+ arg.setDisplayName('Heating Setpoint: Weekday Schedule')
1266
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekday heating schedule.')
1273
1267
  arg.setUnits('deg-F')
1268
+ arg.setDefaultValue('71')
1274
1269
  args << arg
1275
1270
 
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.')
1271
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekend', true)
1272
+ arg.setDisplayName('Heating Setpoint: Weekend Schedule')
1273
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekend heating schedule.')
1279
1274
  arg.setUnits('deg-F')
1275
+ arg.setDefaultValue('71')
1280
1276
  args << arg
1281
1277
 
1282
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekday_schedule', false)
1278
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekday', true)
1283
1279
  arg.setDisplayName('Cooling Setpoint: Weekday Schedule')
1284
- arg.setDescription('Specify the 24-hour comma-separated weekday cooling schedule of 0s and 1s.')
1280
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekday cooling schedule.')
1285
1281
  arg.setUnits('deg-F')
1282
+ arg.setDefaultValue('76')
1286
1283
  args << arg
1287
1284
 
1288
- arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekend_schedule', false)
1285
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekend', true)
1289
1286
  arg.setDisplayName('Cooling Setpoint: Weekend Schedule')
1290
- arg.setDescription('Specify the 24-hour comma-separated weekend cooling schedule of 0s and 1s.')
1287
+ arg.setDescription('Specify the constant or 24-hour comma-separated weekend cooling schedule.')
1291
1288
  arg.setUnits('deg-F')
1289
+ arg.setDefaultValue('76')
1292
1290
  args << arg
1293
1291
 
1294
1292
  duct_leakage_units_choices = OpenStudio::StringVector.new
@@ -1385,66 +1383,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1385
1383
  arg.setDefaultValue(Constants.Auto)
1386
1384
  args << arg
1387
1385
 
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
1386
  mech_vent_fan_type_choices = OpenStudio::StringVector.new
1449
1387
  mech_vent_fan_type_choices << 'none'
1450
1388
  mech_vent_fan_type_choices << HPXML::MechVentTypeExhaust
@@ -1474,11 +1412,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1474
1412
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_hours_in_operation', true)
1475
1413
  arg.setDisplayName('Mechanical Ventilation: Hours In Operation')
1476
1414
  arg.setDescription('The hours in operation of the mechanical ventilation.')
1477
- arg.setUnits('hrs')
1415
+ arg.setUnits('hrs/day')
1478
1416
  arg.setDefaultValue(24)
1479
1417
  args << arg
1480
1418
 
1481
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_total_recovery_efficiency_type', mech_vent_recovery_efficiency_type_choices, true)
1419
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_recovery_efficiency_type', mech_vent_recovery_efficiency_type_choices, true)
1482
1420
  arg.setDisplayName('Mechanical Ventilation: Total Recovery Efficiency Type')
1483
1421
  arg.setDescription('The total recovery efficiency type of the mechanical ventilation.')
1484
1422
  arg.setDefaultValue('Unadjusted')
@@ -1486,20 +1424,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1486
1424
 
1487
1425
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_total_recovery_efficiency', true)
1488
1426
  arg.setDisplayName('Mechanical Ventilation: Total Recovery Efficiency')
1489
- arg.setDescription('The Unadjusted or Adjusted total recovery efficiency of the mechanical ventilation.')
1427
+ arg.setDescription("The Unadjusted or Adjusted total recovery efficiency of the mechanical ventilation. Applies to #{HPXML::MechVentTypeERV}.")
1490
1428
  arg.setUnits('Frac')
1491
1429
  arg.setDefaultValue(0.48)
1492
1430
  args << arg
1493
1431
 
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
1432
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_sensible_recovery_efficiency', true)
1501
1433
  arg.setDisplayName('Mechanical Ventilation: Sensible Recovery Efficiency')
1502
- arg.setDescription('The Unadjusted or Adjusted sensible recovery efficiency of the mechanical ventilation.')
1434
+ arg.setDescription("The Unadjusted or Adjusted sensible recovery efficiency of the mechanical ventilation. Applies to #{HPXML::MechVentTypeERV} and #{HPXML::MechVentTypeHRV}.")
1503
1435
  arg.setUnits('Frac')
1504
1436
  arg.setDefaultValue(0.72)
1505
1437
  args << arg
@@ -1526,12 +1458,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1526
1458
 
1527
1459
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('shared_mech_vent_preheating_fuel', heating_system_fuel_choices, false)
1528
1460
  arg.setDisplayName('Shared Mechanical Ventilation: Preheating Fuel')
1529
- arg.setDescription('Fuel type of the preconditioning heating equipment.')
1461
+ arg.setDescription('Fuel type of the preconditioning heating equipment. Only used for a shared mechanical ventilation system.')
1530
1462
  args << arg
1531
1463
 
1532
1464
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('shared_mech_vent_preheating_efficiency', false)
1533
1465
  arg.setDisplayName('Shared Mechanical Ventilation: Preheating Efficiency')
1534
- arg.setDescription('Efficiency of the preconditioning heating equipment.')
1466
+ arg.setDescription('Efficiency of the preconditioning heating equipment. Only used for a shared mechanical ventilation system.')
1535
1467
  arg.setUnits('COP')
1536
1468
  args << arg
1537
1469
 
@@ -1546,12 +1478,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1546
1478
 
1547
1479
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('shared_mech_vent_precooling_fuel', cooling_system_fuel_choices, false)
1548
1480
  arg.setDisplayName('Shared Mechanical Ventilation: Precooling Fuel')
1549
- arg.setDescription('Fuel type of the preconditioning cooling equipment.')
1481
+ arg.setDescription('Fuel type of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system.')
1550
1482
  args << arg
1551
1483
 
1552
1484
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('shared_mech_vent_precooling_efficiency', false)
1553
1485
  arg.setDisplayName('Shared Mechanical Ventilation: Precooling Efficiency')
1554
- arg.setDescription('Efficiency of the preconditioning cooling equipment.')
1486
+ arg.setDescription('Efficiency of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system.')
1555
1487
  arg.setUnits('COP')
1556
1488
  args << arg
1557
1489
 
@@ -1577,11 +1509,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1577
1509
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_hours_in_operation_2', true)
1578
1510
  arg.setDisplayName('Mechanical Ventilation 2: Hours In Operation')
1579
1511
  arg.setDescription('The hours in operation of the second mechanical ventilation.')
1580
- arg.setUnits('hrs')
1512
+ arg.setUnits('hrs/day')
1581
1513
  arg.setDefaultValue(24)
1582
1514
  args << arg
1583
1515
 
1584
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_total_recovery_efficiency_type_2', mech_vent_recovery_efficiency_type_choices, true)
1516
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_recovery_efficiency_type_2', mech_vent_recovery_efficiency_type_choices, true)
1585
1517
  arg.setDisplayName('Mechanical Ventilation 2: Total Recovery Efficiency Type')
1586
1518
  arg.setDescription('The total recovery efficiency type of the second mechanical ventilation.')
1587
1519
  arg.setDefaultValue('Unadjusted')
@@ -1589,20 +1521,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1589
1521
 
1590
1522
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_total_recovery_efficiency_2', true)
1591
1523
  arg.setDisplayName('Mechanical Ventilation 2: Total Recovery Efficiency')
1592
- arg.setDescription('The Unadjusted or Adjusted total recovery efficiency of the second mechanical ventilation.')
1524
+ arg.setDescription("The Unadjusted or Adjusted total recovery efficiency of the second mechanical ventilation. Applies to #{HPXML::MechVentTypeERV}.")
1593
1525
  arg.setUnits('Frac')
1594
1526
  arg.setDefaultValue(0.48)
1595
1527
  args << arg
1596
1528
 
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
1529
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_sensible_recovery_efficiency_2', true)
1604
1530
  arg.setDisplayName('Mechanical Ventilation 2: Sensible Recovery Efficiency')
1605
- arg.setDescription('The Unadjusted or Adjusted sensible recovery efficiency of the second mechanical ventilation.')
1531
+ arg.setDescription("The Unadjusted or Adjusted sensible recovery efficiency of the second mechanical ventilation. Applies to #{HPXML::MechVentTypeERV} and #{HPXML::MechVentTypeHRV}.")
1606
1532
  arg.setUnits('Frac')
1607
1533
  arg.setDefaultValue(0.72)
1608
1534
  args << arg
@@ -1614,76 +1540,74 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1614
1540
  arg.setDefaultValue(30)
1615
1541
  args << arg
1616
1542
 
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)
1543
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_quantity', true)
1624
1544
  arg.setDisplayName('Kitchen Fans: Quantity')
1625
1545
  arg.setDescription('The quantity of the kitchen fans.')
1626
1546
  arg.setUnits('#')
1547
+ arg.setDefaultValue(Constants.Auto)
1627
1548
  args << arg
1628
1549
 
1629
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_flow_rate', false)
1550
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_flow_rate', false)
1630
1551
  arg.setDisplayName('Kitchen Fans: Flow Rate')
1631
1552
  arg.setDescription('The flow rate of the kitchen fan.')
1632
1553
  arg.setUnits('CFM')
1554
+ arg.setDefaultValue(Constants.Auto)
1633
1555
  args << arg
1634
1556
 
1635
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_hours_in_operation', false)
1557
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_hours_in_operation', false)
1636
1558
  arg.setDisplayName('Kitchen Fans: Hours In Operation')
1637
1559
  arg.setDescription('The hours in operation of the kitchen fan.')
1638
- arg.setUnits('hrs')
1560
+ arg.setUnits('hrs/day')
1561
+ arg.setDefaultValue(Constants.Auto)
1639
1562
  args << arg
1640
1563
 
1641
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_power', false)
1564
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_power', false)
1642
1565
  arg.setDisplayName('Kitchen Fans: Fan Power')
1643
1566
  arg.setDescription('The fan power of the kitchen fan.')
1644
1567
  arg.setUnits('W')
1568
+ arg.setDefaultValue(Constants.Auto)
1645
1569
  args << arg
1646
1570
 
1647
- arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_start_hour', false)
1571
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('kitchen_fans_start_hour', false)
1648
1572
  arg.setDisplayName('Kitchen Fans: Start Hour')
1649
1573
  arg.setDescription('The start hour of the kitchen fan.')
1650
1574
  arg.setUnits('hr')
1575
+ arg.setDefaultValue(Constants.Auto)
1651
1576
  args << arg
1652
1577
 
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)
1578
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_quantity', true)
1660
1579
  arg.setDisplayName('Bathroom Fans: Quantity')
1661
1580
  arg.setDescription('The quantity of the bathroom fans.')
1662
1581
  arg.setUnits('#')
1582
+ arg.setDefaultValue(Constants.Auto)
1663
1583
  args << arg
1664
1584
 
1665
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_flow_rate', false)
1585
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_flow_rate', false)
1666
1586
  arg.setDisplayName('Bathroom Fans: Flow Rate')
1667
1587
  arg.setDescription('The flow rate of the bathroom fans.')
1668
1588
  arg.setUnits('CFM')
1589
+ arg.setDefaultValue(Constants.Auto)
1669
1590
  args << arg
1670
1591
 
1671
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_hours_in_operation', false)
1592
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_hours_in_operation', false)
1672
1593
  arg.setDisplayName('Bathroom Fans: Hours In Operation')
1673
1594
  arg.setDescription('The hours in operation of the bathroom fans.')
1674
- arg.setUnits('hrs')
1595
+ arg.setUnits('hrs/day')
1596
+ arg.setDefaultValue(Constants.Auto)
1675
1597
  args << arg
1676
1598
 
1677
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_power', false)
1599
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_power', false)
1678
1600
  arg.setDisplayName('Bathroom Fans: Fan Power')
1679
1601
  arg.setDescription('The fan power of the bathroom fans.')
1680
1602
  arg.setUnits('W')
1603
+ arg.setDefaultValue(Constants.Auto)
1681
1604
  args << arg
1682
1605
 
1683
- arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_start_hour', false)
1606
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('bathroom_fans_start_hour', false)
1684
1607
  arg.setDisplayName('Bathroom Fans: Start Hour')
1685
1608
  arg.setDescription('The start hour of the bathroom fans.')
1686
1609
  arg.setUnits('hr')
1610
+ arg.setDefaultValue(Constants.Auto)
1687
1611
  args << arg
1688
1612
 
1689
1613
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('whole_house_fan_present', true)
@@ -1762,18 +1686,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1762
1686
 
1763
1687
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('water_heater_tank_volume', true)
1764
1688
  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}.")
1689
+ 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
1690
  arg.setUnits('gal')
1767
1691
  arg.setDefaultValue(Constants.Auto)
1768
1692
  args << arg
1769
1693
 
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
1694
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_efficiency_type', water_heater_efficiency_type_choices, true)
1778
1695
  arg.setDisplayName('Water Heater: Efficiency Type')
1779
1696
  arg.setDescription('The efficiency type of water heater. Does not apply to space-heating boilers.')
@@ -1819,12 +1736,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1819
1736
  arg.setDefaultValue(Constants.Auto)
1820
1737
  args << arg
1821
1738
 
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
1739
  arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('water_heater_num_units_served', true)
1829
1740
  arg.setDisplayName('Water Heater: Number of Units Served')
1830
1741
  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 +2173,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2262
2173
  arg.setDefaultValue(Constants.Auto)
2263
2174
  args << arg
2264
2175
 
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
2176
  dehumidifier_type_choices = OpenStudio::StringVector.new
2177
+ dehumidifier_type_choices << 'none'
2272
2178
  dehumidifier_type_choices << HPXML::DehumidifierTypePortable
2273
2179
  dehumidifier_type_choices << HPXML::DehumidifierTypeWholeHome
2274
2180
 
@@ -2279,26 +2185,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2279
2185
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dehumidifier_type', dehumidifier_type_choices, true)
2280
2186
  arg.setDisplayName('Dehumidifier: Type')
2281
2187
  arg.setDescription('The type of dehumidifier.')
2282
- arg.setDefaultValue(HPXML::DehumidifierTypePortable)
2188
+ arg.setDefaultValue('none')
2283
2189
  args << arg
2284
2190
 
2285
2191
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dehumidifier_efficiency_type', dehumidifier_efficiency_type_choices, true)
2286
2192
  arg.setDisplayName('Dehumidifier: Efficiency Type')
2287
2193
  arg.setDescription('The efficiency type of dehumidifier.')
2288
- arg.setDefaultValue('EnergyFactor')
2289
- args << arg
2290
-
2291
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dehumidifier_efficiency_ef', true)
2292
- arg.setDisplayName('Dehumidifier: Energy Factor')
2293
- arg.setUnits('liters/kWh')
2294
- arg.setDescription('The Energy Factor (EF) of the dehumidifier.')
2295
- arg.setDefaultValue(1.8)
2194
+ arg.setDefaultValue('IntegratedEnergyFactor')
2296
2195
  args << arg
2297
2196
 
2298
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dehumidifier_efficiency_ief', true)
2299
- arg.setDisplayName('Dehumidifier: Integrated Energy Factor')
2197
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dehumidifier_efficiency', true)
2198
+ arg.setDisplayName('Dehumidifier: Efficiency')
2300
2199
  arg.setUnits('liters/kWh')
2301
- arg.setDescription('The Integrated Energy Factor (IEF) of the dehumidifier.')
2200
+ arg.setDescription('The efficiency of the dehumidifier.')
2302
2201
  arg.setDefaultValue(1.5)
2303
2202
  args << arg
2304
2203
 
@@ -2323,14 +2222,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2323
2222
  arg.setDefaultValue(1)
2324
2223
  args << arg
2325
2224
 
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
2225
  appliance_location_choices = OpenStudio::StringVector.new
2333
2226
  appliance_location_choices << Constants.Auto
2227
+ appliance_location_choices << 'none'
2334
2228
  appliance_location_choices << HPXML::LocationLivingSpace
2335
2229
  appliance_location_choices << HPXML::LocationBasementConditioned
2336
2230
  appliance_location_choices << HPXML::LocationBasementUnconditioned
@@ -2352,21 +2246,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2352
2246
 
2353
2247
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_washer_efficiency_type', clothes_washer_efficiency_type_choices, true)
2354
2248
  arg.setDisplayName('Clothes Washer: Efficiency Type')
2355
- arg.setDescription('The efficiency type of clothes washer.')
2249
+ arg.setDescription('The efficiency type of the clothes washer.')
2356
2250
  arg.setDefaultValue('IntegratedModifiedEnergyFactor')
2357
2251
  args << arg
2358
2252
 
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')
2253
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_washer_efficiency', true)
2254
+ arg.setDisplayName('Clothes Washer: Efficiency')
2368
2255
  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.')
2256
+ arg.setDescription('The efficiency of the clothes washer.')
2370
2257
  arg.setDefaultValue(Constants.Auto)
2371
2258
  args << arg
2372
2259
 
@@ -2418,12 +2305,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2418
2305
  arg.setDefaultValue(1.0)
2419
2306
  args << arg
2420
2307
 
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
2308
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_location', appliance_location_choices, true)
2428
2309
  arg.setDisplayName('Clothes Dryer: Location')
2429
2310
  arg.setDescription('The space type for the clothes dryer location.')
@@ -2438,11 +2319,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2438
2319
  clothes_dryer_fuel_choices << HPXML::FuelTypeWoodCord
2439
2320
  clothes_dryer_fuel_choices << HPXML::FuelTypeCoal
2440
2321
 
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
2322
  clothes_dryer_efficiency_type_choices = OpenStudio::StringVector.new
2447
2323
  clothes_dryer_efficiency_type_choices << 'EnergyFactor'
2448
2324
  clothes_dryer_efficiency_type_choices << 'CombinedEnergyFactor'
@@ -2455,27 +2331,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2455
2331
 
2456
2332
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_efficiency_type', clothes_dryer_efficiency_type_choices, true)
2457
2333
  arg.setDisplayName('Clothes Dryer: Efficiency Type')
2458
- arg.setDescription('The efficiency type of clothes dryer.')
2334
+ arg.setDescription('The efficiency type of the clothes dryer.')
2459
2335
  arg.setDefaultValue('CombinedEnergyFactor')
2460
2336
  args << arg
2461
2337
 
2462
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_efficiency_ef', true)
2463
- arg.setDisplayName('Clothes Dryer: Energy Factor')
2338
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('clothes_dryer_efficiency', true)
2339
+ arg.setDisplayName('Clothes Dryer: Efficiency')
2464
2340
  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.')
2341
+ arg.setDescription('The efficiency of the clothes dryer.')
2479
2342
  arg.setDefaultValue(Constants.Auto)
2480
2343
  args << arg
2481
2344
 
@@ -2492,12 +2355,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2492
2355
  arg.setDefaultValue(1.0)
2493
2356
  args << arg
2494
2357
 
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
2358
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dishwasher_location', appliance_location_choices, true)
2502
2359
  arg.setDisplayName('Dishwasher: Location')
2503
2360
  arg.setDescription('The space type for the dishwasher location.')
@@ -2514,19 +2371,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2514
2371
  arg.setDefaultValue('RatedAnnualkWh')
2515
2372
  args << arg
2516
2373
 
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.')
2374
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('dishwasher_efficiency', true)
2375
+ arg.setDisplayName('Dishwasher: Efficiency')
2376
+ arg.setUnits('RatedAnnualkWh or EnergyFactor')
2377
+ arg.setDescription('The efficiency of the dishwasher.')
2521
2378
  arg.setDefaultValue(Constants.Auto)
2522
2379
  args << arg
2523
2380
 
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
2381
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('dishwasher_label_electric_rate', true)
2531
2382
  arg.setDisplayName('Dishwasher: Label Electric Rate')
2532
2383
  arg.setUnits('$/kWh')
@@ -2568,12 +2419,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2568
2419
  arg.setDefaultValue(1.0)
2569
2420
  args << arg
2570
2421
 
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
2422
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('refrigerator_location', appliance_location_choices, true)
2578
2423
  arg.setDisplayName('Refrigerator: Location')
2579
2424
  arg.setDescription('The space type for the refrigerator location.')
@@ -2593,12 +2438,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2593
2438
  arg.setDefaultValue(1.0)
2594
2439
  args << arg
2595
2440
 
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
2441
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('extra_refrigerator_location', appliance_location_choices, true)
2603
2442
  arg.setDisplayName('Extra Refrigerator: Location')
2604
2443
  arg.setDescription('The space type for the extra refrigerator location.')
@@ -2618,12 +2457,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2618
2457
  arg.setDefaultValue(1.0)
2619
2458
  args << arg
2620
2459
 
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
2460
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('freezer_location', appliance_location_choices, true)
2628
2461
  arg.setDisplayName('Freezer: Location')
2629
2462
  arg.setDescription('The space type for the freezer location.')
@@ -2651,12 +2484,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2651
2484
  cooking_range_oven_fuel_choices << HPXML::FuelTypeWoodCord
2652
2485
  cooking_range_oven_fuel_choices << HPXML::FuelTypeCoal
2653
2486
 
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
2487
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooking_range_oven_location', appliance_location_choices, true)
2661
2488
  arg.setDisplayName('Cooking Range/Oven: Location')
2662
2489
  arg.setDescription('The space type for the cooking range/oven location.')
@@ -2725,12 +2552,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2725
2552
  arg.setDefaultValue(1.0)
2726
2553
  args << arg
2727
2554
 
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
2555
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('plug_loads_other_annual_kwh', true)
2735
2556
  arg.setDisplayName('Plug Loads: Other Annual kWh')
2736
2557
  arg.setDescription('The annual energy consumption of the other residual plug loads.')
@@ -2758,12 +2579,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2758
2579
  arg.setDefaultValue(1.0)
2759
2580
  args << arg
2760
2581
 
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
2582
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('plug_loads_well_pump_present', true)
2768
2583
  arg.setDisplayName('Plug Loads: Well Pump Present')
2769
2584
  arg.setDescription('Whether there is a well pump.')
@@ -2780,13 +2595,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2780
2595
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_well_pump_usage_multiplier', true)
2781
2596
  arg.setDisplayName('Plug Loads: Well Pump Usage Multiplier')
2782
2597
  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)
2598
+ arg.setDefaultValue(1.0)
2790
2599
  args << arg
2791
2600
 
2792
2601
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('plug_loads_vehicle_present', true)
@@ -2805,13 +2614,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2805
2614
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_vehicle_usage_multiplier', true)
2806
2615
  arg.setDisplayName('Plug Loads: Vehicle Usage Multiplier')
2807
2616
  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)
2617
+ arg.setDefaultValue(1.0)
2815
2618
  args << arg
2816
2619
 
2817
2620
  fuel_loads_fuel_choices = OpenStudio::StringVector.new
@@ -2916,7 +2719,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2916
2719
  args << arg
2917
2720
 
2918
2721
  heater_type_choices = OpenStudio::StringVector.new
2919
- heater_type_choices << 'none'
2722
+ heater_type_choices << HPXML::TypeNone
2920
2723
  heater_type_choices << HPXML::HeaterTypeElectricResistance
2921
2724
  heater_type_choices << HPXML::HeaterTypeGas
2922
2725
  heater_type_choices << HPXML::HeaterTypeHeatPump
@@ -2943,7 +2746,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2943
2746
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pool_heater_type', heater_type_choices, true)
2944
2747
  arg.setDisplayName('Pool: Heater Type')
2945
2748
  arg.setDescription("The type of pool heater. Use 'none' if there is no pool heater.")
2946
- arg.setDefaultValue('none')
2749
+ arg.setDefaultValue(HPXML::TypeNone)
2947
2750
  args << arg
2948
2751
 
2949
2752
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('pool_heater_annual_kwh', true)
@@ -2988,7 +2791,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2988
2791
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('hot_tub_heater_type', heater_type_choices, true)
2989
2792
  arg.setDisplayName('Hot Tub: Heater Type')
2990
2793
  arg.setDescription("The type of hot tub heater. Use 'none' if there is no hot tub heater.")
2991
- arg.setDefaultValue('none')
2794
+ arg.setDefaultValue(HPXML::TypeNone)
2992
2795
  args << arg
2993
2796
 
2994
2797
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('hot_tub_heater_annual_kwh', true)
@@ -3023,13 +2826,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3023
2826
  return false
3024
2827
  end
3025
2828
 
2829
+ Geometry.tear_down_model(model, runner)
2830
+
3026
2831
  Version.check_openstudio_version()
3027
2832
 
3028
2833
  # 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)
2834
+ args = get_argument_values(runner, arguments(model), user_arguments)
2835
+ args = Hash[args.collect { |k, v| [k.to_sym, v] }]
2836
+ args[:geometry_rim_joist_height] /= 12.0
3033
2837
  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
2838
 
3035
2839
  # Argument error checks
@@ -3081,414 +2885,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3081
2885
  runner.registerInfo("Wrote file: #{hpxml_path}")
3082
2886
  end
3083
2887
 
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
2888
  def validate_arguments(args)
3493
2889
  warnings = []
3494
2890
  errors = []
@@ -3554,9 +2950,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3554
2950
  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
2951
 
3556
2952
  # 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)
2953
+ 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
2954
  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
2955
 
2956
+ # second heating system fraction heat load served is 100%
2957
+ error = (args[:heating_system_type_2] != 'none') && (args[:heating_system_fraction_heat_load_served_2] == 1.0)
2958
+ 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
2959
+
2960
+ # second heating system but no primary heating system
2961
+ error = (args[:heating_system_type] == 'none') && (args[:heat_pump_type] == 'none') && (args[:heating_system_type_2] != 'none')
2962
+ 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
2963
+
3560
2964
  # single-family attached and num units, horizontal location not specified
3561
2965
  error = (args[:geometry_unit_type] == HPXML::ResidentialTypeSFA) && (!args[:geometry_building_num_units].is_initialized || !args[:geometry_horizontal_location].is_initialized)
3562
2966
  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 +2985,52 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3581
2985
  warning = (args[:geometry_attic_type] == HPXML::AtticTypeConditioned) && (args[:geometry_roof_type] != 'flat') && (args[:ceiling_assembly_r] > 2.1)
3582
2986
  warnings << "geometry_attic_type=#{args[:geometry_attic_type]} and ceiling_assembly_r=#{args[:ceiling_assembly_r]}" if warning
3583
2987
 
2988
+ # conditioned attic but only one above-grade floor
2989
+ error = (args[:geometry_num_floors_above_grade] == 1 && args[:geometry_attic_type] == HPXML::AtticTypeConditioned)
2990
+ errors << "geometry_num_floors_above_grade=#{args[:geometry_num_floors_above_grade]} and geometry_attic_type=#{args[:geometry_attic_type]}" if error
2991
+
3584
2992
  # dhw indirect but no boiler
3585
2993
  error = ((args[:water_heater_type] == HPXML::WaterHeaterTypeCombiStorage) || (args[:water_heater_type] == HPXML::WaterHeaterTypeCombiTankless)) && (args[:heating_system_type] != HPXML::HVACTypeBoiler)
3586
2994
  errors << "water_heater_type=#{args[:water_heater_type]} and heating_system_type=#{args[:heating_system_type]}" if error
3587
2995
 
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
2996
+ # no tv plug loads but specifying usage multipliers
2997
+ if args[:plug_loads_television_annual_kwh] != Constants.Auto
2998
+ warning = (args[:plug_loads_television_annual_kwh].to_f == 0.0 && args[:plug_loads_television_usage_multiplier] != 0.0)
2999
+ 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
3000
+ end
3001
+
3002
+ # no other plug loads but specifying usage multipliers
3003
+ if args[:plug_loads_other_annual_kwh] != Constants.Auto
3004
+ warning = (args[:plug_loads_other_annual_kwh].to_f == 0.0 && args[:plug_loads_other_usage_multiplier] != 0.0)
3005
+ 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
3006
+ end
3007
+
3008
+ # no well pump plug loads but specifying usage multipliers
3009
+ if args[:plug_loads_well_pump_annual_kwh] != Constants.Auto
3010
+ warning = (args[:plug_loads_well_pump_annual_kwh].to_f == 0.0 && args[:plug_loads_well_pump_usage_multiplier] != 0.0)
3011
+ 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
3012
+ end
3013
+
3014
+ # no vehicle plug loads but specifying usage multipliers
3015
+ if args[:plug_loads_vehicle_annual_kwh] != Constants.Auto
3016
+ warning = (args[:plug_loads_vehicle_annual_kwh].to_f && args[:plug_loads_vehicle_usage_multiplier] != 0.0)
3017
+ 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
3018
+ end
3591
3019
 
3592
3020
  # no fuel loads but specifying usage multipliers
3593
3021
  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
3022
  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
3023
 
3024
+ # foundation wall insulation distance to bottom is greater than foundation wall height
3025
+ if args[:foundation_wall_insulation_distance_to_bottom] != Constants.Auto
3026
+ error = (args[:foundation_wall_insulation_distance_to_bottom].to_f > args[:geometry_foundation_height])
3027
+ errors << "foundation_wall_insulation_distance_to_bottom=#{args[:foundation_wall_insulation_distance_to_bottom]} and geometry_foundation_height=#{args[:geometry_foundation_height]}" if error
3028
+ end
3029
+
3030
+ # number of bedrooms not greater than zero
3031
+ error = (args[:geometry_num_bedrooms] <= 0)
3032
+ errors << "geometry_num_bedrooms=#{args[:geometry_num_bedrooms]}" if error
3033
+
3596
3034
  return warnings, errors
3597
3035
  end
3598
3036
 
@@ -3625,9 +3063,7 @@ end
3625
3063
 
3626
3064
  class HPXMLFile
3627
3065
  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)
3066
+ success = create_geometry_envelope(runner, model, args)
3631
3067
  return false if not success
3632
3068
 
3633
3069
  success = create_schedules(runner, model, epw_file, args)
@@ -3635,27 +3071,30 @@ class HPXMLFile
3635
3071
 
3636
3072
  hpxml = HPXML.new
3637
3073
 
3638
- set_header(hpxml, runner, args)
3074
+ set_header(hpxml, runner, args, epw_file)
3639
3075
  set_site(hpxml, runner, args)
3640
3076
  set_neighbor_buildings(hpxml, runner, args)
3641
3077
  set_building_occupancy(hpxml, runner, args)
3642
3078
  set_building_construction(hpxml, runner, args)
3643
3079
  set_climate_and_risk_zones(hpxml, runner, args, epw_file)
3644
3080
  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)
3081
+
3082
+ set_attics(hpxml, runner, model, args)
3083
+ set_foundations(hpxml, runner, model, args)
3084
+ set_roofs(hpxml, runner, model, args)
3085
+ set_rim_joists(hpxml, runner, model, args)
3086
+ set_walls(hpxml, runner, model, args)
3087
+ set_foundation_walls(hpxml, runner, model, args)
3088
+ set_frame_floors(hpxml, runner, model, args)
3089
+ set_slabs(hpxml, runner, model, args)
3090
+ set_windows(hpxml, runner, model, args)
3091
+ set_skylights(hpxml, runner, model, args)
3092
+ set_doors(hpxml, runner, model, args)
3093
+
3656
3094
  set_heating_systems(hpxml, runner, args)
3657
3095
  set_cooling_systems(hpxml, runner, args)
3658
3096
  set_heat_pumps(hpxml, runner, args)
3097
+ set_secondary_heating_systems(hpxml, runner, args)
3659
3098
  set_hvac_distribution(hpxml, runner, args)
3660
3099
  set_hvac_control(hpxml, runner, args)
3661
3100
  set_ventilation_fans(hpxml, runner, args)
@@ -3699,6 +3138,13 @@ class HPXMLFile
3699
3138
  if args[:geometry_foundation_type] == HPXML::FoundationTypeSlab
3700
3139
  args[:geometry_foundation_height] = 0.0
3701
3140
  args[:geometry_foundation_height_above_grade] = 0.0
3141
+ args[:geometry_rim_joist_height] = 0.0
3142
+ elsif args[:geometry_foundation_type] == HPXML::FoundationTypeAmbient
3143
+ args[:geometry_rim_joist_height] = 0.0
3144
+ end
3145
+
3146
+ if args[:geometry_attic_type] == HPXML::AtticTypeConditioned
3147
+ args[:geometry_num_floors_above_grade] -= 1
3702
3148
  end
3703
3149
 
3704
3150
  if args[:geometry_unit_type] == HPXML::ResidentialTypeSFD
@@ -3706,6 +3152,8 @@ class HPXMLFile
3706
3152
  elsif args[:geometry_unit_type] == HPXML::ResidentialTypeSFA
3707
3153
  success = Geometry.create_single_family_attached(runner: runner, model: model, **args)
3708
3154
  elsif args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
3155
+ args[:geometry_roof_type] = 'flat'
3156
+ args[:geometry_attic_type] = HPXML::AtticTypeVented
3709
3157
  success = Geometry.create_multifamily(runner: runner, model: model, **args)
3710
3158
  end
3711
3159
  return false if not success
@@ -3767,7 +3215,7 @@ class HPXMLFile
3767
3215
  return false if not success
3768
3216
 
3769
3217
  # export the schedule
3770
- args[:schedules_path] = '../schedules.csv'
3218
+ args[:schedules_path] = "../#{File.basename(args[:hpxml_path], '.xml')}_schedules.csv"
3771
3219
  success = schedule_generator.export(schedules_path: File.expand_path(args[:schedules_path]))
3772
3220
  return false if not success
3773
3221
 
@@ -3776,7 +3224,7 @@ class HPXMLFile
3776
3224
  return true
3777
3225
  end
3778
3226
 
3779
- def self.set_header(hpxml, runner, args)
3227
+ def self.set_header(hpxml, runner, args, epw_file)
3780
3228
  hpxml.header.xml_type = 'HPXML'
3781
3229
  hpxml.header.xml_generated_by = 'BuildResidentialHPXML'
3782
3230
  hpxml.header.transaction = 'create'
@@ -3826,20 +3274,21 @@ class HPXMLFile
3826
3274
  end
3827
3275
 
3828
3276
  hpxml.header.building_id = 'MyBuilding'
3277
+ hpxml.header.state_code = epw_file.stateProvinceRegion
3829
3278
  hpxml.header.event_type = 'proposed workscope'
3830
3279
  hpxml.header.schedules_path = args[:schedules_path]
3831
3280
  end
3832
3281
 
3833
3282
  def self.set_site(hpxml, runner, args)
3834
- if args[:air_leakage_shelter_coefficient] != Constants.Auto
3835
- shelter_coefficient = args[:air_leakage_shelter_coefficient]
3283
+ if args[:air_leakage_shielding_of_home] != Constants.Auto
3284
+ shielding_of_home = args[:air_leakage_shielding_of_home]
3836
3285
  end
3837
3286
 
3838
3287
  if args[:site_type].is_initialized
3839
3288
  hpxml.site.site_type = args[:site_type].get
3840
3289
  end
3841
3290
 
3842
- hpxml.site.shelter_coefficient = shelter_coefficient
3291
+ hpxml.site.shielding_of_home = shielding_of_home
3843
3292
  end
3844
3293
 
3845
3294
  def self.set_neighbor_buildings(hpxml, runner, args)
@@ -3896,11 +3345,9 @@ class HPXMLFile
3896
3345
  hpxml.building_construction.conditioned_building_volume = conditioned_building_volume
3897
3346
  hpxml.building_construction.average_ceiling_height = args[:geometry_wall_height]
3898
3347
  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
3348
+ if args[:geometry_has_flue_or_chimney] != Constants.Auto
3349
+ has_flue_or_chimney = args[:geometry_has_flue_or_chimney]
3350
+ hpxml.building_construction.has_flue_or_chimney = has_flue_or_chimney
3904
3351
  end
3905
3352
  end
3906
3353
 
@@ -3939,7 +3386,6 @@ class HPXMLFile
3939
3386
 
3940
3387
  def self.set_attics(hpxml, runner, model, args)
3941
3388
  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
3389
 
3944
3390
  if args[:geometry_roof_type] == 'flat'
3945
3391
  hpxml.attics.add(id: HPXML::AtticTypeFlatRoof,
@@ -3974,27 +3420,13 @@ class HPXMLFile
3974
3420
  roof_type = args[:roof_material_type].get
3975
3421
  end
3976
3422
 
3977
- if args[:roof_color] == Constants.Auto && args[:roof_solar_absorptance] == Constants.Auto
3978
- solar_absorptance = 0.7
3979
- end
3980
-
3981
3423
  if args[:roof_color] != Constants.Auto
3982
3424
  roof_color = args[:roof_color]
3983
3425
  end
3984
3426
 
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
3427
+ radiant_barrier = args[:roof_radiant_barrier]
3428
+ if args[:roof_radiant_barrier]
3429
+ radiant_barrier_grade = args[:roof_radiant_barrier_grade]
3998
3430
  end
3999
3431
 
4000
3432
  if args[:geometry_roof_type] == 'flat'
@@ -4009,8 +3441,6 @@ class HPXMLFile
4009
3441
  area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round,
4010
3442
  roof_type: roof_type,
4011
3443
  roof_color: roof_color,
4012
- solar_absorptance: solar_absorptance,
4013
- emittance: emittance,
4014
3444
  pitch: args[:geometry_roof_pitch],
4015
3445
  radiant_barrier: radiant_barrier,
4016
3446
  radiant_barrier_grade: radiant_barrier_grade,
@@ -4020,10 +3450,61 @@ class HPXMLFile
4020
3450
 
4021
3451
  def self.set_rim_joists(hpxml, runner, model, args)
4022
3452
  model.getSurfaces.sort.each do |surface|
4023
- # TODO
3453
+ next if surface.surfaceType != 'Wall'
3454
+ next unless ['Outdoors', 'Adiabatic'].include? surface.outsideBoundaryCondition
3455
+ next unless Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
3456
+
3457
+ interior_adjacent_to = get_adjacent_to(surface)
3458
+ next unless [HPXML::LocationBasementConditioned, HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
3459
+
3460
+ exterior_adjacent_to = HPXML::LocationOutside
3461
+ if surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to foundation space
3462
+ adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
3463
+ if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
3464
+ unless [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type])
3465
+ exterior_adjacent_to = interior_adjacent_to
3466
+ if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
3467
+ exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3468
+ end
3469
+ end
3470
+ else # adjacent to a space that is explicitly in the model, e.g., corridor
3471
+ exterior_adjacent_to = get_adjacent_to(adjacent_surface)
3472
+ end
3473
+ end
3474
+
3475
+ if exterior_adjacent_to == HPXML::LocationOutside && args[:wall_siding_type].is_initialized
3476
+ siding = args[:wall_siding_type].get
3477
+ end
3478
+
3479
+ if args[:wall_color] != Constants.Auto
3480
+ color = args[:wall_color]
3481
+ end
3482
+
3483
+ if interior_adjacent_to == exterior_adjacent_to
3484
+ insulation_assembly_r_value = 4.0 # Uninsulated
3485
+ else
3486
+ insulation_assembly_r_value = args[:rim_joist_assembly_r]
3487
+ end
3488
+
3489
+ hpxml.rim_joists.add(id: valid_attr(surface.name),
3490
+ exterior_adjacent_to: exterior_adjacent_to,
3491
+ interior_adjacent_to: interior_adjacent_to,
3492
+ area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round(1),
3493
+ siding: siding,
3494
+ color: color,
3495
+ insulation_assembly_r_value: insulation_assembly_r_value)
4024
3496
  end
4025
3497
  end
4026
3498
 
3499
+ def self.get_unexposed_garage_perimeter(hpxml, args)
3500
+ # this is perimeter adjacent to a 100% protruding garage that is not exposed
3501
+ # we need this because it's difficult to set this surface to Adiabatic using our geometry methods
3502
+ if (args[:geometry_garage_protrusion] == 1.0) && (args[:geometry_garage_width] * args[:geometry_garage_depth] > 0)
3503
+ return args[:geometry_garage_width]
3504
+ end
3505
+ return 0
3506
+ end
3507
+
4027
3508
  def self.get_adiabatic_adjacent_surface(model, surface)
4028
3509
  return if surface.outsideBoundaryCondition != 'Adiabatic'
4029
3510
 
@@ -4050,6 +3531,7 @@ class HPXMLFile
4050
3531
  def self.set_walls(hpxml, runner, model, args)
4051
3532
  model.getSurfaces.sort.each do |surface|
4052
3533
  next if surface.surfaceType != 'Wall'
3534
+ next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
4053
3535
 
4054
3536
  interior_adjacent_to = get_adjacent_to(surface)
4055
3537
  next unless [HPXML::LocationLivingSpace, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented, HPXML::LocationGarage].include? interior_adjacent_to
@@ -4130,19 +3612,20 @@ class HPXMLFile
4130
3612
  model.getSurfaces.sort.each do |surface|
4131
3613
  next if surface.surfaceType != 'Wall'
4132
3614
  next unless ['Foundation', 'Adiabatic'].include? surface.outsideBoundaryCondition
3615
+ next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
4133
3616
 
4134
3617
  interior_adjacent_to = get_adjacent_to(surface)
4135
3618
  next unless [HPXML::LocationBasementConditioned, HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
4136
3619
 
4137
3620
  exterior_adjacent_to = HPXML::LocationGround
4138
3621
  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
3622
  adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
4142
3623
  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
3624
+ unless [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type])
3625
+ exterior_adjacent_to = interior_adjacent_to
3626
+ if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
3627
+ exterior_adjacent_to = HPXML::LocationOtherHousingUnit
3628
+ end
4146
3629
  end
4147
3630
  else # adjacent to a space that is explicitly in the model, e.g., corridor
4148
3631
  exterior_adjacent_to = get_adjacent_to(adjacent_surface)
@@ -4160,6 +3643,9 @@ class HPXMLFile
4160
3643
  insulation_exterior_r_value = args[:foundation_wall_insulation_r]
4161
3644
  insulation_exterior_distance_to_top = args[:foundation_wall_insulation_distance_to_top]
4162
3645
  insulation_exterior_distance_to_bottom = args[:foundation_wall_insulation_distance_to_bottom]
3646
+ if insulation_exterior_distance_to_bottom == Constants.Auto
3647
+ insulation_exterior_distance_to_bottom = args[:geometry_foundation_height]
3648
+ end
4163
3649
  end
4164
3650
  insulation_interior_r_value = 0
4165
3651
  insulation_interior_distance_to_top = 0
@@ -4250,6 +3736,11 @@ class HPXMLFile
4250
3736
  has_foundation_walls = true
4251
3737
  end
4252
3738
  exposed_perimeter = Geometry.calculate_exposed_perimeter(model, [surface], has_foundation_walls).round
3739
+ next if exposed_perimeter == 0 # this could be, e.g., the foundation floor of an interior corridor
3740
+
3741
+ if [HPXML::LocationCrawlspaceVented, HPXML::LocationCrawlspaceUnvented, HPXML::LocationBasementUnconditioned, HPXML::LocationBasementConditioned].include? interior_adjacent_to
3742
+ exposed_perimeter -= get_unexposed_garage_perimeter(hpxml, args)
3743
+ end
4253
3744
 
4254
3745
  if [HPXML::LocationLivingSpace, HPXML::LocationGarage].include? interior_adjacent_to
4255
3746
  depth_below_grade = 0
@@ -4301,39 +3792,37 @@ class HPXMLFile
4301
3792
  sub_surface_height = Geometry.get_surface_height(sub_surface)
4302
3793
  sub_surface_facade = Geometry.get_facade_for_surface(sub_surface)
4303
3794
 
4304
- if (sub_surface_facade == Constants.FacadeFront) && (args[:overhangs_front_depth] > 0)
3795
+ if (sub_surface_facade == Constants.FacadeFront) && ((args[:overhangs_front_depth] > 0) || args[:overhangs_front_distance_to_top_of_window] > 0)
4305
3796
  overhangs_depth = args[:overhangs_front_depth]
4306
3797
  overhangs_distance_to_top_of_window = args[:overhangs_front_distance_to_top_of_window]
4307
3798
  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)
3799
+ elsif (sub_surface_facade == Constants.FacadeBack) && ((args[:overhangs_back_depth] > 0) || args[:overhangs_back_distance_to_top_of_window] > 0)
4309
3800
  overhangs_depth = args[:overhangs_back_depth]
4310
3801
  overhangs_distance_to_top_of_window = args[:overhangs_back_distance_to_top_of_window]
4311
3802
  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)
3803
+ elsif (sub_surface_facade == Constants.FacadeLeft) && ((args[:overhangs_left_depth] > 0) || args[:overhangs_left_distance_to_top_of_window] > 0)
4313
3804
  overhangs_depth = args[:overhangs_left_depth]
4314
3805
  overhangs_distance_to_top_of_window = args[:overhangs_left_distance_to_top_of_window]
4315
3806
  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)
3807
+ elsif (sub_surface_facade == Constants.FacadeRight) && ((args[:overhangs_right_depth] > 0) || args[:overhangs_right_distance_to_top_of_window] > 0)
4317
3808
  overhangs_depth = args[:overhangs_right_depth]
4318
3809
  overhangs_distance_to_top_of_window = args[:overhangs_right_distance_to_top_of_window]
4319
3810
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4320
3811
  elsif args[:geometry_eaves_depth] > 0
4321
- eaves_z = args[:geometry_wall_height] * args[:geometry_num_floors_above_grade]
3812
+ # Get max z coordinate of eaves
3813
+ eaves_z = args[:geometry_wall_height] * args[:geometry_num_floors_above_grade] + args[:geometry_rim_joist_height]
3814
+ if args[:geometry_attic_type] == HPXML::AtticTypeConditioned
3815
+ eaves_z += Geometry.get_conditioned_attic_height(model.getSpaces)
3816
+ end
4322
3817
  if args[:geometry_foundation_type] == HPXML::FoundationTypeAmbient
4323
3818
  eaves_z += args[:geometry_foundation_height]
4324
3819
  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')
3820
+
3821
+ # Get max z coordinate of this window
3822
+ sub_surface_z = Geometry.getSurfaceZValues([sub_surface]).max + UnitConversions.convert(sub_surface.space.get.zOrigin, 'm', 'ft')
3823
+
4335
3824
  overhangs_depth = args[:geometry_eaves_depth]
4336
- overhangs_distance_to_top_of_window = eaves_z - sub_surface_z
3825
+ overhangs_distance_to_top_of_window = eaves_z - sub_surface_z # difference between max z coordinates of eaves and this window
4337
3826
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4338
3827
  end
4339
3828
 
@@ -4347,6 +3836,14 @@ class HPXMLFile
4347
3836
  interior_shading_factor_summer = args[:window_interior_shading_summer].get
4348
3837
  end
4349
3838
 
3839
+ if args[:window_exterior_shading_winter].is_initialized
3840
+ exterior_shading_factor_winter = args[:window_exterior_shading_winter].get
3841
+ end
3842
+
3843
+ if args[:window_exterior_shading_summer].is_initialized
3844
+ exterior_shading_factor_summer = args[:window_exterior_shading_summer].get
3845
+ end
3846
+
4350
3847
  if args[:window_fraction_operable].is_initialized
4351
3848
  fraction_operable = args[:window_fraction_operable].get
4352
3849
  end
@@ -4361,6 +3858,8 @@ class HPXMLFile
4361
3858
  overhangs_distance_to_bottom_of_window: overhangs_distance_to_bottom_of_window,
4362
3859
  interior_shading_factor_winter: interior_shading_factor_winter,
4363
3860
  interior_shading_factor_summer: interior_shading_factor_summer,
3861
+ exterior_shading_factor_winter: exterior_shading_factor_winter,
3862
+ exterior_shading_factor_summer: exterior_shading_factor_summer,
4364
3863
  fraction_operable: fraction_operable,
4365
3864
  wall_idref: valid_attr(surface.name))
4366
3865
  end # sub_surfaces
@@ -4417,12 +3916,6 @@ class HPXMLFile
4417
3916
  heating_capacity = args[:heating_system_heating_capacity]
4418
3917
  end
4419
3918
 
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
3919
  if heating_system_type == HPXML::HVACTypeElectricResistance
4427
3920
  heating_system_fuel = HPXML::FuelTypeElectricity
4428
3921
  else
@@ -4435,66 +3928,25 @@ class HPXMLFile
4435
3928
  heating_efficiency_percent = args[:heating_system_heating_efficiency]
4436
3929
  end
4437
3930
 
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
3931
+ if args[:heating_system_airflow_defect_ratio].is_initialized
3932
+ if [HPXML::HVACTypeFurnace].include? heating_system_type
3933
+ airflow_defect_ratio = args[:heating_system_airflow_defect_ratio].get
4445
3934
  end
4446
3935
  end
4447
3936
 
3937
+ fraction_heat_load_served = args[:heating_system_fraction_heat_load_served]
3938
+ if args[:heating_system_type_2] != 'none' && fraction_heat_load_served + args[:heating_system_fraction_heat_load_served_2] > 1.0
3939
+ fraction_heat_load_served = 1.0 - args[:heating_system_fraction_heat_load_served_2]
3940
+ end
3941
+
4448
3942
  hpxml.heating_systems.add(id: 'HeatingSystem',
4449
3943
  heating_system_type: heating_system_type,
4450
3944
  heating_system_fuel: heating_system_fuel,
4451
3945
  heating_capacity: heating_capacity,
4452
- fraction_heat_load_served: args[:heating_system_fraction_heat_load_served],
4453
- electric_auxiliary_energy: electric_auxiliary_energy,
3946
+ fraction_heat_load_served: fraction_heat_load_served,
4454
3947
  heating_efficiency_afue: heating_efficiency_afue,
4455
3948
  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
4471
- end
4472
-
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]
4483
- end
4484
-
4485
- if args[:heating_system_fan_power_watts_2].is_initialized
4486
- fan_watts = args[:heating_system_fan_power_watts_2].get
4487
- end
4488
-
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)
3949
+ airflow_defect_ratio: airflow_defect_ratio)
4498
3950
  end
4499
3951
 
4500
3952
  def self.set_cooling_systems(hpxml, runner, args)
@@ -4502,10 +3954,8 @@ class HPXMLFile
4502
3954
 
4503
3955
  return if cooling_system_type == 'none'
4504
3956
 
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
3957
+ if args[:cooling_system_cooling_capacity] != Constants.Auto
3958
+ cooling_capacity = args[:cooling_system_cooling_capacity]
4509
3959
  end
4510
3960
 
4511
3961
  if args[:cooling_system_cooling_compressor_type].is_initialized
@@ -4520,15 +3970,21 @@ class HPXMLFile
4520
3970
  end
4521
3971
  end
4522
3972
 
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]
3973
+ if args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsSEER
3974
+ cooling_efficiency_seer = args[:cooling_system_cooling_efficiency]
3975
+ elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsEER
3976
+ cooling_efficiency_eer = args[:cooling_system_cooling_efficiency]
3977
+ end
3978
+
3979
+ if args[:cooling_system_airflow_defect_ratio].is_initialized
3980
+ if [HPXML::HVACTypeCentralAirConditioner].include?(cooling_system_type) || ([HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system_type) && (args[:cooling_system_is_ducted]))
3981
+ airflow_defect_ratio = args[:cooling_system_airflow_defect_ratio].get
3982
+ end
4527
3983
  end
4528
3984
 
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
3985
+ if args[:cooling_system_charge_defect_ratio].is_initialized
3986
+ if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system_type)
3987
+ charge_defect_ratio = args[:cooling_system_charge_defect_ratio].get
4532
3988
  end
4533
3989
  end
4534
3990
 
@@ -4541,7 +3997,8 @@ class HPXMLFile
4541
3997
  cooling_shr: cooling_shr,
4542
3998
  cooling_efficiency_seer: cooling_efficiency_seer,
4543
3999
  cooling_efficiency_eer: cooling_efficiency_eer,
4544
- fan_watts_per_cfm: fan_watts_per_cfm)
4000
+ airflow_defect_ratio: airflow_defect_ratio,
4001
+ charge_defect_ratio: charge_defect_ratio)
4545
4002
  end
4546
4003
 
4547
4004
  def self.set_heat_pumps(hpxml, runner, args)
@@ -4554,8 +4011,8 @@ class HPXMLFile
4554
4011
  end
4555
4012
 
4556
4013
  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]
4014
+ if args[:heat_pump_heating_capacity_17_f] != Constants.Auto
4015
+ heating_capacity_17F = args[:heat_pump_heating_capacity_17_f]
4559
4016
  end
4560
4017
  end
4561
4018
 
@@ -4592,20 +4049,31 @@ class HPXMLFile
4592
4049
  cooling_shr = args[:heat_pump_cooling_sensible_heat_fraction].get
4593
4050
  end
4594
4051
 
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
4052
+ if args[:heat_pump_heating_efficiency_type] == HPXML::UnitsHSPF
4053
+ heating_efficiency_hspf = args[:heat_pump_heating_efficiency]
4054
+ elsif args[:heat_pump_heating_efficiency_type] == HPXML::UnitsCOP
4055
+ heating_efficiency_cop = args[:heat_pump_heating_efficiency]
4056
+ end
4057
+
4058
+ if args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsSEER
4059
+ cooling_efficiency_seer = args[:heat_pump_cooling_efficiency]
4060
+ elsif args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsEER
4061
+ cooling_efficiency_eer = args[:heat_pump_cooling_efficiency]
4062
+ end
4063
+
4064
+ if args[:heat_pump_airflow_defect_ratio].is_initialized
4065
+ if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir].include?(heat_pump_type) || ([HPXML::HVACTypeHeatPumpMiniSplit].include?(heat_pump_type) && (args[:heat_pump_is_ducted]))
4066
+ airflow_defect_ratio = args[:heat_pump_airflow_defect_ratio].get
4604
4067
  end
4605
4068
  end
4606
4069
 
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
4070
+ if args[:heat_pump_charge_defect_ratio].is_initialized
4071
+ charge_defect_ratio = args[:heat_pump_charge_defect_ratio].get
4072
+ end
4073
+
4074
+ fraction_heat_load_served = args[:heat_pump_fraction_heat_load_served]
4075
+ if args[:heating_system_type_2] != 'none' && fraction_heat_load_served + args[:heating_system_fraction_heat_load_served_2] > 1.0
4076
+ fraction_heat_load_served = 1.0 - args[:heating_system_fraction_heat_load_served_2]
4609
4077
  end
4610
4078
 
4611
4079
  hpxml.heat_pumps.add(id: 'HeatPump',
@@ -4616,7 +4084,7 @@ class HPXMLFile
4616
4084
  compressor_type: compressor_type,
4617
4085
  cooling_shr: cooling_shr,
4618
4086
  cooling_capacity: cooling_capacity,
4619
- fraction_heat_load_served: args[:heat_pump_fraction_heat_load_served],
4087
+ fraction_heat_load_served: fraction_heat_load_served,
4620
4088
  fraction_cool_load_served: args[:heat_pump_fraction_cool_load_served],
4621
4089
  backup_heating_fuel: backup_heating_fuel,
4622
4090
  backup_heating_capacity: backup_heating_capacity,
@@ -4627,20 +4095,51 @@ class HPXMLFile
4627
4095
  cooling_efficiency_seer: cooling_efficiency_seer,
4628
4096
  heating_efficiency_cop: heating_efficiency_cop,
4629
4097
  cooling_efficiency_eer: cooling_efficiency_eer,
4630
- pump_watts_per_ton: pump_watts_per_ton,
4631
- fan_watts_per_cfm: fan_watts_per_cfm)
4098
+ airflow_defect_ratio: airflow_defect_ratio,
4099
+ charge_defect_ratio: charge_defect_ratio)
4100
+ end
4101
+
4102
+ def self.set_secondary_heating_systems(hpxml, runner, args)
4103
+ heating_system_type_2 = args[:heating_system_type_2]
4104
+
4105
+ return if heating_system_type_2 == 'none'
4106
+
4107
+ if args[:heating_system_heating_capacity_2] != Constants.Auto
4108
+ heating_capacity_2 = args[:heating_system_heating_capacity_2]
4109
+ end
4110
+
4111
+ if args[:heating_system_fuel_2] == HPXML::HVACTypeElectricResistance
4112
+ heating_system_fuel_2 = HPXML::FuelTypeElectricity
4113
+ else
4114
+ heating_system_fuel_2 = args[:heating_system_fuel_2]
4115
+ end
4116
+
4117
+ if [HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeBoiler].include? heating_system_type_2
4118
+ heating_efficiency_afue_2 = args[:heating_system_heating_efficiency_2]
4119
+ elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace].include? heating_system_type_2
4120
+ heating_efficiency_percent_2 = args[:heating_system_heating_efficiency_2]
4121
+ end
4122
+
4123
+ hpxml.heating_systems.add(id: 'SecondHeatingSystem',
4124
+ heating_system_type: heating_system_type_2,
4125
+ heating_system_fuel: heating_system_fuel_2,
4126
+ heating_capacity: heating_capacity_2,
4127
+ fraction_heat_load_served: args[:heating_system_fraction_heat_load_served_2],
4128
+ heating_efficiency_afue: heating_efficiency_afue_2,
4129
+ heating_efficiency_percent: heating_efficiency_percent_2)
4632
4130
  end
4633
4131
 
4634
4132
  def self.set_hvac_distribution(hpxml, runner, args)
4635
4133
  # HydronicDistribution?
4134
+ hydr_idx = 0
4636
4135
  hpxml.heating_systems.each do |heating_system|
4637
4136
  next unless [HPXML::HVACTypeBoiler].include? heating_system.heating_system_type
4638
4137
 
4639
- hpxml.hvac_distributions.add(id: 'HydronicDistribution',
4138
+ hydr_idx += 1
4139
+ hpxml.hvac_distributions.add(id: "HydronicDistribution#{hydr_idx}",
4640
4140
  distribution_system_type: HPXML::HVACDistributionTypeHydronic,
4641
4141
  hydronic_type: HPXML::HydronicTypeBaseboard)
4642
4142
  heating_system.distribution_system_idref = hpxml.hvac_distributions[-1].id
4643
- break
4644
4143
  end
4645
4144
 
4646
4145
  # AirDistribution?
@@ -4661,8 +4160,8 @@ class HPXMLFile
4661
4160
  if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
4662
4161
  air_distribution_systems << heat_pump
4663
4162
  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)
4163
+ if args[:heat_pump_is_ducted].is_initialized
4164
+ air_distribution_systems << heat_pump if to_boolean(args[:heat_pump_is_ducted].get)
4666
4165
  end
4667
4166
  end
4668
4167
  end
@@ -4687,13 +4186,10 @@ class HPXMLFile
4687
4186
  duct_leakage_value: args[:ducts_supply_leakage_value],
4688
4187
  duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
4689
4188
 
4690
- if not ([HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && args[:cooling_system_is_ducted])
4691
-
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
4189
+ hpxml.hvac_distributions[-1].duct_leakage_measurements.add(duct_type: HPXML::DuctTypeReturn,
4190
+ duct_leakage_units: args[:ducts_return_leakage_units],
4191
+ duct_leakage_value: args[:ducts_return_leakage_value],
4192
+ duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
4697
4193
 
4698
4194
  # Ducts
4699
4195
  if args[:ducts_supply_location] != Constants.Auto
@@ -4725,51 +4221,23 @@ class HPXMLFile
4725
4221
  end
4726
4222
  end
4727
4223
 
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
4224
  def self.set_hvac_control(hpxml, runner, args)
4736
4225
  return if (args[:heating_system_type] == 'none') && (args[:cooling_system_type] == 'none') && (args[:heat_pump_type] == 'none')
4737
4226
 
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)
4227
+ if args[:setpoint_heating_weekday] == args[:setpoint_heating_weekend] && !args[:setpoint_heating_weekday].include?(',')
4228
+ heating_setpoint_temp = args[:setpoint_heating_weekday]
4229
+ else
4230
+ weekday_heating_setpoints = args[:setpoint_heating_weekday]
4231
+ weekend_heating_setpoints = args[:setpoint_heating_weekend]
4760
4232
  end
4761
4233
 
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)
4234
+ if args[:setpoint_cooling_weekday] == args[:setpoint_cooling_weekend] && !args[:setpoint_cooling_weekday].include?(',')
4235
+ cooling_setpoint_temp = args[:setpoint_cooling_weekday]
4236
+ else
4237
+ weekday_cooling_setpoints = args[:setpoint_cooling_weekday]
4238
+ weekend_cooling_setpoints = args[:setpoint_cooling_weekend]
4766
4239
  end
4767
4240
 
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
4241
  ceiling_fan_quantity = nil
4774
4242
  if args[:ceiling_fan_quantity] != Constants.Auto
4775
4243
  ceiling_fan_quantity = Float(args[:ceiling_fan_quantity])
@@ -4780,6 +4248,8 @@ class HPXMLFile
4780
4248
  end
4781
4249
 
4782
4250
  hpxml.hvac_controls.add(id: 'HVACControl',
4251
+ heating_setpoint_temp: heating_setpoint_temp,
4252
+ cooling_setpoint_temp: cooling_setpoint_temp,
4783
4253
  weekday_heating_setpoints: weekday_heating_setpoints,
4784
4254
  weekend_heating_setpoints: weekend_heating_setpoints,
4785
4255
  weekday_cooling_setpoints: weekday_cooling_setpoints,
@@ -4790,24 +4260,20 @@ class HPXMLFile
4790
4260
  def self.set_ventilation_fans(hpxml, runner, args)
4791
4261
  if args[:mech_vent_fan_type] != 'none'
4792
4262
 
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
-
4263
+ if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type])
4264
+ if args[:mech_vent_recovery_efficiency_type] == 'Unadjusted'
4265
+ total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency]
4266
+ sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency]
4267
+ elsif args[:mech_vent_recovery_efficiency_type] == 'Adjusted'
4268
+ total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency]
4269
+ sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency]
4803
4270
  end
4804
-
4805
- if args[:mech_vent_sensible_recovery_efficiency_type] == 'Unadjusted'
4271
+ elsif [HPXML::MechVentTypeHRV].include?(args[:mech_vent_fan_type])
4272
+ if args[:mech_vent_recovery_efficiency_type] == 'Unadjusted'
4806
4273
  sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency]
4807
- elsif args[:mech_vent_sensible_recovery_efficiency_type] == 'Adjusted'
4274
+ elsif args[:mech_vent_recovery_efficiency_type] == 'Adjusted'
4808
4275
  sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency]
4809
4276
  end
4810
-
4811
4277
  end
4812
4278
 
4813
4279
  distribution_system_idref = nil
@@ -4859,24 +4325,21 @@ class HPXMLFile
4859
4325
 
4860
4326
  if args[:mech_vent_fan_type_2] != 'none'
4861
4327
 
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
4328
+ if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type_2])
4871
4329
 
4330
+ if args[:mech_vent_recovery_efficiency_type_2] == 'Unadjusted'
4331
+ total_recovery_efficiency = args[:mech_vent_total_recovery_efficiency_2]
4332
+ sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency_2]
4333
+ elsif args[:mech_vent_recovery_efficiency_type_2] == 'Adjusted'
4334
+ total_recovery_efficiency_adjusted = args[:mech_vent_total_recovery_efficiency_2]
4335
+ sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency_2]
4872
4336
  end
4873
-
4874
- if args[:mech_vent_sensible_recovery_efficiency_type_2] == 'Unadjusted'
4337
+ elsif [HPXML::MechVentTypeHRV].include?(args[:mech_vent_fan_type_2])
4338
+ if args[:mech_vent_recovery_efficiency_type_2] == 'Unadjusted'
4875
4339
  sensible_recovery_efficiency = args[:mech_vent_sensible_recovery_efficiency_2]
4876
- elsif args[:mech_vent_sensible_recovery_efficiency_type_2] == 'Adjusted'
4340
+ elsif args[:mech_vent_recovery_efficiency_type_2] == 'Adjusted'
4877
4341
  sensible_recovery_efficiency_adjusted = args[:mech_vent_sensible_recovery_efficiency_2]
4878
4342
  end
4879
-
4880
4343
  end
4881
4344
 
4882
4345
  distribution_system_idref = nil
@@ -4901,25 +4364,33 @@ class HPXMLFile
4901
4364
  distribution_system_idref: distribution_system_idref)
4902
4365
  end
4903
4366
 
4904
- if args[:kitchen_fans_present]
4367
+ if (args[:kitchen_fans_quantity] == Constants.Auto) || (args[:kitchen_fans_quantity].to_i > 0)
4905
4368
  if args[:kitchen_fans_flow_rate].is_initialized
4906
- rated_flow_rate = args[:kitchen_fans_flow_rate].get
4369
+ if args[:kitchen_fans_flow_rate].get != Constants.Auto
4370
+ rated_flow_rate = args[:kitchen_fans_flow_rate].get.to_f
4371
+ end
4907
4372
  end
4908
4373
 
4909
4374
  if args[:kitchen_fans_power].is_initialized
4910
- fan_power = args[:kitchen_fans_power].get
4375
+ if args[:kitchen_fans_power].get != Constants.Auto
4376
+ fan_power = args[:kitchen_fans_power].get.to_f
4377
+ end
4911
4378
  end
4912
4379
 
4913
4380
  if args[:kitchen_fans_hours_in_operation].is_initialized
4914
- hours_in_operation = args[:kitchen_fans_hours_in_operation].get
4381
+ if args[:kitchen_fans_hours_in_operation].get != Constants.Auto
4382
+ hours_in_operation = args[:kitchen_fans_hours_in_operation].get.to_f
4383
+ end
4915
4384
  end
4916
4385
 
4917
4386
  if args[:kitchen_fans_start_hour].is_initialized
4918
- start_hour = args[:kitchen_fans_start_hour].get
4387
+ if args[:kitchen_fans_start_hour].get != Constants.Auto
4388
+ start_hour = args[:kitchen_fans_start_hour].get.to_i
4389
+ end
4919
4390
  end
4920
4391
 
4921
- if args[:kitchen_fans_quantity].is_initialized
4922
- quantity = args[:kitchen_fans_quantity].get
4392
+ if args[:kitchen_fans_quantity] != Constants.Auto
4393
+ quantity = args[:kitchen_fans_quantity].to_i
4923
4394
  end
4924
4395
 
4925
4396
  hpxml.ventilation_fans.add(id: 'KitchenRangeFan',
@@ -4932,25 +4403,33 @@ class HPXMLFile
4932
4403
  quantity: quantity)
4933
4404
  end
4934
4405
 
4935
- if args[:bathroom_fans_present]
4406
+ if (args[:bathroom_fans_quantity] == Constants.Auto) || (args[:bathroom_fans_quantity].to_i > 0)
4936
4407
  if args[:bathroom_fans_flow_rate].is_initialized
4937
- rated_flow_rate = args[:bathroom_fans_flow_rate].get
4408
+ if args[:bathroom_fans_flow_rate].get != Constants.Auto
4409
+ rated_flow_rate = args[:bathroom_fans_flow_rate].get.to_f
4410
+ end
4938
4411
  end
4939
4412
 
4940
4413
  if args[:bathroom_fans_power].is_initialized
4941
- fan_power = args[:bathroom_fans_power].get
4414
+ if args[:bathroom_fans_power].get != Constants.Auto
4415
+ fan_power = args[:bathroom_fans_power].get.to_f
4416
+ end
4942
4417
  end
4943
4418
 
4944
4419
  if args[:bathroom_fans_hours_in_operation].is_initialized
4945
- hours_in_operation = args[:bathroom_fans_hours_in_operation].get
4420
+ if args[:bathroom_fans_hours_in_operation].get != Constants.Auto
4421
+ hours_in_operation = args[:bathroom_fans_hours_in_operation].get.to_f
4422
+ end
4946
4423
  end
4947
4424
 
4948
4425
  if args[:bathroom_fans_start_hour].is_initialized
4949
- start_hour = args[:bathroom_fans_start_hour].get
4426
+ if args[:bathroom_fans_start_hour].get != Constants.Auto
4427
+ start_hour = args[:bathroom_fans_start_hour].get.to_i
4428
+ end
4950
4429
  end
4951
4430
 
4952
- if args[:bathroom_fans_quantity].is_initialized
4953
- quantity = args[:bathroom_fans_quantity].get
4431
+ if args[:bathroom_fans_quantity] != Constants.Auto
4432
+ quantity = args[:bathroom_fans_quantity].to_i
4954
4433
  end
4955
4434
 
4956
4435
  hpxml.ventilation_fans.add(id: 'BathFans',
@@ -4993,10 +4472,6 @@ class HPXMLFile
4993
4472
  tank_volume = args[:water_heater_tank_volume]
4994
4473
  end
4995
4474
 
4996
- if args[:water_heater_heating_capacity] != Constants.Auto
4997
- heating_capacity = args[:water_heater_heating_capacity]
4998
- end
4999
-
5000
4475
  if args[:water_heater_setpoint_temperature] != Constants.Auto
5001
4476
  temperature = args[:water_heater_setpoint_temperature]
5002
4477
  end
@@ -5064,7 +4539,6 @@ class HPXMLFile
5064
4539
  location: location,
5065
4540
  tank_volume: tank_volume,
5066
4541
  fraction_dhw_load_served: 1.0,
5067
- heating_capacity: heating_capacity,
5068
4542
  energy_factor: energy_factor,
5069
4543
  uniform_energy_factor: uniform_energy_factor,
5070
4544
  first_hour_rating: first_hour_rating,
@@ -5310,12 +4784,12 @@ class HPXMLFile
5310
4784
  end
5311
4785
 
5312
4786
  def self.set_dehumidifier(hpxml, runner, args)
5313
- return unless args[:dehumidifier_present]
4787
+ return if args[:dehumidifier_type] == 'none'
5314
4788
 
5315
4789
  if args[:dehumidifier_efficiency_type] == 'EnergyFactor'
5316
- energy_factor = args[:dehumidifier_efficiency_ef]
4790
+ energy_factor = args[:dehumidifier_efficiency]
5317
4791
  elsif args[:dehumidifier_efficiency_type] == 'IntegratedEnergyFactor'
5318
- integrated_energy_factor = args[:dehumidifier_efficiency_ief]
4792
+ integrated_energy_factor = args[:dehumidifier_efficiency]
5319
4793
  end
5320
4794
 
5321
4795
  hpxml.dehumidifiers.add(id: 'Dehumidifier',
@@ -5324,31 +4798,31 @@ class HPXMLFile
5324
4798
  energy_factor: energy_factor,
5325
4799
  integrated_energy_factor: integrated_energy_factor,
5326
4800
  rh_setpoint: args[:dehumidifier_rh_setpoint],
5327
- fraction_served: args[:dehumidifier_fraction_dehumidification_load_served])
4801
+ fraction_served: args[:dehumidifier_fraction_dehumidification_load_served],
4802
+ location: HPXML::LocationLivingSpace)
5328
4803
  end
5329
4804
 
5330
4805
  def self.set_clothes_washer(hpxml, runner, args)
5331
4806
  if args[:water_heater_type] == 'none'
5332
- args[:clothes_washer_present] = false
4807
+ args[:clothes_washer_location] = 'none'
5333
4808
  end
5334
4809
 
5335
- return unless args[:clothes_washer_present]
4810
+ return if args[:clothes_washer_location] == 'none'
5336
4811
 
5337
4812
  if args[:clothes_washer_rated_annual_kwh] != Constants.Auto
5338
4813
  rated_annual_kwh = args[:clothes_washer_rated_annual_kwh]
4814
+ return if Float(rated_annual_kwh) == 0
5339
4815
  end
5340
4816
 
5341
4817
  if args[:clothes_washer_location] != Constants.Auto
5342
4818
  location = args[:clothes_washer_location]
5343
4819
  end
5344
4820
 
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]
4821
+ if args[:clothes_washer_efficiency] != Constants.Auto
4822
+ if args[:clothes_washer_efficiency_type] == 'ModifiedEnergyFactor'
4823
+ modified_energy_factor = args[:clothes_washer_efficiency].to_f
4824
+ elsif args[:clothes_washer_efficiency_type] == 'IntegratedModifiedEnergyFactor'
4825
+ integrated_modified_energy_factor = args[:clothes_washer_efficiency].to_f
5352
4826
  end
5353
4827
  end
5354
4828
 
@@ -5390,14 +4864,14 @@ class HPXMLFile
5390
4864
  end
5391
4865
 
5392
4866
  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]
4867
+ return if args[:clothes_washer_location] == 'none'
4868
+ return if args[:clothes_dryer_location] == 'none'
4869
+
4870
+ if args[:clothes_dryer_efficiency] != Constants.Auto
4871
+ if args[:clothes_dryer_efficiency_type] == 'EnergyFactor'
4872
+ energy_factor = args[:clothes_dryer_efficiency].to_f
4873
+ elsif args[:clothes_dryer_efficiency_type] == 'CombinedEnergyFactor'
4874
+ combined_energy_factor = args[:clothes_dryer_efficiency].to_f
5401
4875
  end
5402
4876
  end
5403
4877
 
@@ -5405,10 +4879,6 @@ class HPXMLFile
5405
4879
  location = args[:clothes_dryer_location]
5406
4880
  end
5407
4881
 
5408
- if args[:clothes_dryer_control_type] != Constants.Auto
5409
- control_type = args[:clothes_dryer_control_type]
5410
- end
5411
-
5412
4882
  if args[:clothes_dryer_vented_flow_rate] != Constants.Auto
5413
4883
  is_vented = false
5414
4884
  if Float(args[:clothes_dryer_vented_flow_rate]) > 0
@@ -5426,25 +4896,25 @@ class HPXMLFile
5426
4896
  fuel_type: args[:clothes_dryer_fuel_type],
5427
4897
  energy_factor: energy_factor,
5428
4898
  combined_energy_factor: combined_energy_factor,
5429
- control_type: control_type,
5430
4899
  is_vented: is_vented,
5431
4900
  vented_flow_rate: vented_flow_rate,
5432
4901
  usage_multiplier: usage_multiplier)
5433
4902
  end
5434
4903
 
5435
4904
  def self.set_dishwasher(hpxml, runner, args)
5436
- return unless args[:dishwasher_present]
4905
+ return if args[:dishwasher_location] == 'none'
5437
4906
 
5438
4907
  if args[:dishwasher_location] != Constants.Auto
5439
4908
  location = args[:dishwasher_location]
5440
4909
  end
5441
4910
 
5442
4911
  if args[:dishwasher_efficiency_type] == 'RatedAnnualkWh'
5443
- if args[:dishwasher_efficiency_kwh] != Constants.Auto
5444
- rated_annual_kwh = args[:dishwasher_efficiency_kwh]
4912
+ if args[:dishwasher_efficiency] != Constants.Auto
4913
+ rated_annual_kwh = args[:dishwasher_efficiency]
4914
+ return if Float(rated_annual_kwh) == 0
5445
4915
  end
5446
4916
  elsif args[:dishwasher_efficiency_type] == 'EnergyFactor'
5447
- energy_factor = args[:dishwasher_efficiency_ef]
4917
+ energy_factor = args[:dishwasher_efficiency]
5448
4918
  end
5449
4919
 
5450
4920
  if args[:dishwasher_label_electric_rate] != Constants.Auto
@@ -5484,10 +4954,11 @@ class HPXMLFile
5484
4954
  end
5485
4955
 
5486
4956
  def self.set_refrigerator(hpxml, runner, args)
5487
- return unless args[:refrigerator_present]
4957
+ return if args[:refrigerator_location] == 'none'
5488
4958
 
5489
4959
  if args[:refrigerator_rated_annual_kwh] != Constants.Auto
5490
- refrigerator_rated_annual_kwh = args[:refrigerator_rated_annual_kwh]
4960
+ rated_annual_kwh = args[:refrigerator_rated_annual_kwh]
4961
+ return if Float(rated_annual_kwh) == 0
5491
4962
  end
5492
4963
 
5493
4964
  if args[:refrigerator_location] != Constants.Auto
@@ -5498,22 +4969,23 @@ class HPXMLFile
5498
4969
  usage_multiplier = args[:refrigerator_usage_multiplier]
5499
4970
  end
5500
4971
 
5501
- if args[:extra_refrigerator_present]
4972
+ if args[:extra_refrigerator_location] != 'none'
5502
4973
  primary_indicator = true
5503
4974
  end
5504
4975
 
5505
4976
  hpxml.refrigerators.add(id: 'Refrigerator',
5506
4977
  location: location,
5507
- rated_annual_kwh: refrigerator_rated_annual_kwh,
4978
+ rated_annual_kwh: rated_annual_kwh,
5508
4979
  primary_indicator: primary_indicator,
5509
4980
  usage_multiplier: usage_multiplier)
5510
4981
  end
5511
4982
 
5512
4983
  def self.set_extra_refrigerator(hpxml, runner, args)
5513
- return unless args[:extra_refrigerator_present]
4984
+ return if args[:extra_refrigerator_location] == 'none'
5514
4985
 
5515
4986
  if args[:extra_refrigerator_rated_annual_kwh] != Constants.Auto
5516
4987
  rated_annual_kwh = args[:extra_refrigerator_rated_annual_kwh]
4988
+ return if Float(rated_annual_kwh) == 0
5517
4989
  end
5518
4990
 
5519
4991
  if args[:extra_refrigerator_location] != Constants.Auto
@@ -5532,10 +5004,11 @@ class HPXMLFile
5532
5004
  end
5533
5005
 
5534
5006
  def self.set_freezer(hpxml, runner, args)
5535
- return unless args[:freezer_present]
5007
+ return if args[:freezer_location] == 'none'
5536
5008
 
5537
5009
  if args[:freezer_rated_annual_kwh] != Constants.Auto
5538
5010
  rated_annual_kwh = args[:freezer_rated_annual_kwh]
5011
+ return if Float(rated_annual_kwh) == 0
5539
5012
  end
5540
5013
 
5541
5014
  if args[:freezer_location] != Constants.Auto
@@ -5553,7 +5026,7 @@ class HPXMLFile
5553
5026
  end
5554
5027
 
5555
5028
  def self.set_cooking_range_oven(hpxml, runner, args)
5556
- return unless args[:cooking_range_oven_present]
5029
+ return if args[:cooking_range_oven_location] == 'none'
5557
5030
 
5558
5031
  if args[:cooking_range_oven_location] != Constants.Auto
5559
5032
  location = args[:cooking_range_oven_location]
@@ -5602,7 +5075,7 @@ class HPXMLFile
5602
5075
  kWh_per_year = args[:plug_loads_television_annual_kwh]
5603
5076
  end
5604
5077
 
5605
- usage_multiplier = args[:plug_loads_television_usage_multiplier] * args[:plug_loads_television_usage_multiplier_2]
5078
+ usage_multiplier = args[:plug_loads_television_usage_multiplier]
5606
5079
  if usage_multiplier == 1.0
5607
5080
  usage_multiplier = nil
5608
5081
  end
@@ -5626,7 +5099,7 @@ class HPXMLFile
5626
5099
  frac_latent = args[:plug_loads_other_frac_latent]
5627
5100
  end
5628
5101
 
5629
- usage_multiplier = args[:plug_loads_other_usage_multiplier] * args[:plug_loads_other_usage_multiplier_2]
5102
+ usage_multiplier = args[:plug_loads_other_usage_multiplier]
5630
5103
  if usage_multiplier == 1.0
5631
5104
  usage_multiplier = nil
5632
5105
  end
@@ -5646,7 +5119,7 @@ class HPXMLFile
5646
5119
  kWh_per_year = args[:plug_loads_well_pump_annual_kwh]
5647
5120
  end
5648
5121
 
5649
- usage_multiplier = args[:plug_loads_well_pump_usage_multiplier] * args[:plug_loads_well_pump_usage_multiplier_2]
5122
+ usage_multiplier = args[:plug_loads_well_pump_usage_multiplier]
5650
5123
  if usage_multiplier == 1.0
5651
5124
  usage_multiplier = nil
5652
5125
  end
@@ -5664,7 +5137,7 @@ class HPXMLFile
5664
5137
  kWh_per_year = args[:plug_loads_vehicle_annual_kwh]
5665
5138
  end
5666
5139
 
5667
- usage_multiplier = args[:plug_loads_vehicle_usage_multiplier] * args[:plug_loads_vehicle_usage_multiplier_2]
5140
+ usage_multiplier = args[:plug_loads_vehicle_usage_multiplier]
5668
5141
  if usage_multiplier == 1.0
5669
5142
  usage_multiplier = nil
5670
5143
  end
@@ -5750,10 +5223,6 @@ class HPXMLFile
5750
5223
  pump_usage_multiplier = args[:pool_pump_usage_multiplier]
5751
5224
  end
5752
5225
 
5753
- if args[:pool_heater_type] != 'none'
5754
- heater_type = args[:pool_heater_type]
5755
- end
5756
-
5757
5226
  if args[:pool_heater_annual_kwh] != Constants.Auto
5758
5227
  heater_load_units = 'kWh/year'
5759
5228
  heater_load_value = args[:pool_heater_annual_kwh]
@@ -5769,9 +5238,11 @@ class HPXMLFile
5769
5238
  end
5770
5239
 
5771
5240
  hpxml.pools.add(id: 'Pool',
5241
+ type: HPXML::TypeUnknown,
5242
+ pump_type: HPXML::TypeUnknown,
5772
5243
  pump_kwh_per_year: pump_kwh_per_year,
5773
5244
  pump_usage_multiplier: pump_usage_multiplier,
5774
- heater_type: heater_type,
5245
+ heater_type: args[:pool_heater_type],
5775
5246
  heater_load_units: heater_load_units,
5776
5247
  heater_load_value: heater_load_value,
5777
5248
  heater_usage_multiplier: heater_usage_multiplier)
@@ -5788,10 +5259,6 @@ class HPXMLFile
5788
5259
  pump_usage_multiplier = args[:hot_tub_pump_usage_multiplier]
5789
5260
  end
5790
5261
 
5791
- if args[:hot_tub_heater_type] != 'none'
5792
- heater_type = args[:hot_tub_heater_type]
5793
- end
5794
-
5795
5262
  if args[:hot_tub_heater_annual_kwh] != Constants.Auto
5796
5263
  heater_load_units = 'kWh/year'
5797
5264
  heater_load_value = args[:hot_tub_heater_annual_kwh]
@@ -5807,9 +5274,11 @@ class HPXMLFile
5807
5274
  end
5808
5275
 
5809
5276
  hpxml.hot_tubs.add(id: 'HotTub',
5277
+ type: HPXML::TypeUnknown,
5278
+ pump_type: HPXML::TypeUnknown,
5810
5279
  pump_kwh_per_year: pump_kwh_per_year,
5811
5280
  pump_usage_multiplier: pump_usage_multiplier,
5812
- heater_type: heater_type,
5281
+ heater_type: args[:hot_tub_heater_type],
5813
5282
  heater_load_units: heater_load_units,
5814
5283
  heater_load_value: heater_load_value,
5815
5284
  heater_usage_multiplier: heater_usage_multiplier)
@@ -5827,31 +5296,7 @@ class HPXMLFile
5827
5296
  st = space.spaceType.get
5828
5297
  space_type = st.standardsSpaceType.get
5829
5298
 
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
5299
+ return space_type
5855
5300
  end
5856
5301
 
5857
5302
  def self.get_surface_azimuth(surface, args)