urbanopt-cli 0.4.1 → 0.5.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 (691) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/CMakeLists.txt +9 -9
  4. data/Gemfile +10 -12
  5. data/README.md +1 -0
  6. data/example_files/Gemfile +26 -10
  7. data/example_files/mappers/Baseline.rb +9 -0
  8. data/example_files/mappers/CreateBar.rb +2 -0
  9. data/example_files/mappers/Floorspace.rb +12 -10
  10. data/example_files/mappers/floorspace_workflow.osw +9 -0
  11. data/example_files/residential/clothes_washer.tsv +1 -1
  12. data/example_files/residential/water_heater.tsv +1 -1
  13. data/example_files/resources/hpxml-measures/.circleci/config.yml +20 -0
  14. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +13 -0
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +583 -334
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +687 -586
  17. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +21 -22
  18. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +34 -24
  19. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +14 -1
  20. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +33 -35
  21. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +33 -35
  22. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +34 -36
  23. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +361 -0
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +33 -35
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +33 -35
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +33 -35
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +33 -35
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +33 -35
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +33 -35
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +33 -35
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +33 -35
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +33 -35
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +33 -35
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +33 -35
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +47 -48
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +47 -48
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → base-bldgtype-multifamily-shared-pv.osw} +49 -50
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +365 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → base-bldgtype-multifamily.osw} +43 -44
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +36 -38
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +33 -34
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +33 -34
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +33 -35
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +33 -34
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +33 -34
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +33 -34
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +33 -34
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +33 -35
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +33 -35
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +33 -35
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +33 -34
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +33 -35
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +33 -35
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +33 -35
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +33 -35
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +33 -35
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +33 -35
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +33 -35
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +33 -35
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +33 -35
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +33 -35
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +33 -35
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +33 -35
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +33 -35
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +33 -35
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +362 -0
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +33 -35
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +362 -0
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +33 -35
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +33 -35
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +362 -0
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +33 -35
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +33 -35
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +33 -35
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +33 -35
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +33 -35
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +33 -36
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +361 -0
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +33 -35
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +361 -0
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +33 -35
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +33 -35
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +33 -35
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +33 -35
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +33 -35
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +33 -35
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +33 -35
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +33 -35
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +33 -35
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +33 -35
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +33 -35
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +33 -35
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +33 -35
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +33 -35
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +33 -35
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +33 -35
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +33 -35
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +33 -35
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +33 -35
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +33 -35
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +33 -35
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +33 -35
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +33 -35
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +33 -35
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +33 -35
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +33 -35
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +34 -35
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +33 -35
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +33 -35
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +33 -35
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +33 -35
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +33 -34
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +33 -34
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +33 -35
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +33 -35
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +33 -35
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +34 -35
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +33 -35
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +33 -35
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +35 -35
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +34 -35
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +34 -35
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +33 -35
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +33 -35
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +34 -35
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +33 -35
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +33 -35
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +33 -35
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +33 -35
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +34 -35
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +34 -35
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +34 -35
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +34 -35
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +33 -35
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +33 -35
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +33 -35
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +33 -35
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +34 -35
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +33 -35
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +33 -35
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +33 -35
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +33 -35
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +35 -37
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +34 -35
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +34 -35
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +34 -35
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +34 -35
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +34 -35
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +34 -35
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +33 -35
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +34 -35
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +33 -35
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +33 -35
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +33 -35
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +34 -35
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +34 -35
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +33 -35
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +34 -35
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +34 -36
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +33 -35
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +33 -35
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +33 -35
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +33 -35
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +33 -35
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +33 -35
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +33 -35
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +33 -35
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +33 -35
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +33 -35
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +33 -35
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +33 -35
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +33 -35
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +33 -35
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +33 -35
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +33 -35
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +33 -35
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +36 -38
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +39 -41
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +39 -41
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +33 -35
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -32
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +29 -31
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +33 -35
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +33 -35
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +33 -35
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +33 -35
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +33 -35
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +33 -35
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +33 -35
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +33 -35
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +19 -8
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +33 -35
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +33 -35
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +33 -35
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +369 -0
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-plug-loads-additional-multipliers.osw +361 -0
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +33 -35
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-schedules-random-seed.osw} +47 -50
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace.osw +33 -35
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater.osw +33 -35
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +33 -35
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-vacancy-6-months.osw +33 -35
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +33 -35
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +33 -35
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +33 -35
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +33 -35
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +33 -35
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +33 -35
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +41 -42
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +41 -42
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +40 -41
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +31 -33
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-plug-loads.osw} +35 -37
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +33 -35
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +33 -35
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +33 -35
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +33 -35
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +35 -37
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +35 -37
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +33 -35
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +33 -35
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +33 -35
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +33 -35
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +33 -35
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -38
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -35
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +33 -35
  228. data/example_files/resources/hpxml-measures/Gemfile +0 -2
  229. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +141 -129
  230. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +183 -153
  231. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +4 -4
  232. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +247 -121
  233. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +0 -10
  234. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +434 -0
  235. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +28 -35
  236. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -12
  237. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +60 -53
  238. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +11 -15
  239. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +81 -0
  240. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +3 -1
  241. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +21 -12
  242. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1150 -1072
  243. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +799 -389
  244. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +227 -351
  245. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +122 -89
  246. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +1 -1
  247. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +2 -3
  248. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +0 -6
  249. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +8 -13
  250. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +23 -21
  251. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +8 -7
  252. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +2 -2
  253. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
  254. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
  255. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +103 -72
  256. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +110 -37
  257. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +16 -7
  258. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +109 -0
  259. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1747 -838
  260. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +99 -0
  261. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +5 -16
  262. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +23 -25
  263. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -0
  264. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +1 -1
  265. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +10 -10
  266. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +1 -1
  267. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
  268. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +10 -10
  269. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +77 -60
  270. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +186 -34
  271. data/example_files/resources/hpxml-measures/README.md +1 -0
  272. data/example_files/resources/hpxml-measures/Rakefile +2 -9
  273. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +278 -254
  274. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +32 -5
  275. data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
  276. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +73 -137
  277. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
  278. data/example_files/resources/hpxml-measures/docs/source/conf.py +7 -4
  279. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +4 -4
  280. data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
  281. data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -5
  282. data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
  283. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2340 -0
  284. data/example_files/resources/hpxml-measures/docs/source/{simulation_output_report.rst → workflow_outputs.rst} +18 -16
  285. data/example_files/resources/hpxml-measures/tasks.rb +1154 -669
  286. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +64 -20
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +557 -559
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +523 -524
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +3 -4
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +524 -0
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +523 -524
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +557 -559
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +563 -565
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +511 -513
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +557 -559
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +557 -559
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +557 -559
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +564 -566
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +632 -634
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +530 -532
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +516 -518
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +561 -563
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +564 -566
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-multifamily-buffer-space.xml → base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml} +30 -59
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +553 -0
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-non-freezing-space.xml → base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml} +30 -59
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +30 -59
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +30 -59
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +426 -0
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +429 -0
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +469 -0
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +464 -0
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +409 -0
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +408 -0
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +411 -0
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +445 -0
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +408 -0
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +410 -0
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +445 -0
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +440 -0
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +459 -0
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +465 -0
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +35 -410
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +488 -0
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +472 -0
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +464 -0
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +457 -0
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +450 -0
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +447 -0
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +606 -0
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +517 -519
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +517 -519
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +549 -551
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -566
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +562 -564
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +550 -549
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +549 -551
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +552 -551
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +566 -568
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +518 -520
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +518 -520
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +519 -521
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +526 -528
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +518 -520
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +566 -568
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +567 -569
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +565 -567
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +523 -525
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +561 -563
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +576 -578
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +495 -497
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +564 -566
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +564 -566
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +564 -566
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +564 -566
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +564 -566
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +576 -578
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +576 -578
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +576 -578
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +569 -571
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +576 -578
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +576 -578
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +562 -564
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-window-interior-shading.xml → base-dhw-tank-elec-uef.xml} +8 -9
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +562 -564
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +564 -0
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +562 -564
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +560 -562
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-dhw-tank-heat-pump-uef.xml} +6 -13
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +568 -570
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +575 -577
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +560 -562
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +562 -564
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +562 -564
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +560 -562
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +560 -0
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +559 -561
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +560 -0
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +567 -569
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +574 -576
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +559 -561
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +559 -561
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +660 -664
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +574 -576
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +561 -563
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +561 -563
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +561 -563
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +561 -563
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +635 -639
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +561 -563
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +561 -563
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +561 -563
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +564 -566
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +560 -562
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +576 -578
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +589 -591
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +589 -591
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +516 -0
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2473 -2493
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +753 -755
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-interior-shading.xml +561 -563
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +503 -505
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +497 -497
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +723 -729
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +561 -563
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +561 -563
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +684 -688
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +515 -517
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +608 -610
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +557 -559
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +572 -574
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +572 -574
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +572 -574
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +575 -577
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +626 -628
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +563 -562
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +560 -562
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +560 -562
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +519 -521
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +519 -521
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +520 -522
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +519 -521
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +519 -521
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +519 -521
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +550 -549
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +547 -549
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +547 -549
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +580 -576
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +533 -535
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +564 -563
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +564 -563
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +561 -563
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +561 -563
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +563 -562
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +561 -563
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +510 -512
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +553 -555
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +526 -528
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +506 -505
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +513 -513
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +513 -513
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -0
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +561 -563
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +547 -549
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +561 -563
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +561 -563
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +550 -550
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +559 -561
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +547 -549
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +547 -549
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +547 -549
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +577 -579
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -564
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +498 -500
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +549 -548
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +512 -511
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +556 -555
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +562 -561
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +562 -561
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +519 -518
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +913 -912
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +834 -837
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +487 -489
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +566 -0
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +569 -571
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +509 -511
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +509 -511
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +561 -563
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +513 -513
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +513 -513
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +564 -566
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +561 -563
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +513 -513
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +572 -574
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +584 -586
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +487 -489
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +561 -563
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +561 -563
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +515 -517
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +561 -563
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +515 -517
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +573 -575
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +589 -591
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +546 -548
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +539 -541
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +574 -576
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +575 -577
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +575 -577
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +573 -575
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +573 -575
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +574 -576
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +574 -576
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +793 -795
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +573 -575
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +571 -573
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +476 -495
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +578 -0
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +753 -833
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +740 -820
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +549 -559
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +574 -576
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shelter-coefficient.xml +564 -566
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +723 -725
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +2 -4
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +2 -4
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +2 -4
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +562 -564
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +568 -570
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +564 -566
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +565 -567
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +561 -563
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +561 -563
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-autosize.xml +559 -561
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml +562 -561
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml +559 -558
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml +556 -558
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml +559 -561
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml +556 -558
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml +518 -520
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml +569 -571
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml +519 -521
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml +549 -548
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml +546 -548
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml +546 -548
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml +575 -571
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml +560 -559
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml +559 -558
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml +509 -511
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml +552 -554
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml +512 -512
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml +546 -548
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml +559 -561
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml +559 -561
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml +549 -549
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml +557 -559
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml +562 -564
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml +559 -561
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml +548 -547
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml +561 -560
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml +558 -557
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml +553 -552
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml +558 -557
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-room-ac-only-autosize.xml +508 -510
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-stove-oil-only-autosize.xml +512 -512
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml +512 -512
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +533 -535
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +561 -563
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +561 -563
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +561 -563
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +576 -578
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +3 -5
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +563 -0
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +561 -563
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +561 -563
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +561 -563
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +561 -563
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +545 -547
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +542 -544
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +545 -545
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +562 -0
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +612 -616
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +625 -629
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +609 -611
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +549 -551
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +471 -473
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +534 -534
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +561 -560
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +562 -561
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +913 -912
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +913 -912
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +532 -534
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +547 -549
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +547 -549
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +913 -912
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{invalid-calendar-year.xml → hvac-inconsistent-fan-powers.xml} +8 -5
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +569 -571
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +562 -0
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +562 -0
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +562 -0
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +568 -567
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +561 -563
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +561 -563
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +465 -0
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +643 -0
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +564 -0
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +574 -576
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +552 -551
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +518 -520
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +563 -565
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +562 -0
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +561 -563
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +576 -578
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +561 -563
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +909 -908
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +559 -561
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +561 -563
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +561 -563
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +564 -566
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +561 -563
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +589 -591
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +561 -563
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +562 -0
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +545 -547
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +561 -563
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +567 -569
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +567 -569
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +565 -564
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +527 -529
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/slab-zero-exposed-perimeter.xml +561 -563
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +532 -534
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +567 -566
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +532 -534
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +574 -576
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +561 -563
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +561 -563
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +464 -827
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +464 -827
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +589 -591
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +576 -578
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +561 -563
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +561 -563
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +561 -563
  631. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -14
  632. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -14
  633. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -14
  634. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -14
  635. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -14
  636. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -14
  637. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -14
  638. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -14
  639. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -14
  640. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -14
  641. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -14
  642. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -14
  643. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -14
  644. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -14
  645. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -14
  646. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -14
  647. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -14
  648. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -14
  649. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -14
  650. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -14
  651. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -14
  652. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -14
  653. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -16
  654. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -16
  655. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -16
  656. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -16
  657. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +277 -224
  658. data/lib/uo_cli/version.rb +1 -1
  659. data/scripts/setup-env-gitbash.sh +4 -4
  660. data/scripts/setup-env.bat +14 -11
  661. data/scripts/setup-env.ps1 +13 -10
  662. data/uo_cli.gemspec +6 -4
  663. metadata +106 -57
  664. data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/appliances-location-unconditioned-space.xml +0 -564
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
@@ -40,57 +40,7 @@ class HVAC
40
40
  # Cooling Coil
41
41
 
42
42
  cool_c_d = get_cool_c_d(num_speeds, cooling_system.cooling_efficiency_seer)
43
- cool_cfm = cooling_system.cooling_cfm
44
- if num_speeds == 1
45
- cool_rated_airflow_rate = 386.1 # cfm/ton
46
- cool_capacity_ratios = [1.0]
47
- cool_fan_speed_ratios = [1.0]
48
- cool_shrs = [cooling_system.cooling_shr]
49
- cool_cap_ft_spec = [[3.670270705, -0.098652414, 0.000955906, 0.006552414, -0.0000156, -0.000131877]]
50
- cool_eir_ft_spec = [[-3.302695861, 0.137871531, -0.001056996, -0.012573945, 0.000214638, -0.000145054]]
51
- cool_cap_fflow_spec = [[0.718605468, 0.410099989, -0.128705457]]
52
- cool_eir_fflow_spec = [[1.32299905, -0.477711207, 0.154712157]]
53
- cool_eers = [calc_eer_cooling_1speed(cooling_system.cooling_efficiency_seer, fan_power_rated, cool_eir_ft_spec)]
54
- elsif num_speeds == 2
55
- cool_rated_airflow_rate = 355.2 # cfm/ton
56
- cool_capacity_ratios = [0.72, 1.0]
57
- cool_fan_speed_ratios = [0.86, 1.0]
58
- cool_shrs = [cooling_system.cooling_shr - 0.02, cooling_system.cooling_shr] # TODO: is the following assumption correct (revisit Dylan's data?)? OR should value from HPXML be used for both stages
59
- cool_cap_ft_spec = [[3.940185508, -0.104723455, 0.001019298, 0.006471171, -0.00000953, -0.000161658],
60
- [3.109456535, -0.085520461, 0.000863238, 0.00863049, -0.0000210, -0.000140186]]
61
- cool_eir_ft_spec = [[-3.877526888, 0.164566276, -0.001272755, -0.019956043, 0.000256512, -0.000133539],
62
- [-1.990708931, 0.093969249, -0.00073335, -0.009062553, 0.000165099, -0.0000997]]
63
- cool_cap_fflow_spec = [[0.65673024, 0.516470835, -0.172887149],
64
- [0.690334551, 0.464383753, -0.154507638]]
65
- cool_eir_fflow_spec = [[1.562945114, -0.791859997, 0.230030877],
66
- [1.31565404, -0.482467162, 0.166239001]]
67
- cool_eers = calc_eers_cooling_2speed(runner, cooling_system.cooling_efficiency_seer, cool_c_d, cool_capacity_ratios, cool_fan_speed_ratios, fan_power_rated, cool_eir_ft_spec, cool_cap_ft_spec)
68
- elsif num_speeds == 4
69
- cool_rated_airflow_rate = 411.0 # cfm/ton
70
- cool_capacity_ratios = [0.36, 0.51, 0.67, 1.0]
71
- cool_fan_speed_ratios = [0.42, 0.54, 0.68, 1.0]
72
- cool_shrs = [1.115, 1.026, 1.013, 1.0].map { |mult| cooling_system.cooling_shr * mult }
73
- # The following coefficients were generated using NREL experimental performance mapping for the Carrier unit
74
- cool_cap_coeff_perf_map = [[1.6516044444444447, 0.0698916049382716, -0.0005546296296296296, -0.08870160493827162, 0.0004135802469135802, 0.00029077160493827157],
75
- [-6.84948049382716, 0.26946, -0.0019413580246913577, -0.03281469135802469, 0.00015694444444444442, 3.32716049382716e-05],
76
- [-4.53543086419753, 0.15358543209876546, -0.0009345679012345678, 0.002666913580246914, -7.993827160493826e-06, -0.00011617283950617283],
77
- [-3.500948395061729, 0.11738987654320988, -0.0006580246913580248, 0.007003148148148148, -2.8518518518518517e-05, -0.0001284259259259259],
78
- [1.8769221728395058, -0.04768641975308643, 0.0006885802469135801, 0.006643395061728395, 1.4209876543209876e-05, -0.00024043209876543206]]
79
- cool_cap_ft_spec = cool_cap_coeff_perf_map.select { |i| [0, 1, 2, 4].include? cool_cap_coeff_perf_map.index(i) }
80
- cool_cap_ft_spec_3 = cool_cap_coeff_perf_map.select { |i| [0, 1, 4].include? cool_cap_coeff_perf_map.index(i) }
81
- cool_eir_coeff_perf_map = [[2.896298765432099, -0.12487654320987657, 0.0012148148148148148, 0.04492037037037037, 8.734567901234567e-05, -0.0006348765432098764],
82
- [6.428076543209876, -0.20913209876543212, 0.0018521604938271604, 0.024392592592592594, 0.00019691358024691356, -0.0006012345679012346],
83
- [5.136356049382716, -0.1591530864197531, 0.0014151234567901232, 0.018665555555555557, 0.00020398148148148147, -0.0005407407407407407],
84
- [1.3823471604938273, -0.02875123456790123, 0.00038302469135802463, 0.006344814814814816, 0.00024836419753086417, -0.00047469135802469134],
85
- [-1.0411735802469133, 0.055261604938271605, -0.0004404320987654321, 0.0002154938271604939, 0.00017484567901234564, -0.0002017901234567901]]
86
- cool_eir_ft_spec = cool_eir_coeff_perf_map.select { |i| [0, 1, 2, 4].include? cool_eir_coeff_perf_map.index(i) }
87
- cool_eir_ft_spec_3 = cool_eir_coeff_perf_map.select { |i| [0, 1, 4].include? cool_eir_coeff_perf_map.index(i) }
88
- cool_cap_fflow_spec = [[1, 0, 0]] * 4
89
- cool_eir_fflow_spec = [[1, 0, 0]] * 4
90
- cap_ratio_seer_3 = cool_capacity_ratios.select { |i| [0, 1, 3].include? cool_capacity_ratios.index(i) }
91
- fan_speed_seer_3 = cool_fan_speed_ratios.select { |i| [0, 1, 3].include? cool_fan_speed_ratios.index(i) }
92
- cool_eers = calc_eers_cooling_4speed(runner, cooling_system.cooling_efficiency_seer, cool_c_d, cap_ratio_seer_3, fan_speed_seer_3, fan_power_rated, cool_eir_ft_spec_3, cool_cap_ft_spec_3)
93
- end
43
+ cool_rated_airflow_rate, cool_fan_speed_ratios, cool_capacity_ratios, cool_shrs, cool_eers, cool_cap_ft_spec, cool_eir_ft_spec, cool_cap_fflow_spec, cool_eir_fflow_spec = get_hp_clg_curves(num_speeds, cooling_system, fan_power_rated, cool_c_d, runner)
94
44
  cool_cfms_ton_rated = calc_cfms_ton_rated(cool_rated_airflow_rate, cool_fan_speed_ratios, cool_capacity_ratios)
95
45
  cool_shrs_rated_gross = calc_shrs_rated_gross(num_speeds, cool_shrs, fan_power_rated, cool_cfms_ton_rated)
96
46
  cool_eirs = calc_cool_eirs(num_speeds, cool_eers, fan_power_rated)
@@ -100,7 +50,6 @@ class HVAC
100
50
  end
101
51
 
102
52
  if not heating_system.nil?
103
- heat_cfm = heating_system.heating_cfm
104
53
 
105
54
  # Heating Coil
106
55
 
@@ -112,7 +61,7 @@ class HVAC
112
61
  htg_coil.setGasBurnerEfficiency(heating_system.heating_efficiency_afue)
113
62
  htg_coil.setParasiticElectricLoad(0)
114
63
  htg_coil.setParasiticGasLoad(0)
115
- htg_coil.setFuelType(EPlus.input_fuel_map(heating_system.heating_system_fuel))
64
+ htg_coil.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
116
65
  end
117
66
  htg_coil.setName(obj_name + ' htg coil')
118
67
  if not heating_system.heating_capacity.nil?
@@ -123,12 +72,15 @@ class HVAC
123
72
 
124
73
  # Fan
125
74
 
126
- if not cooling_system.nil?
127
- fan_power_installed = get_fan_power_installed(cooling_system.cooling_efficiency_seer)
75
+ if (not cooling_system.nil?) && (not heating_system.nil?) && (cooling_system.fan_watts_per_cfm.to_f != heating_system.fan_watts_per_cfm.to_f)
76
+ fail "Fan powers for heating system '#{heating_system.id}' and cooling system '#{cooling_system.id}' must be the same."
77
+ end
78
+ if (not cooling_system.nil?) && (not cooling_system.fan_watts_per_cfm.nil?)
79
+ fan_watts_per_cfm = cooling_system.fan_watts_per_cfm
128
80
  else
129
- fan_power_installed = 0.5 # W/cfm; For fuel furnaces, will be overridden by EAE later
81
+ fan_watts_per_cfm = heating_system.fan_watts_per_cfm
130
82
  end
131
- fan = create_supply_fan(model, obj_name, num_speeds, fan_power_installed)
83
+ fan = create_supply_fan(model, obj_name, num_speeds, fan_watts_per_cfm)
132
84
  if not cooling_system.nil?
133
85
  hvac_map[cooling_system.id] += disaggregate_fan_or_pump(model, fan, nil, clg_coil, nil)
134
86
  end
@@ -138,7 +90,7 @@ class HVAC
138
90
 
139
91
  # Unitary System
140
92
 
141
- air_loop_unitary = create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil, nil, clg_cfm: cool_cfm, htg_cfm: heat_cfm)
93
+ air_loop_unitary = create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil, nil)
142
94
  if not cooling_system.nil?
143
95
  hvac_map[cooling_system.id] << air_loop_unitary
144
96
  end
@@ -187,7 +139,6 @@ class HVAC
187
139
  hvac_map[cooling_system.id] = []
188
140
  obj_name = Constants.ObjectNameRoomAirConditioner
189
141
  sequential_cool_load_frac = calc_sequential_load_fraction(cooling_system.fraction_cool_load_served, remaining_cool_load_frac)
190
- airflow_rate = 350.0 # cfm/ton; assumed
191
142
 
192
143
  # Performance curves
193
144
  # From Frigidaire 10.7 eer unit in Winkler et. al. Lab Testing of Window ACs (2013)
@@ -223,14 +174,7 @@ class HVAC
223
174
  hvac_map[cooling_system.id] << clg_coil
224
175
 
225
176
  # Fan
226
-
227
- fan = OpenStudio::Model::FanOnOff.new(model, model.alwaysOnDiscreteSchedule)
228
- fan.setName(obj_name + ' supply fan')
229
- fan.setEndUseSubcategory('supply fan')
230
- fan.setFanEfficiency(1)
231
- fan.setPressureRise(0)
232
- fan.setMotorEfficiency(1)
233
- fan.setMotorInAirstreamFraction(0)
177
+ fan = create_supply_fan(model, obj_name, 1, 0.0) # Fan power included in EER (net COP) above
234
178
  hvac_map[cooling_system.id] += disaggregate_fan_or_pump(model, fan, nil, clg_coil, nil)
235
179
 
236
180
  # Heating Coil (none)
@@ -250,7 +194,6 @@ class HVAC
250
194
  control_zone.setSequentialHeatingFractionSchedule(ptac, get_sequential_load_schedule(model, 0))
251
195
 
252
196
  # Store info for HVAC Sizing measure
253
- ptac.additionalProperties.setFeature(Constants.SizingInfoHVACCoolingCFMs, airflow_rate.to_s)
254
197
  ptac.additionalProperties.setFeature(Constants.SizingInfoHVACRatedCFMperTonCooling, cfms_ton_rated.join(','))
255
198
  ptac.additionalProperties.setFeature(Constants.SizingInfoHVACFracCoolLoadServed, cooling_system.fraction_cool_load_served)
256
199
  ptac.additionalProperties.setFeature(Constants.SizingInfoHVACCoolType, Constants.ObjectNameRoomAirConditioner)
@@ -282,11 +225,10 @@ class HVAC
282
225
  hvac_map[cooling_system.id] << air_loop
283
226
 
284
227
  # Fan
285
-
228
+ # Use VariableVolume object
286
229
  fan = OpenStudio::Model::FanVariableVolume.new(model, model.alwaysOnDiscreteSchedule)
287
230
  fan.setName(obj_name + ' supply fan')
288
231
  fan.setEndUseSubcategory('supply fan')
289
- fan.setFanEfficiency(1)
290
232
  fan.setMotorEfficiency(1)
291
233
  fan.setMotorInAirstreamFraction(0)
292
234
  fan.setFanPowerCoefficient1(0)
@@ -294,6 +236,7 @@ class HVAC
294
236
  fan.setFanPowerCoefficient3(0)
295
237
  fan.setFanPowerCoefficient4(0)
296
238
  fan.setFanPowerCoefficient5(0)
239
+ set_fan_power(fan, cooling_system.fan_watts_per_cfm.to_f)
297
240
  fan.addToNode(air_loop.supplyInletNode)
298
241
  hvac_map[cooling_system.id] += disaggregate_fan_or_pump(model, fan, nil, evap_cooler, nil)
299
242
 
@@ -348,56 +291,7 @@ class HVAC
348
291
  # Cooling Coil
349
292
 
350
293
  cool_c_d = get_cool_c_d(num_speeds, heat_pump.cooling_efficiency_seer)
351
- if num_speeds == 1
352
- cool_rated_airflow_rate = 394.2 # cfm/ton
353
- cool_capacity_ratios = [1.0]
354
- cool_fan_speed_ratios = [1.0]
355
- cool_shrs = [heat_pump.cooling_shr]
356
- cool_cap_ft_spec = [[3.68637657, -0.098352478, 0.000956357, 0.005838141, -0.0000127, -0.000131702]]
357
- cool_eir_ft_spec = [[-3.437356399, 0.136656369, -0.001049231, -0.0079378, 0.000185435, -0.0001441]]
358
- cool_cap_fflow_spec = [[0.718664047, 0.41797409, -0.136638137]]
359
- cool_eir_fflow_spec = [[1.143487507, -0.13943972, -0.004047787]]
360
- cool_eers = [calc_eer_cooling_1speed(heat_pump.cooling_efficiency_seer, fan_power_rated, cool_eir_ft_spec)]
361
- elsif num_speeds == 2
362
- cool_rated_airflow_rate = 344.1 # cfm/ton
363
- cool_capacity_ratios = [0.72, 1.0]
364
- cool_fan_speed_ratios = [0.86, 1.0]
365
- cool_shrs = [heat_pump.cooling_shr - 0.014, heat_pump.cooling_shr] # TODO: is the following assumption correct (revisit Dylan's data?)? OR should value from HPXML be used for both stages?
366
- cool_cap_ft_spec = [[3.998418659, -0.108728222, 0.001056818, 0.007512314, -0.0000139, -0.000164716],
367
- [3.466810106, -0.091476056, 0.000901205, 0.004163355, -0.00000919, -0.000110829]]
368
- cool_eir_ft_spec = [[-4.282911381, 0.181023691, -0.001357391, -0.026310378, 0.000333282, -0.000197405],
369
- [-3.557757517, 0.112737397, -0.000731381, 0.013184877, 0.000132645, -0.000338716]]
370
- cool_cap_fflow_spec = [[0.655239515, 0.511655216, -0.166894731],
371
- [0.618281092, 0.569060264, -0.187341356]]
372
- cool_eir_fflow_spec = [[1.639108268, -0.998953996, 0.359845728],
373
- [1.570774717, -0.914152018, 0.343377302]]
374
- cool_eers = calc_eers_cooling_2speed(runner, heat_pump.cooling_efficiency_seer, cool_c_d, cool_capacity_ratios, cool_fan_speed_ratios, fan_power_rated, cool_eir_ft_spec, cool_cap_ft_spec, true)
375
- elsif num_speeds == 4
376
- cool_rated_airflow_rate = 411.0 # cfm/ton
377
- cool_capacity_ratios = [0.36, 0.51, 0.67, 1.0]
378
- cool_fan_speed_ratios = [0.42, 0.54, 0.68, 1.0]
379
- cool_shrs = [1.115, 1.026, 1.013, 1.0].map { |mult| heat_pump.cooling_shr * mult }
380
- # The following coefficients were generated using NREL experimental performance mapping for the Carrier unit
381
- cool_cap_coeff_perf_map = [[1.6516044444444447, 0.0698916049382716, -0.0005546296296296296, -0.08870160493827162, 0.0004135802469135802, 0.00029077160493827157],
382
- [-6.84948049382716, 0.26946, -0.0019413580246913577, -0.03281469135802469, 0.00015694444444444442, 3.32716049382716e-05],
383
- [-4.53543086419753, 0.15358543209876546, -0.0009345679012345678, 0.002666913580246914, -7.993827160493826e-06, -0.00011617283950617283],
384
- [-3.500948395061729, 0.11738987654320988, -0.0006580246913580248, 0.007003148148148148, -2.8518518518518517e-05, -0.0001284259259259259],
385
- [1.8769221728395058, -0.04768641975308643, 0.0006885802469135801, 0.006643395061728395, 1.4209876543209876e-05, -0.00024043209876543206]]
386
- cool_cap_ft_spec = cool_cap_coeff_perf_map.select { |i| [0, 1, 2, 4].include? cool_cap_coeff_perf_map.index(i) }
387
- cool_cap_ft_spec_3 = cool_cap_coeff_perf_map.select { |i| [0, 1, 4].include? cool_cap_coeff_perf_map.index(i) }
388
- cool_eir_coeff_perf_map = [[2.896298765432099, -0.12487654320987657, 0.0012148148148148148, 0.04492037037037037, 8.734567901234567e-05, -0.0006348765432098764],
389
- [6.428076543209876, -0.20913209876543212, 0.0018521604938271604, 0.024392592592592594, 0.00019691358024691356, -0.0006012345679012346],
390
- [5.136356049382716, -0.1591530864197531, 0.0014151234567901232, 0.018665555555555557, 0.00020398148148148147, -0.0005407407407407407],
391
- [1.3823471604938273, -0.02875123456790123, 0.00038302469135802463, 0.006344814814814816, 0.00024836419753086417, -0.00047469135802469134],
392
- [-1.0411735802469133, 0.055261604938271605, -0.0004404320987654321, 0.0002154938271604939, 0.00017484567901234564, -0.0002017901234567901]]
393
- cool_eir_ft_spec = cool_eir_coeff_perf_map.select { |i| [0, 1, 2, 4].include? cool_eir_coeff_perf_map.index(i) }
394
- cool_eir_ft_spec_3 = cool_eir_coeff_perf_map.select { |i| [0, 1, 4].include? cool_eir_coeff_perf_map.index(i) }
395
- cool_eir_fflow_spec = [[1, 0, 0]] * 4
396
- cool_cap_fflow_spec = [[1, 0, 0]] * 4
397
- cap_ratio_seer_3 = cool_capacity_ratios.select { |i| [0, 1, 3].include? cool_capacity_ratios.index(i) }
398
- fan_speed_seer_3 = cool_fan_speed_ratios.select { |i| [0, 1, 3].include? cool_fan_speed_ratios.index(i) }
399
- cool_eers = calc_eers_cooling_4speed(runner, heat_pump.cooling_efficiency_seer, cool_c_d, cap_ratio_seer_3, fan_speed_seer_3, fan_power_rated, cool_eir_ft_spec_3, cool_cap_ft_spec_3)
400
- end
294
+ cool_rated_airflow_rate, cool_fan_speed_ratios, cool_capacity_ratios, cool_shrs, cool_eers, cool_cap_ft_spec, cool_eir_ft_spec, cool_cap_fflow_spec, cool_eir_fflow_spec = get_hp_clg_curves(num_speeds, heat_pump, fan_power_rated, cool_c_d, runner)
401
295
  cool_cfms_ton_rated = calc_cfms_ton_rated(cool_rated_airflow_rate, cool_fan_speed_ratios, cool_capacity_ratios)
402
296
  cool_shrs_rated_gross = calc_shrs_rated_gross(num_speeds, cool_shrs, fan_power_rated, cool_cfms_ton_rated)
403
297
  cool_eirs = calc_cool_eirs(num_speeds, cool_eers, fan_power_rated)
@@ -470,8 +364,7 @@ class HVAC
470
364
  hvac_map[heat_pump.id] << htg_supp_coil
471
365
 
472
366
  # Fan
473
- fan_power_installed = get_fan_power_installed(heat_pump.cooling_efficiency_seer)
474
- fan = create_supply_fan(model, obj_name, num_speeds, fan_power_installed)
367
+ fan = create_supply_fan(model, obj_name, num_speeds, heat_pump.fan_watts_per_cfm)
475
368
  hvac_map[heat_pump.id] += disaggregate_fan_or_pump(model, fan, htg_coil, clg_coil, htg_supp_coil)
476
369
 
477
370
  # Unitary System
@@ -511,7 +404,7 @@ class HVAC
511
404
  control_zone, hvac_map)
512
405
 
513
406
  # Shoehorn cooling_system object into a corresponding heat_pump object
514
- heat_pump = HPXML::HeatPump.new(nil)
407
+ heat_pump = HPXML::HeatPump.new(cooling_system.hpxml_object)
515
408
  heat_pump.id = cooling_system.id
516
409
  heat_pump.heat_pump_type = HPXML::HVACTypeHeatPumpMiniSplit
517
410
  heat_pump.heat_pump_fuel = cooling_system.cooling_system_fuel
@@ -525,6 +418,7 @@ class HVAC
525
418
  heat_pump.cooling_efficiency_seer = cooling_system.cooling_efficiency_seer
526
419
  heat_pump.heating_efficiency_hspf = 7.7 # Arbitrary; shouldn't affect energy use TODO: Allow nil
527
420
  heat_pump.distribution_system_idref = cooling_system.distribution_system_idref
421
+ heat_pump.fan_watts_per_cfm = cooling_system.fan_watts_per_cfm
528
422
 
529
423
  apply_mini_split_heat_pump(model, runner, heat_pump, 0,
530
424
  remaining_cool_load_frac,
@@ -543,8 +437,12 @@ class HVAC
543
437
  num_speeds = 10
544
438
  mshp_indices = [1, 3, 5, 9]
545
439
  hp_min_temp, supp_max_temp = get_heat_pump_temp_assumptions(heat_pump)
546
- fan_power_installed = 0.07 # W/cfm
547
440
  pan_heater_power = 0.0 # W, disabled
441
+ if not heat_pump.distribution_system.nil?
442
+ fan_power_rated = 0.18 # W/cfm, ducted
443
+ else
444
+ fan_power_rated = heat_pump.fan_watts_per_cfm # ductless, installed and rated value should be equal
445
+ end
548
446
 
549
447
  # Calculate generic inputs
550
448
  min_cooling_capacity = 0.4 # frac
@@ -579,7 +477,7 @@ class HVAC
579
477
  dB_rated = 80.0 # deg-F
580
478
  wB_rated = 67.0 # deg-F
581
479
  cool_cfms_ton_rated, cool_capacity_ratios, cool_shrs_rated_gross = calc_mshp_cfms_ton_cooling(min_cooling_capacity, max_cooling_capacity, min_cooling_airflow_rate, max_cooling_airflow_rate, num_speeds, dB_rated, wB_rated, heat_pump.cooling_shr)
582
- cool_eirs = calc_mshp_cool_eirs(runner, heat_pump.cooling_efficiency_seer, fan_power_installed, cool_c_d, num_speeds, cool_capacity_ratios, cool_cfms_ton_rated, cool_eir_ft_spec, cool_cap_ft_spec)
480
+ cool_eirs = calc_mshp_cool_eirs(runner, heat_pump.cooling_efficiency_seer, fan_power_rated, cool_c_d, num_speeds, cool_capacity_ratios, cool_cfms_ton_rated, cool_eir_ft_spec, cool_cap_ft_spec)
583
481
  clg_coil = create_dx_cooling_coil(model, obj_name, mshp_indices, cool_eirs, cool_cap_ft_spec, cool_eir_ft_spec, cool_closs_fplr_spec, cool_cap_fflow_spec, cool_eir_fflow_spec, cool_shrs_rated_gross, heat_pump.cooling_capacity, 0.0, nil, nil)
584
482
  hvac_map[heat_pump.id] << clg_coil
585
483
 
@@ -614,7 +512,7 @@ class HVAC
614
512
  heat_c_d = get_heat_c_d(num_speeds, heat_pump.heating_efficiency_hspf)
615
513
  heat_closs_fplr_spec = [calc_plr_coefficients(heat_c_d)] * num_speeds
616
514
  heat_cfms_ton_rated, heat_capacity_ratios = calc_mshp_cfms_ton_heating(min_heating_capacity, max_heating_capacity, min_heating_airflow_rate, max_heating_airflow_rate, num_speeds)
617
- heat_eirs = calc_mshp_heat_eirs(runner, heat_pump.heating_efficiency_hspf, fan_power_installed, hp_min_temp, heat_c_d, cool_cfms_ton_rated, num_speeds, heat_capacity_ratios, heat_cfms_ton_rated, heat_eir_ft_spec, heat_cap_ft_spec)
515
+ heat_eirs = calc_mshp_heat_eirs(runner, heat_pump.heating_efficiency_hspf, fan_power_rated, hp_min_temp, heat_c_d, cool_cfms_ton_rated, num_speeds, heat_capacity_ratios, heat_cfms_ton_rated, heat_eir_ft_spec, heat_cap_ft_spec)
618
516
  htg_coil = create_dx_heating_coil(model, obj_name, mshp_indices, heat_eirs, heat_cap_ft_spec, heat_eir_ft_spec, heat_closs_fplr_spec, heat_cap_fflow_spec, heat_eir_fflow_spec, heat_pump.heating_capacity, 0.0, nil, nil, hp_min_temp, heat_pump.fraction_heat_load_served)
619
517
  hvac_map[heat_pump.id] << htg_coil
620
518
 
@@ -624,16 +522,7 @@ class HVAC
624
522
  hvac_map[heat_pump.id] << htg_supp_coil
625
523
 
626
524
  # Fan
627
- fan_power_curve = create_curve_exponent(model, [0, 1, 3], obj_name + ' fan power curve', -100, 100)
628
- fan_eff_curve = create_curve_cubic(model, [0, 1, 0, 0], obj_name + ' fan eff curve', 0, 1, 0.01, 1)
629
- fan = OpenStudio::Model::FanOnOff.new(model, model.alwaysOnDiscreteSchedule, fan_power_curve, fan_eff_curve)
630
- fan_eff = UnitConversions.convert(UnitConversions.convert(0.1, 'inH2O', 'Pa') / fan_power_installed, 'cfm', 'm^3/s') # Overall Efficiency of the Fan, Motor and Drive
631
- fan.setName(obj_name + ' supply fan')
632
- fan.setEndUseSubcategory('supply fan')
633
- fan.setFanEfficiency(fan_eff)
634
- fan.setPressureRise(calc_fan_pressure_rise(fan_eff, fan_power_installed))
635
- fan.setMotorEfficiency(1.0)
636
- fan.setMotorInAirstreamFraction(1.0)
525
+ fan = create_supply_fan(model, obj_name, 4, heat_pump.fan_watts_per_cfm)
637
526
  hvac_map[heat_pump.id] += disaggregate_fan_or_pump(model, fan, htg_coil, clg_coil, htg_supp_coil)
638
527
 
639
528
  # Unitary System
@@ -658,7 +547,7 @@ class HVAC
658
547
 
659
548
  if pan_heater_power > 0
660
549
 
661
- mshp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Heating Coil Electric Energy')
550
+ mshp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Heating Coil #{EPlus::FuelTypeElectricity} Energy")
662
551
  mshp_sensor.setName("#{obj_name} vrf energy sensor")
663
552
  mshp_sensor.setKeyName(obj_name + ' coil')
664
553
 
@@ -673,7 +562,7 @@ class HVAC
673
562
  equip.setSchedule(model.alwaysOnDiscreteSchedule)
674
563
  equip.setEndUseSubcategory(obj_name + ' pan heater')
675
564
 
676
- pan_heater_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(equip, 'ElectricEquipment', 'Electric Power Level')
565
+ pan_heater_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(equip, *EPlus::EMSActuatorElectricEquipmentPower)
677
566
  pan_heater_actuator.setName("#{obj_name} pan heater actuator")
678
567
 
679
568
  tout_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Outdoor Air Drybulb Temperature')
@@ -723,8 +612,8 @@ class HVAC
723
612
  air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACSystemIsDucted, !heat_pump.distribution_system_idref.nil?)
724
613
  air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACCapacityRatioHeating, heat_capacity_ratios_4.join(','))
725
614
  air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACCapacityRatioCooling, cool_capacity_ratios_4.join(','))
726
- air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACHeatingCFMs, heat_cfms_ton_rated_4.join(','))
727
- air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACCoolingCFMs, cool_cfms_ton_rated_4.join(','))
615
+ air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACRatedCFMperTonHeating, heat_cfms_ton_rated_4.join(','))
616
+ air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACRatedCFMperTonCooling, cool_cfms_ton_rated_4.join(','))
728
617
  air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACHeatingCapacityOffset, heating_capacity_offset)
729
618
  air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACFracHeatLoadServed, heat_pump.fraction_heat_load_served)
730
619
  air_loop_unitary.additionalProperties.setFeature(Constants.SizingInfoHVACFracCoolLoadServed, heat_pump.fraction_cool_load_served)
@@ -1113,7 +1002,7 @@ class HVAC
1113
1002
 
1114
1003
  boiler = OpenStudio::Model::BoilerHotWater.new(model)
1115
1004
  boiler.setName(obj_name)
1116
- boiler.setFuelType(EPlus.input_fuel_map(heating_system.heating_system_fuel))
1005
+ boiler.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
1117
1006
  if not heating_system.heating_capacity.nil?
1118
1007
  boiler.setNominalCapacity(UnitConversions.convert([heating_system.heating_capacity, Constants.small].max, 'Btu/hr', 'W')) # Used by HVACSizing measure
1119
1008
  end
@@ -1274,12 +1163,7 @@ class HVAC
1274
1163
  hvac_map[heating_system.id] = []
1275
1164
  obj_name = Constants.ObjectNameUnitHeater
1276
1165
  sequential_heat_load_frac = calc_sequential_load_fraction(heating_system.fraction_heat_load_served, remaining_heat_load_frac)
1277
- fan_power_installed = 0.5 # W/cfm # For fuel equipment, will be overridden by EAE later
1278
- airflow_rate = 125.0 # cfm/ton; doesn't affect energy consumption
1279
-
1280
- if (fan_power_installed > 0) && (airflow_rate == 0)
1281
- fail 'If Fan Power > 0, then Airflow Rate cannot be zero.'
1282
- end
1166
+ airflow_cfm_per_ton = 350.0
1283
1167
 
1284
1168
  # Heating Coil
1285
1169
 
@@ -1293,7 +1177,7 @@ class HVAC
1293
1177
  htg_coil.setGasBurnerEfficiency(efficiency)
1294
1178
  htg_coil.setParasiticElectricLoad(0.0)
1295
1179
  htg_coil.setParasiticGasLoad(0)
1296
- htg_coil.setFuelType(EPlus.input_fuel_map(heating_system.heating_system_fuel))
1180
+ htg_coil.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
1297
1181
  end
1298
1182
  htg_coil.setName(obj_name + ' htg coil')
1299
1183
  if not heating_system.heating_capacity.nil?
@@ -1303,7 +1187,7 @@ class HVAC
1303
1187
 
1304
1188
  # Fan
1305
1189
 
1306
- fan = create_supply_fan(model, obj_name, 1, fan_power_installed)
1190
+ fan = create_supply_fan(model, obj_name, 1, 0.0) # Fan power assigned in hvac_sizing.rb
1307
1191
  hvac_map[heating_system.id] += disaggregate_fan_or_pump(model, fan, htg_coil, nil, nil)
1308
1192
 
1309
1193
  # Unitary System
@@ -1317,9 +1201,10 @@ class HVAC
1317
1201
  control_zone.setSequentialCoolingFractionSchedule(unitary_system, get_sequential_load_schedule(model, 0))
1318
1202
 
1319
1203
  # Store info for HVAC Sizing measure
1320
- unitary_system.additionalProperties.setFeature(Constants.SizingInfoHVACRatedCFMperTonHeating, airflow_rate.to_s)
1204
+ unitary_system.additionalProperties.setFeature(Constants.SizingInfoHVACRatedCFMperTonHeating, [airflow_cfm_per_ton].join(','))
1321
1205
  unitary_system.additionalProperties.setFeature(Constants.SizingInfoHVACFracHeatLoadServed, heating_system.fraction_heat_load_served)
1322
1206
  unitary_system.additionalProperties.setFeature(Constants.SizingInfoHVACHeatType, Constants.ObjectNameUnitHeater)
1207
+ unitary_system.additionalProperties.setFeature(Constants.SizingInfoHVACFanWatts, heating_system.fan_watts)
1323
1208
  end
1324
1209
 
1325
1210
  def self.apply_ideal_air_loads(model, runner, obj_name, sequential_cool_load_frac,
@@ -1381,7 +1266,7 @@ class HVAC
1381
1266
  part_load_frac_curve = create_curve_quadratic(model, pl_coeff, 'DXDH-PLF-fPLR', 0, 1, 0.7, 1)
1382
1267
  if energy_factor.nil?
1383
1268
  # shift inputs tested under IEF test conditions to those under EF test conditions with performance curves
1384
- energy_factor, water_removal_rate = apply_dehumidifier_ief_to_ef_inputs(w_coeff, ef_coeff, dehumidifier.integrated_energy_factor, water_removal_rate)
1269
+ energy_factor, water_removal_rate = apply_dehumidifier_ief_to_ef_inputs(dehumidifier.type, w_coeff, ef_coeff, dehumidifier.integrated_energy_factor, water_removal_rate)
1385
1270
  end
1386
1271
 
1387
1272
  # Calculate air flow rate by assuming 2.75 cfm/pint/day (based on experimental test data)
@@ -1445,56 +1330,77 @@ class HVAC
1445
1330
  equip.setSchedule(ceiling_fan_sch)
1446
1331
  end
1447
1332
 
1448
- def self.apply_setpoints(model, runner, weather, hvac_control, living_zone)
1333
+ def self.apply_setpoints(model, runner, weather, hvac_control, living_zone, has_ceiling_fan)
1449
1334
  # Assume heating/cooling seasons are year-round
1450
1335
  htg_start_month = 1
1451
1336
  htg_end_month = 12
1452
1337
  clg_start_month = 1
1453
1338
  clg_end_month = 12
1454
1339
 
1455
- # Base heating setpoint
1456
- htg_setpoint = hvac_control.heating_setpoint_temp
1457
- htg_weekday_setpoints = [[htg_setpoint] * 24] * 12
1458
-
1459
- # Apply heating setback?
1460
- htg_setback = hvac_control.heating_setback_temp
1461
- if not htg_setback.nil?
1462
- htg_setback_hrs_per_week = hvac_control.heating_setback_hours_per_week
1463
- htg_setback_start_hr = hvac_control.heating_setback_start_hour
1464
- for m in 1..12
1465
- for hr in htg_setback_start_hr..htg_setback_start_hr + Integer(htg_setback_hrs_per_week / 7.0) - 1
1466
- htg_weekday_setpoints[m - 1][hr % 24] = htg_setback
1340
+ if hvac_control.weekday_heating_setpoints.nil? || hvac_control.weekend_heating_setpoints.nil?
1341
+ # Base heating setpoint
1342
+ htg_setpoint = hvac_control.heating_setpoint_temp
1343
+ htg_weekday_setpoints = [[htg_setpoint] * 24] * 12
1344
+
1345
+ # Apply heating setback?
1346
+ htg_setback = hvac_control.heating_setback_temp
1347
+ if not htg_setback.nil?
1348
+ htg_setback_hrs_per_week = hvac_control.heating_setback_hours_per_week
1349
+ htg_setback_start_hr = hvac_control.heating_setback_start_hour
1350
+ for m in 1..12
1351
+ for hr in htg_setback_start_hr..htg_setback_start_hr + Integer(htg_setback_hrs_per_week / 7.0) - 1
1352
+ htg_weekday_setpoints[m - 1][hr % 24] = htg_setback
1353
+ end
1467
1354
  end
1468
1355
  end
1469
- end
1470
- htg_weekend_setpoints = htg_weekday_setpoints
1471
-
1472
- # Base cooling setpoint
1473
- clg_setpoint = hvac_control.cooling_setpoint_temp
1474
- clg_weekday_setpoints = [[clg_setpoint] * 24] * 12
1475
-
1476
- # Apply cooling setup?
1477
- clg_setup = hvac_control.cooling_setup_temp
1478
- if not clg_setup.nil?
1479
- clg_setup_hrs_per_week = hvac_control.cooling_setup_hours_per_week
1480
- clg_setup_start_hr = hvac_control.cooling_setup_start_hour
1481
- for m in 1..12
1482
- for hr in clg_setup_start_hr..clg_setup_start_hr + Integer(clg_setup_hrs_per_week / 7.0) - 1
1483
- clg_weekday_setpoints[m - 1][hr % 24] = clg_setup
1356
+ htg_weekend_setpoints = htg_weekday_setpoints.dup
1357
+ else
1358
+ # 24-hr weekday/weekend heating setpoint schedules
1359
+ htg_weekday_setpoints = hvac_control.weekday_heating_setpoints.split(',').map { |i| Float(i) }
1360
+ htg_weekday_setpoints = [htg_weekday_setpoints] * 12
1361
+
1362
+ htg_weekend_setpoints = hvac_control.weekend_heating_setpoints.split(',').map { |i| Float(i) }
1363
+ htg_weekend_setpoints = [htg_weekend_setpoints] * 12
1364
+ end
1365
+
1366
+ if hvac_control.weekday_cooling_setpoints.nil? || hvac_control.weekend_cooling_setpoints.nil?
1367
+ # Base cooling setpoint
1368
+ clg_setpoint = hvac_control.cooling_setpoint_temp
1369
+ clg_weekday_setpoints = [[clg_setpoint] * 24] * 12
1370
+
1371
+ # Apply cooling setup?
1372
+ clg_setup = hvac_control.cooling_setup_temp
1373
+ if not clg_setup.nil?
1374
+ clg_setup_hrs_per_week = hvac_control.cooling_setup_hours_per_week
1375
+ clg_setup_start_hr = hvac_control.cooling_setup_start_hour
1376
+ for m in 1..12
1377
+ for hr in clg_setup_start_hr..clg_setup_start_hr + Integer(clg_setup_hrs_per_week / 7.0) - 1
1378
+ clg_weekday_setpoints[m - 1][hr % 24] = clg_setup
1379
+ end
1484
1380
  end
1485
1381
  end
1382
+ clg_weekend_setpoints = clg_weekday_setpoints.dup
1383
+ else
1384
+ # 24-hr weekday/weekend cooling setpoint schedules
1385
+ clg_weekday_setpoints = hvac_control.weekday_cooling_setpoints.split(',').map { |i| Float(i) }
1386
+ clg_weekday_setpoints = [clg_weekday_setpoints] * 12
1387
+
1388
+ clg_weekend_setpoints = hvac_control.weekend_cooling_setpoints.split(',').map { |i| Float(i) }
1389
+ clg_weekend_setpoints = [clg_weekend_setpoints] * 12
1486
1390
  end
1487
1391
 
1488
1392
  # Apply cooling setpoint offset due to ceiling fan?
1489
- clg_ceiling_fan_offset = hvac_control.ceiling_fan_cooling_setpoint_temp_offset
1490
- if not clg_ceiling_fan_offset.nil?
1491
- HVAC.get_default_ceiling_fan_months(weather).each_with_index do |operation, m|
1492
- next unless operation == 1
1493
-
1494
- clg_weekday_setpoints[m] = [clg_weekday_setpoints[m], Array.new(24, clg_ceiling_fan_offset)].transpose.map { |i| i.reduce(:+) }
1393
+ if has_ceiling_fan
1394
+ clg_ceiling_fan_offset = hvac_control.ceiling_fan_cooling_setpoint_temp_offset
1395
+ if not clg_ceiling_fan_offset.nil?
1396
+ HVAC.get_default_ceiling_fan_months(weather).each_with_index do |operation, m|
1397
+ next unless operation == 1
1398
+
1399
+ clg_weekday_setpoints[m] = [clg_weekday_setpoints[m], Array.new(24, clg_ceiling_fan_offset)].transpose.map { |i| i.reduce(:+) }
1400
+ clg_weekend_setpoints[m] = [clg_weekend_setpoints[m], Array.new(24, clg_ceiling_fan_offset)].transpose.map { |i| i.reduce(:+) }
1401
+ end
1495
1402
  end
1496
1403
  end
1497
- clg_weekend_setpoints = clg_weekday_setpoints
1498
1404
 
1499
1405
  # Create heating season schedule
1500
1406
  if htg_start_month <= htg_end_month
@@ -1553,48 +1459,6 @@ class HVAC
1553
1459
  living_zone.setThermostatSetpointDualSetpoint(thermostat_setpoint)
1554
1460
  end
1555
1461
 
1556
- def self.apply_eae_to_heating_fan(runner, hvac_objects, heating_system)
1557
- # Applies Electric Auxiliary Energy (EAE) for fuel heating equipment to fan/pump power.
1558
-
1559
- eae = heating_system.electric_auxiliary_energy
1560
-
1561
- unitary_systems = []
1562
- hvac_objects.each do |hvac_object|
1563
- if hvac_object.is_a? OpenStudio::Model::AirLoopHVAC # Furnace
1564
- unitary_systems << get_unitary_system_from_air_loop_hvac(hvac_object)
1565
- elsif hvac_object.is_a? OpenStudio::Model::AirLoopHVACUnitarySystem # WallFurnace/FloorFurnace/Stove
1566
- unitary_systems << hvac_object
1567
- end
1568
- end
1569
-
1570
- unitary_systems.each do |unitary_system|
1571
- if eae.nil?
1572
- htg_coil = unitary_system.heatingCoil.get.to_CoilHeatingGas.get
1573
- htg_capacity = UnitConversions.convert(htg_coil.nominalCapacity.get, 'W', 'kBtu/hr')
1574
- eae = get_electric_auxiliary_energy(heating_system, htg_capacity)
1575
- end
1576
- elec_power = eae / 2.08 # W
1577
-
1578
- htg_coil = unitary_system.heatingCoil.get.to_CoilHeatingGas.get
1579
- htg_coil.setParasiticElectricLoad(0.0)
1580
-
1581
- htg_cfm = UnitConversions.convert(unitary_system.supplyAirFlowRateDuringHeatingOperation.get, 'm^3/s', 'cfm')
1582
-
1583
- fan = unitary_system.supplyFan.get.to_FanOnOff.get
1584
- if elec_power > 0
1585
- fan_eff = 0.75 # Overall Efficiency of the Fan, Motor and Drive
1586
- fan_w_cfm = elec_power / htg_cfm # W/cfm
1587
- fan.setFanEfficiency(fan_eff)
1588
- fan.setPressureRise(calc_fan_pressure_rise(fan_eff, fan_w_cfm))
1589
- else
1590
- fan.setFanEfficiency(1)
1591
- fan.setPressureRise(0)
1592
- end
1593
- fan.setMotorEfficiency(1.0)
1594
- fan.setMotorInAirstreamFraction(1.0)
1595
- end
1596
- end
1597
-
1598
1462
  def self.get_default_heating_setpoint(control_type)
1599
1463
  # Per ANSI/RESNET/ICC 301
1600
1464
  htg_sp = 68 # F
@@ -1627,14 +1491,72 @@ class HVAC
1627
1491
  return clg_sp, clg_setup_sp, clg_setup_hrs_per_week, clg_setup_start_hr
1628
1492
  end
1629
1493
 
1630
- def self.get_default_compressor_type(seer)
1631
- if seer <= 15
1632
- return HPXML::HVACCompressorTypeSingleStage
1633
- elsif seer <= 21
1634
- return HPXML::HVACCompressorTypeTwoStage
1635
- elsif seer > 21
1636
- return HPXML::HVACCompressorTypeVariableSpeed
1494
+ def self.get_hp_clg_curves(num_speeds, heat_pump, fan_power_rated, cool_c_d, runner)
1495
+ if num_speeds == 1
1496
+ cool_rated_airflow_rate = 394.2 # cfm/ton
1497
+ cool_capacity_ratios = [1.0]
1498
+ cool_fan_speed_ratios = [1.0]
1499
+ cool_shrs = [heat_pump.cooling_shr]
1500
+ cool_cap_ft_spec = [[3.68637657, -0.098352478, 0.000956357, 0.005838141, -0.0000127, -0.000131702]]
1501
+ cool_eir_ft_spec = [[-3.437356399, 0.136656369, -0.001049231, -0.0079378, 0.000185435, -0.0001441]]
1502
+ cool_cap_fflow_spec = [[0.718664047, 0.41797409, -0.136638137]]
1503
+ cool_eir_fflow_spec = [[1.143487507, -0.13943972, -0.004047787]]
1504
+ cool_eers = [calc_eer_cooling_1speed(heat_pump.cooling_efficiency_seer, fan_power_rated, cool_eir_ft_spec)]
1505
+ elsif num_speeds == 2
1506
+ cool_rated_airflow_rate = 344.1 # cfm/ton
1507
+ cool_capacity_ratios = [0.72, 1.0]
1508
+ cool_fan_speed_ratios = [0.86, 1.0]
1509
+ cool_shrs = [heat_pump.cooling_shr - 0.014, heat_pump.cooling_shr] # TODO: is the following assumption correct (revisit Dylan's data?)? OR should value from HPXML be used for both stages?
1510
+ cool_cap_ft_spec = [[3.998418659, -0.108728222, 0.001056818, 0.007512314, -0.0000139, -0.000164716],
1511
+ [3.466810106, -0.091476056, 0.000901205, 0.004163355, -0.00000919, -0.000110829]]
1512
+ cool_eir_ft_spec = [[-4.282911381, 0.181023691, -0.001357391, -0.026310378, 0.000333282, -0.000197405],
1513
+ [-3.557757517, 0.112737397, -0.000731381, 0.013184877, 0.000132645, -0.000338716]]
1514
+ cool_cap_fflow_spec = [[0.655239515, 0.511655216, -0.166894731],
1515
+ [0.618281092, 0.569060264, -0.187341356]]
1516
+ cool_eir_fflow_spec = [[1.639108268, -0.998953996, 0.359845728],
1517
+ [1.570774717, -0.914152018, 0.343377302]]
1518
+ cool_eers = calc_eers_cooling_2speed(runner, heat_pump.cooling_efficiency_seer, cool_c_d, cool_capacity_ratios, cool_fan_speed_ratios, fan_power_rated, cool_eir_ft_spec, cool_cap_ft_spec, true)
1519
+ elsif num_speeds == 4
1520
+ cool_rated_airflow_rate = 411.0 # cfm/ton
1521
+ cool_capacity_ratios = [0.36, 0.51, 0.67, 1.0]
1522
+ cool_fan_speed_ratios = [0.42, 0.54, 0.68, 1.0]
1523
+ cool_shrs = [1.115, 1.026, 1.013, 1.0].map { |mult| heat_pump.cooling_shr * mult }
1524
+ # The following coefficients were generated using NREL experimental performance mapping for the Carrier unit
1525
+ cool_cap_coeff_perf_map = [[1.6516044444444447, 0.0698916049382716, -0.0005546296296296296, -0.08870160493827162, 0.0004135802469135802, 0.00029077160493827157],
1526
+ [-6.84948049382716, 0.26946, -0.0019413580246913577, -0.03281469135802469, 0.00015694444444444442, 3.32716049382716e-05],
1527
+ [-4.53543086419753, 0.15358543209876546, -0.0009345679012345678, 0.002666913580246914, -7.993827160493826e-06, -0.00011617283950617283],
1528
+ [-3.500948395061729, 0.11738987654320988, -0.0006580246913580248, 0.007003148148148148, -2.8518518518518517e-05, -0.0001284259259259259],
1529
+ [1.8769221728395058, -0.04768641975308643, 0.0006885802469135801, 0.006643395061728395, 1.4209876543209876e-05, -0.00024043209876543206]]
1530
+ cool_cap_ft_spec = cool_cap_coeff_perf_map.select { |i| [0, 1, 2, 4].include? cool_cap_coeff_perf_map.index(i) }
1531
+ cool_cap_ft_spec_3 = cool_cap_coeff_perf_map.select { |i| [0, 1, 4].include? cool_cap_coeff_perf_map.index(i) }
1532
+ cool_eir_coeff_perf_map = [[2.896298765432099, -0.12487654320987657, 0.0012148148148148148, 0.04492037037037037, 8.734567901234567e-05, -0.0006348765432098764],
1533
+ [6.428076543209876, -0.20913209876543212, 0.0018521604938271604, 0.024392592592592594, 0.00019691358024691356, -0.0006012345679012346],
1534
+ [5.136356049382716, -0.1591530864197531, 0.0014151234567901232, 0.018665555555555557, 0.00020398148148148147, -0.0005407407407407407],
1535
+ [1.3823471604938273, -0.02875123456790123, 0.00038302469135802463, 0.006344814814814816, 0.00024836419753086417, -0.00047469135802469134],
1536
+ [-1.0411735802469133, 0.055261604938271605, -0.0004404320987654321, 0.0002154938271604939, 0.00017484567901234564, -0.0002017901234567901]]
1537
+ cool_eir_ft_spec = cool_eir_coeff_perf_map.select { |i| [0, 1, 2, 4].include? cool_eir_coeff_perf_map.index(i) }
1538
+ cool_eir_ft_spec_3 = cool_eir_coeff_perf_map.select { |i| [0, 1, 4].include? cool_eir_coeff_perf_map.index(i) }
1539
+ cool_eir_fflow_spec = [[1, 0, 0]] * 4
1540
+ cool_cap_fflow_spec = [[1, 0, 0]] * 4
1541
+ cap_ratio_seer_3 = cool_capacity_ratios.select { |i| [0, 1, 3].include? cool_capacity_ratios.index(i) }
1542
+ fan_speed_seer_3 = cool_fan_speed_ratios.select { |i| [0, 1, 3].include? cool_fan_speed_ratios.index(i) }
1543
+ cool_eers = calc_eers_cooling_4speed(runner, heat_pump.cooling_efficiency_seer, cool_c_d, cap_ratio_seer_3, fan_speed_seer_3, fan_power_rated, cool_eir_ft_spec_3, cool_cap_ft_spec_3)
1544
+ end
1545
+ return cool_rated_airflow_rate, cool_fan_speed_ratios, cool_capacity_ratios, cool_shrs, cool_eers, cool_cap_ft_spec, cool_eir_ft_spec, cool_cap_fflow_spec, cool_eir_fflow_spec
1546
+ end
1547
+
1548
+ def self.get_default_compressor_type(hvac_type, seer)
1549
+ if [HPXML::HVACTypeCentralAirConditioner,
1550
+ HPXML::HVACTypeHeatPumpAirToAir].include? hvac_type
1551
+ if seer <= 15
1552
+ return HPXML::HVACCompressorTypeSingleStage
1553
+ elsif seer <= 21
1554
+ return HPXML::HVACCompressorTypeTwoStage
1555
+ elsif seer > 21
1556
+ return HPXML::HVACCompressorTypeVariableSpeed
1557
+ end
1637
1558
  end
1559
+ return
1638
1560
  end
1639
1561
 
1640
1562
  def self.get_default_ceiling_fan_power()
@@ -1740,12 +1662,12 @@ class HVAC
1740
1662
  pump_mfr_sensor.setKeyName(pump.name.to_s)
1741
1663
 
1742
1664
  # Internal variable
1743
- pump_rated_mfr_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Pump Maximum Mass Flow Rate')
1665
+ pump_rated_mfr_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, EPlus::EMSIntVarPumpMFR)
1744
1666
  pump_rated_mfr_var.setName("#{pump.name} rated mfr")
1745
1667
  pump_rated_mfr_var.setInternalDataIndexKeyName(pump.name.to_s)
1746
1668
 
1747
1669
  # Actuator
1748
- pump_pressure_rise_act = OpenStudio::Model::EnergyManagementSystemActuator.new(pump, 'Pump', 'Pump Pressure Rise')
1670
+ pump_pressure_rise_act = OpenStudio::Model::EnergyManagementSystemActuator.new(pump, *EPlus::EMSActuatorPumpPressureRise)
1749
1671
  pump_pressure_rise_act.setName("#{pump.name} pressure rise act")
1750
1672
 
1751
1673
  # Program
@@ -1774,11 +1696,11 @@ class HVAC
1774
1696
  hvac_objects = []
1775
1697
 
1776
1698
  if fan_or_pump.is_a?(OpenStudio::Model::FanOnOff) || fan_or_pump.is_a?(OpenStudio::Model::FanVariableVolume)
1777
- fan_or_pump_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Fan Electric Energy')
1699
+ fan_or_pump_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Fan #{EPlus::FuelTypeElectricity} Energy")
1778
1700
  elsif fan_or_pump.is_a? OpenStudio::Model::PumpVariableSpeed
1779
- fan_or_pump_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Pump Electric Energy')
1701
+ fan_or_pump_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Pump #{EPlus::FuelTypeElectricity} Energy")
1780
1702
  elsif fan_or_pump.is_a? OpenStudio::Model::ElectricEquipment
1781
- fan_or_pump_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Electric Equipment Electric Energy')
1703
+ fan_or_pump_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Electric Equipment #{EPlus::FuelTypeElectricity} Energy")
1782
1704
  else
1783
1705
  fail "Unexpected fan/pump object '#{fan_or_pump.name}'."
1784
1706
  end
@@ -1792,7 +1714,7 @@ class HVAC
1792
1714
  if clg_object.is_a? OpenStudio::Model::EvaporativeCoolerDirectResearchSpecial
1793
1715
  var = 'Evaporative Cooler Water Volume'
1794
1716
  else
1795
- var = 'Cooling Coil Electric Energy'
1717
+ var = "Cooling Coil #{EPlus::FuelTypeElectricity} Energy"
1796
1718
  end
1797
1719
  clg_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
1798
1720
  clg_object_sensor.setName("#{clg_object.name} s")
@@ -1803,9 +1725,9 @@ class HVAC
1803
1725
  if htg_object.nil?
1804
1726
  htg_object_sensor = nil
1805
1727
  else
1806
- var = "Heating Coil #{EPlus.output_fuel_map(EPlus::FuelTypeElectricity)} Energy"
1728
+ var = "Heating Coil #{EPlus::FuelTypeElectricity} Energy"
1807
1729
  if htg_object.is_a? OpenStudio::Model::CoilHeatingGas
1808
- var = "Heating Coil #{EPlus.output_fuel_map(htg_object.fuelType)} Energy"
1730
+ var = "Heating Coil #{htg_object.fuelType} Energy"
1809
1731
  elsif htg_object.is_a? OpenStudio::Model::ZoneHVACBaseboardConvectiveWater
1810
1732
  var = 'Baseboard Total Heating Energy'
1811
1733
  elsif htg_object.is_a? OpenStudio::Model::ZoneHVACFourPipeFanCoil
@@ -1821,9 +1743,9 @@ class HVAC
1821
1743
  if backup_htg_object.nil?
1822
1744
  backup_htg_object_sensor = nil
1823
1745
  else
1824
- var = "Heating Coil #{EPlus.output_fuel_map(EPlus::FuelTypeElectricity)} Energy"
1746
+ var = "Heating Coil #{EPlus::FuelTypeElectricity} Energy"
1825
1747
  if backup_htg_object.is_a? OpenStudio::Model::CoilHeatingGas
1826
- var = "Heating Coil #{EPlus.output_fuel_map(backup_htg_object.fuelType)} Energy"
1748
+ var = "Heating Coil #{backup_htg_object.fuelType} Energy"
1827
1749
  end
1828
1750
 
1829
1751
  backup_htg_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
@@ -1900,7 +1822,7 @@ class HVAC
1900
1822
  dehumidifier_sens_htg = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Dehumidifier Sensible Heating Rate')
1901
1823
  dehumidifier_sens_htg.setName("#{zone_hvac.name} sens htg")
1902
1824
  dehumidifier_sens_htg.setKeyName(zone_hvac.name.to_s)
1903
- dehumidifier_power = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Dehumidifier Electric Power')
1825
+ dehumidifier_power = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Zone Dehumidifier #{EPlus::FuelTypeElectricity} Rate")
1904
1826
  dehumidifier_power.setName("#{zone_hvac.name} power htg")
1905
1827
  dehumidifier_power.setKeyName(zone_hvac.name.to_s)
1906
1828
 
@@ -1916,7 +1838,7 @@ class HVAC
1916
1838
  dehumidifier_load_adj.setSpace(living_space)
1917
1839
  dehumidifier_load_adj.setSchedule(model.alwaysOnDiscreteSchedule)
1918
1840
 
1919
- dehumidifier_load_adj_act = OpenStudio::Model::EnergyManagementSystemActuator.new(dehumidifier_load_adj, 'OtherEquipment', 'Power Level')
1841
+ dehumidifier_load_adj_act = OpenStudio::Model::EnergyManagementSystemActuator.new(dehumidifier_load_adj, *EPlus::EMSActuatorOtherEquipmentPower)
1920
1842
  dehumidifier_load_adj_act.setName("#{zone_hvac.name} sens htg adj act")
1921
1843
 
1922
1844
  # EMS program
@@ -1954,7 +1876,7 @@ class HVAC
1954
1876
  htg_supp_coil.setGasBurnerEfficiency(efficiency)
1955
1877
  htg_supp_coil.setParasiticElectricLoad(0)
1956
1878
  htg_supp_coil.setParasiticGasLoad(0)
1957
- htg_supp_coil.setFuelType(EPlus.input_fuel_map(fuel))
1879
+ htg_supp_coil.setFuelType(EPlus.fuel_type(fuel))
1958
1880
  end
1959
1881
  htg_supp_coil.setName(obj_name + ' ' + Constants.ObjectNameBackupHeatingCoil)
1960
1882
  if not capacity.nil?
@@ -1963,7 +1885,7 @@ class HVAC
1963
1885
  return htg_supp_coil
1964
1886
  end
1965
1887
 
1966
- def self.create_supply_fan(model, obj_name, num_speeds, fan_power_installed)
1888
+ def self.create_supply_fan(model, obj_name, num_speeds, fan_watts_per_cfm)
1967
1889
  if num_speeds == 1
1968
1890
  fan = OpenStudio::Model::FanOnOff.new(model, model.alwaysOnDiscreteSchedule)
1969
1891
  else
@@ -1971,14 +1893,7 @@ class HVAC
1971
1893
  fan_eff_curve = create_curve_cubic(model, [0, 1, 0, 0], obj_name + ' fan eff curve', 0, 1, 0.01, 1)
1972
1894
  fan = OpenStudio::Model::FanOnOff.new(model, model.alwaysOnDiscreteSchedule, fan_power_curve, fan_eff_curve)
1973
1895
  end
1974
- if fan_power_installed > 0
1975
- fan_eff = 0.75 # Overall Efficiency of the Fan, Motor and Drive
1976
- fan.setFanEfficiency(fan_eff)
1977
- fan.setPressureRise(calc_fan_pressure_rise(fan_eff, fan_power_installed))
1978
- else
1979
- fan.setFanEfficiency(1)
1980
- fan.setPressureRise(0)
1981
- end
1896
+ set_fan_power(fan, fan_watts_per_cfm)
1982
1897
  fan.setName(obj_name + ' supply fan')
1983
1898
  fan.setEndUseSubcategory('supply fan')
1984
1899
  fan.setMotorEfficiency(1.0)
@@ -1986,7 +1901,7 @@ class HVAC
1986
1901
  return fan
1987
1902
  end
1988
1903
 
1989
- def self.create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil, htg_supp_coil, supp_max_temp = nil, htg_cfm: nil, clg_cfm: nil)
1904
+ def self.create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil, htg_supp_coil, supp_max_temp = nil)
1990
1905
  air_loop_unitary = OpenStudio::Model::AirLoopHVACUnitarySystem.new(model)
1991
1906
  air_loop_unitary.setName(obj_name + ' unitary system')
1992
1907
  air_loop_unitary.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
@@ -2011,14 +1926,6 @@ class HVAC
2011
1926
  air_loop_unitary.setMaximumOutdoorDryBulbTemperatureforSupplementalHeaterOperation(UnitConversions.convert(supp_max_temp, 'F', 'C'))
2012
1927
  end
2013
1928
  air_loop_unitary.setSupplyAirFlowRateWhenNoCoolingorHeatingisRequired(0)
2014
- if not clg_cfm.nil? # Hidden feature; used only for HERS DSE test
2015
- air_loop_unitary.setSupplyAirFlowRateMethodDuringCoolingOperation('SupplyAirFlowRate')
2016
- air_loop_unitary.setSupplyAirFlowRateDuringCoolingOperation(UnitConversions.convert(clg_cfm, 'cfm', 'm^3/s'))
2017
- end
2018
- if not htg_cfm.nil? # Hidden feature; used only for HERS DSE test
2019
- air_loop_unitary.setSupplyAirFlowRateMethodDuringHeatingOperation('SupplyAirFlowRate')
2020
- air_loop_unitary.setSupplyAirFlowRateDuringHeatingOperation(UnitConversions.convert(htg_cfm, 'cfm', 'm^3/s'))
2021
- end
2022
1929
  return air_loop_unitary
2023
1930
  end
2024
1931
 
@@ -2047,10 +1954,14 @@ class HVAC
2047
1954
  return air_loop
2048
1955
  end
2049
1956
 
2050
- def self.apply_dehumidifier_ief_to_ef_inputs(w_coeff, ef_coeff, ief, water_removal_rate)
1957
+ def self.apply_dehumidifier_ief_to_ef_inputs(dh_type, w_coeff, ef_coeff, ief, water_removal_rate)
2051
1958
  # Shift inputs under IEF test conditions to E+ supported EF test conditions
2052
1959
  # test conditions
2053
- ief_db = UnitConversions.convert(65.0, 'F', 'C') # degree C
1960
+ if dh_type == HPXML::DehumidifierTypePortable
1961
+ ief_db = UnitConversions.convert(65.0, 'F', 'C') # degree C
1962
+ elsif dh_type == HPXML::DehumidifierTypeWholeHome
1963
+ ief_db = UnitConversions.convert(73.0, 'F', 'C') # degree C
1964
+ end
2054
1965
  rh = 60.0 # for both EF and IEF test conditions, %
2055
1966
 
2056
1967
  # Independent variables applied to curve equations
@@ -2069,9 +1980,10 @@ class HVAC
2069
1980
  return ef_input, water_removal_rate_input
2070
1981
  end
2071
1982
 
2072
- def self.get_electric_auxiliary_energy(heating_system, furnace_capacity_kbtuh = nil)
2073
- # Get boiler/furnace EAE
2074
-
1983
+ def self.get_default_boiler_eae(heating_system)
1984
+ if heating_system.heating_system_type != HPXML::HVACTypeBoiler
1985
+ return
1986
+ end
2075
1987
  if not heating_system.electric_auxiliary_energy.nil?
2076
1988
  return heating_system.electric_auxiliary_energy
2077
1989
  end
@@ -2079,82 +1991,57 @@ class HVAC
2079
1991
  # From ANSI/RESNET/ICC 301-2019 Standard
2080
1992
  fuel = heating_system.heating_system_fuel
2081
1993
 
2082
- if heating_system.heating_system_type == HPXML::HVACTypeBoiler
2083
- if heating_system.is_shared_system
2084
- distribution_system = heating_system.distribution_system
2085
- distribution_type = distribution_system.distribution_system_type
1994
+ if heating_system.is_shared_system
1995
+ distribution_system = heating_system.distribution_system
1996
+ distribution_type = distribution_system.distribution_system_type
2086
1997
 
2087
- if distribution_type == HPXML::HVACDistributionTypeHydronic
2088
- # Shared boiler w/ baseboard/radiators/etc
2089
- if heating_system.shared_loop_watts.nil?
2090
- return 220.0 # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
1998
+ if distribution_type == HPXML::HVACDistributionTypeHydronic
1999
+ # Shared boiler w/ baseboard/radiators/etc
2000
+ if heating_system.shared_loop_watts.nil?
2001
+ return 220.0 # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
2002
+ else
2003
+ sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
2004
+ n_dweq = heating_system.number_of_units_served.to_f
2005
+ aux_in = 0.0
2006
+ end
2007
+ elsif distribution_type == HPXML::HVACDistributionTypeHydronicAndAir
2008
+ hydronic_and_air_type = distribution_system.hydronic_and_air_type
2009
+ if hydronic_and_air_type == HPXML::HydronicAndAirTypeFanCoil
2010
+ # Shared boiler w/ fan coil
2011
+ if heating_system.shared_loop_watts.nil? || heating_system.fan_coil_watts.nil?
2012
+ return 438.0 # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
2091
2013
  else
2092
2014
  sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
2093
2015
  n_dweq = heating_system.number_of_units_served.to_f
2094
- aux_in = 0.0
2016
+ aux_in = UnitConversions.convert(heating_system.fan_coil_watts, 'W', 'kW')
2095
2017
  end
2096
- elsif distribution_type == HPXML::HVACDistributionTypeHydronicAndAir
2097
- hydronic_and_air_type = distribution_system.hydronic_and_air_type
2098
- if hydronic_and_air_type == HPXML::HydronicAndAirTypeFanCoil
2099
- # Shared boiler w/ fan coil
2100
- if heating_system.shared_loop_watts.nil? || heating_system.fan_coil_watts.nil?
2101
- return 438.0 # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
2102
- else
2103
- sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
2104
- n_dweq = heating_system.number_of_units_served.to_f
2105
- aux_in = UnitConversions.convert(heating_system.fan_coil_watts, 'W', 'kW')
2106
- end
2107
- elsif hydronic_and_air_type == HPXML::HydronicAndAirTypeWaterLoopHeatPump
2108
- # Shared boiler w/ WLHP
2109
- if heating_system.shared_loop_watts.nil?
2110
- return 265.0 # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
2111
- else
2112
- sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
2113
- n_dweq = heating_system.number_of_units_served.to_f
2114
- aux_in = 0.0 # ANSI/RESNET/ICC 301-2019 Section 4.4.7.2
2115
- end
2018
+ elsif hydronic_and_air_type == HPXML::HydronicAndAirTypeWaterLoopHeatPump
2019
+ # Shared boiler w/ WLHP
2020
+ if heating_system.shared_loop_watts.nil?
2021
+ return 265.0 # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
2116
2022
  else
2117
- fail "Unexpected distribution type '#{hydronic_and_air_type}' for shared boiler."
2023
+ sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
2024
+ n_dweq = heating_system.number_of_units_served.to_f
2025
+ aux_in = 0.0 # ANSI/RESNET/ICC 301-2019 Section 4.4.7.2
2118
2026
  end
2119
2027
  else
2120
- fail "Unexpected distribution type '#{distribution_type}' for shared boiler."
2028
+ fail "Unexpected distribution type '#{hydronic_and_air_type}' for shared boiler."
2121
2029
  end
2030
+ else
2031
+ fail "Unexpected distribution type '#{distribution_type}' for shared boiler."
2032
+ end
2122
2033
 
2123
- # ANSI/RESNET/ICC 301-2019 Equation 4.4-5
2124
- return ((sp_kw / n_dweq) + aux_in) * 2080.0 # kWh/yr
2125
-
2126
- else # In-unit boilers
2127
-
2128
- if [HPXML::FuelTypeNaturalGas,
2129
- HPXML::FuelTypePropane,
2130
- HPXML::FuelTypeElectricity,
2131
- HPXML::FuelTypeWoodCord,
2132
- HPXML::FuelTypeWoodPellets].include? fuel
2133
- return 170.0 # kWh/yr
2134
- elsif [HPXML::FuelTypeOil,
2135
- HPXML::FuelTypeOil1,
2136
- HPXML::FuelTypeOil2,
2137
- HPXML::FuelTypeOil4,
2138
- HPXML::FuelTypeOil5or6,
2139
- HPXML::FuelTypeDiesel,
2140
- HPXML::FuelTypeKerosene,
2141
- HPXML::FuelTypeCoal,
2142
- HPXML::FuelTypeCoalAnthracite,
2143
- HPXML::FuelTypeCoalBituminous,
2144
- HPXML::FuelTypeCoke].include? fuel
2145
- return 330.0 # kWh/yr
2146
- end
2034
+ # ANSI/RESNET/ICC 301-2019 Equation 4.4-5
2035
+ return ((sp_kw / n_dweq) + aux_in) * 2080.0 # kWh/yr
2147
2036
 
2148
- end
2149
- elsif heating_system.heating_system_type == HPXML::HVACTypeFurnace
2037
+ else # In-unit boilers
2150
2038
 
2151
- # Furnaces
2152
2039
  if [HPXML::FuelTypeNaturalGas,
2153
2040
  HPXML::FuelTypePropane,
2154
2041
  HPXML::FuelTypeElectricity,
2155
2042
  HPXML::FuelTypeWoodCord,
2156
2043
  HPXML::FuelTypeWoodPellets].include? fuel
2157
- return 149.0 + 10.3 * furnace_capacity_kbtuh # kWh/yr
2044
+ return 170.0 # kWh/yr
2158
2045
  elsif [HPXML::FuelTypeOil,
2159
2046
  HPXML::FuelTypeOil1,
2160
2047
  HPXML::FuelTypeOil2,
@@ -2166,11 +2053,10 @@ class HVAC
2166
2053
  HPXML::FuelTypeCoalAnthracite,
2167
2054
  HPXML::FuelTypeCoalBituminous,
2168
2055
  HPXML::FuelTypeCoke].include? fuel
2169
- return 439.0 + 5.5 * furnace_capacity_kbtuh # kWh/yr
2056
+ return 330.0 # kWh/yr
2170
2057
  end
2171
2058
 
2172
2059
  end
2173
- return 0.0
2174
2060
  end
2175
2061
 
2176
2062
  def self.calc_heat_cap_ft_spec_using_capacity_17F(num_speeds, heat_pump)
@@ -3401,21 +3287,17 @@ class HVAC
3401
3287
  end
3402
3288
  end
3403
3289
 
3404
- def self.get_fan_power_installed(seer)
3405
- if seer <= 15
3406
- return 0.365 # W/cfm
3290
+ def self.set_fan_power(fan, fan_watts_per_cfm)
3291
+ if fan_watts_per_cfm > 0
3292
+ fan_eff = 0.75 # Overall Efficiency of the Fan, Motor and Drive
3293
+ fan.setFanEfficiency(fan_eff)
3294
+ fan.setPressureRise(fan_eff * fan_watts_per_cfm / UnitConversions.convert(1.0, 'cfm', 'm^3/s')) # Pa
3407
3295
  else
3408
- return 0.14 # W/cfm
3296
+ fan.setFanEfficiency(1)
3297
+ fan.setPressureRise(0)
3409
3298
  end
3410
3299
  end
3411
3300
 
3412
- def self.calc_fan_pressure_rise(fan_eff, fan_power)
3413
- # Calculates needed fan pressure rise to achieve a given fan power with an assumed efficiency.
3414
- # Previously we calculated the fan efficiency from an assumed pressure rise, which could lead to
3415
- # errors (fan efficiencies > 1).
3416
- return fan_eff * fan_power / UnitConversions.convert(1.0, 'cfm', 'm^3/s') # Pa
3417
- end
3418
-
3419
3301
  def self.calc_pump_rated_flow_rate(pump_eff, pump_w, pump_head_pa)
3420
3302
  # Calculate needed pump rated flow rate to achieve a given pump power with an assumed
3421
3303
  # efficiency and pump head.
@@ -4136,7 +4018,7 @@ class HVAC
4136
4018
 
4137
4019
  def self.get_default_duct_surface_area(duct_type, ncfl_ag, cfa_served, n_returns)
4138
4020
  # Fraction of primary ducts (ducts outside conditioned space)
4139
- f_out = (ncfl_ag == 1) ? 1.0 : 0.75
4021
+ f_out = (ncfl_ag <= 1) ? 1.0 : 0.75
4140
4022
 
4141
4023
  if duct_type == HPXML::DuctTypeSupply
4142
4024
  primary_duct_area = 0.27 * cfa_served * f_out
@@ -4175,12 +4057,6 @@ class HVAC
4175
4057
  return 30.0 # W/ton, per ANSI/RESNET/ICC 301-2019 Section 4.4.5 (closed loop)
4176
4058
  end
4177
4059
 
4178
- def self.get_default_gshp_fan_power()
4179
- # Should this be 0.2 W/cfm per ANSI/RESNET/ICC 301-2019 Section 4.4.5? (or is 0.2 W/cfm
4180
- # interpreted as the _additional_ fan power beyond that captured in the rating test?)
4181
- return 0.5 # W/cfm
4182
- end
4183
-
4184
4060
  def self.apply_shared_systems(hpxml)
4185
4061
  apply_shared_cooling_systems(hpxml)
4186
4062
  apply_shared_heating_systems(hpxml)
@@ -4302,7 +4178,7 @@ class HVAC
4302
4178
  fraction_cool_load_served: 0.0)
4303
4179
 
4304
4180
  # Boiler
4305
- heating_system.electric_auxiliary_energy = get_electric_auxiliary_energy(heating_system)
4181
+ heating_system.electric_auxiliary_energy = get_default_boiler_eae(heating_system)
4306
4182
  heating_system.fraction_heat_load_served = fraction_heat_load_served * (1.0 - 1.0 / heating_system.wlhp_heating_efficiency_cop)
4307
4183
  heating_system.distribution_system_idref = "#{heating_system.id}_Baseboard"
4308
4184
  hpxml.hvac_distributions.add(id: heating_system.distribution_system_idref,