urbanopt-cli 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95f4b510da000f3f99a23e58a665722bfd5ee1526f662f5f7ebd567398963f36
4
- data.tar.gz: 876a39d424ca5ee07126da660e3aad478b5ea7334bec3538e266d9bd54586c57
3
+ metadata.gz: 9e2bd8a0e017ea6ee23ba2e879c2a907119cb5423bd2e39523e1a82ef5de86a9
4
+ data.tar.gz: ee8255001d28b3975c512e507685f78d139e0d2d2ad5f38aa55d41a5c1b1b5f4
5
5
  SHA512:
6
- metadata.gz: de1e2b6298df2a464a401e485c22ee8f8c67ee99486b94c50bc5ae6890c1e571433666eaa90de54e2d969e161bd7db2baae6da6b6e673e2139cf349300ad7896
7
- data.tar.gz: d5ed2edc0bfdaddaf4860348d460c9dc74c27a82b850d7215b0bea230539fdb46969aa6b357f3c4c161bacc11e2fc82c24f7455a391a311c2da5c45b47d48ba2
6
+ metadata.gz: 4afe5bea5d1344209273015af0d7ac1d9ddaf59daec4ae1faeb47019e31ce8262201542ae1ce8f6db805c5fce1471730526b34d1dc46c0bbc0cfe7c8699c86f1
7
+ data.tar.gz: 97ab90105e0e4536c388e36846bfec5b268754813b2361628ae134a80b4b30d229d852d7f15c885900c4aa182a3fec7d5da9cb9ec2610acad0db287df87ed440
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 0.5.0
4
+
5
+ Date Range 11/17/20 - 12/16/20
6
+
7
+ - Updated dependencies to support OpenStudio 3.1.0
3
8
 
4
9
  ## Version 0.4.1
5
10
 
@@ -1,7 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.10.2)
2
2
  cmake_policy(SET CMP0048 NEW)
3
3
 
4
- project(UrbanOptCLI VERSION 0.3.1)
4
+ project(UrbanOptCLI VERSION 0.4.1)
5
5
 
6
6
  include(FindOpenStudioSDK.cmake)
7
7
 
@@ -89,16 +89,16 @@ option(BUILD_PACKAGE "Build package" OFF)
89
89
  # need to update the MD5sum for each platform and url below
90
90
  if(UNIX)
91
91
  if(APPLE)
92
- set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20200628-darwin.tar.gz")
93
- set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "561b1f581f4cb236f0c4c984af195c93")
92
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20201119-darwin.tar.gz")
93
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "950d0725f8cddd5c31df94b0357e3125")
94
94
  else()
95
- set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20200819-linux.tar.gz")
96
- set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "91894dd2249f376dd28b4cb20dea7732")
95
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20201123-linux.tar.gz")
96
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "596fc8b2383baa2dd9e0bf81644c8593")
97
97
  endif()
98
98
  elseif(WIN32)
99
99
  if(CMAKE_CL_64)
100
- set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20200728-windows.tar.gz")
101
- set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "efd7e7a02ab31468648172b463d3b9a4")
100
+ set(URBANOPT_CLI_GEMS_ZIP_FILENAME "urbanopt-cli-gems-20201119-windows.tar.gz")
101
+ set(URBANOPT_CLI_GEMS_ZIP_EXPECTED_MD5 "f6af2bbfee964d46f756c55e9f74ce84")
102
102
  endif()
103
103
  endif()
104
104
 
@@ -133,7 +133,7 @@ if(UNIX)
133
133
  endif()
134
134
  elseif(WIN32)
135
135
  set(RUBY_ZIP_FILENAME "ruby-2.5.1-win32.tar.gz")
136
- set(RUBY_ZIP_EXPECTED_MD5 "86e4b2376fdbae7467ddc613900e1941")
136
+ set(RUBY_ZIP_EXPECTED_MD5 "96495c32f5933250663df7561fdd6226")
137
137
  endif()
138
138
 
139
139
  set(RUBY_ZIP_LOCAL_PATH "${PROJECT_BINARY_DIR}/${RUBY_ZIP_FILENAME}")
@@ -212,7 +212,7 @@ elseif(UNIX)
212
212
 
213
213
  # These two will set the .deb install path correctly
214
214
  # ubuntu (18.04) uses libqdbm14
215
- set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqdbm14")
215
+ set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqdbm14,sqlite3")
216
216
  set(CPACK_SET_DESTDIR ON)
217
217
  set(CPACK_INSTALL_PREFIX /usr/local/urbanopt-cli-${URBANOPT_CLI_VERSION})
218
218
 
data/Gemfile CHANGED
@@ -34,33 +34,31 @@ allow_local = ENV['FAVOR_LOCAL_GEMS']
34
34
  # end
35
35
 
36
36
  # if allow_local && File.exist?('../urbanopt-scenario-gem')
37
- # gem 'urbanopt-scenario', path: '../urbanopt-scenario-gem'
37
+ # gem 'urbanopt-scenario', path: '../urbanopt-scenario-gem'
38
38
  # elsif allow_local
39
- # gem 'urbanopt-scenario', github: 'URBANopt/urbanopt-scenario-gem', branch: 'develop'
39
+ # gem 'urbanopt-scenario', github: 'URBANopt/urbanopt-scenario-gem', branch: 'develop'
40
40
  # end
41
41
 
42
42
  # if allow_local && File.exist?('../urbanopt-geojson-gem')
43
43
  # gem 'urbanopt-geojson', path: '../urbanopt-geojson-gem'
44
44
  # elsif allow_local
45
- # gem 'urbanopt-geojson', github: 'URBANopt/urbanopt-geojson-gem', branch: 'develop'
45
+ # gem 'urbanopt-geojson', github: 'URBANopt/urbanopt-geojson-gem', branch: 'develop'
46
46
  # end
47
47
 
48
48
  # if allow_local && File.exist?('../urbanopt-reopt-gem')
49
49
  # gem 'urbanopt-reopt', path: '../urbanopt-reopt-gem'
50
50
  # elsif allow_local
51
- # gem 'urbanopt-reopt', github: 'URBANopt/urbanopt-reopt-gem', branch: 'develop'
51
+ # gem 'urbanopt-reopt', github: 'URBANopt/urbanopt-reopt-gem', branch: 'develop'
52
52
  # end
53
53
 
54
- # if allow_local && File.exist?('../openstudio-load-flexibility-measures')
55
- # gem 'openstudio-load-flexibility-measures', path: '../openstudio-load-flexibility-measures'
56
- # elsif allow_local
57
- # gem 'openstudio-load-flexibility-measures', github: 'NREL/openstudio-load-flexibility-measures', branch: 'master'
58
- # else
59
- # gem 'openstudio-load-flexibility-measures', '0.1.3'
60
- # end
54
+ #if allow_local && File.exist?('../openstudio-load-flexibility-measures')
55
+ # gem 'openstudio-load-flexibility-measures', path: '../openstudio-load-flexibility-measures'
56
+ #elsif allow_local
57
+ # gem 'openstudio-load-flexibility-measures', github: 'NREL/openstudio-load-flexibility-measures-gem', branch: 'develop'
58
+ #end
61
59
 
62
60
  # if allow_local && File.exist?('../urbanopt-reporting-gem')
63
61
  # gem 'urbanopt-reporting', path: '../urbanopt-reporting-gem'
64
62
  # elsif allow_local
65
- # gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
63
+ # gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
66
64
  # end
data/README.md CHANGED
@@ -10,6 +10,7 @@ This is the command line interface (CLI) for the URBANopt™ SDK.
10
10
  gem 'urbanopt-cli'
11
11
  ```
12
12
 
13
+
13
14
  And then execute:
14
15
 
15
16
  ```terminal
@@ -22,7 +22,7 @@ allow_local = ENV['FAVOR_LOCAL_GEMS']
22
22
  # if allow_local && File.exist?('../urbanopt-core-gem')
23
23
  # gem 'urbanopt-core', path: '../urbanopt-core-gem'
24
24
  # elsif allow_local
25
- # gem 'urbanopt-core', github: 'URBANopt/urbanopt-core-gem', branch: 'develop'
25
+ # gem 'urbanopt-core', github: 'URBANopt/urbanopt-core-gem', branch: 'develop'
26
26
  # end
27
27
  #
28
28
 
@@ -31,7 +31,7 @@ if allow_local && File.exist?('../openstudio-common-measures-gem')
31
31
  elsif allow_local
32
32
  gem 'openstudio-common-measures', github: 'NREL/openstudio-common-measures-gem', branch: 'develop'
33
33
  else
34
- gem 'openstudio-common-measures', '0.2.0'
34
+ gem 'openstudio-common-measures', '~> 0.3.2'
35
35
  end
36
36
 
37
37
  if allow_local && File.exist?('../openstudio-model-articulation-gem')
@@ -39,7 +39,7 @@ if allow_local && File.exist?('../openstudio-model-articulation-gem')
39
39
  elsif allow_local
40
40
  gem 'openstudio-model-articulation', github: 'NREL/openstudio-model-articulation-gem', branch: 'develop'
41
41
  else
42
- gem 'openstudio-model-articulation', '0.2.0'
42
+ gem 'openstudio-model-articulation', '~> 0.3.1'
43
43
  end
44
44
 
45
45
  if allow_local && File.exist?('../openstudio-load-flexibility-measures-gem')
@@ -47,21 +47,37 @@ if allow_local && File.exist?('../openstudio-load-flexibility-measures-gem')
47
47
  elsif allow_local
48
48
  gem 'openstudio-load-flexibility-measures', github: 'NREL/openstudio-load-flexibility-measures-gem', branch: 'master'
49
49
  else
50
- gem 'openstudio-load-flexibility-measures', '~> 0.1.3'
50
+ gem 'openstudio-load-flexibility-measures', '~> 0.2.1'
51
51
  end
52
52
 
53
- if allow_local && File.exist?('../urbanopt-geojson-gem')
53
+ if allow_local && File.exist?('../openstudio-ee-gem')
54
+ gem 'openstudio-ee', path: '../openstudio-ee-gem'
55
+ elsif allow_local
56
+ gem 'openstudio-ee', github: 'NREL/openstudio-ee-gem', branch: 'develop'
57
+ else
58
+ gem 'openstudio-ee', '~> 0.3.2'
59
+ end
60
+
61
+ if allow_local && File.exist?('../openstudio-calibration-gem')
62
+ gem 'openstudio-calibration', path: '../openstudio-calibration-gem'
63
+ elsif allow_local
64
+ gem 'openstudio-calibration', github: 'NREL/openstudio-calibration-gem', branch: 'develop'
65
+ else
66
+ gem 'openstudio-calibration', '~> 0.3.1'
67
+ end
68
+
69
+ if allow_local && File.exists?('../urbanopt-geojson-gem')
54
70
  gem 'urbanopt-geojson', path: '../urbanopt-geojson-gem'
55
71
  elsif allow_local
56
72
  gem 'urbanopt-geojson', github: 'URBANopt/urbanopt-geojson-gem', branch: 'develop'
57
73
  else
58
- gem 'urbanopt-geojson', '~> 0.4.0'
74
+ gem 'urbanopt-geojson', '~> 0.5.0'
59
75
  end
60
76
 
61
- if allow_local && File.exist?('../urbanopt-reporting-gem')
62
- gem 'urbanopt-reporting', path: '../urbanopt-reporting-gem'
77
+ if allow_local && File.exists?('../urbanopt-reporting-gem')
78
+ gem 'urbanopt-reporting', path: '../urbanotp-reporting-gem'
63
79
  elsif allow_local
64
80
  gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
65
81
  else
66
- gem 'urbanopt-reporting', '~> 0.2.1'
67
- end
82
+ gem 'urbanopt-reporting', '~> 0.3.2'
83
+ end
@@ -31,6 +31,8 @@
31
31
  require 'urbanopt/reporting'
32
32
  require 'openstudio/common_measures'
33
33
  require 'openstudio/model_articulation'
34
+ require 'openstudio/ee_measures'
35
+ require 'openstudio/calibration'
34
36
 
35
37
  require 'json'
36
38
  require 'rexml/document'
@@ -503,6 +505,13 @@ module URBANopt
503
505
  # SCHEDULES
504
506
 
505
507
  args[:schedules_type] = 'stochastic'
508
+ begin
509
+ schedules_random_seed = Float(feature_id)
510
+ if schedules_random_seed % 1 == 0
511
+ args[:schedules_random_seed] = Integer(schedules_random_seed)
512
+ end
513
+ rescue
514
+ end
506
515
 
507
516
  # HVAC
508
517
 
@@ -31,6 +31,8 @@
31
31
  require 'urbanopt/scenario'
32
32
  require 'openstudio/common_measures'
33
33
  require 'openstudio/model_articulation'
34
+ require 'openstudio/ee_measures'
35
+ require 'openstudio/calibration'
34
36
 
35
37
  require 'json'
36
38
 
@@ -31,6 +31,8 @@
31
31
  require 'urbanopt/scenario'
32
32
  require 'openstudio/common_measures'
33
33
  require 'openstudio/model_articulation'
34
+ require 'openstudio/ee_measures'
35
+ require 'openstudio/calibration'
34
36
 
35
37
  require 'json'
36
38
 
@@ -308,7 +310,7 @@ module URBANopt
308
310
 
309
311
  # ChangeBuildingLocation
310
312
  # set skip to false for change building location
311
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', '__SKIP__', false)
313
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', '__SKIP__', false,'ChangeBuildingLocation 2')
312
314
 
313
315
  # cec climate zone takes precedence
314
316
  cec_found = false
@@ -316,7 +318,7 @@ module URBANopt
316
318
  cec_climate_zone = feature.cec_climate_zone
317
319
  if !cec_climate_zone.empty?
318
320
  cec_climate_zone = 'T24-CEC' + cec_climate_zone
319
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', cec_climate_zone)
321
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', cec_climate_zone, 'ChangeBuildingLocation 2')
320
322
  cec_found = true
321
323
  # Temporary fix for CEC climate zone:
322
324
  cec_modified_zone = 'CEC ' + cec_climate_zone
@@ -329,7 +331,7 @@ module URBANopt
329
331
  climate_zone = feature.climate_zone
330
332
  if !climate_zone.empty?
331
333
  climate_zone = 'ASHRAE 169-2013-' + climate_zone
332
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', climate_zone)
334
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', climate_zone, 'ChangeBuildingLocation 2')
333
335
  end
334
336
  rescue StandardError
335
337
  end
@@ -339,7 +341,7 @@ module URBANopt
339
341
  begin
340
342
  weather_filename = feature.weather_filename
341
343
  if !feature.weather_filename.nil? && !feature.weather_filename.empty?
342
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', weather_filename)
344
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', weather_filename, 'ChangeBuildingLocation 2')
343
345
  puts "Setting weather_file_name to #{weather_filename} as specified in the FeatureFile"
344
346
  end
345
347
  rescue StandardError
@@ -347,7 +349,7 @@ module URBANopt
347
349
  epw_file_path = Dir.glob(File.join(File.dirname(__FILE__), '../weather/*.epw'))[0]
348
350
  if !epw_file_path.nil? && !epw_file_path.empty?
349
351
  epw_file_name = File.basename(epw_file_path)
350
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', epw_file_name)
352
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', epw_file_name, 'ChangeBuildingLocation 2')
351
353
  puts "Setting weather_file_name to first epw file found in the weather folder: #{epw_file_name}"
352
354
  else
353
355
  puts 'NO WEATHER FILES SPECIFIED...SIMULATIONS MAY FAIL'
@@ -478,7 +480,7 @@ module URBANopt
478
480
 
479
481
  # ChangeBuildingLocation
480
482
  # set skip to false for change building location
481
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', '__SKIP__', false)
483
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', '__SKIP__', false, 'ChangeBuildingLocation 1')
482
484
 
483
485
  # cec climate zone takes precedence
484
486
  cec_found = false
@@ -486,7 +488,7 @@ module URBANopt
486
488
  cec_climate_zone = feature.cec_climate_zone
487
489
  if !cec_climate_zone.empty?
488
490
  cec_climate_zone = 'T24-CEC' + cec_climate_zone
489
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', cec_climate_zone)
491
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', cec_climate_zone, 'ChangeBuildingLocation 1')
490
492
  cec_found = true
491
493
  # Temporary fix for CEC climate zone:
492
494
  cec_modified_zone = 'CEC ' + cec_climate_zone
@@ -502,7 +504,7 @@ module URBANopt
502
504
  climate_zone = feature.climate_zone
503
505
  if !climate_zone.empty?
504
506
  climate_zone = 'ASHRAE 169-2013-' + climate_zone
505
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', climate_zone)
507
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', climate_zone, 'ChangeBuildingLocation 1')
506
508
  end
507
509
  rescue StandardError
508
510
  end
@@ -512,7 +514,7 @@ module URBANopt
512
514
  begin
513
515
  weather_filename = feature.weather_filename
514
516
  if !feature.weather_filename.nil? && !feature.weather_filename.empty?
515
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', weather_filename)
517
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', weather_filename, 'ChangeBuildingLocation 1')
516
518
  puts "Setting weather_file_name to #{weather_filename} as specified in the FeatureFile"
517
519
  end
518
520
  rescue StandardError
@@ -520,7 +522,7 @@ module URBANopt
520
522
  epw_file_path = Dir.glob(File.join(File.dirname(__FILE__), '../weather/*.epw'))[0]
521
523
  if !epw_file_path.nil? && !epw_file_path.empty?
522
524
  epw_file_name = File.basename(epw_file_path)
523
- OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', epw_file_name)
525
+ OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', epw_file_name, 'ChangeBuildingLocation 1')
524
526
  puts "Setting weather_file_name to first epw file found in the weather folder: #{epw_file_name}"
525
527
  else
526
528
  puts 'NO WEATHER FILES SPECIFIED...SIMULATIONS MAY FAIL'
@@ -14,6 +14,7 @@
14
14
  "end_date": "2019-12-31"
15
15
  }
16
16
  },{
17
+ "name": "ChangeBuildingLocation 1",
17
18
  "measure_dir_name": "ChangeBuildingLocation",
18
19
  "arguments": {
19
20
  "__SKIP__": true,
@@ -53,6 +54,14 @@
53
54
  "floorplan_path": "../files/office_floorplan.json",
54
55
  "__SKIP__": true
55
56
  }
57
+ },{
58
+ "name": "ChangeBuildingLocation 2",
59
+ "measure_dir_name": "ChangeBuildingLocation",
60
+ "arguments": {
61
+ "__SKIP__": true,
62
+ "weather_file_name": "USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.epw",
63
+ "climate_zone": "ASHRAE 169-2013-6A"
64
+ }
56
65
  },{
57
66
  "name": "create_typical_building_from_model 1",
58
67
  "measure_dir_name": "create_typical_building_from_model",
@@ -1,3 +1,3 @@
1
1
  Dependency=Template Month Dependency=Template Year clothes_washer_efficiency_imef clothes_washer_rated_annual_kwh clothes_washer_label_electric_rate clothes_washer_label_gas_rate clothes_washer_label_annual_gas_cost clothes_washer_label_usage clothes_washer_capacity Source
2
- ft^3/kWh-cyc kWh/yr $/kWh $/therm $ cyc/wk ft^3
2
+ ft^2/kWh-cyc kWh/yr $/kWh $/therm $ cyc/wk ft^3
3
3
  Sep 2020 2.92 75 0.12 1.09 7 6 4.5 "ResStock ""EnergyStar Most Efficient, 100% Usage"""
@@ -1,4 +1,4 @@
1
- Dependency=Template Month Dependency=Template Year Dependency=water_heater_fuel_type water_heater_efficiency_ef water_heater_tank_volume Source
1
+ Dependency=Template Month Dependency=Template Year Dependency=water_heater_fuel_type water_heater_efficiency water_heater_tank_volume Source
2
2
  ratio gal
3
3
  Sep 2020 electricity 0.93 40 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
4
4
  Sep 2020 natural gas 0.61 40 "National ERI Target Procedure ENERGY STAR Certified Homes, Version 3.1 (Rev. 10)"
@@ -0,0 +1,20 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: nrel/openstudio:3.1.0
6
+ steps:
7
+ - checkout
8
+ - run:
9
+ name: Install gems
10
+ command: |
11
+ rm -f Gemfile.lock && bundle install
12
+ - run:
13
+ name: Run tests
14
+ command: |
15
+ bundle exec rake test_all
16
+ - store_artifacts:
17
+ path: workflow/tests/results
18
+ destination: results
19
+ - store_test_results:
20
+ path: test/reports
@@ -0,0 +1,13 @@
1
+ ## Pull Request Description
2
+
3
+ [description here]
4
+
5
+ ## Checklist
6
+
7
+ Not all may apply:
8
+
9
+ - [ ] EPvalidator.xml has been updated
10
+ - [ ] Tests (and test files) have been updated
11
+ - [ ] Documentation has been updated
12
+ - [ ] `openstudio tasks.rb update_measures` has been run
13
+ - [ ] No unexpected regression test changes on CI
@@ -134,7 +134,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
134
134
 
135
135
  arg = OpenStudio::Measure::OSArgument.makeChoiceArgument('schedules_type', schedules_type_choices, true)
136
136
  arg.setDisplayName('Schedules: Type')
137
- arg.setDescription("The type of occupant-related schedules to use. Schedules corresponding to 'default' are average (e.g., Building America). Schedules corresponding to 'stochastic' are generated using time-inhomogenous Markov chains derived from American Time Use Survey data, and supplemented with sampling duration and power level from NEEA RBSA data as well as DHW draw duration and flow rate from Aquacraft/AWWA data.")
137
+ arg.setDescription("The type of occupant-related schedules to use. Schedules corresponding to 'default' are average (e.g., Building America). Schedules corresponding to 'stochastic' are generated using time-inhomogeneous Markov chains derived from American Time Use Survey data, and supplemented with sampling duration and power level from NEEA RBSA data as well as DHW draw duration and flow rate from Aquacraft/AWWA data.")
138
138
  arg.setDefaultValue('default')
139
139
  args << arg
140
140
 
@@ -167,6 +167,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
167
167
  arg.setDescription("This numeric field should contain the ending day of the ending month (must be valid for month) for the vacancy period desired. Only applies if the schedules type is 'stochastic'.")
168
168
  args << arg
169
169
 
170
+ arg = OpenStudio::Measure::OSArgument.makeIntegerArgument('schedules_random_seed', false)
171
+ arg.setDisplayName('Schedules: Random Seed')
172
+ arg.setUnits('#')
173
+ arg.setDescription("This numeric field is the seed for the random number generator. Only applies if the schedules type is 'stochastic'.")
174
+ args << arg
175
+
170
176
  arg = OpenStudio::Measure::OSArgument.makeStringArgument('weather_station_epw_filepath', true)
171
177
  arg.setDisplayName('EnergyPlus Weather (EPW) Filepath')
172
178
  arg.setDescription('Path of the EPW file.')
@@ -370,16 +376,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
370
376
  arg.setDefaultValue('6:12')
371
377
  args << arg
372
378
 
373
- roof_structure_choices = OpenStudio::StringVector.new
374
- roof_structure_choices << 'truss, cantilever'
375
- roof_structure_choices << 'rafter'
376
-
377
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_roof_structure', roof_structure_choices, true)
378
- arg.setDisplayName('Geometry: Roof Structure')
379
- arg.setDescription('The roof structure of the building. Ignored if the building has a flat roof.')
380
- arg.setDefaultValue('truss, cantilever')
381
- args << arg
382
-
383
379
  attic_type_choices = OpenStudio::StringVector.new
384
380
  attic_type_choices << HPXML::AtticTypeVented
385
381
  attic_type_choices << HPXML::AtticTypeUnvented
@@ -485,6 +481,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
485
481
  arg.setDescription('Assembly R-value for the foundation walls. Only applies to basements/crawlspaces. If provided, overrides the previous foundation wall insulation inputs.')
486
482
  args << arg
487
483
 
484
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('foundation_wall_thickness', true)
485
+ arg.setDisplayName('Foundation: Wall Thickness')
486
+ arg.setDescription('The thickness of the foundation wall.')
487
+ arg.setDefaultValue(Constants.Auto)
488
+ args << arg
489
+
488
490
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_perimeter_insulation_r', true)
489
491
  arg.setDisplayName('Slab: Perimeter Insulation Nominal R-value')
490
492
  arg.setUnits('h-ft^2-R/Btu')
@@ -513,18 +515,24 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
513
515
  arg.setDefaultValue(0)
514
516
  args << arg
515
517
 
516
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_carpet_fraction', true)
518
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('slab_thickness', true)
519
+ arg.setDisplayName('Slab: Thickness')
520
+ arg.setDescription('The thickness of the slab.')
521
+ arg.setDefaultValue(Constants.Auto)
522
+ args << arg
523
+
524
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('slab_carpet_fraction', true)
517
525
  arg.setDisplayName('Slab: Carpet Fraction')
518
526
  arg.setUnits('Frac')
519
527
  arg.setDescription('Fraction of the slab floor area that is carpeted.')
520
- arg.setDefaultValue(0)
528
+ arg.setDefaultValue(Constants.Auto)
521
529
  args << arg
522
530
 
523
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_carpet_r', true)
531
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('slab_carpet_r', true)
524
532
  arg.setDisplayName('Slab: Carpet R-value')
525
533
  arg.setUnits('h-ft^2-R/Btu')
526
534
  arg.setDescription('R-value of the slab carpet.')
527
- arg.setDefaultValue(0)
535
+ arg.setDefaultValue(Constants.Auto)
528
536
  args << arg
529
537
 
530
538
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_assembly_r', true)
@@ -574,16 +582,16 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
574
582
  arg.setDefaultValue(Constants.Auto)
575
583
  args << arg
576
584
 
577
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('roof_emittance', true)
585
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('roof_emittance', true)
578
586
  arg.setDisplayName('Roof: Emittance')
579
587
  arg.setDescription('The emittance of the roof.')
580
- arg.setDefaultValue(0.92)
588
+ arg.setDefaultValue(Constants.Auto)
581
589
  args << arg
582
590
 
583
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('roof_radiant_barrier', true)
591
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('roof_radiant_barrier', true)
584
592
  arg.setDisplayName('Roof: Has Radiant Barrier')
585
593
  arg.setDescription('Specifies whether the attic has a radiant barrier.')
586
- arg.setDefaultValue(false)
594
+ arg.setDefaultValue(Constants.Auto)
587
595
  args << arg
588
596
 
589
597
  roof_radiant_barrier_grade_choices = OpenStudio::StringVector.new
@@ -704,10 +712,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
704
712
  arg.setDefaultValue(Constants.Auto)
705
713
  args << arg
706
714
 
707
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('wall_emittance', true)
715
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('wall_emittance', true)
708
716
  arg.setDisplayName('Wall: Emittance')
709
717
  arg.setDescription('The emittance of the exterior walls.')
710
- arg.setDefaultValue(0.92)
718
+ arg.setDefaultValue(Constants.Auto)
711
719
  args << arg
712
720
 
713
721
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_front_wwr', true)
@@ -990,10 +998,22 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
990
998
 
991
999
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_electric_auxiliary_energy', false)
992
1000
  arg.setDisplayName('Heating System: Electric Auxiliary Energy')
993
- arg.setDescription('The electric auxiliary energy of the heating system.')
1001
+ arg.setDescription("The electric auxiliary energy of the heating system. Applies to #{HPXML::HVACTypeBoiler}.")
994
1002
  arg.setUnits('kWh/yr')
995
1003
  args << arg
996
1004
 
1005
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fan_power_watts_per_cfm', false)
1006
+ arg.setDisplayName('Heating System: Fan Power')
1007
+ arg.setDescription("Blower fan power. Applies to #{HPXML::HVACTypeFurnace}.")
1008
+ arg.setUnits('W/CFM')
1009
+ args << arg
1010
+
1011
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fan_power_watts', false)
1012
+ arg.setDisplayName('Heating System: Fan Power')
1013
+ arg.setDescription("Blower fan power. Ignored for #{HPXML::HVACTypeElectricResistance}, #{HPXML::HVACTypeFurnace}, and #{HPXML::HVACTypeBoiler}.")
1014
+ arg.setUnits('W')
1015
+ args << arg
1016
+
997
1017
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heating_system_has_flue_or_chimney', true)
998
1018
  arg.setDisplayName('Heating System: Has Flue or Chimney')
999
1019
  arg.setDescription('Whether the heating system has a flue or chimney.')
@@ -1051,6 +1071,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1051
1071
  arg.setDefaultValue(false)
1052
1072
  args << arg
1053
1073
 
1074
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_fan_power_watts_per_cfm', false)
1075
+ arg.setDisplayName('Cooling System: Fan Power')
1076
+ arg.setDescription("Blower fan power. Applies to #{HPXML::HVACTypeCentralAirConditioner}, #{HPXML::HVACTypeEvaporativeCooler}, and #{HPXML::HVACTypeMiniSplitAirConditioner}.")
1077
+ arg.setUnits('W/CFM')
1078
+ args << arg
1079
+
1054
1080
  heat_pump_type_choices = OpenStudio::StringVector.new
1055
1081
  heat_pump_type_choices << 'none'
1056
1082
  heat_pump_type_choices << HPXML::HVACTypeHeatPumpAirToAir
@@ -1177,68 +1203,92 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1177
1203
  arg.setDescription('Whether the mini-split heat pump is ducted or not.')
1178
1204
  args << arg
1179
1205
 
1180
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_ground_to_air_pump_power', false)
1206
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_pump_power_watts_per_ton', false)
1181
1207
  arg.setDisplayName('Heat Pump: Ground-to-Air Pump Power')
1182
1208
  arg.setDescription('Ground loop circulator pump power during operation of the heat pump.')
1183
- arg.setUnits('watt/ton')
1209
+ arg.setUnits('W/ton')
1184
1210
  args << arg
1185
1211
 
1186
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_ground_to_air_fan_power', false)
1187
- arg.setDisplayName('Heat Pump: Ground-to-Air Fan Power')
1212
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_fan_power_watts_per_cfm', false)
1213
+ arg.setDisplayName('Heat Pump: Fan Power')
1188
1214
  arg.setDescription('Blower fan power.')
1189
- arg.setUnits('watt/CFM')
1215
+ arg.setUnits('W/CFM')
1190
1216
  args << arg
1191
1217
 
1192
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_temp', true)
1193
- arg.setDisplayName('Setpoint: Heating Temperature')
1194
- arg.setDescription('Specify the heating setpoint temperature.')
1218
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekday_temp', true)
1219
+ arg.setDisplayName('Heating Setpoint: Weekday Temperature')
1220
+ arg.setDescription('Specify the weekday heating setpoint temperature.')
1195
1221
  arg.setUnits('deg-F')
1196
1222
  arg.setDefaultValue(71)
1197
1223
  args << arg
1198
1224
 
1199
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_setback_temp', true)
1200
- arg.setDisplayName('Setpoint: Heating Setback Temperature')
1201
- arg.setDescription('Specify the heating setback temperature.')
1225
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekend_temp', true)
1226
+ arg.setDisplayName('Heating Setpoint: Weekend Temperature')
1227
+ arg.setDescription('Specify the weekend heating setpoint temperature.')
1202
1228
  arg.setUnits('deg-F')
1203
1229
  arg.setDefaultValue(71)
1204
1230
  args << arg
1205
1231
 
1206
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_setback_hours_per_week', true)
1207
- arg.setDisplayName('Setpoint: Heating Setback Hours per Week')
1208
- arg.setDescription('Specify the heating setback number of hours per week value.')
1209
- arg.setDefaultValue(0)
1232
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekday_offset_magnitude', false)
1233
+ arg.setDisplayName('Heating Setpoint: Weekday Offset Magnitude')
1234
+ arg.setDescription('Specify the weekday heating offset magnitude.')
1235
+ arg.setUnits('deg-F')
1236
+ args << arg
1237
+
1238
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_weekend_offset_magnitude', false)
1239
+ arg.setDisplayName('Heating Setpoint: Weekend Offset Magnitude')
1240
+ arg.setDescription('Specify the weekend heating offset magnitude.')
1241
+ arg.setUnits('deg-F')
1242
+ args << arg
1243
+
1244
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekday_schedule', false)
1245
+ arg.setDisplayName('Heating Setpoint: Weekday Schedule')
1246
+ arg.setDescription('Specify the 24-hour comma-separated weekday heating schedule of 0s and 1s.')
1247
+ arg.setUnits('deg-F')
1210
1248
  args << arg
1211
1249
 
1212
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_heating_setback_start_hour', true)
1213
- arg.setDisplayName('Setpoint: Heating Setback Start Hour')
1214
- arg.setDescription('Specify the heating setback start hour value. 0 = midnight, 12 = noon')
1215
- arg.setDefaultValue(23)
1250
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_heating_weekend_schedule', false)
1251
+ arg.setDisplayName('Heating Setpoint: Weekend Schedule')
1252
+ arg.setDescription('Specify the 24-hour comma-separated weekend heating schedule of 0s and 1s.')
1253
+ arg.setUnits('deg-F')
1216
1254
  args << arg
1217
1255
 
1218
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_temp', true)
1219
- arg.setDisplayName('Setpoint: Cooling Temperature')
1220
- arg.setDescription('Specify the cooling setpoint temperature.')
1256
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekday_temp', true)
1257
+ arg.setDisplayName('Cooling Setpoint: Weekday Temperature')
1258
+ arg.setDescription('Specify the weekday cooling setpoint temperature.')
1221
1259
  arg.setUnits('deg-F')
1222
1260
  arg.setDefaultValue(76)
1223
1261
  args << arg
1224
1262
 
1225
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_setup_temp', true)
1226
- arg.setDisplayName('Setpoint: Cooling Setup Temperature')
1227
- arg.setDescription('Specify the cooling setup temperature.')
1263
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekend_temp', true)
1264
+ arg.setDisplayName('Cooling Setpoint: Weekend Temperature')
1265
+ arg.setDescription('Specify the weekend cooling setpoint temperature.')
1228
1266
  arg.setUnits('deg-F')
1229
1267
  arg.setDefaultValue(76)
1230
1268
  args << arg
1231
1269
 
1232
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_setup_hours_per_week', true)
1233
- arg.setDisplayName('Setpoint: Cooling Setup Hours per Week')
1234
- arg.setDescription('Specify the cooling setup number of hours per week value.')
1235
- arg.setDefaultValue(0)
1270
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekday_offset_magnitude', false)
1271
+ arg.setDisplayName('Cooling Setpoint: Weekday Offset Magnitude')
1272
+ arg.setDescription('Specify the weekday cooling offset magnitude.')
1273
+ arg.setUnits('deg-F')
1274
+ args << arg
1275
+
1276
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_weekend_offset_magnitude', false)
1277
+ arg.setDisplayName('Cooling Setpoint: Weekend Offset Magnitude')
1278
+ arg.setDescription('Specify the weekend cooling offset magnitude.')
1279
+ arg.setUnits('deg-F')
1280
+ args << arg
1281
+
1282
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekday_schedule', false)
1283
+ arg.setDisplayName('Cooling Setpoint: Weekday Schedule')
1284
+ arg.setDescription('Specify the 24-hour comma-separated weekday cooling schedule of 0s and 1s.')
1285
+ arg.setUnits('deg-F')
1236
1286
  args << arg
1237
1287
 
1238
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('setpoint_cooling_setup_start_hour', true)
1239
- arg.setDisplayName('Setpoint: Cooling Setup Start Hour')
1240
- arg.setDescription('Specify the cooling setup start hour value. 0 = midnight, 12 = noon')
1241
- arg.setDefaultValue(9)
1288
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('setpoint_cooling_weekend_schedule', false)
1289
+ arg.setDisplayName('Cooling Setpoint: Weekend Schedule')
1290
+ arg.setDescription('Specify the 24-hour comma-separated weekend cooling schedule of 0s and 1s.')
1291
+ arg.setUnits('deg-F')
1242
1292
  args << arg
1243
1293
 
1244
1294
  duct_leakage_units_choices = OpenStudio::StringVector.new
@@ -1383,6 +1433,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1383
1433
  arg.setUnits('kWh/yr')
1384
1434
  args << arg
1385
1435
 
1436
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fan_power_watts_2', false)
1437
+ arg.setDisplayName('Heating System 2: Fan Power')
1438
+ arg.setDescription("Blower fan power. Ignored for #{HPXML::HVACTypeElectricResistance}.")
1439
+ arg.setUnits('W/CFM')
1440
+ args << arg
1441
+
1386
1442
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heating_system_has_flue_or_chimney_2', true)
1387
1443
  arg.setDisplayName('Heating System 2: Has Flue or Chimney')
1388
1444
  arg.setDescription('Whether the second heating system has a flue or chimney.')
@@ -1455,16 +1511,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1455
1511
  arg.setDefaultValue(30)
1456
1512
  args << arg
1457
1513
 
1458
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('mech_vent_is_shared_system', true)
1459
- arg.setDisplayName('Mechanical Ventilation: Is Shared System')
1460
- arg.setDescription('Whether the mechanical ventilation is a shared system. If true, assumed to serve all the units in the building.')
1461
- arg.setDefaultValue(false)
1462
- args << arg
1463
-
1464
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('shared_mech_vent_in_unit_flow_rate', false)
1465
- arg.setDisplayName('Shared Mechanical Ventilation: In-Unit Flow Rate')
1466
- arg.setDescription('The flow rate delivered to the dwelling unit. This is required for a shared mechanical ventilation system.')
1467
- arg.setUnits('CFM')
1514
+ arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('mech_vent_num_units_served', true)
1515
+ arg.setDisplayName('Mechanical Ventilation: Number of Units Served')
1516
+ arg.setDescription("Number of dwelling units served by the mechanical ventilation system. Must be 1 if #{HPXML::ResidentialTypeSFD}. Used to apportion flow rate and fan power to the unit.")
1517
+ arg.setUnits('#')
1518
+ arg.setDefaultValue(1)
1468
1519
  args << arg
1469
1520
 
1470
1521
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('shared_mech_vent_frac_recirculation', false)
@@ -1729,16 +1780,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1729
1780
  arg.setDefaultValue('EnergyFactor')
1730
1781
  args << arg
1731
1782
 
1732
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_efficiency_ef', true)
1733
- arg.setDisplayName('Water Heater: Energy Factor')
1734
- arg.setDescription('Ratio of useful energy output from water heater to the total amount of energy delivered from the water heater.')
1783
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_efficiency', true)
1784
+ arg.setDisplayName('Water Heater: Efficiency')
1785
+ arg.setDescription('Rated Energy Factor or Uniform Energy Factor. Does not apply to space-heating boilers.')
1735
1786
  arg.setDefaultValue(0.67)
1736
1787
  args << arg
1737
1788
 
1738
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_efficiency_uef', true)
1739
- arg.setDisplayName('Water Heater: Uniform Energy Factor')
1740
- arg.setDescription('The uniform energy factor of water heater. Does not apply to space-heating boilers.')
1741
- arg.setDefaultValue(0.67)
1789
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_first_hour_rating', false)
1790
+ arg.setDisplayName('Water Heater: First Hour Rating')
1791
+ arg.setDescription("Rated gallons of hot water supplied in an hour. Required if Efficiency Type is UniformEnergyFactor and Type is not #{HPXML::WaterHeaterTypeTankless}. Does not apply to space-heating boilers.")
1792
+ arg.setUnits('gal/hr')
1793
+ arg.setDefaultValue(56.0)
1742
1794
  args << arg
1743
1795
 
1744
1796
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('water_heater_recovery_efficiency', true)
@@ -1767,22 +1819,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1767
1819
  arg.setDefaultValue(Constants.Auto)
1768
1820
  args << arg
1769
1821
 
1770
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_performance_adjustment', false)
1771
- arg.setDisplayName('Water Heater: Performance Adjustment')
1772
- arg.setDescription("A performance adjustment due to cycling inefficiencies. Only applies to #{HPXML::WaterHeaterTypeTankless}.")
1773
- arg.setUnits('Frac')
1774
- args << arg
1775
-
1776
1822
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('water_heater_has_flue_or_chimney', true)
1777
1823
  arg.setDisplayName('Water Heater: Has Flue or Chimney')
1778
1824
  arg.setDescription('Whether the water heater has a flue or chimney.')
1779
1825
  arg.setDefaultValue(false)
1780
1826
  args << arg
1781
1827
 
1782
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('water_heater_is_shared_system', true)
1783
- arg.setDisplayName('Water Heater: Is Shared System')
1784
- arg.setDescription('Whether the water heater is a shared system. If true, assumed to serve all the units in the building.')
1785
- arg.setDefaultValue(false)
1828
+ arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('water_heater_num_units_served', true)
1829
+ arg.setDisplayName('Water Heater: Number of Units Served')
1830
+ arg.setDescription("Number of dwelling units served (directly or indirectly) by the water heater. Must be 1 if #{HPXML::ResidentialTypeSFD}. Used to apportion water heater tank losses to the unit.")
1831
+ arg.setUnits('#')
1832
+ arg.setDefaultValue(1)
1786
1833
  args << arg
1787
1834
 
1788
1835
  dhw_distribution_system_type_choices = OpenStudio::StringVector.new
@@ -1836,11 +1883,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1836
1883
  arg.setDefaultValue(Constants.Auto)
1837
1884
  args << arg
1838
1885
 
1839
- arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dhw_distribution_pipe_r', true)
1886
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('dhw_distribution_pipe_r', true)
1840
1887
  arg.setDisplayName('Hot Water Distribution: Pipe Insulation Nominal R-Value')
1841
1888
  arg.setUnits('h-ft^2-R/Btu')
1842
1889
  arg.setDescription('Nominal R-value of the pipe insulation.')
1843
- arg.setDefaultValue(0.0)
1890
+ arg.setDefaultValue(Constants.Auto)
1844
1891
  args << arg
1845
1892
 
1846
1893
  dwhr_facilities_connected_choices = OpenStudio::StringVector.new
@@ -1850,7 +1897,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1850
1897
 
1851
1898
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dwhr_facilities_connected', dwhr_facilities_connected_choices, true)
1852
1899
  arg.setDisplayName('Drain Water Heat Recovery: Facilities Connected')
1853
- arg.setDescription("Which facilities are connected for the drain water heat recovery. Use 'none' if there is no drawin water heat recovery system.")
1900
+ arg.setDescription("Which facilities are connected for the drain water heat recovery. Use 'none' if there is no drain water heat recovery system.")
1854
1901
  arg.setDefaultValue('none')
1855
1902
  args << arg
1856
1903
 
@@ -1969,15 +2016,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1969
2016
 
1970
2017
  pv_system_module_type_choices = OpenStudio::StringVector.new
1971
2018
  pv_system_module_type_choices << 'none'
2019
+ pv_system_module_type_choices << Constants.Auto
1972
2020
  pv_system_module_type_choices << HPXML::PVModuleTypeStandard
1973
2021
  pv_system_module_type_choices << HPXML::PVModuleTypePremium
1974
2022
  pv_system_module_type_choices << HPXML::PVModuleTypeThinFilm
1975
2023
 
1976
2024
  pv_system_location_choices = OpenStudio::StringVector.new
2025
+ pv_system_location_choices << Constants.Auto
1977
2026
  pv_system_location_choices << HPXML::LocationRoof
1978
2027
  pv_system_location_choices << HPXML::LocationGround
1979
2028
 
1980
2029
  pv_system_tracking_choices = OpenStudio::StringVector.new
2030
+ pv_system_tracking_choices << Constants.Auto
1981
2031
  pv_system_tracking_choices << HPXML::PVTrackingTypeFixed
1982
2032
  pv_system_tracking_choices << HPXML::PVTrackingType1Axis
1983
2033
  pv_system_tracking_choices << HPXML::PVTrackingType1AxisBacktracked
@@ -1992,13 +2042,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
1992
2042
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_location_1', pv_system_location_choices, true)
1993
2043
  arg.setDisplayName('Photovoltaics 1: Location')
1994
2044
  arg.setDescription('Location of the PV system 1.')
1995
- arg.setDefaultValue(HPXML::LocationRoof)
2045
+ arg.setDefaultValue(Constants.Auto)
1996
2046
  args << arg
1997
2047
 
1998
2048
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_tracking_1', pv_system_tracking_choices, true)
1999
2049
  arg.setDisplayName('Photovoltaics 1: Tracking')
2000
2050
  arg.setDescription('Tracking of the PV system 1.')
2001
- arg.setDefaultValue(HPXML::PVTrackingTypeFixed)
2051
+ arg.setDefaultValue(Constants.Auto)
2002
2052
  args << arg
2003
2053
 
2004
2054
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_array_azimuth_1', true)
@@ -2034,10 +2084,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2034
2084
  arg.setDescription('System losses fraction of the PV system 1.')
2035
2085
  args << arg
2036
2086
 
2037
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('pv_system_is_shared_1', true)
2038
- arg.setDisplayName('Photovoltaics 1: Is Shared System')
2039
- arg.setDescription('Whether PV system 1 is shared. If true, assumed to serve all the units in the building.')
2040
- arg.setDefaultValue(false)
2087
+ arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('pv_system_num_units_served_1', true)
2088
+ arg.setDisplayName('Photovoltaics 1: Number of Units Served')
2089
+ arg.setDescription("Number of dwelling units served by PV system 1. Must be 1 if #{HPXML::ResidentialTypeSFD}. Used to apportion PV generation to the unit.")
2090
+ arg.setUnits('#')
2091
+ arg.setDefaultValue(1)
2041
2092
  args << arg
2042
2093
 
2043
2094
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_module_type_2', pv_system_module_type_choices, true)
@@ -2049,13 +2100,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2049
2100
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_location_2', pv_system_location_choices, true)
2050
2101
  arg.setDisplayName('Photovoltaics 2: Location')
2051
2102
  arg.setDescription('Location of the PV system 2.')
2052
- arg.setDefaultValue(HPXML::LocationRoof)
2103
+ arg.setDefaultValue(Constants.Auto)
2053
2104
  args << arg
2054
2105
 
2055
2106
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_tracking_2', pv_system_tracking_choices, true)
2056
2107
  arg.setDisplayName('Photovoltaics 2: Tracking')
2057
2108
  arg.setDescription('Tracking of the PV system 2.')
2058
- arg.setDefaultValue(HPXML::PVTrackingTypeFixed)
2109
+ arg.setDefaultValue(Constants.Auto)
2059
2110
  args << arg
2060
2111
 
2061
2112
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_array_azimuth_2', true)
@@ -2091,10 +2142,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2091
2142
  arg.setDescription('System losses fraction of the PV system 2.')
2092
2143
  args << arg
2093
2144
 
2094
- arg = OpenStudio::Measure::OSArgument::makeBoolArgument('pv_system_is_shared_2', true)
2095
- arg.setDisplayName('Photovoltaics 2: Is Shared System')
2096
- arg.setDescription('Whether PV system 2 is shared. If true, assumed to serve all the units in the building.')
2097
- arg.setDefaultValue(false)
2145
+ arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('pv_system_num_units_served_2', true)
2146
+ arg.setDisplayName('Photovoltaics 2: Number of Units Served')
2147
+ arg.setDescription("Number of dwelling units served by PV system 2. Must be 1 if #{HPXML::ResidentialTypeSFD}. Used to apportion PV generation to the unit.")
2148
+ arg.setUnits('#')
2149
+ arg.setDefaultValue(1)
2098
2150
  args << arg
2099
2151
 
2100
2152
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_fraction_cfl_interior', true)
@@ -2216,10 +2268,20 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2216
2268
  arg.setDefaultValue(false)
2217
2269
  args << arg
2218
2270
 
2271
+ dehumidifier_type_choices = OpenStudio::StringVector.new
2272
+ dehumidifier_type_choices << HPXML::DehumidifierTypePortable
2273
+ dehumidifier_type_choices << HPXML::DehumidifierTypeWholeHome
2274
+
2219
2275
  dehumidifier_efficiency_type_choices = OpenStudio::StringVector.new
2220
2276
  dehumidifier_efficiency_type_choices << 'EnergyFactor'
2221
2277
  dehumidifier_efficiency_type_choices << 'IntegratedEnergyFactor'
2222
2278
 
2279
+ arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dehumidifier_type', dehumidifier_type_choices, true)
2280
+ arg.setDisplayName('Dehumidifier: Type')
2281
+ arg.setDescription('The type of dehumidifier.')
2282
+ arg.setDefaultValue(HPXML::DehumidifierTypePortable)
2283
+ args << arg
2284
+
2223
2285
  arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dehumidifier_efficiency_type', dehumidifier_efficiency_type_choices, true)
2224
2286
  arg.setDisplayName('Dehumidifier: Efficiency Type')
2225
2287
  arg.setDescription('The efficiency type of dehumidifier.')
@@ -2631,7 +2693,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2631
2693
 
2632
2694
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('ceiling_fan_efficiency', true)
2633
2695
  arg.setDisplayName('Ceiling Fan: Efficiency')
2634
- arg.setUnits('CFM/watt')
2696
+ arg.setUnits('CFM/W')
2635
2697
  arg.setDescription('The efficiency rating of the ceiling fan(s) at medium speed.')
2636
2698
  arg.setDefaultValue(Constants.Auto)
2637
2699
  args << arg
@@ -2663,6 +2725,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2663
2725
  arg.setDefaultValue(1.0)
2664
2726
  args << arg
2665
2727
 
2728
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_television_usage_multiplier_2', true)
2729
+ arg.setDisplayName('Plug Loads: Television Usage Multiplier 2')
2730
+ arg.setDefaultValue(1.0)
2731
+ arg.setDescription('Additional multiplier on the television energy usage that can reflect, e.g., high/low usage occupants.')
2732
+ args << arg
2733
+
2666
2734
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('plug_loads_other_annual_kwh', true)
2667
2735
  arg.setDisplayName('Plug Loads: Other Annual kWh')
2668
2736
  arg.setDescription('The annual energy consumption of the other residual plug loads.')
@@ -2690,6 +2758,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2690
2758
  arg.setDefaultValue(1.0)
2691
2759
  args << arg
2692
2760
 
2761
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_other_usage_multiplier_2', true)
2762
+ arg.setDisplayName('Plug Loads: Other Usage Multiplier 2')
2763
+ arg.setDescription('Additional multiplier on the other energy usage that can reflect, e.g., high/low usage occupants.')
2764
+ arg.setDefaultValue(1.0)
2765
+ args << arg
2766
+
2693
2767
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('plug_loads_well_pump_present', true)
2694
2768
  arg.setDisplayName('Plug Loads: Well Pump Present')
2695
2769
  arg.setDescription('Whether there is a well pump.')
@@ -2705,27 +2779,39 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2705
2779
 
2706
2780
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_well_pump_usage_multiplier', true)
2707
2781
  arg.setDisplayName('Plug Loads: Well Pump Usage Multiplier')
2708
- arg.setDescription('Multiplier on the well_pump energy usage that can reflect, e.g., high/low usage occupants.')
2709
- arg.setDefaultValue(1.0)
2782
+ arg.setDescription('Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants.')
2783
+ arg.setDefaultValue(0.0)
2784
+ args << arg
2785
+
2786
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_well_pump_usage_multiplier_2', true)
2787
+ arg.setDisplayName('Plug Loads: Well Pump Usage Multiplier 2')
2788
+ arg.setDescription('Additional multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants.')
2789
+ arg.setDefaultValue(0.0)
2710
2790
  args << arg
2711
2791
 
2712
2792
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('plug_loads_vehicle_present', true)
2713
2793
  arg.setDisplayName('Plug Loads: Vehicle Present')
2714
- arg.setDescription('Whether there is a vehicle.')
2794
+ arg.setDescription('Whether there is an electric vehicle.')
2715
2795
  arg.setDefaultValue(false)
2716
2796
  args << arg
2717
2797
 
2718
2798
  arg = OpenStudio::Measure::OSArgument::makeStringArgument('plug_loads_vehicle_annual_kwh', true)
2719
2799
  arg.setDisplayName('Plug Loads: Vehicle Annual kWh')
2720
- arg.setDescription('The annual energy consumption of the well pump plug loads.')
2800
+ arg.setDescription('The annual energy consumption of the electric vehicle plug loads.')
2721
2801
  arg.setUnits('kWh/yr')
2722
2802
  arg.setDefaultValue(Constants.Auto)
2723
2803
  args << arg
2724
2804
 
2725
2805
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_vehicle_usage_multiplier', true)
2726
2806
  arg.setDisplayName('Plug Loads: Vehicle Usage Multiplier')
2727
- arg.setDescription('Multiplier on the well_pump energy usage that can reflect, e.g., high/low usage occupants.')
2728
- arg.setDefaultValue(1.0)
2807
+ arg.setDescription('Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants.')
2808
+ arg.setDefaultValue(0.0)
2809
+ args << arg
2810
+
2811
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('plug_loads_vehicle_usage_multiplier_2', true)
2812
+ arg.setDisplayName('Plug Loads: Vehicle Usage Multiplier 2')
2813
+ arg.setDescription('Additional multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants.')
2814
+ arg.setDefaultValue(0.0)
2729
2815
  args << arg
2730
2816
 
2731
2817
  fuel_loads_fuel_choices = OpenStudio::StringVector.new
@@ -2759,16 +2845,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2759
2845
  arg.setDefaultValue(Constants.Auto)
2760
2846
  args << arg
2761
2847
 
2762
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('fuel_loads_grill_location', fuel_loads_location_choices, true)
2763
- arg.setDisplayName('Fuel Loads: Grill Location')
2764
- arg.setDescription('The location of the fuel loads grill.')
2765
- arg.setDefaultValue(Constants.Auto)
2766
- args << arg
2767
-
2768
2848
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('fuel_loads_grill_usage_multiplier', true)
2769
2849
  arg.setDisplayName('Fuel Loads: Grill Usage Multiplier')
2770
2850
  arg.setDescription('Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants.')
2771
- arg.setDefaultValue(1.0)
2851
+ arg.setDefaultValue(0.0)
2772
2852
  args << arg
2773
2853
 
2774
2854
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('fuel_loads_lighting_present', true)
@@ -2790,16 +2870,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2790
2870
  arg.setDefaultValue(Constants.Auto)
2791
2871
  args << arg
2792
2872
 
2793
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('fuel_loads_lighting_location', fuel_loads_location_choices, true)
2794
- arg.setDisplayName('Fuel Loads: Lighting Location')
2795
- arg.setDescription('The location of the fuel loads lighting.')
2796
- arg.setDefaultValue(Constants.Auto)
2797
- args << arg
2798
-
2799
2873
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('fuel_loads_lighting_usage_multiplier', true)
2800
2874
  arg.setDisplayName('Fuel Loads: Lighting Usage Multiplier')
2801
2875
  arg.setDescription('Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants.')
2802
- arg.setDefaultValue(1.0)
2876
+ arg.setDefaultValue(0.0)
2803
2877
  args << arg
2804
2878
 
2805
2879
  arg = OpenStudio::Measure::OSArgument::makeBoolArgument('fuel_loads_fireplace_present', true)
@@ -2821,16 +2895,24 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
2821
2895
  arg.setDefaultValue(Constants.Auto)
2822
2896
  args << arg
2823
2897
 
2824
- arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('fuel_loads_fireplace_location', fuel_loads_location_choices, true)
2825
- arg.setDisplayName('Fuel Loads: Fireplace Location')
2826
- arg.setDescription('The location of the fuel loads fireplace.')
2898
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('fuel_loads_fireplace_frac_sensible', true)
2899
+ arg.setDisplayName('Fuel Loads: Fireplace Sensible Fraction')
2900
+ arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are sensible.")
2901
+ arg.setUnits('Frac')
2902
+ arg.setDefaultValue(Constants.Auto)
2903
+ args << arg
2904
+
2905
+ arg = OpenStudio::Measure::OSArgument::makeStringArgument('fuel_loads_fireplace_frac_latent', true)
2906
+ arg.setDisplayName('Fuel Loads: Fireplace Latent Fraction')
2907
+ arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are latent.")
2908
+ arg.setUnits('Frac')
2827
2909
  arg.setDefaultValue(Constants.Auto)
2828
2910
  args << arg
2829
2911
 
2830
2912
  arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('fuel_loads_fireplace_usage_multiplier', true)
2831
2913
  arg.setDisplayName('Fuel Loads: Fireplace Usage Multiplier')
2832
2914
  arg.setDescription('Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants.')
2833
- arg.setDefaultValue(1.0)
2915
+ arg.setDefaultValue(0.0)
2834
2916
  args << arg
2835
2917
 
2836
2918
  heater_type_choices = OpenStudio::StringVector.new
@@ -3017,6 +3099,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3017
3099
  schedules_vacancy_begin_day_of_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_begin_day_of_month', user_arguments),
3018
3100
  schedules_vacancy_end_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_end_month', user_arguments),
3019
3101
  schedules_vacancy_end_day_of_month: runner.getOptionalIntegerArgumentValue('schedules_vacancy_end_day_of_month', user_arguments),
3102
+ schedules_random_seed: runner.getOptionalIntegerArgumentValue('schedules_random_seed', user_arguments),
3020
3103
  weather_station_epw_filepath: runner.getStringArgumentValue('weather_station_epw_filepath', user_arguments),
3021
3104
  site_type: runner.getOptionalStringArgumentValue('site_type', user_arguments),
3022
3105
  geometry_unit_type: runner.getStringArgumentValue('geometry_unit_type', user_arguments),
@@ -3040,7 +3123,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3040
3123
  geometry_foundation_height_above_grade: runner.getDoubleArgumentValue('geometry_foundation_height_above_grade', user_arguments),
3041
3124
  geometry_roof_type: runner.getStringArgumentValue('geometry_roof_type', user_arguments),
3042
3125
  geometry_roof_pitch: runner.getStringArgumentValue('geometry_roof_pitch', user_arguments),
3043
- geometry_roof_structure: runner.getStringArgumentValue('geometry_roof_structure', user_arguments),
3044
3126
  geometry_attic_type: runner.getStringArgumentValue('geometry_attic_type', user_arguments),
3045
3127
  geometry_eaves_depth: runner.getDoubleArgumentValue('geometry_eaves_depth', user_arguments),
3046
3128
  geometry_num_bedrooms: runner.getIntegerArgumentValue('geometry_num_bedrooms', user_arguments),
@@ -3055,19 +3137,21 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3055
3137
  foundation_wall_insulation_distance_to_top: runner.getDoubleArgumentValue('foundation_wall_insulation_distance_to_top', user_arguments),
3056
3138
  foundation_wall_insulation_distance_to_bottom: runner.getDoubleArgumentValue('foundation_wall_insulation_distance_to_bottom', user_arguments),
3057
3139
  foundation_wall_assembly_r: runner.getOptionalDoubleArgumentValue('foundation_wall_assembly_r', user_arguments),
3140
+ foundation_wall_thickness: runner.getStringArgumentValue('foundation_wall_thickness', user_arguments),
3058
3141
  slab_perimeter_insulation_r: runner.getDoubleArgumentValue('slab_perimeter_insulation_r', user_arguments),
3059
3142
  slab_perimeter_depth: runner.getDoubleArgumentValue('slab_perimeter_depth', user_arguments),
3060
3143
  slab_under_insulation_r: runner.getDoubleArgumentValue('slab_under_insulation_r', user_arguments),
3061
3144
  slab_under_width: runner.getDoubleArgumentValue('slab_under_width', user_arguments),
3062
- slab_carpet_fraction: runner.getDoubleArgumentValue('slab_carpet_fraction', user_arguments),
3063
- slab_carpet_r: runner.getDoubleArgumentValue('slab_carpet_r', user_arguments),
3145
+ slab_thickness: runner.getStringArgumentValue('slab_thickness', user_arguments),
3146
+ slab_carpet_fraction: runner.getStringArgumentValue('slab_carpet_fraction', user_arguments),
3147
+ slab_carpet_r: runner.getStringArgumentValue('slab_carpet_r', user_arguments),
3064
3148
  ceiling_assembly_r: runner.getDoubleArgumentValue('ceiling_assembly_r', user_arguments),
3065
3149
  roof_material_type: runner.getOptionalStringArgumentValue('roof_material_type', user_arguments),
3066
3150
  roof_color: runner.getStringArgumentValue('roof_color', user_arguments),
3067
3151
  roof_assembly_r: runner.getDoubleArgumentValue('roof_assembly_r', user_arguments),
3068
3152
  roof_solar_absorptance: runner.getStringArgumentValue('roof_solar_absorptance', user_arguments),
3069
- roof_emittance: runner.getDoubleArgumentValue('roof_emittance', user_arguments),
3070
- roof_radiant_barrier: runner.getBoolArgumentValue('roof_radiant_barrier', user_arguments),
3153
+ roof_emittance: runner.getStringArgumentValue('roof_emittance', user_arguments),
3154
+ roof_radiant_barrier: runner.getStringArgumentValue('roof_radiant_barrier', user_arguments),
3071
3155
  roof_radiant_barrier_grade: runner.getStringArgumentValue('roof_radiant_barrier_grade', user_arguments),
3072
3156
  neighbor_front_distance: runner.getDoubleArgumentValue('neighbor_front_distance', user_arguments),
3073
3157
  neighbor_back_distance: runner.getDoubleArgumentValue('neighbor_back_distance', user_arguments),
@@ -3082,7 +3166,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3082
3166
  wall_color: runner.getStringArgumentValue('wall_color', user_arguments),
3083
3167
  wall_assembly_r: runner.getDoubleArgumentValue('wall_assembly_r', user_arguments),
3084
3168
  wall_solar_absorptance: runner.getStringArgumentValue('wall_solar_absorptance', user_arguments),
3085
- wall_emittance: runner.getDoubleArgumentValue('wall_emittance', user_arguments),
3169
+ wall_emittance: runner.getStringArgumentValue('wall_emittance', user_arguments),
3086
3170
  window_front_wwr: runner.getDoubleArgumentValue('window_front_wwr', user_arguments),
3087
3171
  window_back_wwr: runner.getDoubleArgumentValue('window_back_wwr', user_arguments),
3088
3172
  window_left_wwr: runner.getDoubleArgumentValue('window_left_wwr', user_arguments),
@@ -3123,6 +3207,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3123
3207
  heating_system_heating_capacity: runner.getStringArgumentValue('heating_system_heating_capacity', user_arguments),
3124
3208
  heating_system_fraction_heat_load_served: runner.getDoubleArgumentValue('heating_system_fraction_heat_load_served', user_arguments),
3125
3209
  heating_system_electric_auxiliary_energy: runner.getOptionalDoubleArgumentValue('heating_system_electric_auxiliary_energy', user_arguments),
3210
+ heating_system_fan_power_watts_per_cfm: runner.getOptionalDoubleArgumentValue('heating_system_fan_power_watts_per_cfm', user_arguments),
3211
+ heating_system_fan_power_watts: runner.getOptionalDoubleArgumentValue('heating_system_fan_power_watts', user_arguments),
3126
3212
  heating_system_has_flue_or_chimney: runner.getBoolArgumentValue('heating_system_has_flue_or_chimney', user_arguments),
3127
3213
  cooling_system_type: runner.getStringArgumentValue('cooling_system_type', user_arguments),
3128
3214
  cooling_system_cooling_efficiency_seer: runner.getDoubleArgumentValue('cooling_system_cooling_efficiency_seer', user_arguments),
@@ -3132,6 +3218,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3132
3218
  cooling_system_cooling_capacity: runner.getStringArgumentValue('cooling_system_cooling_capacity', user_arguments),
3133
3219
  cooling_system_fraction_cool_load_served: runner.getDoubleArgumentValue('cooling_system_fraction_cool_load_served', user_arguments),
3134
3220
  cooling_system_is_ducted: runner.getBoolArgumentValue('cooling_system_is_ducted', user_arguments),
3221
+ cooling_system_fan_power_watts_per_cfm: runner.getOptionalDoubleArgumentValue('cooling_system_fan_power_watts_per_cfm', user_arguments),
3135
3222
  heat_pump_type: runner.getStringArgumentValue('heat_pump_type', user_arguments),
3136
3223
  heat_pump_heating_efficiency_hspf: runner.getDoubleArgumentValue('heat_pump_heating_efficiency_hspf', user_arguments),
3137
3224
  heat_pump_heating_efficiency_cop: runner.getDoubleArgumentValue('heat_pump_heating_efficiency_cop', user_arguments),
@@ -3149,16 +3236,20 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3149
3236
  heat_pump_backup_heating_capacity: runner.getStringArgumentValue('heat_pump_backup_heating_capacity', user_arguments),
3150
3237
  heat_pump_backup_heating_switchover_temp: runner.getOptionalDoubleArgumentValue('heat_pump_backup_heating_switchover_temp', user_arguments),
3151
3238
  heat_pump_mini_split_is_ducted: runner.getOptionalStringArgumentValue('heat_pump_mini_split_is_ducted', user_arguments),
3152
- heat_pump_ground_to_air_pump_power: runner.getOptionalDoubleArgumentValue('heat_pump_ground_to_air_pump_power', user_arguments),
3153
- heat_pump_ground_to_air_fan_power: runner.getOptionalDoubleArgumentValue('heat_pump_ground_to_air_fan_power', user_arguments),
3154
- setpoint_heating_temp: runner.getDoubleArgumentValue('setpoint_heating_temp', user_arguments),
3155
- setpoint_heating_setback_temp: runner.getDoubleArgumentValue('setpoint_heating_setback_temp', user_arguments),
3156
- setpoint_heating_setback_hours_per_week: runner.getDoubleArgumentValue('setpoint_heating_setback_hours_per_week', user_arguments),
3157
- setpoint_heating_setback_start_hour: runner.getDoubleArgumentValue('setpoint_heating_setback_start_hour', user_arguments),
3158
- setpoint_cooling_temp: runner.getDoubleArgumentValue('setpoint_cooling_temp', user_arguments),
3159
- setpoint_cooling_setup_temp: runner.getDoubleArgumentValue('setpoint_cooling_setup_temp', user_arguments),
3160
- setpoint_cooling_setup_hours_per_week: runner.getDoubleArgumentValue('setpoint_cooling_setup_hours_per_week', user_arguments),
3161
- setpoint_cooling_setup_start_hour: runner.getDoubleArgumentValue('setpoint_cooling_setup_start_hour', user_arguments),
3239
+ heat_pump_pump_power_watts_per_ton: runner.getOptionalDoubleArgumentValue('heat_pump_pump_power_watts_per_ton', user_arguments),
3240
+ heat_pump_fan_power_watts_per_cfm: runner.getOptionalDoubleArgumentValue('heat_pump_fan_power_watts_per_cfm', user_arguments),
3241
+ setpoint_heating_weekday_temp: runner.getDoubleArgumentValue('setpoint_heating_weekday_temp', user_arguments),
3242
+ setpoint_heating_weekend_temp: runner.getDoubleArgumentValue('setpoint_heating_weekend_temp', user_arguments),
3243
+ setpoint_heating_weekday_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_heating_weekday_offset_magnitude', user_arguments),
3244
+ setpoint_heating_weekend_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_heating_weekend_offset_magnitude', user_arguments),
3245
+ setpoint_heating_weekday_schedule: runner.getOptionalStringArgumentValue('setpoint_heating_weekday_schedule', user_arguments),
3246
+ setpoint_heating_weekend_schedule: runner.getOptionalStringArgumentValue('setpoint_heating_weekend_schedule', user_arguments),
3247
+ setpoint_cooling_weekday_temp: runner.getDoubleArgumentValue('setpoint_cooling_weekday_temp', user_arguments),
3248
+ setpoint_cooling_weekend_temp: runner.getDoubleArgumentValue('setpoint_cooling_weekend_temp', user_arguments),
3249
+ setpoint_cooling_weekday_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_cooling_weekday_offset_magnitude', user_arguments),
3250
+ setpoint_cooling_weekend_offset_magnitude: runner.getOptionalDoubleArgumentValue('setpoint_cooling_weekend_offset_magnitude', user_arguments),
3251
+ setpoint_cooling_weekday_schedule: runner.getOptionalStringArgumentValue('setpoint_cooling_weekday_schedule', user_arguments),
3252
+ setpoint_cooling_weekend_schedule: runner.getOptionalStringArgumentValue('setpoint_cooling_weekend_schedule', user_arguments),
3162
3253
  ducts_supply_leakage_units: runner.getStringArgumentValue('ducts_supply_leakage_units', user_arguments),
3163
3254
  ducts_return_leakage_units: runner.getStringArgumentValue('ducts_return_leakage_units', user_arguments),
3164
3255
  ducts_supply_leakage_value: runner.getDoubleArgumentValue('ducts_supply_leakage_value', user_arguments),
@@ -3176,6 +3267,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3176
3267
  heating_system_heating_capacity_2: runner.getStringArgumentValue('heating_system_heating_capacity_2', user_arguments),
3177
3268
  heating_system_fraction_heat_load_served_2: runner.getDoubleArgumentValue('heating_system_fraction_heat_load_served_2', user_arguments),
3178
3269
  heating_system_electric_auxiliary_energy_2: runner.getOptionalDoubleArgumentValue('heating_system_electric_auxiliary_energy_2', user_arguments),
3270
+ heating_system_fan_power_watts_2: runner.getOptionalDoubleArgumentValue('heating_system_fan_power_watts_2', user_arguments),
3179
3271
  heating_system_has_flue_or_chimney_2: runner.getBoolArgumentValue('heating_system_has_flue_or_chimney_2', user_arguments),
3180
3272
  mech_vent_fan_type: runner.getStringArgumentValue('mech_vent_fan_type', user_arguments),
3181
3273
  mech_vent_flow_rate: runner.getDoubleArgumentValue('mech_vent_flow_rate', user_arguments),
@@ -3185,8 +3277,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3185
3277
  mech_vent_sensible_recovery_efficiency_type: runner.getStringArgumentValue('mech_vent_sensible_recovery_efficiency_type', user_arguments),
3186
3278
  mech_vent_sensible_recovery_efficiency: runner.getDoubleArgumentValue('mech_vent_sensible_recovery_efficiency', user_arguments),
3187
3279
  mech_vent_fan_power: runner.getDoubleArgumentValue('mech_vent_fan_power', user_arguments),
3188
- mech_vent_is_shared_system: runner.getBoolArgumentValue('mech_vent_is_shared_system', user_arguments),
3189
- shared_mech_vent_in_unit_flow_rate: runner.getOptionalDoubleArgumentValue('shared_mech_vent_in_unit_flow_rate', user_arguments),
3280
+ mech_vent_num_units_served: runner.getIntegerArgumentValue('mech_vent_num_units_served', user_arguments),
3190
3281
  shared_mech_vent_frac_recirculation: runner.getOptionalDoubleArgumentValue('shared_mech_vent_frac_recirculation', user_arguments),
3191
3282
  shared_mech_vent_preheating_fuel: runner.getOptionalStringArgumentValue('shared_mech_vent_preheating_fuel', user_arguments),
3192
3283
  shared_mech_vent_preheating_efficiency: runner.getOptionalDoubleArgumentValue('shared_mech_vent_preheating_efficiency', user_arguments),
@@ -3223,22 +3314,21 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3223
3314
  water_heater_tank_volume: runner.getStringArgumentValue('water_heater_tank_volume', user_arguments),
3224
3315
  water_heater_heating_capacity: runner.getStringArgumentValue('water_heater_heating_capacity', user_arguments),
3225
3316
  water_heater_efficiency_type: runner.getStringArgumentValue('water_heater_efficiency_type', user_arguments),
3226
- water_heater_efficiency_ef: runner.getDoubleArgumentValue('water_heater_efficiency_ef', user_arguments),
3227
- water_heater_efficiency_uef: runner.getDoubleArgumentValue('water_heater_efficiency_uef', user_arguments),
3317
+ water_heater_efficiency: runner.getDoubleArgumentValue('water_heater_efficiency', user_arguments),
3318
+ water_heater_first_hour_rating: runner.getDoubleArgumentValue('water_heater_first_hour_rating', user_arguments),
3228
3319
  water_heater_recovery_efficiency: runner.getStringArgumentValue('water_heater_recovery_efficiency', user_arguments),
3229
3320
  water_heater_standby_loss: runner.getOptionalDoubleArgumentValue('water_heater_standby_loss', user_arguments),
3230
3321
  water_heater_jacket_rvalue: runner.getOptionalDoubleArgumentValue('water_heater_jacket_rvalue', user_arguments),
3231
3322
  water_heater_setpoint_temperature: runner.getStringArgumentValue('water_heater_setpoint_temperature', user_arguments),
3232
- water_heater_performance_adjustment: runner.getOptionalDoubleArgumentValue('water_heater_performance_adjustment', user_arguments),
3233
3323
  water_heater_has_flue_or_chimney: runner.getBoolArgumentValue('water_heater_has_flue_or_chimney', user_arguments),
3234
- water_heater_is_shared_system: runner.getBoolArgumentValue('water_heater_is_shared_system', user_arguments),
3324
+ water_heater_num_units_served: runner.getIntegerArgumentValue('water_heater_num_units_served', user_arguments),
3235
3325
  dhw_distribution_system_type: runner.getStringArgumentValue('dhw_distribution_system_type', user_arguments),
3236
3326
  dhw_distribution_standard_piping_length: runner.getStringArgumentValue('dhw_distribution_standard_piping_length', user_arguments),
3237
3327
  dhw_distribution_recirc_control_type: runner.getStringArgumentValue('dhw_distribution_recirc_control_type', user_arguments),
3238
3328
  dhw_distribution_recirc_piping_length: runner.getStringArgumentValue('dhw_distribution_recirc_piping_length', user_arguments),
3239
3329
  dhw_distribution_recirc_branch_piping_length: runner.getStringArgumentValue('dhw_distribution_recirc_branch_piping_length', user_arguments),
3240
3330
  dhw_distribution_recirc_pump_power: runner.getStringArgumentValue('dhw_distribution_recirc_pump_power', user_arguments),
3241
- dhw_distribution_pipe_r: runner.getDoubleArgumentValue('dhw_distribution_pipe_r', user_arguments),
3331
+ dhw_distribution_pipe_r: runner.getStringArgumentValue('dhw_distribution_pipe_r', user_arguments),
3242
3332
  dwhr_facilities_connected: runner.getStringArgumentValue('dwhr_facilities_connected', user_arguments),
3243
3333
  dwhr_equal_flow: runner.getBoolArgumentValue('dwhr_equal_flow', user_arguments),
3244
3334
  dwhr_efficiency: runner.getDoubleArgumentValue('dwhr_efficiency', user_arguments),
@@ -3263,7 +3353,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3263
3353
  pv_system_max_power_output_1: runner.getDoubleArgumentValue('pv_system_max_power_output_1', user_arguments),
3264
3354
  pv_system_inverter_efficiency_1: runner.getOptionalDoubleArgumentValue('pv_system_inverter_efficiency_1', user_arguments),
3265
3355
  pv_system_system_losses_fraction_1: runner.getOptionalDoubleArgumentValue('pv_system_system_losses_fraction_1', user_arguments),
3266
- pv_system_is_shared_1: runner.getBoolArgumentValue('pv_system_is_shared_1', user_arguments),
3356
+ pv_system_num_units_served_1: runner.getIntegerArgumentValue('pv_system_num_units_served_1', user_arguments),
3267
3357
  pv_system_module_type_2: runner.getStringArgumentValue('pv_system_module_type_2', user_arguments),
3268
3358
  pv_system_location_2: runner.getStringArgumentValue('pv_system_location_2', user_arguments),
3269
3359
  pv_system_tracking_2: runner.getStringArgumentValue('pv_system_tracking_2', user_arguments),
@@ -3272,7 +3362,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3272
3362
  pv_system_max_power_output_2: runner.getDoubleArgumentValue('pv_system_max_power_output_2', user_arguments),
3273
3363
  pv_system_inverter_efficiency_2: runner.getOptionalDoubleArgumentValue('pv_system_inverter_efficiency_2', user_arguments),
3274
3364
  pv_system_system_losses_fraction_2: runner.getOptionalDoubleArgumentValue('pv_system_system_losses_fraction_2', user_arguments),
3275
- pv_system_is_shared_2: runner.getBoolArgumentValue('pv_system_is_shared_2', user_arguments),
3365
+ pv_system_num_units_served_2: runner.getIntegerArgumentValue('pv_system_num_units_served_2', user_arguments),
3276
3366
  lighting_fraction_cfl_interior: runner.getDoubleArgumentValue('lighting_fraction_cfl_interior', user_arguments),
3277
3367
  lighting_fraction_lfl_interior: runner.getDoubleArgumentValue('lighting_fraction_lfl_interior', user_arguments),
3278
3368
  lighting_fraction_led_interior: runner.getDoubleArgumentValue('lighting_fraction_led_interior', user_arguments),
@@ -3292,6 +3382,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3292
3382
  holiday_lighting_period_end_month: runner.getStringArgumentValue('holiday_lighting_period_end_month', user_arguments),
3293
3383
  holiday_lighting_period_end_day_of_month: runner.getStringArgumentValue('holiday_lighting_period_end_day_of_month', user_arguments),
3294
3384
  dehumidifier_present: runner.getBoolArgumentValue('dehumidifier_present', user_arguments),
3385
+ dehumidifier_type: runner.getStringArgumentValue('dehumidifier_type', user_arguments),
3295
3386
  dehumidifier_efficiency_type: runner.getStringArgumentValue('dehumidifier_efficiency_type', user_arguments),
3296
3387
  dehumidifier_efficiency_ef: runner.getDoubleArgumentValue('dehumidifier_efficiency_ef', user_arguments),
3297
3388
  dehumidifier_efficiency_ief: runner.getDoubleArgumentValue('dehumidifier_efficiency_ief', user_arguments),
@@ -3354,30 +3445,33 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3354
3445
  ceiling_fan_cooling_setpoint_temp_offset: runner.getDoubleArgumentValue('ceiling_fan_cooling_setpoint_temp_offset', user_arguments),
3355
3446
  plug_loads_television_annual_kwh: runner.getStringArgumentValue('plug_loads_television_annual_kwh', user_arguments),
3356
3447
  plug_loads_television_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_television_usage_multiplier', user_arguments),
3448
+ plug_loads_television_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_television_usage_multiplier_2', user_arguments),
3357
3449
  plug_loads_other_annual_kwh: runner.getStringArgumentValue('plug_loads_other_annual_kwh', user_arguments),
3358
3450
  plug_loads_other_frac_sensible: runner.getStringArgumentValue('plug_loads_other_frac_sensible', user_arguments),
3359
3451
  plug_loads_other_frac_latent: runner.getStringArgumentValue('plug_loads_other_frac_latent', user_arguments),
3360
3452
  plug_loads_other_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_other_usage_multiplier', user_arguments),
3453
+ plug_loads_other_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_other_usage_multiplier_2', user_arguments),
3361
3454
  plug_loads_well_pump_present: runner.getBoolArgumentValue('plug_loads_well_pump_present', user_arguments),
3362
3455
  plug_loads_well_pump_annual_kwh: runner.getStringArgumentValue('plug_loads_well_pump_annual_kwh', user_arguments),
3363
3456
  plug_loads_well_pump_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_well_pump_usage_multiplier', user_arguments),
3457
+ plug_loads_well_pump_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_well_pump_usage_multiplier_2', user_arguments),
3364
3458
  plug_loads_vehicle_present: runner.getBoolArgumentValue('plug_loads_vehicle_present', user_arguments),
3365
3459
  plug_loads_vehicle_annual_kwh: runner.getStringArgumentValue('plug_loads_vehicle_annual_kwh', user_arguments),
3366
3460
  plug_loads_vehicle_usage_multiplier: runner.getDoubleArgumentValue('plug_loads_vehicle_usage_multiplier', user_arguments),
3461
+ plug_loads_vehicle_usage_multiplier_2: runner.getDoubleArgumentValue('plug_loads_vehicle_usage_multiplier_2', user_arguments),
3367
3462
  fuel_loads_grill_present: runner.getBoolArgumentValue('fuel_loads_grill_present', user_arguments),
3368
3463
  fuel_loads_grill_fuel_type: runner.getStringArgumentValue('fuel_loads_grill_fuel_type', user_arguments),
3369
3464
  fuel_loads_grill_annual_therm: runner.getStringArgumentValue('fuel_loads_grill_annual_therm', user_arguments),
3370
- fuel_loads_grill_location: runner.getStringArgumentValue('fuel_loads_grill_location', user_arguments),
3371
3465
  fuel_loads_grill_usage_multiplier: runner.getDoubleArgumentValue('fuel_loads_grill_usage_multiplier', user_arguments),
3372
3466
  fuel_loads_lighting_present: runner.getBoolArgumentValue('fuel_loads_lighting_present', user_arguments),
3373
3467
  fuel_loads_lighting_fuel_type: runner.getStringArgumentValue('fuel_loads_lighting_fuel_type', user_arguments),
3374
3468
  fuel_loads_lighting_annual_therm: runner.getStringArgumentValue('fuel_loads_lighting_annual_therm', user_arguments),
3375
- fuel_loads_lighting_location: runner.getStringArgumentValue('fuel_loads_lighting_location', user_arguments),
3376
3469
  fuel_loads_lighting_usage_multiplier: runner.getDoubleArgumentValue('fuel_loads_lighting_usage_multiplier', user_arguments),
3377
3470
  fuel_loads_fireplace_present: runner.getBoolArgumentValue('fuel_loads_fireplace_present', user_arguments),
3378
3471
  fuel_loads_fireplace_fuel_type: runner.getStringArgumentValue('fuel_loads_fireplace_fuel_type', user_arguments),
3379
3472
  fuel_loads_fireplace_annual_therm: runner.getStringArgumentValue('fuel_loads_fireplace_annual_therm', user_arguments),
3380
- fuel_loads_fireplace_location: runner.getStringArgumentValue('fuel_loads_fireplace_location', user_arguments),
3473
+ fuel_loads_fireplace_frac_sensible: runner.getStringArgumentValue('fuel_loads_fireplace_frac_sensible', user_arguments),
3474
+ fuel_loads_fireplace_frac_latent: runner.getStringArgumentValue('fuel_loads_fireplace_frac_latent', user_arguments),
3381
3475
  fuel_loads_fireplace_usage_multiplier: runner.getDoubleArgumentValue('fuel_loads_fireplace_usage_multiplier', user_arguments),
3382
3476
  pool_present: runner.getBoolArgumentValue('pool_present', user_arguments),
3383
3477
  pool_pump_annual_kwh: runner.getStringArgumentValue('pool_pump_annual_kwh', user_arguments),
@@ -3491,6 +3585,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3491
3585
  error = ((args[:water_heater_type] == HPXML::WaterHeaterTypeCombiStorage) || (args[:water_heater_type] == HPXML::WaterHeaterTypeCombiTankless)) && (args[:heating_system_type] != HPXML::HVACTypeBoiler)
3492
3586
  errors << "water_heater_type=#{args[:water_heater_type]} and heating_system_type=#{args[:heating_system_type]}" if error
3493
3587
 
3588
+ # no plug loads but specifying usage multipliers
3589
+ warning = (args[:plug_loads_television_annual_kwh] == 0.0 && (args[:plug_loads_television_usage_multiplier] != 0.0 || args[:plug_loads_television_usage_multiplier_2] != 0.0)) || (args[:plug_loads_other_annual_kwh] == 0.0 && (args[:plug_loads_other_usage_multiplier] != 0.0 || args[:plug_loads_other_usage_multiplier_2] != 0.0)) || (!args[:plug_loads_well_pump_present] && (args[:plug_loads_well_pump_usage_multiplier] != 0.0 || args[:plug_loads_well_pump_usage_multiplier_2] != 0.0)) || (!args[:plug_loads_vehicle_present] && (args[:plug_loads_vehicle_usage_multiplier] != 0.0 || args[:plug_loads_vehicle_usage_multiplier_2] != 0.0))
3590
+ warnings << "plug_loads_television_annual_kwh=#{args[:plug_loads_television_annual_kwh]} and plug_loads_television_usage_multiplier=#{args[:plug_loads_television_usage_multiplier]} and plug_loads_television_usage_multiplier_2=#{args[:plug_loads_television_usage_multiplier_2]} and plug_loads_other_annual_kwh=#{args[:plug_loads_other_annual_kwh]} and plug_loads_other_usage_multiplier=#{args[:plug_loads_other_usage_multiplier]} and plug_loads_other_usage_multiplier_2=#{args[:plug_loads_other_usage_multiplier_2]} and plug_loads_well_pump_present=#{args[:plug_loads_well_pump_present]} and plug_loads_well_pump_usage_multiplier=#{args[:plug_loads_well_pump_usage_multiplier]} and plug_loads_well_pump_usage_multiplier_2=#{args[:plug_loads_well_pump_usage_multiplier_2]} and plug_loads_vehicle_present=#{args[:plug_loads_vehicle_present]} and plug_loads_vehicle_usage_multiplier=#{args[:plug_loads_vehicle_usage_multiplier]} and plug_loads_vehicle_usage_multiplier_2=#{args[:plug_loads_vehicle_usage_multiplier_2]}" if warning
3591
+
3592
+ # no fuel loads but specifying usage multipliers
3593
+ warning = (!args[:fuel_loads_grill_present] && args[:fuel_loads_grill_usage_multiplier] != 0.0) || (!args[:fuel_loads_lighting_present] && args[:fuel_loads_lighting_usage_multiplier] != 0.0) || (!args[:fuel_loads_fireplace_present] && args[:fuel_loads_fireplace_usage_multiplier] != 0.0)
3594
+ warnings << "fuel_loads_grill_present=#{args[:fuel_loads_grill_present]} and fuel_loads_grill_usage_multiplier=#{args[:fuel_loads_grill_usage_multiplier]} and fuel_loads_lighting_present=#{args[:fuel_loads_lighting_present]} and fuel_loads_lighting_usage_multiplier=#{args[:fuel_loads_lighting_usage_multiplier]} and fuel_loads_fireplace_present=#{args[:fuel_loads_fireplace_present]} and fuel_loads_fireplace_usage_multiplier=#{args[:fuel_loads_fireplace_usage_multiplier]}" if warning
3595
+
3494
3596
  return warnings, errors
3495
3597
  end
3496
3598
 
@@ -3505,13 +3607,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
3505
3607
  is_valid = false
3506
3608
  end
3507
3609
 
3508
- # Validate input HPXML against EnergyPlus Use Case
3509
- stron_path = File.join(schemas_dir, 'EPvalidator.xml')
3510
- errors = Validator.run_validator(hpxml_doc, stron_path)
3610
+ # Validate input HPXML against schematron docs
3611
+ stron_paths = [File.join(schemas_dir, 'HPXMLvalidator.xml'),
3612
+ File.join(schemas_dir, 'EPvalidator.xml')]
3613
+ errors, warnings = Validator.run_validators(hpxml_doc, stron_paths)
3511
3614
  errors.each do |error|
3512
3615
  runner.registerError("#{hpxml_path}: #{error}")
3513
3616
  is_valid = false
3514
3617
  end
3618
+ warnings.each do |warning|
3619
+ runner.registerWarning("#{warning}")
3620
+ end
3515
3621
 
3516
3622
  return is_valid
3517
3623
  end
@@ -3623,12 +3729,18 @@ class HPXMLFile
3623
3729
  return true
3624
3730
  end
3625
3731
 
3732
+ info_msgs = []
3733
+
3626
3734
  # set the calendar year
3627
3735
  year_description = model.getYearDescription
3628
3736
  year_description.setCalendarYear(2007) # default to TMY
3737
+ if args[:simulation_control_run_period_calendar_year].is_initialized
3738
+ year_description.setCalendarYear(args[:simulation_control_run_period_calendar_year].get)
3739
+ end
3629
3740
  if epw_file.startDateActualYear.is_initialized # AMY
3630
3741
  year_description.setCalendarYear(epw_file.startDateActualYear.get)
3631
3742
  end
3743
+ info_msgs << "CalendarYear=#{year_description.calendarYear}"
3632
3744
 
3633
3745
  # set the timestep
3634
3746
  timestep = model.getTimestep
@@ -3636,8 +3748,13 @@ class HPXMLFile
3636
3748
  if args[:simulation_control_timestep].is_initialized
3637
3749
  timestep.setNumberOfTimestepsPerHour(60 / args[:simulation_control_timestep].get)
3638
3750
  end
3751
+ info_msgs << "NumberOfTimestepsPerHour=#{timestep.numberOfTimestepsPerHour}"
3752
+
3753
+ # get the seed
3754
+ random_seed = args[:schedules_random_seed].get if args[:schedules_random_seed].is_initialized
3639
3755
 
3640
- schedule_generator = ScheduleGenerator.new(runner: runner, model: model, epw_file: epw_file)
3756
+ # instantiate the generator
3757
+ schedule_generator = ScheduleGenerator.new(runner: runner, model: model, epw_file: epw_file, random_seed: random_seed)
3641
3758
 
3642
3759
  # create the schedule
3643
3760
  if args[:geometry_num_occupants] == Constants.Auto
@@ -3654,6 +3771,8 @@ class HPXMLFile
3654
3771
  success = schedule_generator.export(schedules_path: File.expand_path(args[:schedules_path]))
3655
3772
  return false if not success
3656
3773
 
3774
+ runner.registerInfo("Created schedule with #{info_msgs.join(', ')}")
3775
+
3657
3776
  return true
3658
3777
  end
3659
3778
 
@@ -3678,13 +3797,13 @@ class HPXMLFile
3678
3797
  hpxml.header.sim_begin_month = args[:simulation_control_run_period_begin_month].get
3679
3798
  end
3680
3799
  if args[:simulation_control_run_period_begin_day_of_month].is_initialized
3681
- hpxml.header.sim_begin_day_of_month = args[:simulation_control_run_period_begin_day_of_month].get
3800
+ hpxml.header.sim_begin_day = args[:simulation_control_run_period_begin_day_of_month].get
3682
3801
  end
3683
3802
  if args[:simulation_control_run_period_end_month].is_initialized
3684
3803
  hpxml.header.sim_end_month = args[:simulation_control_run_period_end_month].get
3685
3804
  end
3686
3805
  if args[:simulation_control_run_period_end_day_of_month].is_initialized
3687
- hpxml.header.sim_end_day_of_month = args[:simulation_control_run_period_end_day_of_month].get
3806
+ hpxml.header.sim_end_day = args[:simulation_control_run_period_end_day_of_month].get
3688
3807
  end
3689
3808
  if args[:simulation_control_run_period_calendar_year].is_initialized
3690
3809
  hpxml.header.sim_calendar_year = args[:simulation_control_run_period_calendar_year].get
@@ -3697,13 +3816,13 @@ class HPXMLFile
3697
3816
  hpxml.header.dst_begin_month = args[:simulation_control_daylight_saving_begin_month].get
3698
3817
  end
3699
3818
  if args[:simulation_control_daylight_saving_begin_day_of_month].is_initialized
3700
- hpxml.header.dst_begin_day_of_month = args[:simulation_control_daylight_saving_begin_day_of_month].get
3819
+ hpxml.header.dst_begin_day = args[:simulation_control_daylight_saving_begin_day_of_month].get
3701
3820
  end
3702
3821
  if args[:simulation_control_daylight_saving_end_month].is_initialized
3703
3822
  hpxml.header.dst_end_month = args[:simulation_control_daylight_saving_end_month].get
3704
3823
  end
3705
3824
  if args[:simulation_control_daylight_saving_end_day_of_month].is_initialized
3706
- hpxml.header.dst_end_day_of_month = args[:simulation_control_daylight_saving_end_day_of_month].get
3825
+ hpxml.header.dst_end_day = args[:simulation_control_daylight_saving_end_day_of_month].get
3707
3826
  end
3708
3827
 
3709
3828
  hpxml.header.building_id = 'MyBuilding'
@@ -3724,23 +3843,19 @@ class HPXMLFile
3724
3843
  end
3725
3844
 
3726
3845
  def self.set_neighbor_buildings(hpxml, runner, args)
3727
- [args[:neighbor_front_distance], args[:neighbor_back_distance], args[:neighbor_left_distance], args[:neighbor_right_distance]].each_with_index do |distance, i|
3728
- next if distance == 0
3846
+ nbr_map = { Constants.FacadeFront => [args[:neighbor_front_distance], args[:neighbor_front_height]],
3847
+ Constants.FacadeBack => [args[:neighbor_back_distance], args[:neighbor_back_height]],
3848
+ Constants.FacadeLeft => [args[:neighbor_left_distance], args[:neighbor_left_height]],
3849
+ Constants.FacadeRight => [args[:neighbor_right_distance], args[:neighbor_right_height]] }
3729
3850
 
3730
- if i == 0 # front
3731
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 0, args[:geometry_orientation], 0)
3732
- elsif i == 1 # back
3733
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 180, args[:geometry_orientation], 0)
3734
- elsif i == 2 # left
3735
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 90, args[:geometry_orientation], 0)
3736
- elsif i == 3 # right
3737
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 270, args[:geometry_orientation], 0)
3738
- end
3851
+ nbr_map.each do |facade, data|
3852
+ distance, neighbor_height = data
3853
+ next if distance == 0
3739
3854
 
3740
- neighbor_height = [args[:neighbor_front_height], args[:neighbor_back_height], args[:neighbor_left_height], args[:neighbor_right_height]]
3855
+ azimuth = get_azimuth_from_facade(facade, args)
3741
3856
 
3742
- if (distance > 0) && (neighbor_height[i] != Constants.Auto)
3743
- height = Float(neighbor_height[i])
3857
+ if (distance > 0) && (neighbor_height != Constants.Auto)
3858
+ height = Float(neighbor_height)
3744
3859
  end
3745
3860
 
3746
3861
  hpxml.neighbor_buildings.add(azimuth: azimuth,
@@ -3756,11 +3871,15 @@ class HPXMLFile
3756
3871
  end
3757
3872
 
3758
3873
  def self.set_building_construction(hpxml, runner, args)
3759
- number_of_conditioned_floors_above_grade = args[:geometry_num_floors_above_grade]
3760
-
3761
- number_of_conditioned_floors = number_of_conditioned_floors_above_grade
3762
- if args[:geometry_foundation_type] == HPXML::FoundationTypeBasementConditioned
3763
- number_of_conditioned_floors += 1
3874
+ if args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
3875
+ number_of_conditioned_floors_above_grade = 1
3876
+ number_of_conditioned_floors = 1
3877
+ else
3878
+ number_of_conditioned_floors_above_grade = args[:geometry_num_floors_above_grade]
3879
+ number_of_conditioned_floors = number_of_conditioned_floors_above_grade
3880
+ if args[:geometry_foundation_type] == HPXML::FoundationTypeBasementConditioned
3881
+ number_of_conditioned_floors += 1
3882
+ end
3764
3883
  end
3765
3884
 
3766
3885
  if args[:geometry_num_bathrooms] != Constants.Auto
@@ -3839,6 +3958,11 @@ class HPXMLFile
3839
3958
  end
3840
3959
 
3841
3960
  def self.set_roofs(hpxml, runner, model, args)
3961
+ args[:geometry_roof_pitch] *= 12.0
3962
+ if args[:geometry_roof_type] == 'flat'
3963
+ args[:geometry_roof_pitch] = 0.0
3964
+ end
3965
+
3842
3966
  model.getSurfaces.sort.each do |surface|
3843
3967
  next unless ['Outdoors'].include? surface.outsideBoundaryCondition
3844
3968
  next if surface.surfaceType != 'RoofCeiling'
@@ -3846,11 +3970,6 @@ class HPXMLFile
3846
3970
  interior_adjacent_to = get_adjacent_to(surface)
3847
3971
  next if [HPXML::LocationOtherHousingUnit].include? interior_adjacent_to
3848
3972
 
3849
- pitch = args[:geometry_roof_pitch] * 12.0
3850
- if args[:geometry_roof_type] == 'flat'
3851
- pitch = 0.0
3852
- end
3853
-
3854
3973
  if args[:roof_material_type].is_initialized
3855
3974
  roof_type = args[:roof_material_type].get
3856
3975
  end
@@ -3867,19 +3986,33 @@ class HPXMLFile
3867
3986
  solar_absorptance = args[:roof_solar_absorptance]
3868
3987
  end
3869
3988
 
3870
- if args[:roof_radiant_barrier]
3871
- radiant_barrier_grade = args[:roof_radiant_barrier_grade]
3989
+ if args[:roof_emittance] != Constants.Auto
3990
+ emittance = args[:roof_emittance]
3991
+ end
3992
+
3993
+ if args[:roof_radiant_barrier] != Constants.Auto
3994
+ radiant_barrier = args[:roof_radiant_barrier]
3995
+ if to_boolean(radiant_barrier)
3996
+ radiant_barrier_grade = args[:roof_radiant_barrier_grade]
3997
+ end
3998
+ end
3999
+
4000
+ if args[:geometry_roof_type] == 'flat'
4001
+ azimuth = nil
4002
+ else
4003
+ azimuth = get_surface_azimuth(surface, args)
3872
4004
  end
3873
4005
 
3874
4006
  hpxml.roofs.add(id: valid_attr(surface.name),
3875
4007
  interior_adjacent_to: get_adjacent_to(surface),
4008
+ azimuth: azimuth,
3876
4009
  area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round,
3877
4010
  roof_type: roof_type,
3878
4011
  roof_color: roof_color,
3879
4012
  solar_absorptance: solar_absorptance,
3880
- emittance: args[:roof_emittance],
3881
- pitch: pitch,
3882
- radiant_barrier: args[:roof_radiant_barrier],
4013
+ emittance: emittance,
4014
+ pitch: args[:geometry_roof_pitch],
4015
+ radiant_barrier: radiant_barrier,
3883
4016
  radiant_barrier_grade: radiant_barrier_grade,
3884
4017
  insulation_assembly_r_value: args[:roof_assembly_r])
3885
4018
  end
@@ -3891,37 +4024,52 @@ class HPXMLFile
3891
4024
  end
3892
4025
  end
3893
4026
 
4027
+ def self.get_adiabatic_adjacent_surface(model, surface)
4028
+ return if surface.outsideBoundaryCondition != 'Adiabatic'
4029
+
4030
+ adjacentSurfaceType = 'Wall'
4031
+ if surface.surfaceType == 'RoofCeiling'
4032
+ adjacentSurfaceType = 'Floor'
4033
+ elsif surface.surfaceType == 'Floor'
4034
+ adjacentSurfaceType = 'RoofCeiling'
4035
+ end
4036
+
4037
+ model.getSurfaces.sort.each do |adjacent_surface|
4038
+ next if surface == adjacent_surface
4039
+ next if adjacent_surface.surfaceType != adjacentSurfaceType
4040
+ next if adjacent_surface.outsideBoundaryCondition != 'Adiabatic'
4041
+ next if Geometry.getSurfaceXValues([surface]) != Geometry.getSurfaceXValues([adjacent_surface])
4042
+ next if Geometry.getSurfaceYValues([surface]) != Geometry.getSurfaceYValues([adjacent_surface])
4043
+ next if Geometry.getSurfaceZValues([surface]) != Geometry.getSurfaceZValues([adjacent_surface])
4044
+
4045
+ return adjacent_surface
4046
+ end
4047
+ return
4048
+ end
4049
+
3894
4050
  def self.set_walls(hpxml, runner, model, args)
3895
4051
  model.getSurfaces.sort.each do |surface|
3896
4052
  next if surface.surfaceType != 'Wall'
3897
4053
 
3898
4054
  interior_adjacent_to = get_adjacent_to(surface)
3899
- if [HPXML::LocationOtherHousingUnit].include? interior_adjacent_to
3900
- has_door = false
3901
- surface.subSurfaces.each do |sub_surface|
3902
- next if sub_surface.subSurfaceType != 'Door'
3903
-
3904
- has_door = true
3905
- end
3906
- next unless has_door
3907
- else
3908
- next unless [HPXML::LocationLivingSpace, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented, HPXML::LocationGarage].include? interior_adjacent_to
3909
- end
4055
+ next unless [HPXML::LocationLivingSpace, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented, HPXML::LocationGarage].include? interior_adjacent_to
3910
4056
 
3911
4057
  exterior_adjacent_to = HPXML::LocationOutside
3912
4058
  if surface.adjacentSurface.is_initialized
3913
4059
  exterior_adjacent_to = get_adjacent_to(surface.adjacentSurface.get)
3914
- elsif surface.outsideBoundaryCondition == 'Adiabatic'
3915
- exterior_adjacent_to = HPXML::LocationOtherHousingUnit
4060
+ elsif surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to living space, attic, corridor
4061
+ adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
4062
+ if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
4063
+ exterior_adjacent_to = interior_adjacent_to
4064
+ if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
4065
+ exterior_adjacent_to = HPXML::LocationOtherHousingUnit
4066
+ end
4067
+ else # adjacent to a space that is explicitly in the model, e.g., corridor
4068
+ exterior_adjacent_to = get_adjacent_to(adjacent_surface)
4069
+ end
3916
4070
  end
3917
4071
 
3918
- if interior_adjacent_to == HPXML::LocationOtherHousingUnit && exterior_adjacent_to == HPXML::LocationOtherHousingUnit
3919
- interior_adjacent_to = HPXML::LocationLivingSpace
3920
- exterior_adjacent_to == HPXML::LocationOtherHousingUnit
3921
- else
3922
- next if interior_adjacent_to == exterior_adjacent_to
3923
- end
3924
- next if [HPXML::LocationLivingSpace, HPXML::LocationBasementConditioned].include? exterior_adjacent_to
4072
+ next if exterior_adjacent_to == HPXML::LocationLivingSpace # already captured these surfaces
3925
4073
 
3926
4074
  wall_type = args[:wall_type]
3927
4075
  if [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? interior_adjacent_to
@@ -3944,15 +4092,22 @@ class HPXMLFile
3944
4092
  solar_absorptance = args[:wall_solar_absorptance]
3945
4093
  end
3946
4094
 
4095
+ if args[:wall_emittance] != Constants.Auto
4096
+ emittance = args[:wall_emittance]
4097
+ end
4098
+
4099
+ azimuth = get_surface_azimuth(surface, args)
4100
+
3947
4101
  hpxml.walls.add(id: valid_attr(surface.name),
3948
4102
  exterior_adjacent_to: exterior_adjacent_to,
3949
4103
  interior_adjacent_to: interior_adjacent_to,
4104
+ azimuth: azimuth,
3950
4105
  wall_type: wall_type,
3951
4106
  siding: siding,
3952
4107
  color: color,
3953
4108
  solar_absorptance: solar_absorptance,
3954
4109
  area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round,
3955
- emittance: args[:wall_emittance])
4110
+ emittance: emittance)
3956
4111
 
3957
4112
  is_uncond_attic_roof_insulated = false
3958
4113
  if [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? interior_adjacent_to
@@ -3973,26 +4128,54 @@ class HPXMLFile
3973
4128
 
3974
4129
  def self.set_foundation_walls(hpxml, runner, model, args)
3975
4130
  model.getSurfaces.sort.each do |surface|
3976
- next unless ['Foundation'].include? surface.outsideBoundaryCondition
3977
4131
  next if surface.surfaceType != 'Wall'
4132
+ next unless ['Foundation', 'Adiabatic'].include? surface.outsideBoundaryCondition
4133
+
4134
+ interior_adjacent_to = get_adjacent_to(surface)
4135
+ next unless [HPXML::LocationBasementConditioned, HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
4136
+
4137
+ exterior_adjacent_to = HPXML::LocationGround
4138
+ if surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to foundation space
4139
+ next if [HPXML::ResidentialTypeSFD, HPXML::ResidentialTypeManufactured].include? args[:geometry_unit_type] # these are surfaces for kiva
4140
+
4141
+ adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
4142
+ if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
4143
+ exterior_adjacent_to = interior_adjacent_to
4144
+ if exterior_adjacent_to == HPXML::LocationLivingSpace # living adjacent to living
4145
+ exterior_adjacent_to = HPXML::LocationOtherHousingUnit
4146
+ end
4147
+ else # adjacent to a space that is explicitly in the model, e.g., corridor
4148
+ exterior_adjacent_to = get_adjacent_to(adjacent_surface)
4149
+ end
4150
+ end
3978
4151
 
3979
4152
  if args[:foundation_wall_assembly_r].is_initialized && (args[:foundation_wall_assembly_r].get > 0)
3980
4153
  insulation_assembly_r_value = args[:foundation_wall_assembly_r]
3981
4154
  else
3982
- insulation_exterior_r_value = args[:foundation_wall_insulation_r]
3983
- insulation_exterior_distance_to_top = args[:foundation_wall_insulation_distance_to_top]
3984
- insulation_exterior_distance_to_bottom = args[:foundation_wall_insulation_distance_to_bottom]
4155
+ if interior_adjacent_to == exterior_adjacent_to # E.g., don't insulate wall between basement and neighbor basement
4156
+ insulation_exterior_r_value = 0
4157
+ insulation_exterior_distance_to_top = 0
4158
+ insulation_exterior_distance_to_bottom = 0
4159
+ else
4160
+ insulation_exterior_r_value = args[:foundation_wall_insulation_r]
4161
+ insulation_exterior_distance_to_top = args[:foundation_wall_insulation_distance_to_top]
4162
+ insulation_exterior_distance_to_bottom = args[:foundation_wall_insulation_distance_to_bottom]
4163
+ end
3985
4164
  insulation_interior_r_value = 0
3986
4165
  insulation_interior_distance_to_top = 0
3987
4166
  insulation_interior_distance_to_bottom = 0
3988
4167
  end
3989
4168
 
4169
+ if args[:foundation_wall_thickness] != Constants.Auto
4170
+ thickness = args[:foundation_wall_thickness]
4171
+ end
4172
+
3990
4173
  hpxml.foundation_walls.add(id: valid_attr(surface.name),
3991
- exterior_adjacent_to: HPXML::LocationGround,
3992
- interior_adjacent_to: get_adjacent_to(surface),
4174
+ exterior_adjacent_to: exterior_adjacent_to,
4175
+ interior_adjacent_to: interior_adjacent_to,
3993
4176
  height: args[:geometry_foundation_height],
3994
4177
  area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round,
3995
- thickness: 8,
4178
+ thickness: thickness,
3996
4179
  depth_below_grade: args[:geometry_foundation_height] - args[:geometry_foundation_height_above_grade],
3997
4180
  insulation_assembly_r_value: insulation_assembly_r_value,
3998
4181
  insulation_interior_r_value: insulation_interior_r_value,
@@ -4078,11 +4261,22 @@ class HPXMLFile
4078
4261
  under_slab_insulation_width = args[:slab_under_width]
4079
4262
  end
4080
4263
 
4081
- thickness = 4.0
4264
+ if args[:slab_thickness] != Constants.Auto
4265
+ thickness = args[:slab_thickness]
4266
+ end
4267
+
4082
4268
  if interior_adjacent_to.include? 'crawlspace'
4083
4269
  thickness = 0.0 # Assume soil
4084
4270
  end
4085
4271
 
4272
+ if args[:slab_carpet_fraction] != Constants.Auto
4273
+ carpet_fraction = args[:slab_carpet_fraction]
4274
+ end
4275
+
4276
+ if args[:slab_carpet_r] != Constants.Auto
4277
+ carpet_r_value = args[:slab_carpet_r]
4278
+ end
4279
+
4086
4280
  hpxml.slabs.add(id: valid_attr(surface.name),
4087
4281
  interior_adjacent_to: interior_adjacent_to,
4088
4282
  area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2').round,
@@ -4094,8 +4288,8 @@ class HPXMLFile
4094
4288
  under_slab_insulation_r_value: args[:slab_under_insulation_r],
4095
4289
  under_slab_insulation_spans_entire_slab: under_slab_insulation_spans_entire_slab,
4096
4290
  depth_below_grade: depth_below_grade,
4097
- carpet_fraction: args[:slab_carpet_fraction],
4098
- carpet_r_value: args[:slab_carpet_r])
4291
+ carpet_fraction: carpet_fraction,
4292
+ carpet_r_value: carpet_r_value)
4099
4293
  end
4100
4294
  end
4101
4295
 
@@ -4143,15 +4337,7 @@ class HPXMLFile
4143
4337
  overhangs_distance_to_bottom_of_window = (overhangs_distance_to_top_of_window + sub_surface_height).round
4144
4338
  end
4145
4339
 
4146
- if sub_surface_facade == Constants.FacadeFront
4147
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 0, args[:geometry_orientation], 0)
4148
- elsif sub_surface_facade == Constants.FacadeBack
4149
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 180, args[:geometry_orientation], 0)
4150
- elsif sub_surface_facade == Constants.FacadeLeft
4151
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 90, args[:geometry_orientation], 0)
4152
- elsif sub_surface_facade == Constants.FacadeRight
4153
- azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 270, args[:geometry_orientation], 0)
4154
- end
4340
+ azimuth = get_azimuth_from_facade(sub_surface_facade, args)
4155
4341
 
4156
4342
  if args[:window_interior_shading_winter].is_initialized
4157
4343
  interior_shading_factor_winter = args[:window_interior_shading_winter].get
@@ -4200,13 +4386,21 @@ class HPXMLFile
4200
4386
 
4201
4387
  def self.set_doors(hpxml, runner, model, args)
4202
4388
  model.getSurfaces.sort.each do |surface|
4389
+ interior_adjacent_to = get_adjacent_to(surface)
4390
+
4391
+ adjacent_surface = surface
4392
+ if [HPXML::LocationOtherHousingUnit].include?(interior_adjacent_to)
4393
+ adjacent_surface = get_adiabatic_adjacent_surface(model, surface)
4394
+ next if adjacent_surface.nil?
4395
+ end
4396
+
4203
4397
  surface.subSurfaces.sort.each do |sub_surface|
4204
4398
  next if sub_surface.subSurfaceType != 'Door'
4205
4399
 
4206
4400
  sub_surface_facade = Geometry.get_facade_for_surface(sub_surface)
4207
4401
 
4208
4402
  hpxml.doors.add(id: "#{valid_attr(sub_surface.name)}_#{sub_surface_facade}",
4209
- wall_idref: valid_attr(surface.name),
4403
+ wall_idref: valid_attr(adjacent_surface.name),
4210
4404
  area: UnitConversions.convert(sub_surface.grossArea, 'm^2', 'ft^2').round,
4211
4405
  azimuth: args[:geometry_orientation],
4212
4406
  r_value: args[:door_rvalue])
@@ -4241,6 +4435,16 @@ class HPXMLFile
4241
4435
  heating_efficiency_percent = args[:heating_system_heating_efficiency]
4242
4436
  end
4243
4437
 
4438
+ if [HPXML::HVACTypeFurnace].include? heating_system_type
4439
+ if args[:heating_system_fan_power_watts_per_cfm].is_initialized
4440
+ fan_watts_per_cfm = args[:heating_system_fan_power_watts_per_cfm].get
4441
+ end
4442
+ elsif [HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace, HPXML::HVACTypeStove, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFireplace, HPXML::HVACTypeFixedHeater].include? heating_system_type
4443
+ if args[:heating_system_fan_power_watts].is_initialized
4444
+ fan_watts = args[:heating_system_fan_power_watts].get
4445
+ end
4446
+ end
4447
+
4244
4448
  hpxml.heating_systems.add(id: 'HeatingSystem',
4245
4449
  heating_system_type: heating_system_type,
4246
4450
  heating_system_fuel: heating_system_fuel,
@@ -4248,7 +4452,9 @@ class HPXMLFile
4248
4452
  fraction_heat_load_served: args[:heating_system_fraction_heat_load_served],
4249
4453
  electric_auxiliary_energy: electric_auxiliary_energy,
4250
4454
  heating_efficiency_afue: heating_efficiency_afue,
4251
- heating_efficiency_percent: heating_efficiency_percent)
4455
+ heating_efficiency_percent: heating_efficiency_percent,
4456
+ fan_watts_per_cfm: fan_watts_per_cfm,
4457
+ fan_watts: fan_watts)
4252
4458
 
4253
4459
  heating_system_type_2 = args[:heating_system_type_2]
4254
4460
 
@@ -4276,6 +4482,10 @@ class HPXMLFile
4276
4482
  heating_efficiency_percent_2 = args[:heating_system_heating_efficiency_2]
4277
4483
  end
4278
4484
 
4485
+ if args[:heating_system_fan_power_watts_2].is_initialized
4486
+ fan_watts = args[:heating_system_fan_power_watts_2].get
4487
+ end
4488
+
4279
4489
  hpxml.heating_systems.add(id: 'SecondHeatingSystem',
4280
4490
  heating_system_type: heating_system_type_2,
4281
4491
  heating_system_fuel: heating_system_fuel_2,
@@ -4283,7 +4493,8 @@ class HPXMLFile
4283
4493
  fraction_heat_load_served: args[:heating_system_fraction_heat_load_served_2],
4284
4494
  electric_auxiliary_energy: electric_auxiliary_energy_2,
4285
4495
  heating_efficiency_afue: heating_efficiency_afue_2,
4286
- heating_efficiency_percent: heating_efficiency_percent_2)
4496
+ heating_efficiency_percent: heating_efficiency_percent_2,
4497
+ fan_watts: fan_watts)
4287
4498
  end
4288
4499
 
4289
4500
  def self.set_cooling_systems(hpxml, runner, args)
@@ -4315,6 +4526,12 @@ class HPXMLFile
4315
4526
  cooling_efficiency_eer = args[:cooling_system_cooling_efficiency_eer]
4316
4527
  end
4317
4528
 
4529
+ if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeEvaporativeCooler, HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system_type
4530
+ if args[:cooling_system_fan_power_watts_per_cfm].is_initialized
4531
+ fan_watts_per_cfm = args[:cooling_system_fan_power_watts_per_cfm].get
4532
+ end
4533
+ end
4534
+
4318
4535
  hpxml.cooling_systems.add(id: 'CoolingSystem',
4319
4536
  cooling_system_type: cooling_system_type,
4320
4537
  cooling_system_fuel: HPXML::FuelTypeElectricity,
@@ -4323,7 +4540,8 @@ class HPXMLFile
4323
4540
  compressor_type: compressor_type,
4324
4541
  cooling_shr: cooling_shr,
4325
4542
  cooling_efficiency_seer: cooling_efficiency_seer,
4326
- cooling_efficiency_eer: cooling_efficiency_eer)
4543
+ cooling_efficiency_eer: cooling_efficiency_eer,
4544
+ fan_watts_per_cfm: fan_watts_per_cfm)
4327
4545
  end
4328
4546
 
4329
4547
  def self.set_heat_pumps(hpxml, runner, args)
@@ -4381,13 +4599,13 @@ class HPXMLFile
4381
4599
  heating_efficiency_cop = args[:heat_pump_heating_efficiency_cop]
4382
4600
  cooling_efficiency_eer = args[:heat_pump_cooling_efficiency_eer]
4383
4601
 
4384
- if args[:heat_pump_ground_to_air_pump_power].is_initialized
4385
- pump_watts_per_ton = args[:heat_pump_ground_to_air_pump_power].get
4602
+ if args[:heat_pump_pump_power_watts_per_ton].is_initialized
4603
+ pump_watts_per_ton = args[:heat_pump_pump_power_watts_per_ton].get
4386
4604
  end
4605
+ end
4387
4606
 
4388
- if args[:heat_pump_ground_to_air_fan_power].is_initialized
4389
- fan_watts_per_cfm = args[:heat_pump_ground_to_air_fan_power].get
4390
- end
4607
+ if args[:heat_pump_fan_power_watts_per_cfm].is_initialized
4608
+ fan_watts_per_cfm = args[:heat_pump_fan_power_watts_per_cfm].get
4391
4609
  end
4392
4610
 
4393
4611
  hpxml.heat_pumps.add(id: 'HeatPump',
@@ -4507,21 +4725,51 @@ class HPXMLFile
4507
4725
  end
4508
4726
  end
4509
4727
 
4728
+ def self.modify_setpoint_schedule(schedule, offset_magnitude, offset_schedule)
4729
+ offset_schedule.each_with_index do |direction, i|
4730
+ schedule[i] += offset_magnitude * direction
4731
+ end
4732
+ return schedule
4733
+ end
4734
+
4510
4735
  def self.set_hvac_control(hpxml, runner, args)
4511
4736
  return if (args[:heating_system_type] == 'none') && (args[:cooling_system_type] == 'none') && (args[:heat_pump_type] == 'none')
4512
4737
 
4513
- if (args[:setpoint_heating_temp] != args[:setpoint_heating_setback_temp]) && (args[:setpoint_heating_setback_hours_per_week] > 0)
4514
- heating_setback_temp = args[:setpoint_heating_setback_temp]
4515
- heating_setback_hours_per_week = args[:setpoint_heating_setback_hours_per_week]
4516
- heating_setback_start_hour = args[:setpoint_heating_setback_start_hour]
4738
+ weekday_heating_setpoints = [args[:setpoint_heating_weekday_temp]] * 24
4739
+ weekend_heating_setpoints = [args[:setpoint_heating_weekend_temp]] * 24
4740
+
4741
+ weekday_cooling_setpoints = [args[:setpoint_cooling_weekday_temp]] * 24
4742
+ weekend_cooling_setpoints = [args[:setpoint_cooling_weekend_temp]] * 24
4743
+
4744
+ if args[:setpoint_heating_weekday_offset_magnitude].is_initialized && args[:setpoint_heating_weekday_schedule].is_initialized
4745
+ setpoint_heating_weekday_offset_magnitude = args[:setpoint_heating_weekday_offset_magnitude].get
4746
+ setpoint_heating_weekday_schedule = args[:setpoint_heating_weekday_schedule].get.split(',').map { |i| Float(i) }
4747
+ weekday_heating_setpoints = modify_setpoint_schedule(weekday_heating_setpoints, setpoint_heating_weekday_offset_magnitude, setpoint_heating_weekday_schedule)
4748
+ end
4749
+
4750
+ if args[:setpoint_heating_weekend_offset_magnitude].is_initialized && args[:setpoint_heating_weekend_schedule].is_initialized
4751
+ setpoint_heating_weekend_offset_magnitude = args[:setpoint_heating_weekend_offset_magnitude].get
4752
+ setpoint_heating_weekend_schedule = args[:setpoint_heating_weekend_schedule].get.split(',').map { |i| Float(i) }
4753
+ weekend_heating_setpoints = modify_setpoint_schedule(weekend_heating_setpoints, setpoint_heating_weekend_offset_magnitude, setpoint_heating_weekend_schedule)
4754
+ end
4755
+
4756
+ if args[:setpoint_cooling_weekday_offset_magnitude].is_initialized && args[:setpoint_cooling_weekday_schedule].is_initialized
4757
+ setpoint_cooling_weekday_offset_magnitude = args[:setpoint_cooling_weekday_offset_magnitude].get
4758
+ setpoint_cooling_weekday_schedule = args[:setpoint_cooling_weekday_schedule].get.split(',').map { |i| Float(i) }
4759
+ weekday_cooling_setpoints = modify_setpoint_schedule(weekday_cooling_setpoints, setpoint_cooling_weekday_offset_magnitude, setpoint_cooling_weekday_schedule)
4517
4760
  end
4518
4761
 
4519
- if (args[:setpoint_cooling_temp] != args[:setpoint_cooling_setup_temp]) && (args[:setpoint_cooling_setup_hours_per_week] > 0)
4520
- cooling_setup_temp = args[:setpoint_cooling_setup_temp]
4521
- cooling_setup_hours_per_week = args[:setpoint_cooling_setup_hours_per_week]
4522
- cooling_setup_start_hour = args[:setpoint_cooling_setup_start_hour]
4762
+ if args[:setpoint_cooling_weekend_offset_magnitude].is_initialized && args[:setpoint_cooling_weekend_schedule].is_initialized
4763
+ setpoint_cooling_weekend_offset_magnitude = args[:setpoint_cooling_weekend_offset_magnitude].get
4764
+ setpoint_cooling_weekend_schedule = args[:setpoint_cooling_weekend_schedule].get.split(',').map { |i| Float(i) }
4765
+ weekend_cooling_setpoints = modify_setpoint_schedule(weekend_cooling_setpoints, setpoint_cooling_weekend_offset_magnitude, setpoint_cooling_weekend_schedule)
4523
4766
  end
4524
4767
 
4768
+ weekday_heating_setpoints = weekday_heating_setpoints.join(', ')
4769
+ weekend_heating_setpoints = weekend_heating_setpoints.join(', ')
4770
+ weekday_cooling_setpoints = weekday_cooling_setpoints.join(', ')
4771
+ weekend_cooling_setpoints = weekend_cooling_setpoints.join(', ')
4772
+
4525
4773
  ceiling_fan_quantity = nil
4526
4774
  if args[:ceiling_fan_quantity] != Constants.Auto
4527
4775
  ceiling_fan_quantity = Float(args[:ceiling_fan_quantity])
@@ -4532,14 +4780,10 @@ class HPXMLFile
4532
4780
  end
4533
4781
 
4534
4782
  hpxml.hvac_controls.add(id: 'HVACControl',
4535
- heating_setpoint_temp: args[:setpoint_heating_temp],
4536
- cooling_setpoint_temp: args[:setpoint_cooling_temp],
4537
- heating_setback_temp: heating_setback_temp,
4538
- heating_setback_hours_per_week: heating_setback_hours_per_week,
4539
- heating_setback_start_hour: heating_setback_start_hour,
4540
- cooling_setup_temp: cooling_setup_temp,
4541
- cooling_setup_hours_per_week: cooling_setup_hours_per_week,
4542
- cooling_setup_start_hour: cooling_setup_start_hour,
4783
+ weekday_heating_setpoints: weekday_heating_setpoints,
4784
+ weekend_heating_setpoints: weekend_heating_setpoints,
4785
+ weekday_cooling_setpoints: weekday_cooling_setpoints,
4786
+ weekend_cooling_setpoints: weekend_cooling_setpoints,
4543
4787
  ceiling_fan_cooling_setpoint_temp_offset: ceiling_fan_cooling_setpoint_temp_offset)
4544
4788
  end
4545
4789
 
@@ -4575,9 +4819,9 @@ class HPXMLFile
4575
4819
  end
4576
4820
  end
4577
4821
 
4578
- if args[:mech_vent_is_shared_system]
4579
- is_shared_system = args[:mech_vent_is_shared_system]
4580
- in_unit_flow_rate = args[:shared_mech_vent_in_unit_flow_rate].get
4822
+ if args[:mech_vent_num_units_served] > 1
4823
+ is_shared_system = true
4824
+ in_unit_flow_rate = args[:mech_vent_flow_rate] / args[:mech_vent_num_units_served].to_f
4581
4825
  fraction_recirculation = args[:shared_mech_vent_frac_recirculation].get
4582
4826
  if args[:shared_mech_vent_preheating_fuel].is_initialized && args[:shared_mech_vent_preheating_efficiency].is_initialized && args[:shared_mech_vent_preheating_fraction_heat_load_served].is_initialized
4583
4827
  preheating_fuel = args[:shared_mech_vent_preheating_fuel].get
@@ -4759,9 +5003,12 @@ class HPXMLFile
4759
5003
 
4760
5004
  if not [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? water_heater_type
4761
5005
  if args[:water_heater_efficiency_type] == 'EnergyFactor'
4762
- energy_factor = args[:water_heater_efficiency_ef]
5006
+ energy_factor = args[:water_heater_efficiency]
4763
5007
  elsif args[:water_heater_efficiency_type] == 'UniformEnergyFactor'
4764
- uniform_energy_factor = args[:water_heater_efficiency_uef]
5008
+ uniform_energy_factor = args[:water_heater_efficiency]
5009
+ if water_heater_type != HPXML::WaterHeaterTypeTankless
5010
+ first_hour_rating = args[:water_heater_first_hour_rating]
5011
+ end
4765
5012
  end
4766
5013
  end
4767
5014
 
@@ -4771,6 +5018,10 @@ class HPXMLFile
4771
5018
  end
4772
5019
  end
4773
5020
 
5021
+ if [HPXML::WaterHeaterTypeTankless, HPXML::WaterHeaterTypeCombiTankless].include? water_heater_type
5022
+ tank_volume = nil
5023
+ end
5024
+
4774
5025
  if [HPXML::WaterHeaterTypeTankless].include? water_heater_type
4775
5026
  heating_capacity = nil
4776
5027
  recovery_efficiency = nil
@@ -4802,27 +5053,21 @@ class HPXMLFile
4802
5053
  end
4803
5054
  end
4804
5055
 
4805
- if [HPXML::WaterHeaterTypeTankless].include? water_heater_type
4806
- if args[:water_heater_performance_adjustment].is_initialized
4807
- performance_adjustment = args[:water_heater_performance_adjustment].get
4808
- end
4809
- end
4810
-
4811
- if args[:water_heater_is_shared_system]
4812
- is_shared_system = args[:water_heater_is_shared_system]
4813
- number_of_units_served = args[:geometry_building_num_units].get
5056
+ if args[:water_heater_num_units_served] > 1
5057
+ is_shared_system = true
5058
+ number_of_units_served = args[:water_heater_num_units_served]
4814
5059
  end
4815
5060
 
4816
5061
  hpxml.water_heating_systems.add(id: 'WaterHeater',
4817
5062
  water_heater_type: water_heater_type,
4818
5063
  fuel_type: fuel_type,
4819
5064
  location: location,
4820
- performance_adjustment: performance_adjustment,
4821
5065
  tank_volume: tank_volume,
4822
5066
  fraction_dhw_load_served: 1.0,
4823
5067
  heating_capacity: heating_capacity,
4824
5068
  energy_factor: energy_factor,
4825
5069
  uniform_energy_factor: uniform_energy_factor,
5070
+ first_hour_rating: first_hour_rating,
4826
5071
  recovery_efficiency: recovery_efficiency,
4827
5072
  related_hvac_idref: related_hvac_idref,
4828
5073
  standby_loss: standby_loss,
@@ -4861,6 +5106,10 @@ class HPXMLFile
4861
5106
  end
4862
5107
  end
4863
5108
 
5109
+ if args[:dhw_distribution_pipe_r] != Constants.Auto
5110
+ pipe_r_value = args[:dhw_distribution_pipe_r]
5111
+ end
5112
+
4864
5113
  hpxml.hot_water_distributions.add(id: 'HotWaterDistribution',
4865
5114
  system_type: args[:dhw_distribution_system_type],
4866
5115
  standard_piping_length: standard_piping_length,
@@ -4868,7 +5117,7 @@ class HPXMLFile
4868
5117
  recirculation_piping_length: recirculation_piping_length,
4869
5118
  recirculation_branch_piping_length: recirculation_branch_piping_length,
4870
5119
  recirculation_pump_power: recirculation_pump_power,
4871
- pipe_r_value: args[:dhw_distribution_pipe_r],
5120
+ pipe_r_value: pipe_r_value,
4872
5121
  dwhr_facilities_connected: dwhr_facilities_connected,
4873
5122
  dwhr_equal_flow: dwhr_equal_flow,
4874
5123
  dwhr_efficiency: dwhr_efficiency)
@@ -4912,7 +5161,7 @@ class HPXMLFile
4912
5161
  collector_loop_type = args[:solar_thermal_collector_loop_type]
4913
5162
  collector_type = args[:solar_thermal_collector_type]
4914
5163
  collector_azimuth = args[:solar_thermal_collector_azimuth]
4915
- collector_tilt = get_absolute_tilt(args[:solar_thermal_collector_tilt], hpxml.roofs[-1].pitch, epw_file)
5164
+ collector_tilt = get_absolute_tilt(args[:solar_thermal_collector_tilt], args[:geometry_roof_pitch], epw_file)
4916
5165
  collector_frta = args[:solar_thermal_collector_rated_optical_efficiency]
4917
5166
  collector_frul = args[:solar_thermal_collector_rated_thermal_losses]
4918
5167
 
@@ -4940,8 +5189,20 @@ class HPXMLFile
4940
5189
  end
4941
5190
 
4942
5191
  def self.set_pv_systems(hpxml, runner, args, epw_file)
4943
- [args[:pv_system_module_type_1], args[:pv_system_module_type_2]].each_with_index do |module_type, i|
4944
- next if module_type == 'none'
5192
+ [args[:pv_system_module_type_1], args[:pv_system_module_type_2]].each_with_index do |pv_system_module_type, i|
5193
+ next if pv_system_module_type == 'none'
5194
+
5195
+ if [args[:pv_system_module_type_1], args[:pv_system_module_type_2]][i] != Constants.Auto
5196
+ module_type = [args[:pv_system_module_type_1], args[:pv_system_module_type_2]][i]
5197
+ end
5198
+
5199
+ if [args[:pv_system_location_1], args[:pv_system_location_2]][i] != Constants.Auto
5200
+ location = [args[:pv_system_location_1], args[:pv_system_location_2]][i]
5201
+ end
5202
+
5203
+ if [args[:pv_system_tracking_1], args[:pv_system_tracking_2]][i] != Constants.Auto
5204
+ tracking = [args[:pv_system_tracking_1], args[:pv_system_tracking_2]][i]
5205
+ end
4945
5206
 
4946
5207
  max_power_output = [args[:pv_system_max_power_output_1], args[:pv_system_max_power_output_2]][i]
4947
5208
 
@@ -4953,17 +5214,18 @@ class HPXMLFile
4953
5214
  system_losses_fraction = [args[:pv_system_system_losses_fraction_1], args[:pv_system_system_losses_fraction_2]][i].get
4954
5215
  end
4955
5216
 
4956
- if [args[:pv_system_is_shared_1], args[:pv_system_is_shared_2]][i]
4957
- is_shared_system = [args[:pv_system_is_shared_1], args[:pv_system_is_shared_2]][i]
4958
- number_of_bedrooms_served = args[:geometry_building_num_bedrooms].get
5217
+ num_units_served = [args[:pv_system_num_units_served_1], args[:pv_system_num_units_served_2]][i]
5218
+ if num_units_served > 1
5219
+ is_shared_system = true
5220
+ number_of_bedrooms_served = (args[:geometry_building_num_bedrooms].get * num_units_served / args[:geometry_building_num_units].get).to_i
4959
5221
  end
4960
5222
 
4961
5223
  hpxml.pv_systems.add(id: "PVSystem#{i + 1}",
4962
- location: [args[:pv_system_location_1], args[:pv_system_location_2]][i],
5224
+ location: location,
4963
5225
  module_type: module_type,
4964
- tracking: [args[:pv_system_tracking_1], args[:pv_system_tracking_2]][i],
5226
+ tracking: tracking,
4965
5227
  array_azimuth: [args[:pv_system_array_azimuth_1], args[:pv_system_array_azimuth_2]][i],
4966
- array_tilt: get_absolute_tilt([args[:pv_system_array_tilt_1], args[:pv_system_array_tilt_2]][i], hpxml.roofs[-1].pitch, epw_file),
5228
+ array_tilt: get_absolute_tilt([args[:pv_system_array_tilt_1], args[:pv_system_array_tilt_2]][i], args[:geometry_roof_pitch], epw_file),
4967
5229
  max_power_output: max_power_output,
4968
5230
  inverter_efficiency: inverter_efficiency,
4969
5231
  system_losses_fraction: system_losses_fraction,
@@ -5035,7 +5297,7 @@ class HPXMLFile
5035
5297
  end
5036
5298
 
5037
5299
  if args[:holiday_lighting_period_begin_day_of_month] != Constants.Auto
5038
- hpxml.lighting.holiday_period_begin_day_of_month = args[:holiday_lighting_period_begin_day_of_month]
5300
+ hpxml.lighting.holiday_period_begin_day = args[:holiday_lighting_period_begin_day_of_month]
5039
5301
  end
5040
5302
 
5041
5303
  if args[:holiday_lighting_period_end_month] != Constants.Auto
@@ -5043,7 +5305,7 @@ class HPXMLFile
5043
5305
  end
5044
5306
 
5045
5307
  if args[:holiday_lighting_period_end_day_of_month] != Constants.Auto
5046
- hpxml.lighting.holiday_period_end_day_of_month = args[:holiday_lighting_period_end_day_of_month]
5308
+ hpxml.lighting.holiday_period_end_day = args[:holiday_lighting_period_end_day_of_month]
5047
5309
  end
5048
5310
  end
5049
5311
 
@@ -5057,6 +5319,7 @@ class HPXMLFile
5057
5319
  end
5058
5320
 
5059
5321
  hpxml.dehumidifiers.add(id: 'Dehumidifier',
5322
+ type: args[:dehumidifier_type],
5060
5323
  capacity: args[:dehumidifier_capacity],
5061
5324
  energy_factor: energy_factor,
5062
5325
  integrated_energy_factor: integrated_energy_factor,
@@ -5339,8 +5602,9 @@ class HPXMLFile
5339
5602
  kWh_per_year = args[:plug_loads_television_annual_kwh]
5340
5603
  end
5341
5604
 
5342
- if args[:plug_loads_television_usage_multiplier] != 1.0
5343
- usage_multiplier = args[:plug_loads_television_usage_multiplier]
5605
+ usage_multiplier = args[:plug_loads_television_usage_multiplier] * args[:plug_loads_television_usage_multiplier_2]
5606
+ if usage_multiplier == 1.0
5607
+ usage_multiplier = nil
5344
5608
  end
5345
5609
 
5346
5610
  hpxml.plug_loads.add(id: 'PlugLoadsTelevision',
@@ -5362,8 +5626,9 @@ class HPXMLFile
5362
5626
  frac_latent = args[:plug_loads_other_frac_latent]
5363
5627
  end
5364
5628
 
5365
- if args[:plug_loads_other_usage_multiplier] != 1.0
5366
- usage_multiplier = args[:plug_loads_other_usage_multiplier]
5629
+ usage_multiplier = args[:plug_loads_other_usage_multiplier] * args[:plug_loads_other_usage_multiplier_2]
5630
+ if usage_multiplier == 1.0
5631
+ usage_multiplier = nil
5367
5632
  end
5368
5633
 
5369
5634
  hpxml.plug_loads.add(id: 'PlugLoadsOther',
@@ -5381,30 +5646,15 @@ class HPXMLFile
5381
5646
  kWh_per_year = args[:plug_loads_well_pump_annual_kwh]
5382
5647
  end
5383
5648
 
5384
- if args[:plug_loads_well_pump_usage_multiplier] != 1.0
5385
- usage_multiplier = args[:plug_loads_well_pump_usage_multiplier]
5386
- end
5387
-
5388
- if args[:plug_loads_well_pump_weekday_fractions] != Constants.Auto
5389
- weekday_fractions = args[:plug_loads_well_pump_weekday_fractions]
5390
- end
5391
-
5392
- if args[:plug_loads_well_pump_weekend_fractions] != Constants.Auto
5393
- weekend_fractions = args[:plug_loads_well_pump_weekend_fractions]
5394
- end
5395
-
5396
- if args[:plug_loads_well_pump_monthly_multipliers] != Constants.Auto
5397
- monthly_multipliers = args[:plug_loads_well_pump_monthly_multipliers]
5649
+ usage_multiplier = args[:plug_loads_well_pump_usage_multiplier] * args[:plug_loads_well_pump_usage_multiplier_2]
5650
+ if usage_multiplier == 1.0
5651
+ usage_multiplier = nil
5398
5652
  end
5399
5653
 
5400
5654
  hpxml.plug_loads.add(id: 'PlugLoadsWellPump',
5401
5655
  plug_load_type: HPXML::PlugLoadTypeWellPump,
5402
5656
  kWh_per_year: kWh_per_year,
5403
- usage_multiplier: usage_multiplier,
5404
- weekday_fractions: weekday_fractions,
5405
- weekend_fractions: weekend_fractions,
5406
- monthly_multipliers: monthly_multipliers,
5407
- location: HPXML::LocationExterior)
5657
+ usage_multiplier: usage_multiplier)
5408
5658
  end
5409
5659
 
5410
5660
  def self.set_plug_loads_vehicle(hpxml, runner, args)
@@ -5414,30 +5664,15 @@ class HPXMLFile
5414
5664
  kWh_per_year = args[:plug_loads_vehicle_annual_kwh]
5415
5665
  end
5416
5666
 
5417
- if args[:plug_loads_vehicle_usage_multiplier] != 1.0
5418
- usage_multiplier = args[:plug_loads_vehicle_usage_multiplier]
5419
- end
5420
-
5421
- if args[:plug_loads_vehicle_weekday_fractions] != Constants.Auto
5422
- weekday_fractions = args[:plug_loads_vehicle_weekday_fractions]
5423
- end
5424
-
5425
- if args[:plug_loads_vehicle_weekend_fractions] != Constants.Auto
5426
- weekend_fractions = args[:plug_loads_vehicle_weekend_fractions]
5427
- end
5428
-
5429
- if args[:plug_loads_vehicle_monthly_multipliers] != Constants.Auto
5430
- monthly_multipliers = args[:plug_loads_vehicle_monthly_multipliers]
5667
+ usage_multiplier = args[:plug_loads_vehicle_usage_multiplier] * args[:plug_loads_vehicle_usage_multiplier_2]
5668
+ if usage_multiplier == 1.0
5669
+ usage_multiplier = nil
5431
5670
  end
5432
5671
 
5433
5672
  hpxml.plug_loads.add(id: 'PlugLoadsVehicle',
5434
5673
  plug_load_type: HPXML::PlugLoadTypeElectricVehicleCharging,
5435
5674
  kWh_per_year: kWh_per_year,
5436
- usage_multiplier: usage_multiplier,
5437
- weekday_fractions: weekday_fractions,
5438
- weekend_fractions: weekend_fractions,
5439
- monthly_multipliers: monthly_multipliers,
5440
- location: HPXML::LocationExterior)
5675
+ usage_multiplier: usage_multiplier)
5441
5676
  end
5442
5677
 
5443
5678
  def self.set_fuel_loads_grill(hpxml, runner, args)
@@ -5446,10 +5681,6 @@ class HPXMLFile
5446
5681
  therm_per_year = args[:fuel_loads_grill_annual_therm]
5447
5682
  end
5448
5683
 
5449
- if args[:fuel_loads_grill_location] != Constants.Auto
5450
- location = args[:fuel_loads_grill_location]
5451
- end
5452
-
5453
5684
  if args[:fuel_loads_grill_usage_multiplier] != 1.0
5454
5685
  usage_multiplier = args[:fuel_loads_grill_usage_multiplier]
5455
5686
  end
@@ -5457,7 +5688,6 @@ class HPXMLFile
5457
5688
  hpxml.fuel_loads.add(id: 'FuelLoadsGrill',
5458
5689
  fuel_load_type: HPXML::FuelLoadTypeGrill,
5459
5690
  fuel_type: args[:fuel_loads_grill_fuel_type],
5460
- location: location,
5461
5691
  therm_per_year: therm_per_year,
5462
5692
  usage_multiplier: usage_multiplier)
5463
5693
  end
@@ -5469,10 +5699,6 @@ class HPXMLFile
5469
5699
  therm_per_year = args[:fuel_loads_lighting_annual_therm]
5470
5700
  end
5471
5701
 
5472
- if args[:fuel_loads_lighting_location] != Constants.Auto
5473
- location = args[:fuel_loads_lighting_location]
5474
- end
5475
-
5476
5702
  if args[:fuel_loads_lighting_usage_multiplier] != 1.0
5477
5703
  usage_multiplier = args[:fuel_loads_lighting_usage_multiplier]
5478
5704
  end
@@ -5480,7 +5706,6 @@ class HPXMLFile
5480
5706
  hpxml.fuel_loads.add(id: 'FuelLoadsLighting',
5481
5707
  fuel_load_type: HPXML::FuelLoadTypeLighting,
5482
5708
  fuel_type: args[:fuel_loads_lighting_fuel_type],
5483
- location: location,
5484
5709
  therm_per_year: therm_per_year,
5485
5710
  usage_multiplier: usage_multiplier)
5486
5711
  end
@@ -5492,8 +5717,12 @@ class HPXMLFile
5492
5717
  therm_per_year = args[:fuel_loads_fireplace_annual_therm]
5493
5718
  end
5494
5719
 
5495
- if args[:fuel_loads_fireplace_location] != Constants.Auto
5496
- location = args[:fuel_loads_fireplace_location]
5720
+ if args[:fuel_loads_fireplace_frac_sensible] != Constants.Auto
5721
+ frac_sensible = args[:fuel_loads_fireplace_frac_sensible]
5722
+ end
5723
+
5724
+ if args[:fuel_loads_fireplace_frac_latent] != Constants.Auto
5725
+ frac_latent = args[:fuel_loads_fireplace_frac_latent]
5497
5726
  end
5498
5727
 
5499
5728
  if args[:fuel_loads_fireplace_usage_multiplier] != 1.0
@@ -5503,8 +5732,9 @@ class HPXMLFile
5503
5732
  hpxml.fuel_loads.add(id: 'FuelLoadsFireplace',
5504
5733
  fuel_load_type: HPXML::FuelLoadTypeFireplace,
5505
5734
  fuel_type: args[:fuel_loads_fireplace_fuel_type],
5506
- location: location,
5507
5735
  therm_per_year: therm_per_year,
5736
+ frac_sensible: frac_sensible,
5737
+ frac_latent: frac_latent,
5508
5738
  usage_multiplier: usage_multiplier)
5509
5739
  end
5510
5740
  end
@@ -5623,6 +5853,25 @@ class HPXMLFile
5623
5853
  fail "Unhandled SpaceType value (#{space_type}) for surface '#{surface.name}'."
5624
5854
  end
5625
5855
  end
5856
+
5857
+ def self.get_surface_azimuth(surface, args)
5858
+ facade = Geometry.get_facade_for_surface(surface)
5859
+ return get_azimuth_from_facade(facade, args)
5860
+ end
5861
+
5862
+ def self.get_azimuth_from_facade(facade, args)
5863
+ if facade == Constants.FacadeFront
5864
+ azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 0, args[:geometry_orientation], 0)
5865
+ elsif facade == Constants.FacadeBack
5866
+ azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 180, args[:geometry_orientation], 0)
5867
+ elsif facade == Constants.FacadeLeft
5868
+ azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 90, args[:geometry_orientation], 0)
5869
+ elsif facade == Constants.FacadeRight
5870
+ azimuth = Geometry.get_abs_azimuth(Constants.CoordRelative, 270, args[:geometry_orientation], 0)
5871
+ else
5872
+ fail 'Unexpected facade.'
5873
+ end
5874
+ end
5626
5875
  end
5627
5876
 
5628
5877
  # register the measure to be used by the application