urbanopt-cli 0.10.0 → 0.11.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 (712) hide show
  1. checksums.yaml +4 -4
  2. data/.github/release.yml +24 -0
  3. data/.github/workflows/nightly_ci_build.yml +39 -29
  4. data/.gitignore +1 -0
  5. data/CHANGELOG.md +17 -0
  6. data/CMakeLists.txt +7 -7
  7. data/FindOpenStudioSDK.cmake +8 -8
  8. data/LICENSE.md +8 -35
  9. data/README.md +25 -10
  10. data/example_files/Gemfile +9 -9
  11. data/example_files/example_project_combined.json +6 -2
  12. data/example_files/example_project_with_ghe.json +859 -0
  13. data/example_files/mappers/Baseline.rb +39 -415
  14. data/example_files/mappers/ChilledWaterStorage.rb +1 -1
  15. data/example_files/mappers/CreateBar.rb +1 -1
  16. data/example_files/mappers/EvCharging.rb +1 -1
  17. data/example_files/mappers/FlexibleHotWater.rb +1 -1
  18. data/example_files/mappers/Floorspace.rb +1 -1
  19. data/example_files/mappers/HighEfficiency.rb +1 -1
  20. data/example_files/mappers/HighEfficiencyCreateBar.rb +1 -1
  21. data/example_files/mappers/HighEfficiencyFloorspace.rb +1 -1
  22. data/example_files/mappers/PeakHoursMelsShedding.rb +1 -1
  23. data/example_files/mappers/PeakHoursThermostatAdjust.rb +1 -1
  24. data/example_files/mappers/ThermalStorage.rb +1 -1
  25. data/example_files/mappers/base_workflow.osw +11 -4
  26. data/example_files/mappers/residential/template/util.rb +138 -0
  27. data/example_files/mappers/residential/util.rb +276 -0
  28. data/example_files/measures/BuildResidentialModel/measure.rb +118 -230
  29. data/example_files/measures/BuildResidentialModel/measure.xml +344 -233
  30. data/example_files/measures/BuildResidentialModel/resources/geometry.rb +7 -2
  31. data/example_files/measures/BuildResidentialModel/resources/unit_conversions.rb +5 -0
  32. data/example_files/measures/BuildResidentialModel/resources/util.rb +5 -0
  33. data/example_files/measures/BuildResidentialModel/tests/test_build_residential_model.rb +344 -0
  34. data/example_files/measures/BuildResidentialModel/tests/xml_building/17/feature1.xml +2112 -0
  35. data/example_files/measures/BuildResidentialModel/tests/xml_building/17/feature2.xml +2112 -0
  36. data/example_files/osm_building/7.osm +0 -2
  37. data/example_files/osm_building/8.osm +0 -2
  38. data/example_files/osm_building/9.osm +0 -2
  39. data/example_files/python_deps/dependencies.json +4 -3
  40. data/example_files/resources/hpxml-measures/.gitattributes +3 -0
  41. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +2 -2
  42. data/example_files/resources/hpxml-measures/.github/workflows/add_to_project.yml +17 -0
  43. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +37 -8
  44. data/example_files/resources/hpxml-measures/.gitignore +1 -0
  45. data/example_files/resources/hpxml-measures/.readthedocs.yml +6 -2
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/README.md +5596 -0
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/README.md.erb +41 -0
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1324 -1035
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +325 -236
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +119 -152
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{build_residential_hpxml_test.rb → test_build_residential_hpxml.rb} +225 -107
  52. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/README.md +96 -0
  53. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/README.md.erb +41 -0
  54. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +73 -31
  55. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +60 -40
  56. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/README.md +48 -23
  57. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/constants.rb +5 -0
  58. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +6 -12
  59. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/{build_residential_schedule_file_test.rb → test_build_residential_schedule_file.rb} +162 -35
  60. data/example_files/resources/hpxml-measures/Changelog.md +57 -1
  61. data/example_files/resources/hpxml-measures/Gemfile +1 -1
  62. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/README.md +83 -0
  63. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/README.md.erb +41 -0
  64. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +1081 -878
  65. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +258 -204
  66. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +205 -178
  67. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +43 -18
  68. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +37 -112
  69. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +34 -73
  70. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/Xing_okstate_0664D_13659_Table_A-3.csv +4165 -0
  71. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv +2 -2
  72. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +5 -1
  73. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +13 -7
  74. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +95 -42
  75. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +132 -108
  76. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1695 -1267
  77. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +668 -589
  78. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +304 -553
  79. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +197 -112
  80. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1140 -1745
  81. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +412 -325
  82. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +56 -48
  83. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +49 -38
  84. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +5 -0
  85. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +17 -1
  86. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +5 -0
  87. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +94 -78
  88. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +60 -2
  89. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +6 -1
  90. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +11 -5
  91. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-non-stochastic.csv +1 -1
  92. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-30-mins.csv +52561 -0
  93. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_2.csv +8761 -0
  94. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_3.csv +8761 -0
  95. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_4.csv +8761 -0
  96. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_5.csv +8761 -0
  97. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_6.csv +8761 -0
  98. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +129 -137
  99. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +12 -21
  100. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +5 -0
  101. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/util.rb +7 -2
  102. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/utility_bills.rb +6 -1
  103. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +7 -2
  104. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +179 -144
  105. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +129 -71
  106. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +5 -0
  107. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +23 -6
  108. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +129 -118
  109. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +25 -20
  110. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +2282 -2239
  111. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +395 -204
  112. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +12 -7
  113. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +56 -51
  114. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +369 -230
  115. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +371 -191
  116. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +27 -20
  117. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +55 -5
  118. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +35 -30
  119. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +13 -8
  120. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +107 -93
  121. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +11 -6
  122. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +757 -573
  123. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +77 -72
  124. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +36 -6
  125. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +5 -0
  126. data/example_files/resources/hpxml-measures/README.md +2 -0
  127. data/example_files/resources/hpxml-measures/Rakefile +10 -3
  128. data/example_files/resources/hpxml-measures/ReportSimulationOutput/README.md +787 -0
  129. data/example_files/resources/hpxml-measures/ReportSimulationOutput/README.md.erb +41 -0
  130. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +730 -418
  131. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +1215 -9
  132. data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/{output_report_test.rb → test_report_sim_output.rb} +130 -299
  133. data/example_files/resources/hpxml-measures/ReportUtilityBills/README.md +87 -0
  134. data/example_files/resources/hpxml-measures/ReportUtilityBills/README.md.erb +41 -0
  135. data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +261 -89
  136. data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +179 -94
  137. data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/Average_retail_price_of_electricity.csv +68 -68
  138. data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/NG_PRI_SUM_A_EPG0_PRS_DMCF_A.csv +3 -2
  139. data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/PET_PRI_WFR_A_EPD2F_PRS_DPGAL_W.csv +713 -685
  140. data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/PET_PRI_WFR_A_EPLLPA_PRS_DPGAL_W.csv +716 -688
  141. data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/README.md +5 -2
  142. data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/util.rb +18 -9
  143. data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/test_report_utility_bills.rb +1308 -0
  144. data/example_files/resources/hpxml-measures/docs/requirements.txt +5 -0
  145. data/example_files/resources/hpxml-measures/docs/source/conf.py +1 -2
  146. data/example_files/resources/hpxml-measures/docs/source/intro.rst +3 -20
  147. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +1 -1
  148. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +917 -564
  149. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +79 -42
  150. data/example_files/resources/hpxml-measures/tasks.rb +2305 -2055
  151. data/example_files/resources/hpxml-measures/workflow/hpxml_inputs.json +270 -587
  152. data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +559 -557
  153. data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +522 -520
  154. data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +534 -532
  155. data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +547 -545
  156. data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +546 -544
  157. data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +603 -623
  158. data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +613 -633
  159. data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +699 -721
  160. data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +662 -661
  161. data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +657 -677
  162. data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +470 -467
  163. data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +441 -438
  164. data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +468 -465
  165. data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +469 -466
  166. data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +468 -465
  167. data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +717 -714
  168. data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +647 -645
  169. data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +569 -566
  170. data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +602 -599
  171. data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +630 -627
  172. data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +776 -774
  173. data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +670 -667
  174. data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +632 -629
  175. data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +731 -729
  176. data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +672 -669
  177. data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +667 -644
  178. data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +646 -644
  179. data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +690 -688
  180. data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +701 -699
  181. data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +637 -615
  182. data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +690 -688
  183. data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +557 -554
  184. data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +534 -531
  185. data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +636 -635
  186. data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +616 -613
  187. data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +601 -598
  188. data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +581 -578
  189. data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +624 -622
  190. data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +584 -582
  191. data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +631 -629
  192. data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +922 -921
  193. data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +855 -853
  194. data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +739 -737
  195. data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +798 -796
  196. data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +696 -694
  197. data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +487 -483
  198. data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +443 -440
  199. data/example_files/resources/hpxml-measures/workflow/real_homes/house048.xml +688 -686
  200. data/example_files/resources/hpxml-measures/workflow/real_homes/house049.xml +722 -720
  201. data/example_files/resources/hpxml-measures/workflow/real_homes/house050.xml +619 -617
  202. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +13 -20
  203. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +9 -9
  204. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +11 -12
  205. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +11 -12
  206. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +12 -13
  207. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +11 -12
  208. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +9 -9
  209. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +9 -9
  210. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +4 -4
  211. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +9 -9
  212. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +9 -9
  213. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +9 -9
  214. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +11 -11
  215. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +10 -10
  216. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +9 -9
  217. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +10 -11
  218. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +9 -9
  219. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +8 -8
  220. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +571 -569
  221. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +9 -9
  222. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml → base-bldgtype-mf-unit-adjacent-to-multifamily-buffer-space.xml} +5 -5
  223. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-multiple.xml → base-bldgtype-mf-unit-adjacent-to-multiple.xml} +17 -17
  224. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml → base-bldgtype-mf-unit-adjacent-to-non-freezing-space.xml} +5 -5
  225. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-other-heated-space.xml → base-bldgtype-mf-unit-adjacent-to-other-heated-space.xml} +5 -5
  226. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml → base-bldgtype-mf-unit-adjacent-to-other-housing-unit.xml} +5 -5
  227. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-infil-compartmentalization-test.xml → base-bldgtype-mf-unit-infil-compartmentalization-test.xml} +461 -461
  228. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-residents-1.xml → base-bldgtype-mf-unit-residents-1.xml} +453 -453
  229. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml → base-bldgtype-mf-unit-shared-boiler-chiller-baseboard.xml} +11 -11
  230. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml → base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil-ducted.xml} +11 -11
  231. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml → base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil.xml} +11 -11
  232. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-boiler-chiller-water-loop-heat-pump.xml} +11 -11
  233. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-boiler-cooling-tower-water-loop-heat-pump.xml} +11 -11
  234. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-baseboard.xml → base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml} +11 -11
  235. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml → base-bldgtype-mf-unit-shared-boiler-only-fan-coil-ducted.xml} +11 -11
  236. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml → base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml} +11 -11
  237. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-fireplace-elec.xml +433 -0
  238. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml → base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml} +11 -11
  239. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-boiler-only-water-loop-heat-pump.xml} +11 -11
  240. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-baseboard.xml → base-bldgtype-mf-unit-shared-chiller-only-baseboard.xml} +11 -11
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml → base-bldgtype-mf-unit-shared-chiller-only-fan-coil-ducted.xml} +11 -11
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml → base-bldgtype-mf-unit-shared-chiller-only-fan-coil.xml} +11 -11
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-chiller-only-water-loop-heat-pump.xml} +11 -11
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-cooling-tower-only-water-loop-heat-pump.xml} +11 -11
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-generator.xml → base-bldgtype-mf-unit-shared-generator.xml} +13 -13
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml → base-bldgtype-mf-unit-shared-ground-loop-ground-to-air-heat-pump.xml} +13 -13
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml → base-bldgtype-mf-unit-shared-laundry-room-multiple-water-heaters.xml} +480 -480
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-laundry-room.xml → base-bldgtype-mf-unit-shared-laundry-room.xml} +10 -10
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-mechvent-multiple.xml → base-bldgtype-mf-unit-shared-mechvent-multiple.xml} +15 -15
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-mechvent-preconditioning.xml → base-bldgtype-mf-unit-shared-mechvent-preconditioning.xml} +13 -13
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-mechvent.xml → base-bldgtype-mf-unit-shared-mechvent.xml} +13 -13
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-pv.xml → base-bldgtype-mf-unit-shared-pv.xml} +13 -13
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-water-heater-recirc.xml → base-bldgtype-mf-unit-shared-water-heater-recirc.xml} +13 -13
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-water-heater.xml → base-bldgtype-mf-unit-shared-water-heater.xml} +13 -13
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily.xml → base-bldgtype-mf-unit.xml} +13 -13
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached-2stories.xml → base-bldgtype-sfa-unit-2stories.xml} +610 -610
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached-atticroof-cathedral.xml → base-bldgtype-sfa-unit-atticroof-cathedral.xml} +558 -558
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached-infil-compartmentalization-test.xml → base-bldgtype-sfa-unit-infil-compartmentalization-test.xml} +610 -610
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached.xml → base-bldgtype-sfa-unit.xml} +610 -610
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +8 -8
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +9 -9
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +9 -9
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +9 -9
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +9 -9
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +9 -9
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +9 -9
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +9 -9
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +9 -9
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +507 -505
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +9 -9
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +8 -8
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +9 -9
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +9 -9
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +9 -9
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +9 -9
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +9 -9
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +9 -9
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +9 -9
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +12 -10
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +14 -14
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +5 -5
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +9 -9
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +9 -9
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +9 -9
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +9 -9
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +9 -9
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +9 -9
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +9 -9
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +9 -9
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +9 -9
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +9 -9
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +9 -9
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +9 -9
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +12 -10
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +9 -9
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +8 -8
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +9 -9
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +9 -9
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +9 -9
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +13 -11
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +9 -9
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +8 -8
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +9 -9
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +9 -9
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +9 -9
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +9 -9
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +12 -10
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +9 -9
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +9 -9
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +9 -9
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +12 -10
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +8 -8
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +9 -9
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +9 -9
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +9 -9
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +9 -9
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +9 -9
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +9 -9
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +9 -9
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +13 -14
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +11 -11
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +9 -9
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +9 -9
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +9 -9
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +9 -9
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +576 -576
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +519 -519
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +4 -5
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +9 -9
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +9 -9
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +9 -9
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ela.xml +548 -548
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +9 -9
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +9 -9
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-cfm.xml +551 -551
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +9 -9
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +9 -9
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +9 -9
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +9 -9
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +9 -9
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +9 -9
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +9 -9
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +10 -11
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +9 -9
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +19 -19
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +555 -553
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +9 -9
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +9 -9
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading-seasons.xml +560 -558
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +9 -9
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +9 -9
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +10 -10
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +10 -11
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-belly-wing-no-skirt.xml +496 -0
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-belly-wing-skirt.xml +496 -0
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +18 -18
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-simple-power-outage-natvent-unavailable.xml → base-foundation-conditioned-basement-slab-insulation-full.xml} +552 -564
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +9 -9
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-insulation.xml +555 -555
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +8 -8
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +5 -5
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +10 -11
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +4 -4
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +4 -4
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +4 -4
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +4 -4
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +9 -9
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace-above-grade.xml +558 -0
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +9 -9
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +15 -15
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +9 -9
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-capacity-17f.xml +552 -552
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +9 -9
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +562 -562
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +557 -557
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +9 -9
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +9 -9
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml +586 -586
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +9 -9
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +9 -9
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +9 -9
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml → base-hvac-air-to-air-heat-pump-var-speed-detailed-performance-other-temperatures.xml} +89 -13
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml → base-hvac-air-to-air-heat-pump-var-speed-detailed-performance.xml} +107 -13
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +9 -9
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-sizing-controls.xml +567 -565
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +9 -9
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +9 -9
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +9 -9
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +9 -9
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only-pilot.xml +512 -512
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +9 -9
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +9 -9
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +9 -9
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +9 -9
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +536 -536
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +9 -9
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +9 -9
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-central-ac-only-var-speed.xml → base-hvac-central-ac-only-var-speed-detailed-performance.xml} +49 -10
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +9 -9
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +9 -9
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +9 -9
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +559 -559
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +9 -9
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +9 -9
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +9 -9
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +9 -9
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +11 -12
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +558 -558
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-buried.xml +554 -554
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-furnace-gas-room-ac.xml → base-hvac-ducts-defaults.xml} +28 -14
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-effective-rvalue.xml +552 -552
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +9 -9
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +9 -9
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +9 -9
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +9 -9
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +9 -9
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +9 -9
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +9 -9
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +15 -10
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +9 -9
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +9 -9
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +9 -9
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +9 -9
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +9 -9
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +12 -10
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-pilot.xml +541 -541
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +9 -9
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +9 -9
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +9 -9
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +9 -9
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +9 -9
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +9 -9
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +9 -9
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +9 -9
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +9 -9
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +9 -9
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +9 -9
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-air-to-air-heat-pump-1-speed-autosized-backup.xml → base-hvac-install-quality-air-to-air-heat-pump-var-speed-detailed-performance.xml} +650 -556
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +9 -9
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +9 -9
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +9 -9
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +9 -9
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +9 -9
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +9 -9
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +9 -9
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +9 -9
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +9 -9
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml → base-hvac-mini-split-air-conditioner-only-ductless-detailed-performance.xml} +50 -49
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +9 -9
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +9 -9
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml → base-hvac-mini-split-heat-pump-ducted-detailed-performance.xml} +109 -14
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +9 -9
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +9 -9
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml +524 -524
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted-backup-hardsized.xml → base-hvac-mini-split-heat-pump-ductless-backup-furnace-ducts-defaults.xml} +560 -552
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-furnace.xml +563 -563
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +9 -9
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml → base-hvac-mini-split-heat-pump-ductless-detailed-performance.xml} +108 -60
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml +505 -505
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +9 -9
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +9 -9
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +10 -11
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +9 -9
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-natural-gas.xml +504 -504
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +9 -9
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp-heating-capacity-17f.xml +512 -512
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +9 -9
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +9 -9
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +9 -9
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +12 -10
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +9 -9
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +504 -504
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +517 -517
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +9 -9
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +9 -9
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +9 -9
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +9 -9
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-fixed-heater-gas-only.xml → base-hvac-space-heater-gas-only.xml} +10 -10
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +9 -9
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +9 -9
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +9 -9
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +9 -9
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +9 -9
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +9 -9
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-kwh-per-year.xml +531 -528
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-mixed.xml +536 -536
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none-ceiling-fans.xml +515 -515
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +9 -9
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +9 -9
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +9 -9
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +9 -9
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +10 -11
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +4 -4
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +9 -9
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +10 -11
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +10 -11
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +10 -11
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +9 -9
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +9 -9
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +9 -9
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +9 -9
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +9 -9
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +9 -9
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +576 -576
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +576 -576
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +9 -9
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +9 -9
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +9 -9
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +9 -9
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +9 -9
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +9 -9
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +9 -9
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +9 -9
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +9 -9
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +9 -9
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +21 -19
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +605 -605
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +587 -587
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +9 -9
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +9 -9
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +3 -3
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +9 -9
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +587 -585
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +584 -584
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +9 -9
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +555 -555
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +26 -26
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +26 -26
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +9 -9
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading-bldgtype-multifamily.xml +508 -508
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +9 -9
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +9 -9
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-simple-power-outage-natvent-available.xml → base-misc-unit-multiplier.xml} +553 -564
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +26 -26
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-mf-units.xml +2755 -0
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-multiple-buildings.xml → base-multiple-sfd-buildings.xml} +31 -22
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +9 -9
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +4 -5
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-round-trip-efficiency.xml +597 -597
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +599 -597
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +9 -9
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +615 -613
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +612 -612
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +596 -596
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +9 -9
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0-runperiod-1-month.xml +559 -559
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0.xml +555 -555
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-1-misc-loads-large-uncommon.xml +616 -616
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-1-misc-loads-large-uncommon2.xml +616 -616
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-1.xml +547 -547
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-5.xml +515 -515
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +14 -12
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-crankcase-heater-40w.xml → base-schedules-detailed-mixed-timesteps-power-outage.xml} +565 -555
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-detailed-occupancy-stochastic-vacancy-year-round.xml → base-schedules-detailed-mixed-timesteps.xml} +554 -563
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +12 -10
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml +566 -564
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +12 -10
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +12 -10
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +12 -10
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +12 -10
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +12 -10
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml +619 -619
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml +618 -618
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +9 -9
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +9 -9
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +9 -9
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +9 -9
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +9 -9
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-temperature-capacitance-multiplier.xml +553 -553
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +12 -10
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +12 -10
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +9 -9
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-30-mins.xml +552 -552
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +9 -9
  575. data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +2 -0
  576. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +2 -0
  577. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +2 -0
  578. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +4 -1
  579. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Long_Residence.xml +385 -385
  580. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Vatilo_Residence.xml +378 -380
  581. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Victor_Residence.xml +369 -369
  582. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +7 -7
  583. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +7 -7
  584. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +7 -7
  585. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +7 -7
  586. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +7 -7
  587. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +7 -7
  588. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +7 -7
  589. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +7 -7
  590. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +7 -7
  591. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +7 -7
  592. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +7 -7
  593. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +7 -7
  594. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +7 -7
  595. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +7 -7
  596. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +7 -7
  597. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +7 -7
  598. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +7 -7
  599. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +7 -7
  600. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +7 -7
  601. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +7 -7
  602. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +7 -7
  603. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +7 -7
  604. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +7 -8
  605. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +7 -8
  606. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -6
  607. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -6
  608. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_sizing.csv +363 -0
  609. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1.csv +281 -0
  610. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1_bills.csv +281 -0
  611. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2.csv +141 -0
  612. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2_bills.csv +141 -0
  613. data/example_files/resources/hpxml-measures/workflow/tests/compare.py +12 -6
  614. data/example_files/resources/hpxml-measures/workflow/tests/util.rb +1141 -0
  615. data/example_files/weather/USA_CO_Denver.Intl.AP.725650_TMY3.ddy +536 -0
  616. data/example_files/weather/USA_CO_Denver.Intl.AP.725650_TMY3.epw +8768 -0
  617. data/example_files/weather/USA_CO_Denver.Intl.AP.725650_TMY3.stat +554 -0
  618. data/example_files/weather/USA_FL_MacDill.AFB.747880_TMY3.ddy +536 -0
  619. data/example_files/weather/USA_FL_MacDill.AFB.747880_TMY3.epw +8768 -0
  620. data/example_files/weather/USA_FL_MacDill.AFB.747880_TMY3.stat +553 -0
  621. data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3-cache.csv +35 -0
  622. data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3.ddy +536 -0
  623. data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3.epw +8768 -0
  624. data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3.stat +553 -0
  625. data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3-cache.csv +35 -0
  626. data/example_files/xml_building/17/README.md +4 -2
  627. data/example_files/xml_building/17/feature.xml +2112 -0
  628. data/lib/uo_cli/version.rb +1 -1
  629. data/lib/uo_cli.rb +110 -17
  630. data/uo_cli.gemspec +6 -8
  631. metadata +130 -177
  632. data/Jenkinsfile +0 -10
  633. data/example_files/base_workflow_res.osw +0 -276
  634. data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +0 -1226
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +0 -551
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +0 -551
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +0 -544
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +0 -550
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +0 -552
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +0 -552
  641. 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 +0 -552
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +0 -552
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +0 -552
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +0 -552
  645. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +0 -552
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +0 -569
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +0 -599
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +0 -552
  649. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +0 -506
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +0 -560
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +0 -507
  652. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +0 -536
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +0 -536
  654. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +0 -565
  655. 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 +0 -553
  656. 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 +0 -553
  657. 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 +0 -553
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +0 -497
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +0 -544
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +0 -500
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +0 -536
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +0 -551
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +0 -551
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +0 -536
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +0 -546
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +0 -552
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +0 -554
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +0 -554
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +0 -554
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +0 -543
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +0 -549
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +0 -551
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +0 -551
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-baseboard.xml +0 -519
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +0 -522
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +0 -503
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +0 -496
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +0 -518
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +0 -518
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +0 -518
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +0 -496
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +0 -503
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +0 -518
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +0 -518
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +0 -518
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +0 -500
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +0 -500
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only-pilot-light.xml +0 -506
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +0 -501
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +0 -556
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +0 -548
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy-year-round.xml +0 -619
  693. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +0 -475
  694. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +0 -475
  695. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +0 -1313
  696. data/example_files/resources/measure-info.json +0 -26
  697. data/example_files/resources/meta_measure.rb +0 -301
  698. data/example_files/xml_building/17/unit 1.xml +0 -580
  699. data/example_files/xml_building/17/unit 2.xml +0 -553
  700. data/example_files/xml_building/17/unit 3.xml +0 -553
  701. data/example_files/xml_building/17/unit 4.xml +0 -580
  702. /data/example_files/{residential → mappers/residential/template/iecc}/clothes_dryer.tsv +0 -0
  703. /data/example_files/{residential → mappers/residential/template/iecc}/clothes_washer.tsv +0 -0
  704. /data/example_files/{residential → mappers/residential/template/iecc}/cooling_system.tsv +0 -0
  705. /data/example_files/{residential → mappers/residential/template/iecc}/dishwasher.tsv +0 -0
  706. /data/example_files/{residential → mappers/residential/template/iecc}/enclosure.tsv +0 -0
  707. /data/example_files/{residential → mappers/residential/template/iecc}/heat_pump.tsv +0 -0
  708. /data/example_files/{residential → mappers/residential/template/iecc}/heating_system.tsv +0 -0
  709. /data/example_files/{residential → mappers/residential/template/iecc}/mechanical_ventilation.tsv +0 -0
  710. /data/example_files/{residential → mappers/residential/template/iecc}/refrigerator.tsv +0 -0
  711. /data/example_files/{residential → mappers/residential/template/iecc}/water_heater.tsv +0 -0
  712. /data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/{JacksonElectricMemberCorp-ResidentialSeniorCitizenLowIncomeAssistance.json → Detailed Rate.json} +0 -0
@@ -1,3 +1,8 @@
1
+ # *********************************************************************************
2
+ # URBANopt (tm), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://github.com/urbanopt/urbanopt-cli/blob/develop/LICENSE.md
4
+ # *********************************************************************************
5
+
1
6
  # frozen_string_literal: true
2
7
 
3
8
  require_relative '../../HPXMLtoOpenStudio/resources/minitest_helper'
@@ -10,10 +15,19 @@ require_relative '../../HPXMLtoOpenStudio/resources/xmlhelper.rb'
10
15
  require_relative '../../HPXMLtoOpenStudio/resources/constants.rb'
11
16
  require_relative '../../HPXMLtoOpenStudio/resources/version.rb'
12
17
  require 'oga'
18
+ require 'json'
13
19
 
14
- class ReportSimulationOutputTest < MiniTest::Test
20
+ class ReportSimulationOutputTest < Minitest::Test
15
21
  def setup
16
22
  @tmp_hpxml_path = File.join(File.dirname(__FILE__), 'tmp.xml')
23
+
24
+ # Obtain measure.xml outputs once
25
+ measure_xml_path = File.join(File.dirname(__FILE__), '..', 'measure.xml')
26
+ doc = XMLHelper.parse_file(measure_xml_path)
27
+ @measure_xml_outputs = []
28
+ XMLHelper.get_elements(doc, '//measure/outputs/output').each do |el|
29
+ @measure_xml_outputs << XMLHelper.get_value(el, 'display_name', :string)
30
+ end
17
31
  end
18
32
 
19
33
  def teardown
@@ -61,8 +75,8 @@ class ReportSimulationOutputTest < MiniTest::Test
61
75
  "End Use: #{FT::Elec}: #{EUT::WellPump} (MBtu)",
62
76
  "End Use: #{FT::Elec}: #{EUT::PoolHeater} (MBtu)",
63
77
  "End Use: #{FT::Elec}: #{EUT::PoolPump} (MBtu)",
64
- "End Use: #{FT::Elec}: #{EUT::HotTubHeater} (MBtu)",
65
- "End Use: #{FT::Elec}: #{EUT::HotTubPump} (MBtu)",
78
+ "End Use: #{FT::Elec}: #{EUT::PermanentSpaHeater} (MBtu)",
79
+ "End Use: #{FT::Elec}: #{EUT::PermanentSpaPump} (MBtu)",
66
80
  "End Use: #{FT::Elec}: #{EUT::PV} (MBtu)",
67
81
  "End Use: #{FT::Elec}: #{EUT::Generator} (MBtu)",
68
82
  "End Use: #{FT::Elec}: #{EUT::Battery} (MBtu)",
@@ -73,7 +87,7 @@ class ReportSimulationOutputTest < MiniTest::Test
73
87
  "End Use: #{FT::Gas}: #{EUT::ClothesDryer} (MBtu)",
74
88
  "End Use: #{FT::Gas}: #{EUT::RangeOven} (MBtu)",
75
89
  "End Use: #{FT::Gas}: #{EUT::PoolHeater} (MBtu)",
76
- "End Use: #{FT::Gas}: #{EUT::HotTubHeater} (MBtu)",
90
+ "End Use: #{FT::Gas}: #{EUT::PermanentSpaHeater} (MBtu)",
77
91
  "End Use: #{FT::Gas}: #{EUT::Grill} (MBtu)",
78
92
  "End Use: #{FT::Gas}: #{EUT::Lighting} (MBtu)",
79
93
  "End Use: #{FT::Gas}: #{EUT::Fireplace} (MBtu)",
@@ -144,6 +158,7 @@ class ReportSimulationOutputTest < MiniTest::Test
144
158
  "Unmet Hours: #{UHT::Cooling} (hr)",
145
159
  "Peak Electricity: #{PFT::Winter} #{TE::Total} (W)",
146
160
  "Peak Electricity: #{PFT::Summer} #{TE::Total} (W)",
161
+ "Peak Electricity: #{PFT::Annual} #{TE::Total} (W)",
147
162
  "Peak Load: #{PLT::Heating} (kBtu/hr)",
148
163
  "Peak Load: #{PLT::Cooling} (kBtu/hr)",
149
164
  "Component Load: Heating: #{CLT::Roofs} (MBtu)",
@@ -190,6 +205,7 @@ class ReportSimulationOutputTest < MiniTest::Test
190
205
  "Hot Water: #{HWT::Dishwasher} (gal)",
191
206
  "Hot Water: #{HWT::Fixtures} (gal)",
192
207
  "Hot Water: #{HWT::DistributionWaste} (gal)",
208
+ 'Resilience: Battery (hr)',
193
209
  'HVAC Capacity: Cooling (Btu/h)',
194
210
  'HVAC Capacity: Heating (Btu/h)',
195
211
  'HVAC Capacity: Heat Pump Backup (Btu/h)',
@@ -265,6 +281,10 @@ class ReportSimulationOutputTest < MiniTest::Test
265
281
  "Hot Water: #{HWT::DistributionWaste}",
266
282
  ]
267
283
 
284
+ BaseHPXMLTimeseriesColsResilience = [
285
+ 'Resilience: Battery'
286
+ ]
287
+
268
288
  BaseHPXMLTimeseriesColsTotalLoads = [
269
289
  "Load: #{LT::Heating}",
270
290
  "Load: #{LT::Cooling}",
@@ -311,7 +331,7 @@ class ReportSimulationOutputTest < MiniTest::Test
311
331
 
312
332
  BaseHPXMLTimeseriesColsZoneTemps = [
313
333
  'Temperature: Attic - Unvented',
314
- 'Temperature: Living Space',
334
+ 'Temperature: Conditioned Space',
315
335
  'Temperature: Heating Setpoint',
316
336
  'Temperature: Cooling Setpoint',
317
337
  ]
@@ -331,16 +351,13 @@ class ReportSimulationOutputTest < MiniTest::Test
331
351
  "Weather: #{WT::DirectSolar}",
332
352
  ]
333
353
 
334
- BaseHPXMLTimeseriesColsStandardOutputVariables = [
335
- 'Zone People Occupant Count: Living Space',
336
- 'Zone People Total Heating Energy: Living Space'
337
- ]
338
-
339
- BaseHPXMLTimeseriesColsAdvancedOutputVariables = [
354
+ BaseHPXMLTimeseriesColsEnergyPlusOutputVariables = [
355
+ 'Zone People Occupant Count: Conditioned Space',
356
+ 'Zone People Total Heating Energy: Conditioned Space',
340
357
  'Surface Construction Index: Door1',
341
358
  'Surface Construction Index: Foundationwall1',
342
359
  'Surface Construction Index: Floor1',
343
- 'Surface Construction Index: Furniture Mass Living Space 1',
360
+ 'Surface Construction Index: Furniture Mass Conditioned Space 1',
344
361
  'Surface Construction Index: Inferred Conditioned Ceiling',
345
362
  'Surface Construction Index: Inferred Conditioned Floor',
346
363
  'Surface Construction Index: Partition Wall Mass',
@@ -443,8 +460,8 @@ class ReportSimulationOutputTest < MiniTest::Test
443
460
  "Emissions: #{scenario}: #{FT::Elec}: #{EUT::WellPump} (lb)",
444
461
  "Emissions: #{scenario}: #{FT::Elec}: #{EUT::PoolHeater} (lb)",
445
462
  "Emissions: #{scenario}: #{FT::Elec}: #{EUT::PoolPump} (lb)",
446
- "Emissions: #{scenario}: #{FT::Elec}: #{EUT::HotTubHeater} (lb)",
447
- "Emissions: #{scenario}: #{FT::Elec}: #{EUT::HotTubPump} (lb)",
463
+ "Emissions: #{scenario}: #{FT::Elec}: #{EUT::PermanentSpaHeater} (lb)",
464
+ "Emissions: #{scenario}: #{FT::Elec}: #{EUT::PermanentSpaPump} (lb)",
448
465
  "Emissions: #{scenario}: #{FT::Elec}: #{EUT::PV} (lb)",
449
466
  "Emissions: #{scenario}: #{FT::Elec}: #{EUT::Generator} (lb)",
450
467
  "Emissions: #{scenario}: #{FT::Elec}: #{EUT::Battery} (lb)",
@@ -454,7 +471,7 @@ class ReportSimulationOutputTest < MiniTest::Test
454
471
  "Emissions: #{scenario}: #{FT::Gas}: #{EUT::ClothesDryer} (lb)",
455
472
  "Emissions: #{scenario}: #{FT::Gas}: #{EUT::RangeOven} (lb)",
456
473
  "Emissions: #{scenario}: #{FT::Gas}: #{EUT::PoolHeater} (lb)",
457
- "Emissions: #{scenario}: #{FT::Gas}: #{EUT::HotTubHeater} (lb)",
474
+ "Emissions: #{scenario}: #{FT::Gas}: #{EUT::PermanentSpaHeater} (lb)",
458
475
  "Emissions: #{scenario}: #{FT::Gas}: #{EUT::Grill} (lb)",
459
476
  "Emissions: #{scenario}: #{FT::Gas}: #{EUT::Lighting} (lb)",
460
477
  "Emissions: #{scenario}: #{FT::Gas}: #{EUT::Fireplace} (lb)",
@@ -581,14 +598,15 @@ class ReportSimulationOutputTest < MiniTest::Test
581
598
  'include_timeseries_component_loads' => false,
582
599
  'include_timeseries_zone_temperatures' => false,
583
600
  'include_timeseries_airflows' => false,
584
- 'include_timeseries_weather' => false }
601
+ 'include_timeseries_weather' => false,
602
+ 'include_timeseries_resilience' => false }
585
603
  annual_csv, timeseries_csv = _test_measure(args_hash)
586
604
  assert(File.exist?(annual_csv))
587
605
  assert(!File.exist?(timeseries_csv))
588
606
  expected_annual_rows = AnnualRows
589
607
  actual_annual_rows = _get_actual_annual_rows(annual_csv)
590
608
  assert_equal(expected_annual_rows.sort, actual_annual_rows.keys.sort)
591
- _check_for_runner_registered_values(File.join(File.dirname(annual_csv), 'results.json'), actual_annual_rows)
609
+ _check_runner_registered_values_and_measure_xml_outputs(actual_annual_rows)
592
610
  end
593
611
 
594
612
  def test_annual_only2
@@ -609,14 +627,15 @@ class ReportSimulationOutputTest < MiniTest::Test
609
627
  'include_timeseries_component_loads' => true,
610
628
  'include_timeseries_zone_temperatures' => true,
611
629
  'include_timeseries_airflows' => true,
612
- 'include_timeseries_weather' => true }
630
+ 'include_timeseries_weather' => true,
631
+ 'include_timeseries_resilience' => true }
613
632
  annual_csv, timeseries_csv = _test_measure(args_hash)
614
633
  assert(File.exist?(annual_csv))
615
634
  assert(!File.exist?(timeseries_csv))
616
635
  expected_annual_rows = AnnualRows + emission_annual_cols
617
636
  actual_annual_rows = _get_actual_annual_rows(annual_csv)
618
637
  assert_equal(expected_annual_rows.sort, actual_annual_rows.keys.sort)
619
- _check_for_runner_registered_values(File.join(File.dirname(annual_csv), 'results.json'), actual_annual_rows)
638
+ _check_runner_registered_values_and_measure_xml_outputs(actual_annual_rows)
620
639
  end
621
640
 
622
641
  def test_annual_disabled_outputs
@@ -635,7 +654,8 @@ class ReportSimulationOutputTest < MiniTest::Test
635
654
  'include_annual_peak_loads' => false,
636
655
  'include_annual_component_loads' => false,
637
656
  'include_annual_hot_water_uses' => false,
638
- 'include_annual_hvac_summary' => false }
657
+ 'include_annual_hvac_summary' => false,
658
+ 'include_annual_resilience' => false }
639
659
  annual_csv, timeseries_csv = _test_measure(args_hash)
640
660
  assert(File.exist?(annual_csv))
641
661
  assert(!File.exist?(timeseries_csv))
@@ -644,24 +664,6 @@ class ReportSimulationOutputTest < MiniTest::Test
644
664
  end
645
665
 
646
666
  def test_timeseries_hourly_total_energy
647
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
648
- 'skip_validation' => true,
649
- 'timeseries_frequency' => 'hourly',
650
- 'include_timeseries_total_consumptions' => true }
651
- annual_csv, timeseries_csv = _test_measure(args_hash)
652
- assert(File.exist?(annual_csv))
653
- assert(File.exist?(timeseries_csv))
654
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsEnergy
655
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
656
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
657
- timeseries_rows = CSV.read(timeseries_csv)
658
- assert_equal(8760, timeseries_rows.size - 2)
659
- timeseries_cols = timeseries_rows.transpose
660
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
661
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, ["Energy Use: #{TE::Total}"])
662
- end
663
-
664
- def test_timeseries_hourly_total_energy_pv
665
667
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-pv.xml'),
666
668
  'skip_validation' => true,
667
669
  'timeseries_frequency' => 'hourly',
@@ -681,24 +683,6 @@ class ReportSimulationOutputTest < MiniTest::Test
681
683
  end
682
684
 
683
685
  def test_timeseries_hourly_fuels
684
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
685
- 'skip_validation' => true,
686
- 'timeseries_frequency' => 'hourly',
687
- 'include_timeseries_fuel_consumptions' => true }
688
- annual_csv, timeseries_csv = _test_measure(args_hash)
689
- assert(File.exist?(annual_csv))
690
- assert(File.exist?(timeseries_csv))
691
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsFuels
692
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
693
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
694
- timeseries_rows = CSV.read(timeseries_csv)
695
- assert_equal(8760, timeseries_rows.size - 2)
696
- timeseries_cols = timeseries_rows.transpose
697
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
698
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, ["Fuel Use: #{FT::Elec}: #{TE::Total}"])
699
- end
700
-
701
- def test_timeseries_hourly_fuels_pv
702
686
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-pv.xml'),
703
687
  'skip_validation' => true,
704
688
  'timeseries_frequency' => 'hourly',
@@ -809,70 +793,6 @@ class ReportSimulationOutputTest < MiniTest::Test
809
793
  _check_for_nonzero_timeseries_values(timeseries_csv, ["End Use: #{FT::Elec}: #{EUT::Refrigerator}"])
810
794
  end
811
795
 
812
- def test_timeseries_hourly_enduses_power_outage
813
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-schedules-simple-power-outage.xml'),
814
- 'skip_validation' => true,
815
- 'timeseries_frequency' => 'hourly',
816
- 'include_timeseries_end_use_consumptions' => true }
817
- annual_csv, timeseries_csv = _test_measure(args_hash)
818
- assert(File.exist?(annual_csv))
819
- assert(File.exist?(timeseries_csv))
820
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsEndUses
821
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
822
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
823
- timeseries_rows = CSV.read(timeseries_csv)
824
- assert_equal(8760, timeseries_rows.size - 2)
825
- timeseries_cols = timeseries_rows.transpose
826
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
827
- _check_for_zero_timeseries_values(timeseries_csv, ["End Use: #{FT::Elec}: #{EUT::PlugLoads}"], (31 + 28 + 31 + 30 + 31 + 30) * 24 + 4, (31 + 28 + 31 + 30 + 31 + 30 + 31) * 24 - 12) # Jul
828
- end
829
-
830
- def test_timeseries_hourly_enduses_power_outage_natvent_availability
831
- energy_use_total_col = "Energy Use: #{TE::Total}"
832
- temperature_living_space_col = 'Temperature: Living Space'
833
-
834
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-schedules-simple-power-outage.xml'),
835
- 'skip_validation' => true,
836
- 'timeseries_frequency' => 'hourly',
837
- 'include_timeseries_total_consumptions' => true,
838
- 'include_timeseries_zone_temperatures' => true }
839
- _annual_csv, timeseries_csv = _test_measure(args_hash)
840
- assert(File.exist?(timeseries_csv))
841
- values = _get_values(timeseries_csv, [energy_use_total_col, temperature_living_space_col])
842
- schedule_regular_total = values[energy_use_total_col].sum(0.0)
843
- schedule_regular_temp = values[temperature_living_space_col].sum(0.0) / values[temperature_living_space_col].size
844
-
845
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-schedules-simple-power-outage-natvent-available.xml'),
846
- 'skip_validation' => true,
847
- 'timeseries_frequency' => 'hourly',
848
- 'include_timeseries_total_consumptions' => true,
849
- 'include_timeseries_zone_temperatures' => true }
850
- _annual_csv, timeseries_csv = _test_measure(args_hash)
851
- assert(File.exist?(timeseries_csv))
852
- values = _get_values(timeseries_csv, [energy_use_total_col, temperature_living_space_col])
853
- schedule_available_total = values[energy_use_total_col].sum(0.0)
854
- schedule_available_temp = values[temperature_living_space_col].sum(0.0) / values[temperature_living_space_col].size
855
-
856
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-schedules-simple-power-outage-natvent-unavailable.xml'),
857
- 'skip_validation' => true,
858
- 'timeseries_frequency' => 'hourly',
859
- 'include_timeseries_total_consumptions' => true,
860
- 'include_timeseries_zone_temperatures' => true }
861
- _annual_csv, timeseries_csv = _test_measure(args_hash)
862
- assert(File.exist?(timeseries_csv))
863
- values = _get_values(timeseries_csv, [energy_use_total_col, temperature_living_space_col])
864
- schedule_unavailable_total = values[energy_use_total_col].sum(0.0)
865
- schedule_unavailable_temp = values[temperature_living_space_col].sum(0.0) / values[temperature_living_space_col].size
866
-
867
- assert_operator(schedule_regular_total, :>, schedule_available_total)
868
- assert_operator(schedule_available_total, :<, schedule_unavailable_total)
869
- assert_operator(schedule_unavailable_total, :<, schedule_regular_total)
870
-
871
- assert_operator(schedule_regular_temp, :>, schedule_available_temp)
872
- assert_operator(schedule_available_temp, :<, schedule_unavailable_temp)
873
- assert_operator(schedule_unavailable_temp, :>, schedule_regular_temp)
874
- end
875
-
876
796
  def test_timeseries_hourly_system_uses
877
797
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
878
798
  'skip_validation' => true,
@@ -891,7 +811,7 @@ class ReportSimulationOutputTest < MiniTest::Test
891
811
  _check_for_nonzero_avg_timeseries_value(timeseries_csv, ["System Use: HeatingSystem1: #{FT::Gas}: #{EUT::Heating}"])
892
812
  end
893
813
 
894
- def test_timeseries_hourly_hotwateruses
814
+ def test_timeseries_hourly_hotwater_uses
895
815
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
896
816
  'skip_validation' => true,
897
817
  'timeseries_frequency' => 'hourly',
@@ -968,24 +888,6 @@ class ReportSimulationOutputTest < MiniTest::Test
968
888
  end
969
889
 
970
890
  def test_timeseries_hourly_zone_temperatures
971
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
972
- 'skip_validation' => true,
973
- 'timeseries_frequency' => 'hourly',
974
- 'include_timeseries_zone_temperatures' => true }
975
- annual_csv, timeseries_csv = _test_measure(args_hash)
976
- assert(File.exist?(annual_csv))
977
- assert(File.exist?(timeseries_csv))
978
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsZoneTemps
979
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
980
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
981
- timeseries_rows = CSV.read(timeseries_csv)
982
- assert_equal(8760, timeseries_rows.size - 2)
983
- timeseries_cols = timeseries_rows.transpose
984
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
985
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsZoneTemps)
986
- end
987
-
988
- def test_timeseries_hourly_zone_temperatures_without_cooling
989
891
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-hvac-furnace-gas-only.xml'),
990
892
  'skip_validation' => true,
991
893
  'timeseries_frequency' => 'hourly',
@@ -1003,67 +905,71 @@ class ReportSimulationOutputTest < MiniTest::Test
1003
905
  _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsZoneTemps - ['Temperature: Cooling Setpoint'])
1004
906
  end
1005
907
 
1006
- def test_timeseries_hourly_zone_temperatures_mf_space
1007
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml'),
908
+ def test_timeseries_hourly_zone_temperatures_mf_spaces
909
+ args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-bldgtype-mf-unit-adjacent-to-multiple.xml'),
1008
910
  'skip_validation' => true,
1009
911
  'timeseries_frequency' => 'hourly',
1010
912
  'include_timeseries_zone_temperatures' => true }
1011
913
  annual_csv, timeseries_csv = _test_measure(args_hash)
1012
914
  assert(File.exist?(annual_csv))
1013
915
  assert(File.exist?(timeseries_csv))
916
+ cols_temps = BaseHPXMLTimeseriesColsZoneTemps - ['Temperature: Attic - Unvented']
917
+ cols_temps_other_side = ['Temperature: Other Multifamily Buffer Space',
918
+ 'Temperature: Other Non-freezing Space',
919
+ 'Temperature: Other Housing Unit',
920
+ 'Temperature: Other Heated Space']
921
+ expected_timeseries_cols = ['Time'] + cols_temps + cols_temps_other_side
1014
922
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1015
- cols_temps_other_side = [
1016
- 'Temperature: Other Multifamily Buffer Space',
1017
- 'Temperature: Other Non-freezing Space',
1018
- 'Temperature: Other Housing Unit',
1019
- 'Temperature: Other Heated Space'
1020
- ]
1021
- cols_temps_other_side.each do |expected_col|
1022
- assert(actual_timeseries_cols.include? expected_col)
1023
- end
923
+ assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1024
924
  timeseries_rows = CSV.read(timeseries_csv)
1025
925
  assert_equal(8760, timeseries_rows.size - 2)
1026
926
  timeseries_cols = timeseries_rows.transpose
1027
927
  assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1028
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, cols_temps_other_side)
928
+ _check_for_nonzero_avg_timeseries_value(timeseries_csv, cols_temps + cols_temps_other_side)
1029
929
  end
1030
930
 
1031
- def test_timeseries_hourly_airflows_with_exhaust_mechvent
1032
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-mechvent-exhaust.xml'),
931
+ def test_timeseries_hourly_zone_temperatures_whole_mf_building
932
+ args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-multiple-mf-units.xml'),
933
+ 'building_id' => 'ALL',
1033
934
  'skip_validation' => true,
1034
935
  'timeseries_frequency' => 'hourly',
1035
- 'include_timeseries_airflows' => true }
936
+ 'include_timeseries_zone_temperatures' => true }
1036
937
  annual_csv, timeseries_csv = _test_measure(args_hash)
1037
938
  assert(File.exist?(annual_csv))
1038
939
  assert(File.exist?(timeseries_csv))
1039
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsAirflows
1040
940
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
941
+ expected_timeseries_cols = ['Time']
942
+ for i in 1..6
943
+ expected_timeseries_cols << "Temperature: Unit#{i} Conditioned Space"
944
+ if i <= 2
945
+ expected_timeseries_cols << "Temperature: Unit#{i} Basement Unconditioned"
946
+ elsif i >= 5
947
+ expected_timeseries_cols << "Temperature: Unit#{i} Attic Vented"
948
+ end
949
+ expected_timeseries_cols << "Temperature: Unit#{i} Heating Setpoint"
950
+ expected_timeseries_cols << "Temperature: Unit#{i} Cooling Setpoint"
951
+ end
1041
952
  assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1042
953
  timeseries_rows = CSV.read(timeseries_csv)
1043
954
  assert_equal(8760, timeseries_rows.size - 2)
1044
- timeseries_cols = timeseries_rows.transpose
1045
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1046
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsAirflows.select { |t| t != 'Airflow: Whole House Fan' })
1047
955
  end
1048
956
 
1049
- def test_timeseries_hourly_airflows_with_whf
1050
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-mechvent-whole-house-fan.xml'),
957
+ def test_timeseries_hourly_airflows_with_mechvent
958
+ args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-mechvent-multiple.xml'),
1051
959
  'skip_validation' => true,
1052
960
  'timeseries_frequency' => 'hourly',
1053
961
  'include_timeseries_airflows' => true }
1054
962
  annual_csv, timeseries_csv = _test_measure(args_hash)
1055
963
  assert(File.exist?(annual_csv))
1056
964
  assert(File.exist?(timeseries_csv))
1057
- add_cols = ['Airflow: Whole House Fan']
1058
- remove_cols = ['Airflow: Natural Ventilation']
1059
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsAirflows + add_cols - remove_cols
965
+ expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsAirflows - ['Airflow: Natural Ventilation'] + ['Airflow: Whole House Fan']
1060
966
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1061
967
  assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1062
968
  timeseries_rows = CSV.read(timeseries_csv)
1063
969
  assert_equal(8760, timeseries_rows.size - 2)
1064
970
  timeseries_cols = timeseries_rows.transpose
1065
971
  assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1066
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, add_cols)
972
+ _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsAirflows - ['Airflow: Natural Ventilation'] + ['Airflow: Whole House Fan'])
1067
973
  end
1068
974
 
1069
975
  def test_timeseries_hourly_airflows_with_clothes_dryer_exhaust
@@ -1084,42 +990,6 @@ class ReportSimulationOutputTest < MiniTest::Test
1084
990
  _check_for_nonzero_avg_timeseries_value(timeseries_csv, ["Airflow: #{AFT::MechanicalVentilation}"])
1085
991
  end
1086
992
 
1087
- def test_timeseries_hourly_airflows_with_balanced_mechvent
1088
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-mechvent-balanced.xml'),
1089
- 'skip_validation' => true,
1090
- 'timeseries_frequency' => 'hourly',
1091
- 'include_timeseries_airflows' => true }
1092
- annual_csv, timeseries_csv = _test_measure(args_hash)
1093
- assert(File.exist?(annual_csv))
1094
- assert(File.exist?(timeseries_csv))
1095
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsAirflows
1096
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1097
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1098
- timeseries_rows = CSV.read(timeseries_csv)
1099
- assert_equal(8760, timeseries_rows.size - 2)
1100
- timeseries_cols = timeseries_rows.transpose
1101
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1102
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, ["Airflow: #{AFT::MechanicalVentilation}"])
1103
- end
1104
-
1105
- def test_timeseries_hourly_airflows_with_cfis
1106
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-mechvent-cfis.xml'),
1107
- 'skip_validation' => true,
1108
- 'timeseries_frequency' => 'hourly',
1109
- 'include_timeseries_airflows' => true }
1110
- annual_csv, timeseries_csv = _test_measure(args_hash)
1111
- assert(File.exist?(annual_csv))
1112
- assert(File.exist?(timeseries_csv))
1113
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsAirflows
1114
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1115
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1116
- timeseries_rows = CSV.read(timeseries_csv)
1117
- assert_equal(8760, timeseries_rows.size - 2)
1118
- timeseries_cols = timeseries_rows.transpose
1119
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1120
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, ["Airflow: #{AFT::MechanicalVentilation}"])
1121
- end
1122
-
1123
993
  def test_timeseries_hourly_weather
1124
994
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1125
995
  'skip_validation' => true,
@@ -1155,7 +1025,8 @@ class ReportSimulationOutputTest < MiniTest::Test
1155
1025
  'include_timeseries_component_loads' => true,
1156
1026
  'include_timeseries_zone_temperatures' => true,
1157
1027
  'include_timeseries_airflows' => true,
1158
- 'include_timeseries_weather' => true }
1028
+ 'include_timeseries_weather' => true,
1029
+ 'include_timeseries_resilience' => true }
1159
1030
  annual_csv, timeseries_csv = _test_measure(args_hash)
1160
1031
  assert(File.exist?(annual_csv))
1161
1032
  assert(File.exist?(timeseries_csv))
@@ -1164,7 +1035,8 @@ class ReportSimulationOutputTest < MiniTest::Test
1164
1035
  emissions_timeseries_cols +
1165
1036
  emission_fuels_timeseries_cols +
1166
1037
  emission_end_uses_timeseries_cols +
1167
- pv_battery_timeseries_cols
1038
+ pv_battery_timeseries_cols +
1039
+ BaseHPXMLTimeseriesColsResilience
1168
1040
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1169
1041
  assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1170
1042
  timeseries_rows = CSV.read(timeseries_csv)
@@ -1192,7 +1064,8 @@ class ReportSimulationOutputTest < MiniTest::Test
1192
1064
  'include_timeseries_component_loads' => true,
1193
1065
  'include_timeseries_zone_temperatures' => true,
1194
1066
  'include_timeseries_airflows' => true,
1195
- 'include_timeseries_weather' => true }
1067
+ 'include_timeseries_weather' => true,
1068
+ 'include_timeseries_resilience' => true }
1196
1069
  annual_csv, timeseries_csv = _test_measure(args_hash)
1197
1070
  assert(File.exist?(annual_csv))
1198
1071
  assert(File.exist?(timeseries_csv))
@@ -1201,7 +1074,8 @@ class ReportSimulationOutputTest < MiniTest::Test
1201
1074
  emissions_timeseries_cols +
1202
1075
  emission_fuels_timeseries_cols +
1203
1076
  emission_end_uses_timeseries_cols +
1204
- pv_battery_timeseries_cols
1077
+ pv_battery_timeseries_cols +
1078
+ BaseHPXMLTimeseriesColsResilience
1205
1079
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1206
1080
  assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1207
1081
  timeseries_rows = CSV.read(timeseries_csv)
@@ -1229,7 +1103,8 @@ class ReportSimulationOutputTest < MiniTest::Test
1229
1103
  'include_timeseries_component_loads' => true,
1230
1104
  'include_timeseries_zone_temperatures' => true,
1231
1105
  'include_timeseries_airflows' => true,
1232
- 'include_timeseries_weather' => true }
1106
+ 'include_timeseries_weather' => true,
1107
+ 'include_timeseries_resilience' => true }
1233
1108
  annual_csv, timeseries_csv = _test_measure(args_hash)
1234
1109
  assert(File.exist?(annual_csv))
1235
1110
  assert(File.exist?(timeseries_csv))
@@ -1238,7 +1113,8 @@ class ReportSimulationOutputTest < MiniTest::Test
1238
1113
  emissions_timeseries_cols +
1239
1114
  emission_fuels_timeseries_cols +
1240
1115
  emission_end_uses_timeseries_cols +
1241
- pv_battery_timeseries_cols
1116
+ pv_battery_timeseries_cols +
1117
+ BaseHPXMLTimeseriesColsResilience
1242
1118
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1243
1119
  assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1244
1120
  timeseries_rows = CSV.read(timeseries_csv)
@@ -1247,10 +1123,28 @@ class ReportSimulationOutputTest < MiniTest::Test
1247
1123
  _check_for_nonzero_timeseries_values(timeseries_csv, ["End Use: #{FT::Elec}: #{EUT::Refrigerator}"])
1248
1124
  end
1249
1125
 
1126
+ def test_timeseries_monthly_resilience
1127
+ args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-pv-battery-scheduled.xml'),
1128
+ 'skip_validation' => true,
1129
+ 'timeseries_frequency' => 'monthly',
1130
+ 'include_timeseries_resilience' => true }
1131
+ annual_csv, timeseries_csv = _test_measure(args_hash)
1132
+ assert(File.exist?(annual_csv))
1133
+ assert(File.exist?(timeseries_csv))
1134
+ expected_timeseries_cols = ['Time'] +
1135
+ BaseHPXMLTimeseriesColsResilience
1136
+ actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1137
+ assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1138
+ timeseries_rows = CSV.read(timeseries_csv)
1139
+ assert_equal(12, timeseries_rows.size - 2)
1140
+ end
1141
+
1250
1142
  def test_timeseries_timestep
1251
1143
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1252
1144
  'timeseries_frequency' => 'timestep',
1253
- 'include_timeseries_fuel_consumptions' => true }
1145
+ 'include_timeseries_fuel_consumptions' => true,
1146
+ 'add_timeseries_dst_column' => true,
1147
+ 'add_timeseries_utc_column' => true }
1254
1148
  annual_csv, timeseries_csv = _test_measure(args_hash)
1255
1149
  assert(File.exist?(annual_csv))
1256
1150
  assert(File.exist?(timeseries_csv))
@@ -1258,7 +1152,12 @@ class ReportSimulationOutputTest < MiniTest::Test
1258
1152
  assert_equal(8760, timeseries_rows.size - 2)
1259
1153
  timeseries_cols = timeseries_rows.transpose
1260
1154
  assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1261
- end
1155
+ assert_equal(1, timeseries_rows[0].select { |r| r == 'Time' }.size)
1156
+ assert_equal(1, timeseries_rows[0].select { |r| r == 'TimeDST' }.size)
1157
+ assert_equal(1, timeseries_rows[0].select { |r| r == 'TimeUTC' }.size)
1158
+ assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1159
+ assert_equal(3, _check_for_constant_timeseries_step(timeseries_cols[1]))
1160
+ assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[2])) end
1262
1161
 
1263
1162
  def test_timeseries_timestep_emissions
1264
1163
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base-misc-emissions.xml'),
@@ -1298,9 +1197,7 @@ class ReportSimulationOutputTest < MiniTest::Test
1298
1197
  end
1299
1198
 
1300
1199
  def test_timeseries_hourly_runperiod_1month
1301
- expected_values = { 'timestep' => 28 * 24,
1302
- 'hourly' => 28 * 24,
1303
- 'daily' => 28,
1200
+ expected_values = { 'hourly' => 28 * 24,
1304
1201
  'monthly' => 1 }
1305
1202
 
1306
1203
  expected_values.each do |timeseries_frequency, expected_value|
@@ -1337,8 +1234,6 @@ class ReportSimulationOutputTest < MiniTest::Test
1337
1234
  def test_timeseries_timestamp_convention
1338
1235
  # Expected values are arrays of time offsets (in seconds) for each reported row of output
1339
1236
  expected_values_array = { 'timestep' => [30 * 60] * 17520,
1340
- 'hourly' => [60 * 60] * 8760,
1341
- 'daily' => [60 * 60 * 24] * 365,
1342
1237
  'monthly' => Constants.NumDaysInMonths(1999).map { |n_days| n_days * 60 * 60 * 24 } }
1343
1238
 
1344
1239
  expected_values_array.each do |timeseries_frequency, expected_values|
@@ -1390,107 +1285,32 @@ class ReportSimulationOutputTest < MiniTest::Test
1390
1285
  assert_equal(Float(timeseries_csv[5000 + 1][col_ix].strip), Float(timeseries_csv2[5000][col_ix].strip)) # in dst period, values are shifted forward
1391
1286
  end
1392
1287
 
1393
- def test_timeseries_local_time_dst
1394
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1395
- 'skip_validation' => true,
1396
- 'timeseries_frequency' => 'timestep',
1397
- 'include_timeseries_fuel_consumptions' => true,
1398
- 'add_timeseries_dst_column' => true }
1399
- annual_csv, timeseries_csv = _test_measure(args_hash)
1400
- assert(File.exist?(annual_csv))
1401
- assert(File.exist?(timeseries_csv))
1402
- timeseries_rows = CSV.read(timeseries_csv)
1403
- assert_equal(8760, timeseries_rows.size - 2)
1404
- timeseries_cols = timeseries_rows.transpose
1405
- assert_equal(1, timeseries_rows[0].select { |r| r == 'Time' }.size)
1406
- assert_equal(1, timeseries_rows[0].select { |r| r == 'TimeDST' }.size)
1407
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1408
- assert_equal(3, _check_for_constant_timeseries_step(timeseries_cols[1]))
1409
- end
1410
-
1411
- def test_timeseries_local_time_utc
1412
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1413
- 'skip_validation' => true,
1414
- 'timeseries_frequency' => 'timestep',
1415
- 'include_timeseries_fuel_consumptions' => true,
1416
- 'add_timeseries_utc_column' => true }
1417
- annual_csv, timeseries_csv = _test_measure(args_hash)
1418
- assert(File.exist?(annual_csv))
1419
- assert(File.exist?(timeseries_csv))
1420
- timeseries_rows = CSV.read(timeseries_csv)
1421
- assert_equal(8760, timeseries_rows.size - 2)
1422
- timeseries_cols = timeseries_rows.transpose
1423
- assert_equal(1, timeseries_rows[0].select { |r| r == 'Time' }.size)
1424
- assert_equal(1, timeseries_rows[0].select { |r| r == 'TimeUTC' }.size)
1425
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1426
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[1]))
1427
- end
1428
-
1429
- def test_timeseries_local_time_dst_and_utc
1430
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1431
- 'skip_validation' => true,
1432
- 'timeseries_frequency' => 'timestep',
1433
- 'include_timeseries_fuel_consumptions' => true,
1434
- 'add_timeseries_dst_column' => true,
1435
- 'add_timeseries_utc_column' => true }
1436
- annual_csv, timeseries_csv = _test_measure(args_hash)
1437
- assert(File.exist?(annual_csv))
1438
- assert(File.exist?(timeseries_csv))
1439
- timeseries_rows = CSV.read(timeseries_csv)
1440
- assert_equal(8760, timeseries_rows.size - 2)
1441
- timeseries_cols = timeseries_rows.transpose
1442
- assert_equal(1, timeseries_rows[0].select { |r| r == 'Time' }.size)
1443
- assert_equal(1, timeseries_rows[0].select { |r| r == 'TimeDST' }.size)
1444
- assert_equal(1, timeseries_rows[0].select { |r| r == 'TimeUTC' }.size)
1445
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1446
- assert_equal(3, _check_for_constant_timeseries_step(timeseries_cols[1]))
1447
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[2]))
1448
- end
1449
-
1450
- def test_timeseries_user_defined_standard_output_variables
1288
+ def test_timeseries_energyplus_output_variables
1451
1289
  args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1452
1290
  'skip_validation' => true,
1291
+ 'add_component_loads' => true,
1453
1292
  'timeseries_frequency' => 'hourly',
1454
- 'user_output_variables' => 'Zone People Occupant Count, Zone People Total Heating Energy, Foo' }
1293
+ 'user_output_variables' => 'Zone People Occupant Count, Zone People Total Heating Energy, Foo, Surface Construction Index' }
1455
1294
  annual_csv, timeseries_csv, run_log = _test_measure(args_hash)
1456
1295
  assert(File.exist?(annual_csv))
1457
1296
  assert(File.exist?(timeseries_csv))
1458
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsStandardOutputVariables
1297
+ expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsEnergyPlusOutputVariables
1459
1298
  actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1460
1299
  assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1461
1300
  timeseries_rows = CSV.read(timeseries_csv)
1462
1301
  assert_equal(8760, timeseries_rows.size - 2)
1463
1302
  timeseries_cols = timeseries_rows.transpose
1464
1303
  assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1465
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsStandardOutputVariables)
1304
+ _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsEnergyPlusOutputVariables)
1466
1305
  assert(File.readlines(run_log).any? { |line| line.include?("Request for output variable 'Foo'") })
1467
1306
  end
1468
1307
 
1469
- def test_timeseries_user_defined_advanced_output_variables
1470
- args_hash = { 'hpxml_path' => File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml'),
1471
- 'skip_validation' => true,
1472
- 'add_component_loads' => true,
1473
- 'timeseries_frequency' => 'hourly',
1474
- 'user_output_variables' => 'Surface Construction Index' }
1475
- annual_csv, timeseries_csv = _test_measure(args_hash)
1476
- assert(File.exist?(annual_csv))
1477
- assert(File.exist?(timeseries_csv))
1478
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsAdvancedOutputVariables
1479
- actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
1480
- assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
1481
- timeseries_rows = CSV.read(timeseries_csv)
1482
- assert_equal(8760, timeseries_rows.size - 2)
1483
- timeseries_cols = timeseries_rows.transpose
1484
- assert_equal(1, _check_for_constant_timeseries_step(timeseries_cols[0]))
1485
- _check_for_nonzero_avg_timeseries_value(timeseries_csv, BaseHPXMLTimeseriesColsAdvancedOutputVariables)
1486
- end
1487
-
1488
1308
  def test_for_unsuccessful_simulation_infinity
1489
1309
  # Create HPXML w/ AFUE=0 to generate Infinity result
1490
1310
  hpxml_path = File.join(File.dirname(__FILE__), '../../workflow/sample_files/base.xml')
1491
1311
  hpxml = HPXML.new(hpxml_path: hpxml_path)
1492
- hpxml.heating_systems[0].heating_efficiency_afue = 10.0**-315
1493
- XMLHelper.write_file(hpxml.to_oga(), @tmp_hpxml_path)
1312
+ hpxml.buildings[0].heating_systems[0].heating_efficiency_afue = 10.0**-315
1313
+ XMLHelper.write_file(hpxml.to_doc(), @tmp_hpxml_path)
1494
1314
 
1495
1315
  args_hash = { 'hpxml_path' => @tmp_hpxml_path,
1496
1316
  'skip_validation' => true, }
@@ -1527,6 +1347,9 @@ class ReportSimulationOutputTest < MiniTest::Test
1527
1347
  workflow.setWorkflowSteps(steps)
1528
1348
  osw_path = File.join(File.dirname(template_osw), 'test.osw')
1529
1349
  workflow.saveAs(osw_path)
1350
+ if args_hash.size != found_args.size
1351
+ puts "ERROR: Did not find an argument (#{(args_hash.keys - found_args)[0]}) in #{File.basename(template_osw)}."
1352
+ end
1530
1353
  assert_equal(args_hash.size, found_args.size)
1531
1354
 
1532
1355
  # Run OSW
@@ -1618,10 +1441,10 @@ class ReportSimulationOutputTest < MiniTest::Test
1618
1441
  return actual_annual_rows
1619
1442
  end
1620
1443
 
1621
- def _check_for_runner_registered_values(results_json, actual_annual_rows)
1622
- require 'json'
1623
- runner_annual_rows = JSON.parse(File.read(results_json))
1624
- runner_annual_rows = runner_annual_rows['ReportSimulationOutput']
1444
+ def _check_runner_registered_values_and_measure_xml_outputs(actual_annual_rows)
1445
+ # Check for runner registered values
1446
+ results_json_path = File.join(File.dirname(__FILE__), '..', '..', 'workflow', 'run', 'results.json')
1447
+ runner_annual_rows = JSON.parse(File.read(results_json_path))['ReportSimulationOutput']
1625
1448
 
1626
1449
  actual_annual_rows.each do |name, value|
1627
1450
  name = OpenStudio::toUnderscoreCase(name).chomp('_')
@@ -1629,5 +1452,13 @@ class ReportSimulationOutputTest < MiniTest::Test
1629
1452
  assert_includes(runner_annual_rows.keys, name)
1630
1453
  assert_equal(value, runner_annual_rows[name])
1631
1454
  end
1455
+
1456
+ # Check that all the "outputs" in the measure.xml, which are used by PAT,
1457
+ # are found in the results.json file.
1458
+ refute(@measure_xml_outputs.empty?)
1459
+
1460
+ @measure_xml_outputs.each do |measure_xml_output|
1461
+ assert_includes(runner_annual_rows.keys, measure_xml_output)
1462
+ end
1632
1463
  end
1633
1464
  end