urbanopt-cli 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{nightly_build.yml → nightly_ci_build.yml} +6 -5
  3. data/CHANGELOG.md +16 -2
  4. data/CMakeLists.txt +7 -7
  5. data/Gemfile +8 -7
  6. data/LICENSE.md +18 -15
  7. data/README.md +2 -1
  8. data/Rakefile +2 -37
  9. data/example_files/Gemfile +10 -8
  10. data/example_files/mappers/Baseline.rb +170 -191
  11. data/example_files/mappers/ChilledWaterStorage.rb +8 -30
  12. data/example_files/mappers/ClassProject.rb +2 -27
  13. data/example_files/mappers/CreateBar.rb +2 -28
  14. data/example_files/mappers/EvCharging.rb +2 -27
  15. data/example_files/mappers/FlexibleHotWater.rb +2 -27
  16. data/example_files/mappers/Floorspace.rb +2 -27
  17. data/example_files/mappers/HighEfficiency.rb +2 -27
  18. data/example_files/mappers/HighEfficiencyCreateBar.rb +2 -27
  19. data/example_files/mappers/HighEfficiencyFloorspace.rb +2 -27
  20. data/example_files/mappers/PeakHoursMelsShedding.rb +4 -27
  21. data/example_files/mappers/PeakHoursThermostatAdjust.rb +4 -27
  22. data/example_files/mappers/ThermalStorage.rb +2 -28
  23. data/example_files/measures/BuildResidentialModel/measure.rb +30 -60
  24. data/example_files/measures/BuildResidentialModel/measure.xml +253 -84
  25. data/example_files/measures/BuildResidentialModel/resources/util.rb +45 -45
  26. data/example_files/python_deps/dependencies.json +3 -3
  27. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -1
  28. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +28 -19
  29. data/example_files/resources/hpxml-measures/.gitignore +0 -997
  30. data/example_files/resources/hpxml-measures/.readthedocs.yml +9 -0
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +476 -230
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +244 -75
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +42 -15
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +24 -9
  35. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +11 -33
  36. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +23 -50
  37. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/README.md +2 -2
  38. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/constants.rb +119 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +67 -290
  40. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.md +6 -5
  41. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +78 -349
  42. data/example_files/resources/hpxml-measures/Changelog.md +80 -10
  43. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +212 -144
  44. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +164 -170
  45. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +238 -167
  46. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +1 -1
  47. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -4
  48. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +36 -6
  49. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv +33 -0
  50. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
  51. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +9 -7
  52. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +79 -61
  53. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +387 -124
  54. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +427 -196
  55. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +11515 -2
  56. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/README.md +1 -0
  57. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +224 -85
  58. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +334 -319
  59. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +572 -838
  60. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +162 -68
  61. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +4 -20
  62. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +12 -10
  63. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +34 -37
  64. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +8 -101
  65. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +31 -40
  66. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -1
  67. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-non-stochastic.csv +8761 -0
  68. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-10-mins.csv +52561 -52561
  69. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic.csv +8761 -8761
  70. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +384 -155
  71. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +1 -1
  72. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/util.rb +2 -2
  73. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
  74. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +68 -90
  75. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +34 -223
  76. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +1 -1
  77. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +16 -4
  78. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +94 -40
  79. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +765 -302
  80. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +119 -69
  81. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +8 -8
  82. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
  83. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +51 -11
  84. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +196 -9
  85. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +36 -13
  86. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -3
  87. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
  88. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +571 -61
  89. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +190 -81
  90. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +11 -11
  91. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +188 -50
  92. data/example_files/resources/hpxml-measures/README.md +3 -3
  93. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +659 -815
  94. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +301 -1112
  95. data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +605 -350
  96. data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +18 -14
  97. data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +15 -15
  98. data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +13 -3
  99. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +3 -3
  100. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +894 -596
  101. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +127 -76
  102. data/example_files/resources/hpxml-measures/tasks.rb +185 -2802
  103. data/example_files/resources/hpxml-measures/workflow/hpxml_inputs.json +3401 -0
  104. data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +0 -1
  105. data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +0 -1
  106. data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +0 -1
  107. data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +0 -1
  108. data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +0 -1
  109. data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +1 -3
  110. data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +0 -1
  111. data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +1 -3
  112. data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +0 -1
  113. data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +1 -3
  114. data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +0 -1
  115. data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +0 -1
  116. data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +0 -1
  117. data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +0 -1
  118. data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +0 -1
  119. data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +3 -4
  120. data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +17 -4
  121. data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +2 -3
  122. data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +3 -4
  123. data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +3 -4
  124. data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +4 -5
  125. data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +3 -4
  126. data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +3 -4
  127. data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +3 -4
  128. data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +3 -4
  129. data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +1 -1
  130. data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +1 -1
  131. data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +1 -1
  132. data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +1 -1
  133. data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +0 -1
  134. data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +4 -5
  135. data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +3 -3
  136. data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +3 -3
  137. data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +3 -4
  138. data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +3 -3
  139. data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +3 -4
  140. data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +3 -3
  141. data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +3 -4
  142. data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +3 -3
  143. data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +3 -4
  144. data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +0 -1
  145. data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +0 -1
  146. data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +0 -1
  147. data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +0 -1
  148. data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +0 -1
  149. data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +1 -0
  150. data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +1 -0
  151. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +12 -8
  152. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +10 -40
  153. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +10 -40
  154. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +10 -40
  155. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +10 -40
  156. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +10 -40
  157. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +10 -40
  158. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +10 -40
  159. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +10 -40
  160. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +10 -40
  161. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +10 -40
  162. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +10 -40
  163. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +10 -40
  164. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +10 -40
  165. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +10 -40
  166. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +9 -39
  167. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +9 -39
  168. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +10 -40
  169. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +10 -40
  170. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +10 -40
  171. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +10 -40
  172. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +10 -40
  173. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-2stories.xml → base-bldgtype-attached-2stories.xml} +610 -639
  174. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-atticroof-cathedral.xml → base-bldgtype-attached-atticroof-cathedral.xml} +558 -587
  175. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-attached-infil-compartmentalization-test.xml +611 -0
  176. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached.xml → base-bldgtype-attached.xml} +610 -639
  177. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +10 -39
  178. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +10 -39
  179. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +10 -39
  180. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +10 -39
  181. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +10 -39
  182. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-infil-compartmentalization-test.xml +462 -0
  183. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-calctype-operational.xml → base-bldgtype-multifamily-residents-1.xml} +453 -480
  184. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +10 -39
  185. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +10 -39
  186. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +10 -39
  187. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +10 -39
  188. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +10 -39
  189. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +10 -39
  190. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +10 -39
  191. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +10 -39
  192. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +10 -39
  193. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +10 -39
  194. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +10 -39
  195. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +10 -39
  196. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +10 -39
  197. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +10 -39
  198. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +10 -39
  199. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +11 -40
  200. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +10 -39
  201. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +10 -39
  202. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +10 -39
  203. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +10 -39
  204. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +10 -39
  205. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +10 -39
  206. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +15 -40
  207. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +10 -39
  208. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +10 -39
  209. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +10 -39
  210. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +10 -40
  211. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +10 -40
  212. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +10 -40
  213. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +10 -40
  214. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +10 -40
  215. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +10 -40
  216. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +10 -40
  217. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +10 -40
  218. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +10 -40
  219. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +10 -40
  220. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +10 -40
  221. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +10 -40
  222. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +10 -40
  223. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +10 -40
  224. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +10 -40
  225. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +10 -40
  226. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +10 -40
  227. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +10 -40
  228. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +10 -40
  229. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +10 -40
  230. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +10 -40
  231. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +10 -40
  232. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +10 -40
  233. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +10 -40
  234. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +10 -40
  235. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +10 -40
  236. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +10 -40
  237. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +10 -40
  238. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +10 -40
  239. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +10 -40
  240. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +10 -40
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +10 -40
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +10 -40
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +10 -40
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +10 -40
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +10 -40
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +10 -40
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +10 -40
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +10 -40
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +10 -40
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +10 -40
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +11 -43
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +10 -40
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +10 -40
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +10 -40
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +10 -40
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +10 -40
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +10 -40
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +10 -40
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +10 -40
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +10 -40
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +10 -40
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +10 -40
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +10 -40
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +10 -40
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +10 -40
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +10 -40
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +10 -40
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +10 -40
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +10 -40
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +19 -25
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +10 -40
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +10 -40
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +10 -40
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +10 -40
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +10 -40
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +10 -40
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +10 -40
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +18 -24
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +11 -41
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +11 -41
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +10 -40
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ela.xml +549 -0
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +13 -43
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +10 -40
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-cfm.xml +552 -0
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +10 -40
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +10 -40
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +17 -47
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +10 -40
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +10 -40
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +10 -40
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +10 -40
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +10 -40
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +10 -40
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +10 -40
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +10 -40
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +10 -40
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +10 -40
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading-seasons.xml +559 -0
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +10 -40
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +10 -40
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +10 -40
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +19 -25
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +10 -40
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +10 -40
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-insulation.xml +10 -40
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +10 -40
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +10 -40
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +10 -40
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +10 -40
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +10 -40
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +10 -40
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +10 -40
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +10 -40
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +10 -40
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +10 -40
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-autosized-backup.xml +557 -0
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +16 -41
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml → base-hvac-air-to-air-heat-pump-1-speed-heating-capacity-17f.xml} +552 -583
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +16 -41
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml → base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml} +562 -586
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +16 -41
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +16 -41
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +16 -41
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml +587 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +17 -42
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +16 -41
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +16 -41
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +16 -41
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +10 -40
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +10 -40
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +10 -40
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +10 -40
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml +10 -40
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +10 -40
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +10 -40
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +10 -40
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +10 -40
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +10 -40
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +10 -40
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml +10 -40
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml +10 -40
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +10 -40
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +10 -40
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +10 -40
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +10 -40
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +10 -40
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +10 -40
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +10 -40
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +10 -40
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +11 -41
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +11 -41
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +11 -41
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted-backup-hardsized.xml +553 -0
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +11 -41
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +10 -40
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +10 -40
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +10 -40
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +10 -40
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +10 -40
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +10 -40
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +10 -40
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +10 -40
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +10 -40
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +10 -40
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +10 -40
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +10 -40
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +10 -40
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +10 -40
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +10 -40
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +10 -40
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +10 -40
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +10 -40
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +10 -40
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-baseboard.xml +519 -0
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +10 -40
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +10 -40
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +10 -40
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +16 -40
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +16 -40
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +16 -40
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +10 -40
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +10 -40
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +16 -40
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +16 -40
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +16 -40
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-sizing-controls.xml +566 -0
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +10 -40
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +10 -40
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +10 -40
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +10 -40
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +10 -40
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +10 -40
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only-pilot.xml +513 -0
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +10 -40
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +10 -40
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +10 -40
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +10 -40
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +10 -40
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +10 -40
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +10 -40
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +10 -40
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +16 -41
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-crankcase-heater-40w.xml +556 -0
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +10 -40
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +560 -0
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +17 -42
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +17 -42
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +17 -42
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +17 -42
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +10 -40
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +10 -40
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-buried.xml +555 -0
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-effective-rvalue.xml +553 -0
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +10 -40
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +10 -40
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +10 -40
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +10 -40
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -40
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +10 -40
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +10 -40
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +10 -40
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only-pilot-light.xml +506 -0
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +10 -40
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +10 -40
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +10 -40
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +10 -40
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +10 -40
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +10 -40
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +10 -40
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-pilot.xml +542 -0
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +10 -40
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +10 -40
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +10 -40
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +10 -40
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +10 -40
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +10 -40
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +10 -40
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +10 -40
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +10 -40
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +14 -41
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +14 -41
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +14 -41
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +10 -40
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +10 -40
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +10 -40
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +10 -40
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +10 -40
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +10 -40
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +14 -41
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +10 -40
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +10 -40
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +16 -41
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +16 -41
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +16 -41
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml +525 -0
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-furnace.xml +564 -0
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +16 -41
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml +506 -0
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -41
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +10 -40
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +10 -40
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +10 -40
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +10 -40
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-natural-gas.xml +10 -40
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +10 -40
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp-heating-capacity-17f.xml +513 -0
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +16 -40
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +10 -40
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +10 -40
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +10 -40
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +10 -40
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +10 -40
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +16 -40
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +10 -40
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +10 -40
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +10 -40
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +10 -40
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +10 -40
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +10 -40
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +10 -40
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +10 -40
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +10 -40
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +11 -41
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +10 -40
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-kwh-per-year.xml +529 -0
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-mixed.xml +537 -0
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none-ceiling-fans.xml +516 -0
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -7
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +10 -40
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +10 -40
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +10 -40
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +10 -40
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +10 -40
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +10 -40
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +10 -40
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +10 -40
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +10 -40
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +10 -40
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +10 -40
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +12 -42
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +10 -40
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +10 -40
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -40
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +10 -40
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +10 -40
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +10 -40
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +10 -40
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +10 -40
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +10 -40
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +10 -40
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +10 -40
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +10 -40
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +14 -44
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +10 -40
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +10 -40
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +10 -38
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +10 -40
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +16 -42
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +16 -42
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +16 -42
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +10 -40
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +14 -37
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +16 -42
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +12 -42
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +12 -42
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +12 -42
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +10 -40
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +10 -38
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +10 -38
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +10 -40
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading-bldgtype-multifamily.xml +509 -0
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +10 -40
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +10 -40
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +10 -41
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +30 -138
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +16 -42
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +24 -26
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-round-trip-efficiency.xml +16 -42
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +16 -42
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +16 -42
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +18 -44
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +18 -44
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +18 -44
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +16 -42
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0-runperiod-1-month.xml +560 -0
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0.xml +556 -0
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-loads-large-uncommon.xml → base-residents-1-misc-loads-large-uncommon.xml} +616 -644
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-loads-large-uncommon2.xml → base-residents-1-misc-loads-large-uncommon2.xml} +616 -644
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational.xml → base-residents-1.xml} +547 -575
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-defaults.xml → base-residents-5.xml} +515 -539
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +10 -40
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +10 -40
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml +565 -0
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-detailed-occupancy-smooth.xml → base-schedules-detailed-occupancy-stochastic-vacancy-year-round.xml} +563 -583
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +21 -41
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +10 -40
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +10 -40
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +10 -40
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +10 -40
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-available.xml +565 -0
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-unavailable.xml +565 -0
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml +620 -0
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy-year-round.xml +619 -0
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml +619 -0
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +10 -38
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +10 -40
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +10 -40
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +10 -40
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +10 -40
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-temperature-capacitance-multiplier.xml +10 -40
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +10 -40
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +10 -40
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +10 -40
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-30-mins.xml +10 -40
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +10 -37
  577. data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +16 -4
  578. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +16 -3
  579. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +16 -3
  580. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +16 -2
  581. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Long_Residence.xml +386 -0
  582. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Vatilo_Residence.xml +381 -0
  583. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Victor_Residence.xml +370 -0
  584. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +2 -2
  585. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +2 -5
  586. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +2 -5
  587. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +2 -5
  588. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +2 -5
  589. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +2 -5
  590. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +2 -5
  591. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +2 -5
  592. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +2 -5
  593. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +2 -5
  594. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +2 -5
  595. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +2 -5
  596. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +2 -5
  597. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +2 -5
  598. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +2 -5
  599. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +2 -5
  600. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +2 -12
  601. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +2 -12
  602. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +2 -5
  603. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +2 -5
  604. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +2 -5
  605. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +2 -5
  606. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +2 -5
  607. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +2 -5
  608. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -9
  609. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -9
  610. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +475 -444
  611. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +475 -444
  612. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +177 -112
  613. data/example_files/resources/meta_measure.rb +2 -27
  614. data/example_files/xml_building/17/README.md +3 -3
  615. data/lib/uo_cli/version.rb +3 -38
  616. data/lib/uo_cli.rb +3 -38
  617. data/uo_cli.gemspec +6 -7
  618. metadata +70 -51
  619. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.json +0 -388
  620. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +0 -6136
  621. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +0 -4846
  622. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-smooth.csv +0 -8761
  623. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-vacancy.csv +0 -8761
  624. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +0 -35
  625. data/example_files/resources/hpxml-measures/weather/USA_CO_Colorado.Springs-Peterson.Field.724660_TMY3-cache.csv +0 -35
  626. data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +0 -35
  627. data/example_files/resources/hpxml-measures/weather/USA_DE_Wilmington-New.Castle.County.AP.724089_TMY3-cache.csv +0 -35
  628. data/example_files/resources/hpxml-measures/weather/USA_FL_Miami.Intl.AP.722020_TMY3-cache.csv +0 -35
  629. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +0 -35
  630. data/example_files/resources/hpxml-measures/weather/USA_MD_Baltimore-Washington.Intl.AP.724060_TMY3-cache.csv +0 -35
  631. data/example_files/resources/hpxml-measures/weather/USA_MN_Duluth.Intl.AP.727450_TMY3-cache.csv +0 -35
  632. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +0 -35
  633. data/example_files/resources/hpxml-measures/weather/USA_NC_Charlotte-Douglas.Intl.AP.723140_TMY3-cache.csv +0 -35
  634. data/example_files/resources/hpxml-measures/weather/USA_NJ_Cape.May.County.AP.745966_TMY3-cache.csv +0 -35
  635. data/example_files/resources/hpxml-measures/weather/USA_NV_Las.Vegas-McCarran.Intl.AP.723860_TMY3-cache.csv +0 -35
  636. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +0 -35
  637. data/example_files/resources/hpxml-measures/weather/USA_TX_Dallas-Fort.Worth.Intl.AP.722590_TMY3-cache.csv +0 -35
  638. data/example_files/resources/hpxml-measures/weather/US_CO_Boulder_AMY_2012-cache.csv +0 -35
  639. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +0 -35
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +0 -2508
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +0 -2508
@@ -49,13 +49,13 @@ XMLHelper.write_file(hpxml.to_oga, "out.xml")
49
49
 
50
50
  class HPXML < Object
51
51
  HPXML_ATTRS = [:header, :site, :neighbor_buildings, :building_occupancy, :building_construction,
52
- :climate_and_risk_zones, :air_infiltration_measurements, :attics, :foundations,
53
- :roofs, :rim_joists, :walls, :foundation_walls, :floors, :slabs, :windows,
52
+ :climate_and_risk_zones, :air_infiltration, :air_infiltration_measurements, :attics,
53
+ :foundations, :roofs, :rim_joists, :walls, :foundation_walls, :floors, :slabs, :windows,
54
54
  :skylights, :doors, :partition_wall_mass, :furniture_mass, :heating_systems,
55
55
  :cooling_systems, :heat_pumps, :hvac_plant, :hvac_controls, :hvac_distributions,
56
56
  :ventilation_fans, :water_heating_systems, :hot_water_distributions, :water_fixtures,
57
- :water_heating, :solar_thermal_systems, :pv_systems, :generators, :batteries,
58
- :clothes_washers, :clothes_dryers, :dishwashers, :refrigerators,
57
+ :water_heating, :solar_thermal_systems, :pv_systems, :inverters, :generators,
58
+ :batteries, :clothes_washers, :clothes_dryers, :dishwashers, :refrigerators,
59
59
  :freezers, :dehumidifiers, :cooking_ranges, :ovens, :lighting_groups, :lighting,
60
60
  :ceiling_fans, :pools, :hot_tubs, :plug_loads, :fuel_loads]
61
61
  attr_reader(*HPXML_ATTRS, :doc, :errors, :warnings, :hpxml_path)
@@ -75,6 +75,7 @@ class HPXML < Object
75
75
  AtticTypeUnvented = 'UnventedAttic'
76
76
  AtticTypeVented = 'VentedAttic'
77
77
  AtticWallTypeGable = 'gable'
78
+ AtticWallTypeKneeWall = 'knee wall'
78
79
  BatteryTypeLithiumIon = 'Li-ion'
79
80
  BatteryLifetimeModelNone = 'None'
80
81
  BatteryLifetimeModelKandlerSmith = 'KandlerSmith'
@@ -92,6 +93,10 @@ class HPXML < Object
92
93
  ColorReflective = 'reflective'
93
94
  DehumidifierTypePortable = 'portable'
94
95
  DehumidifierTypeWholeHome = 'whole-home'
96
+ DuctBuriedInsulationNone = 'not buried'
97
+ DuctBuriedInsulationPartial = 'partially buried'
98
+ DuctBuriedInsulationFull = 'fully buried'
99
+ DuctBuriedInsulationDeep = 'deeply buried'
95
100
  DHWRecirControlTypeManual = 'manual demand control'
96
101
  DHWRecirControlTypeNone = 'no control'
97
102
  DHWRecirControlTypeSensor = 'presence sensor demand control'
@@ -199,6 +204,8 @@ class HPXML < Object
199
204
  InteriorFinishNone = 'none'
200
205
  InteriorFinishPlaster = 'plaster'
201
206
  InteriorFinishWood = 'wood'
207
+ InfiltrationTypeUnitTotal = 'unit total'
208
+ InfiltrationTypeUnitExterior = 'unit exterior only'
202
209
  LeakinessTight = 'tight'
203
210
  LeakinessAverage = 'average'
204
211
  LightingTypeCFL = 'CompactFluorescent'
@@ -236,8 +243,6 @@ class HPXML < Object
236
243
  MechVentTypeExhaust = 'exhaust only'
237
244
  MechVentTypeHRV = 'heat recovery ventilator'
238
245
  MechVentTypeSupply = 'supply only'
239
- OccupancyCalculationTypeAsset = 'asset'
240
- OccupancyCalculationTypeOperational = 'operational'
241
246
  OrientationEast = 'east'
242
247
  OrientationNorth = 'north'
243
248
  OrientationNortheast = 'northeast'
@@ -274,6 +279,9 @@ class HPXML < Object
274
279
  RoofTypePlasticRubber = 'plastic/rubber/synthetic sheeting'
275
280
  RoofTypeShingles = 'shingles'
276
281
  RoofTypeWoodShingles = 'wood shingles or shakes'
282
+ ScheduleRegular = 'regular schedule'
283
+ ScheduleAvailable = 'always available'
284
+ ScheduleUnavailable = 'always unavailable'
277
285
  ShieldingExposed = 'exposed'
278
286
  ShieldingNormal = 'normal'
279
287
  ShieldingWellShielded = 'well-shielded'
@@ -313,11 +321,13 @@ class HPXML < Object
313
321
  UnitsCFM = 'CFM'
314
322
  UnitsCFM25 = 'CFM25'
315
323
  UnitsCFM50 = 'CFM50'
324
+ UnitsCFMNatural = 'CFMnatural'
316
325
  UnitsCOP = 'COP'
317
326
  UnitsDegFPerHour = 'F/hr'
318
327
  UnitsDollars = '$'
319
328
  UnitsDollarsPerkW = '$/kW'
320
329
  UnitsEER = 'EER'
330
+ UnitsELA = 'EffectiveLeakageArea'
321
331
  UnitsCEER = 'CEER'
322
332
  UnitsHSPF = 'HSPF'
323
333
  UnitsHSPF2 = 'HSPF2'
@@ -349,7 +359,7 @@ class HPXML < Object
349
359
  WallTypeWoodStud = 'WoodStud'
350
360
  WaterFixtureTypeFaucet = 'faucet'
351
361
  WaterFixtureTypeShowerhead = 'shower head'
352
- WaterHeaterOperatingModeStandard = 'standard'
362
+ WaterHeaterOperatingModeHybridAuto = 'hybrid/auto'
353
363
  WaterHeaterOperatingModeHeatPumpOnly = 'heat pump only'
354
364
  WaterHeaterTankModelTypeMixed = 'mixed'
355
365
  WaterHeaterTankModelTypeStratified = 'stratified'
@@ -389,7 +399,7 @@ class HPXML < Object
389
399
  WindowClassResidential = 'residential'
390
400
  WindowClassLightCommercial = 'light commercial'
391
401
 
392
- def initialize(hpxml_path: nil, schema_path: nil, schematron_path: nil, collapse_enclosure: true, building_id: nil)
402
+ def initialize(hpxml_path: nil, schema_validator: nil, schematron_validator: nil, building_id: nil)
393
403
  @doc = nil
394
404
  @hpxml_path = hpxml_path
395
405
  @errors = []
@@ -399,8 +409,9 @@ class HPXML < Object
399
409
  if not hpxml_path.nil?
400
410
  @doc = XMLHelper.parse_file(hpxml_path)
401
411
 
402
- if not schema_path.nil?
403
- xsd_errors, xsd_warnings = XMLValidator.validate_against_schema(hpxml_path, schema_path)
412
+ # Validate against XSD schema
413
+ if not schema_validator.nil?
414
+ xsd_errors, xsd_warnings = XMLValidator.validate_against_schema(hpxml_path, schema_validator)
404
415
  @errors += xsd_errors
405
416
  @warnings += xsd_warnings
406
417
  return unless @errors.empty?
@@ -410,14 +421,10 @@ class HPXML < Object
410
421
  hpxml = XMLHelper.get_element(@doc, '/HPXML')
411
422
  Version.check_hpxml_version(XMLHelper.get_attribute_value(hpxml, 'schemaVersion'))
412
423
 
413
- if not schematron_path.nil?
414
- sct_errors, sct_warnings = XMLValidator.validate_against_schematron(hpxml_path, schematron_path, hpxml)
415
- @errors += sct_errors
416
- @warnings += sct_warnings
417
- return unless @errors.empty?
418
- end
419
-
420
424
  # Handle multiple buildings
425
+ # Do this before schematron validation so that:
426
+ # 1. We don't give schematron warnings for Building elements that are not of interest.
427
+ # 2. The schematron validation occurs faster (as we're only validating one Building).
421
428
  if XMLHelper.get_elements(hpxml, 'Building').size > 1
422
429
  if building_id.nil?
423
430
  @errors << 'Multiple Building elements defined in HPXML file; Building ID argument must be provided.'
@@ -434,6 +441,18 @@ class HPXML < Object
434
441
  @errors << "Could not find Building element with ID '#{building_id}'."
435
442
  return unless @errors.empty?
436
443
  end
444
+
445
+ # Write new HPXML file with all other Building elements removed
446
+ hpxml_path = Tempfile.new(['hpxml', '.xml']).path.to_s
447
+ XMLHelper.write_file(hpxml, hpxml_path)
448
+ end
449
+
450
+ # Validate against Schematron
451
+ if not schematron_validator.nil?
452
+ sct_errors, sct_warnings = XMLValidator.validate_against_schematron(hpxml_path, schematron_validator, hpxml)
453
+ @errors += sct_errors
454
+ @warnings += sct_warnings
455
+ return unless @errors.empty?
437
456
  end
438
457
  end
439
458
 
@@ -443,13 +462,6 @@ class HPXML < Object
443
462
  # Check for additional errors (those hard to check via Schematron)
444
463
  @errors += check_for_errors()
445
464
  return unless @errors.empty?
446
-
447
- # Clean up
448
- delete_tiny_surfaces()
449
- delete_adiabatic_subsurfaces()
450
- if collapse_enclosure
451
- collapse_enclosure_surfaces()
452
- end
453
465
  end
454
466
 
455
467
  def hvac_systems
@@ -533,7 +545,7 @@ class HPXML < Object
533
545
 
534
546
  def fraction_of_windows_operable()
535
547
  # Calculates the fraction of windows that are operable.
536
- # Since we don't have quantity available, we use area as an approximation.
548
+ # Since we don't have count available, we use area as an approximation.
537
549
  window_area_total = @windows.map { |w| w.area }.sum(0.0)
538
550
  window_area_operable = @windows.map { |w| w.fraction_operable * w.area }.sum(0.0)
539
551
  if window_area_total <= 0
@@ -605,7 +617,7 @@ class HPXML < Object
605
617
  def compartmentalization_boundary_areas()
606
618
  # Returns the infiltration compartmentalization boundary areas
607
619
  total_area = 0.0 # Total surface area that bounds the Infiltration Volume
608
- exterior_area = 0.0 # Same as above excluding surfaces attached to garage or other housing units
620
+ exterior_area = 0.0 # Same as above excluding surfaces attached to garage, other housing units, or other multifamily spaces (see 301-2019 Addendum B)
609
621
 
610
622
  # Determine which spaces are within infiltration volume
611
623
  spaces_within_infil_volume = HPXML::conditioned_locations_this_unit
@@ -705,6 +717,7 @@ class HPXML < Object
705
717
  @building_construction.to_oga(@doc)
706
718
  @climate_and_risk_zones.to_oga(@doc)
707
719
  @air_infiltration_measurements.to_oga(@doc)
720
+ @air_infiltration.to_oga(@doc)
708
721
  @attics.to_oga(@doc)
709
722
  @foundations.to_oga(@doc)
710
723
  @roofs.to_oga(@doc)
@@ -731,6 +744,7 @@ class HPXML < Object
731
744
  @water_heating.to_oga(@doc)
732
745
  @solar_thermal_systems.to_oga(@doc)
733
746
  @pv_systems.to_oga(@doc)
747
+ @inverters.to_oga(@doc)
734
748
  @batteries.to_oga(@doc)
735
749
  @generators.to_oga(@doc)
736
750
  @clothes_washers.to_oga(@doc)
@@ -759,6 +773,7 @@ class HPXML < Object
759
773
  @building_construction = BuildingConstruction.new(self, hpxml)
760
774
  @climate_and_risk_zones = ClimateandRiskZones.new(self, hpxml)
761
775
  @air_infiltration_measurements = AirInfiltrationMeasurements.new(self, hpxml)
776
+ @air_infiltration = AirInfiltration.new(self, hpxml)
762
777
  @attics = Attics.new(self, hpxml)
763
778
  @foundations = Foundations.new(self, hpxml)
764
779
  @roofs = Roofs.new(self, hpxml)
@@ -785,6 +800,7 @@ class HPXML < Object
785
800
  @water_heating = WaterHeating.new(self, hpxml)
786
801
  @solar_thermal_systems = SolarThermalSystems.new(self, hpxml)
787
802
  @pv_systems = PVSystems.new(self, hpxml)
803
+ @inverters = Inverters.new(self, hpxml)
788
804
  @batteries = Batteries.new(self, hpxml)
789
805
  @generators = Generators.new(self, hpxml)
790
806
  @clothes_washers = ClothesWashers.new(self, hpxml)
@@ -919,22 +935,26 @@ class HPXML < Object
919
935
  def initialize(hpxml_object, *args)
920
936
  @emissions_scenarios = EmissionsScenarios.new(hpxml_object)
921
937
  @utility_bill_scenarios = UtilityBillScenarios.new(hpxml_object)
938
+ @unavailable_periods = UnavailablePeriods.new(hpxml_object)
922
939
  super(hpxml_object, *args)
923
940
  end
924
941
  ATTRS = [:xml_type, :xml_generated_by, :created_date_and_time, :transaction,
925
942
  :software_program_used, :software_program_version, :eri_calculation_version,
926
- :timestep, :building_id, :event_type, :state_code, :zip_code,
943
+ :co2index_calculation_version, :timestep, :building_id, :event_type, :state_code, :zip_code,
927
944
  :egrid_region, :egrid_subregion, :cambium_region_gea, :time_zone_utc_offset,
928
945
  :sim_begin_month, :sim_begin_day, :sim_end_month, :sim_end_day, :sim_calendar_year,
929
946
  :dst_enabled, :dst_begin_month, :dst_begin_day, :dst_end_month, :dst_end_day,
930
- :heat_pump_sizing_methodology, :allow_increased_fixed_capacities,
931
- :apply_ashrae140_assumptions, :energystar_calculation_version, :schedules_filepaths,
932
- :occupancy_calculation_type, :extension_properties, :iecc_eri_calculation_version,
933
- :zerh_calculation_version, :temperature_capacitance_multiplier,
934
- :natvent_days_per_week]
947
+ :heat_pump_sizing_methodology, :allow_increased_fixed_capacities, :apply_ashrae140_assumptions,
948
+ :energystar_calculation_version, :schedules_filepaths, :extension_properties, :iecc_eri_calculation_version,
949
+ :zerh_calculation_version, :temperature_capacitance_multiplier, :natvent_days_per_week,
950
+ :shading_summer_begin_month, :shading_summer_begin_day, :shading_summer_end_month,
951
+ :shading_summer_end_day, :manualj_heating_design_temp, :manualj_cooling_design_temp,
952
+ :manualj_heating_setpoint, :manualj_cooling_setpoint, :manualj_humidity_setpoint,
953
+ :manualj_internal_loads_sensible, :manualj_internal_loads_latent, :manualj_num_occupants]
935
954
  attr_accessor(*ATTRS)
936
955
  attr_reader(:emissions_scenarios)
937
956
  attr_reader(:utility_bill_scenarios)
957
+ attr_reader(:unavailable_periods)
938
958
 
939
959
  def check_for_errors
940
960
  errors = []
@@ -954,8 +974,10 @@ class HPXML < Object
954
974
  end
955
975
 
956
976
  errors += HPXML::check_dates('Daylight Saving', @dst_begin_month, @dst_begin_day, @dst_end_month, @dst_end_day)
977
+ errors += HPXML::check_dates('Shading Summer Season', @shading_summer_begin_month, @shading_summer_begin_day, @shading_summer_end_month, @shading_summer_end_day)
957
978
  errors += @emissions_scenarios.check_for_errors
958
979
  errors += @utility_bill_scenarios.check_for_errors
980
+ errors += @unavailable_periods.check_for_errors
959
981
 
960
982
  return errors
961
983
  end
@@ -977,12 +999,12 @@ class HPXML < Object
977
999
  software_info = XMLHelper.add_element(hpxml, 'SoftwareInfo')
978
1000
  XMLHelper.add_element(software_info, 'SoftwareProgramUsed', @software_program_used, :string) unless @software_program_used.nil?
979
1001
  XMLHelper.add_element(software_info, 'SoftwareProgramVersion', @software_program_version, :string) unless @software_program_version.nil?
980
- XMLHelper.add_extension(software_info, 'OccupancyCalculationType', @occupancy_calculation_type, :string, @occupancy_calculation_type_isdefaulted) unless @occupancy_calculation_type.nil?
981
1002
  XMLHelper.add_extension(software_info, 'ApplyASHRAE140Assumptions', @apply_ashrae140_assumptions, :boolean) unless @apply_ashrae140_assumptions.nil?
982
- { @eri_calculation_version => 'ERICalculation',
983
- @energystar_calculation_version => 'EnergyStarCalculation',
984
- @iecc_eri_calculation_version => 'IECCERICalculation',
985
- @zerh_calculation_version => 'ZERHCalculation' }.each do |calculation_version, element_name|
1003
+ { 'ERICalculation' => @eri_calculation_version,
1004
+ 'CO2IndexCalculation' => @co2index_calculation_version,
1005
+ 'EnergyStarCalculation' => @energystar_calculation_version,
1006
+ 'IECCERICalculation' => @iecc_eri_calculation_version,
1007
+ 'ZERHCalculation' => @zerh_calculation_version }.each do |element_name, calculation_version|
986
1008
  next if calculation_version.nil?
987
1009
 
988
1010
  extension = XMLHelper.create_elements_as_needed(software_info, ['extension'])
@@ -1005,6 +1027,17 @@ class HPXML < Object
1005
1027
  XMLHelper.add_element(hvac_sizing_control, 'HeatPumpSizingMethodology', @heat_pump_sizing_methodology, :string, @heat_pump_sizing_methodology_isdefaulted) unless @heat_pump_sizing_methodology.nil?
1006
1028
  XMLHelper.add_element(hvac_sizing_control, 'AllowIncreasedFixedCapacities', @allow_increased_fixed_capacities, :boolean, @allow_increased_fixed_capacities_isdefaulted) unless @allow_increased_fixed_capacities.nil?
1007
1029
  end
1030
+ if (not @manualj_heating_design_temp.nil?) || (not @manualj_cooling_design_temp.nil?) || (not @manualj_heating_setpoint.nil?) || (not @manualj_cooling_setpoint.nil?) || (not @manualj_humidity_setpoint.nil?) || (not @manualj_internal_loads_sensible.nil?) || (not @manualj_internal_loads_latent.nil?) || (not @manualj_num_occupants.nil?)
1031
+ manualj_sizing_inputs = XMLHelper.create_elements_as_needed(software_info, ['extension', 'HVACSizingControl', 'ManualJInputs'])
1032
+ XMLHelper.add_element(manualj_sizing_inputs, 'HeatingDesignTemperature', @manualj_heating_design_temp, :float, @manualj_heating_design_temp_isdefaulted) unless @manualj_heating_design_temp.nil?
1033
+ XMLHelper.add_element(manualj_sizing_inputs, 'CoolingDesignTemperature', @manualj_cooling_design_temp, :float, @manualj_cooling_design_temp_isdefaulted) unless @manualj_cooling_design_temp.nil?
1034
+ XMLHelper.add_element(manualj_sizing_inputs, 'HeatingSetpoint', @manualj_heating_setpoint, :float, @manualj_heating_setpoint_isdefaulted) unless @manualj_heating_setpoint.nil?
1035
+ XMLHelper.add_element(manualj_sizing_inputs, 'CoolingSetpoint', @manualj_cooling_setpoint, :float, @manualj_cooling_setpoint_isdefaulted) unless @manualj_cooling_setpoint.nil?
1036
+ XMLHelper.add_element(manualj_sizing_inputs, 'HumiditySetpoint', @manualj_humidity_setpoint, :float, @manualj_humidity_setpoint_isdefaulted) unless @manualj_humidity_setpoint.nil?
1037
+ XMLHelper.add_element(manualj_sizing_inputs, 'InternalLoadsSensible', @manualj_internal_loads_sensible, :float, @manualj_internal_loads_sensible_isdefaulted) unless @manualj_internal_loads_sensible.nil?
1038
+ XMLHelper.add_element(manualj_sizing_inputs, 'InternalLoadsLatent', @manualj_internal_loads_latent, :float, @manualj_internal_loads_latent_isdefaulted) unless @manualj_internal_loads_latent.nil?
1039
+ XMLHelper.add_element(manualj_sizing_inputs, 'NumberofOccupants', @manualj_num_occupants, :integer, @manualj_num_occupants_isdefaulted) unless @manualj_num_occupants.nil?
1040
+ end
1008
1041
  XMLHelper.add_extension(software_info, 'NaturalVentilationAvailabilityDaysperWeek', @natvent_days_per_week, :integer, @natvent_days_per_week_isdefaulted) unless @natvent_days_per_week.nil?
1009
1042
  if (not @schedules_filepaths.nil?) && (not @schedules_filepaths.empty?)
1010
1043
  extension = XMLHelper.create_elements_as_needed(software_info, ['extension'])
@@ -1012,6 +1045,13 @@ class HPXML < Object
1012
1045
  XMLHelper.add_element(extension, 'SchedulesFilePath', schedules_filepath, :string)
1013
1046
  end
1014
1047
  end
1048
+ if (not @shading_summer_begin_month.nil?) || (not @shading_summer_begin_day.nil?) || (not @shading_summer_end_month.nil?) || (not @shading_summer_end_day.nil?)
1049
+ window_shading_season = XMLHelper.create_elements_as_needed(software_info, ['extension', 'ShadingControl'])
1050
+ XMLHelper.add_element(window_shading_season, 'SummerBeginMonth', @shading_summer_begin_month, :integer, @shading_summer_begin_month_isdefaulted) unless @shading_summer_begin_month.nil?
1051
+ XMLHelper.add_element(window_shading_season, 'SummerBeginDayOfMonth', @shading_summer_begin_day, :integer, @shading_summer_begin_day_isdefaulted) unless @shading_summer_begin_day.nil?
1052
+ XMLHelper.add_element(window_shading_season, 'SummerEndMonth', @shading_summer_end_month, :integer, @shading_summer_end_month_isdefaulted) unless @shading_summer_end_month.nil?
1053
+ XMLHelper.add_element(window_shading_season, 'SummerEndDayOfMonth', @shading_summer_end_day, :integer, @shading_summer_end_day_isdefaulted) unless @shading_summer_end_day.nil?
1054
+ end
1015
1055
  if (not @extension_properties.nil?) && (not @extension_properties.empty?)
1016
1056
  properties = XMLHelper.create_elements_as_needed(software_info, ['extension', 'AdditionalProperties'])
1017
1057
  @extension_properties.each do |key, value|
@@ -1020,6 +1060,7 @@ class HPXML < Object
1020
1060
  end
1021
1061
  @emissions_scenarios.to_oga(software_info)
1022
1062
  @utility_bill_scenarios.to_oga(software_info)
1063
+ @unavailable_periods.to_oga(software_info)
1023
1064
 
1024
1065
  building = XMLHelper.add_element(hpxml, 'Building')
1025
1066
  building_building_id = XMLHelper.add_element(building, 'BuildingID')
@@ -1066,6 +1107,7 @@ class HPXML < Object
1066
1107
  @software_program_used = XMLHelper.get_value(hpxml, 'SoftwareInfo/SoftwareProgramUsed', :string)
1067
1108
  @software_program_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/SoftwareProgramVersion', :string)
1068
1109
  @eri_calculation_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ERICalculation/Version', :string)
1110
+ @co2index_calculation_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/CO2IndexCalculation/Version', :string)
1069
1111
  @iecc_eri_calculation_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/IECCERICalculation/Version', :string)
1070
1112
  @energystar_calculation_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/EnergyStarCalculation/Version', :string)
1071
1113
  @zerh_calculation_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ZERHCalculation/Version', :string)
@@ -1076,11 +1118,22 @@ class HPXML < Object
1076
1118
  @sim_end_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/EndDayOfMonth', :integer)
1077
1119
  @sim_calendar_year = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/CalendarYear', :integer)
1078
1120
  @temperature_capacitance_multiplier = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/TemperatureCapacitanceMultiplier', :float)
1079
- @occupancy_calculation_type = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/OccupancyCalculationType', :string)
1080
1121
  @natvent_days_per_week = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/NaturalVentilationAvailabilityDaysperWeek', :integer)
1122
+ @shading_summer_begin_month = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ShadingControl/SummerBeginMonth', :integer)
1123
+ @shading_summer_begin_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ShadingControl/SummerBeginDayOfMonth', :integer)
1124
+ @shading_summer_end_month = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ShadingControl/SummerEndMonth', :integer)
1125
+ @shading_summer_end_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ShadingControl/SummerEndDayOfMonth', :integer)
1081
1126
  @apply_ashrae140_assumptions = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ApplyASHRAE140Assumptions', :boolean)
1082
1127
  @heat_pump_sizing_methodology = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/HeatPumpSizingMethodology', :string)
1083
1128
  @allow_increased_fixed_capacities = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/AllowIncreasedFixedCapacities', :boolean)
1129
+ @manualj_heating_design_temp = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/HeatingDesignTemperature', :float)
1130
+ @manualj_cooling_design_temp = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/CoolingDesignTemperature', :float)
1131
+ @manualj_heating_setpoint = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/HeatingSetpoint', :float)
1132
+ @manualj_cooling_setpoint = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/CoolingSetpoint', :float)
1133
+ @manualj_humidity_setpoint = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/HumiditySetpoint', :float)
1134
+ @manualj_internal_loads_sensible = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/InternalLoadsSensible', :float)
1135
+ @manualj_internal_loads_latent = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/InternalLoadsLatent', :float)
1136
+ @manualj_num_occupants = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/ManualJInputs/NumberofOccupants', :integer)
1084
1137
  @schedules_filepaths = XMLHelper.get_values(hpxml, 'SoftwareInfo/extension/SchedulesFilePath', :string)
1085
1138
  @extension_properties = {}
1086
1139
  XMLHelper.get_elements(hpxml, 'SoftwareInfo/extension/AdditionalProperties').each do |property|
@@ -1093,6 +1146,7 @@ class HPXML < Object
1093
1146
  end
1094
1147
  @emissions_scenarios.from_oga(XMLHelper.get_element(hpxml, 'SoftwareInfo'))
1095
1148
  @utility_bill_scenarios.from_oga(XMLHelper.get_element(hpxml, 'SoftwareInfo'))
1149
+ @unavailable_periods.from_oga(XMLHelper.get_element(hpxml, 'SoftwareInfo'))
1096
1150
  @building_id = HPXML::get_id(hpxml, 'Building/BuildingID')
1097
1151
  @event_type = XMLHelper.get_value(hpxml, 'Building/ProjectStatus/EventType', :string)
1098
1152
  @state_code = XMLHelper.get_value(hpxml, 'Building/Site/Address/StateCode', :string)
@@ -1329,6 +1383,61 @@ class HPXML < Object
1329
1383
  end
1330
1384
  end
1331
1385
 
1386
+ class UnavailablePeriods < BaseArrayElement
1387
+ def add(**kwargs)
1388
+ self << UnavailablePeriod.new(@hpxml_object, **kwargs)
1389
+ end
1390
+
1391
+ def from_oga(software_info)
1392
+ return if software_info.nil?
1393
+
1394
+ XMLHelper.get_elements(software_info, 'extension/UnavailablePeriods/UnavailablePeriod').each do |unavailable_period|
1395
+ self << UnavailablePeriod.new(@hpxml_object, unavailable_period)
1396
+ end
1397
+ end
1398
+ end
1399
+
1400
+ class UnavailablePeriod < BaseElement
1401
+ ATTRS = [:column_name, :begin_month, :begin_day, :begin_hour, :end_month, :end_day, :end_hour, :natvent_availability]
1402
+ attr_accessor(*ATTRS)
1403
+
1404
+ def delete
1405
+ @hpxml_object.header.unavailable_periods.delete(self)
1406
+ end
1407
+
1408
+ def check_for_errors
1409
+ errors = []
1410
+ errors += HPXML::check_dates('Unavailable Period', @begin_month, @begin_day, @end_month, @end_day)
1411
+ return errors
1412
+ end
1413
+
1414
+ def to_oga(software_info)
1415
+ unavailable_periods = XMLHelper.create_elements_as_needed(software_info, ['extension', 'UnavailablePeriods'])
1416
+ unavailable_period = XMLHelper.add_element(unavailable_periods, 'UnavailablePeriod')
1417
+ XMLHelper.add_element(unavailable_period, 'ColumnName', @column_name, :string) unless @column_name.nil?
1418
+ XMLHelper.add_element(unavailable_period, 'BeginMonth', @begin_month, :integer, @begin_month_isdefaulted) unless @begin_month.nil?
1419
+ XMLHelper.add_element(unavailable_period, 'BeginDayOfMonth', @begin_day, :integer, @begin_day_isdefaulted) unless @begin_day.nil?
1420
+ XMLHelper.add_element(unavailable_period, 'BeginHourOfDay', @begin_hour, :integer, @begin_hour_isdefaulted) unless @begin_hour.nil?
1421
+ XMLHelper.add_element(unavailable_period, 'EndMonth', @end_month, :integer, @end_month_isdefaulted) unless @end_month.nil?
1422
+ XMLHelper.add_element(unavailable_period, 'EndDayOfMonth', @end_day, :integer, @end_day_isdefaulted) unless @end_day.nil?
1423
+ XMLHelper.add_element(unavailable_period, 'EndHourOfDay', @end_hour, :integer, @end_hour_isdefaulted) unless @end_hour.nil?
1424
+ XMLHelper.add_element(unavailable_period, 'NaturalVentilation', @natvent_availability, :string, @natvent_availability_isdefaulted) unless @natvent_availability.nil?
1425
+ end
1426
+
1427
+ def from_oga(unavailable_period)
1428
+ return if unavailable_period.nil?
1429
+
1430
+ @column_name = XMLHelper.get_value(unavailable_period, 'ColumnName', :string)
1431
+ @begin_month = XMLHelper.get_value(unavailable_period, 'BeginMonth', :integer)
1432
+ @begin_day = XMLHelper.get_value(unavailable_period, 'BeginDayOfMonth', :integer)
1433
+ @begin_hour = XMLHelper.get_value(unavailable_period, 'BeginHourOfDay', :integer)
1434
+ @end_month = XMLHelper.get_value(unavailable_period, 'EndMonth', :integer)
1435
+ @end_day = XMLHelper.get_value(unavailable_period, 'EndDayOfMonth', :integer)
1436
+ @end_hour = XMLHelper.get_value(unavailable_period, 'EndHourOfDay', :integer)
1437
+ @natvent_availability = XMLHelper.get_value(unavailable_period, 'NaturalVentilation', :string)
1438
+ end
1439
+ end
1440
+
1332
1441
  class Site < BaseElement
1333
1442
  ATTRS = [:site_type, :surroundings, :vertical_surroundings, :shielding_of_home, :orientation_of_front_of_home, :azimuth_of_front_of_home, :fuels,
1334
1443
  :ground_conductivity]
@@ -1460,7 +1569,7 @@ class HPXML < Object
1460
1569
  ATTRS = [:year_built, :number_of_conditioned_floors, :number_of_conditioned_floors_above_grade,
1461
1570
  :average_ceiling_height, :number_of_bedrooms, :number_of_bathrooms,
1462
1571
  :conditioned_floor_area, :conditioned_building_volume, :residential_facility_type,
1463
- :building_footprint_area, :has_flue_or_chimney]
1572
+ :building_footprint_area]
1464
1573
  attr_accessor(*ATTRS)
1465
1574
 
1466
1575
  def check_for_errors
@@ -1482,7 +1591,6 @@ class HPXML < Object
1482
1591
  XMLHelper.add_element(building_construction, 'BuildingFootprintArea', @building_footprint_area, :float, @building_footprint_area_isdefaulted) unless @building_footprint_area.nil?
1483
1592
  XMLHelper.add_element(building_construction, 'ConditionedFloorArea', @conditioned_floor_area, :float) unless @conditioned_floor_area.nil?
1484
1593
  XMLHelper.add_element(building_construction, 'ConditionedBuildingVolume', @conditioned_building_volume, :float, @conditioned_building_volume_isdefaulted) unless @conditioned_building_volume.nil?
1485
- XMLHelper.add_extension(building_construction, 'HasFlueOrChimney', @has_flue_or_chimney, :boolean, @has_flue_or_chimney_isdefaulted) unless @has_flue_or_chimney.nil?
1486
1594
  end
1487
1595
 
1488
1596
  def from_oga(hpxml)
@@ -1501,7 +1609,6 @@ class HPXML < Object
1501
1609
  @building_footprint_area = XMLHelper.get_value(building_construction, 'BuildingFootprintArea', :float)
1502
1610
  @conditioned_floor_area = XMLHelper.get_value(building_construction, 'ConditionedFloorArea', :float)
1503
1611
  @conditioned_building_volume = XMLHelper.get_value(building_construction, 'ConditionedBuildingVolume', :float)
1504
- @has_flue_or_chimney = XMLHelper.get_value(building_construction, 'extension/HasFlueOrChimney', :boolean)
1505
1612
  end
1506
1613
  end
1507
1614
 
@@ -1596,6 +1703,32 @@ class HPXML < Object
1596
1703
  end
1597
1704
  end
1598
1705
 
1706
+ class AirInfiltration < BaseElement
1707
+ ATTRS = [:has_flue_or_chimney_in_conditioned_space]
1708
+ attr_accessor(*ATTRS)
1709
+
1710
+ def check_for_errors
1711
+ errors = []
1712
+ return errors
1713
+ end
1714
+
1715
+ def to_oga(doc)
1716
+ return if nil?
1717
+
1718
+ air_infiltration = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Enclosure', 'AirInfiltration'])
1719
+ XMLHelper.add_extension(air_infiltration, 'HasFlueOrChimneyInConditionedSpace', @has_flue_or_chimney_in_conditioned_space, :boolean, @has_flue_or_chimney_in_conditioned_space_isdefaulted) unless @has_flue_or_chimney_in_conditioned_space.nil?
1720
+ end
1721
+
1722
+ def from_oga(hpxml)
1723
+ return if hpxml.nil?
1724
+
1725
+ air_infiltration = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Enclosure/AirInfiltration')
1726
+ return if air_infiltration.nil?
1727
+
1728
+ @has_flue_or_chimney_in_conditioned_space = XMLHelper.get_value(air_infiltration, 'extension/HasFlueOrChimneyInConditionedSpace', :boolean)
1729
+ end
1730
+ end
1731
+
1599
1732
  class AirInfiltrationMeasurements < BaseArrayElement
1600
1733
  def add(**kwargs)
1601
1734
  self << AirInfiltrationMeasurement.new(@hpxml_object, **kwargs)
@@ -1611,8 +1744,8 @@ class HPXML < Object
1611
1744
  end
1612
1745
 
1613
1746
  class AirInfiltrationMeasurement < BaseElement
1614
- ATTRS = [:id, :house_pressure, :unit_of_measure, :air_leakage, :effective_leakage_area, :type,
1615
- :infiltration_volume, :leakiness_description, :infiltration_height, :a_ext]
1747
+ ATTRS = [:id, :house_pressure, :unit_of_measure, :air_leakage, :effective_leakage_area, :type_of_measurement,
1748
+ :infiltration_volume, :leakiness_description, :infiltration_height, :a_ext, :infiltration_type]
1616
1749
  attr_accessor(*ATTRS)
1617
1750
 
1618
1751
  def check_for_errors
@@ -1627,7 +1760,8 @@ class HPXML < Object
1627
1760
  air_infiltration_measurement = XMLHelper.add_element(air_infiltration, 'AirInfiltrationMeasurement')
1628
1761
  sys_id = XMLHelper.add_element(air_infiltration_measurement, 'SystemIdentifier')
1629
1762
  XMLHelper.add_attribute(sys_id, 'id', @id)
1630
- XMLHelper.add_element(air_infiltration_measurement, 'TypeOfInfiltrationMeasurement', @type, :string) unless @type.nil?
1763
+ XMLHelper.add_element(air_infiltration_measurement, 'TypeOfInfiltrationMeasurement', @type_of_measurement, :string) unless @type_of_measurement.nil?
1764
+ XMLHelper.add_element(air_infiltration_measurement, 'TypeOfInfiltrationLeakage', @infiltration_type, :string) unless @infiltration_type.nil?
1631
1765
  XMLHelper.add_element(air_infiltration_measurement, 'HousePressure', @house_pressure, :float) unless @house_pressure.nil?
1632
1766
  XMLHelper.add_element(air_infiltration_measurement, 'LeakinessDescription', @leakiness_description, :string) unless @leakiness_description.nil?
1633
1767
  if (not @unit_of_measure.nil?) && (not @air_leakage.nil?)
@@ -1638,14 +1772,15 @@ class HPXML < Object
1638
1772
  XMLHelper.add_element(air_infiltration_measurement, 'EffectiveLeakageArea', @effective_leakage_area, :float) unless @effective_leakage_area.nil?
1639
1773
  XMLHelper.add_element(air_infiltration_measurement, 'InfiltrationVolume', @infiltration_volume, :float, @infiltration_volume_isdefaulted) unless @infiltration_volume.nil?
1640
1774
  XMLHelper.add_element(air_infiltration_measurement, 'InfiltrationHeight', @infiltration_height, :float, @infiltration_height_isdefaulted) unless @infiltration_height.nil?
1641
- XMLHelper.add_extension(air_infiltration_measurement, 'Aext', @a_ext, :float) unless @a_ext.nil?
1775
+ XMLHelper.add_extension(air_infiltration_measurement, 'Aext', @a_ext, :float, @a_ext_isdefaulted) unless @a_ext.nil?
1642
1776
  end
1643
1777
 
1644
1778
  def from_oga(air_infiltration_measurement)
1645
1779
  return if air_infiltration_measurement.nil?
1646
1780
 
1647
1781
  @id = HPXML::get_id(air_infiltration_measurement)
1648
- @type = XMLHelper.get_value(air_infiltration_measurement, 'TypeOfInfiltrationMeasurement', :string)
1782
+ @type_of_measurement = XMLHelper.get_value(air_infiltration_measurement, 'TypeOfInfiltrationMeasurement', :string)
1783
+ @infiltration_type = XMLHelper.get_value(air_infiltration_measurement, 'TypeOfInfiltrationLeakage', :string)
1649
1784
  @house_pressure = XMLHelper.get_value(air_infiltration_measurement, 'HousePressure', :float)
1650
1785
  @leakiness_description = XMLHelper.get_value(air_infiltration_measurement, 'LeakinessDescription', :string)
1651
1786
  @unit_of_measure = XMLHelper.get_value(air_infiltration_measurement, 'BuildingAirLeakage/UnitofMeasure', :string)
@@ -2090,8 +2225,9 @@ class HPXML < Object
2090
2225
  ATTRS = [:id, :interior_adjacent_to, :area, :azimuth, :orientation, :roof_type,
2091
2226
  :roof_color, :solar_absorptance, :emittance, :pitch, :radiant_barrier,
2092
2227
  :insulation_id, :insulation_assembly_r_value, :insulation_cavity_r_value,
2093
- :insulation_continuous_r_value, :radiant_barrier_grade,
2094
- :interior_finish_type, :interior_finish_thickness]
2228
+ :insulation_continuous_r_value, :radiant_barrier_grade, :insulation_grade,
2229
+ :interior_finish_type, :interior_finish_thickness, :framing_factor,
2230
+ :framing_size, :framing_spacing]
2095
2231
  attr_accessor(*ATTRS)
2096
2232
 
2097
2233
  def skylights
@@ -2171,6 +2307,12 @@ class HPXML < Object
2171
2307
  XMLHelper.add_element(interior_finish, 'Type', @interior_finish_type, :string, @interior_finish_type_isdefaulted) unless @interior_finish_type.nil?
2172
2308
  XMLHelper.add_element(interior_finish, 'Thickness', @interior_finish_thickness, :float, @interior_finish_thickness_isdefaulted) unless @interior_finish_thickness.nil?
2173
2309
  end
2310
+ if (not @framing_factor.nil?) || (not @framing_size.nil?) || (not @framing_spacing.nil?)
2311
+ rafters = XMLHelper.add_element(roof, 'Rafters')
2312
+ XMLHelper.add_element(rafters, 'Size', @framing_size, :string) unless @framing_size.nil?
2313
+ XMLHelper.add_element(rafters, 'Spacing', @framing_spacing, :float) unless @framing_spacing.nil?
2314
+ XMLHelper.add_element(rafters, 'FramingFactor', @framing_factor, :float) unless @framing_factor.nil?
2315
+ end
2174
2316
  XMLHelper.add_element(roof, 'Pitch', @pitch, :float) unless @pitch.nil?
2175
2317
  XMLHelper.add_element(roof, 'RadiantBarrier', @radiant_barrier, :boolean, @radiant_barrier_isdefaulted) unless @radiant_barrier.nil?
2176
2318
  XMLHelper.add_element(roof, 'RadiantBarrierGrade', @radiant_barrier_grade, :integer, @radiant_barrier_grade_isdefaulted) unless @radiant_barrier_grade.nil?
@@ -2181,6 +2323,7 @@ class HPXML < Object
2181
2323
  else
2182
2324
  XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
2183
2325
  end
2326
+ XMLHelper.add_element(insulation, 'InsulationGrade', @insulation_grade, :integer) unless @insulation_grade.nil?
2184
2327
  XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
2185
2328
  if not @insulation_cavity_r_value.nil?
2186
2329
  layer = XMLHelper.add_element(insulation, 'Layer')
@@ -2211,12 +2354,16 @@ class HPXML < Object
2211
2354
  @interior_finish_type = XMLHelper.get_value(interior_finish, 'Type', :string)
2212
2355
  @interior_finish_thickness = XMLHelper.get_value(interior_finish, 'Thickness', :float)
2213
2356
  end
2357
+ @framing_factor = XMLHelper.get_value(roof, 'Rafters/FramingFactor', :float)
2358
+ @framing_size = XMLHelper.get_value(roof, 'Rafters/Size', :string)
2359
+ @framing_spacing = XMLHelper.get_value(roof, 'Rafters/Spacing', :float)
2214
2360
  @pitch = XMLHelper.get_value(roof, 'Pitch', :float)
2215
2361
  @radiant_barrier = XMLHelper.get_value(roof, 'RadiantBarrier', :boolean)
2216
2362
  @radiant_barrier_grade = XMLHelper.get_value(roof, 'RadiantBarrierGrade', :integer)
2217
2363
  insulation = XMLHelper.get_element(roof, 'Insulation')
2218
2364
  if not insulation.nil?
2219
2365
  @insulation_id = HPXML::get_id(insulation)
2366
+ @insulation_grade = XMLHelper.get_value(insulation, 'InsulationGrade', :integer)
2220
2367
  @insulation_assembly_r_value = XMLHelper.get_value(insulation, 'AssemblyEffectiveRValue', :float)
2221
2368
  @insulation_cavity_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='cavity']/NominalRValue", :float)
2222
2369
  @insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
@@ -2241,7 +2388,7 @@ class HPXML < Object
2241
2388
  class RimJoist < BaseElement
2242
2389
  ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :area, :orientation, :azimuth, :siding,
2243
2390
  :color, :solar_absorptance, :emittance, :insulation_id, :insulation_assembly_r_value,
2244
- :insulation_cavity_r_value, :insulation_continuous_r_value]
2391
+ :insulation_cavity_r_value, :insulation_continuous_r_value, :framing_size]
2245
2392
  attr_accessor(*ATTRS)
2246
2393
 
2247
2394
  def is_exterior
@@ -2318,6 +2465,10 @@ class HPXML < Object
2318
2465
  XMLHelper.add_element(layer, 'InstallationType', 'continuous', :string)
2319
2466
  XMLHelper.add_element(layer, 'NominalRValue', @insulation_continuous_r_value, :float)
2320
2467
  end
2468
+ if not @framing_size.nil?
2469
+ floor_joists = XMLHelper.add_element(rim_joist, 'FloorJoists')
2470
+ XMLHelper.add_element(floor_joists, 'Size', @framing_size, :string) unless @framing_size.nil?
2471
+ end
2321
2472
  end
2322
2473
 
2323
2474
  def from_oga(rim_joist)
@@ -2340,6 +2491,7 @@ class HPXML < Object
2340
2491
  @insulation_cavity_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='cavity']/NominalRValue", :float)
2341
2492
  @insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
2342
2493
  end
2494
+ @framing_size = XMLHelper.get_value(rim_joist, 'FloorJoists/Size', :string)
2343
2495
  end
2344
2496
  end
2345
2497
 
@@ -2361,7 +2513,8 @@ class HPXML < Object
2361
2513
  ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :wall_type, :optimum_value_engineering,
2362
2514
  :area, :orientation, :azimuth, :siding, :color, :solar_absorptance, :emittance, :insulation_id,
2363
2515
  :insulation_assembly_r_value, :insulation_cavity_r_value, :insulation_continuous_r_value,
2364
- :interior_finish_type, :interior_finish_thickness, :attic_wall_type]
2516
+ :interior_finish_type, :interior_finish_thickness, :attic_wall_type, :framing_factor,
2517
+ :framing_size, :framing_spacing, :insulation_grade]
2365
2518
  attr_accessor(*ATTRS)
2366
2519
 
2367
2520
  def windows
@@ -2455,6 +2608,12 @@ class HPXML < Object
2455
2608
  XMLHelper.add_element(wall, 'Area', @area, :float) unless @area.nil?
2456
2609
  XMLHelper.add_element(wall, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
2457
2610
  XMLHelper.add_element(wall, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
2611
+ if (not @framing_factor.nil?) || (not @framing_size.nil?) || (not @framing_spacing.nil?)
2612
+ studs = XMLHelper.add_element(wall, 'Studs')
2613
+ XMLHelper.add_element(studs, 'Size', @framing_size, :string) unless @framing_size.nil?
2614
+ XMLHelper.add_element(studs, 'Spacing', @framing_spacing, :float) unless @framing_spacing.nil?
2615
+ XMLHelper.add_element(studs, 'FramingFactor', @framing_factor, :float) unless @framing_factor.nil?
2616
+ end
2458
2617
  XMLHelper.add_element(wall, 'Siding', @siding, :string, @siding_isdefaulted) unless @siding.nil?
2459
2618
  XMLHelper.add_element(wall, 'Color', @color, :string, @color_isdefaulted) unless @color.nil?
2460
2619
  XMLHelper.add_element(wall, 'SolarAbsorptance', @solar_absorptance, :float, @solar_absorptance_isdefaulted) unless @solar_absorptance.nil?
@@ -2471,6 +2630,7 @@ class HPXML < Object
2471
2630
  else
2472
2631
  XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
2473
2632
  end
2633
+ XMLHelper.add_element(insulation, 'InsulationGrade', @insulation_grade, :integer) unless @insulation_grade.nil?
2474
2634
  XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
2475
2635
  if not @insulation_cavity_r_value.nil?
2476
2636
  layer = XMLHelper.add_element(insulation, 'Layer')
@@ -2498,6 +2658,9 @@ class HPXML < Object
2498
2658
  @area = XMLHelper.get_value(wall, 'Area', :float)
2499
2659
  @orientation = XMLHelper.get_value(wall, 'Orientation', :string)
2500
2660
  @azimuth = XMLHelper.get_value(wall, 'Azimuth', :integer)
2661
+ @framing_size = XMLHelper.get_value(wall, 'Studs/Size', :string)
2662
+ @framing_spacing = XMLHelper.get_value(wall, 'Studs/Spacing', :float)
2663
+ @framing_factor = XMLHelper.get_value(wall, 'Studs/FramingFactor', :float)
2501
2664
  @siding = XMLHelper.get_value(wall, 'Siding', :string)
2502
2665
  @color = XMLHelper.get_value(wall, 'Color', :string)
2503
2666
  @solar_absorptance = XMLHelper.get_value(wall, 'SolarAbsorptance', :float)
@@ -2510,6 +2673,7 @@ class HPXML < Object
2510
2673
  insulation = XMLHelper.get_element(wall, 'Insulation')
2511
2674
  if not insulation.nil?
2512
2675
  @insulation_id = HPXML::get_id(insulation)
2676
+ @insulation_grade = XMLHelper.get_value(insulation, 'InsulationGrade', :integer)
2513
2677
  @insulation_assembly_r_value = XMLHelper.get_value(insulation, 'AssemblyEffectiveRValue', :float)
2514
2678
  @insulation_cavity_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='cavity']/NominalRValue", :float)
2515
2679
  @insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
@@ -2707,7 +2871,8 @@ class HPXML < Object
2707
2871
  class Floor < BaseElement
2708
2872
  ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :floor_type, :area, :insulation_id,
2709
2873
  :insulation_assembly_r_value, :insulation_cavity_r_value, :insulation_continuous_r_value,
2710
- :floor_or_ceiling, :interior_finish_type, :interior_finish_thickness]
2874
+ :floor_or_ceiling, :interior_finish_type, :interior_finish_thickness, :insulation_grade,
2875
+ :framing_factor, :framing_size, :framing_spacing]
2711
2876
  attr_accessor(*ATTRS)
2712
2877
 
2713
2878
  def is_ceiling
@@ -2790,6 +2955,12 @@ class HPXML < Object
2790
2955
  floor_type_el = XMLHelper.add_element(floor, 'FloorType')
2791
2956
  XMLHelper.add_element(floor_type_el, @floor_type)
2792
2957
  end
2958
+ if (not @framing_factor.nil?) || (not @framing_size.nil?) || (not @framing_spacing.nil?)
2959
+ joists = XMLHelper.add_element(floor, 'FloorJoists')
2960
+ XMLHelper.add_element(joists, 'Size', @framing_size, :string) unless @framing_size.nil?
2961
+ XMLHelper.add_element(joists, 'Spacing', @framing_spacing, :float) unless @framing_spacing.nil?
2962
+ XMLHelper.add_element(joists, 'FramingFactor', @framing_factor, :float) unless @framing_factor.nil?
2963
+ end
2793
2964
  XMLHelper.add_element(floor, 'Area', @area, :float) unless @area.nil?
2794
2965
  if (not @interior_finish_type.nil?) || (not @interior_finish_thickness.nil?)
2795
2966
  interior_finish = XMLHelper.add_element(floor, 'InteriorFinish')
@@ -2803,6 +2974,7 @@ class HPXML < Object
2803
2974
  else
2804
2975
  XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
2805
2976
  end
2977
+ XMLHelper.add_element(insulation, 'InsulationGrade', @insulation_grade, :integer) unless @insulation_grade.nil?
2806
2978
  XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
2807
2979
  if not @insulation_cavity_r_value.nil?
2808
2980
  layer = XMLHelper.add_element(insulation, 'Layer')
@@ -2824,6 +2996,9 @@ class HPXML < Object
2824
2996
  @interior_adjacent_to = XMLHelper.get_value(floor, 'InteriorAdjacentTo', :string)
2825
2997
  @floor_or_ceiling = XMLHelper.get_value(floor, 'FloorOrCeiling', :string)
2826
2998
  @floor_type = XMLHelper.get_child_name(floor, 'FloorType')
2999
+ @framing_size = XMLHelper.get_value(floor, 'FloorJoists/Size', :string)
3000
+ @framing_spacing = XMLHelper.get_value(floor, 'FloorJoists/Spacing', :float)
3001
+ @framing_factor = XMLHelper.get_value(floor, 'FloorJoists/FramingFactor', :float)
2827
3002
  @area = XMLHelper.get_value(floor, 'Area', :float)
2828
3003
  interior_finish = XMLHelper.get_element(floor, 'InteriorFinish')
2829
3004
  if not interior_finish.nil?
@@ -2833,6 +3008,7 @@ class HPXML < Object
2833
3008
  insulation = XMLHelper.get_element(floor, 'Insulation')
2834
3009
  if not insulation.nil?
2835
3010
  @insulation_id = HPXML::get_id(insulation)
3011
+ @insulation_grade = XMLHelper.get_value(insulation, 'InsulationGrade', :float)
2836
3012
  @insulation_assembly_r_value = XMLHelper.get_value(insulation, 'AssemblyEffectiveRValue', :float)
2837
3013
  @insulation_cavity_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='cavity']/NominalRValue", :float)
2838
3014
  @insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
@@ -3435,7 +3611,8 @@ class HPXML < Object
3435
3611
  :heating_efficiency_percent, :fraction_heat_load_served, :electric_auxiliary_energy,
3436
3612
  :third_party_certification, :htg_seed_id, :is_shared_system, :number_of_units_served,
3437
3613
  :shared_loop_watts, :shared_loop_motor_efficiency, :fan_coil_watts, :fan_watts_per_cfm,
3438
- :airflow_defect_ratio, :fan_watts, :heating_airflow_cfm, :location, :primary_system]
3614
+ :airflow_defect_ratio, :fan_watts, :heating_airflow_cfm, :location, :primary_system,
3615
+ :pilot_light, :pilot_light_btuh]
3439
3616
  attr_accessor(*ATTRS)
3440
3617
 
3441
3618
  def distribution_system
@@ -3471,14 +3648,19 @@ class HPXML < Object
3471
3648
  return
3472
3649
  end
3473
3650
 
3474
- def is_heat_pump_backup_system
3651
+ def primary_heat_pump
3652
+ # Returns the HP for which this heating system is backup
3475
3653
  @hpxml_object.heat_pumps.each do |heat_pump|
3476
3654
  next if heat_pump.backup_system_idref.nil?
3477
3655
  next if heat_pump.backup_system_idref != @id
3478
3656
 
3479
- return true
3657
+ return heat_pump
3480
3658
  end
3481
- return false
3659
+ return
3660
+ end
3661
+
3662
+ def is_heat_pump_backup_system
3663
+ return !primary_heat_pump.nil?
3482
3664
  end
3483
3665
 
3484
3666
  def delete
@@ -3504,7 +3686,7 @@ class HPXML < Object
3504
3686
  heating_system = XMLHelper.add_element(hvac_plant, 'HeatingSystem')
3505
3687
  sys_id = XMLHelper.add_element(heating_system, 'SystemIdentifier')
3506
3688
  XMLHelper.add_attribute(sys_id, 'id', @id)
3507
- XMLHelper.add_element(heating_system, 'UnitLocation', @location, :string) unless @location.nil?
3689
+ XMLHelper.add_element(heating_system, 'UnitLocation', @location, :string, @location_isdefaulted) unless @location.nil?
3508
3690
  XMLHelper.add_element(heating_system, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
3509
3691
  XMLHelper.add_element(heating_system, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
3510
3692
  if not @distribution_system_idref.nil?
@@ -3515,7 +3697,18 @@ class HPXML < Object
3515
3697
  XMLHelper.add_element(heating_system, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
3516
3698
  if not @heating_system_type.nil?
3517
3699
  heating_system_type_el = XMLHelper.add_element(heating_system, 'HeatingSystemType')
3518
- XMLHelper.add_element(heating_system_type_el, @heating_system_type)
3700
+ type_el = XMLHelper.add_element(heating_system_type_el, @heating_system_type)
3701
+ if [HPXML::HVACTypeFurnace,
3702
+ HPXML::HVACTypeWallFurnace,
3703
+ HPXML::HVACTypeFloorFurnace,
3704
+ HPXML::HVACTypeFireplace,
3705
+ HPXML::HVACTypeStove,
3706
+ HPXML::HVACTypeBoiler].include? @heating_system_type
3707
+ XMLHelper.add_element(type_el, 'PilotLight', @pilot_light, :boolean, @pilot_light_isdefaulted) unless @pilot_light.nil?
3708
+ if @pilot_light
3709
+ XMLHelper.add_extension(type_el, 'PilotLightBtuh', @pilot_light_btuh, :float, @pilot_light_btuh_isdefaulted) unless @pilot_light_btuh.nil?
3710
+ end
3711
+ end
3519
3712
  end
3520
3713
  XMLHelper.add_element(heating_system, 'HeatingSystemFuel', @heating_system_fuel, :string) unless @heating_system_fuel.nil?
3521
3714
  XMLHelper.add_element(heating_system, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
@@ -3557,6 +3750,10 @@ class HPXML < Object
3557
3750
  @number_of_units_served = XMLHelper.get_value(heating_system, 'NumberofUnitsServed', :integer)
3558
3751
  @heating_system_type = XMLHelper.get_child_name(heating_system, 'HeatingSystemType')
3559
3752
  @heating_system_fuel = XMLHelper.get_value(heating_system, 'HeatingSystemFuel', :string)
3753
+ @pilot_light = XMLHelper.get_value(heating_system, "HeatingSystemType/#{@heating_system_type}/PilotLight", :boolean)
3754
+ if @pilot_light
3755
+ @pilot_light_btuh = XMLHelper.get_value(heating_system, "HeatingSystemType/#{@heating_system_type}/extension/PilotLightBtuh", :float)
3756
+ end
3560
3757
  @heating_capacity = XMLHelper.get_value(heating_system, 'HeatingCapacity', :float)
3561
3758
  @heating_efficiency_afue = XMLHelper.get_value(heating_system, "AnnualHeatingEfficiency[Units='#{UnitsAFUE}']/Value", :float)
3562
3759
  @heating_efficiency_percent = XMLHelper.get_value(heating_system, "AnnualHeatingEfficiency[Units='Percent']/Value", :float)
@@ -3607,9 +3804,9 @@ class HPXML < Object
3607
3804
  :cooling_efficiency_seer2, :cooling_efficiency_eer, :cooling_efficiency_ceer, :cooling_efficiency_kw_per_ton,
3608
3805
  :cooling_shr, :third_party_certification, :clg_seed_id, :is_shared_system, :number_of_units_served,
3609
3806
  :shared_loop_watts, :shared_loop_motor_efficiency, :fan_coil_watts, :airflow_defect_ratio,
3610
- :fan_watts_per_cfm, :charge_defect_ratio, :cooling_airflow_cfm, :location, :primary_system, :integrated_heating_system_fuel,
3611
- :integrated_heating_system_capacity, :integrated_heating_system_efficiency_percent, :integrated_heating_system_fraction_heat_load_served,
3612
- :integrated_heating_system_airflow_cfm, :htg_seed_id]
3807
+ :fan_watts_per_cfm, :charge_defect_ratio, :cooling_airflow_cfm, :location, :primary_system,
3808
+ :integrated_heating_system_fuel, :integrated_heating_system_capacity, :integrated_heating_system_efficiency_percent,
3809
+ :integrated_heating_system_fraction_heat_load_served, :integrated_heating_system_airflow_cfm, :htg_seed_id, :crankcase_heater_watts]
3613
3810
  attr_accessor(*ATTRS)
3614
3811
 
3615
3812
  def distribution_system
@@ -3665,7 +3862,7 @@ class HPXML < Object
3665
3862
  cooling_system = XMLHelper.add_element(hvac_plant, 'CoolingSystem')
3666
3863
  sys_id = XMLHelper.add_element(cooling_system, 'SystemIdentifier')
3667
3864
  XMLHelper.add_attribute(sys_id, 'id', @id)
3668
- XMLHelper.add_element(cooling_system, 'UnitLocation', @location, :string) unless @location.nil?
3865
+ XMLHelper.add_element(cooling_system, 'UnitLocation', @location, :string, @location_isdefaulted) unless @location.nil?
3669
3866
  XMLHelper.add_element(cooling_system, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
3670
3867
  XMLHelper.add_element(cooling_system, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
3671
3868
  if not @distribution_system_idref.nil?
@@ -3721,7 +3918,9 @@ class HPXML < Object
3721
3918
  XMLHelper.add_extension(cooling_system, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
3722
3919
  XMLHelper.add_extension(cooling_system, 'SharedLoopMotorEfficiency', @shared_loop_motor_efficiency, :float) unless @shared_loop_motor_efficiency.nil?
3723
3920
  XMLHelper.add_extension(cooling_system, 'FanCoilWatts', @fan_coil_watts, :float) unless @fan_coil_watts.nil?
3921
+ XMLHelper.add_extension(cooling_system, 'CrankcaseHeaterPowerWatts', @crankcase_heater_watts, :float, @crankcase_heater_watts_isdefaulted) unless @crankcase_heater_watts.nil?
3724
3922
  XMLHelper.add_extension(cooling_system, 'CoolingSeedId', @clg_seed_id, :string) unless @clg_seed_id.nil?
3923
+ XMLHelper.add_extension(cooling_system, 'HeatingSeedId', @htg_seed_id, :string) unless @htg_seed_id.nil?
3725
3924
  if @primary_system
3726
3925
  primary_cooling_system = XMLHelper.add_element(primary_systems, 'PrimaryCoolingSystem')
3727
3926
  XMLHelper.add_attribute(primary_cooling_system, 'idref', @id)
@@ -3761,7 +3960,9 @@ class HPXML < Object
3761
3960
  @shared_loop_watts = XMLHelper.get_value(cooling_system, 'extension/SharedLoopWatts', :float)
3762
3961
  @shared_loop_motor_efficiency = XMLHelper.get_value(cooling_system, 'extension/SharedLoopMotorEfficiency', :float)
3763
3962
  @fan_coil_watts = XMLHelper.get_value(cooling_system, 'extension/FanCoilWatts', :float)
3963
+ @crankcase_heater_watts = XMLHelper.get_value(cooling_system, 'extension/CrankcaseHeaterPowerWatts', :float)
3764
3964
  @clg_seed_id = XMLHelper.get_value(cooling_system, 'extension/CoolingSeedId', :string)
3965
+ @htg_seed_id = XMLHelper.get_value(cooling_system, 'extension/HeatingSeedId', :string)
3765
3966
  primary_cooling_system = HPXML::get_idref(XMLHelper.get_element(cooling_system, '../PrimarySystems/PrimaryCoolingSystem'))
3766
3967
  if primary_cooling_system == @id
3767
3968
  @primary_system = true
@@ -3795,7 +3996,7 @@ class HPXML < Object
3795
3996
 
3796
3997
  class HeatPump < BaseElement
3797
3998
  ATTRS = [:id, :distribution_system_idref, :year_installed, :heat_pump_type, :heat_pump_fuel,
3798
- :heating_capacity, :heating_capacity_17F, :cooling_capacity, :compressor_type,
3999
+ :heating_capacity, :heating_capacity_17F, :cooling_capacity, :compressor_type, :compressor_lockout_temp,
3799
4000
  :cooling_shr, :backup_type, :backup_system_idref, :backup_heating_fuel, :backup_heating_capacity,
3800
4001
  :backup_heating_efficiency_percent, :backup_heating_efficiency_afue, :backup_heating_lockout_temp,
3801
4002
  :backup_heating_switchover_temp, :fraction_heat_load_served, :fraction_cool_load_served, :cooling_efficiency_seer,
@@ -3803,7 +4004,8 @@ class HPXML < Object
3803
4004
  :heating_efficiency_hspf2, :heating_efficiency_cop, :third_party_certification, :htg_seed_id, :clg_seed_id,
3804
4005
  :pump_watts_per_ton, :fan_watts_per_cfm, :is_shared_system, :number_of_units_served, :shared_loop_watts,
3805
4006
  :shared_loop_motor_efficiency, :airflow_defect_ratio, :charge_defect_ratio,
3806
- :heating_airflow_cfm, :cooling_airflow_cfm, :location, :primary_heating_system, :primary_cooling_system]
4007
+ :heating_airflow_cfm, :cooling_airflow_cfm, :location, :primary_heating_system, :primary_cooling_system,
4008
+ :heating_capacity_retention_fraction, :heating_capacity_retention_temp, :crankcase_heater_watts]
3807
4009
  attr_accessor(*ATTRS)
3808
4010
 
3809
4011
  def distribution_system
@@ -3867,7 +4069,7 @@ class HPXML < Object
3867
4069
  heat_pump = XMLHelper.add_element(hvac_plant, 'HeatPump')
3868
4070
  sys_id = XMLHelper.add_element(heat_pump, 'SystemIdentifier')
3869
4071
  XMLHelper.add_attribute(sys_id, 'id', @id)
3870
- XMLHelper.add_element(heat_pump, 'UnitLocation', @location, :string) unless @location.nil?
4072
+ XMLHelper.add_element(heat_pump, 'UnitLocation', @location, :string, @location_isdefaulted) unless @location.nil?
3871
4073
  XMLHelper.add_element(heat_pump, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
3872
4074
  XMLHelper.add_element(heat_pump, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
3873
4075
  if not @distribution_system_idref.nil?
@@ -3882,6 +4084,7 @@ class HPXML < Object
3882
4084
  XMLHelper.add_element(heat_pump, 'HeatingCapacity17F', @heating_capacity_17F, :float) unless @heating_capacity_17F.nil?
3883
4085
  XMLHelper.add_element(heat_pump, 'CoolingCapacity', @cooling_capacity, :float, @cooling_capacity_isdefaulted) unless @cooling_capacity.nil?
3884
4086
  XMLHelper.add_element(heat_pump, 'CompressorType', @compressor_type, :string, @compressor_type_isdefaulted) unless @compressor_type.nil?
4087
+ XMLHelper.add_element(heat_pump, 'CompressorLockoutTemperature', @compressor_lockout_temp, :float, @compressor_lockout_temp_isdefaulted) unless @compressor_lockout_temp.nil?
3885
4088
  XMLHelper.add_element(heat_pump, 'CoolingSensibleHeatFraction', @cooling_shr, :float, @cooling_shr_isdefaulted) unless @cooling_shr.nil?
3886
4089
  XMLHelper.add_element(heat_pump, 'BackupType', @backup_type, :string, @backup_type_isdefaulted) unless @backup_type.nil?
3887
4090
  if not @backup_system_idref.nil?
@@ -3947,6 +4150,12 @@ class HPXML < Object
3947
4150
  XMLHelper.add_extension(heat_pump, 'PumpPowerWattsPerTon', @pump_watts_per_ton, :float, @pump_watts_per_ton_isdefaulted) unless @pump_watts_per_ton.nil?
3948
4151
  XMLHelper.add_extension(heat_pump, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
3949
4152
  XMLHelper.add_extension(heat_pump, 'SharedLoopMotorEfficiency', @shared_loop_motor_efficiency, :float) unless @shared_loop_motor_efficiency.nil?
4153
+ if (not @heating_capacity_retention_fraction.nil?) || (not @heating_capacity_retention_temp.nil?)
4154
+ htg_cap_retention = XMLHelper.add_extension(heat_pump, 'HeatingCapacityRetention')
4155
+ XMLHelper.add_element(htg_cap_retention, 'Fraction', @heating_capacity_retention_fraction, :float, @heating_capacity_retention_fraction_isdefaulted) unless @heating_capacity_retention_fraction.nil?
4156
+ XMLHelper.add_element(htg_cap_retention, 'Temperature', @heating_capacity_retention_temp, :float, @heating_capacity_retention_temp_isdefaulted) unless @heating_capacity_retention_temp.nil?
4157
+ end
4158
+ XMLHelper.add_extension(heat_pump, 'CrankcaseHeaterPowerWatts', @crankcase_heater_watts, :float, @crankcase_heater_watts_isdefaulted) unless @crankcase_heater_watts.nil?
3950
4159
  XMLHelper.add_extension(heat_pump, 'HeatingSeedId', @htg_seed_id, :string) unless @htg_seed_id.nil?
3951
4160
  XMLHelper.add_extension(heat_pump, 'CoolingSeedId', @clg_seed_id, :string) unless @clg_seed_id.nil?
3952
4161
  if @primary_heating_system
@@ -3975,6 +4184,7 @@ class HPXML < Object
3975
4184
  @heating_capacity_17F = XMLHelper.get_value(heat_pump, 'HeatingCapacity17F', :float)
3976
4185
  @cooling_capacity = XMLHelper.get_value(heat_pump, 'CoolingCapacity', :float)
3977
4186
  @compressor_type = XMLHelper.get_value(heat_pump, 'CompressorType', :string)
4187
+ @compressor_lockout_temp = XMLHelper.get_value(heat_pump, 'CompressorLockoutTemperature', :float)
3978
4188
  @cooling_shr = XMLHelper.get_value(heat_pump, 'CoolingSensibleHeatFraction', :float)
3979
4189
  @backup_type = XMLHelper.get_value(heat_pump, 'BackupType', :string)
3980
4190
  @backup_system_idref = HPXML::get_idref(XMLHelper.get_element(heat_pump, 'BackupSystem'))
@@ -4001,6 +4211,9 @@ class HPXML < Object
4001
4211
  @pump_watts_per_ton = XMLHelper.get_value(heat_pump, 'extension/PumpPowerWattsPerTon', :float)
4002
4212
  @shared_loop_watts = XMLHelper.get_value(heat_pump, 'extension/SharedLoopWatts', :float)
4003
4213
  @shared_loop_motor_efficiency = XMLHelper.get_value(heat_pump, 'extension/SharedLoopMotorEfficiency', :float)
4214
+ @heating_capacity_retention_fraction = XMLHelper.get_value(heat_pump, 'extension/HeatingCapacityRetention/Fraction', :float)
4215
+ @heating_capacity_retention_temp = XMLHelper.get_value(heat_pump, 'extension/HeatingCapacityRetention/Temperature', :float)
4216
+ @crankcase_heater_watts = XMLHelper.get_value(heat_pump, 'extension/CrankcaseHeaterPowerWatts', :float)
4004
4217
  @htg_seed_id = XMLHelper.get_value(heat_pump, 'extension/HeatingSeedId', :string)
4005
4218
  @clg_seed_id = XMLHelper.get_value(heat_pump, 'extension/CoolingSeedId', :string)
4006
4219
  primary_heating_system = HPXML::get_idref(XMLHelper.get_element(heat_pump, '../PrimarySystems/PrimaryHeatingSystem'))
@@ -4041,14 +4254,12 @@ class HPXML < Object
4041
4254
  cdl_sens_slabs: 'Slabs',
4042
4255
  cdl_sens_ceilings: 'Ceilings',
4043
4256
  cdl_sens_infilvent: 'InfilVent',
4044
- cdl_sens_intgains: 'InternalGains' }
4257
+ cdl_sens_intgains: 'InternalLoads' }
4045
4258
  CDL_LAT_ATTRS = { cdl_lat_total: 'Total',
4046
4259
  cdl_lat_ducts: 'Ducts',
4047
4260
  cdl_lat_infilvent: 'InfilVent',
4048
- cdl_lat_intgains: 'InternalGains' }
4049
- TEMPERATURE_ATTRS = { temp_heating: 'Heating',
4050
- temp_cooling: 'Cooling' }
4051
- ATTRS = HDL_ATTRS.keys + CDL_SENS_ATTRS.keys + CDL_LAT_ATTRS.keys + TEMPERATURE_ATTRS.keys
4261
+ cdl_lat_intgains: 'InternalLoads' }
4262
+ ATTRS = HDL_ATTRS.keys + CDL_SENS_ATTRS.keys + CDL_LAT_ATTRS.keys
4052
4263
  attr_accessor(*ATTRS)
4053
4264
 
4054
4265
  def check_for_errors
@@ -4060,13 +4271,6 @@ class HPXML < Object
4060
4271
  return if nil?
4061
4272
 
4062
4273
  hvac_plant = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant'])
4063
- if not @temp_heating.nil?
4064
- dl_extension = XMLHelper.create_elements_as_needed(hvac_plant, ['extension', 'DesignTemperatures'])
4065
- XMLHelper.add_attribute(dl_extension, 'dataSource', 'software')
4066
- TEMPERATURE_ATTRS.each do |attr, element_name|
4067
- XMLHelper.add_element(dl_extension, element_name, send(attr), :float)
4068
- end
4069
- end
4070
4274
  if not @hdl_total.nil?
4071
4275
  dl_extension = XMLHelper.create_elements_as_needed(hvac_plant, ['extension', 'DesignLoads'])
4072
4276
  XMLHelper.add_attribute(dl_extension, 'dataSource', 'software')
@@ -4091,9 +4295,6 @@ class HPXML < Object
4091
4295
  hvac_plant = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Systems/HVAC/HVACPlant')
4092
4296
  return if hvac_plant.nil?
4093
4297
 
4094
- TEMPERATURE_ATTRS.each do |attr, element_name|
4095
- send("#{attr}=", XMLHelper.get_value(hvac_plant, "extension/DesignTemperatures/#{element_name}", :float))
4096
- end
4097
4298
  HDL_ATTRS.each do |attr, element_name|
4098
4299
  send("#{attr}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/Heating/#{element_name}", :float))
4099
4300
  end
@@ -4269,18 +4470,6 @@ class HPXML < Object
4269
4470
  return list
4270
4471
  end
4271
4472
 
4272
- def total_unconditioned_duct_areas
4273
- areas = { HPXML::DuctTypeSupply => 0,
4274
- HPXML::DuctTypeReturn => 0 }
4275
- @ducts.each do |duct|
4276
- next if HPXML::conditioned_locations.include? duct.duct_location
4277
- next if duct.duct_type.nil?
4278
-
4279
- areas[duct.duct_type] += duct.duct_surface_area
4280
- end
4281
- return areas
4282
- end
4283
-
4284
4473
  def delete
4285
4474
  @hpxml_object.hvac_distributions.delete(self)
4286
4475
  @hpxml_object.hvac_systems.each do |hvac_system|
@@ -4440,7 +4629,8 @@ class HPXML < Object
4440
4629
 
4441
4630
  class Duct < BaseElement
4442
4631
  ATTRS = [:id, :duct_type, :duct_insulation_r_value, :duct_insulation_material, :duct_location,
4443
- :duct_fraction_area, :duct_surface_area, :duct_surface_area_multiplier]
4632
+ :duct_fraction_area, :duct_surface_area, :duct_surface_area_multiplier,
4633
+ :duct_buried_insulation_level, :duct_effective_r_value]
4444
4634
  attr_accessor(*ATTRS)
4445
4635
 
4446
4636
  def delete
@@ -4466,6 +4656,8 @@ class HPXML < Object
4466
4656
  XMLHelper.add_element(ins_material_el, @duct_insulation_material)
4467
4657
  end
4468
4658
  XMLHelper.add_element(ducts_el, 'DuctInsulationRValue', @duct_insulation_r_value, :float) unless @duct_insulation_r_value.nil?
4659
+ XMLHelper.add_element(ducts_el, 'DuctBuriedInsulationLevel', @duct_buried_insulation_level, :string, @duct_buried_insulation_level_isdefaulted) unless @duct_buried_insulation_level.nil?
4660
+ XMLHelper.add_element(ducts_el, 'DuctEffectiveRValue', @duct_effective_r_value, :float, @duct_effective_r_value_isdefaulted) unless @duct_effective_r_value.nil?
4469
4661
  XMLHelper.add_element(ducts_el, 'DuctLocation', @duct_location, :string, @duct_location_isdefaulted) unless @duct_location.nil?
4470
4662
  XMLHelper.add_element(ducts_el, 'FractionDuctArea', @duct_fraction_area, :float, @duct_fraction_area_isdefaulted) unless @duct_fraction_area.nil?
4471
4663
  XMLHelper.add_element(ducts_el, 'DuctSurfaceArea', @duct_surface_area, :float, @duct_surface_area_isdefaulted) unless @duct_surface_area.nil?
@@ -4479,6 +4671,8 @@ class HPXML < Object
4479
4671
  @duct_type = XMLHelper.get_value(duct, 'DuctType', :string)
4480
4672
  @duct_insulation_material = XMLHelper.get_child_name(duct, 'DuctInsulationMaterial')
4481
4673
  @duct_insulation_r_value = XMLHelper.get_value(duct, 'DuctInsulationRValue', :float)
4674
+ @duct_buried_insulation_level = XMLHelper.get_value(duct, 'DuctBuriedInsulationLevel', :string)
4675
+ @duct_effective_r_value = XMLHelper.get_value(duct, 'DuctEffectiveRValue', :float)
4482
4676
  @duct_location = XMLHelper.get_value(duct, 'DuctLocation', :string)
4483
4677
  @duct_fraction_area = XMLHelper.get_value(duct, 'FractionDuctArea', :float)
4484
4678
  @duct_surface_area = XMLHelper.get_value(duct, 'DuctSurfaceArea', :float)
@@ -4505,7 +4699,7 @@ class HPXML < Object
4505
4699
  :used_for_whole_building_ventilation, :used_for_seasonal_cooling_load_reduction,
4506
4700
  :used_for_local_ventilation, :total_recovery_efficiency, :total_recovery_efficiency_adjusted,
4507
4701
  :sensible_recovery_efficiency, :sensible_recovery_efficiency_adjusted,
4508
- :fan_power, :fan_power_defaulted, :quantity, :fan_location, :distribution_system_idref, :start_hour,
4702
+ :fan_power, :fan_power_defaulted, :count, :fan_location, :distribution_system_idref, :start_hour,
4509
4703
  :is_shared_system, :in_unit_flow_rate, :fraction_recirculation, :used_for_garage_ventilation,
4510
4704
  :preheating_fuel, :preheating_efficiency_cop, :preheating_fraction_load_served, :precooling_fuel,
4511
4705
  :precooling_efficiency_cop, :precooling_fraction_load_served, :calculated_flow_rate,
@@ -4681,7 +4875,7 @@ class HPXML < Object
4681
4875
  ventilation_fan = XMLHelper.add_element(ventilation_fans, 'VentilationFan')
4682
4876
  sys_id = XMLHelper.add_element(ventilation_fan, 'SystemIdentifier')
4683
4877
  XMLHelper.add_attribute(sys_id, 'id', @id)
4684
- XMLHelper.add_element(ventilation_fan, 'Quantity', @quantity, :integer, @quantity_isdefaulted) unless @quantity.nil?
4878
+ XMLHelper.add_element(ventilation_fan, 'Count', @count, :integer, @count_isdefaulted) unless @count.nil?
4685
4879
  XMLHelper.add_element(ventilation_fan, 'FanType', @fan_type, :string) unless @fan_type.nil?
4686
4880
  if (not @cfis_addtl_runtime_operating_mode.nil?) || (not @cfis_supplemental_fan_idref.nil?)
4687
4881
  cfis_controls = XMLHelper.add_element(ventilation_fan, 'CFISControls')
@@ -4739,7 +4933,7 @@ class HPXML < Object
4739
4933
  return if ventilation_fan.nil?
4740
4934
 
4741
4935
  @id = HPXML::get_id(ventilation_fan)
4742
- @quantity = XMLHelper.get_value(ventilation_fan, 'Quantity', :integer)
4936
+ @count = XMLHelper.get_value(ventilation_fan, 'Count', :integer)
4743
4937
  @fan_type = XMLHelper.get_value(ventilation_fan, 'FanType', :string)
4744
4938
  @rated_flow_rate = XMLHelper.get_value(ventilation_fan, 'RatedFlowRate', :float)
4745
4939
  @calculated_flow_rate = XMLHelper.get_value(ventilation_fan, 'CalculatedFlowRate', :float)
@@ -4843,6 +5037,7 @@ class HPXML < Object
4843
5037
  XMLHelper.add_element(water_heating_system, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
4844
5038
  XMLHelper.add_element(water_heating_system, 'EnergyFactor', @energy_factor, :float, @energy_factor_isdefaulted) unless @energy_factor.nil?
4845
5039
  XMLHelper.add_element(water_heating_system, 'UniformEnergyFactor', @uniform_energy_factor, :float) unless @uniform_energy_factor.nil?
5040
+ XMLHelper.add_element(water_heating_system, 'HPWHOperatingMode', @operating_mode, :string, @operating_mode_isdefaulted) unless @operating_mode.nil?
4846
5041
  XMLHelper.add_element(water_heating_system, 'FirstHourRating', @first_hour_rating, :float) unless @first_hour_rating.nil?
4847
5042
  XMLHelper.add_element(water_heating_system, 'UsageBin', @usage_bin, :string, @usage_bin_isdefaulted) unless @usage_bin.nil?
4848
5043
  XMLHelper.add_element(water_heating_system, 'RecoveryEfficiency', @recovery_efficiency, :float, @recovery_efficiency_isdefaulted) unless @recovery_efficiency.nil?
@@ -4862,10 +5057,9 @@ class HPXML < Object
4862
5057
  related_hvac_idref_el = XMLHelper.add_element(water_heating_system, 'RelatedHVACSystem')
4863
5058
  XMLHelper.add_attribute(related_hvac_idref_el, 'idref', @related_hvac_idref)
4864
5059
  end
4865
- if (not @tank_model_type.nil?) || (not @operating_mode.nil?)
5060
+ if not @tank_model_type.nil?
4866
5061
  extension = XMLHelper.create_elements_as_needed(water_heating_system, ['extension'])
4867
5062
  XMLHelper.add_element(extension, 'TankModelType', @tank_model_type, :string, @tank_model_type_isdefaulted) unless @tank_model_type.nil?
4868
- XMLHelper.add_element(extension, 'OperatingMode', @operating_mode, :string, @operating_mode_isdefaulted) unless @operating_mode.nil?
4869
5063
  end
4870
5064
  end
4871
5065
 
@@ -4886,6 +5080,7 @@ class HPXML < Object
4886
5080
  @heating_capacity = XMLHelper.get_value(water_heating_system, 'HeatingCapacity', :float)
4887
5081
  @energy_factor = XMLHelper.get_value(water_heating_system, 'EnergyFactor', :float)
4888
5082
  @uniform_energy_factor = XMLHelper.get_value(water_heating_system, 'UniformEnergyFactor', :float)
5083
+ @operating_mode = XMLHelper.get_value(water_heating_system, 'HPWHOperatingMode', :string)
4889
5084
  @first_hour_rating = XMLHelper.get_value(water_heating_system, 'FirstHourRating', :float)
4890
5085
  @usage_bin = XMLHelper.get_value(water_heating_system, 'UsageBin', :string)
4891
5086
  @recovery_efficiency = XMLHelper.get_value(water_heating_system, 'RecoveryEfficiency', :float)
@@ -4896,7 +5091,6 @@ class HPXML < Object
4896
5091
  @uses_desuperheater = XMLHelper.get_value(water_heating_system, 'UsesDesuperheater', :boolean)
4897
5092
  @related_hvac_idref = HPXML::get_idref(XMLHelper.get_element(water_heating_system, 'RelatedHVACSystem'))
4898
5093
  @tank_model_type = XMLHelper.get_value(water_heating_system, 'extension/TankModelType', :string)
4899
- @operating_mode = XMLHelper.get_value(water_heating_system, 'extension/OperatingMode', :string)
4900
5094
  end
4901
5095
  end
4902
5096
 
@@ -5181,16 +5375,28 @@ class HPXML < Object
5181
5375
 
5182
5376
  class PVSystem < BaseElement
5183
5377
  ATTRS = [:id, :location, :module_type, :tracking, :array_orientation, :array_azimuth, :array_tilt,
5184
- :max_power_output, :inverter_efficiency, :system_losses_fraction, :number_of_panels,
5378
+ :max_power_output, :inverter_idref, :system_losses_fraction, :number_of_panels,
5185
5379
  :year_modules_manufactured, :is_shared_system, :number_of_bedrooms_served]
5186
5380
  attr_accessor(*ATTRS)
5187
5381
 
5382
+ def inverter
5383
+ return if @inverter_idref.nil?
5384
+
5385
+ @hpxml_object.inverters.each do |inv|
5386
+ next unless inv.id == @inverter_idref
5387
+
5388
+ return inv
5389
+ end
5390
+ fail "Attached inverter '#{@inverter_idref}' not found for pv system '#{@id}'."
5391
+ end
5392
+
5188
5393
  def delete
5189
5394
  @hpxml_object.pv_systems.delete(self)
5190
5395
  end
5191
5396
 
5192
5397
  def check_for_errors
5193
5398
  errors = []
5399
+ begin; inverter; rescue StandardError => e; errors << e.message; end
5194
5400
  return errors
5195
5401
  end
5196
5402
 
@@ -5210,9 +5416,12 @@ class HPXML < Object
5210
5416
  XMLHelper.add_element(pv_system, 'ArrayTilt', @array_tilt, :float) unless @array_tilt.nil?
5211
5417
  XMLHelper.add_element(pv_system, 'MaxPowerOutput', @max_power_output, :float) unless @max_power_output.nil?
5212
5418
  XMLHelper.add_element(pv_system, 'NumberOfPanels', @number_of_panels, :integer) unless @number_of_panels.nil?
5213
- XMLHelper.add_element(pv_system, 'InverterEfficiency', @inverter_efficiency, :float, @inverter_efficiency_isdefaulted) unless @inverter_efficiency.nil?
5214
5419
  XMLHelper.add_element(pv_system, 'SystemLossesFraction', @system_losses_fraction, :float, @system_losses_fraction_isdefaulted) unless @system_losses_fraction.nil?
5215
5420
  XMLHelper.add_element(pv_system, 'YearModulesManufactured', @year_modules_manufactured, :integer) unless @year_modules_manufactured.nil?
5421
+ if not @inverter_idref.nil?
5422
+ attached_to_inverter = XMLHelper.add_element(pv_system, 'AttachedToInverter')
5423
+ XMLHelper.add_attribute(attached_to_inverter, 'idref', @inverter_idref)
5424
+ end
5216
5425
  XMLHelper.add_extension(pv_system, 'NumberofBedroomsServed', @number_of_bedrooms_served, :integer) unless @number_of_bedrooms_served.nil?
5217
5426
  end
5218
5427
 
@@ -5229,13 +5438,69 @@ class HPXML < Object
5229
5438
  @array_tilt = XMLHelper.get_value(pv_system, 'ArrayTilt', :float)
5230
5439
  @max_power_output = XMLHelper.get_value(pv_system, 'MaxPowerOutput', :float)
5231
5440
  @number_of_panels = XMLHelper.get_value(pv_system, 'NumberOfPanels', :integer)
5232
- @inverter_efficiency = XMLHelper.get_value(pv_system, 'InverterEfficiency', :float)
5233
5441
  @system_losses_fraction = XMLHelper.get_value(pv_system, 'SystemLossesFraction', :float)
5234
5442
  @year_modules_manufactured = XMLHelper.get_value(pv_system, 'YearModulesManufactured', :integer)
5443
+ @inverter_idref = HPXML::get_idref(XMLHelper.get_element(pv_system, 'AttachedToInverter'))
5235
5444
  @number_of_bedrooms_served = XMLHelper.get_value(pv_system, 'extension/NumberofBedroomsServed', :integer)
5236
5445
  end
5237
5446
  end
5238
5447
 
5448
+ class Inverters < BaseArrayElement
5449
+ def add(**kwargs)
5450
+ self << Inverter.new(@hpxml_object, **kwargs)
5451
+ end
5452
+
5453
+ def from_oga(hpxml)
5454
+ return if hpxml.nil?
5455
+
5456
+ XMLHelper.get_elements(hpxml, 'Building/BuildingDetails/Systems/Photovoltaics/Inverter').each do |inverter|
5457
+ self << Inverter.new(@hpxml_object, inverter)
5458
+ end
5459
+ end
5460
+ end
5461
+
5462
+ class Inverter < BaseElement
5463
+ ATTRS = [:id, :inverter_efficiency]
5464
+ attr_accessor(*ATTRS)
5465
+
5466
+ def pv_system
5467
+ return if @id.nil?
5468
+
5469
+ @hpxml_object.pv_systems.each do |pv|
5470
+ next unless @id == pv.inverter_idref
5471
+
5472
+ return pv
5473
+ end
5474
+ end
5475
+
5476
+ def delete
5477
+ @hpxml_object.inverters.delete(self)
5478
+ end
5479
+
5480
+ def check_for_errors
5481
+ errors = []
5482
+ begin; pv_system; rescue StandardError => e; errors << e.message; end
5483
+ return errors
5484
+ end
5485
+
5486
+ def to_oga(doc)
5487
+ return if nil?
5488
+
5489
+ photovoltaics = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'Photovoltaics'])
5490
+ inverter = XMLHelper.add_element(photovoltaics, 'Inverter')
5491
+ sys_id = XMLHelper.add_element(inverter, 'SystemIdentifier')
5492
+ XMLHelper.add_attribute(sys_id, 'id', @id)
5493
+ XMLHelper.add_element(inverter, 'InverterEfficiency', @inverter_efficiency, :float, @inverter_efficiency_isdefaulted) unless @inverter_efficiency.nil?
5494
+ end
5495
+
5496
+ def from_oga(inverter)
5497
+ return if inverter.nil?
5498
+
5499
+ @id = HPXML::get_id(inverter)
5500
+ @inverter_efficiency = XMLHelper.get_value(inverter, 'InverterEfficiency', :float)
5501
+ end
5502
+ end
5503
+
5239
5504
  class Generators < BaseArrayElement
5240
5505
  def add(**kwargs)
5241
5506
  self << Generator.new(@hpxml_object, **kwargs)
@@ -5387,7 +5652,7 @@ class HPXML < Object
5387
5652
  class ClothesWasher < BaseElement
5388
5653
  ATTRS = [:id, :location, :modified_energy_factor, :integrated_modified_energy_factor,
5389
5654
  :rated_annual_kwh, :label_electric_rate, :label_gas_rate, :label_annual_gas_cost,
5390
- :capacity, :label_usage, :usage_multiplier, :is_shared_appliance, :number_of_units,
5655
+ :capacity, :label_usage, :usage_multiplier, :is_shared_appliance, :count,
5391
5656
  :number_of_units_served, :water_heating_system_idref, :hot_water_distribution_idref,
5392
5657
  :weekday_fractions, :weekend_fractions, :monthly_multipliers]
5393
5658
 
@@ -5433,7 +5698,7 @@ class HPXML < Object
5433
5698
  clothes_washer = XMLHelper.add_element(appliances, 'ClothesWasher')
5434
5699
  sys_id = XMLHelper.add_element(clothes_washer, 'SystemIdentifier')
5435
5700
  XMLHelper.add_attribute(sys_id, 'id', @id)
5436
- XMLHelper.add_element(clothes_washer, 'NumberofUnits', @number_of_units, :integer) unless @number_of_units.nil?
5701
+ XMLHelper.add_element(clothes_washer, 'Count', @count, :integer) unless @count.nil?
5437
5702
  XMLHelper.add_element(clothes_washer, 'IsSharedAppliance', @is_shared_appliance, :boolean, @is_shared_appliance_isdefaulted) unless @is_shared_appliance.nil?
5438
5703
  XMLHelper.add_element(clothes_washer, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
5439
5704
  if not @water_heating_system_idref.nil?
@@ -5462,7 +5727,7 @@ class HPXML < Object
5462
5727
  return if clothes_washer.nil?
5463
5728
 
5464
5729
  @id = HPXML::get_id(clothes_washer)
5465
- @number_of_units = XMLHelper.get_value(clothes_washer, 'NumberofUnits', :integer)
5730
+ @count = XMLHelper.get_value(clothes_washer, 'Count', :integer)
5466
5731
  @is_shared_appliance = XMLHelper.get_value(clothes_washer, 'IsSharedAppliance', :boolean)
5467
5732
  @number_of_units_served = XMLHelper.get_value(clothes_washer, 'NumberofUnitsServed', :integer)
5468
5733
  @water_heating_system_idref = HPXML::get_idref(XMLHelper.get_element(clothes_washer, 'AttachedToWaterHeatingSystem'))
@@ -5499,7 +5764,7 @@ class HPXML < Object
5499
5764
 
5500
5765
  class ClothesDryer < BaseElement
5501
5766
  ATTRS = [:id, :location, :fuel_type, :energy_factor, :combined_energy_factor, :control_type,
5502
- :usage_multiplier, :is_shared_appliance, :number_of_units, :number_of_units_served,
5767
+ :usage_multiplier, :is_shared_appliance, :count, :number_of_units_served,
5503
5768
  :is_vented, :vented_flow_rate, :weekday_fractions, :weekend_fractions,
5504
5769
  :monthly_multipliers]
5505
5770
  attr_accessor(*ATTRS)
@@ -5520,7 +5785,7 @@ class HPXML < Object
5520
5785
  clothes_dryer = XMLHelper.add_element(appliances, 'ClothesDryer')
5521
5786
  sys_id = XMLHelper.add_element(clothes_dryer, 'SystemIdentifier')
5522
5787
  XMLHelper.add_attribute(sys_id, 'id', @id)
5523
- XMLHelper.add_element(clothes_dryer, 'NumberofUnits', @number_of_units, :integer) unless @number_of_units.nil?
5788
+ XMLHelper.add_element(clothes_dryer, 'Count', @count, :integer) unless @count.nil?
5524
5789
  XMLHelper.add_element(clothes_dryer, 'IsSharedAppliance', @is_shared_appliance, :boolean, @is_shared_appliance_isdefaulted) unless @is_shared_appliance.nil?
5525
5790
  XMLHelper.add_element(clothes_dryer, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
5526
5791
  XMLHelper.add_element(clothes_dryer, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
@@ -5540,7 +5805,7 @@ class HPXML < Object
5540
5805
  return if clothes_dryer.nil?
5541
5806
 
5542
5807
  @id = HPXML::get_id(clothes_dryer)
5543
- @number_of_units = XMLHelper.get_value(clothes_dryer, 'NumberofUnits', :integer)
5808
+ @count = XMLHelper.get_value(clothes_dryer, 'Count', :integer)
5544
5809
  @is_shared_appliance = XMLHelper.get_value(clothes_dryer, 'IsSharedAppliance', :boolean)
5545
5810
  @number_of_units_served = XMLHelper.get_value(clothes_dryer, 'NumberofUnitsServed', :integer)
5546
5811
  @location = XMLHelper.get_value(clothes_dryer, 'Location', :string)
@@ -5952,7 +6217,7 @@ class HPXML < Object
5952
6217
  end
5953
6218
 
5954
6219
  class LightingGroup < BaseElement
5955
- ATTRS = [:id, :location, :fraction_of_units_in_location, :lighting_type]
6220
+ ATTRS = [:id, :location, :fraction_of_units_in_location, :lighting_type, :kwh_per_year]
5956
6221
  attr_accessor(*ATTRS)
5957
6222
 
5958
6223
  def delete
@@ -5977,6 +6242,11 @@ class HPXML < Object
5977
6242
  lighting_type = XMLHelper.add_element(lighting_group, 'LightingType')
5978
6243
  XMLHelper.add_element(lighting_type, @lighting_type)
5979
6244
  end
6245
+ if not @kwh_per_year.nil?
6246
+ lighting_load = XMLHelper.add_element(lighting_group, 'Load')
6247
+ XMLHelper.add_element(lighting_load, 'Units', UnitsKwhPerYear, :string)
6248
+ XMLHelper.add_element(lighting_load, 'Value', @kwh_per_year, :float, @kwh_per_year_isdefaulted)
6249
+ end
5980
6250
  end
5981
6251
 
5982
6252
  def from_oga(lighting_group)
@@ -5986,6 +6256,7 @@ class HPXML < Object
5986
6256
  @location = XMLHelper.get_value(lighting_group, 'Location', :string)
5987
6257
  @fraction_of_units_in_location = XMLHelper.get_value(lighting_group, 'FractionofUnitsInLocation', :float)
5988
6258
  @lighting_type = XMLHelper.get_child_name(lighting_group, 'LightingType')
6259
+ @kwh_per_year = XMLHelper.get_value(lighting_group, "Load[Units='#{UnitsKwhPerYear}']/Value", :float)
5989
6260
  end
5990
6261
  end
5991
6262
 
@@ -6083,7 +6354,7 @@ class HPXML < Object
6083
6354
  end
6084
6355
 
6085
6356
  class CeilingFan < BaseElement
6086
- ATTRS = [:id, :efficiency, :quantity, :weekday_fractions, :weekend_fractions, :monthly_multipliers]
6357
+ ATTRS = [:id, :efficiency, :count, :weekday_fractions, :weekend_fractions, :monthly_multipliers]
6087
6358
  attr_accessor(*ATTRS)
6088
6359
 
6089
6360
  def delete
@@ -6107,7 +6378,7 @@ class HPXML < Object
6107
6378
  XMLHelper.add_element(airflow, 'FanSpeed', 'medium', :string)
6108
6379
  XMLHelper.add_element(airflow, 'Efficiency', @efficiency, :float, @efficiency_isdefaulted)
6109
6380
  end
6110
- XMLHelper.add_element(ceiling_fan, 'Quantity', @quantity, :integer, @quantity_isdefaulted) unless @quantity.nil?
6381
+ XMLHelper.add_element(ceiling_fan, 'Count', @count, :integer, @count_isdefaulted) unless @count.nil?
6111
6382
  XMLHelper.add_extension(ceiling_fan, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
6112
6383
  XMLHelper.add_extension(ceiling_fan, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
6113
6384
  XMLHelper.add_extension(ceiling_fan, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
@@ -6116,7 +6387,7 @@ class HPXML < Object
6116
6387
  def from_oga(ceiling_fan)
6117
6388
  @id = HPXML::get_id(ceiling_fan)
6118
6389
  @efficiency = XMLHelper.get_value(ceiling_fan, "Airflow[FanSpeed='medium']/Efficiency", :float)
6119
- @quantity = XMLHelper.get_value(ceiling_fan, 'Quantity', :integer)
6390
+ @count = XMLHelper.get_value(ceiling_fan, 'Count', :integer)
6120
6391
  @weekday_fractions = XMLHelper.get_value(ceiling_fan, 'extension/WeekdayScheduleFractions', :string)
6121
6392
  @weekend_fractions = XMLHelper.get_value(ceiling_fan, 'extension/WeekendScheduleFractions', :string)
6122
6393
  @monthly_multipliers = XMLHelper.get_value(ceiling_fan, 'extension/MonthlyScheduleMultipliers', :string)
@@ -6354,7 +6625,7 @@ class HPXML < Object
6354
6625
  end
6355
6626
 
6356
6627
  class PlugLoad < BaseElement
6357
- ATTRS = [:id, :plug_load_type, :kWh_per_year, :frac_sensible, :frac_latent, :usage_multiplier,
6628
+ ATTRS = [:id, :plug_load_type, :kwh_per_year, :frac_sensible, :frac_latent, :usage_multiplier,
6358
6629
  :weekday_fractions, :weekend_fractions, :monthly_multipliers]
6359
6630
  attr_accessor(*ATTRS)
6360
6631
 
@@ -6375,10 +6646,10 @@ class HPXML < Object
6375
6646
  sys_id = XMLHelper.add_element(plug_load, 'SystemIdentifier')
6376
6647
  XMLHelper.add_attribute(sys_id, 'id', @id)
6377
6648
  XMLHelper.add_element(plug_load, 'PlugLoadType', @plug_load_type, :string) unless @plug_load_type.nil?
6378
- if not @kWh_per_year.nil?
6649
+ if not @kwh_per_year.nil?
6379
6650
  load = XMLHelper.add_element(plug_load, 'Load')
6380
6651
  XMLHelper.add_element(load, 'Units', UnitsKwhPerYear, :string)
6381
- XMLHelper.add_element(load, 'Value', @kWh_per_year, :float, @kWh_per_year_isdefaulted)
6652
+ XMLHelper.add_element(load, 'Value', @kwh_per_year, :float, @kwh_per_year_isdefaulted)
6382
6653
  end
6383
6654
  XMLHelper.add_extension(plug_load, 'FracSensible', @frac_sensible, :float, @frac_sensible_isdefaulted) unless @frac_sensible.nil?
6384
6655
  XMLHelper.add_extension(plug_load, 'FracLatent', @frac_latent, :float, @frac_latent_isdefaulted) unless @frac_latent.nil?
@@ -6391,7 +6662,7 @@ class HPXML < Object
6391
6662
  def from_oga(plug_load)
6392
6663
  @id = HPXML::get_id(plug_load)
6393
6664
  @plug_load_type = XMLHelper.get_value(plug_load, 'PlugLoadType', :string)
6394
- @kWh_per_year = XMLHelper.get_value(plug_load, "Load[Units='#{UnitsKwhPerYear}']/Value", :float)
6665
+ @kwh_per_year = XMLHelper.get_value(plug_load, "Load[Units='#{UnitsKwhPerYear}']/Value", :float)
6395
6666
  @frac_sensible = XMLHelper.get_value(plug_load, 'extension/FracSensible', :float)
6396
6667
  @frac_latent = XMLHelper.get_value(plug_load, 'extension/FracLatent', :float)
6397
6668
  @usage_multiplier = XMLHelper.get_value(plug_load, 'extension/UsageMultiplier', :float)
@@ -6514,7 +6785,7 @@ class HPXML < Object
6514
6785
  surf.class::ATTRS.each do |attribute|
6515
6786
  next if attribute.to_s.end_with? '_isdefaulted'
6516
6787
  next if attrs_to_ignore.include? attribute
6517
- next if (surf_type == :foundation_walls) && (attribute == :azimuth) # Azimuth of foundation walls is irrelevant
6788
+ next if (surf_type == :foundation_walls) && ([:azimuth, :orientation].include? attribute) # Azimuth of foundation walls is irrelevant
6518
6789
  next if surf.send(attribute) == surf2.send(attribute)
6519
6790
 
6520
6791
  match = false
@@ -6552,14 +6823,6 @@ class HPXML < Object
6552
6823
  end
6553
6824
  end
6554
6825
 
6555
- def delete_tiny_surfaces()
6556
- (@rim_joists + @walls + @foundation_walls + @floors + @roofs + @windows + @skylights + @doors + @slabs).reverse_each do |surface|
6557
- next if surface.area.nil? || (surface.area > 1.0)
6558
-
6559
- surface.delete
6560
- end
6561
- end
6562
-
6563
6826
  def delete_adiabatic_subsurfaces()
6564
6827
  @doors.reverse_each do |door|
6565
6828
  next if door.wall.nil?