urbanopt-cli 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (801) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile +4 -4
  4. data/example_files/Gemfile +8 -8
  5. data/example_files/mappers/Baseline.rb +37 -36
  6. data/example_files/measures/BuildResidentialModel/measure.rb +70 -37
  7. data/example_files/reopt/base_assumptions.json +2 -2
  8. data/example_files/reopt/multiPV_assumptions.json +4 -3
  9. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -1
  10. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +96 -3
  11. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +138 -73
  12. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +509 -487
  13. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +11 -11
  14. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +33 -32
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.json +388 -0
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.md +43 -0
  17. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +5 -5
  18. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +5 -5
  19. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +5 -5
  20. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +5 -5
  21. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +5 -5
  22. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +5 -5
  23. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +5 -5
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +5 -5
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +5 -5
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +5 -5
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +5 -5
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +5 -5
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +5 -5
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +5 -5
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +341 -0
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +341 -0
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +8 -8
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +8 -8
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +8 -8
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +8 -8
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +8 -8
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +5 -5
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +5 -5
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +5 -5
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +5 -5
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +5 -5
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +5 -5
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +5 -5
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +5 -5
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +5 -5
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +5 -5
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +5 -5
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +5 -5
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +5 -5
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +5 -5
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +5 -5
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +5 -5
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +5 -5
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +5 -5
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +5 -5
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +5 -5
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +5 -5
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +5 -5
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +5 -5
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +5 -5
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +5 -5
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +5 -5
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +5 -5
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +5 -5
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +5 -5
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +5 -5
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +5 -5
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +5 -5
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +5 -5
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +5 -5
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +5 -5
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +5 -5
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +5 -5
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +5 -5
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +5 -5
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +5 -5
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +5 -5
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +5 -5
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +5 -5
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +5 -5
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +5 -5
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +5 -5
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +5 -5
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +5 -5
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +5 -5
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +5 -5
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +5 -5
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +5 -5
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +5 -5
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +5 -5
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +5 -5
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +5 -5
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +6 -6
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +5 -5
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +5 -5
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +5 -5
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +5 -5
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +5 -5
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +5 -5
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +5 -5
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +5 -5
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +5 -5
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +5 -5
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +4 -4
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +5 -5
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +6 -6
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +6 -6
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +6 -6
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +5 -5
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +5 -5
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +5 -5
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +5 -5
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +5 -5
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +5 -5
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +5 -5
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +5 -5
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +5 -5
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +5 -5
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +6 -6
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +5 -5
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +5 -5
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +5 -5
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +5 -5
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +5 -5
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +5 -5
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +5 -5
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +5 -5
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +5 -5
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +5 -5
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +5 -5
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +6 -6
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +5 -5
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +5 -5
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +5 -5
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +5 -5
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +5 -5
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +5 -5
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +5 -5
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +5 -5
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +5 -5
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +5 -5
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +5 -5
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +4 -4
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +4 -4
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +5 -5
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +5 -5
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +6 -6
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +6 -6
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +6 -6
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +5 -5
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +5 -5
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +5 -5
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +5 -5
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +5 -5
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +5 -5
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +6 -6
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +5 -5
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +5 -5
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +5 -5
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +5 -5
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +4 -4
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +5 -5
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +6 -6
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +6 -6
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +5 -5
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +6 -6
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +8 -8
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +5 -5
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +5 -5
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +5 -5
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +5 -5
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +5 -5
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +5 -5
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +5 -5
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +5 -5
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +5 -5
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +5 -5
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +5 -5
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +5 -5
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +5 -5
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +5 -5
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +5 -5
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +5 -5
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +5 -5
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +5 -5
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +5 -5
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +5 -5
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +5 -5
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +5 -5
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +5 -5
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +5 -5
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +5 -5
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +5 -5
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +5 -5
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +5 -5
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +5 -5
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +5 -5
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +5 -5
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +5 -5
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +5 -5
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +5 -5
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +5 -5
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +5 -5
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +5 -5
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +5 -5
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +5 -5
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +5 -5
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +5 -5
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +5 -5
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +5 -5
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +5 -5
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +5 -5
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +5 -5
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +4 -2
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +5 -5
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +8 -8
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +8 -8
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +8 -8
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +8 -8
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +8 -8
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +8 -8
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +8 -8
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +8 -8
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +8 -8
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +8 -8
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +8 -8
  228. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +8 -8
  229. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +8 -8
  230. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +8 -8
  231. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +8 -8
  232. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +8 -8
  233. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +8 -8
  234. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +8 -8
  235. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +8 -8
  236. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +8 -8
  237. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +8 -8
  238. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +8 -8
  239. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +8 -8
  240. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +8 -8
  241. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +8 -8
  242. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +8 -8
  243. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +8 -8
  244. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +8 -8
  245. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +8 -8
  246. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +8 -8
  247. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +8 -8
  248. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +8 -8
  249. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +8 -8
  250. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +8 -8
  251. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +8 -8
  252. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +8 -8
  253. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +8 -8
  254. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +8 -8
  255. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +8 -8
  256. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +8 -8
  257. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +8 -8
  258. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +8 -8
  259. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +8 -8
  260. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +8 -8
  261. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +8 -8
  262. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +8 -8
  263. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +8 -8
  264. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +8 -8
  265. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +8 -8
  266. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +8 -8
  267. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +8 -8
  268. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +8 -8
  269. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +8 -8
  270. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +8 -8
  271. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +8 -8
  272. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +8 -8
  273. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +8 -8
  274. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +8 -8
  275. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +8 -8
  276. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +8 -8
  277. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +8 -8
  278. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +8 -8
  279. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +8 -8
  280. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +8 -8
  281. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +5 -5
  282. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +5 -5
  283. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +339 -0
  284. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +5 -5
  285. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +5 -5
  286. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +5 -5
  287. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +5 -5
  288. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +5 -5
  289. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +5 -5
  290. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +5 -5
  291. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +5 -5
  292. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +5 -5
  293. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +5 -5
  294. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +5 -5
  295. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +5 -5
  296. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +5 -5
  297. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +5 -5
  298. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +5 -5
  299. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +5 -5
  300. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +5 -5
  301. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +5 -5
  302. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +5 -5
  303. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +5 -5
  304. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +5 -5
  305. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +337 -0
  306. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +337 -0
  307. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +5 -5
  308. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +5 -5
  309. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +5 -5
  310. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +5 -5
  311. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +5 -5
  312. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +4 -4
  313. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +5 -5
  314. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +4 -4
  315. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +5 -5
  316. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +5 -5
  317. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +5 -5
  318. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +5 -5
  319. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +5 -5
  320. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +5 -5
  321. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +5 -5
  322. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +5 -5
  323. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +5 -5
  324. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +5 -5
  325. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +5 -5
  326. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +5 -5
  327. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +5 -5
  328. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +5 -5
  329. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +8 -8
  330. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +8 -8
  331. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +7 -7
  332. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +5 -5
  333. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +5 -5
  334. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +5 -5
  335. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +5 -5
  336. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +5 -5
  337. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +5 -5
  338. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +5 -5
  339. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +5 -5
  340. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +5 -5
  341. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +5 -5
  342. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +5 -5
  343. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +5 -5
  344. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +5 -5
  345. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +5 -5
  346. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +5 -5
  347. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → invalid_files/single-family-detached-with-shared-system.osw} +22 -22
  348. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +5 -5
  349. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +5 -5
  350. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +5 -5
  351. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +5 -5
  352. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +5 -5
  353. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +5 -5
  354. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +5 -5
  355. data/example_files/resources/hpxml-measures/Changelog.md +14 -3
  356. data/example_files/resources/hpxml-measures/Gemfile +0 -3
  357. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +136 -528
  358. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +131 -106
  359. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +2 -0
  360. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +31 -14
  361. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +19 -0
  362. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +5 -1
  363. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -0
  364. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +62 -0
  365. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
  366. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +2 -1
  367. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +388 -4
  368. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +54 -14
  369. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +40 -4
  370. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +110 -89
  371. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +2 -4
  372. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +21 -10
  373. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
  374. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +12 -11
  375. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +2 -1
  376. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +28 -1
  377. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +20 -9
  378. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +1 -1
  379. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +1 -0
  380. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +1 -0
  381. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +2 -28
  382. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +16 -7
  383. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/{test_constructions.rb → test_enclosure.rb} +12 -16
  384. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
  385. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +0 -1
  386. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +13 -38
  387. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +0 -1
  388. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +0 -1
  389. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +0 -1
  390. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +0 -1
  391. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -1
  392. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +0 -1
  393. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +1 -2
  394. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +0 -1
  395. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
  396. data/example_files/resources/hpxml-measures/README.md +0 -1
  397. data/example_files/resources/hpxml-measures/Rakefile +1 -2
  398. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +32 -13
  399. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +37 -9
  400. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +24 -7
  401. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +1 -1
  402. data/example_files/resources/hpxml-measures/docs/source/intro.rst +1 -0
  403. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +75 -58
  404. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +5 -1
  405. data/example_files/resources/hpxml-measures/tasks.rb +248 -263
  406. data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
  407. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +17 -4
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +3 -2
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +3 -2
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +3 -2
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +3 -2
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +3 -2
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +3 -2
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +3 -2
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +3 -2
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +3 -2
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +3 -2
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +3 -2
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +3 -2
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +3 -2
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +3 -2
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +3 -2
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +3 -2
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +3 -2
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +3 -2
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +3 -2
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +3 -2
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +3 -2
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +3 -2
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +0 -18
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +1 -0
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +1 -0
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +0 -18
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +0 -18
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +1 -0
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +0 -18
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +1 -0
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +1 -0
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +3 -2
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +4 -3
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +3 -2
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +6 -4
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +3 -2
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +3 -2
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +3 -2
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +3 -2
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +3 -2
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +3 -2
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +3 -2
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +1 -1
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +1 -1
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +2 -1
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +4 -3
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +3 -2
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +2 -1
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +2 -1
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +2 -1
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +3 -2
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +1 -1
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +1 -1
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +1 -1
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +1 -1
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +1 -1
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +3 -2
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +3 -2
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +3 -2
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +1 -1
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +3 -2
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +1 -1
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +3 -2
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +3 -2
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +3 -2
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +3 -2
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +3 -2
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +3 -2
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +3 -2
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +3 -2
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +3 -2
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +3 -2
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +3 -2
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +3 -2
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +3 -2
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +3 -2
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +3 -2
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +3 -2
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +3 -2
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +3 -2
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +3 -2
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +3 -2
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +3 -2
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +3 -2
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +3 -2
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +3 -2
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +3 -2
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +3 -2
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +3 -2
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +3 -2
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +3 -2
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +3 -2
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +3 -2
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +3 -2
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +3 -2
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +3 -2
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +3 -2
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +3 -2
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +3 -2
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +3 -2
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +3 -2
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +3 -2
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +3 -2
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +3 -2
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +3 -2
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +4 -3
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +3 -2
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +3 -2
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +5 -4
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +5 -4
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +3 -2
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +21 -20
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +21 -20
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +3 -2
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +3 -2
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +3 -2
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +3 -2
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +3 -2
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +3 -2
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +3 -2
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +3 -2
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +3 -2
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +3 -2
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +3 -2
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +3 -2
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +3 -2
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +3 -2
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +3 -2
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +3 -2
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +3 -2
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +2 -1
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +4 -3
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +5 -4
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +5 -4
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +5 -4
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +1 -0
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +1 -0
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +1 -0
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +1 -0
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml +1 -0
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +1 -0
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml +1 -0
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +1 -0
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +1 -0
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +1 -0
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +1 -0
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +1 -0
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +1 -0
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +1 -0
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +1 -0
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +1 -0
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +1 -0
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +1 -0
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +1 -0
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +1 -0
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +1 -0
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +1 -0
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +1 -0
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +1 -0
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +1 -0
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +1 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +1 -0
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +1 -0
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +1 -0
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +1 -0
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +1 -0
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +1 -1
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +1 -1
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +3 -2
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +1 -1
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +1 -1
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +1 -1
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +1 -1
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +2 -1
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +2 -1
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +2 -1
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +6 -5
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +2 -2
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +4 -3
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +4 -3
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +4 -3
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +4 -3
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +4 -3
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +3 -2
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +1 -1
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +3 -2
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +3 -2
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -1
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +1 -1
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +1 -52
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +1 -1
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +2 -1
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +3 -2
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +2 -1
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +3 -2
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +3 -2
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +2 -1
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +3 -2
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +2 -1
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +2 -1
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +2 -1
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +4 -4
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +2 -1
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +3 -2
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +4 -3
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml +3 -2
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml +5 -4
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +5 -4
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +5 -4
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml +3 -2
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +3 -2
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +3 -2
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-only.xml +2 -1
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +4 -3
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml +2 -1
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml +5 -4
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +3 -2
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +3 -2
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +3 -2
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +2 -1
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +1 -1
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +2 -1
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +4 -3
  631. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +5 -4
  632. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +3 -3
  633. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +9 -5
  634. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +1 -52
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +6 -5
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +3 -2
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +1 -1
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +1 -1
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +3 -2
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +1 -1
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +1 -1
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +3 -2
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +3 -2
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +1 -1
  645. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +3 -2
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +3 -2
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +3 -2
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +3 -2
  649. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +3 -2
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +3 -2
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +3 -2
  652. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +3 -2
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +3 -2
  654. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +3 -2
  655. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +3 -2
  656. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +3 -2
  657. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +3 -2
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +3 -2
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +2 -2
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +3 -2
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +3 -2
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +3 -2
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +3 -2
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +3 -2
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +3 -2
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +3 -2
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +3 -2
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +30 -28
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +3 -2
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +3 -2
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +3 -2
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +4 -3
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +3 -2
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +3 -2
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +3 -2
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +3 -2
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +3 -2
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +3 -2
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +9 -6
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +3 -2
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +3 -2
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +3 -2
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +3 -2
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +3 -2
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +3 -2
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +3 -2
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +3 -2
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +3 -2
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +3 -2
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +1 -1
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +1 -1
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +3 -2
  693. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +3 -2
  694. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +3 -2
  695. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +3 -2
  696. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +3 -2
  697. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +1 -1
  698. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +3 -2
  699. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +3 -2
  700. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +3 -2
  701. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +3 -2
  702. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +3 -2
  703. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +3 -2
  704. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +3 -2
  705. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +3 -2
  706. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +3 -2
  707. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +3 -2
  708. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +3 -2
  709. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +4 -3
  710. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +4 -3
  711. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +3 -2
  712. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +3 -2
  713. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +3 -2
  714. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +3 -2
  715. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +3 -2
  716. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +3 -2
  717. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +3 -2
  718. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +3 -2
  719. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +3 -2
  720. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +3 -2
  721. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +3 -2
  722. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +3 -2
  723. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +4 -3
  724. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +2 -1
  725. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +9 -5
  726. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +9 -5
  727. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +3 -2
  728. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +3 -3
  729. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +3 -3
  730. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +9 -5
  731. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +3 -2
  732. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +3 -2
  733. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +407 -0
  734. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +3 -2
  735. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +3 -2
  736. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +3 -2
  737. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +3 -2
  738. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +3 -2
  739. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +3 -2
  740. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +3 -2
  741. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +3 -2
  742. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +3 -2
  743. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +3 -2
  744. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +5 -4
  745. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +5 -4
  746. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +3 -2
  747. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +3 -2
  748. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +3 -2
  749. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +3 -2
  750. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +3 -2
  751. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +3 -2
  752. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +2 -1
  753. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +1 -1
  754. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +3 -2
  755. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +3 -2
  756. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +3 -2
  757. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +3 -2
  758. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +3 -2
  759. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +3 -2
  760. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +9 -5
  761. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +3 -2
  762. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +3 -2
  763. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +3 -2
  764. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +3 -2
  765. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +3 -2
  766. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +9 -6
  767. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +9 -6
  768. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +4 -3
  769. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +3 -2
  770. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +3 -2
  771. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +2 -1
  772. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +3 -2
  773. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +3 -2
  774. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +3 -2
  775. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +2 -1
  776. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +1 -1
  777. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → invalid_files/solar-fraction-one.xml} +570 -524
  778. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +1 -1
  779. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +2 -1
  780. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +1 -1
  781. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +3 -2
  782. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +3 -2
  783. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +3 -2
  784. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +3 -2
  785. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +3 -2
  786. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +5 -4
  787. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +3 -2
  788. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +3 -2
  789. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +3 -2
  790. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +3 -2
  791. data/example_files/resources/hpxml-measures/workflow/template.osw +1 -0
  792. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +294 -0
  793. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +27 -0
  794. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +294 -0
  795. data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +130 -0
  796. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +108 -38
  797. data/lib/uo_cli/version.rb +1 -1
  798. data/uo_cli.gemspec +6 -6
  799. metadata +31 -20
  800. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -74
  801. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -838
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -47,9 +47,9 @@
47
47
  "dehumidifier_capacity": 40,
48
48
  "dehumidifier_efficiency": 1.8,
49
49
  "dehumidifier_efficiency_type": "EnergyFactor",
50
- "dehumidifier_fraction_dehumidification_load_served": 0.5,
50
+ "dehumidifier_fraction_dehumidification_load_served": 1,
51
51
  "dehumidifier_rh_setpoint": 0.5,
52
- "dehumidifier_type": "portable",
52
+ "dehumidifier_type": "none",
53
53
  "dhw_distribution_pipe_r": "0.0",
54
54
  "dhw_distribution_recirc_branch_piping_length": "50",
55
55
  "dhw_distribution_recirc_control_type": "no control",
@@ -68,16 +68,16 @@
68
68
  "dishwasher_usage_multiplier": 1.0,
69
69
  "door_area": 80.0,
70
70
  "door_rvalue": 4.4,
71
- "ducts_number_of_return_registers": "1",
71
+ "ducts_number_of_return_registers": "2",
72
72
  "ducts_return_insulation_r": 0.0,
73
73
  "ducts_return_leakage_units": "CFM25",
74
74
  "ducts_return_leakage_value": 25.0,
75
- "ducts_return_location": "under slab",
75
+ "ducts_return_location": "attic - unvented",
76
76
  "ducts_return_surface_area": "50.0",
77
77
  "ducts_supply_insulation_r": 4.0,
78
78
  "ducts_supply_leakage_units": "CFM25",
79
79
  "ducts_supply_leakage_value": 75.0,
80
- "ducts_supply_location": "under slab",
80
+ "ducts_supply_location": "attic - unvented",
81
81
  "ducts_supply_surface_area": "150.0",
82
82
  "dwhr_efficiency": 0.55,
83
83
  "dwhr_equal_flow": true,
@@ -110,13 +110,13 @@
110
110
  "geometry_aspect_ratio": 1.5,
111
111
  "geometry_attic_type": "UnventedAttic",
112
112
  "geometry_balcony_depth": 0.0,
113
- "geometry_cfa": 1350.0,
113
+ "geometry_cfa": 2700.0,
114
114
  "geometry_corridor_position": "Double-Loaded Interior",
115
115
  "geometry_corridor_width": 10.0,
116
116
  "geometry_eaves_depth": 0,
117
- "geometry_foundation_height": 0.0,
118
- "geometry_foundation_height_above_grade": 0.0,
119
- "geometry_foundation_type": "SlabOnGrade",
117
+ "geometry_foundation_height": 8.0,
118
+ "geometry_foundation_height_above_grade": 1.0,
119
+ "geometry_foundation_type": "ConditionedBasement",
120
120
  "geometry_garage_depth": 20.0,
121
121
  "geometry_garage_position": "Right",
122
122
  "geometry_garage_protrusion": 0.0,
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,11 +154,11 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
161
- "heating_system_type": "Furnace",
161
+ "heating_system_type": "Shared Boiler w/ Baseboard",
162
162
  "heating_system_type_2": "none",
163
163
  "holiday_lighting_daily_kwh": "auto",
164
164
  "holiday_lighting_period_begin_day_of_month": "auto",
@@ -173,7 +173,7 @@
173
173
  "hot_tub_present": false,
174
174
  "hot_tub_pump_annual_kwh": "auto",
175
175
  "hot_tub_pump_usage_multiplier": 1.0,
176
- "hpxml_path": "../BuildResidentialHPXML/tests/built_residential_hpxml/base-appliances-dehumidifier-50percent.xml",
176
+ "hpxml_path": "../BuildResidentialHPXML/tests/built_residential_hpxml/single-family-detached-with-shared-system.xml",
177
177
  "kitchen_fans_quantity": "0",
178
178
  "lighting_fraction_cfl_exterior": 0.4,
179
179
  "lighting_fraction_cfl_garage": 0.4,
@@ -218,7 +218,7 @@
218
218
  "overhangs_left_distance_to_top_of_window": 0,
219
219
  "overhangs_right_depth": 0,
220
220
  "overhangs_right_distance_to_top_of_window": 0,
221
- "plug_loads_other_annual_kwh": "1228.5",
221
+ "plug_loads_other_annual_kwh": "2457.0",
222
222
  "plug_loads_other_frac_latent": "0.045",
223
223
  "plug_loads_other_frac_sensible": "0.855",
224
224
  "plug_loads_other_usage_multiplier": 1.0,
@@ -277,13 +277,13 @@
277
277
  "skylight_area_right": 0,
278
278
  "skylight_shgc": 0.45,
279
279
  "skylight_ufactor": 0.33,
280
- "slab_carpet_fraction": "1.0",
281
- "slab_carpet_r": "2.5",
280
+ "slab_carpet_fraction": "0.0",
281
+ "slab_carpet_r": "0.0",
282
282
  "slab_perimeter_depth": 0,
283
283
  "slab_perimeter_insulation_r": 0,
284
284
  "slab_thickness": "4.0",
285
- "slab_under_insulation_r": 5,
286
- "slab_under_width": 999,
285
+ "slab_under_insulation_r": 0,
286
+ "slab_under_width": 0,
287
287
  "solar_thermal_collector_area": 40.0,
288
288
  "solar_thermal_collector_azimuth": 180,
289
289
  "solar_thermal_collector_loop_type": "liquid direct",
@@ -312,7 +312,7 @@
312
312
  "water_heater_standby_loss": 0,
313
313
  "water_heater_tank_volume": "40",
314
314
  "water_heater_type": "storage water heater",
315
- "weather_station_epw_filepath": "USA_TX_Dallas-Fort.Worth.Intl.AP.722590_TMY3.epw",
315
+ "weather_station_epw_filepath": "USA_CO_Denver.Intl.AP.725650_TMY3.epw",
316
316
  "whole_house_fan_flow_rate": 4500,
317
317
  "whole_house_fan_power": 300,
318
318
  "whole_house_fan_present": false,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -36,7 +36,7 @@
36
36
  "cooking_range_oven_is_induction": false,
37
37
  "cooking_range_oven_location": "living space",
38
38
  "cooking_range_oven_usage_multiplier": 1.0,
39
- "cooling_system_cooling_capacity": "48000.0",
39
+ "cooling_system_cooling_capacity": "24000.0",
40
40
  "cooling_system_cooling_compressor_type": "single stage",
41
41
  "cooling_system_cooling_efficiency": 13.0,
42
42
  "cooling_system_cooling_efficiency_type": "SEER",
@@ -136,16 +136,16 @@
136
136
  "geometry_unit_type": "single-family detached",
137
137
  "geometry_wall_height": 8.0,
138
138
  "heat_pump_backup_fuel": "none",
139
- "heat_pump_backup_heating_capacity": "34121.0",
139
+ "heat_pump_backup_heating_capacity": "36000.0",
140
140
  "heat_pump_backup_heating_efficiency": 1,
141
- "heat_pump_cooling_capacity": "48000.0",
141
+ "heat_pump_cooling_capacity": "36000.0",
142
142
  "heat_pump_cooling_compressor_type": "single stage",
143
143
  "heat_pump_cooling_efficiency": 13.0,
144
144
  "heat_pump_cooling_efficiency_type": "SEER",
145
145
  "heat_pump_cooling_sensible_heat_fraction": 0.73,
146
146
  "heat_pump_fraction_cool_load_served": 1,
147
147
  "heat_pump_fraction_heat_load_served": 1,
148
- "heat_pump_heating_capacity": "64000.0",
148
+ "heat_pump_heating_capacity": "36000.0",
149
149
  "heat_pump_heating_capacity_17_f": "auto",
150
150
  "heat_pump_heating_efficiency": 7.7,
151
151
  "heat_pump_heating_efficiency_type": "HSPF",
@@ -154,7 +154,7 @@
154
154
  "heating_system_fraction_heat_load_served_2": 0.25,
155
155
  "heating_system_fuel": "natural gas",
156
156
  "heating_system_fuel_2": "electricity",
157
- "heating_system_heating_capacity": "64000.0",
157
+ "heating_system_heating_capacity": "36000.0",
158
158
  "heating_system_heating_capacity_2": "auto",
159
159
  "heating_system_heating_efficiency": 0.92,
160
160
  "heating_system_heating_efficiency_2": 1.0,
@@ -1,18 +1,29 @@
1
1
  ## OpenStudio-HPXML v1.2.0 (Pending)
2
2
 
3
3
  __New Features__
4
- - Allow `Slab/ExposedPerimeter` to be zero.
4
+ - Updates to OpenStudio 3.2.0/EnergyPlus 9.5.0.
5
+ - **Breaking change**: Heating/cooling component loads no longer calculated by default for faster performance; use `--add-component-loads` argument if desired.
5
6
  - **Breaking change**: Replaces `Site/extension/ShelterCoefficient` with `Site/ShieldingofHome`.
7
+ - **Breaking change**: `AirDistributionType` is now required for all air distribution systems.
8
+ - Allows additional fuel types for generators.
9
+ - Allows `DuctLeakageMeasurement` & `ConditionedFloorAreaServed` to not be specified for ductless fan coil systems.
10
+ - Allows `Slab/ExposedPerimeter` to be zero.
6
11
  - Removes `ClothesDryer/ControlType` from being a required input, it is not used.
7
- - Moves additional error-checking from the ruby measure to the schematron validator.
8
- - Adds more detail to error messages regarding the wrong data type in the HPXML file.
12
+ - Switches room air conditioner model to use Cutler performance curves.
13
+ - Adds an `--ep-input-format` argument to run_simulation.rb to choose epJSON as the EnergyPlus input file format instead of IDF.
9
14
  - Relaxes tolerance for duct leakage to outside warning when ducts solely in conditioned space.
15
+ - Moves additional error-checking from the ruby measure to the schematron validator.
10
16
 
11
17
  __Bugfixes__
18
+ - Improves ground reflectance when there is shading of windows/skylights.
19
+ - Fixes room air conditioner performance curve.
12
20
  - Fixes ruby error if elements (e.g., `SystemIdentifier`) exist without the proper 'id'/'idref' attribute.
13
21
  - Fixes error if boiler/GSHP pump power is zero
14
22
  - Fixes possible "Electricity category end uses do not sum to total" error due to boiler pump energy.
15
23
  - Fixes possible "Construction R-value ... does not match Assembly R-value" error for highly insulated enclosure elements.
24
+ - Adds error-checking for negative SEEReq results for shared cooling systems.
25
+ - Adds more detail to error messages regarding the wrong data type in the HPXML file.
26
+ - Prevents a solar hot water system w/ SolarFraction=1.
16
27
 
17
28
  ## OpenStudio-HPXML v1.1.0
18
29
 
@@ -7,8 +7,5 @@ gem 'oga'
7
7
  gem 'schematron-nokogiri'
8
8
  gem 'rake'
9
9
  gem 'minitest', '~> 5.9'
10
- gem 'ci_reporter_minitest', '~> 1.0.0'
11
- gem 'simplecov'
12
- gem 'codecov', '0.2.12'
13
10
  gem 'minitest-reporters'
14
11
  gem 'parallel'
@@ -72,6 +72,12 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
72
72
  arg.setDefaultValue(false)
73
73
  args << arg
74
74
 
75
+ arg = OpenStudio::Measure::OSArgument.makeBoolArgument('add_component_loads', false)
76
+ arg.setDisplayName('Add component loads?')
77
+ arg.setDescription('If true, adds the calculation of heating/cooling component loads (not enabled by default for faster performance).')
78
+ arg.setDefaultValue(false)
79
+ args << arg
80
+
75
81
  arg = OpenStudio::Measure::OSArgument.makeBoolArgument('skip_validation', false)
76
82
  arg.setDisplayName('Skip Validation?')
77
83
  arg.setDescription('If true, bypasses HPXML input validation for faster performance. WARNING: This should only be used if the supplied HPXML file has already been validated against the Schema & Schematron documents.')
@@ -102,6 +108,7 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
102
108
  # assign the user inputs to variables
103
109
  hpxml_path = runner.getStringArgumentValue('hpxml_path', user_arguments)
104
110
  output_dir = runner.getStringArgumentValue('output_dir', user_arguments)
111
+ add_component_loads = runner.getBoolArgumentValue('add_component_loads', user_arguments)
105
112
  debug = runner.getBoolArgumentValue('debug', user_arguments)
106
113
  skip_validation = runner.getBoolArgumentValue('skip_validation', user_arguments)
107
114
  building_id = runner.getOptionalStringArgumentValue('building_id', user_arguments)
@@ -146,7 +153,8 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
146
153
  FileUtils.cp(epw_path, epw_output_path)
147
154
  end
148
155
 
149
- OSModel.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir, building_id, debug)
156
+ OSModel.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir,
157
+ add_component_loads, building_id, debug)
150
158
  rescue Exception => e
151
159
  runner.registerError("#{e.message}\n#{e.backtrace.join("\n")}")
152
160
  return false
@@ -195,7 +203,8 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
195
203
  end
196
204
 
197
205
  class OSModel
198
- def self.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir, building_id, debug)
206
+ def self.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir,
207
+ add_component_loads, building_id, debug)
199
208
  @hpxml = hpxml
200
209
  @debug = debug
201
210
 
@@ -238,8 +247,8 @@ class OSModel
238
247
  add_conditioned_floor_area(runner, model, spaces)
239
248
  add_thermal_mass(runner, model, spaces)
240
249
  update_conditioned_basement(runner, model, spaces)
241
- set_zone_volumes(runner, model, spaces)
242
- explode_surfaces(runner, model)
250
+ Geometry.set_zone_volumes(runner, model, spaces, @hpxml, @apply_ashrae140_assumptions)
251
+ Geometry.explode_surfaces(runner, model, @hpxml, @walls_top)
243
252
  add_num_occupants(model, runner, spaces)
244
253
 
245
254
  # HVAC
@@ -274,7 +283,7 @@ class OSModel
274
283
 
275
284
  # Output
276
285
 
277
- add_component_loads_output(runner, model, spaces)
286
+ add_loads_output(runner, model, spaces, add_component_loads)
278
287
  add_output_control_files(runner, model)
279
288
  # Uncomment to debug EMS
280
289
  # add_ems_debug_output(runner, model)
@@ -309,7 +318,7 @@ class OSModel
309
318
  @default_azimuths = get_default_azimuths()
310
319
 
311
320
  # Apply defaults to HPXML object
312
- HPXMLDefaults.apply(@hpxml, @eri_version, weather, epw_file)
321
+ HPXMLDefaults.apply(@hpxml, @eri_version, weather, epw_file: epw_file)
313
322
 
314
323
  @frac_windows_operable = @hpxml.fraction_of_windows_operable()
315
324
 
@@ -323,204 +332,18 @@ class OSModel
323
332
  end
324
333
 
325
334
  def self.add_simulation_params(model)
326
- SimControls.apply(model, @hpxml.header)
327
- end
328
-
329
- def self.set_zone_volumes(runner, model, spaces)
330
- # Living space
331
- spaces[HPXML::LocationLivingSpace].thermalZone.get.setVolume(UnitConversions.convert(@hpxml.building_construction.conditioned_building_volume, 'ft^3', 'm^3'))
332
-
333
- # Basement, crawlspace, garage
334
- spaces.keys.each do |space_type|
335
- next unless [HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented, HPXML::LocationGarage].include? space_type
336
-
337
- floor_area = @hpxml.slabs.select { |s| s.interior_adjacent_to == space_type }.map { |s| s.area }.sum(0.0)
338
- if space_type == HPXML::LocationGarage
339
- height = 8.0
340
- else
341
- height = @hpxml.foundation_walls.select { |w| w.interior_adjacent_to == space_type }.map { |w| w.height }.max
342
- end
343
-
344
- spaces[space_type].thermalZone.get.setVolume(UnitConversions.convert(floor_area * height, 'ft^3', 'm^3'))
345
- end
346
-
347
- # Attic
348
- spaces.keys.each do |space_type|
349
- next unless [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? space_type
350
-
351
- floor_area = @hpxml.frame_floors.select { |f| [f.interior_adjacent_to, f.exterior_adjacent_to].include? space_type }.map { |s| s.area }.sum(0.0)
352
- roofs = @hpxml.roofs.select { |r| r.interior_adjacent_to == space_type }
353
- avg_pitch = roofs.map { |r| r.pitch }.sum(0.0) / roofs.size
354
-
355
- if @apply_ashrae140_assumptions
356
- # Hardcode the attic volume to match ASHRAE 140 Table 7-2 specification
357
- volume = 3463
358
- else
359
- # Assume square hip roof for volume calculations; energy results are very insensitive to actual volume
360
- length = floor_area**0.5
361
- height = 0.5 * Math.sin(Math.atan(avg_pitch / 12.0)) * length
362
- volume = [floor_area * height / 3.0, 0.01].max
363
- end
364
-
365
- spaces[space_type].thermalZone.get.setVolume(UnitConversions.convert(volume, 'ft^3', 'm^3'))
366
- end
367
- end
368
-
369
- def self.explode_surfaces(runner, model)
370
- # Re-position surfaces so as to not shade each other and to make it easier to visualize the building.
371
-
372
- gap_distance = UnitConversions.convert(10.0, 'ft', 'm') # distance between surfaces of the same azimuth
373
- rad90 = UnitConversions.convert(90, 'deg', 'rad')
374
-
375
- # Determine surfaces to shift and distance with which to explode surfaces horizontally outward
376
- surfaces = []
377
- azimuth_lengths = {}
378
- model.getSurfaces.sort.each do |surface|
379
- next unless ['wall', 'roofceiling'].include? surface.surfaceType.downcase
380
- next unless ['outdoors', 'foundation', 'adiabatic'].include? surface.outsideBoundaryCondition.downcase
381
- next if surface.additionalProperties.getFeatureAsDouble('Tilt').get <= 0 # skip flat roofs
382
-
383
- surfaces << surface
384
- azimuth = surface.additionalProperties.getFeatureAsInteger('Azimuth').get
385
- if azimuth_lengths[azimuth].nil?
386
- azimuth_lengths[azimuth] = 0.0
387
- end
388
- azimuth_lengths[azimuth] += surface.additionalProperties.getFeatureAsDouble('Length').get + gap_distance
389
- end
390
- max_azimuth_length = azimuth_lengths.values.max
391
-
392
- # Using the max length for a given azimuth, calculate the apothem (radius of the incircle) of a regular
393
- # n-sided polygon to create the smallest polygon possible without self-shading. The number of polygon
394
- # sides is defined by the minimum difference between two azimuths.
395
- min_azimuth_diff = 360
396
- azimuths_sorted = azimuth_lengths.keys.sort
397
- azimuths_sorted.each_with_index do |az, idx|
398
- diff1 = (az - azimuths_sorted[(idx + 1) % azimuths_sorted.size]).abs
399
- diff2 = 360.0 - diff1 # opposite direction
400
- if diff1 < min_azimuth_diff
401
- min_azimuth_diff = diff1
402
- end
403
- if diff2 < min_azimuth_diff
404
- min_azimuth_diff = diff2
405
- end
406
- end
407
- if min_azimuth_diff > 0
408
- nsides = [(360.0 / min_azimuth_diff).ceil, 4].max # assume rectangle at the minimum
409
- else
410
- nsides = 4
411
- end
412
- explode_distance = max_azimuth_length / (2.0 * Math.tan(UnitConversions.convert(180.0 / nsides, 'deg', 'rad')))
413
-
414
- add_neighbors(runner, model, max_azimuth_length)
415
-
416
- # Initial distance of shifts at 90-degrees to horizontal outward
417
- azimuth_side_shifts = {}
418
- azimuth_lengths.keys.each do |azimuth|
419
- azimuth_side_shifts[azimuth] = max_azimuth_length / 2.0
420
- end
421
-
422
- # Explode neighbors
423
- model.getShadingSurfaceGroups.each do |shading_group|
424
- next unless shading_group.name.to_s == Constants.ObjectNameNeighbors
425
-
426
- shading_group.shadingSurfaces.each do |shading_surface|
427
- azimuth = shading_surface.additionalProperties.getFeatureAsInteger('Azimuth').get
428
- azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
429
- distance = shading_surface.additionalProperties.getFeatureAsDouble('Distance').get
430
-
431
- unless azimuth_lengths.keys.include? azimuth
432
- fail "A neighbor building has an azimuth (#{azimuth}) not equal to the azimuth of any wall."
433
- end
434
-
435
- # Push out horizontally
436
- distance += explode_distance
437
- transformation = get_surface_transformation(distance, Math::sin(azimuth_rad), Math::cos(azimuth_rad), 0)
438
-
439
- shading_surface.setVertices(transformation * shading_surface.vertices)
440
- end
441
- end
442
-
443
- # Explode walls, windows, doors, roofs, and skylights
444
- surfaces_moved = []
445
-
446
- surfaces.sort.each do |surface|
447
- next if surface.additionalProperties.getFeatureAsDouble('Tilt').get <= 0 # skip flat roofs
448
-
449
- if surface.adjacentSurface.is_initialized
450
- next if surfaces_moved.include? surface.adjacentSurface.get
451
- end
452
-
453
- azimuth = surface.additionalProperties.getFeatureAsInteger('Azimuth').get
454
- azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
455
-
456
- # Get associated shading surfaces (e.g., overhangs, interior shading surfaces)
457
- overhang_surfaces = []
458
- shading_surfaces = []
459
- surface.subSurfaces.each do |subsurface|
460
- next unless subsurface.subSurfaceType.downcase == 'fixedwindow'
461
-
462
- subsurface.shadingSurfaceGroups.each do |overhang_group|
463
- overhang_group.shadingSurfaces.each do |overhang|
464
- overhang_surfaces << overhang
465
- end
466
- end
467
- end
468
- model.getShadingSurfaceGroups.each do |shading_group|
469
- next unless [Constants.ObjectNameSkylightShade, Constants.ObjectNameWindowShade].include? shading_group.name.to_s
470
-
471
- shading_group.shadingSurfaces.each do |window_shade|
472
- next unless window_shade.additionalProperties.getFeatureAsString('ParentSurface').get == surface.name.to_s
473
-
474
- shading_surfaces << window_shade
475
- end
476
- end
477
-
478
- # Push out horizontally
479
- distance = explode_distance
480
-
481
- if surface.surfaceType.downcase == 'roofceiling'
482
- # Ensure pitched surfaces are positioned outward justified with walls, etc.
483
- tilt = surface.additionalProperties.getFeatureAsDouble('Tilt').get
484
- width = surface.additionalProperties.getFeatureAsDouble('Width').get
485
- distance -= 0.5 * Math.cos(Math.atan(tilt)) * width
486
- end
487
- transformation = get_surface_transformation(distance, Math::sin(azimuth_rad), Math::cos(azimuth_rad), 0)
488
- transformation_shade = get_surface_transformation(distance + 0.001, Math::sin(azimuth_rad), Math::cos(azimuth_rad), 0) # Offset slightly from window
489
-
490
- ([surface] + surface.subSurfaces + overhang_surfaces).each do |s|
491
- s.setVertices(transformation * s.vertices)
492
- end
493
- shading_surfaces.each do |s|
494
- s.setVertices(transformation_shade * s.vertices)
495
- end
496
- if surface.adjacentSurface.is_initialized
497
- surface.adjacentSurface.get.setVertices(transformation * surface.adjacentSurface.get.vertices)
498
- end
499
-
500
- # Shift at 90-degrees to previous transformation, so surfaces don't overlap and shade each other
501
- azimuth_side_shifts[azimuth] -= surface.additionalProperties.getFeatureAsDouble('Length').get / 2.0
502
- transformation_shift = get_surface_transformation(azimuth_side_shifts[azimuth], Math::sin(azimuth_rad + rad90), Math::cos(azimuth_rad + rad90), 0)
503
-
504
- ([surface] + surface.subSurfaces + overhang_surfaces + shading_surfaces).each do |s|
505
- s.setVertices(transformation_shift * s.vertices)
506
- end
507
- if surface.adjacentSurface.is_initialized
508
- surface.adjacentSurface.get.setVertices(transformation_shift * surface.adjacentSurface.get.vertices)
509
- end
510
-
511
- azimuth_side_shifts[azimuth] -= (surface.additionalProperties.getFeatureAsDouble('Length').get / 2.0 + gap_distance)
512
-
513
- surfaces_moved << surface
514
- end
335
+ SimControls.apply(model, @hpxml)
515
336
  end
516
337
 
517
338
  def self.update_conditioned_basement(runner, model, spaces)
518
339
  return if @cond_bsmnt_surfaces.empty?
340
+
519
341
  # Update @cond_bsmnt_surfaces to include subsurfaces
520
342
  new_cond_bsmnt_surfaces = @cond_bsmnt_surfaces.dup
521
343
  @cond_bsmnt_surfaces.each do |cond_bsmnt_surface|
522
344
  next if cond_bsmnt_surface.is_a? OpenStudio::Model::InternalMassDefinition
523
345
  next if cond_bsmnt_surface.subSurfaces.empty?
346
+
524
347
  cond_bsmnt_surface.subSurfaces.each do |ss|
525
348
  new_cond_bsmnt_surfaces << ss
526
349
  end
@@ -538,6 +361,7 @@ class OSModel
538
361
  @cond_bsmnt_surfaces.each do |cond_bsmnt_surface|
539
362
  # skip windows because windows don't have such property to change.
540
363
  next if cond_bsmnt_surface.is_a?(OpenStudio::Model::SubSurface) && (cond_bsmnt_surface.subSurfaceType.downcase == 'fixedwindow')
364
+
541
365
  adj_surface = nil
542
366
  if not cond_bsmnt_surface.is_a? OpenStudio::Model::InternalMassDefinition
543
367
  if not cond_bsmnt_surface.is_a? OpenStudio::Model::SubSurface
@@ -576,6 +400,7 @@ class OSModel
576
400
  innermost_material.setSolarAbsorptance(0.0)
577
401
  innermost_material.setVisibleAbsorptance(0.0)
578
402
  next if adj_surface.nil?
403
+
579
404
  # Create new construction in case of shared construciton.
580
405
  layered_const_adj = OpenStudio::Model::Construction.new(model)
581
406
  layered_const_adj.setName(cond_bsmnt_surface.construction.get.name.get + ' Reversed Bsmnt')
@@ -717,163 +542,26 @@ class OSModel
717
542
  return vf_map
718
543
  end
719
544
 
720
- # FUTURE: Move this method and many below to geometry.rb
721
- def self.create_space_and_zone(model, spaces, space_type)
722
- if not spaces.keys.include? space_type
723
- thermal_zone = OpenStudio::Model::ThermalZone.new(model)
724
- thermal_zone.setName(space_type)
725
-
726
- space = OpenStudio::Model::Space.new(model)
727
- space.setName(space_type)
728
-
729
- st = OpenStudio::Model::SpaceType.new(model)
730
- st.setStandardsSpaceType(space_type)
731
- space.setSpaceType(st)
732
-
733
- space.setThermalZone(thermal_zone)
734
- spaces[space_type] = space
735
- end
736
- end
737
-
738
- def self.get_surface_transformation(offset, x, y, z)
739
- x = UnitConversions.convert(x, 'ft', 'm')
740
- y = UnitConversions.convert(y, 'ft', 'm')
741
- z = UnitConversions.convert(z, 'ft', 'm')
742
-
743
- m = OpenStudio::Matrix.new(4, 4, 0)
744
- m[0, 0] = 1
745
- m[1, 1] = 1
746
- m[2, 2] = 1
747
- m[3, 3] = 1
748
- m[0, 3] = x * offset
749
- m[1, 3] = y * offset
750
- m[2, 3] = z.abs * offset
751
-
752
- return OpenStudio::Transformation.new(m)
753
- end
754
-
755
- def self.add_floor_polygon(x, y, z)
756
- x = UnitConversions.convert(x, 'ft', 'm')
757
- y = UnitConversions.convert(y, 'ft', 'm')
758
- z = UnitConversions.convert(z, 'ft', 'm')
759
-
760
- vertices = OpenStudio::Point3dVector.new
761
- vertices << OpenStudio::Point3d.new(0 - x / 2, 0 - y / 2, z)
762
- vertices << OpenStudio::Point3d.new(0 - x / 2, y / 2, z)
763
- vertices << OpenStudio::Point3d.new(x / 2, y / 2, z)
764
- vertices << OpenStudio::Point3d.new(x / 2, 0 - y / 2, z)
765
-
766
- # Rotate about the z axis
767
- # This is not strictly needed, but will make the floor edges
768
- # parallel to the walls for a better geometry rendering.
769
- azimuth_rad = UnitConversions.convert(@default_azimuths[0], 'deg', 'rad')
770
- m = OpenStudio::Matrix.new(4, 4, 0)
771
- m[0, 0] = Math::cos(-azimuth_rad)
772
- m[1, 1] = Math::cos(-azimuth_rad)
773
- m[0, 1] = -Math::sin(-azimuth_rad)
774
- m[1, 0] = Math::sin(-azimuth_rad)
775
- m[2, 2] = 1
776
- m[3, 3] = 1
777
- transformation = OpenStudio::Transformation.new(m)
778
-
779
- return transformation * vertices
780
- end
781
-
782
- def self.add_wall_polygon(x, y, z, azimuth, offsets = [0] * 4, subsurface_area = 0)
783
- x = UnitConversions.convert(x, 'ft', 'm')
784
- y = UnitConversions.convert(y, 'ft', 'm')
785
- z = UnitConversions.convert(z, 'ft', 'm')
786
-
787
- vertices = OpenStudio::Point3dVector.new
788
- vertices << OpenStudio::Point3d.new(0 - (x / 2) - offsets[1], 0, z - offsets[0])
789
- vertices << OpenStudio::Point3d.new(0 - (x / 2) - offsets[1], 0, z + y + offsets[2])
790
- if subsurface_area > 0
791
- subsurface_area = UnitConversions.convert(subsurface_area, 'ft^2', 'm^2')
792
- sub_length = x / 10.0
793
- sub_height = subsurface_area / sub_length
794
- if sub_height >= y
795
- sub_height = y - 0.1
796
- sub_length = subsurface_area / sub_height
797
- end
798
- vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3] - sub_length, 0, z + y + offsets[2])
799
- vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3] - sub_length, 0, z + y + offsets[2] - sub_height)
800
- vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3], 0, z + y + offsets[2] - sub_height)
801
- else
802
- vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3], 0, z + y + offsets[2])
803
- end
804
- vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3], 0, z - offsets[0])
805
-
806
- # Rotate about the z axis
807
- azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
808
- m = OpenStudio::Matrix.new(4, 4, 0)
809
- m[0, 0] = Math::cos(-azimuth_rad)
810
- m[1, 1] = Math::cos(-azimuth_rad)
811
- m[0, 1] = -Math::sin(-azimuth_rad)
812
- m[1, 0] = Math::sin(-azimuth_rad)
813
- m[2, 2] = 1
814
- m[3, 3] = 1
815
- transformation = OpenStudio::Transformation.new(m)
816
-
817
- return transformation * vertices
818
- end
819
-
820
- def self.add_roof_polygon(x, y, z, azimuth, tilt)
821
- x = UnitConversions.convert(x, 'ft', 'm')
822
- y = UnitConversions.convert(y, 'ft', 'm')
823
- z = UnitConversions.convert(z, 'ft', 'm')
824
-
825
- vertices = OpenStudio::Point3dVector.new
826
- vertices << OpenStudio::Point3d.new(x / 2, -y / 2, 0)
827
- vertices << OpenStudio::Point3d.new(x / 2, y / 2, 0)
828
- vertices << OpenStudio::Point3d.new(-x / 2, y / 2, 0)
829
- vertices << OpenStudio::Point3d.new(-x / 2, -y / 2, 0)
830
-
831
- # Rotate about the x axis
832
- m = OpenStudio::Matrix.new(4, 4, 0)
833
- m[0, 0] = 1
834
- m[1, 1] = Math::cos(Math::atan(tilt))
835
- m[1, 2] = -Math::sin(Math::atan(tilt))
836
- m[2, 1] = Math::sin(Math::atan(tilt))
837
- m[2, 2] = Math::cos(Math::atan(tilt))
838
- m[3, 3] = 1
839
- transformation = OpenStudio::Transformation.new(m)
840
- vertices = transformation * vertices
841
-
842
- # Rotate about the z axis
843
- azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
844
- rad180 = UnitConversions.convert(180, 'deg', 'rad')
845
- m = OpenStudio::Matrix.new(4, 4, 0)
846
- m[0, 0] = Math::cos(rad180 - azimuth_rad)
847
- m[1, 1] = Math::cos(rad180 - azimuth_rad)
848
- m[0, 1] = -Math::sin(rad180 - azimuth_rad)
849
- m[1, 0] = Math::sin(rad180 - azimuth_rad)
850
- m[2, 2] = 1
851
- m[3, 3] = 1
852
- transformation = OpenStudio::Transformation.new(m)
853
- vertices = transformation * vertices
854
-
855
- # Shift up by z
856
- new_vertices = OpenStudio::Point3dVector.new
857
- vertices.each do |vertex|
858
- new_vertices << OpenStudio::Point3d.new(vertex.x, vertex.y, vertex.z + z)
859
- end
860
-
861
- return new_vertices
862
- end
863
-
864
- def self.add_ceiling_polygon(x, y, z)
865
- return OpenStudio::reverse(add_floor_polygon(x, y, z))
866
- end
867
-
868
545
  def self.add_num_occupants(model, runner, spaces)
869
546
  # Occupants
870
547
  num_occ = @hpxml.building_occupancy.number_of_residents
871
548
  return if num_occ <= 0
872
549
 
873
- Geometry.process_occupants(model, num_occ, @cfa, spaces[HPXML::LocationLivingSpace], @schedules_file)
550
+ Geometry.apply_occupants(model, num_occ, @cfa, spaces[HPXML::LocationLivingSpace], @schedules_file)
874
551
  end
875
552
 
876
553
  def self.get_default_azimuths()
554
+ def self.sanitize_azimuth(azimuth)
555
+ # Ensure 0 <= orientation < 360
556
+ while azimuth < 0
557
+ azimuth += 360
558
+ end
559
+ while azimuth >= 360
560
+ azimuth -= 360
561
+ end
562
+ return azimuth
563
+ end
564
+
877
565
  # Returns a list of four azimuths (facing each direction). Determined based
878
566
  # on the primary azimuth, as defined by the azimuth with the largest surface
879
567
  # area, plus azimuths that are offset by 90/180/270 degrees. Used for
@@ -898,20 +586,9 @@ class OSModel
898
586
  sanitize_azimuth(primary_azimuth + 270)].sort
899
587
  end
900
588
 
901
- def self.sanitize_azimuth(azimuth)
902
- # Ensure 0 <= orientation < 360
903
- while azimuth < 0
904
- azimuth += 360
905
- end
906
- while azimuth >= 360
907
- azimuth -= 360
908
- end
909
- return azimuth
910
- end
911
-
912
589
  def self.create_or_get_space(model, spaces, spacetype)
913
590
  if spaces[spacetype].nil?
914
- create_space_and_zone(model, spaces, spacetype)
591
+ Geometry.create_space_and_zone(model, spaces, spacetype)
915
592
  end
916
593
  return spaces[spacetype]
917
594
  end
@@ -938,7 +615,8 @@ class OSModel
938
615
  tilt = roof.pitch / 12.0
939
616
  z_origin = @walls_top + 0.5 * Math.sin(Math.atan(tilt)) * width
940
617
 
941
- surface = OpenStudio::Model::Surface.new(add_roof_polygon(length, width, z_origin, azimuth, tilt), model)
618
+ vertices = Geometry.create_roof_vertices(length, width, z_origin, azimuth, tilt)
619
+ surface = OpenStudio::Model::Surface.new(vertices, model)
942
620
  surfaces << surface
943
621
  surface.additionalProperties.setFeature('Length', length)
944
622
  surface.additionalProperties.setFeature('Width', width)
@@ -1040,7 +718,8 @@ class OSModel
1040
718
  length = (wall.net_area / height) / azimuths.size
1041
719
  z_origin = @foundation_top
1042
720
 
1043
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(length, height, z_origin, azimuth), model)
721
+ vertices = Geometry.create_wall_vertices(length, height, z_origin, azimuth)
722
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1044
723
  surfaces << surface
1045
724
  surface.additionalProperties.setFeature('Length', length)
1046
725
  surface.additionalProperties.setFeature('Azimuth', azimuth)
@@ -1108,7 +787,8 @@ class OSModel
1108
787
  length = (rim_joist.area / height) / azimuths.size
1109
788
  z_origin = @foundation_top
1110
789
 
1111
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(length, height, z_origin, azimuth), model)
790
+ vertices = Geometry.create_wall_vertices(length, height, z_origin, azimuth)
791
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1112
792
  surfaces << surface
1113
793
  surface.additionalProperties.setFeature('Length', length)
1114
794
  surface.additionalProperties.setFeature('Azimuth', azimuth)
@@ -1176,10 +856,12 @@ class OSModel
1176
856
  end
1177
857
 
1178
858
  if frame_floor.is_ceiling
1179
- surface = OpenStudio::Model::Surface.new(add_ceiling_polygon(length, width, z_origin), model)
859
+ vertices = Geometry.create_ceiling_vertices(length, width, z_origin, @default_azimuths)
860
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1180
861
  surface.additionalProperties.setFeature('SurfaceType', 'Ceiling')
1181
862
  else
1182
- surface = OpenStudio::Model::Surface.new(add_floor_polygon(length, width, z_origin), model)
863
+ vertices = Geometry.create_floor_vertices(length, width, z_origin, @default_azimuths)
864
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1183
865
  surface.additionalProperties.setFeature('SurfaceType', 'Floor')
1184
866
  end
1185
867
  surface.additionalProperties.setFeature('Tilt', 0.0)
@@ -1371,7 +1053,8 @@ class OSModel
1371
1053
  azimuth = foundation_wall.azimuth
1372
1054
  end
1373
1055
 
1374
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(length, ag_height, z_origin, azimuth), model)
1056
+ vertices = Geometry.create_wall_vertices(length, ag_height, z_origin, azimuth)
1057
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1375
1058
  surface.additionalProperties.setFeature('Length', length)
1376
1059
  surface.additionalProperties.setFeature('Azimuth', azimuth)
1377
1060
  surface.additionalProperties.setFeature('Tilt', 90.0)
@@ -1436,7 +1119,8 @@ class OSModel
1436
1119
  subsurface_area = 0
1437
1120
  end
1438
1121
 
1439
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(length, height, z_origin, azimuth, [0] * 4, subsurface_area), model)
1122
+ vertices = Geometry.create_wall_vertices(length, height, z_origin, azimuth, subsurface_area: subsurface_area)
1123
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1440
1124
  surface.additionalProperties.setFeature('Length', length)
1441
1125
  surface.additionalProperties.setFeature('Azimuth', azimuth)
1442
1126
  surface.additionalProperties.setFeature('Tilt', 90.0)
@@ -1505,7 +1189,8 @@ class OSModel
1505
1189
  slab_length = slab_tot_perim / 4.0 + Math.sqrt(sqrt_term) / 4.0
1506
1190
  slab_width = slab_tot_perim / 4.0 - Math.sqrt(sqrt_term) / 4.0
1507
1191
 
1508
- surface = OpenStudio::Model::Surface.new(add_floor_polygon(slab_length, slab_width, z_origin), model)
1192
+ vertices = Geometry.create_floor_vertices(slab_length, slab_width, z_origin, @default_azimuths)
1193
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1509
1194
  surface.setName(slab.id)
1510
1195
  surface.setSurfaceType('Floor')
1511
1196
  surface.setOutsideBoundaryCondition('Foundation')
@@ -1580,7 +1265,8 @@ class OSModel
1580
1265
  z_origin = @foundation_top + 8.0 * (@ncfl_ag - 1)
1581
1266
 
1582
1267
  # Add floor surface
1583
- floor_surface = OpenStudio::Model::Surface.new(add_floor_polygon(-floor_width, -floor_length, z_origin), model)
1268
+ vertices = Geometry.create_floor_vertices(floor_length, floor_width, z_origin, @default_azimuths)
1269
+ floor_surface = OpenStudio::Model::Surface.new(vertices, model)
1584
1270
 
1585
1271
  floor_surface.setSunExposure('NoSun')
1586
1272
  floor_surface.setWindExposure('NoWind')
@@ -1592,7 +1278,8 @@ class OSModel
1592
1278
  floor_surface.additionalProperties.setFeature('Tilt', 0.0)
1593
1279
 
1594
1280
  # Add ceiling surface
1595
- ceiling_surface = OpenStudio::Model::Surface.new(add_ceiling_polygon(-floor_width, -floor_length, z_origin), model)
1281
+ vertices = Geometry.create_ceiling_vertices(floor_length, floor_width, z_origin, @default_azimuths)
1282
+ ceiling_surface = OpenStudio::Model::Surface.new(vertices, model)
1596
1283
 
1597
1284
  ceiling_surface.setSunExposure('NoSun')
1598
1285
  ceiling_surface.setWindExposure('NoWind')
@@ -1637,27 +1324,6 @@ class OSModel
1637
1324
  end
1638
1325
 
1639
1326
  def self.add_neighbors(runner, model, length)
1640
- z_origin = 0 # shading surface always starts at grade
1641
-
1642
- shading_surfaces = []
1643
- @hpxml.neighbor_buildings.each do |neighbor_building|
1644
- height = neighbor_building.height.nil? ? @walls_top : neighbor_building.height
1645
-
1646
- shading_surface = OpenStudio::Model::ShadingSurface.new(add_wall_polygon(length, height, z_origin, neighbor_building.azimuth), model)
1647
- shading_surface.additionalProperties.setFeature('Azimuth', neighbor_building.azimuth)
1648
- shading_surface.additionalProperties.setFeature('Distance', neighbor_building.distance)
1649
- shading_surface.setName("Neighbor azimuth #{neighbor_building.azimuth} distance #{neighbor_building.distance}")
1650
-
1651
- shading_surfaces << shading_surface
1652
- end
1653
-
1654
- unless shading_surfaces.empty?
1655
- shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
1656
- shading_surface_group.setName(Constants.ObjectNameNeighbors)
1657
- shading_surfaces.each do |shading_surface|
1658
- shading_surface.setShadingSurfaceGroup(shading_surface_group)
1659
- end
1660
- end
1661
1327
  end
1662
1328
 
1663
1329
  def self.add_shading_schedule(runner, model, weather)
@@ -1682,9 +1348,10 @@ class OSModel
1682
1348
 
1683
1349
  shading_group = nil
1684
1350
  shading_schedules = {}
1351
+ shading_ems = { sensors: {}, program: nil }
1685
1352
 
1686
1353
  surfaces = []
1687
- @hpxml.windows.each do |window|
1354
+ @hpxml.windows.each_with_index do |window, i|
1688
1355
  window_height = 4.0 # ft, default
1689
1356
 
1690
1357
  overhang_depth = nil
@@ -1695,16 +1362,16 @@ class OSModel
1695
1362
  window_height = overhang_distance_to_bottom - overhang_distance_to_top
1696
1363
  end
1697
1364
 
1698
- window_width = window.area / window_height
1365
+ window_length = window.area / window_height
1699
1366
  z_origin = @foundation_top
1700
1367
 
1701
1368
  if window.is_exterior
1702
1369
 
1703
1370
  # Create parent surface slightly bigger than window
1704
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(window_width, window_height, z_origin,
1705
- window.azimuth, [0, 0.001, 0.001, 0.001]), model)
1371
+ vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth, add_buffer: true)
1372
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1706
1373
 
1707
- surface.additionalProperties.setFeature('Length', window_width)
1374
+ surface.additionalProperties.setFeature('Length', window_length)
1708
1375
  surface.additionalProperties.setFeature('Azimuth', window.azimuth)
1709
1376
  surface.additionalProperties.setFeature('Tilt', 90.0)
1710
1377
  surface.additionalProperties.setFeature('SurfaceType', 'Window')
@@ -1712,8 +1379,8 @@ class OSModel
1712
1379
  surface.setSurfaceType('Wall')
1713
1380
  set_surface_interior(model, spaces, surface, window.wall)
1714
1381
 
1715
- sub_surface = OpenStudio::Model::SubSurface.new(add_wall_polygon(window_width, window_height, z_origin,
1716
- window.azimuth, [-0.001, 0, 0.001, 0]), model)
1382
+ vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth)
1383
+ sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
1717
1384
  sub_surface.setName(window.id)
1718
1385
  sub_surface.setSurface(surface)
1719
1386
  sub_surface.setSubSurfaceType('FixedWindow')
@@ -1730,18 +1397,19 @@ class OSModel
1730
1397
  Constructions.apply_window(runner, model, sub_surface, 'WindowConstruction', window.ufactor, window.shgc)
1731
1398
 
1732
1399
  # Apply interior/exterior shading (as needed)
1733
- shading_polygon = add_wall_polygon(window_width, window_height, z_origin, window.azimuth, [0, 0, 0, 0])
1734
- shading_group = apply_shading(model, window, shading_polygon, surface, sub_surface, shading_group, shading_schedules, Constants.ObjectNameWindowShade)
1400
+ shading_vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth)
1401
+ shading_group = Constructions.apply_window_skylight_shading(model, window, i, shading_vertices, surface, sub_surface, shading_group,
1402
+ shading_schedules, shading_ems, Constants.ObjectNameWindowShade, @cooling_season)
1735
1403
  else
1736
1404
  # Window is on an interior surface, which E+ does not allow. Model
1737
1405
  # as a door instead so that we can get the appropriate conduction
1738
1406
  # heat transfer; there is no solar gains anyway.
1739
1407
 
1740
1408
  # Create parent surface slightly bigger than window
1741
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(window_width, window_height, z_origin,
1742
- window.azimuth, [0, 0.001, 0.001, 0.001]), model)
1409
+ vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth, add_buffer: true)
1410
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1743
1411
 
1744
- surface.additionalProperties.setFeature('Length', window_width)
1412
+ surface.additionalProperties.setFeature('Length', window_length)
1745
1413
  surface.additionalProperties.setFeature('Azimuth', window.azimuth)
1746
1414
  surface.additionalProperties.setFeature('Tilt', 90.0)
1747
1415
  surface.additionalProperties.setFeature('SurfaceType', 'Door')
@@ -1749,8 +1417,8 @@ class OSModel
1749
1417
  surface.setSurfaceType('Wall')
1750
1418
  set_surface_interior(model, spaces, surface, window.wall)
1751
1419
 
1752
- sub_surface = OpenStudio::Model::SubSurface.new(add_wall_polygon(window_width, window_height, z_origin,
1753
- window.azimuth, [0, 0, 0, 0]), model)
1420
+ vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth)
1421
+ sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
1754
1422
  sub_surface.setName(window.id)
1755
1423
  sub_surface.setSurface(surface)
1756
1424
  sub_surface.setSubSurfaceType('Door')
@@ -1773,17 +1441,17 @@ class OSModel
1773
1441
 
1774
1442
  shading_group = nil
1775
1443
  shading_schedules = {}
1444
+ shading_ems = { sensors: {}, program: nil }
1776
1445
 
1777
- @hpxml.skylights.each do |skylight|
1446
+ @hpxml.skylights.each_with_index do |skylight, i|
1778
1447
  tilt = skylight.roof.pitch / 12.0
1779
1448
  width = Math::sqrt(skylight.area)
1780
1449
  length = skylight.area / width
1781
1450
  z_origin = @walls_top + 0.5 * Math.sin(Math.atan(tilt)) * width
1782
1451
 
1783
1452
  # Create parent surface slightly bigger than skylight
1784
- surface = OpenStudio::Model::Surface.new(add_roof_polygon(length + 0.001, width + 0.001, z_origin,
1785
- skylight.azimuth, tilt), model)
1786
-
1453
+ vertices = Geometry.create_roof_vertices(length, width, z_origin, skylight.azimuth, tilt, add_buffer: true)
1454
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1787
1455
  surface.additionalProperties.setFeature('Length', length)
1788
1456
  surface.additionalProperties.setFeature('Width', width)
1789
1457
  surface.additionalProperties.setFeature('Azimuth', skylight.azimuth)
@@ -1795,8 +1463,8 @@ class OSModel
1795
1463
  surface.setOutsideBoundaryCondition('Outdoors') # cannot be adiabatic because subsurfaces won't be created
1796
1464
  surfaces << surface
1797
1465
 
1798
- sub_surface = OpenStudio::Model::SubSurface.new(add_roof_polygon(length, width, z_origin,
1799
- skylight.azimuth, tilt), model)
1466
+ vertices = Geometry.create_roof_vertices(length, width, z_origin, skylight.azimuth, tilt)
1467
+ sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
1800
1468
  sub_surface.setName(skylight.id)
1801
1469
  sub_surface.setSurface(surface)
1802
1470
  sub_surface.setSubSurfaceType('Skylight')
@@ -1805,62 +1473,26 @@ class OSModel
1805
1473
  Constructions.apply_skylight(runner, model, sub_surface, 'SkylightConstruction', skylight.ufactor, skylight.shgc)
1806
1474
 
1807
1475
  # Apply interior/exterior shading (as needed)
1808
- shading_polygon = add_roof_polygon(length, width, z_origin, skylight.azimuth, tilt)
1809
- shading_group = apply_shading(model, skylight, shading_polygon, surface, sub_surface, shading_group, shading_schedules, Constants.ObjectNameSkylightShade)
1476
+ shading_vertices = Geometry.create_roof_vertices(length, width, z_origin, skylight.azimuth, tilt)
1477
+ shading_group = Constructions.apply_window_skylight_shading(model, skylight, i, shading_vertices, surface, sub_surface, shading_group,
1478
+ shading_schedules, shading_ems, Constants.ObjectNameSkylightShade, @cooling_season)
1810
1479
  end
1811
1480
 
1812
1481
  apply_adiabatic_construction(runner, model, surfaces, 'roof')
1813
1482
  end
1814
1483
 
1815
- def self.apply_shading(model, window_or_skylight, shading_polygon, parent_surface, sub_surface, shading_group, shading_schedules, name)
1816
- sf_summer = window_or_skylight.interior_shading_factor_summer * window_or_skylight.exterior_shading_factor_summer
1817
- sf_winter = window_or_skylight.interior_shading_factor_winter * window_or_skylight.exterior_shading_factor_winter
1818
- if (sf_summer < 1.0) || (sf_winter < 1.0)
1819
- # Apply shading
1820
- # We use a ShadingSurface instead of a Shade so that we perfectly get the result we want.
1821
- # The latter object is complex and it is essentially impossible to achieve the target reduction in transmitted
1822
- # solar (due to, e.g., re-reflectance, absorptance, angle modifiers, effects on convection, etc.).
1823
-
1824
- # Shading surface is used to reduce beam solar and sky diffuse solar
1825
- shading_surface = OpenStudio::Model::ShadingSurface.new(shading_polygon, model)
1826
- shading_surface.setName("#{window_or_skylight.id} shading surface")
1827
- shading_surface.additionalProperties.setFeature('Azimuth', window_or_skylight.azimuth)
1828
- shading_surface.additionalProperties.setFeature('ParentSurface', parent_surface.name.to_s)
1829
-
1830
- # Create transmittance schedule for heating/cooling seasons
1831
- trans_values = @cooling_season.map { |c| c == 1 ? sf_summer : sf_winter }
1832
- if shading_schedules[trans_values].nil?
1833
- trans_sch = MonthWeekdayWeekendSchedule.new(model, "trans schedule winter=#{sf_winter} summer=#{sf_summer}", Array.new(24, 1), Array.new(24, 1), trans_values, Constants.ScheduleTypeLimitsFraction, false)
1834
- shading_schedules[trans_values] = trans_sch
1835
- end
1836
- shading_surface.setTransmittanceSchedule(shading_schedules[trans_values].schedule)
1837
-
1838
- # Adjustment to default view factor is used to reduce ground diffuse solar
1839
- avg_trans_value = trans_values.sum(0.0) / 12.0 # FUTURE: Create EnergyPlus actuator to adjust this
1840
- default_vf_to_ground = ((1.0 - Math::cos(parent_surface.tilt)) / 2.0).round(2)
1841
- sub_surface.setViewFactortoGround(default_vf_to_ground * avg_trans_value)
1842
-
1843
- if shading_group.nil?
1844
- shading_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
1845
- shading_group.setName(name)
1846
- end
1847
- shading_surface.setShadingSurfaceGroup(shading_group)
1848
- end
1849
- return shading_group
1850
- end
1851
-
1852
1484
  def self.add_doors(runner, model, spaces)
1853
1485
  surfaces = []
1854
1486
  @hpxml.doors.each do |door|
1855
1487
  door_height = 6.67 # ft
1856
- door_width = door.area / door_height
1488
+ door_length = door.area / door_height
1857
1489
  z_origin = @foundation_top
1858
1490
 
1859
1491
  # Create parent surface slightly bigger than door
1860
- surface = OpenStudio::Model::Surface.new(add_wall_polygon(door_width, door_height, z_origin,
1861
- door.azimuth, [0, 0.001, 0.001, 0.001]), model)
1492
+ vertices = Geometry.create_wall_vertices(door_length, door_height, z_origin, door.azimuth, add_buffer: true)
1493
+ surface = OpenStudio::Model::Surface.new(vertices, model)
1862
1494
 
1863
- surface.additionalProperties.setFeature('Length', door_width)
1495
+ surface.additionalProperties.setFeature('Length', door_length)
1864
1496
  surface.additionalProperties.setFeature('Azimuth', door.azimuth)
1865
1497
  surface.additionalProperties.setFeature('Tilt', 90.0)
1866
1498
  surface.additionalProperties.setFeature('SurfaceType', 'Door')
@@ -1868,8 +1500,8 @@ class OSModel
1868
1500
  surface.setSurfaceType('Wall')
1869
1501
  set_surface_interior(model, spaces, surface, door.wall)
1870
1502
 
1871
- sub_surface = OpenStudio::Model::SubSurface.new(add_wall_polygon(door_width, door_height, z_origin,
1872
- door.azimuth, [0, 0, 0, 0]), model)
1503
+ vertices = Geometry.create_wall_vertices(door_length, door_height, z_origin, door.azimuth)
1504
+ sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
1873
1505
  sub_surface.setName(door.id)
1874
1506
  sub_surface.setSurface(surface)
1875
1507
  sub_surface.setSubSurfaceType('Door')
@@ -2458,31 +2090,71 @@ class OSModel
2458
2090
  return map_str.to_s
2459
2091
  end
2460
2092
 
2461
- def self.add_component_loads_output(runner, model, spaces)
2093
+ def self.add_loads_output(runner, model, spaces, add_component_loads)
2462
2094
  living_zone = spaces[HPXML::LocationLivingSpace].thermalZone.get
2463
2095
 
2464
- # Prevent certain objects (e.g., OtherEquipment) from being counted towards both, e.g., ducts and internal gains
2465
- objects_already_processed = []
2096
+ liv_load_sensors, intgain_dehumidifier = add_total_loads_output(runner, model, living_zone)
2097
+ return unless add_component_loads
2466
2098
 
2467
- # EMS Sensors: Global
2099
+ add_component_loads_output(runner, model, living_zone, liv_load_sensors, intgain_dehumidifier)
2100
+ end
2468
2101
 
2102
+ def self.add_total_loads_output(runner, model, living_zone)
2469
2103
  liv_load_sensors = {}
2470
-
2471
2104
  liv_load_sensors[:htg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Heating:EnergyTransfer:Zone:#{living_zone.name.to_s.upcase}")
2472
2105
  liv_load_sensors[:htg].setName('htg_load_liv')
2473
-
2474
2106
  liv_load_sensors[:clg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Cooling:EnergyTransfer:Zone:#{living_zone.name.to_s.upcase}")
2475
2107
  liv_load_sensors[:clg].setName('clg_load_liv')
2476
2108
 
2477
2109
  tot_load_sensors = {}
2478
-
2479
2110
  tot_load_sensors[:htg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Heating:EnergyTransfer')
2480
2111
  tot_load_sensors[:htg].setName('htg_load_tot')
2481
-
2482
2112
  tot_load_sensors[:clg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Cooling:EnergyTransfer')
2483
2113
  tot_load_sensors[:clg].setName('clg_load_tot')
2484
2114
 
2485
- load_adj_sensors = {} # Sensors used to adjust E+ EnergyTransfer meter, eg. dehumidifier as load in our program, but included in Heating:EnergyTransfer as HVAC equipment
2115
+ # Need to adjusted E+ EnergyTransfer meters for dehumidifiers
2116
+ intgain_dehumidifier = nil
2117
+ model.getZoneHVACDehumidifierDXs.each do |e|
2118
+ next unless e.thermalZone.get.name.to_s == living_zone.name.to_s
2119
+
2120
+ { 'Zone Dehumidifier Sensible Heating Energy' => 'ig_dehumidifier' }.each do |var, name|
2121
+ intgain_dehumidifier = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
2122
+ intgain_dehumidifier.setName(name)
2123
+ intgain_dehumidifier.setKeyName(e.name.to_s)
2124
+ end
2125
+ end
2126
+
2127
+ # EMS program
2128
+ program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
2129
+ program.setName(Constants.ObjectNameTotalLoadsProgram)
2130
+ program.addLine('Set loads_htg_tot = 0')
2131
+ program.addLine('Set loads_clg_tot = 0')
2132
+ program.addLine("If #{liv_load_sensors[:htg].name} > 0")
2133
+ s = " Set loads_htg_tot = #{tot_load_sensors[:htg].name} - #{tot_load_sensors[:clg].name}"
2134
+ if not intgain_dehumidifier.nil?
2135
+ s += " - #{intgain_dehumidifier.name}"
2136
+ end
2137
+ program.addLine(s)
2138
+ program.addLine("ElseIf #{liv_load_sensors[:clg].name} > 0")
2139
+ s = " Set loads_clg_tot = #{tot_load_sensors[:clg].name} - #{tot_load_sensors[:htg].name}"
2140
+ if not intgain_dehumidifier.nil?
2141
+ s += " + #{intgain_dehumidifier.name}"
2142
+ end
2143
+ program.addLine(s)
2144
+ program.addLine('EndIf')
2145
+
2146
+ # EMS calling manager
2147
+ program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
2148
+ program_calling_manager.setName("#{program.name} calling manager")
2149
+ program_calling_manager.setCallingPoint('EndOfZoneTimestepAfterZoneReporting')
2150
+ program_calling_manager.addProgram(program)
2151
+
2152
+ return liv_load_sensors, intgain_dehumidifier
2153
+ end
2154
+
2155
+ def self.add_component_loads_output(runner, model, living_zone, liv_load_sensors, intgain_dehumidifier)
2156
+ # Prevent certain objects (e.g., OtherEquipment) from being counted towards both, e.g., ducts and internal gains
2157
+ objects_already_processed = []
2486
2158
 
2487
2159
  # EMS Sensors: Surfaces, SubSurfaces, InternalMass
2488
2160
 
@@ -2672,27 +2344,7 @@ class OSModel
2672
2344
  ducts_mix_loss_sensor.setKeyName(living_zone.name.to_s)
2673
2345
  end
2674
2346
 
2675
- # Return duct losses
2676
- model.getOtherEquipments.sort.each do |o|
2677
- next if objects_already_processed.include? o
2678
-
2679
- is_duct_load = o.additionalProperties.getFeatureAsBoolean(Constants.IsDuctLoadForReport)
2680
- next unless is_duct_load.is_initialized
2681
-
2682
- objects_already_processed << o
2683
- next unless is_duct_load.get
2684
-
2685
- ducts_sensors << []
2686
- { 'Other Equipment Convective Heating Energy' => 'ducts_conv',
2687
- 'Other Equipment Radiant Heating Energy' => 'ducts_rad' }.each do |var, name|
2688
- ducts_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
2689
- ducts_sensor.setName(name)
2690
- ducts_sensor.setKeyName(o.name.to_s)
2691
- ducts_sensors[-1] << ducts_sensor
2692
- end
2693
- end
2694
-
2695
- # Supply duct losses
2347
+ # Duct losses
2696
2348
  model.getOtherEquipments.sort.each do |o|
2697
2349
  next if objects_already_processed.include? o
2698
2350
 
@@ -2730,20 +2382,6 @@ class OSModel
2730
2382
  end
2731
2383
  end
2732
2384
 
2733
- model.getGasEquipments.sort.each do |o|
2734
- next unless o.space.get.thermalZone.get.name.to_s == living_zone.name.to_s
2735
- next if objects_already_processed.include? o
2736
-
2737
- intgains_sensors << []
2738
- { 'Gas Equipment Convective Heating Energy' => 'ig_ge_conv',
2739
- 'Gas Equipment Radiant Heating Energy' => 'ig_ge_rad' }.each do |var, name|
2740
- intgains_gas_equip_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
2741
- intgains_gas_equip_sensor.setName(name)
2742
- intgains_gas_equip_sensor.setKeyName(o.name.to_s)
2743
- intgains_sensors[-1] << intgains_gas_equip_sensor
2744
- end
2745
- end
2746
-
2747
2385
  model.getOtherEquipments.sort.each do |o|
2748
2386
  next unless o.space.get.thermalZone.get.name.to_s == living_zone.name.to_s
2749
2387
  next if objects_already_processed.include? o
@@ -2785,17 +2423,8 @@ class OSModel
2785
2423
  end
2786
2424
  end
2787
2425
 
2788
- model.getZoneHVACDehumidifierDXs.each do |e|
2789
- next unless e.thermalZone.get.name.to_s == living_zone.name.to_s
2790
-
2791
- intgains_sensors << []
2792
- { 'Zone Dehumidifier Sensible Heating Energy' => 'ig_dehumidifier' }.each do |var, name|
2793
- intgain_dehumidifier = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
2794
- intgain_dehumidifier.setName(name)
2795
- intgain_dehumidifier.setKeyName(e.name.to_s)
2796
- load_adj_sensors[:dehumidifier] = intgain_dehumidifier
2797
- intgains_sensors[-1] << intgain_dehumidifier
2798
- end
2426
+ if not intgain_dehumidifier.nil?
2427
+ intgains_sensors[-1] << intgain_dehumidifier
2799
2428
  end
2800
2429
 
2801
2430
  intgains_dhw_sensors = {}
@@ -2917,27 +2546,6 @@ class OSModel
2917
2546
  end
2918
2547
  end
2919
2548
 
2920
- # EMS program: Total loads
2921
- program.addLine('Set loads_htg_tot = 0')
2922
- program.addLine('Set loads_clg_tot = 0')
2923
- program.addLine("If #{liv_load_sensors[:htg].name} > 0")
2924
- s = " Set loads_htg_tot = #{tot_load_sensors[:htg].name} - #{tot_load_sensors[:clg].name}"
2925
- load_adj_sensors.each do |key, adj_sensor|
2926
- if ['dehumidifier'].include? key.to_s
2927
- s += " - #{adj_sensor.name}"
2928
- end
2929
- end
2930
- program.addLine(s)
2931
- program.addLine("ElseIf #{liv_load_sensors[:clg].name} > 0")
2932
- s = " Set loads_clg_tot = #{tot_load_sensors[:clg].name} - #{tot_load_sensors[:htg].name}"
2933
- load_adj_sensors.each do |key, adj_sensor|
2934
- if ['dehumidifier'].include? key.to_s
2935
- s += " + #{adj_sensor.name}"
2936
- end
2937
- end
2938
- program.addLine(s)
2939
- program.addLine('EndIf')
2940
-
2941
2549
  # EMS calling manager
2942
2550
  program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
2943
2551
  program_calling_manager.setName("#{program.name} calling manager")