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 '../resources/minitest_helper'
@@ -8,28 +13,29 @@ require_relative '../measure.rb'
8
13
  require_relative '../resources/util.rb'
9
14
  require_relative 'util.rb'
10
15
 
11
- class HPXMLtoOpenStudioHVACTest < MiniTest::Test
12
- def sample_files_dir
13
- return File.join(File.dirname(__FILE__), '..', '..', 'workflow', 'sample_files')
16
+ class HPXMLtoOpenStudioHVACTest < Minitest::Test
17
+ def setup
18
+ @root_path = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..'))
19
+ @sample_files_path = File.join(@root_path, 'workflow', 'sample_files')
20
+ @tmp_hpxml_path = File.join(@sample_files_path, 'tmp.xml')
21
+ end
22
+
23
+ def teardown
24
+ File.delete(@tmp_hpxml_path) if File.exist? @tmp_hpxml_path
14
25
  end
15
26
 
16
27
  def test_central_air_conditioner_1_speed
17
28
  ['base-hvac-central-ac-only-1-speed.xml',
18
29
  'base-hvac-central-ac-only-1-speed-seer2.xml'].each do |hpxml_path|
19
30
  args_hash = {}
20
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, hpxml_path))
21
- model, hpxml = _test_measure(args_hash)
22
-
23
- # Get HPXML values
24
- cooling_system = hpxml.cooling_systems[0]
25
- capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
31
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, hpxml_path))
32
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
26
33
 
27
34
  # Check cooling coil
28
35
  assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
29
36
  clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
30
- cop = 3.73 # Expected value
31
- assert_in_epsilon(cop, clg_coil.ratedCOP, 0.01)
32
- assert_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01)
37
+ assert_in_epsilon(3.77, clg_coil.ratedCOP, 0.01)
38
+ assert_in_epsilon(7230, clg_coil.ratedTotalCoolingCapacity.get, 0.01)
33
39
 
34
40
  # Check EMS
35
41
  assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
@@ -41,21 +47,19 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
41
47
 
42
48
  def test_central_air_conditioner_2_speed
43
49
  args_hash = {}
44
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-central-ac-only-2-speed.xml'))
45
- model, hpxml = _test_measure(args_hash)
46
-
47
- # Get HPXML values
48
- cooling_system = hpxml.cooling_systems[0]
49
- capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
50
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-central-ac-only-2-speed.xml'))
51
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
50
52
 
51
53
  # Check cooling coil
52
54
  assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
53
55
  clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
54
- cops = [4.95, 4.59] # Expected values
55
- cops.each_with_index do |cop, i|
56
+ assert_equal(2, clg_coil.stages.size)
57
+ [4.95, 4.53].each_with_index do |cop, i|
56
58
  assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
57
59
  end
58
- assert_in_epsilon(capacity, clg_coil.stages[-1].grossRatedTotalCoolingCapacity.get, 0.01)
60
+ [5143, 7158].each_with_index do |capacity, i|
61
+ assert_in_epsilon(capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
62
+ end
59
63
 
60
64
  # Check EMS
61
65
  assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
@@ -66,21 +70,19 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
66
70
 
67
71
  def test_central_air_conditioner_var_speed
68
72
  args_hash = {}
69
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-central-ac-only-var-speed.xml'))
70
- model, hpxml = _test_measure(args_hash)
71
-
72
- # Get HPXML values
73
- cooling_system = hpxml.cooling_systems[0]
74
- capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
73
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-central-ac-only-var-speed.xml'))
74
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
75
75
 
76
76
  # Check cooling coil
77
77
  assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
78
78
  clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
79
- cops = [6.57, 6.81, 6.63, 6.14] # Expected values
80
- cops.each_with_index do |cop, i|
79
+ assert_equal(2, clg_coil.stages.size)
80
+ [5.89, 5.25].each_with_index do |cop, i|
81
81
  assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
82
82
  end
83
- assert_in_epsilon(capacity, clg_coil.stages[-1].grossRatedTotalCoolingCapacity.get, 0.01)
83
+ [2780, 7169].each_with_index do |capacity, i|
84
+ assert_in_epsilon(capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
85
+ end
84
86
 
85
87
  # Check EMS
86
88
  assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
@@ -91,11 +93,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
91
93
 
92
94
  def test_room_air_conditioner
93
95
  args_hash = {}
94
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-room-ac-only.xml'))
95
- model, hpxml = _test_measure(args_hash)
96
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-room-ac-only.xml'))
97
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
96
98
 
97
99
  # Get HPXML values
98
- cooling_system = hpxml.cooling_systems[0]
100
+ cooling_system = hpxml_bldg.cooling_systems[0]
99
101
  eer = cooling_system.cooling_efficiency_eer
100
102
  ceer = eer / 1.01 # convert to ceer
101
103
  cop = UnitConversions.convert(ceer, 'Btu/hr', 'W') # Expected value
@@ -110,11 +112,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
110
112
 
111
113
  def test_room_air_conditioner_ceer
112
114
  args_hash = {}
113
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-room-ac-only-ceer.xml'))
114
- model, hpxml = _test_measure(args_hash)
115
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-room-ac-only-ceer.xml'))
116
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
115
117
 
116
118
  # Get HPXML values
117
- cooling_system = hpxml.cooling_systems[0]
119
+ cooling_system = hpxml_bldg.cooling_systems[0]
118
120
  ceer = cooling_system.cooling_efficiency_ceer
119
121
  cop = UnitConversions.convert(ceer, 'Btu/hr', 'W') # Expected value
120
122
  capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
@@ -128,11 +130,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
128
130
 
129
131
  def test_room_ac_with_heating
130
132
  args_hash = {}
131
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-room-ac-with-heating.xml'))
132
- model, hpxml = _test_measure(args_hash)
133
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-room-ac-with-heating.xml'))
134
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
133
135
 
134
136
  # Get HPXML values
135
- cooling_system = hpxml.cooling_systems[0]
137
+ cooling_system = hpxml_bldg.cooling_systems[0]
136
138
  eer = cooling_system.cooling_efficiency_eer
137
139
  ceer = eer / 1.01 # convert to ceer
138
140
  cop = UnitConversions.convert(ceer, 'Btu/hr', 'W') # Expected value
@@ -158,11 +160,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
158
160
 
159
161
  def test_ptac
160
162
  args_hash = {}
161
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-ptac.xml'))
162
- model, hpxml = _test_measure(args_hash)
163
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-ptac.xml'))
164
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
163
165
 
164
166
  # Get HPXML values
165
- cooling_system = hpxml.cooling_systems[0]
167
+ cooling_system = hpxml_bldg.cooling_systems[0]
166
168
  eer = cooling_system.cooling_efficiency_eer
167
169
  ceer = eer / 1.01 # convert to ceer
168
170
  cop = UnitConversions.convert(ceer, 'Btu/hr', 'W') # Expected value
@@ -178,11 +180,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
178
180
 
179
181
  def test_ptac_with_heating_electricity
180
182
  args_hash = {}
181
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-ptac-with-heating-electricity.xml'))
182
- model, hpxml = _test_measure(args_hash)
183
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-ptac-with-heating-electricity.xml'))
184
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
183
185
 
184
186
  # Get HPXML values
185
- cooling_system = hpxml.cooling_systems[0]
187
+ cooling_system = hpxml_bldg.cooling_systems[0]
186
188
  eer = cooling_system.cooling_efficiency_eer
187
189
  ceer = eer / 1.01 # convert to ceer
188
190
  cop = UnitConversions.convert(ceer, 'Btu/hr', 'W') # Expected value
@@ -208,11 +210,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
208
210
 
209
211
  def test_ptac_with_heating_gas
210
212
  args_hash = {}
211
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-ptac-with-heating-electricity.xml'))
212
- model, hpxml = _test_measure(args_hash)
213
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-ptac-with-heating-electricity.xml'))
214
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
213
215
 
214
216
  # Get HPXML values
215
- cooling_system = hpxml.cooling_systems[0]
217
+ cooling_system = hpxml_bldg.cooling_systems[0]
216
218
  eer = cooling_system.cooling_efficiency_eer
217
219
  ceer = eer / 1.01 # convert to ceer
218
220
  cop = UnitConversions.convert(ceer, 'Btu/hr', 'W') # Expected value
@@ -238,11 +240,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
238
240
 
239
241
  def test_pthp
240
242
  args_hash = {}
241
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-pthp.xml'))
242
- model, hpxml = _test_measure(args_hash)
243
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-pthp.xml'))
244
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
243
245
 
244
246
  # Get HPXML values
245
- heat_pump = hpxml.heat_pumps[0]
247
+ heat_pump = hpxml_bldg.heat_pumps[0]
246
248
  backup_efficiency = heat_pump.backup_heating_efficiency_percent
247
249
  clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
248
250
  htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
@@ -273,11 +275,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
273
275
 
274
276
  def test_room_heat_pump
275
277
  args_hash = {}
276
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-room-ac-with-reverse-cycle.xml'))
277
- model, hpxml = _test_measure(args_hash)
278
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-room-ac-with-reverse-cycle.xml'))
279
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
278
280
 
279
281
  # Get HPXML values
280
- heat_pump = hpxml.heat_pumps[0]
282
+ heat_pump = hpxml_bldg.heat_pumps[0]
281
283
  clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
282
284
  htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
283
285
  supp_htg_capacity = UnitConversions.convert(heat_pump.backup_heating_capacity, 'Btu/hr', 'W')
@@ -310,11 +312,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
310
312
 
311
313
  def test_furnace_gas
312
314
  args_hash = {}
313
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-furnace-gas-only.xml'))
314
- model, hpxml = _test_measure(args_hash)
315
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-furnace-gas-only.xml'))
316
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
315
317
 
316
318
  # Get HPXML values
317
- heating_system = hpxml.heating_systems[0]
319
+ heating_system = hpxml_bldg.heating_systems[0]
318
320
  afue = heating_system.heating_efficiency_afue
319
321
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
320
322
  fuel = heating_system.heating_system_fuel
@@ -329,11 +331,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
329
331
 
330
332
  def test_furnace_electric
331
333
  args_hash = {}
332
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-furnace-elec-only.xml'))
333
- model, hpxml = _test_measure(args_hash)
334
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-furnace-elec-only.xml'))
335
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
334
336
 
335
337
  # Get HPXML values
336
- heating_system = hpxml.heating_systems[0]
338
+ heating_system = hpxml_bldg.heating_systems[0]
337
339
  afue = heating_system.heating_efficiency_afue
338
340
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
339
341
 
@@ -346,11 +348,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
346
348
 
347
349
  def test_boiler_gas
348
350
  args_hash = {}
349
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-boiler-gas-only.xml'))
350
- model, hpxml = _test_measure(args_hash)
351
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-boiler-gas-only.xml'))
352
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
351
353
 
352
354
  # Get HPXML values
353
- heating_system = hpxml.heating_systems[0]
355
+ heating_system = hpxml_bldg.heating_systems[0]
354
356
  afue = heating_system.heating_efficiency_afue
355
357
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
356
358
  fuel = heating_system.heating_system_fuel
@@ -365,11 +367,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
365
367
 
366
368
  def test_boiler_coal
367
369
  args_hash = {}
368
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-boiler-coal-only.xml'))
369
- model, hpxml = _test_measure(args_hash)
370
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-boiler-coal-only.xml'))
371
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
370
372
 
371
373
  # Get HPXML values
372
- heating_system = hpxml.heating_systems[0]
374
+ heating_system = hpxml_bldg.heating_systems[0]
373
375
  afue = heating_system.heating_efficiency_afue
374
376
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
375
377
  fuel = heating_system.heating_system_fuel
@@ -384,11 +386,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
384
386
 
385
387
  def test_boiler_electric
386
388
  args_hash = {}
387
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-boiler-elec-only.xml'))
388
- model, hpxml = _test_measure(args_hash)
389
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-boiler-elec-only.xml'))
390
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
389
391
 
390
392
  # Get HPXML values
391
- heating_system = hpxml.heating_systems[0]
393
+ heating_system = hpxml_bldg.heating_systems[0]
392
394
  afue = heating_system.heating_efficiency_afue
393
395
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
394
396
  fuel = heating_system.heating_system_fuel
@@ -403,11 +405,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
403
405
 
404
406
  def test_electric_resistance
405
407
  args_hash = {}
406
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-elec-resistance-only.xml'))
407
- model, hpxml = _test_measure(args_hash)
408
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-elec-resistance-only.xml'))
409
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
408
410
 
409
411
  # Get HPXML values
410
- heating_system = hpxml.heating_systems[0]
412
+ heating_system = hpxml_bldg.heating_systems[0]
411
413
  efficiency = heating_system.heating_efficiency_percent
412
414
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
413
415
 
@@ -420,11 +422,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
420
422
 
421
423
  def test_stove_oil
422
424
  args_hash = {}
423
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-stove-oil-only.xml'))
424
- model, hpxml = _test_measure(args_hash)
425
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-stove-oil-only.xml'))
426
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
425
427
 
426
428
  # Get HPXML values
427
- heating_system = hpxml.heating_systems[0]
429
+ heating_system = hpxml_bldg.heating_systems[0]
428
430
  efficiency = heating_system.heating_efficiency_percent
429
431
  capacity = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W')
430
432
  fuel = heating_system.heating_system_fuel
@@ -441,29 +443,25 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
441
443
  ['base-hvac-air-to-air-heat-pump-1-speed.xml',
442
444
  'base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml'].each do |hpxml_path|
443
445
  args_hash = {}
444
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, hpxml_path))
445
- model, hpxml = _test_measure(args_hash)
446
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, hpxml_path))
447
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
446
448
 
447
449
  # Get HPXML values
448
- heat_pump = hpxml.heat_pumps[0]
450
+ heat_pump = hpxml_bldg.heat_pumps[0]
449
451
  backup_efficiency = heat_pump.backup_heating_efficiency_percent
450
- clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
451
- htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
452
452
  supp_htg_capacity = UnitConversions.convert(heat_pump.backup_heating_capacity, 'Btu/hr', 'W')
453
453
 
454
454
  # Check cooling coil
455
455
  assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
456
456
  clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
457
- cop = 3.73 # Expected value
458
- assert_in_epsilon(cop, clg_coil.ratedCOP, 0.01)
459
- assert_in_epsilon(clg_capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01)
457
+ assert_in_epsilon(3.77, clg_coil.ratedCOP, 0.01)
458
+ assert_in_epsilon(10846, clg_coil.ratedTotalCoolingCapacity.get, 0.01)
460
459
 
461
460
  # Check heating coil
462
461
  assert_equal(1, model.getCoilHeatingDXSingleSpeeds.size)
463
462
  htg_coil = model.getCoilHeatingDXSingleSpeeds[0]
464
- cop = 3.28 # Expected value
465
- assert_in_epsilon(cop, htg_coil.ratedCOP, 0.01)
466
- assert_in_epsilon(htg_capacity, htg_coil.ratedTotalHeatingCapacity.get, 0.01)
463
+ assert_in_epsilon(3.29, htg_coil.ratedCOP, 0.01)
464
+ assert_in_epsilon(10262, htg_coil.ratedTotalHeatingCapacity.get, 0.01)
467
465
 
468
466
  # Check supp heating coil
469
467
  assert_equal(1, model.getCoilHeatingElectrics.size)
@@ -487,11 +485,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
487
485
  'base-hvac-mini-split-heat-pump-ductless.xml',
488
486
  'base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml'].each do |hpxml_name|
489
487
  args_hash = {}
490
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, hpxml_name))
491
- model, hpxml = _test_measure(args_hash)
488
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, hpxml_name))
489
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
492
490
 
493
491
  # Get HPXML values
494
- heat_pump = hpxml.heat_pumps[0]
492
+ heat_pump = hpxml_bldg.heat_pumps[0]
495
493
  if not heat_pump.backup_heating_switchover_temp.nil?
496
494
  backup_lockout_temp = UnitConversions.convert(heat_pump.backup_heating_switchover_temp, 'F', 'C')
497
495
  compressor_lockout_temp = UnitConversions.convert(heat_pump.backup_heating_switchover_temp, 'F', 'C')
@@ -522,33 +520,35 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
522
520
 
523
521
  def test_air_to_air_heat_pump_2_speed
524
522
  args_hash = {}
525
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-air-to-air-heat-pump-2-speed.xml'))
526
- model, hpxml = _test_measure(args_hash)
523
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-air-to-air-heat-pump-2-speed.xml'))
524
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
527
525
 
528
526
  # Get HPXML values
529
- heat_pump = hpxml.heat_pumps[0]
527
+ heat_pump = hpxml_bldg.heat_pumps[0]
530
528
  backup_efficiency = heat_pump.backup_heating_efficiency_percent
531
- clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
532
- htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
533
529
  supp_htg_capacity = UnitConversions.convert(heat_pump.backup_heating_capacity, 'Btu/hr', 'W')
534
530
 
535
531
  # Check cooling coil
536
532
  assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
537
533
  clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
538
- cops = [4.95, 4.59] # Expected values
539
- cops.each_with_index do |cop, i|
534
+ assert_equal(2, clg_coil.stages.size)
535
+ [4.95, 4.53].each_with_index do |cop, i|
540
536
  assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
541
537
  end
542
- assert_in_epsilon(clg_capacity, clg_coil.stages[-1].grossRatedTotalCoolingCapacity.get, 0.01)
538
+ [7715, 10736].each_with_index do |clg_capacity, i|
539
+ assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
540
+ end
543
541
 
544
542
  # Check heating coil
545
543
  assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
546
544
  htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
547
- cops = [4.52, 4.08] # Expected values
548
- cops.each_with_index do |cop, i|
545
+ assert_equal(2, htg_coil.stages.size)
546
+ [4.52, 3.93].each_with_index do |cop, i|
549
547
  assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
550
548
  end
551
- assert_in_epsilon(htg_capacity, htg_coil.stages[-1].grossRatedHeatingCapacity.get, 0.01)
549
+ [7499, 10360].each_with_index do |htg_capacity, i|
550
+ assert_in_epsilon(htg_capacity, htg_coil.stages[i].grossRatedHeatingCapacity.get, 0.01)
551
+ end
552
552
 
553
553
  # Check supp heating coil
554
554
  assert_equal(1, model.getCoilHeatingElectrics.size)
@@ -565,33 +565,35 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
565
565
 
566
566
  def test_air_to_air_heat_pump_var_speed
567
567
  args_hash = {}
568
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-air-to-air-heat-pump-var-speed.xml'))
569
- model, hpxml = _test_measure(args_hash)
568
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-air-to-air-heat-pump-var-speed.xml'))
569
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
570
570
 
571
571
  # Get HPXML values
572
- heat_pump = hpxml.heat_pumps[0]
572
+ heat_pump = hpxml_bldg.heat_pumps[0]
573
573
  backup_efficiency = heat_pump.backup_heating_efficiency_percent
574
- clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
575
- htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
576
574
  supp_htg_capacity = UnitConversions.convert(heat_pump.backup_heating_capacity, 'Btu/hr', 'W')
577
575
 
578
576
  # Check cooling coil
579
577
  assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
580
578
  clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
581
- cops = [5.93, 6.15, 5.98, 5.54] # Expected values
582
- cops.each_with_index do |cop, i|
579
+ assert_equal(2, clg_coil.stages.size)
580
+ [5.39, 4.77].each_with_index do |cop, i|
583
581
  assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
584
582
  end
585
- assert_in_epsilon(clg_capacity, clg_coil.stages[-1].grossRatedTotalCoolingCapacity.get, 0.01)
583
+ [4169, 10753].each_with_index do |clg_capacity, i|
584
+ assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
585
+ end
586
586
 
587
587
  # Check heating coil
588
588
  assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
589
589
  htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
590
- cops = [5.67, 4.84, 4.09, 3.91] # Expected values
591
- cops.each_with_index do |cop, i|
590
+ assert_equal(2, htg_coil.stages.size)
591
+ [4.56, 3.89].each_with_index do |cop, i|
592
592
  assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
593
593
  end
594
- assert_in_epsilon(htg_capacity, htg_coil.stages[-2].grossRatedHeatingCapacity.get, 0.01)
594
+ [3876, 10634].each_with_index do |htg_capacity, i|
595
+ assert_in_epsilon(htg_capacity, htg_coil.stages[i].grossRatedHeatingCapacity.get, 0.01)
596
+ end
595
597
 
596
598
  # Check supp heating coil
597
599
  assert_equal(1, model.getCoilHeatingElectrics.size)
@@ -606,33 +608,77 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
606
608
  assert(program_values.empty?) # Check no EMS program
607
609
  end
608
610
 
609
- def test_mini_split_heat_pump
611
+ def test_air_to_air_heat_pump_var_speed_detailed_performance
610
612
  args_hash = {}
611
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-mini-split-heat-pump-ductless.xml'))
612
- model, hpxml = _test_measure(args_hash)
613
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-air-to-air-heat-pump-var-speed-detailed-performance.xml'))
614
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
613
615
 
614
616
  # Get HPXML values
615
- heat_pump = hpxml.heat_pumps[0]
616
- clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
617
- htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
617
+ heat_pump = hpxml_bldg.heat_pumps[0]
618
618
 
619
619
  # Check cooling coil
620
620
  assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
621
621
  clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
622
- cops = [5.76, 4.99, 4.19, 3.10] # Expected values
623
- cops.each_with_index do |cop, i|
622
+ assert_equal(2, clg_coil.stages.size)
623
+ [4.51, 2.88].each_with_index do |cop, i|
624
624
  assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
625
625
  end
626
- assert_in_epsilon(clg_capacity * 1.2, clg_coil.stages[-1].grossRatedTotalCoolingCapacity.get, 0.01)
626
+ [3435, 10726].each_with_index do |clg_capacity, i|
627
+ assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
628
+ end
627
629
 
628
630
  # Check heating coil
629
631
  assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
630
632
  htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
631
- cops = [5.42, 4.34, 3.98, 3.60] # Expected values
632
- cops.each_with_index do |cop, i|
633
+ assert_equal(2, htg_coil.stages.size)
634
+ [4.75, 3.59].each_with_index do |cop, i|
633
635
  assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
634
636
  end
635
- assert_in_epsilon(htg_capacity * 1.2, htg_coil.stages[-1].grossRatedHeatingCapacity.get, 0.01)
637
+ [2927, 10376].each_with_index do |htg_capacity, i|
638
+ assert_in_epsilon(htg_capacity, htg_coil.stages[i].grossRatedHeatingCapacity.get, 0.01)
639
+ end
640
+
641
+ # Check supp heating coil
642
+ backup_efficiency = heat_pump.backup_heating_efficiency_percent
643
+ supp_htg_capacity = UnitConversions.convert(heat_pump.backup_heating_capacity, 'Btu/hr', 'W')
644
+ assert_equal(1, model.getCoilHeatingElectrics.size)
645
+ supp_htg_coil = model.getCoilHeatingElectrics[0]
646
+ assert_in_epsilon(backup_efficiency, supp_htg_coil.efficiency, 0.01)
647
+ assert_in_epsilon(supp_htg_capacity, supp_htg_coil.nominalCapacity.get, 0.01)
648
+
649
+ # Check EMS
650
+ assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
651
+ unitary_system = model.getAirLoopHVACUnitarySystems[0]
652
+ program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{unitary_system.name} IQ")
653
+ assert(program_values.empty?) # Check no EMS program
654
+ end
655
+
656
+ def test_mini_split_heat_pump
657
+ args_hash = {}
658
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-mini-split-heat-pump-ductless.xml'))
659
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
660
+
661
+ # Check cooling coil
662
+ assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
663
+ clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
664
+ assert_equal(2, clg_coil.stages.size)
665
+ [4.40, 3.20].each_with_index do |cop, i|
666
+ assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
667
+ end
668
+ [2691, 10606].each_with_index do |clg_capacity, i|
669
+ assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
670
+ end
671
+
672
+ # Check heating coil
673
+ assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
674
+ htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
675
+ assert_equal(2, htg_coil.stages.size)
676
+ [4.63, 3.31].each_with_index do |cop, i|
677
+ assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
678
+ end
679
+ [3273, 12890].each_with_index do |htg_capacity, i|
680
+ assert_in_epsilon(htg_capacity, htg_coil.stages[i].grossRatedHeatingCapacity.get, 0.01)
681
+ end
636
682
 
637
683
  # Check supp heating coil
638
684
  assert_equal(0, model.getCoilHeatingElectrics.size)
@@ -644,23 +690,58 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
644
690
  assert(program_values.empty?) # Check no EMS program
645
691
  end
646
692
 
647
- def test_mini_split_air_conditioner
693
+ def test_mini_split_heat_pump_detailed_performance
648
694
  args_hash = {}
649
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-mini-split-air-conditioner-only-ductless.xml'))
650
- model, hpxml = _test_measure(args_hash)
695
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-mini-split-heat-pump-ductless-detailed-performance.xml'))
696
+ model, _hpxml = _test_measure(args_hash)
651
697
 
652
- # Get HPXML values
653
- cooling_system = hpxml.cooling_systems[0]
654
- clg_capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
698
+ # Check cooling coil
699
+ assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
700
+ clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
701
+ assert_equal(2, clg_coil.stages.size)
702
+ [4.06, 3.33].each_with_index do |cop, i|
703
+ assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
704
+ end
705
+ [3041, 12557].each_with_index do |clg_capacity, i|
706
+ assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
707
+ end
708
+
709
+ # Check heating coil
710
+ assert_equal(1, model.getCoilHeatingDXMultiSpeeds.size)
711
+ htg_coil = model.getCoilHeatingDXMultiSpeeds[0]
712
+ assert_equal(2, htg_coil.stages.size)
713
+ [4.82, 3.23].each_with_index do |cop, i|
714
+ assert_in_epsilon(cop, htg_coil.stages[i].grossRatedHeatingCOP, 0.01)
715
+ end
716
+ [3557, 16426].each_with_index do |htg_capacity, i|
717
+ assert_in_epsilon(htg_capacity, htg_coil.stages[i].grossRatedHeatingCapacity.get, 0.01)
718
+ end
719
+
720
+ # Check supp heating coil
721
+ assert_equal(0, model.getCoilHeatingElectrics.size)
722
+
723
+ # Check EMS
724
+ assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
725
+ unitary_system = model.getAirLoopHVACUnitarySystems[0]
726
+ program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{unitary_system.name} IQ")
727
+ assert(program_values.empty?) # Check no EMS program
728
+ end
729
+
730
+ def test_mini_split_air_conditioner
731
+ args_hash = {}
732
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-mini-split-air-conditioner-only-ductless.xml'))
733
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
655
734
 
656
735
  # Check cooling coil
657
736
  assert_equal(1, model.getCoilCoolingDXMultiSpeeds.size)
658
737
  clg_coil = model.getCoilCoolingDXMultiSpeeds[0]
659
- cops = [5.76, 4.99, 4.19, 3.10] # Expected values
660
- cops.each_with_index do |cop, i|
738
+ assert_equal(2, clg_coil.stages.size)
739
+ [4.40, 3.23].each_with_index do |cop, i|
661
740
  assert_in_epsilon(cop, clg_coil.stages[i].grossRatedCoolingCOP, 0.01)
662
741
  end
663
- assert_in_epsilon(clg_capacity * 1.2, clg_coil.stages[-1].grossRatedTotalCoolingCapacity.get, 0.01)
742
+ [1794, 7086].each_with_index do |clg_capacity, i|
743
+ assert_in_epsilon(clg_capacity, clg_coil.stages[i].grossRatedTotalCoolingCapacity.get, 0.01)
744
+ end
664
745
 
665
746
  # Check EMS
666
747
  assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
@@ -671,11 +752,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
671
752
 
672
753
  def test_ground_to_air_heat_pump
673
754
  args_hash = {}
674
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-ground-to-air-heat-pump.xml'))
675
- model, hpxml = _test_measure(args_hash)
755
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-ground-to-air-heat-pump.xml'))
756
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
676
757
 
677
758
  # Get HPXML values
678
- heat_pump = hpxml.heat_pumps[0]
759
+ heat_pump = hpxml_bldg.heat_pumps[0]
679
760
  backup_efficiency = heat_pump.backup_heating_efficiency_percent
680
761
  clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
681
762
  htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
@@ -684,15 +765,13 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
684
765
  # Check cooling coil
685
766
  assert_equal(1, model.getCoilCoolingWaterToAirHeatPumpEquationFits.size)
686
767
  clg_coil = model.getCoilCoolingWaterToAirHeatPumpEquationFits[0]
687
- cop = 5.36 # Expected values
688
- assert_in_epsilon(cop, clg_coil.ratedCoolingCoefficientofPerformance, 0.01)
768
+ assert_in_epsilon(4.87, clg_coil.ratedCoolingCoefficientofPerformance, 0.01)
689
769
  assert_in_epsilon(clg_capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01)
690
770
 
691
771
  # Check heating coil
692
772
  assert_equal(1, model.getCoilHeatingWaterToAirHeatPumpEquationFits.size)
693
773
  htg_coil = model.getCoilHeatingWaterToAirHeatPumpEquationFits[0]
694
- cop = 3.65 # Expected values
695
- assert_in_epsilon(cop, htg_coil.ratedHeatingCoefficientofPerformance, 0.01)
774
+ assert_in_epsilon(3.6, htg_coil.ratedHeatingCoefficientofPerformance, 0.01)
696
775
  assert_in_epsilon(htg_capacity, htg_coil.ratedHeatingCapacity.get, 0.01)
697
776
 
698
777
  # Check supp heating coil
@@ -706,83 +785,95 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
706
785
  unitary_system = model.getAirLoopHVACUnitarySystems[0]
707
786
  program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{unitary_system.name} IQ")
708
787
  assert(program_values.empty?) # Check no EMS program
788
+
789
+ # Check ghx
790
+ assert(1, model.getGroundHeatExchangerVerticals.size)
791
+ ghx = model.getGroundHeatExchangerVerticals[0]
792
+
793
+ # Check xing
794
+ assert(1, model.getSiteGroundTemperatureUndisturbedXings.size)
795
+ xing = model.getSiteGroundTemperatureUndisturbedXings[0]
796
+ assert_in_epsilon(ghx.groundThermalConductivity.get, xing.soilThermalConductivity, 0.01)
797
+ assert_in_epsilon(962, xing.soilDensity, 0.01)
798
+ assert_in_epsilon(ghx.groundThermalHeatCapacity.get / xing.soilDensity, xing.soilSpecificHeat, 0.01)
799
+ assert_in_epsilon(ghx.groundTemperature.get, xing.averageSoilSurfaceTemperature, 0.01)
800
+ assert_in_epsilon(12.5, xing.soilSurfaceTemperatureAmplitude1, 0.01)
801
+ assert_in_epsilon(-1.3, xing.soilSurfaceTemperatureAmplitude2, 0.01)
802
+ assert_in_epsilon(20, xing.phaseShiftofTemperatureAmplitude1, 0.01)
803
+ assert_in_epsilon(31, xing.phaseShiftofTemperatureAmplitude2, 0.01)
709
804
  end
710
805
 
711
806
  def test_shared_chiller_baseboard
712
807
  args_hash = {}
713
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-chiller-only-baseboard.xml'))
714
- model, hpxml = _test_measure(args_hash)
808
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-chiller-only-baseboard.xml'))
809
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
715
810
 
716
811
  # Get HPXML values
717
- cooling_system = hpxml.cooling_systems[0]
812
+ cooling_system = hpxml_bldg.cooling_systems[0]
718
813
  capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
719
814
 
720
815
  # Check cooling coil
721
816
  assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
722
817
  clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
723
- cop = 3.85 # Expected value
724
- assert_in_epsilon(cop, clg_coil.ratedCOP, 0.01)
818
+ assert_in_epsilon(3.62, clg_coil.ratedCOP, 0.01)
725
819
  refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
726
820
  end
727
821
 
728
822
  def test_shared_chiller_fan_coil
729
823
  args_hash = {}
730
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml'))
731
- model, hpxml = _test_measure(args_hash)
824
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-chiller-only-fan-coil.xml'))
825
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
732
826
 
733
827
  # Get HPXML values
734
- cooling_system = hpxml.cooling_systems[0]
828
+ cooling_system = hpxml_bldg.cooling_systems[0]
735
829
  capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
736
830
 
737
831
  # Check cooling coil
738
832
  assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
739
833
  clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
740
- cop = 3.45 # Expected value
741
- assert_in_epsilon(cop, clg_coil.ratedCOP, 0.01)
834
+ assert_in_epsilon(3.31, clg_coil.ratedCOP, 0.01)
742
835
  refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
743
836
  end
744
837
 
745
838
  def test_shared_chiller_water_loop_heat_pump
746
839
  args_hash = {}
747
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml'))
748
- model, hpxml = _test_measure(args_hash)
840
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-chiller-only-water-loop-heat-pump.xml'))
841
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
749
842
 
750
843
  # Get HPXML values
751
- cooling_system = hpxml.cooling_systems[0]
844
+ cooling_system = hpxml_bldg.cooling_systems[0]
752
845
  capacity = UnitConversions.convert(cooling_system.cooling_capacity, 'Btu/hr', 'W')
753
846
 
754
847
  # Check cooling coil
755
848
  assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
756
849
  clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
757
- cop = 1.30 # Expected value
758
- assert_in_epsilon(cop, clg_coil.ratedCOP, 0.01)
850
+ assert_in_epsilon(1.50, clg_coil.ratedCOP, 0.01)
759
851
  refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
760
852
  end
761
853
 
762
854
  def test_shared_cooling_tower_water_loop_heat_pump
763
855
  args_hash = {}
764
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml'))
765
- model, hpxml = _test_measure(args_hash)
856
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-cooling-tower-only-water-loop-heat-pump.xml'))
857
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
766
858
 
767
859
  # Get HPXML values
768
- cooling_system = hpxml.cooling_systems[0]
860
+ cooling_system = hpxml_bldg.cooling_systems[0]
769
861
  capacity = UnitConversions.convert(cooling_system.cooling_capacity.to_f, 'Btu/hr', 'W')
770
862
 
771
863
  # Check cooling coil
772
864
  assert_equal(1, model.getCoilCoolingDXSingleSpeeds.size)
773
865
  clg_coil = model.getCoilCoolingDXSingleSpeeds[0]
774
- cop = 3.68 # Expected value
775
- assert_in_epsilon(cop, clg_coil.ratedCOP, 0.01)
866
+ assert_in_epsilon(3.50, clg_coil.ratedCOP, 0.01)
776
867
  refute_in_epsilon(capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01) # Uses autosized capacity
777
868
  end
778
869
 
779
870
  def test_shared_boiler_baseboard
780
871
  args_hash = {}
781
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml'))
782
- model, hpxml = _test_measure(args_hash)
872
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml'))
873
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
783
874
 
784
875
  # Get HPXML values
785
- heating_system = hpxml.heating_systems[0]
876
+ heating_system = hpxml_bldg.heating_systems[0]
786
877
  afue = heating_system.heating_efficiency_afue
787
878
  capacity = UnitConversions.convert(heating_system.heating_capacity.to_f, 'Btu/hr', 'W')
788
879
  fuel = heating_system.heating_system_fuel
@@ -797,11 +888,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
797
888
 
798
889
  def test_shared_boiler_fan_coil
799
890
  args_hash = {}
800
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml'))
801
- model, hpxml = _test_measure(args_hash)
891
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml'))
892
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
802
893
 
803
894
  # Get HPXML values
804
- heating_system = hpxml.heating_systems[0]
895
+ heating_system = hpxml_bldg.heating_systems[0]
805
896
  afue = heating_system.heating_efficiency_afue
806
897
  capacity = UnitConversions.convert(heating_system.heating_capacity.to_f, 'Btu/hr', 'W')
807
898
  fuel = heating_system.heating_system_fuel
@@ -816,15 +907,15 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
816
907
 
817
908
  def test_shared_boiler_water_loop_heat_pump
818
909
  args_hash = {}
819
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml'))
820
- model, hpxml = _test_measure(args_hash)
910
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-boiler-only-water-loop-heat-pump.xml'))
911
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
821
912
 
822
913
  # Get HPXML values
823
- heating_system = hpxml.heating_systems[0]
914
+ heating_system = hpxml_bldg.heating_systems[0]
824
915
  afue = heating_system.heating_efficiency_afue
825
916
  capacity = UnitConversions.convert(heating_system.heating_capacity.to_f, 'Btu/hr', 'W')
826
917
  fuel = heating_system.heating_system_fuel
827
- heat_pump = hpxml.heat_pumps[0]
918
+ heat_pump = hpxml_bldg.heat_pumps[0]
828
919
  wlhp_cop = heat_pump.heating_efficiency_cop
829
920
 
830
921
  # Check boiler
@@ -849,11 +940,11 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
849
940
 
850
941
  def test_shared_ground_loop_ground_to_air_heat_pump
851
942
  args_hash = {}
852
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml'))
853
- model, hpxml = _test_measure(args_hash)
943
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-bldgtype-mf-unit-shared-ground-loop-ground-to-air-heat-pump.xml'))
944
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
854
945
 
855
946
  # Get HPXML values
856
- heat_pump = hpxml.heat_pumps[0]
947
+ heat_pump = hpxml_bldg.heat_pumps[0]
857
948
  backup_efficiency = heat_pump.backup_heating_efficiency_percent
858
949
  clg_capacity = UnitConversions.convert(heat_pump.cooling_capacity, 'Btu/hr', 'W')
859
950
  htg_capacity = UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W')
@@ -862,15 +953,13 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
862
953
  # Check cooling coil
863
954
  assert_equal(1, model.getCoilCoolingWaterToAirHeatPumpEquationFits.size)
864
955
  clg_coil = model.getCoilCoolingWaterToAirHeatPumpEquationFits[0]
865
- cop = 5.36 # Expected values
866
- assert_in_epsilon(cop, clg_coil.ratedCoolingCoefficientofPerformance, 0.01)
956
+ assert_in_epsilon(4.87, clg_coil.ratedCoolingCoefficientofPerformance, 0.01)
867
957
  assert_in_epsilon(clg_capacity, clg_coil.ratedTotalCoolingCapacity.get, 0.01)
868
958
 
869
959
  # Check heating coil
870
960
  assert_equal(1, model.getCoilHeatingWaterToAirHeatPumpEquationFits.size)
871
961
  htg_coil = model.getCoilHeatingWaterToAirHeatPumpEquationFits[0]
872
- cop = 3.65 # Expected values
873
- assert_in_epsilon(cop, htg_coil.ratedHeatingCoefficientofPerformance, 0.01)
962
+ assert_in_epsilon(3.6, htg_coil.ratedHeatingCoefficientofPerformance, 0.01)
874
963
  assert_in_epsilon(htg_capacity, htg_coil.ratedHeatingCapacity.get, 0.01)
875
964
 
876
965
  # Check supp heating coil
@@ -880,13 +969,13 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
880
969
  assert_in_epsilon(supp_htg_capacity, supp_htg_coil.nominalCapacity.get, 0.01)
881
970
  end
882
971
 
883
- def test_install_quality_air_to_air_heat_pump_1_speed_ratio
972
+ def test_install_quality_air_to_air_heat_pump_1_speed
884
973
  args_hash = {}
885
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml'))
886
- model, hpxml = _test_measure(args_hash)
974
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml'))
975
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
887
976
 
888
977
  # Get HPXML values
889
- heat_pump = hpxml.heat_pumps[0]
978
+ heat_pump = hpxml_bldg.heat_pumps[0]
890
979
  charge_defect = heat_pump.charge_defect_ratio
891
980
  fan_watts_cfm = heat_pump.fan_watts_per_cfm
892
981
 
@@ -920,34 +1009,59 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
920
1009
  assert_in_epsilon(program_values['FF_AF_htg'].sum, heating_cfm / rated_airflow_cfm_htg, 0.01)
921
1010
  end
922
1011
 
923
- def test_install_quality_air_to_air_heat_pump_2_speed_ratio
1012
+ def test_install_quality_air_to_air_heat_pump_2_speed
924
1013
  args_hash = {}
925
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml'))
926
- model, hpxml = _test_measure(args_hash)
1014
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml'))
1015
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
927
1016
 
928
1017
  # Get HPXML values
929
- heat_pump = hpxml.heat_pumps[0]
930
- _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1018
+ heat_pump = hpxml_bldg.heat_pumps[0]
1019
+ program_values = _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1020
+ [1.088, 1.088].each_with_index do |rated_airflow_ratio, i|
1021
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i], 0.01)
1022
+ end
1023
+ [0.806, 0.806].each_with_index do |rated_airflow_ratio, i|
1024
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_htg'][i], 0.01)
1025
+ end
931
1026
  end
932
1027
 
933
- def test_install_quality_air_to_air_heat_pump_var_speed_ratio
1028
+ def test_install_quality_air_to_air_heat_pump_var_speed
934
1029
  args_hash = {}
935
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml'))
936
- model, hpxml = _test_measure(args_hash)
1030
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml'))
1031
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1032
+
1033
+ # Get HPXML values
1034
+ heat_pump = hpxml_bldg.heat_pumps[0]
1035
+ program_values = _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1036
+ [0.936, 0.936].each_with_index do |rated_airflow_ratio, i|
1037
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i], 0.01)
1038
+ end
1039
+ [0.71, 0.71].each_with_index do |rated_airflow_ratio, i|
1040
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_htg'][i], 0.01)
1041
+ end
1042
+
1043
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-air-to-air-heat-pump-var-speed-detailed-performance.xml'))
1044
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
937
1045
 
938
1046
  # Get HPXML values
939
- heat_pump = hpxml.heat_pumps[0]
940
- _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1047
+ heat_pump = hpxml_bldg.heat_pumps[0]
1048
+ program_values = _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1049
+ [0.936, 0.936].each_with_index do |rated_airflow_ratio, i|
1050
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i], 0.01)
1051
+ end
1052
+ [0.71, 0.71].each_with_index do |rated_airflow_ratio, i|
1053
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_htg'][i], 0.01)
1054
+ end
941
1055
  end
942
1056
 
943
- def test_install_quality_furnace_central_air_conditioner_1_speed_ratio
1057
+ def test_install_quality_furnace_central_air_conditioner_1_speed
944
1058
  args_hash = {}
945
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml'))
946
- model, hpxml = _test_measure(args_hash)
1059
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml'))
1060
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
947
1061
 
948
1062
  # Get HPXML values
949
- cooling_system = hpxml.cooling_systems[0]
950
- heating_system = hpxml.heating_systems[0]
1063
+ cooling_system = hpxml_bldg.cooling_systems[0]
1064
+ heating_system = hpxml_bldg.heating_systems[0]
951
1065
  charge_defect = cooling_system.charge_defect_ratio
952
1066
  fan_watts_cfm = cooling_system.fan_watts_per_cfm
953
1067
  fan_watts_cfm2 = heating_system.fan_watts_per_cfm
@@ -978,33 +1092,39 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
978
1092
  assert_in_epsilon(program_values['FF_AF_clg'].sum, cooling_cfm / rated_airflow_cfm, 0.01)
979
1093
  end
980
1094
 
981
- def test_install_quality_furnace_central_air_conditioner_2_speed_ratio
1095
+ def test_install_quality_furnace_central_air_conditioner_2_speed
982
1096
  args_hash = {}
983
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml'))
984
- model, hpxml = _test_measure(args_hash)
1097
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml'))
1098
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
985
1099
 
986
1100
  # Get HPXML values
987
- cooling_system = hpxml.cooling_systems[0]
988
- _check_install_quality_multispeed_ratio(cooling_system, model)
1101
+ cooling_system = hpxml_bldg.cooling_systems[0]
1102
+ program_values = _check_install_quality_multispeed_ratio(cooling_system, model)
1103
+ [1.088, 1.088].each_with_index do |rated_airflow_ratio, i|
1104
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i])
1105
+ end
989
1106
  end
990
1107
 
991
- def test_install_quality_furnace_central_air_conditioner_var_speed_ratio
1108
+ def test_install_quality_furnace_central_air_conditioner_var_speed
992
1109
  args_hash = {}
993
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml'))
994
- model, hpxml = _test_measure(args_hash)
1110
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml'))
1111
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
995
1112
 
996
1113
  # Get HPXML values
997
- cooling_system = hpxml.cooling_systems[0]
998
- _check_install_quality_multispeed_ratio(cooling_system, model)
1114
+ cooling_system = hpxml_bldg.cooling_systems[0]
1115
+ program_values = _check_install_quality_multispeed_ratio(cooling_system, model)
1116
+ [0.936, 0.936].each_with_index do |rated_airflow_ratio, i|
1117
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i])
1118
+ end
999
1119
  end
1000
1120
 
1001
- def test_install_quality_furnace_gas_ratio
1121
+ def test_install_quality_furnace_gas
1002
1122
  args_hash = {}
1003
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-furnace-gas-only.xml'))
1004
- model, hpxml = _test_measure(args_hash)
1123
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-furnace-gas-only.xml'))
1124
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1005
1125
 
1006
1126
  # Get HPXML values
1007
- heating_system = hpxml.heating_systems[0]
1127
+ heating_system = hpxml_bldg.heating_systems[0]
1008
1128
  fan_watts_cfm = heating_system.fan_watts_per_cfm
1009
1129
 
1010
1130
  assert_equal(1, model.getAirLoopHVACUnitarySystems.size)
@@ -1015,13 +1135,13 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
1015
1135
  assert_in_epsilon(fan_watts_cfm, fan.designPressureRise / fan.fanTotalEfficiency * UnitConversions.convert(1.0, 'cfm', 'm^3/s'), 0.01)
1016
1136
  end
1017
1137
 
1018
- def test_install_quality_ground_to_air_heat_pump_ratio
1138
+ def test_install_quality_ground_to_air_heat_pump
1019
1139
  args_hash = {}
1020
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-ground-to-air-heat-pump.xml'))
1021
- model, hpxml = _test_measure(args_hash)
1140
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-ground-to-air-heat-pump.xml'))
1141
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1022
1142
 
1023
1143
  # Get HPXML values
1024
- heat_pump = hpxml.heat_pumps[0]
1144
+ heat_pump = hpxml_bldg.heat_pumps[0]
1025
1145
  charge_defect = heat_pump.charge_defect_ratio
1026
1146
  fan_watts_cfm = heat_pump.fan_watts_per_cfm
1027
1147
 
@@ -1055,33 +1175,42 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
1055
1175
  assert_in_epsilon(program_values['FF_AF_htg'].sum, heating_cfm / rated_airflow_cfm_htg, 0.01)
1056
1176
  end
1057
1177
 
1058
- def test_install_quality_mini_split_air_conditioner_ratio
1178
+ def test_install_quality_mini_split_air_conditioner
1059
1179
  args_hash = {}
1060
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml'))
1061
- model, hpxml = _test_measure(args_hash)
1180
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml'))
1181
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1062
1182
 
1063
1183
  # Get HPXML values
1064
- cooling_system = hpxml.cooling_systems[0]
1065
- _check_install_quality_multispeed_ratio(cooling_system, model)
1184
+ cooling_system = hpxml_bldg.cooling_systems[0]
1185
+ program_values = _check_install_quality_multispeed_ratio(cooling_system, model)
1186
+ [0.936, 0.936].each_with_index do |rated_airflow_ratio, i|
1187
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i])
1188
+ end
1066
1189
  end
1067
1190
 
1068
- def test_install_quality_mini_split_heat_pump_ratio
1191
+ def test_install_quality_mini_split_heat_pump
1069
1192
  args_hash = {}
1070
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-install-quality-mini-split-heat-pump-ducted.xml'))
1071
- model, hpxml = _test_measure(args_hash)
1193
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-install-quality-mini-split-heat-pump-ducted.xml'))
1194
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1072
1195
 
1073
1196
  # Get HPXML values
1074
- heat_pump = hpxml.heat_pumps[0]
1075
- _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1197
+ heat_pump = hpxml_bldg.heat_pumps[0]
1198
+ program_values = _check_install_quality_multispeed_ratio(heat_pump, model, heat_pump)
1199
+ [0.936, 0.936].each_with_index do |rated_airflow_ratio, i|
1200
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_clg'][i], 0.01)
1201
+ end
1202
+ [0.71, 0.71].each_with_index do |rated_airflow_ratio, i|
1203
+ assert_in_epsilon(rated_airflow_ratio, program_values['FF_AF_htg'][i], 0.01)
1204
+ end
1076
1205
  end
1077
1206
 
1078
1207
  def test_custom_seasons
1079
1208
  args_hash = {}
1080
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-seasons.xml'))
1081
- model, hpxml = _test_measure(args_hash)
1209
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-hvac-seasons.xml'))
1210
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1082
1211
 
1083
1212
  # Get HPXML values
1084
- hvac_control = hpxml.hvac_controls[0]
1213
+ hvac_control = hpxml_bldg.hvac_controls[0]
1085
1214
  seasons_heating_begin_month = hvac_control.seasons_heating_begin_month
1086
1215
  seasons_heating_begin_day = hvac_control.seasons_heating_begin_day
1087
1216
  seasons_heating_end_month = hvac_control.seasons_heating_end_month
@@ -1133,11 +1262,14 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
1133
1262
 
1134
1263
  def test_crankcase_heater_watts
1135
1264
  args_hash = {}
1136
- args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-hvac-crankcase-heater-40w.xml'))
1137
- model, hpxml = _test_measure(args_hash)
1265
+ args_hash['hpxml_path'] = @tmp_hpxml_path
1266
+ hpxml, hpxml_bldg = _create_hpxml('base.xml')
1267
+ hpxml_bldg.cooling_systems[0].crankcase_heater_watts = 40.0
1268
+ XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
1269
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
1138
1270
 
1139
1271
  # Get HPXML values
1140
- cooling_system = hpxml.cooling_systems[0]
1272
+ cooling_system = hpxml_bldg.cooling_systems[0]
1141
1273
  crankcase_heater_watts = cooling_system.crankcase_heater_watts
1142
1274
 
1143
1275
  # Check cooling coil
@@ -1180,7 +1312,7 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
1180
1312
 
1181
1313
  File.delete(File.join(File.dirname(__FILE__), 'in.xml'))
1182
1314
 
1183
- return model, hpxml
1315
+ return model, hpxml, hpxml.buildings[0]
1184
1316
  end
1185
1317
 
1186
1318
  def _check_install_quality_multispeed_ratio(hpxml_clg_sys, model, hpxml_htg_sys = nil)
@@ -1227,5 +1359,12 @@ class HPXMLtoOpenStudioHVACTest < MiniTest::Test
1227
1359
  htg_speed_cfms = htg_ratios.map { |ratio| heating_cfm * ratio }
1228
1360
  assert_in_epsilon(program_values['FF_AF_htg'].sum, htg_speed_cfms.zip(rated_airflow_cfm_htg).map { |cfm, rated_cfm| cfm / rated_cfm }.sum, 0.01)
1229
1361
  end
1362
+
1363
+ return program_values
1364
+ end
1365
+
1366
+ def _create_hpxml(hpxml_name)
1367
+ hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, hpxml_name))
1368
+ return hpxml, hpxml.buildings[0]
1230
1369
  end
1231
1370
  end