urbanopt-cli 0.6.4 → 0.7.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 (1045) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/CMakeLists.txt +7 -7
  4. data/FindOpenStudioSDK.cmake +6 -6
  5. data/example_files/mappers/Baseline.rb +27 -27
  6. data/example_files/mappers/CreateBar.rb +7 -0
  7. data/example_files/mappers/HighEfficiency.rb +5 -4
  8. data/example_files/measures/BuildResidentialModel/measure.rb +109 -76
  9. data/example_files/residential/enclosure.tsv +102 -102
  10. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +22 -16
  11. data/example_files/resources/hpxml-measures/.gitignore +3 -7
  12. data/example_files/resources/hpxml-measures/.rubocop.yml +67 -8
  13. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1752 -1455
  14. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +3229 -5431
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +386 -553
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +1075 -363
  17. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +212 -0
  18. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +898 -0
  19. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules.rb +109 -188
  20. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_README.md +0 -0
  21. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_dryer_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_dryer_consumption_dist.csv} +0 -0
  22. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_dryer_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_dryer_duration_dist.csv} +0 -0
  23. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_washer_consumption_dist.csv} +0 -0
  24. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_washer_duration_dist.csv} +0 -0
  25. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.json +2 -2
  26. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.md +0 -0
  27. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_consumption_dist.csv} +0 -0
  28. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_duration_dist.csv} +0 -0
  29. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_consumption_dist.csv} +0 -0
  30. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_duration_dist.csv} +0 -0
  31. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_cluster_size_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_clothes_washer_cluster_size_probability.csv} +0 -0
  32. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_event_duration_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_clothes_washer_event_duration_probability.csv} +0 -0
  33. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_cluster_size_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_dishwasher_cluster_size_probability.csv} +0 -0
  34. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_event_duration_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_dishwasher_event_duration_probability.csv} +0 -0
  35. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_cluster_size_probability.csv +0 -0
  36. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_event_duration_probability.csv +0 -0
  37. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  38. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  39. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  40. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  41. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  42. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  43. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  44. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  45. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  46. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  47. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  48. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  49. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  50. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  51. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  52. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  53. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  54. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  55. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  56. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  57. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  58. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  59. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  60. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  61. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  62. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  63. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  64. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  65. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  66. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  67. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  68. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  69. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  70. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  71. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  72. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  73. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  74. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  75. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  76. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  77. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  78. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  79. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  80. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  81. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  82. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  83. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  84. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  85. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_0.csv +0 -0
  86. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_1.csv +0 -0
  87. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_2.csv +0 -0
  88. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_3.csv +0 -0
  89. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_0.csv +0 -0
  90. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_1.csv +0 -0
  91. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_2.csv +0 -0
  92. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_3.csv +0 -0
  93. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +0 -0
  94. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  95. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  96. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  97. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  98. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  99. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  100. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  101. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  102. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  103. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  104. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  105. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  106. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  107. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  108. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  109. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  110. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  111. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  112. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  113. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  114. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  115. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  116. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  117. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  118. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  119. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  120. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  121. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  122. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  123. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  124. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  125. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  126. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  127. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  128. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  129. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  130. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  131. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  132. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  133. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  134. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  135. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  136. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  137. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  138. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  139. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  140. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  141. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  142. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_0.csv +0 -0
  143. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_1.csv +0 -0
  144. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_2.csv +0 -0
  145. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_3.csv +0 -0
  146. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_0.csv +0 -0
  147. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_1.csv +0 -0
  148. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_2.csv +0 -0
  149. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_3.csv +0 -0
  150. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +0 -0
  151. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +526 -0
  152. data/example_files/resources/hpxml-measures/Changelog.md +84 -8
  153. data/example_files/resources/hpxml-measures/Gemfile +4 -1
  154. data/example_files/resources/hpxml-measures/Gemfile.lock +17 -6
  155. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +387 -387
  156. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -251
  157. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +275 -59
  158. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +471 -247
  159. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXML.xsd +1 -1
  160. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +171 -79
  161. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +155 -78
  162. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +188 -141
  163. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +83 -0
  164. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +99 -11
  165. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +558 -342
  166. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +2 -0
  167. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +64 -72
  168. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +96 -93
  169. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +965 -350
  170. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +887 -216
  171. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +664 -760
  172. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +306 -287
  173. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +20 -29
  174. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +0 -20
  175. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_hvac_equipment_efficiency.csv +493 -0
  176. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_water_heater_efficiency.csv +157 -0
  177. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +156 -108
  178. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +41 -3
  179. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +14 -2
  180. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +18 -18
  181. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +14 -7
  182. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/smooth.csv +8761 -0
  183. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic-vacancy.csv +8761 -0
  184. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic.csv +8761 -0
  185. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +431 -428
  186. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +21 -12
  187. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +3 -3
  188. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +245 -234
  189. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +10 -5
  190. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +19 -8
  191. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +44 -23
  192. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +241 -0
  193. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1374 -297
  194. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +702 -55
  195. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
  196. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
  197. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +238 -40
  198. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +2 -2
  199. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -2
  200. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +186 -0
  201. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +955 -176
  202. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +47 -61
  203. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +1 -1
  204. data/example_files/resources/hpxml-measures/LICENSE.md +1 -1
  205. data/example_files/resources/hpxml-measures/README.md +12 -9
  206. data/example_files/resources/hpxml-measures/Rakefile +1 -1
  207. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +448 -0
  208. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +81 -0
  209. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +71 -0
  210. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +232 -0
  211. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +1977 -0
  212. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/measure.xml +682 -31
  213. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/resources/constants.rb +20 -2
  214. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/tests/output_report_test.rb +83 -218
  215. data/example_files/resources/hpxml-measures/docs/source/index.rst +1 -2
  216. data/example_files/resources/hpxml-measures/docs/source/intro.rst +6 -3
  217. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +73 -0
  218. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +915 -494
  219. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +263 -111
  220. data/example_files/resources/hpxml-measures/tasks.rb +3830 -6981
  221. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +35 -0
  222. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC.epw +8768 -0
  223. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +25 -5
  224. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +102 -91
  225. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +93 -83
  226. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +93 -83
  227. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +93 -83
  228. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +93 -83
  229. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +102 -91
  230. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +103 -97
  231. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +96 -85
  232. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +102 -91
  233. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +102 -91
  234. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +102 -91
  235. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +96 -125
  236. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +119 -104
  237. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +94 -89
  238. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +93 -83
  239. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +104 -95
  240. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +104 -95
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-outside.xml +584 -0
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +99 -68
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +119 -79
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +99 -68
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +99 -68
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +99 -68
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +97 -66
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +97 -66
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +97 -66
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +100 -69
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +100 -69
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +94 -65
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +94 -65
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +94 -65
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +94 -65
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +97 -68
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +94 -65
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +94 -65
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +94 -65
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +97 -68
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +97 -68
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +98 -67
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +96 -64
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +105 -84
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +108 -77
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +100 -69
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +100 -69
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +98 -67
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +97 -66
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +97 -66
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +97 -66
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-facility-type-surfaces.xml → base-bldgtype-single-family-attached-2stories.xml} +152 -167
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +124 -114
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +102 -95
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +102 -95
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +102 -95
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +104 -94
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +105 -96
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +102 -95
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +102 -95
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +102 -95
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +104 -95
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +102 -95
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +102 -95
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +102 -95
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +104 -97
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +102 -95
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +104 -95
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +104 -95
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +104 -95
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +102 -95
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +104 -95
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +108 -101
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +96 -85
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +104 -95
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +104 -95
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +104 -95
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +104 -95
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +104 -95
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +106 -97
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +106 -97
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +106 -97
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +106 -97
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +106 -97
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +106 -97
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +104 -95
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +105 -96
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +104 -95
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +574 -0
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +105 -96
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +104 -95
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +104 -95
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +105 -97
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +106 -97
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +106 -97
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +104 -95
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +104 -95
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +104 -95
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +104 -95
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +104 -95
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +104 -95
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +104 -95
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +106 -97
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +106 -97
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +104 -95
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +104 -95
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +131 -119
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +120 -99
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +104 -95
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +104 -95
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +104 -95
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +104 -95
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +131 -118
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +104 -95
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +104 -95
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +104 -95
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +104 -95
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +104 -95
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +579 -0
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +110 -101
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +213 -95
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-id.xml → base-enclosure-skylights-physical-properties.xml} +123 -105
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +114 -105
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +112 -103
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +92 -82
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +533 -547
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +545 -559
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/generator-output-greater-than-consumption.xml → base-enclosure-thermal-mass.xml} +117 -111
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +239 -109
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +88 -79
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +584 -0
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +115 -106
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +89 -79
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +123 -110
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +119 -172
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +104 -95
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +107 -95
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +572 -0
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +119 -128
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +92 -82
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +117 -110
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +106 -91
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +107 -98
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +105 -97
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +108 -98
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +108 -98
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +115 -110
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +101 -94
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +103 -95
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +104 -94
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +104 -94
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +590 -0
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +589 -0
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +104 -94
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +104 -94
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +105 -94
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +103 -93
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +106 -93
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml +103 -93
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +106 -93
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-invalid-distribution-system-type.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml} +587 -570
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml +103 -93
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +106 -93
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +102 -95
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +103 -94
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +101 -94
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +101 -94
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +101 -94
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +101 -94
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +108 -95
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +106 -93
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +106 -93
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +99 -92
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +103 -94
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +99 -92
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +102 -95
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +104 -95
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +104 -95
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +101 -94
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +103 -94
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +104 -94
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +105 -94
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +103 -93
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +106 -93
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +101 -94
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +104 -94
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +105 -94
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +103 -93
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +106 -93
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +541 -0
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-relatedhvac-dhw-indirect.xml → base-hvac-autosize-ptac-with-heating.xml} +528 -517
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/boiler-invalid-afue.xml → base-hvac-autosize-ptac.xml} +109 -113
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp.xml +531 -0
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +99 -92
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +99 -92
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +100 -93
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +104 -95
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +101 -94
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +102 -95
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +103 -94
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +101 -94
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +101 -94
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +101 -94
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +101 -94
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +101 -94
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +101 -94
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +101 -94
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +106 -96
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +104 -95
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +104 -94
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +104 -94
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +104 -94
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +104 -94
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +104 -94
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/unattached-solar-thermal-system.xml → base-hvac-ducts-area-fractions.xml} +596 -577
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml → base-hvac-ducts-leakage-cfm50.xml} +108 -106
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +104 -95
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +99 -92
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +103 -94
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +101 -94
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +99 -92
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +99 -92
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +99 -92
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +99 -92
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +101 -94
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +104 -95
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +102 -95
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +104 -95
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +104 -95
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +101 -94
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +103 -94
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +101 -94
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +101 -94
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +101 -94
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +104 -95
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +101 -94
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +102 -94
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +103 -93
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml} +104 -94
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml} +104 -94
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml} +104 -94
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml} +104 -95
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml} +104 -95
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml} +104 -95
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-only.xml → base-hvac-install-quality-furnace-gas-only.xml} +101 -94
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-ground-to-air-heat-pump.xml → base-hvac-install-quality-ground-to-air-heat-pump.xml} +104 -94
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml → base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml} +101 -94
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml → base-hvac-install-quality-mini-split-heat-pump-ducted.xml} +104 -94
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +101 -94
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +99 -92
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +101 -94
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +103 -95
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +104 -94
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +542 -0
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +101 -92
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +124 -100
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +94 -89
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +99 -92
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +104 -95
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +104 -95
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/cfis-with-hydronic-distribution.xml → base-hvac-ptac-with-heating.xml} +530 -532
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-distribution-return-duct-leakage-missing.xml → base-hvac-ptac.xml} +515 -528
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +531 -0
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +99 -92
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +516 -0
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +99 -92
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +584 -0
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +104 -95
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +99 -92
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +99 -92
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +104 -95
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +104 -95
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +100 -93
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +110 -96
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +586 -0
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +95 -86
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +104 -95
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +108 -98
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-foundation-wall-properties.xml → base-location-capetown-zaf.xml} +134 -127
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +92 -82
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +105 -98
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +104 -95
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +92 -82
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +92 -82
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +92 -82
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +108 -98
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +106 -97
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +106 -97
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +107 -98
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +104 -97
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +107 -98
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +106 -97
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +106 -97
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +105 -96
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +106 -97
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +106 -97
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +106 -97
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +141 -114
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +106 -97
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +105 -96
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +101 -101
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +105 -96
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +157 -112
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +157 -112
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +96 -87
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +108 -99
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +104 -95
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +113 -102
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +318 -291
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +608 -0
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/enclosure-garage-missing-roof-ceiling.xml → base-pv-battery-garage.xml} +678 -626
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/multifamily-reference-surface.xml → base-pv-battery-outside-degrades.xml} +610 -575
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-outside.xml +608 -0
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +105 -96
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-smooth.xml} +105 -101
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-stochastic-vacancy.xml} +105 -98
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-stochastic.xml} +105 -101
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-lighting-detailed.xml → base-schedules-simple.xml} +625 -585
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +104 -95
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +104 -95
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +104 -95
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +104 -95
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +104 -95
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +104 -95
  545. data/example_files/resources/hpxml-measures/workflow/template-build-hpxml-and-stocastic-schedules.osw +129 -0
  546. data/example_files/resources/hpxml-measures/workflow/template-stochastic-schedules.osw +53 -0
  547. data/example_files/resources/hpxml-measures/workflow/template.osw +7 -2
  548. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +75 -44
  549. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +75 -44
  550. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +75 -44
  551. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +75 -44
  552. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +75 -44
  553. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +75 -44
  554. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +75 -44
  555. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +75 -44
  556. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +63 -32
  557. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +63 -32
  558. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +66 -35
  559. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +66 -35
  560. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +66 -35
  561. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +66 -35
  562. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +69 -38
  563. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +69 -38
  564. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +75 -44
  565. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +75 -44
  566. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +75 -44
  567. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +75 -44
  568. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +75 -44
  569. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +75 -44
  570. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +78 -47
  571. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +78 -47
  572. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +114 -103
  573. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +126 -103
  574. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +321 -294
  575. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +26 -26
  576. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +320 -293
  577. data/example_files/resources/hpxml-measures/workflow/tests/compare.py +351 -0
  578. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +253 -260
  579. data/example_files/visualization/input_visualization_feature.html +12 -3
  580. data/example_files/visualization/input_visualization_scenario.html +10 -4
  581. data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.ddy +17 -17
  582. data/lib/uo_cli/version.rb +1 -1
  583. data/lib/uo_cli.rb +10 -3
  584. data/uo_cli.gemspec +6 -6
  585. metadata +217 -639
  586. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -59
  587. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +0 -337
  588. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +0 -337
  589. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +0 -337
  590. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +0 -337
  591. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +0 -337
  592. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +0 -337
  593. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +0 -337
  594. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +0 -337
  595. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +0 -337
  596. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +0 -337
  597. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +0 -337
  598. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +0 -337
  599. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +0 -337
  600. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +0 -337
  601. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +0 -341
  602. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +0 -341
  603. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +0 -348
  604. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +0 -342
  605. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +0 -341
  606. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +0 -341
  607. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +0 -341
  608. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +0 -339
  609. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +0 -337
  610. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +0 -337
  611. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +0 -337
  612. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +0 -337
  613. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +0 -337
  614. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +0 -337
  615. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +0 -337
  616. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +0 -337
  617. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +0 -337
  618. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +0 -337
  619. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +0 -337
  620. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +0 -337
  621. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +0 -337
  622. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +0 -337
  623. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +0 -337
  624. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +0 -337
  625. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +0 -337
  626. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +0 -337
  627. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +0 -337
  628. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +0 -337
  629. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +0 -337
  630. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +0 -337
  631. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +0 -337
  632. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +0 -337
  633. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +0 -337
  634. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +0 -338
  635. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +0 -337
  636. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +0 -338
  637. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +0 -337
  638. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +0 -337
  639. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +0 -338
  640. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +0 -337
  641. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +0 -337
  642. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +0 -337
  643. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +0 -337
  644. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +0 -337
  645. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +0 -337
  646. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +0 -337
  647. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +0 -337
  648. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +0 -337
  649. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +0 -337
  650. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +0 -337
  651. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +0 -337
  652. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +0 -337
  653. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +0 -337
  654. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +0 -337
  655. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +0 -337
  656. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +0 -337
  657. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +0 -337
  658. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +0 -337
  659. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +0 -337
  660. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +0 -337
  661. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +0 -337
  662. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +0 -337
  663. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +0 -337
  664. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +0 -337
  665. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +0 -337
  666. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +0 -337
  667. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +0 -337
  668. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +0 -337
  669. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +0 -337
  670. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +0 -338
  671. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +0 -337
  672. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +0 -337
  673. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +0 -337
  674. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +0 -337
  675. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +0 -337
  676. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +0 -337
  677. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +0 -337
  678. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +0 -337
  679. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +0 -337
  680. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +0 -337
  681. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +0 -337
  682. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +0 -337
  683. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +0 -337
  684. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +0 -337
  685. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +0 -337
  686. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +0 -337
  687. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +0 -337
  688. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +0 -337
  689. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +0 -337
  690. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +0 -337
  691. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +0 -338
  692. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +0 -338
  693. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +0 -338
  694. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +0 -338
  695. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +0 -338
  696. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +0 -337
  697. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +0 -337
  698. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +0 -335
  699. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +0 -335
  700. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +0 -335
  701. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +0 -337
  702. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +0 -337
  703. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +0 -337
  704. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +0 -337
  705. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +0 -337
  706. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +0 -337
  707. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +0 -337
  708. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +0 -337
  709. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +0 -337
  710. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +0 -336
  711. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +0 -337
  712. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +0 -337
  713. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +0 -337
  714. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +0 -336
  715. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +0 -336
  716. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +0 -336
  717. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +0 -339
  718. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +0 -339
  719. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +0 -339
  720. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +0 -339
  721. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +0 -340
  722. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +0 -340
  723. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +0 -340
  724. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +0 -338
  725. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +0 -338
  726. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +0 -338
  727. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +0 -339
  728. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +0 -338
  729. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +0 -340
  730. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +0 -336
  731. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +0 -336
  732. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +0 -337
  733. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +0 -337
  734. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +0 -337
  735. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +0 -337
  736. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +0 -337
  737. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +0 -337
  738. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +0 -337
  739. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +0 -336
  740. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +0 -336
  741. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +0 -337
  742. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +0 -337
  743. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +0 -337
  744. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +0 -337
  745. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +0 -337
  746. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +0 -337
  747. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +0 -337
  748. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +0 -337
  749. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +0 -337
  750. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +0 -337
  751. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +0 -337
  752. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +0 -337
  753. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +0 -337
  754. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +0 -337
  755. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +0 -337
  756. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +0 -337
  757. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +0 -337
  758. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +0 -345
  759. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +0 -335
  760. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +0 -337
  761. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +0 -337
  762. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +0 -337
  763. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +0 -337
  764. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +0 -337
  765. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +0 -337
  766. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +0 -337
  767. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +0 -337
  768. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +0 -337
  769. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +0 -324
  770. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +0 -337
  771. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +0 -337
  772. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +0 -337
  773. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +0 -337
  774. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +0 -337
  775. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +0 -337
  776. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +0 -341
  777. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +0 -337
  778. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +0 -338
  779. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +0 -338
  780. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +0 -342
  781. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +0 -338
  782. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +0 -341
  783. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +0 -337
  784. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +0 -337
  785. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +0 -337
  786. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +0 -341
  787. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +0 -341
  788. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +0 -341
  789. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +0 -341
  790. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +0 -341
  791. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +0 -341
  792. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +0 -341
  793. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +0 -341
  794. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +0 -341
  795. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +0 -341
  796. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +0 -341
  797. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +0 -341
  798. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +0 -341
  799. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +0 -341
  800. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +0 -341
  801. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +0 -341
  802. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +0 -341
  803. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +0 -341
  804. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +0 -341
  805. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +0 -341
  806. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +0 -341
  807. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +0 -341
  808. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +0 -341
  809. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +0 -341
  810. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +0 -341
  811. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  812. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +0 -341
  813. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  814. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +0 -341
  815. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  816. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +0 -341
  817. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  818. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +0 -341
  819. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  820. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +0 -341
  821. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  822. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +0 -341
  823. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  824. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +0 -341
  825. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  826. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +0 -341
  827. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  828. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +0 -341
  829. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +0 -341
  830. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +0 -341
  831. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  832. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +0 -341
  833. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  834. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +0 -341
  835. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  836. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +0 -341
  837. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  838. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +0 -341
  839. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  840. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +0 -341
  841. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  842. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +0 -341
  843. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  844. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +0 -341
  845. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  846. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +0 -341
  847. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  848. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +0 -341
  849. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +0 -341
  850. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +0 -339
  851. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +0 -339
  852. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +0 -339
  853. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +0 -339
  854. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +0 -339
  855. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +0 -339
  856. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +0 -339
  857. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +0 -339
  858. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +0 -339
  859. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +0 -339
  860. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +0 -339
  861. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +0 -339
  862. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +0 -339
  863. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +0 -339
  864. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +0 -339
  865. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +0 -339
  866. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +0 -339
  867. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +0 -339
  868. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +0 -337
  869. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +0 -337
  870. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +0 -337
  871. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +0 -337
  872. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +0 -337
  873. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +0 -339
  874. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +0 -337
  875. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +0 -337
  876. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +0 -337
  877. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +0 -338
  878. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +0 -336
  879. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +0 -337
  880. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +0 -337
  881. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +0 -337
  882. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +0 -337
  883. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +0 -337
  884. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +0 -337
  885. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +0 -337
  886. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +0 -337
  887. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +0 -337
  888. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +0 -337
  889. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +0 -337
  890. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +0 -337
  891. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +0 -337
  892. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +0 -337
  893. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +0 -337
  894. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +0 -337
  895. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +0 -337
  896. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +0 -337
  897. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +0 -337
  898. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +0 -341
  899. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +0 -341
  900. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +0 -338
  901. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +0 -337
  902. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +0 -337
  903. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +0 -337
  904. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +0 -337
  905. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +0 -337
  906. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +0 -337
  907. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +0 -337
  908. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +0 -337
  909. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +0 -337
  910. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +0 -337
  911. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +0 -337
  912. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +0 -339
  913. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +0 -337
  914. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +0 -337
  915. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +0 -337
  916. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +0 -337
  917. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +0 -337
  918. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +0 -337
  919. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +0 -337
  920. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  921. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +0 -337
  922. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  923. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +0 -337
  924. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/stochastic.csv +0 -8761
  925. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/user-specified.csv +0 -8761
  926. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +0 -8761
  927. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_1bed.csv +0 -369
  928. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_2bed.csv +0 -465
  929. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_3bed.csv +0 -611
  930. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_4bed.csv +0 -685
  931. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_5bed.csv +0 -767
  932. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_1bed.csv +0 -637
  933. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_2bed.csv +0 -744
  934. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_3bed.csv +0 -929
  935. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_4bed.csv +0 -1044
  936. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_5bed.csv +0 -1250
  937. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_1bed.csv +0 -754
  938. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_2bed.csv +0 -961
  939. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_3bed.csv +0 -1102
  940. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_4bed.csv +0 -1293
  941. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_5bed.csv +0 -1508
  942. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_1bed.csv +0 -13097
  943. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_2bed.csv +0 -15977
  944. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_3bed.csv +0 -18624
  945. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_4bed.csv +0 -22075
  946. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_5bed.csv +0 -25005
  947. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_max_flows.csv +0 -6
  948. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +0 -2444
  949. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +0 -110
  950. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +0 -57
  951. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +0 -564
  952. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +0 -564
  953. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +0 -564
  954. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +0 -563
  955. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +0 -563
  956. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +0 -563
  957. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +0 -535
  958. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +0 -535
  959. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -576
  960. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +0 -563
  961. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +0 -564
  962. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +0 -563
  963. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +0 -563
  964. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +0 -563
  965. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +0 -563
  966. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +0 -563
  967. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +0 -563
  968. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +0 -547
  969. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +0 -544
  970. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +0 -547
  971. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +0 -563
  972. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +0 -448
  973. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +0 -614
  974. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +0 -611
  975. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +0 -551
  976. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +0 -473
  977. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +0 -489
  978. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +0 -760
  979. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +0 -759
  980. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +0 -761
  981. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +0 -759
  982. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +0 -563
  983. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +0 -460
  984. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +0 -560
  985. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +0 -921
  986. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +0 -921
  987. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -547
  988. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -547
  989. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +0 -921
  990. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +0 -569
  991. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +0 -407
  992. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +0 -563
  993. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +0 -563
  994. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +0 -563
  995. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +0 -563
  996. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +0 -570
  997. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +0 -563
  998. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +0 -563
  999. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +0 -466
  1000. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +0 -591
  1001. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +0 -563
  1002. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +0 -565
  1003. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +0 -576
  1004. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +0 -465
  1005. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +0 -563
  1006. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +0 -451
  1007. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +0 -551
  1008. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +0 -565
  1009. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +0 -563
  1010. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +0 -473
  1011. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +0 -563
  1012. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +0 -583
  1013. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +0 -563
  1014. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +0 -917
  1015. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +0 -561
  1016. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +0 -563
  1017. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +0 -563
  1018. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +0 -563
  1019. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +0 -1657
  1020. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +0 -1657
  1021. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +0 -432
  1022. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +0 -434
  1023. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +0 -591
  1024. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +0 -563
  1025. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +0 -563
  1026. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +0 -547
  1027. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +0 -563
  1028. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +0 -569
  1029. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +0 -569
  1030. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +0 -564
  1031. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -527
  1032. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +0 -571
  1033. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -532
  1034. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +0 -566
  1035. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -532
  1036. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +0 -576
  1037. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +0 -563
  1038. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +0 -563
  1039. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +0 -466
  1040. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +0 -466
  1041. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +0 -591
  1042. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +0 -563
  1043. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +0 -563
  1044. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +0 -563
  1045. data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +0 -130
@@ -104,19 +104,48 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
104
104
  _test_default_site_values(hpxml_default, HPXML::SiteTypeSuburban, HPXML::ShieldingNormal)
105
105
  end
106
106
 
107
+ def test_neighbor_buildings
108
+ # Test inputs not overridden by defaults
109
+ hpxml = _create_hpxml('base-misc-neighbor-shading.xml')
110
+ hpxml.neighbor_buildings[0].azimuth = 123
111
+ hpxml.neighbor_buildings[1].azimuth = 321
112
+ hpxml.walls[0].azimuth = 123
113
+ hpxml.walls[1].azimuth = 321
114
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
115
+ hpxml_default = _test_measure()
116
+ _test_default_neighbor_building_values(hpxml_default, [123, 321])
117
+
118
+ # Test defaults
119
+ hpxml.neighbor_buildings[0].azimuth = nil
120
+ hpxml.neighbor_buildings[1].azimuth = nil
121
+ hpxml.neighbor_buildings[0].orientation = HPXML::OrientationEast
122
+ hpxml.neighbor_buildings[1].orientation = HPXML::OrientationNorth
123
+ hpxml.walls[0].azimuth = 90
124
+ hpxml.walls[1].azimuth = 0
125
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
126
+ hpxml_default = _test_measure()
127
+ _test_default_neighbor_building_values(hpxml_default, [90, 0])
128
+ end
129
+
107
130
  def test_occupancy
108
131
  # Test inputs not overridden by defaults
109
132
  hpxml = _create_hpxml('base.xml')
110
133
  hpxml.building_occupancy.number_of_residents = 1
134
+ hpxml.building_occupancy.weekday_fractions = ConstantDaySchedule
135
+ hpxml.building_occupancy.weekend_fractions = ConstantDaySchedule
136
+ hpxml.building_occupancy.monthly_multipliers = ConstantMonthSchedule
111
137
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
112
138
  hpxml_default = _test_measure()
113
- _test_default_occupancy_values(hpxml_default, 1)
139
+ _test_default_occupancy_values(hpxml_default, 1, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
114
140
 
115
141
  # Test defaults
116
142
  hpxml.building_occupancy.number_of_residents = nil
143
+ hpxml.building_occupancy.weekday_fractions = nil
144
+ hpxml.building_occupancy.weekend_fractions = nil
145
+ hpxml.building_occupancy.monthly_multipliers = nil
117
146
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
118
147
  hpxml_default = _test_measure()
119
- _test_default_occupancy_values(hpxml_default, 3)
148
+ _test_default_occupancy_values(hpxml_default, 3, Schedule.OccupantsWeekdayFractions, Schedule.OccupantsWeekendFractions, Schedule.OccupantsMonthlyMultipliers)
120
149
  end
121
150
 
122
151
  def test_building_construction
@@ -145,12 +174,33 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
145
174
  hpxml_default = _test_measure()
146
175
  _test_default_building_construction_values(hpxml_default, 27000, 10, false, 2)
147
176
 
148
- # Test defaults w/ average ceiling height
177
+ # Test defaults w/ conditioned building volume
149
178
  hpxml.building_construction.conditioned_building_volume = 20000
150
179
  hpxml.building_construction.average_ceiling_height = nil
151
180
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
152
181
  hpxml_default = _test_measure()
153
182
  _test_default_building_construction_values(hpxml_default, 20000, 7.4, false, 2)
183
+
184
+ # Test defaults w/ infiltration volume
185
+ hpxml.building_construction.conditioned_building_volume = nil
186
+ hpxml.air_infiltration_measurements[0].infiltration_volume = 25650
187
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
188
+ hpxml_default = _test_measure()
189
+ _test_default_building_construction_values(hpxml_default, 21600, 8, false, 2)
190
+
191
+ # Test defaults w/ infiltration volume
192
+ hpxml.building_construction.conditioned_building_volume = nil
193
+ hpxml.air_infiltration_measurements[0].infiltration_volume = 18000
194
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
195
+ hpxml_default = _test_measure()
196
+ _test_default_building_construction_values(hpxml_default, 18000, 6.67, false, 2)
197
+
198
+ # Test defaults w/ conditioned crawlspace
199
+ hpxml = _create_hpxml('base-foundation-conditioned-crawlspace.xml')
200
+ hpxml.building_construction.conditioned_building_volume = nil
201
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
202
+ hpxml_default = _test_measure()
203
+ _test_default_building_construction_values(hpxml_default, 16200, 8, false, 2)
154
204
  end
155
205
 
156
206
  def test_infiltration
@@ -159,20 +209,27 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
159
209
  hpxml.air_infiltration_measurements[0].infiltration_volume = 25000
160
210
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
161
211
  hpxml_default = _test_measure()
162
- _test_default_infiltration_values(hpxml_default, 25000)
212
+ _test_default_infiltration_values(hpxml_default.air_infiltration_measurements[0], 25000)
163
213
 
164
214
  # Test defaults w/ conditioned basement
165
215
  hpxml.air_infiltration_measurements[0].infiltration_volume = nil
166
216
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
167
217
  hpxml_default = _test_measure()
168
- _test_default_infiltration_values(hpxml_default, 2700 * 8)
218
+ _test_default_infiltration_values(hpxml_default.air_infiltration_measurements[0], 2700 * 8)
169
219
 
170
220
  # Test defaults w/o conditioned basement
171
221
  hpxml = _create_hpxml('base-foundation-slab.xml')
172
222
  hpxml.air_infiltration_measurements[0].infiltration_volume = nil
173
223
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
174
224
  hpxml_default = _test_measure()
175
- _test_default_infiltration_values(hpxml_default, 1350 * 8)
225
+ _test_default_infiltration_values(hpxml_default.air_infiltration_measurements[0], 1350 * 8)
226
+
227
+ # Test defaults w/ conditioned crawlspace
228
+ hpxml = _create_hpxml('base-foundation-conditioned-crawlspace.xml')
229
+ hpxml.air_infiltration_measurements[0].infiltration_volume = nil
230
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
231
+ hpxml_default = _test_measure()
232
+ _test_default_infiltration_values(hpxml_default.air_infiltration_measurements[0], 1350 * 12)
176
233
  end
177
234
 
178
235
  def test_attics
@@ -181,13 +238,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
181
238
  hpxml.attics[0].vented_attic_sla = 0.001
182
239
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
183
240
  hpxml_default = _test_measure()
184
- _test_default_attic_values(hpxml_default, 0.001)
241
+ _test_default_attic_values(hpxml_default.attics[0], 0.001)
185
242
 
186
243
  # Test defaults
187
244
  hpxml.attics[0].vented_attic_sla = nil
188
245
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
189
246
  hpxml_default = _test_measure()
190
- _test_default_attic_values(hpxml_default, 1.0 / 300.0)
247
+ _test_default_attic_values(hpxml_default.attics[0], 1.0 / 300.0)
191
248
  end
192
249
 
193
250
  def test_foundations
@@ -196,13 +253,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
196
253
  hpxml.foundations[0].vented_crawlspace_sla = 0.001
197
254
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
198
255
  hpxml_default = _test_measure()
199
- _test_default_foundation_values(hpxml_default, 0.001)
256
+ _test_default_foundation_values(hpxml_default.foundations[0], 0.001)
200
257
 
201
258
  # Test defaults
202
259
  hpxml.foundations[0].vented_crawlspace_sla = nil
203
260
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
204
261
  hpxml_default = _test_measure()
205
- _test_default_foundation_values(hpxml_default, 1.0 / 150.0)
262
+ _test_default_foundation_values(hpxml_default.foundations[0], 1.0 / 150.0)
206
263
  end
207
264
 
208
265
  def test_roofs
@@ -212,26 +269,55 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
212
269
  hpxml.roofs[0].solar_absorptance = 0.77
213
270
  hpxml.roofs[0].roof_color = HPXML::ColorDark
214
271
  hpxml.roofs[0].emittance = 0.88
272
+ hpxml.roofs[0].interior_finish_type = HPXML::InteriorFinishPlaster
273
+ hpxml.roofs[0].interior_finish_thickness = 0.25
274
+ hpxml.roofs[0].azimuth = 123
275
+ hpxml.roofs[0].radiant_barrier_grade = 3
215
276
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
216
277
  hpxml_default = _test_measure()
217
- _test_default_roof_values(hpxml_default, HPXML::RoofTypeMetal, 0.77, HPXML::ColorDark, 0.88, true)
278
+ _test_default_roof_values(hpxml_default.roofs[0], HPXML::RoofTypeMetal, 0.77, HPXML::ColorDark, 0.88, true, 3, HPXML::InteriorFinishPlaster, 0.25, 123)
218
279
 
219
280
  # Test defaults w/ RoofColor
220
281
  hpxml.roofs[0].roof_type = nil
221
282
  hpxml.roofs[0].solar_absorptance = nil
222
283
  hpxml.roofs[0].roof_color = HPXML::ColorLight
223
284
  hpxml.roofs[0].emittance = nil
224
- hpxml.roofs[0].radiant_barrier = nil
285
+ hpxml.roofs[0].interior_finish_thickness = nil
286
+ hpxml.roofs[0].orientation = HPXML::OrientationNortheast
287
+ hpxml.roofs[0].azimuth = nil
288
+ hpxml.roofs[0].radiant_barrier_grade = nil
225
289
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
226
290
  hpxml_default = _test_measure()
227
- _test_default_roof_values(hpxml_default, HPXML::RoofTypeAsphaltShingles, 0.75, HPXML::ColorLight, 0.90, false)
291
+ _test_default_roof_values(hpxml_default.roofs[0], HPXML::RoofTypeAsphaltShingles, 0.75, HPXML::ColorLight, 0.90, true, 1, HPXML::InteriorFinishPlaster, 0.5, 45)
228
292
 
229
293
  # Test defaults w/ SolarAbsorptance
230
294
  hpxml.roofs[0].solar_absorptance = 0.99
231
295
  hpxml.roofs[0].roof_color = nil
296
+ hpxml.roofs[0].interior_finish_type = nil
297
+ hpxml.roofs[0].radiant_barrier = nil
298
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
299
+ hpxml_default = _test_measure()
300
+ _test_default_roof_values(hpxml_default.roofs[0], HPXML::RoofTypeAsphaltShingles, 0.99, HPXML::ColorDark, 0.90, false, nil, HPXML::InteriorFinishNone, nil, 45)
301
+
302
+ # Test defaults w/o RoofColor & SolarAbsorptance
303
+ hpxml.roofs[0].solar_absorptance = nil
304
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
305
+ hpxml_default = _test_measure()
306
+ _test_default_roof_values(hpxml_default.roofs[0], HPXML::RoofTypeAsphaltShingles, 0.85, HPXML::ColorMedium, 0.90, false, nil, HPXML::InteriorFinishNone, nil, 45)
307
+
308
+ # Test defaults w/ conditioned space
309
+ hpxml = _create_hpxml('base-atticroof-cathedral.xml')
310
+ hpxml.roofs[0].roof_type = nil
311
+ hpxml.roofs[0].solar_absorptance = nil
312
+ hpxml.roofs[0].roof_color = HPXML::ColorLight
313
+ hpxml.roofs[0].emittance = nil
314
+ hpxml.roofs[0].interior_finish_type = nil
315
+ hpxml.roofs[0].interior_finish_thickness = nil
316
+ hpxml.roofs[0].orientation = HPXML::OrientationNortheast
317
+ hpxml.roofs[0].azimuth = nil
232
318
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
233
319
  hpxml_default = _test_measure()
234
- _test_default_roof_values(hpxml_default, HPXML::RoofTypeAsphaltShingles, 0.99, HPXML::ColorDark, 0.90, false)
320
+ _test_default_roof_values(hpxml_default.roofs[0], HPXML::RoofTypeAsphaltShingles, 0.75, HPXML::ColorLight, 0.90, false, nil, HPXML::InteriorFinishGypsumBoard, 0.5, 45)
235
321
  end
236
322
 
237
323
  def test_rim_joists
@@ -241,25 +327,34 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
241
327
  hpxml.rim_joists[0].solar_absorptance = 0.55
242
328
  hpxml.rim_joists[0].color = HPXML::ColorLight
243
329
  hpxml.rim_joists[0].emittance = 0.88
330
+ hpxml.rim_joists[0].azimuth = 123
244
331
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
245
332
  hpxml_default = _test_measure()
246
- _test_default_rim_joist_values(hpxml_default, HPXML::SidingTypeBrick, 0.55, HPXML::ColorLight, 0.88)
333
+ _test_default_rim_joist_values(hpxml_default.rim_joists[0], HPXML::SidingTypeBrick, 0.55, HPXML::ColorLight, 0.88, 123)
247
334
 
248
335
  # Test defaults w/ Color
249
336
  hpxml.rim_joists[0].siding = nil
250
337
  hpxml.rim_joists[0].solar_absorptance = nil
251
338
  hpxml.rim_joists[0].color = HPXML::ColorDark
252
339
  hpxml.rim_joists[0].emittance = nil
340
+ hpxml.rim_joists[0].orientation = HPXML::OrientationNorthwest
341
+ hpxml.rim_joists[0].azimuth = nil
253
342
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
254
343
  hpxml_default = _test_measure()
255
- _test_default_rim_joist_values(hpxml_default, HPXML::SidingTypeWood, 0.95, HPXML::ColorDark, 0.90)
344
+ _test_default_rim_joist_values(hpxml_default.rim_joists[0], HPXML::SidingTypeWood, 0.95, HPXML::ColorDark, 0.90, 315)
256
345
 
257
346
  # Test defaults w/ SolarAbsorptance
258
347
  hpxml.rim_joists[0].solar_absorptance = 0.99
259
348
  hpxml.rim_joists[0].color = nil
260
349
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
261
350
  hpxml_default = _test_measure()
262
- _test_default_rim_joist_values(hpxml_default, HPXML::SidingTypeWood, 0.99, HPXML::ColorDark, 0.90)
351
+ _test_default_rim_joist_values(hpxml_default.rim_joists[0], HPXML::SidingTypeWood, 0.99, HPXML::ColorDark, 0.90, 315)
352
+
353
+ # Test defaults w/o Color & SolarAbsorptance
354
+ hpxml.rim_joists[0].solar_absorptance = nil
355
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
356
+ hpxml_default = _test_measure()
357
+ _test_default_rim_joist_values(hpxml_default.rim_joists[0], HPXML::SidingTypeWood, 0.7, HPXML::ColorMedium, 0.90, 315)
263
358
  end
264
359
 
265
360
  def test_walls
@@ -269,40 +364,130 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
269
364
  hpxml.walls[0].solar_absorptance = 0.66
270
365
  hpxml.walls[0].color = HPXML::ColorDark
271
366
  hpxml.walls[0].emittance = 0.88
367
+ hpxml.walls[0].interior_finish_type = HPXML::InteriorFinishWood
368
+ hpxml.walls[0].interior_finish_thickness = 0.75
369
+ hpxml.walls[0].azimuth = 123
272
370
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
273
371
  hpxml_default = _test_measure()
274
- _test_default_wall_values(hpxml_default, HPXML::SidingTypeFiberCement, 0.66, HPXML::ColorDark, 0.88)
372
+ _test_default_wall_values(hpxml_default.walls[0], HPXML::SidingTypeFiberCement, 0.66, HPXML::ColorDark, 0.88, HPXML::InteriorFinishWood, 0.75, 123)
275
373
 
276
- # Test defaults W/ Color
374
+ # Test defaults w/ Color
277
375
  hpxml.walls[0].siding = nil
278
376
  hpxml.walls[0].solar_absorptance = nil
279
377
  hpxml.walls[0].color = HPXML::ColorLight
280
378
  hpxml.walls[0].emittance = nil
379
+ hpxml.walls[0].interior_finish_type = HPXML::InteriorFinishWood
380
+ hpxml.walls[0].interior_finish_thickness = nil
381
+ hpxml.walls[0].orientation = HPXML::OrientationSouth
382
+ hpxml.walls[0].azimuth = nil
281
383
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
282
384
  hpxml_default = _test_measure()
283
- _test_default_wall_values(hpxml_default, HPXML::SidingTypeWood, 0.5, HPXML::ColorLight, 0.90)
385
+ _test_default_wall_values(hpxml_default.walls[0], HPXML::SidingTypeWood, 0.5, HPXML::ColorLight, 0.90, HPXML::InteriorFinishWood, 0.5, 180)
284
386
 
285
- # Test defaults W/ SolarAbsorptance
387
+ # Test defaults w/ SolarAbsorptance
286
388
  hpxml.walls[0].solar_absorptance = 0.99
287
389
  hpxml.walls[0].color = nil
390
+ hpxml.walls[0].interior_finish_type = nil
288
391
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
289
392
  hpxml_default = _test_measure()
290
- _test_default_wall_values(hpxml_default, HPXML::SidingTypeWood, 0.99, HPXML::ColorDark, 0.90)
393
+ _test_default_wall_values(hpxml_default.walls[0], HPXML::SidingTypeWood, 0.99, HPXML::ColorDark, 0.90, HPXML::InteriorFinishGypsumBoard, 0.5, 180)
394
+
395
+ # Test defaults w/o Color & SolarAbsorptance
396
+ hpxml.walls[0].solar_absorptance = nil
397
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
398
+ hpxml_default = _test_measure()
399
+ _test_default_wall_values(hpxml_default.walls[0], HPXML::SidingTypeWood, 0.7, HPXML::ColorMedium, 0.90, HPXML::InteriorFinishGypsumBoard, 0.5, 180)
400
+
401
+ # Test defaults w/ unconditioned space
402
+ hpxml.walls[1].siding = nil
403
+ hpxml.walls[1].solar_absorptance = nil
404
+ hpxml.walls[1].color = HPXML::ColorLight
405
+ hpxml.walls[1].emittance = nil
406
+ hpxml.walls[1].interior_finish_type = nil
407
+ hpxml.walls[1].interior_finish_thickness = nil
408
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
409
+ hpxml_default = _test_measure()
410
+ _test_default_wall_values(hpxml_default.walls[1], HPXML::SidingTypeWood, 0.5, HPXML::ColorLight, 0.90, HPXML::InteriorFinishNone, nil, 180)
291
411
  end
292
412
 
293
413
  def test_foundation_walls
294
414
  # Test inputs not overridden by defaults
295
415
  hpxml = _create_hpxml('base.xml')
296
416
  hpxml.foundation_walls[0].thickness = 7.0
417
+ hpxml.foundation_walls[0].interior_finish_type = HPXML::InteriorFinishGypsumCompositeBoard
418
+ hpxml.foundation_walls[0].interior_finish_thickness = 0.625
419
+ hpxml.foundation_walls[0].azimuth = 123
420
+ hpxml.foundation_walls[0].area = 789
421
+ hpxml.foundation_walls[0].insulation_interior_distance_to_top = 0.5
422
+ hpxml.foundation_walls[0].insulation_interior_distance_to_bottom = 7.75
423
+ hpxml.foundation_walls[0].insulation_exterior_distance_to_top = 0.75
424
+ hpxml.foundation_walls[0].insulation_exterior_distance_to_bottom = 7.5
425
+ hpxml.foundation_walls[0].type = HPXML::FoundationWallTypeConcreteBlock
297
426
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
298
427
  hpxml_default = _test_measure()
299
- _test_default_foundation_wall_values(hpxml_default, 7.0)
428
+ _test_default_foundation_wall_values(hpxml_default.foundation_walls[0], 7.0, HPXML::InteriorFinishGypsumCompositeBoard, 0.625, 123,
429
+ 789, 0.5, 7.75, 0.75, 7.5, HPXML::FoundationWallTypeConcreteBlock)
300
430
 
301
431
  # Test defaults
302
432
  hpxml.foundation_walls[0].thickness = nil
433
+ hpxml.foundation_walls[0].interior_finish_type = nil
434
+ hpxml.foundation_walls[0].interior_finish_thickness = nil
435
+ hpxml.foundation_walls[0].orientation = HPXML::OrientationSoutheast
436
+ hpxml.foundation_walls[0].azimuth = nil
437
+ hpxml.foundation_walls[0].area = nil
438
+ hpxml.foundation_walls[0].length = 100
439
+ hpxml.foundation_walls[0].insulation_interior_distance_to_bottom = nil
440
+ hpxml.foundation_walls[0].insulation_exterior_distance_to_bottom = nil
441
+ hpxml.foundation_walls[0].type = nil
442
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
443
+ hpxml_default = _test_measure()
444
+ _test_default_foundation_wall_values(hpxml_default.foundation_walls[0], 8.0, HPXML::InteriorFinishGypsumBoard, 0.5, 135,
445
+ 800, 0.5, 8.0, 0.75, 8.0, HPXML::FoundationWallTypeSolidConcrete)
446
+
447
+ # Test defaults w/ unconditioned surfaces
448
+ hpxml = _create_hpxml('base-foundation-unconditioned-basement.xml')
449
+ hpxml.foundation_walls[0].thickness = nil
450
+ hpxml.foundation_walls[0].interior_finish_type = nil
451
+ hpxml.foundation_walls[0].interior_finish_thickness = nil
452
+ hpxml.foundation_walls[0].orientation = HPXML::OrientationSoutheast
453
+ hpxml.foundation_walls[0].azimuth = nil
454
+ hpxml.foundation_walls[0].area = nil
455
+ hpxml.foundation_walls[0].length = 100
456
+ hpxml.foundation_walls[0].height = 10
457
+ hpxml.foundation_walls[0].insulation_interior_distance_to_top = nil
458
+ hpxml.foundation_walls[0].insulation_interior_distance_to_bottom = nil
459
+ hpxml.foundation_walls[0].insulation_exterior_distance_to_top = nil
460
+ hpxml.foundation_walls[0].insulation_exterior_distance_to_bottom = nil
461
+ hpxml.foundation_walls[0].type = nil
462
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
463
+ hpxml_default = _test_measure()
464
+ _test_default_foundation_wall_values(hpxml_default.foundation_walls[0], 8.0, HPXML::InteriorFinishNone, nil, 135,
465
+ 1000, 0.0, 10.0, 0.0, 10.0, HPXML::FoundationWallTypeSolidConcrete)
466
+ end
467
+
468
+ def test_frame_floors
469
+ # Test inputs not overridden by defaults
470
+ hpxml = _create_hpxml('base.xml')
471
+ hpxml.frame_floors[0].interior_finish_type = HPXML::InteriorFinishWood
472
+ hpxml.frame_floors[0].interior_finish_thickness = 0.375
473
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
474
+ hpxml_default = _test_measure()
475
+ _test_default_frame_floor_values(hpxml_default.frame_floors[0], HPXML::InteriorFinishWood, 0.375)
476
+
477
+ # Test defaults w/ ceiling
478
+ hpxml.frame_floors[0].interior_finish_type = nil
479
+ hpxml.frame_floors[0].interior_finish_thickness = nil
480
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
481
+ hpxml_default = _test_measure()
482
+ _test_default_frame_floor_values(hpxml_default.frame_floors[0], HPXML::InteriorFinishGypsumBoard, 0.5)
483
+
484
+ # Test defaults w/ floor
485
+ hpxml = _create_hpxml('base-foundation-vented-crawlspace.xml')
486
+ hpxml.frame_floors[1].interior_finish_type = nil
487
+ hpxml.frame_floors[1].interior_finish_thickness = nil
303
488
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
304
489
  hpxml_default = _test_measure()
305
- _test_default_foundation_wall_values(hpxml_default, 8.0)
490
+ _test_default_frame_floor_values(hpxml_default.frame_floors[1], HPXML::InteriorFinishNone, nil)
306
491
  end
307
492
 
308
493
  def test_slabs
@@ -313,7 +498,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
313
498
  hpxml.slabs[0].carpet_fraction = 0.5
314
499
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
315
500
  hpxml_default = _test_measure()
316
- _test_default_slab_values(hpxml_default, 7.0, 1.1, 0.5)
501
+ _test_default_slab_values(hpxml_default.slabs[0], 7.0, 1.1, 0.5)
317
502
 
318
503
  # Test defaults w/ conditioned basement
319
504
  hpxml.slabs[0].thickness = nil
@@ -321,7 +506,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
321
506
  hpxml.slabs[0].carpet_fraction = nil
322
507
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
323
508
  hpxml_default = _test_measure()
324
- _test_default_slab_values(hpxml_default, 4.0, 2.0, 0.8)
509
+ _test_default_slab_values(hpxml_default.slabs[0], 4.0, 2.0, 0.8)
325
510
 
326
511
  # Test defaults w/ crawlspace
327
512
  hpxml = _create_hpxml('base-foundation-unvented-crawlspace.xml')
@@ -330,7 +515,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
330
515
  hpxml.slabs[0].carpet_fraction = nil
331
516
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
332
517
  hpxml_default = _test_measure()
333
- _test_default_slab_values(hpxml_default, 0.0, 0.0, 0.0)
518
+ _test_default_slab_values(hpxml_default.slabs[0], 0.0, 0.0, 0.0)
334
519
  end
335
520
 
336
521
  def test_windows
@@ -342,11 +527,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
342
527
  window.exterior_shading_factor_winter = 0.55
343
528
  window.interior_shading_factor_summer = 0.66
344
529
  window.interior_shading_factor_winter = 0.77
530
+ window.azimuth = 123
345
531
  end
346
532
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
347
533
  hpxml_default = _test_measure()
348
534
  n_windows = hpxml_default.windows.size
349
- _test_default_window_values(hpxml_default, [0.44] * n_windows, [0.55] * n_windows, [0.66] * n_windows, [0.77] * n_windows, [0.5] * n_windows)
535
+ _test_default_window_values(hpxml_default, [0.44] * n_windows, [0.55] * n_windows, [0.66] * n_windows, [0.77] * n_windows, [0.5] * n_windows, [123] * n_windows)
350
536
 
351
537
  # Test defaults
352
538
  hpxml.windows.each do |window|
@@ -355,11 +541,54 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
355
541
  window.exterior_shading_factor_winter = nil
356
542
  window.interior_shading_factor_summer = nil
357
543
  window.interior_shading_factor_winter = nil
544
+ window.orientation = HPXML::OrientationSouthwest
545
+ window.azimuth = nil
358
546
  end
359
547
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
360
548
  hpxml_default = _test_measure()
361
549
  n_windows = hpxml_default.windows.size
362
- _test_default_window_values(hpxml_default, [1.0] * n_windows, [1.0] * n_windows, [0.7] * n_windows, [0.85] * n_windows, [0.67] * n_windows)
550
+ _test_default_window_values(hpxml_default, [1.0] * n_windows, [1.0] * n_windows, [0.7] * n_windows, [0.85] * n_windows, [0.67] * n_windows, [225] * n_windows)
551
+ end
552
+
553
+ def test_windows_properties
554
+ # [frame_type, thermal_break, glass_layers, glass_type, gas_fill] => [ufactor, shgc]
555
+ tests = { [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersSinglePane, nil, nil] => [1.27, 0.75],
556
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersSinglePane, nil, nil] => [0.89, 0.64],
557
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersSinglePane, HPXML::WindowGlassTypeTintedReflective, nil] => [1.27, 0.64],
558
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersSinglePane, HPXML::WindowGlassTypeTintedReflective, nil] => [0.89, 0.54],
559
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersDoublePane, nil, HPXML::WindowGasAir] => [0.81, 0.67],
560
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, nil, HPXML::WindowGasAir] => [0.60, 0.67],
561
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, nil, HPXML::WindowGasAir] => [0.51, 0.56],
562
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGasAir] => [0.81, 0.55],
563
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGasAir] => [0.60, 0.55],
564
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGasAir] => [0.51, 0.46],
565
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasAir] => [0.42, 0.52],
566
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasArgon] => [0.47, 0.62],
567
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasArgon] => [0.39, 0.52],
568
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasAir] => [0.67, 0.37],
569
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasAir] => [0.47, 0.37],
570
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasAir] => [0.39, 0.31],
571
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasArgon] => [0.36, 0.31],
572
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersTriplePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasArgon] => [0.27, 0.31],
573
+ [nil, nil, HPXML::WindowLayersGlassBlock, nil, nil] => [0.60, 0.60] }
574
+ tests.each do |k, v|
575
+ frame_type, thermal_break, glass_layers, glass_type, gas_fill = k
576
+ ufactor, shgc = v
577
+
578
+ hpxml = _create_hpxml('base.xml')
579
+ hpxml.windows[0].ufactor = nil
580
+ hpxml.windows[0].shgc = nil
581
+ hpxml.windows[0].frame_type = frame_type
582
+ hpxml.windows[0].thermal_break = thermal_break
583
+ hpxml.windows[0].glass_layers = glass_layers
584
+ hpxml.windows[0].glass_type = glass_type
585
+ hpxml.windows[0].gas_fill = gas_fill
586
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
587
+ hpxml_default = _test_measure()
588
+
589
+ assert_equal(ufactor, hpxml_default.windows[0].ufactor)
590
+ assert_equal(shgc, hpxml_default.windows[0].shgc)
591
+ end
363
592
  end
364
593
 
365
594
  def test_skylights
@@ -370,11 +599,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
370
599
  skylight.exterior_shading_factor_winter = 0.55
371
600
  skylight.interior_shading_factor_summer = 0.66
372
601
  skylight.interior_shading_factor_winter = 0.77
602
+ skylight.azimuth = 123
373
603
  end
374
604
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
375
605
  hpxml_default = _test_measure()
376
606
  n_skylights = hpxml_default.skylights.size
377
- _test_default_skylight_values(hpxml_default, [0.44] * n_skylights, [0.55] * n_skylights, [0.66] * n_skylights, [0.77] * n_skylights)
607
+ _test_default_skylight_values(hpxml_default, [0.44] * n_skylights, [0.55] * n_skylights, [0.66] * n_skylights, [0.77] * n_skylights, [123] * n_skylights)
378
608
 
379
609
  # Test defaults
380
610
  hpxml.skylights.each do |skylight|
@@ -382,11 +612,113 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
382
612
  skylight.exterior_shading_factor_winter = nil
383
613
  skylight.interior_shading_factor_summer = nil
384
614
  skylight.interior_shading_factor_winter = nil
615
+ skylight.orientation = HPXML::OrientationWest
616
+ skylight.azimuth = nil
385
617
  end
386
618
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
387
619
  hpxml_default = _test_measure()
388
620
  n_skylights = hpxml_default.skylights.size
389
- _test_default_skylight_values(hpxml_default, [1.0] * n_skylights, [1.0] * n_skylights, [1.0] * n_skylights, [1.0] * n_skylights)
621
+ _test_default_skylight_values(hpxml_default, [1.0] * n_skylights, [1.0] * n_skylights, [1.0] * n_skylights, [1.0] * n_skylights, [270] * n_skylights)
622
+ end
623
+
624
+ def test_skylights_properties
625
+ # [frame_type, thermal_break, glass_layers, glass_type, gas_fill] => [ufactor, shgc]
626
+ tests = { [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersSinglePane, nil, nil] => [1.98, 0.75],
627
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersSinglePane, nil, nil] => [1.47, 0.64],
628
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersSinglePane, HPXML::WindowGlassTypeTintedReflective, nil] => [1.98, 0.64],
629
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersSinglePane, HPXML::WindowGlassTypeTintedReflective, nil] => [1.47, 0.54],
630
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersDoublePane, nil, HPXML::WindowGasAir] => [1.30, 0.67],
631
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, nil, HPXML::WindowGasAir] => [1.10, 0.67],
632
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, nil, HPXML::WindowGasAir] => [0.84, 0.56],
633
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGasAir] => [1.30, 0.55],
634
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGasAir] => [1.10, 0.55],
635
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeTintedReflective, HPXML::WindowGasAir] => [0.84, 0.46],
636
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasAir] => [0.74, 0.52],
637
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasArgon] => [0.95, 0.62],
638
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasArgon] => [0.68, 0.52],
639
+ [HPXML::WindowFrameTypeAluminum, false, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasAir] => [1.17, 0.37],
640
+ [HPXML::WindowFrameTypeAluminum, true, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasAir] => [0.98, 0.37],
641
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasAir] => [0.71, 0.31],
642
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersDoublePane, HPXML::WindowGlassTypeReflective, HPXML::WindowGasArgon] => [0.65, 0.31],
643
+ [HPXML::WindowFrameTypeWood, nil, HPXML::WindowLayersTriplePane, HPXML::WindowGlassTypeLowE, HPXML::WindowGasArgon] => [0.47, 0.31],
644
+ [nil, nil, HPXML::WindowLayersGlassBlock, nil, nil] => [0.60, 0.60] }
645
+ tests.each do |k, v|
646
+ frame_type, thermal_break, glass_layers, glass_type, gas_fill = k
647
+ ufactor, shgc = v
648
+
649
+ hpxml = _create_hpxml('base-enclosure-skylights.xml')
650
+ hpxml.skylights[0].ufactor = nil
651
+ hpxml.skylights[0].shgc = nil
652
+ hpxml.skylights[0].frame_type = frame_type
653
+ hpxml.skylights[0].thermal_break = thermal_break
654
+ hpxml.skylights[0].glass_layers = glass_layers
655
+ hpxml.skylights[0].glass_type = glass_type
656
+ hpxml.skylights[0].gas_fill = gas_fill
657
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
658
+ hpxml_default = _test_measure()
659
+
660
+ assert_equal(ufactor, hpxml_default.skylights[0].ufactor)
661
+ assert_equal(shgc, hpxml_default.skylights[0].shgc)
662
+ end
663
+ end
664
+
665
+ def test_doors
666
+ # Test inputs not overridden by defaults
667
+ hpxml = _create_hpxml('base.xml')
668
+ hpxml.doors.each_with_index do |door, i|
669
+ door.azimuth = 35 * (i + 1)
670
+ end
671
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
672
+ hpxml_default = _test_measure()
673
+ _test_default_door_values(hpxml_default, [35, 70])
674
+
675
+ # Test defaults w/ AttachedToWall azimuth
676
+ hpxml.walls[0].azimuth = 89
677
+ hpxml.doors.each do |door|
678
+ door.azimuth = nil
679
+ end
680
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
681
+ hpxml_default = _test_measure()
682
+ _test_default_door_values(hpxml_default, [89, 89])
683
+
684
+ # Test defaults w/o AttachedToWall azimuth
685
+ hpxml.walls[0].azimuth = nil
686
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
687
+ hpxml_default = _test_measure()
688
+ _test_default_door_values(hpxml_default, [0, 0])
689
+
690
+ # Test defaults w/ Orientation
691
+ hpxml.doors.each do |door|
692
+ door.orientation = HPXML::OrientationEast
693
+ end
694
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
695
+ hpxml_default = _test_measure()
696
+ _test_default_door_values(hpxml_default, [90, 90])
697
+ end
698
+
699
+ def test_thermal_mass
700
+ # Test inputs not overridden by defaults
701
+ hpxml = _create_hpxml('base-enclosure-thermal-mass.xml')
702
+ hpxml.partition_wall_mass.area_fraction = 0.5
703
+ hpxml.partition_wall_mass.interior_finish_thickness = 0.75
704
+ hpxml.partition_wall_mass.interior_finish_type = HPXML::InteriorFinishWood
705
+ hpxml.furniture_mass.area_fraction = 0.75
706
+ hpxml.furniture_mass.type = HPXML::FurnitureMassTypeHeavyWeight
707
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
708
+ hpxml_default = _test_measure()
709
+ _test_default_partition_wall_mass_values(hpxml_default.partition_wall_mass, 0.5, HPXML::InteriorFinishWood, 0.75)
710
+ _test_default_furniture_mass_values(hpxml_default.furniture_mass, 0.75, HPXML::FurnitureMassTypeHeavyWeight)
711
+
712
+ # Test defaults
713
+ hpxml.partition_wall_mass.area_fraction = nil
714
+ hpxml.partition_wall_mass.interior_finish_thickness = nil
715
+ hpxml.partition_wall_mass.interior_finish_type = nil
716
+ hpxml.furniture_mass.area_fraction = nil
717
+ hpxml.furniture_mass.type = nil
718
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
719
+ hpxml_default = _test_measure()
720
+ _test_default_partition_wall_mass_values(hpxml_default.partition_wall_mass, 1.0, HPXML::InteriorFinishGypsumBoard, 0.5)
721
+ _test_default_furniture_mass_values(hpxml_default.furniture_mass, 0.4, HPXML::FurnitureMassTypeLightWeight)
390
722
  end
391
723
 
392
724
  def test_central_air_conditioners
@@ -398,9 +730,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
398
730
  hpxml.cooling_systems[0].charge_defect_ratio = -0.11
399
731
  hpxml.cooling_systems[0].airflow_defect_ratio = -0.22
400
732
  hpxml.cooling_systems[0].cooling_capacity = 12345
733
+ hpxml.cooling_systems[0].cooling_efficiency_seer = 12.5
734
+ hpxml.cooling_systems[0].year_installed = 2010
401
735
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
402
736
  hpxml_default = _test_measure()
403
- _test_default_central_air_conditioner_values(hpxml_default, 0.88, HPXML::HVACCompressorTypeVariableSpeed, 0.66, -0.11, -0.22, 12345)
737
+ _test_default_central_air_conditioner_values(hpxml_default.cooling_systems[0], 0.88, HPXML::HVACCompressorTypeVariableSpeed, 0.66, -0.11, -0.22, 12345, 12.5)
404
738
 
405
739
  # Test defaults
406
740
  hpxml.cooling_systems[0].cooling_shr = nil
@@ -409,9 +743,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
409
743
  hpxml.cooling_systems[0].charge_defect_ratio = nil
410
744
  hpxml.cooling_systems[0].airflow_defect_ratio = nil
411
745
  hpxml.cooling_systems[0].cooling_capacity = nil
746
+ hpxml.cooling_systems[0].cooling_efficiency_seer = nil
747
+ hpxml.cooling_systems[0].year_installed = 2010
412
748
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
413
749
  hpxml_default = _test_measure()
414
- _test_default_central_air_conditioner_values(hpxml_default, 0.73, HPXML::HVACCompressorTypeSingleStage, 0.5, 0, 0, nil)
750
+ _test_default_central_air_conditioner_values(hpxml_default.cooling_systems[0], 0.73, HPXML::HVACCompressorTypeSingleStage, 0.375, 0, 0, nil, 13.76)
415
751
  end
416
752
 
417
753
  def test_room_air_conditioners
@@ -419,16 +755,20 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
419
755
  hpxml = _create_hpxml('base-hvac-room-ac-only.xml')
420
756
  hpxml.cooling_systems[0].cooling_shr = 0.88
421
757
  hpxml.cooling_systems[0].cooling_capacity = 12345
758
+ hpxml.cooling_systems[0].cooling_efficiency_eer = 12.5
759
+ hpxml.cooling_systems[0].year_installed = 2010
422
760
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
423
761
  hpxml_default = _test_measure()
424
- _test_default_room_air_conditioner_values(hpxml_default, 0.88, 12345)
762
+ _test_default_room_air_conditioner_ptac_values(hpxml_default.cooling_systems[0], 0.88, 12345, 12.5)
425
763
 
426
764
  # Test defaults
427
765
  hpxml.cooling_systems[0].cooling_shr = nil
428
766
  hpxml.cooling_systems[0].cooling_capacity = nil
767
+ hpxml.cooling_systems[0].cooling_efficiency_eer = nil
768
+ hpxml.cooling_systems[0].year_installed = 2010
429
769
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
430
770
  hpxml_default = _test_measure()
431
- _test_default_room_air_conditioner_values(hpxml_default, 0.65, nil)
771
+ _test_default_room_air_conditioner_ptac_values(hpxml_default.cooling_systems[0], 0.65, nil, 9.93)
432
772
  end
433
773
 
434
774
  def test_evaporative_coolers
@@ -437,13 +777,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
437
777
  hpxml.cooling_systems[0].cooling_capacity = 12345
438
778
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
439
779
  hpxml_default = _test_measure()
440
- _test_default_evap_cooler_values(hpxml_default, 12345)
780
+ _test_default_evap_cooler_values(hpxml_default.cooling_systems[0], 12345)
441
781
 
442
782
  # Test defaults
443
783
  hpxml.cooling_systems[0].cooling_capacity = nil
444
784
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
445
785
  hpxml_default = _test_measure()
446
- _test_default_evap_cooler_values(hpxml_default, nil)
786
+ _test_default_evap_cooler_values(hpxml_default.cooling_systems[0], nil)
447
787
  end
448
788
 
449
789
  def test_mini_split_air_conditioners
@@ -456,7 +796,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
456
796
  hpxml.cooling_systems[0].cooling_capacity = 12345
457
797
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
458
798
  hpxml_default = _test_measure()
459
- _test_default_mini_split_air_conditioner_values(hpxml_default, 0.78, 0.66, -0.11, -0.22, 12345)
799
+ _test_default_mini_split_air_conditioner_values(hpxml_default.cooling_systems[0], 0.78, 0.66, -0.11, -0.22, 12345)
460
800
 
461
801
  # Test defaults
462
802
  hpxml.cooling_systems[0].cooling_shr = nil
@@ -466,7 +806,52 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
466
806
  hpxml.cooling_systems[0].cooling_capacity = nil
467
807
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
468
808
  hpxml_default = _test_measure()
469
- _test_default_mini_split_air_conditioner_values(hpxml_default, 0.73, 0.18, 0, 0, nil)
809
+ _test_default_mini_split_air_conditioner_values(hpxml_default.cooling_systems[0], 0.73, 0.18, 0, 0, nil)
810
+
811
+ # Test defaults w/ ductless
812
+ hpxml.cooling_systems[0].distribution_system.delete
813
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
814
+ hpxml_default = _test_measure()
815
+ _test_default_mini_split_air_conditioner_values(hpxml_default.cooling_systems[0], 0.73, 0.07, 0, 0, nil)
816
+ end
817
+
818
+ def test_ptac
819
+ # Test inputs not overridden by defaults
820
+ hpxml = _create_hpxml('base-hvac-ptac-with-heating.xml')
821
+ hpxml.cooling_systems[0].cooling_shr = 0.75
822
+ hpxml.cooling_systems[0].cooling_capacity = 12345
823
+ hpxml.cooling_systems[0].cooling_efficiency_eer = 12.5
824
+ hpxml.heating_systems[0].heating_efficiency_percent = 0.98
825
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
826
+ hpxml_default = _test_measure()
827
+ _test_default_room_air_conditioner_ptac_values(hpxml_default.cooling_systems[0], 0.75, 12345, 12.5)
828
+ _test_default_elec_resistance(hpxml_default.heating_systems[0], 0.98)
829
+
830
+ # Test defaults
831
+ hpxml.cooling_systems[0].cooling_shr = nil
832
+ hpxml.cooling_systems[0].cooling_capacity = nil
833
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
834
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
835
+ hpxml_default = _test_measure()
836
+ _test_default_room_air_conditioner_ptac_values(hpxml_default.cooling_systems[0], 0.65, nil, 12.5)
837
+ _test_default_elec_resistance(hpxml_default.heating_systems[0], 1.0)
838
+ end
839
+
840
+ def test_elec_resistance
841
+ # Test inputs not overridden by defaults
842
+ hpxml = _create_hpxml('base-hvac-elec-resistance-only.xml')
843
+ hpxml.heating_systems[0].heating_efficiency_percent = 0.98
844
+ hpxml.heating_systems[0].year_installed = 2010
845
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
846
+ hpxml_default = _test_measure()
847
+ _test_default_elec_resistance(hpxml_default.heating_systems[0], 0.98)
848
+
849
+ # Test defaults
850
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
851
+ hpxml.heating_systems[0].year_installed = 2010
852
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
853
+ hpxml_default = _test_measure()
854
+ _test_default_elec_resistance(hpxml_default.heating_systems[0], 1.0)
470
855
  end
471
856
 
472
857
  def test_furnaces
@@ -475,17 +860,21 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
475
860
  hpxml.heating_systems[0].fan_watts_per_cfm = 0.66
476
861
  hpxml.heating_systems[0].airflow_defect_ratio = -0.22
477
862
  hpxml.heating_systems[0].heating_capacity = 12345
863
+ hpxml.heating_systems[0].heating_efficiency_afue = 0.85
864
+ hpxml.heating_systems[0].year_installed = 2010
478
865
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
479
866
  hpxml_default = _test_measure()
480
- _test_default_furnace_values(hpxml_default, 0.66, -0.22, 12345)
867
+ _test_default_furnace_values(hpxml_default.heating_systems[0], 0.66, -0.22, 12345, 0.85)
481
868
 
482
869
  # Test defaults
483
870
  hpxml.heating_systems[0].fan_watts_per_cfm = nil
484
871
  hpxml.heating_systems[0].airflow_defect_ratio = nil
485
872
  hpxml.heating_systems[0].heating_capacity = nil
873
+ hpxml.heating_systems[0].heating_efficiency_afue = nil
874
+ hpxml.heating_systems[0].year_installed = 2010
486
875
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
487
876
  hpxml_default = _test_measure()
488
- _test_default_furnace_values(hpxml_default, 0.375, 0, nil)
877
+ _test_default_furnace_values(hpxml_default.heating_systems[0], 0.5, 0, nil, 0.848)
489
878
 
490
879
  # Test defaults w/ gravity distribution system
491
880
  hpxml = _create_hpxml('base-hvac-furnace-gas-only.xml')
@@ -493,9 +882,10 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
493
882
  hpxml.heating_systems[0].fan_watts_per_cfm = nil
494
883
  hpxml.heating_systems[0].airflow_defect_ratio = nil
495
884
  hpxml.heating_systems[0].heating_capacity = nil
885
+ hpxml.heating_systems[0].year_installed = 2010
496
886
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
497
887
  hpxml_default = _test_measure()
498
- _test_default_furnace_values(hpxml_default, 0.0, 0, nil)
888
+ _test_default_furnace_values(hpxml_default.heating_systems[0], 0.0, 0, nil, 0.92)
499
889
  end
500
890
 
501
891
  def test_wall_furnaces
@@ -503,16 +893,20 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
503
893
  hpxml = _create_hpxml('base-hvac-wall-furnace-elec-only.xml')
504
894
  hpxml.heating_systems[0].fan_watts = 22
505
895
  hpxml.heating_systems[0].heating_capacity = 12345
896
+ hpxml.heating_systems[0].heating_efficiency_afue = 0.60
897
+ hpxml.heating_systems[0].year_installed = 2010
506
898
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
507
899
  hpxml_default = _test_measure()
508
- _test_default_wall_furnace_values(hpxml_default, 22, 12345)
900
+ _test_default_wall_furnace_values(hpxml_default.heating_systems[0], 22, 12345, 0.60)
509
901
 
510
902
  # Test defaults
511
903
  hpxml.heating_systems[0].fan_watts = nil
512
904
  hpxml.heating_systems[0].heating_capacity = nil
905
+ hpxml.heating_systems[0].heating_efficiency_afue = nil
906
+ hpxml.heating_systems[0].year_installed = 2010
513
907
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
514
908
  hpxml_default = _test_measure()
515
- _test_default_wall_furnace_values(hpxml_default, 0, nil)
909
+ _test_default_wall_furnace_values(hpxml_default.heating_systems[0], 0, nil, 0.98)
516
910
  end
517
911
 
518
912
  def test_floor_furnaces
@@ -520,15 +914,19 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
520
914
  hpxml = _create_hpxml('base-hvac-floor-furnace-propane-only.xml')
521
915
  hpxml.heating_systems[0].fan_watts = 22
522
916
  hpxml.heating_systems[0].heating_capacity = 12345
917
+ hpxml.heating_systems[0].heating_efficiency_afue = 0.66
918
+ hpxml.heating_systems[0].year_installed = 1980
523
919
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
524
920
  hpxml_default = _test_measure()
525
- _test_default_floor_furnace_values(hpxml_default, 22, 12345)
921
+ _test_default_floor_furnace_values(hpxml_default.heating_systems[0], 22, 12345, 0.66)
526
922
 
527
923
  # Test defaults
528
924
  hpxml.heating_systems[0].fan_watts = nil
925
+ hpxml.heating_systems[0].heating_efficiency_afue = nil
926
+ hpxml.heating_systems[0].year_installed = 1980
529
927
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
530
928
  hpxml_default = _test_measure()
531
- _test_default_floor_furnace_values(hpxml_default, 0, nil)
929
+ _test_default_floor_furnace_values(hpxml_default.heating_systems[0], 0, nil, 0.60)
532
930
  end
533
931
 
534
932
  def test_boilers
@@ -536,30 +934,38 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
536
934
  hpxml = _create_hpxml('base-hvac-boiler-gas-only.xml')
537
935
  hpxml.heating_systems[0].electric_auxiliary_energy = 99.9
538
936
  hpxml.heating_systems[0].heating_capacity = 12345
937
+ hpxml.heating_systems[0].heating_efficiency_afue = 0.85
938
+ hpxml.heating_systems[0].year_installed = 2010
539
939
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
540
940
  hpxml_default = _test_measure()
541
- _test_default_boiler_values(hpxml_default, 99.9, 12345)
941
+ _test_default_boiler_values(hpxml_default.heating_systems[0], 99.9, 12345, 0.85)
542
942
 
543
943
  # Test defaults w/ in-unit boiler
544
944
  hpxml.heating_systems[0].electric_auxiliary_energy = nil
545
945
  hpxml.heating_systems[0].heating_capacity = nil
946
+ hpxml.heating_systems[0].heating_efficiency_afue = nil
947
+ hpxml.heating_systems[0].year_installed = 2010
546
948
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
547
949
  hpxml_default = _test_measure()
548
- _test_default_boiler_values(hpxml_default, 170.0, nil)
950
+ _test_default_boiler_values(hpxml_default.heating_systems[0], 170.0, nil, 0.797)
549
951
 
550
952
  # Test inputs not overridden by defaults (shared boiler)
551
953
  hpxml = _create_hpxml('base-bldgtype-multifamily-shared-boiler-only-baseboard.xml')
552
954
  hpxml.heating_systems[0].shared_loop_watts = nil
553
955
  hpxml.heating_systems[0].electric_auxiliary_energy = 99.9
956
+ hpxml.heating_systems[0].heating_efficiency_afue = 0.85
957
+ hpxml.heating_systems[0].year_installed = 1980
554
958
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
555
959
  hpxml_default = _test_measure()
556
- _test_default_boiler_values(hpxml_default, 99.9, nil)
960
+ _test_default_boiler_values(hpxml_default.heating_systems[0], 99.9, nil, 0.85)
557
961
 
558
962
  # Test defaults w/ shared boiler
559
963
  hpxml.heating_systems[0].electric_auxiliary_energy = nil
964
+ hpxml.heating_systems[0].heating_efficiency_afue = nil
965
+ hpxml.heating_systems[0].year_installed = 1980
560
966
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
561
967
  hpxml_default = _test_measure()
562
- _test_default_boiler_values(hpxml_default, 220.0, nil)
968
+ _test_default_boiler_values(hpxml_default.heating_systems[0], 220.0, nil, 0.723)
563
969
  end
564
970
 
565
971
  def test_stoves
@@ -567,16 +973,20 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
567
973
  hpxml = _create_hpxml('base-hvac-stove-oil-only.xml')
568
974
  hpxml.heating_systems[0].fan_watts = 22
569
975
  hpxml.heating_systems[0].heating_capacity = 12345
976
+ hpxml.heating_systems[0].heating_efficiency_percent = 0.70
977
+ hpxml.heating_systems[0].year_installed = 1980
570
978
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
571
979
  hpxml_default = _test_measure()
572
- _test_default_stove_values(hpxml_default, 22, 12345)
980
+ _test_default_stove_values(hpxml_default.heating_systems[0], 22, 12345, 0.70)
573
981
 
574
982
  # Test defaults
575
983
  hpxml.heating_systems[0].fan_watts = nil
576
984
  hpxml.heating_systems[0].heating_capacity = nil
985
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
986
+ hpxml.heating_systems[0].year_installed = 1980
577
987
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
578
988
  hpxml_default = _test_measure()
579
- _test_default_stove_values(hpxml_default, 40, nil)
989
+ _test_default_stove_values(hpxml_default.heating_systems[0], 40, nil, 0.81)
580
990
  end
581
991
 
582
992
  def test_portable_heaters
@@ -584,16 +994,20 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
584
994
  hpxml = _create_hpxml('base-hvac-portable-heater-gas-only.xml')
585
995
  hpxml.heating_systems[0].fan_watts = 22
586
996
  hpxml.heating_systems[0].heating_capacity = 12345
997
+ hpxml.heating_systems[0].heating_efficiency_percent = 0.65
998
+ hpxml.heating_systems[0].year_installed = 2010
587
999
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
588
1000
  hpxml_default = _test_measure()
589
- _test_default_portable_heater_values(hpxml_default, 22, 12345)
1001
+ _test_default_portable_heater_values(hpxml_default.heating_systems[0], 22, 12345, 0.65)
590
1002
 
591
1003
  # Test defaults
592
1004
  hpxml.heating_systems[0].fan_watts = nil
593
1005
  hpxml.heating_systems[0].heating_capacity = nil
1006
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
1007
+ hpxml.heating_systems[0].year_installed = 2010
594
1008
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
595
1009
  hpxml_default = _test_measure()
596
- _test_default_portable_heater_values(hpxml_default, 0, nil)
1010
+ _test_default_portable_heater_values(hpxml_default.heating_systems[0], 0, nil, 0.81)
597
1011
  end
598
1012
 
599
1013
  def test_fixed_heaters
@@ -601,16 +1015,20 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
601
1015
  hpxml = _create_hpxml('base-hvac-fixed-heater-gas-only.xml')
602
1016
  hpxml.heating_systems[0].fan_watts = 22
603
1017
  hpxml.heating_systems[0].heating_capacity = 12345
1018
+ hpxml.heating_systems[0].heating_efficiency_percent = 0.60
1019
+ hpxml.heating_systems[0].year_installed = 2010
604
1020
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
605
1021
  hpxml_default = _test_measure()
606
- _test_default_fixed_heater_values(hpxml_default, 22, 12345)
1022
+ _test_default_fixed_heater_values(hpxml_default.heating_systems[0], 22, 12345, 0.60)
607
1023
 
608
1024
  # Test defaults
609
1025
  hpxml.heating_systems[0].fan_watts = nil
610
1026
  hpxml.heating_systems[0].heating_capacity = nil
1027
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
1028
+ hpxml.heating_systems[0].year_installed = 2010
611
1029
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
612
1030
  hpxml_default = _test_measure()
613
- _test_default_fixed_heater_values(hpxml_default, 0, nil)
1031
+ _test_default_fixed_heater_values(hpxml_default.heating_systems[0], 0, nil, 0.81)
614
1032
  end
615
1033
 
616
1034
  def test_fireplaces
@@ -618,16 +1036,30 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
618
1036
  hpxml = _create_hpxml('base-hvac-fireplace-wood-only.xml')
619
1037
  hpxml.heating_systems[0].fan_watts = 22
620
1038
  hpxml.heating_systems[0].heating_capacity = 12345
1039
+ hpxml.heating_systems[0].heating_efficiency_percent = 0.50
1040
+ hpxml.heating_systems[0].year_installed = 2010
621
1041
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
622
1042
  hpxml_default = _test_measure()
623
- _test_default_fireplace_values(hpxml_default, 22, 12345)
1043
+ _test_default_fireplace_values(hpxml_default.heating_systems[0], 22, 12345, 0.50)
624
1044
 
625
1045
  # Test defaults
626
1046
  hpxml.heating_systems[0].fan_watts = nil
627
1047
  hpxml.heating_systems[0].heating_capacity = nil
1048
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
1049
+ hpxml.heating_systems[0].year_installed = 2010
1050
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1051
+ hpxml_default = _test_measure()
1052
+ _test_default_fireplace_values(hpxml_default.heating_systems[0], 0, nil, 0.60)
1053
+
1054
+ # Test defaults with electric fireplace
1055
+ hpxml.heating_systems[0].heating_system_fuel = HPXML::FuelTypeElectricity
1056
+ hpxml.heating_systems[0].fan_watts = nil
1057
+ hpxml.heating_systems[0].heating_capacity = nil
1058
+ hpxml.heating_systems[0].heating_efficiency_percent = nil
1059
+ hpxml.heating_systems[0].year_installed = 2010
628
1060
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
629
1061
  hpxml_default = _test_measure()
630
- _test_default_fireplace_values(hpxml_default, 0, nil)
1062
+ _test_default_fireplace_values(hpxml_default.heating_systems[0], 0, nil, 1.0)
631
1063
  end
632
1064
 
633
1065
  def test_air_source_heat_pumps
@@ -642,9 +1074,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
642
1074
  hpxml.heat_pumps[0].heating_capacity = 23456
643
1075
  hpxml.heat_pumps[0].heating_capacity_17F = 9876
644
1076
  hpxml.heat_pumps[0].backup_heating_capacity = 34567
1077
+ hpxml.heat_pumps[0].cooling_efficiency_seer = 14.0
1078
+ hpxml.heat_pumps[0].heating_efficiency_hspf = 8.0
1079
+ hpxml.heat_pumps[0].year_installed = 2010
645
1080
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
646
1081
  hpxml_default = _test_measure()
647
- _test_default_air_to_air_heat_pump_values(hpxml_default, 0.88, HPXML::HVACCompressorTypeVariableSpeed, 0.66, -0.11, -0.22, 12345, 23456, 9876, 34567)
1082
+ _test_default_air_to_air_heat_pump_values(hpxml_default.heat_pumps[0], 0.88, HPXML::HVACCompressorTypeVariableSpeed, 0.66, -0.11, -0.22, 12345, 23456, 9876, 34567, 14.0, 8.0)
648
1083
 
649
1084
  # Test defaults
650
1085
  hpxml.heat_pumps[0].cooling_shr = nil
@@ -656,9 +1091,32 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
656
1091
  hpxml.heat_pumps[0].heating_capacity = nil
657
1092
  hpxml.heat_pumps[0].heating_capacity_17F = nil
658
1093
  hpxml.heat_pumps[0].backup_heating_capacity = nil
1094
+ hpxml.heat_pumps[0].cooling_efficiency_seer = nil
1095
+ hpxml.heat_pumps[0].heating_efficiency_hspf = nil
1096
+ hpxml.heat_pumps[0].year_installed = 2010
659
1097
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
660
1098
  hpxml_default = _test_measure()
661
- _test_default_air_to_air_heat_pump_values(hpxml_default, 0.73, HPXML::HVACCompressorTypeSingleStage, 0.5, 0, 0, nil, nil, nil, nil)
1099
+ _test_default_air_to_air_heat_pump_values(hpxml_default.heat_pumps[0], 0.73, HPXML::HVACCompressorTypeSingleStage, 0.5, 0, 0, nil, nil, nil, nil, 13.76, 7.9)
1100
+ end
1101
+
1102
+ def test_pthp
1103
+ # Test inputs not overridden by defaults
1104
+ hpxml = _create_hpxml('base-hvac-pthp.xml')
1105
+ hpxml.heat_pumps[0].cooling_shr = 0.88
1106
+ hpxml.heat_pumps[0].cooling_capacity = 12345
1107
+ hpxml.heat_pumps[0].heating_capacity = 23456
1108
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1109
+ hpxml_default = _test_measure()
1110
+ _test_default_pthp_values(hpxml_default.heat_pumps[0], 0.88, 12345, 23456)
1111
+
1112
+ # Test defaults
1113
+ hpxml.heat_pumps[0].cooling_shr = nil
1114
+ hpxml.heat_pumps[0].cooling_capacity = nil
1115
+ hpxml.heat_pumps[0].heating_capacity = nil
1116
+ hpxml.heat_pumps[0].backup_heating_capacity = nil
1117
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1118
+ hpxml_default = _test_measure()
1119
+ _test_default_pthp_values(hpxml_default.heat_pumps[0], 0.65, nil, nil)
662
1120
  end
663
1121
 
664
1122
  def test_mini_split_heat_pumps
@@ -674,7 +1132,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
674
1132
  hpxml.heat_pumps[0].backup_heating_capacity = 34567
675
1133
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
676
1134
  hpxml_default = _test_measure()
677
- _test_default_mini_split_heat_pump_values(hpxml_default, 0.78, 0.66, -0.11, -0.22, 12345, 23456, 9876, 34567)
1135
+ _test_default_mini_split_heat_pump_values(hpxml_default.heat_pumps[0], 0.78, 0.66, -0.11, -0.22, 12345, 23456, 9876, 34567)
678
1136
 
679
1137
  # Test defaults
680
1138
  hpxml.heat_pumps[0].cooling_shr = nil
@@ -687,7 +1145,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
687
1145
  hpxml.heat_pumps[0].backup_heating_capacity = nil
688
1146
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
689
1147
  hpxml_default = _test_measure()
690
- _test_default_mini_split_heat_pump_values(hpxml_default, 0.73, 0.18, 0, 0, nil, nil, nil, nil)
1148
+ _test_default_mini_split_heat_pump_values(hpxml_default.heat_pumps[0], 0.73, 0.18, 0, 0, nil, nil, nil, nil)
1149
+
1150
+ # Test defaults w/ ductless
1151
+ hpxml.heat_pumps[0].distribution_system.delete
1152
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1153
+ hpxml_default = _test_measure()
1154
+ _test_default_mini_split_heat_pump_values(hpxml_default.heat_pumps[0], 0.73, 0.07, 0, 0, nil, nil, nil, nil)
691
1155
  end
692
1156
 
693
1157
  def test_ground_source_heat_pumps
@@ -701,7 +1165,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
701
1165
  hpxml.heat_pumps[0].backup_heating_capacity = 34567
702
1166
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
703
1167
  hpxml_default = _test_measure()
704
- _test_default_ground_to_air_heat_pump_values(hpxml_default, 9.9, 0.66, -0.22, 12345, 23456, 34567)
1168
+ _test_default_ground_to_air_heat_pump_values(hpxml_default.heat_pumps[0], 9.9, 0.66, -0.22, 12345, 23456, 34567)
705
1169
 
706
1170
  # Test defaults
707
1171
  hpxml.heat_pumps[0].pump_watts_per_ton = nil
@@ -712,7 +1176,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
712
1176
  hpxml.heat_pumps[0].backup_heating_capacity = nil
713
1177
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
714
1178
  hpxml_default = _test_measure()
715
- _test_default_ground_to_air_heat_pump_values(hpxml_default, 30.0, 0.375, 0, nil, nil, nil)
1179
+ _test_default_ground_to_air_heat_pump_values(hpxml_default.heat_pumps[0], 30.0, 0.375, 0, nil, nil, nil)
716
1180
  end
717
1181
 
718
1182
  def test_hvac_increased_hardsized_equipment
@@ -749,16 +1213,32 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
749
1213
  hpxml = _create_hpxml('base-hvac-programmable-thermostat.xml')
750
1214
  hpxml.hvac_controls[0].heating_setback_start_hour = 12
751
1215
  hpxml.hvac_controls[0].cooling_setup_start_hour = 12
1216
+ hpxml.hvac_controls[0].seasons_heating_begin_month = 1
1217
+ hpxml.hvac_controls[0].seasons_heating_begin_day = 1
1218
+ hpxml.hvac_controls[0].seasons_heating_end_month = 6
1219
+ hpxml.hvac_controls[0].seasons_heating_end_day = 30
1220
+ hpxml.hvac_controls[0].seasons_cooling_begin_month = 7
1221
+ hpxml.hvac_controls[0].seasons_cooling_begin_day = 1
1222
+ hpxml.hvac_controls[0].seasons_cooling_end_month = 12
1223
+ hpxml.hvac_controls[0].seasons_cooling_end_day = 31
752
1224
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
753
1225
  hpxml_default = _test_measure()
754
- _test_default_hvac_control_values(hpxml_default, 12, 12)
1226
+ _test_default_hvac_control_values(hpxml_default.hvac_controls[0], 12, 12, 1, 1, 6, 30, 7, 1, 12, 31)
755
1227
 
756
1228
  # Test defaults
757
1229
  hpxml.hvac_controls[0].heating_setback_start_hour = nil
758
1230
  hpxml.hvac_controls[0].cooling_setup_start_hour = nil
1231
+ hpxml.hvac_controls[0].seasons_heating_begin_month = nil
1232
+ hpxml.hvac_controls[0].seasons_heating_begin_day = nil
1233
+ hpxml.hvac_controls[0].seasons_heating_end_month = nil
1234
+ hpxml.hvac_controls[0].seasons_heating_end_day = nil
1235
+ hpxml.hvac_controls[0].seasons_cooling_begin_month = nil
1236
+ hpxml.hvac_controls[0].seasons_cooling_begin_day = nil
1237
+ hpxml.hvac_controls[0].seasons_cooling_end_month = nil
1238
+ hpxml.hvac_controls[0].seasons_cooling_end_day = nil
759
1239
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
760
1240
  hpxml_default = _test_measure()
761
- _test_default_hvac_control_values(hpxml_default, 23, 9)
1241
+ _test_default_hvac_control_values(hpxml_default.hvac_controls[0], 23, 9, 1, 1, 12, 31, 1, 1, 12, 31)
762
1242
  end
763
1243
 
764
1244
  def test_hvac_distribution
@@ -770,8 +1250,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
770
1250
  expected_return_locations = ['attic - unvented']
771
1251
  expected_supply_areas = [150.0]
772
1252
  expected_return_areas = [50.0]
1253
+ expected_supply_fracs = [1.0]
1254
+ expected_return_fracs = [1.0]
773
1255
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
774
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1256
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1257
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
775
1258
 
776
1259
  # Test defaults w/ conditioned basement
777
1260
  hpxml.hvac_distributions[0].number_of_return_registers = nil
@@ -787,8 +1270,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
787
1270
  expected_return_locations = ['basement - conditioned']
788
1271
  expected_supply_areas = [729.0]
789
1272
  expected_return_areas = [270.0]
1273
+ expected_supply_fracs = [1.0]
1274
+ expected_return_fracs = [1.0]
790
1275
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
791
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1276
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1277
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
792
1278
 
793
1279
  # Test defaults w/ multiple foundations
794
1280
  hpxml = _create_hpxml('base-foundation-multiple.xml')
@@ -804,8 +1290,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
804
1290
  expected_return_locations = ['basement - unconditioned']
805
1291
  expected_supply_areas = [364.5]
806
1292
  expected_return_areas = [67.5]
1293
+ expected_supply_fracs = [1.0]
1294
+ expected_return_fracs = [1.0]
807
1295
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
808
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1296
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1297
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
809
1298
 
810
1299
  # Test defaults w/ foundation exposed to ambient
811
1300
  hpxml = _create_hpxml('base-foundation-ambient.xml')
@@ -821,8 +1310,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
821
1310
  expected_return_locations = ['attic - unvented']
822
1311
  expected_supply_areas = [364.5]
823
1312
  expected_return_areas = [67.5]
1313
+ expected_supply_fracs = [1.0]
1314
+ expected_return_fracs = [1.0]
824
1315
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
825
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1316
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1317
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
826
1318
 
827
1319
  # Test defaults w/ building/unit adjacent to other housing unit
828
1320
  hpxml = _create_hpxml('base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml')
@@ -838,8 +1330,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
838
1330
  expected_return_locations = ['living space']
839
1331
  expected_supply_areas = [243.0]
840
1332
  expected_return_areas = [45.0]
1333
+ expected_supply_fracs = [1.0]
1334
+ expected_return_fracs = [1.0]
841
1335
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
842
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1336
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1337
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
843
1338
 
844
1339
  # Test defaults w/ 2-story building
845
1340
  hpxml = _create_hpxml('base-enclosure-2stories.xml')
@@ -851,12 +1346,15 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
851
1346
  end
852
1347
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
853
1348
  hpxml_default = _test_measure()
854
- expected_supply_locations = ['basement - conditioned', 'living space']
855
- expected_return_locations = ['basement - conditioned', 'living space']
856
- expected_supply_areas = [820.13, 273.38]
857
- expected_return_areas = [455.63, 151.88]
1349
+ expected_supply_locations = ['basement - conditioned', 'basement - conditioned', 'living space', 'living space']
1350
+ expected_return_locations = ['basement - conditioned', 'basement - conditioned', 'living space', 'living space']
1351
+ expected_supply_areas = [410.06, 410.06, 136.69, 136.69]
1352
+ expected_return_areas = [227.82, 227.82, 75.94, 75.94]
1353
+ expected_supply_fracs = [0.375, 0.375, 0.125, 0.125]
1354
+ expected_return_fracs = [0.375, 0.375, 0.125, 0.125]
858
1355
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
859
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1356
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1357
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
860
1358
 
861
1359
  # Test defaults w/ 1-story building & multiple HVAC systems
862
1360
  hpxml = _create_hpxml('base-hvac-multiple.xml')
@@ -872,8 +1370,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
872
1370
  expected_return_locations = ['basement - conditioned', 'basement - conditioned'] * hpxml_default.hvac_distributions.size
873
1371
  expected_supply_areas = [36.45, 36.45] * hpxml_default.hvac_distributions.size
874
1372
  expected_return_areas = [13.5, 13.5] * hpxml_default.hvac_distributions.size
1373
+ expected_supply_fracs = [0.5, 0.5] * hpxml_default.hvac_distributions.size
1374
+ expected_return_fracs = [0.5, 0.5] * hpxml_default.hvac_distributions.size
875
1375
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
876
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1376
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1377
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
877
1378
 
878
1379
  # Test defaults w/ 2-story building & multiple HVAC systems
879
1380
  hpxml = _create_hpxml('base-hvac-multiple.xml')
@@ -889,13 +1390,44 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
889
1390
  expected_supply_locations = ['basement - conditioned', 'basement - conditioned', 'living space', 'living space'] * hpxml_default.hvac_distributions.size
890
1391
  expected_return_locations = ['basement - conditioned', 'basement - conditioned', 'living space', 'living space'] * hpxml_default.hvac_distributions.size
891
1392
  expected_supply_areas = [27.34, 27.34, 9.11, 9.11] * hpxml_default.hvac_distributions.size
892
- expected_return_areas = [10.13, 10.13, 3.38, 3.38] * hpxml_default.hvac_distributions.size
1393
+ expected_return_areas = [10.125, 10.125, 3.375, 3.375] * hpxml_default.hvac_distributions.size
1394
+ expected_supply_fracs = [0.375, 0.375, 0.125, 0.125] * hpxml_default.hvac_distributions.size
1395
+ expected_return_fracs = [0.375, 0.375, 0.125, 0.125] * hpxml_default.hvac_distributions.size
893
1396
  expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
894
- _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas, expected_n_return_registers)
1397
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1398
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
1399
+
1400
+ # Test defaults w/ 2-story building & multiple HVAC systems & duct area fractions
1401
+ hpxml = _create_hpxml('base-hvac-multiple.xml')
1402
+ hpxml.building_construction.number_of_conditioned_floors_above_grade = 2
1403
+ hpxml.hvac_distributions.each do |hvac_distribution|
1404
+ next unless hvac_distribution.distribution_system_type == HPXML::HVACDistributionTypeAir
1405
+
1406
+ hvac_distribution.ducts[0].duct_fraction_area = 0.75
1407
+ hvac_distribution.ducts[1].duct_fraction_area = 0.25
1408
+ hvac_distribution.ducts[2].duct_fraction_area = 0.5
1409
+ hvac_distribution.ducts[3].duct_fraction_area = 0.5
1410
+ end
1411
+ hpxml.hvac_distributions.each do |hvac_distribution|
1412
+ hvac_distribution.ducts.each do |duct|
1413
+ duct.duct_surface_area = nil
1414
+ end
1415
+ end
1416
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1417
+ hpxml_default = _test_measure()
1418
+ expected_supply_locations = ['attic - unvented', 'outside', 'attic - unvented', 'outside'] * hpxml_default.hvac_distributions.size
1419
+ expected_return_locations = ['attic - unvented', 'outside', 'attic - unvented', 'outside'] * hpxml_default.hvac_distributions.size
1420
+ expected_supply_areas = [54.675, 18.225] * hpxml_default.hvac_distributions.size
1421
+ expected_return_areas = [13.5, 13.5] * hpxml_default.hvac_distributions.size
1422
+ expected_supply_fracs = [0.75, 0.25] * hpxml_default.hvac_distributions.size
1423
+ expected_return_fracs = [0.5, 0.5] * hpxml_default.hvac_distributions.size
1424
+ expected_n_return_registers = hpxml_default.building_construction.number_of_conditioned_floors
1425
+ _test_default_duct_values(hpxml_default, expected_supply_locations, expected_return_locations, expected_supply_areas, expected_return_areas,
1426
+ expected_supply_fracs, expected_return_fracs, expected_n_return_registers)
895
1427
  end
896
1428
 
897
1429
  def test_mech_ventilation_fans
898
- # Test inputs not overridden by defaults
1430
+ # Test inputs not overridden by defaults w/ shared exhaust system
899
1431
  hpxml = _create_hpxml('base-mechvent-exhaust.xml')
900
1432
  hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeSFA
901
1433
  vent_fan = hpxml.ventilation_fans.select { |f| f.used_for_whole_building_ventilation }[0]
@@ -903,9 +1435,41 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
903
1435
  vent_fan.fraction_recirculation = 0.0
904
1436
  vent_fan.in_unit_flow_rate = 10.0
905
1437
  vent_fan.hours_in_operation = 22.0
1438
+ vent_fan.fan_power = 12.5
1439
+ vent_fan.tested_flow_rate = nil
1440
+ vent_fan.rated_flow_rate = nil
1441
+ vent_fan.calculated_flow_rate = nil
1442
+ vent_fan.delivered_ventilation = 89
1443
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1444
+ hpxml_default = _test_measure()
1445
+ _test_default_mech_vent_values(hpxml_default, true, 22.0, 12.5, 89)
1446
+
1447
+ # Test inputs w/ TestedFlowRate
1448
+ vent_fan.tested_flow_rate = 79
1449
+ vent_fan.rated_flow_rate = nil
1450
+ vent_fan.calculated_flow_rate = nil
1451
+ vent_fan.delivered_ventilation = nil
1452
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1453
+ hpxml_default = _test_measure()
1454
+ _test_default_mech_vent_values(hpxml_default, true, 22.0, 12.5, 79)
1455
+
1456
+ # Test inputs w/ RatedFlowRate
1457
+ vent_fan.tested_flow_rate = nil
1458
+ vent_fan.rated_flow_rate = 69
1459
+ vent_fan.calculated_flow_rate = nil
1460
+ vent_fan.delivered_ventilation = nil
1461
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1462
+ hpxml_default = _test_measure()
1463
+ _test_default_mech_vent_values(hpxml_default, true, 22.0, 12.5, 69)
1464
+
1465
+ # Test inputs w/ CalculatedFlowRate
1466
+ vent_fan.tested_flow_rate = nil
1467
+ vent_fan.rated_flow_rate = nil
1468
+ vent_fan.calculated_flow_rate = 59
1469
+ vent_fan.delivered_ventilation = nil
906
1470
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
907
1471
  hpxml_default = _test_measure()
908
- _test_default_mech_vent_values(hpxml_default, true, 22.0)
1472
+ _test_default_mech_vent_values(hpxml_default, true, 22.0, 12.5, 59)
909
1473
 
910
1474
  # Test defaults
911
1475
  vent_fan.rated_flow_rate = nil
@@ -915,25 +1479,104 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
915
1479
  vent_fan.fraction_recirculation = nil
916
1480
  vent_fan.in_unit_flow_rate = nil
917
1481
  vent_fan.hours_in_operation = nil
1482
+ vent_fan.fan_power = nil
1483
+ vent_fan.tested_flow_rate = nil
1484
+ vent_fan.rated_flow_rate = nil
1485
+ vent_fan.calculated_flow_rate = nil
1486
+ vent_fan.delivered_ventilation = nil
1487
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1488
+ hpxml_default = _test_measure()
1489
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 35.0, 100)
1490
+
1491
+ # Test defaults w/ SFA building
1492
+ hpxml = _create_hpxml('base-bldgtype-single-family-attached.xml')
1493
+ hpxml.ventilation_fans.add(id: 'MechanicalVentilation',
1494
+ fan_type: HPXML::MechVentTypeExhaust,
1495
+ used_for_whole_building_ventilation: true)
1496
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1497
+ hpxml_default = _test_measure()
1498
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 27.2, 78)
1499
+
1500
+ # Test defaults w/ MF building
1501
+ hpxml = _create_hpxml('base-bldgtype-multifamily.xml')
1502
+ hpxml.ventilation_fans.add(id: 'MechanicalVentilation',
1503
+ fan_type: HPXML::MechVentTypeExhaust,
1504
+ used_for_whole_building_ventilation: true)
1505
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1506
+ hpxml_default = _test_measure()
1507
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 19.8, 56.5)
1508
+
1509
+ # Test defaults w/ nACH infiltration
1510
+ hpxml = _create_hpxml('base-enclosure-infil-natural-ach.xml')
1511
+ hpxml.ventilation_fans.add(id: 'MechanicalVentilation',
1512
+ fan_type: HPXML::MechVentTypeExhaust,
1513
+ used_for_whole_building_ventilation: true)
1514
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1515
+ hpxml_default = _test_measure()
1516
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 21.6, 61.7)
1517
+
1518
+ # Test defaults w/ CFM50 infiltration
1519
+ hpxml = _create_hpxml('base-enclosure-infil-cfm50.xml')
1520
+ hpxml.ventilation_fans.add(id: 'MechanicalVentilation',
1521
+ fan_type: HPXML::MechVentTypeExhaust,
1522
+ used_for_whole_building_ventilation: true)
1523
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1524
+ hpxml_default = _test_measure()
1525
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 34.9, 99.6)
1526
+
1527
+ # Test defaults w/ balanced system
1528
+ hpxml = _create_hpxml('base.xml')
1529
+ hpxml.ventilation_fans.add(id: 'MechanicalVentilation',
1530
+ fan_type: HPXML::MechVentTypeBalanced,
1531
+ used_for_whole_building_ventilation: true)
1532
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1533
+ hpxml_default = _test_measure()
1534
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 52.8, 75.4)
1535
+
1536
+ # Test defaults w/ cathedral ceiling
1537
+ hpxml = _create_hpxml('base-atticroof-cathedral.xml')
1538
+ hpxml.ventilation_fans.add(id: 'MechanicalVentilation',
1539
+ fan_type: HPXML::MechVentTypeExhaust,
1540
+ used_for_whole_building_ventilation: true)
918
1541
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
919
1542
  hpxml_default = _test_measure()
920
- _test_default_mech_vent_values(hpxml_default, false, 24.0)
1543
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 27.0, 77.1)
921
1544
 
922
1545
  # Test inputs not overridden by defaults w/ CFIS
923
1546
  hpxml = _create_hpxml('base-mechvent-cfis.xml')
924
1547
  vent_fan = hpxml.ventilation_fans.select { |f| f.used_for_whole_building_ventilation }[0]
925
1548
  vent_fan.is_shared_system = false
926
1549
  vent_fan.hours_in_operation = 12.0
1550
+ vent_fan.fan_power = 12.5
927
1551
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
928
1552
  hpxml_default = _test_measure()
929
- _test_default_mech_vent_values(hpxml_default, false, 12.0)
1553
+ _test_default_mech_vent_values(hpxml_default, false, 12.0, 12.5, 330)
930
1554
 
931
1555
  # Test defaults w/ CFIS
932
1556
  vent_fan.is_shared_system = nil
933
1557
  vent_fan.hours_in_operation = nil
1558
+ vent_fan.fan_power = nil
934
1559
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
935
1560
  hpxml_default = _test_measure()
936
- _test_default_mech_vent_values(hpxml_default, false, 8.0)
1561
+ _test_default_mech_vent_values(hpxml_default, false, 8.0, 165.0, 330)
1562
+
1563
+ # Test inputs not overridden by defaults w/ ERV
1564
+ hpxml = _create_hpxml('base-mechvent-erv.xml')
1565
+ vent_fan = hpxml.ventilation_fans.select { |f| f.used_for_whole_building_ventilation }[0]
1566
+ vent_fan.is_shared_system = false
1567
+ vent_fan.hours_in_operation = 20.0
1568
+ vent_fan.fan_power = 45.0
1569
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1570
+ hpxml_default = _test_measure()
1571
+ _test_default_mech_vent_values(hpxml_default, false, 20.0, 45.0, 110)
1572
+
1573
+ # Test defaults w/ ERV
1574
+ vent_fan.is_shared_system = nil
1575
+ vent_fan.hours_in_operation = nil
1576
+ vent_fan.fan_power = nil
1577
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1578
+ hpxml_default = _test_measure()
1579
+ _test_default_mech_vent_values(hpxml_default, false, 24.0, 110.0, 110)
937
1580
  end
938
1581
 
939
1582
  def test_local_ventilation_fans
@@ -973,6 +1616,24 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
973
1616
  _test_default_bath_fan_values(hpxml_default, 2, 50, 1, 15, 7)
974
1617
  end
975
1618
 
1619
+ def test_whole_house_fan
1620
+ # Test inputs not overridden by defaults
1621
+ hpxml = _create_hpxml('base-mechvent-whole-house-fan.xml')
1622
+ whf = hpxml.ventilation_fans.select { |f| f.used_for_seasonal_cooling_load_reduction }[0]
1623
+ whf.rated_flow_rate = 3000
1624
+ whf.fan_power = 321
1625
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1626
+ hpxml_default = _test_measure()
1627
+ _test_default_whole_house_fan_values(hpxml_default, 3000, 321)
1628
+
1629
+ # Test defaults
1630
+ whf.rated_flow_rate = nil
1631
+ whf.fan_power = nil
1632
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1633
+ hpxml_default = _test_measure()
1634
+ _test_default_whole_house_fan_values(hpxml_default, 5400, 540)
1635
+ end
1636
+
976
1637
  def test_storage_water_heaters
977
1638
  # Test inputs not overridden by defaults
978
1639
  hpxml = _create_hpxml('base.xml')
@@ -985,11 +1646,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
985
1646
  wh.recovery_efficiency = 0.95
986
1647
  wh.location = HPXML::LocationLivingSpace
987
1648
  wh.temperature = 111
1649
+ wh.energy_factor = 0.90
1650
+ wh.year_installed = 2003
988
1651
  end
989
1652
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
990
1653
  hpxml_default = _test_measure()
991
1654
  _test_default_storage_water_heater_values(hpxml_default,
992
- [true, 15000.0, 40.0, 0.95, HPXML::LocationLivingSpace, 111])
1655
+ [true, 15000.0, 40.0, 0.95, HPXML::LocationLivingSpace, 111, 0.90])
993
1656
 
994
1657
  # Test defaults w/ 3-bedroom house & electric storage water heater
995
1658
  hpxml.water_heating_systems.each do |wh|
@@ -999,11 +1662,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
999
1662
  wh.recovery_efficiency = nil
1000
1663
  wh.location = nil
1001
1664
  wh.temperature = nil
1665
+ wh.energy_factor = nil
1666
+ wh.year_installed = 2003
1002
1667
  end
1003
1668
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1004
1669
  hpxml_default = _test_measure()
1005
1670
  _test_default_storage_water_heater_values(hpxml_default,
1006
- [false, 18766.7, 50.0, 0.98, HPXML::LocationBasementConditioned, 125])
1671
+ [false, 18766.7, 50.0, 0.98, HPXML::LocationBasementConditioned, 125, 0.857])
1007
1672
 
1008
1673
  # Test defaults w/ 5-bedroom house & electric storage water heater
1009
1674
  hpxml = _create_hpxml('base-enclosure-beds-5.xml')
@@ -1014,11 +1679,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1014
1679
  wh.recovery_efficiency = nil
1015
1680
  wh.location = nil
1016
1681
  wh.temperature = nil
1682
+ wh.energy_factor = nil
1683
+ wh.year_installed = 2010
1017
1684
  end
1018
1685
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1019
1686
  hpxml_default = _test_measure()
1020
1687
  _test_default_storage_water_heater_values(hpxml_default,
1021
- [false, 18766.7, 66.0, 0.98, HPXML::LocationBasementConditioned, 125])
1688
+ [false, 18766.7, 66.0, 0.98, HPXML::LocationBasementConditioned, 125, 0.90])
1022
1689
 
1023
1690
  # Test defaults w/ 3-bedroom house & 2 storage water heaters (1 electric and 1 natural gas)
1024
1691
  hpxml = _create_hpxml('base-dhw-multiple.xml')
@@ -1031,12 +1698,45 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1031
1698
  wh.recovery_efficiency = nil
1032
1699
  wh.location = nil
1033
1700
  wh.temperature = nil
1701
+ wh.energy_factor = nil
1702
+ wh.year_installed = 2010
1034
1703
  end
1035
1704
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1036
1705
  hpxml_default = _test_measure()
1037
1706
  _test_default_storage_water_heater_values(hpxml_default,
1038
- [false, 15354.6, 50.0, 0.98, HPXML::LocationBasementConditioned, 125],
1039
- [false, 36000.0, 40.0, 0.756, HPXML::LocationBasementConditioned, 125])
1707
+ [false, 15354.6, 50.0, 0.98, HPXML::LocationBasementConditioned, 125, 0.90],
1708
+ [false, 36000.0, 40.0, 0.746, HPXML::LocationBasementConditioned, 125, 0.55])
1709
+
1710
+ # Test inputs not overridden by defaults w/ UEF
1711
+ hpxml = _create_hpxml('base-dhw-tank-gas-uef.xml')
1712
+ hpxml.water_heating_systems.each do |wh|
1713
+ wh.first_hour_rating = nil
1714
+ wh.usage_bin = HPXML::WaterHeaterUsageBinVerySmall
1715
+ end
1716
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1717
+ hpxml_default = _test_measure()
1718
+ assert_nil(hpxml_default.water_heating_systems[0].first_hour_rating)
1719
+ assert_equal(HPXML::WaterHeaterUsageBinVerySmall, hpxml_default.water_heating_systems[0].usage_bin)
1720
+
1721
+ # Test defaults w/ UEF & FHR
1722
+ hpxml.water_heating_systems.each do |wh|
1723
+ wh.first_hour_rating = 40
1724
+ wh.usage_bin = nil
1725
+ end
1726
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1727
+ hpxml_default = _test_measure()
1728
+ assert_equal(40, hpxml_default.water_heating_systems[0].first_hour_rating)
1729
+ assert_equal(HPXML::WaterHeaterUsageBinLow, hpxml_default.water_heating_systems[0].usage_bin)
1730
+
1731
+ # Test defaults w/ UEF & no FHR
1732
+ hpxml.water_heating_systems.each do |wh|
1733
+ wh.first_hour_rating = nil
1734
+ wh.usage_bin = nil
1735
+ end
1736
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1737
+ hpxml_default = _test_measure()
1738
+ assert_nil(hpxml_default.water_heating_systems[0].first_hour_rating)
1739
+ assert_equal(HPXML::WaterHeaterUsageBinMedium, hpxml_default.water_heating_systems[0].usage_bin)
1040
1740
  end
1041
1741
 
1042
1742
  def test_tankless_water_heaters
@@ -1068,7 +1768,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1068
1768
  hpxml.hot_water_distributions[0].pipe_r_value = 2.5
1069
1769
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1070
1770
  hpxml_default = _test_measure()
1071
- _test_default_standard_distribution_values(hpxml_default, 50.0, 2.5)
1771
+ _test_default_standard_distribution_values(hpxml_default.hot_water_distributions[0], 50.0, 2.5)
1072
1772
 
1073
1773
  # Test inputs not overridden by defaults -- recirculation
1074
1774
  hpxml = _create_hpxml('base-dhw-recirc-demand.xml')
@@ -1076,14 +1776,14 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1076
1776
  hpxml.hot_water_distributions[0].pipe_r_value = 2.5
1077
1777
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1078
1778
  hpxml_default = _test_measure()
1079
- _test_default_recirc_distribution_values(hpxml_default, 50.0, 50.0, 65.0, 2.5)
1779
+ _test_default_recirc_distribution_values(hpxml_default.hot_water_distributions[0], 50.0, 50.0, 65.0, 2.5)
1080
1780
 
1081
1781
  # Test inputs not overridden by defaults -- shared recirculation
1082
1782
  hpxml = _create_hpxml('base-bldgtype-multifamily-shared-water-heater-recirc.xml')
1083
1783
  hpxml.hot_water_distributions[0].shared_recirculation_pump_power = 333.0
1084
1784
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1085
1785
  hpxml_default = _test_measure()
1086
- _test_default_shared_recirc_distribution_values(hpxml_default, 333.0)
1786
+ _test_default_shared_recirc_distribution_values(hpxml_default.hot_water_distributions[0], 333.0)
1087
1787
 
1088
1788
  # Test defaults w/ conditioned basement
1089
1789
  hpxml = _create_hpxml('base.xml')
@@ -1091,7 +1791,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1091
1791
  hpxml.hot_water_distributions[0].pipe_r_value = nil
1092
1792
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1093
1793
  hpxml_default = _test_measure()
1094
- _test_default_standard_distribution_values(hpxml_default, 93.48, 0.0)
1794
+ _test_default_standard_distribution_values(hpxml_default.hot_water_distributions[0], 93.48, 0.0)
1095
1795
 
1096
1796
  # Test defaults w/ unconditioned basement
1097
1797
  hpxml = _create_hpxml('base-foundation-unconditioned-basement.xml')
@@ -1099,7 +1799,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1099
1799
  hpxml.hot_water_distributions[0].pipe_r_value = nil
1100
1800
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1101
1801
  hpxml_default = _test_measure()
1102
- _test_default_standard_distribution_values(hpxml_default, 88.48, 0.0)
1802
+ _test_default_standard_distribution_values(hpxml_default.hot_water_distributions[0], 88.48, 0.0)
1103
1803
 
1104
1804
  # Test defaults w/ 2-story building
1105
1805
  hpxml = _create_hpxml('base-enclosure-2stories.xml')
@@ -1107,7 +1807,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1107
1807
  hpxml.hot_water_distributions[0].pipe_r_value = nil
1108
1808
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1109
1809
  hpxml_default = _test_measure()
1110
- _test_default_standard_distribution_values(hpxml_default, 103.48, 0.0)
1810
+ _test_default_standard_distribution_values(hpxml_default.hot_water_distributions[0], 103.48, 0.0)
1111
1811
 
1112
1812
  # Test defaults w/ recirculation & conditioned basement
1113
1813
  hpxml = _create_hpxml('base-dhw-recirc-demand.xml')
@@ -1117,7 +1817,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1117
1817
  hpxml.hot_water_distributions[0].pipe_r_value = nil
1118
1818
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1119
1819
  hpxml_default = _test_measure()
1120
- _test_default_recirc_distribution_values(hpxml_default, 166.96, 10.0, 50.0, 0.0)
1820
+ _test_default_recirc_distribution_values(hpxml_default.hot_water_distributions[0], 166.96, 10.0, 50.0, 0.0)
1121
1821
 
1122
1822
  # Test defaults w/ recirculation & unconditioned basement
1123
1823
  hpxml = _create_hpxml('base-foundation-unconditioned-basement.xml')
@@ -1127,7 +1827,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1127
1827
  recirculation_control_type: HPXML::DHWRecirControlTypeSensor)
1128
1828
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1129
1829
  hpxml_default = _test_measure()
1130
- _test_default_recirc_distribution_values(hpxml_default, 156.96, 10.0, 50.0, 0.0)
1830
+ _test_default_recirc_distribution_values(hpxml_default.hot_water_distributions[0], 156.96, 10.0, 50.0, 0.0)
1131
1831
 
1132
1832
  # Test defaults w/ recirculation & 2-story building
1133
1833
  hpxml = _create_hpxml('base-enclosure-2stories.xml')
@@ -1137,51 +1837,60 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1137
1837
  recirculation_control_type: HPXML::DHWRecirControlTypeSensor)
1138
1838
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1139
1839
  hpxml_default = _test_measure()
1140
- _test_default_recirc_distribution_values(hpxml_default, 186.96, 10.0, 50.0, 0.0)
1840
+ _test_default_recirc_distribution_values(hpxml_default.hot_water_distributions[0], 186.96, 10.0, 50.0, 0.0)
1141
1841
 
1142
1842
  # Test defaults w/ shared recirculation
1143
1843
  hpxml = _create_hpxml('base-bldgtype-multifamily-shared-water-heater-recirc.xml')
1144
1844
  hpxml.hot_water_distributions[0].shared_recirculation_pump_power = nil
1145
1845
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1146
1846
  hpxml_default = _test_measure()
1147
- _test_default_shared_recirc_distribution_values(hpxml_default, 220.0)
1847
+ _test_default_shared_recirc_distribution_values(hpxml_default.hot_water_distributions[0], 220.0)
1148
1848
  end
1149
1849
 
1150
1850
  def test_water_fixtures
1151
1851
  # Test inputs not overridden by defaults
1152
1852
  hpxml = _create_hpxml('base.xml')
1153
1853
  hpxml.water_heating.water_fixtures_usage_multiplier = 2.0
1854
+ hpxml.water_heating.water_fixtures_weekday_fractions = ConstantDaySchedule
1855
+ hpxml.water_heating.water_fixtures_weekend_fractions = ConstantDaySchedule
1856
+ hpxml.water_heating.water_fixtures_monthly_multipliers = ConstantMonthSchedule
1154
1857
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1155
1858
  hpxml_default = _test_measure()
1156
- _test_default_water_fixture_values(hpxml_default, 2.0)
1859
+ _test_default_water_fixture_values(hpxml_default, 2.0, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1157
1860
 
1158
1861
  # Test defaults
1159
1862
  hpxml.water_heating.water_fixtures_usage_multiplier = nil
1863
+ hpxml.water_heating.water_fixtures_weekday_fractions = nil
1864
+ hpxml.water_heating.water_fixtures_weekend_fractions = nil
1865
+ hpxml.water_heating.water_fixtures_monthly_multipliers = nil
1160
1866
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1161
1867
  hpxml_default = _test_measure()
1162
- _test_default_water_fixture_values(hpxml_default, 1.0)
1868
+ _test_default_water_fixture_values(hpxml_default, 1.0, Schedule.FixturesWeekdayFractions, Schedule.FixturesWeekendFractions, Schedule.FixturesMonthlyMultipliers)
1163
1869
  end
1164
1870
 
1165
1871
  def test_solar_thermal_systems
1166
1872
  # Test inputs not overridden by defaults
1167
1873
  hpxml = _create_hpxml('base-dhw-solar-direct-flat-plate.xml')
1168
1874
  hpxml.solar_thermal_systems[0].storage_volume = 55.0
1875
+ hpxml.solar_thermal_systems[0].collector_azimuth = 123
1169
1876
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1170
1877
  hpxml_default = _test_measure()
1171
- _test_default_solar_thermal_values(hpxml_default, 55.0)
1878
+ _test_default_solar_thermal_values(hpxml_default.solar_thermal_systems[0], 55.0, 123)
1172
1879
 
1173
1880
  # Test defaults w/ collector area of 40 sqft
1174
1881
  hpxml.solar_thermal_systems[0].storage_volume = nil
1882
+ hpxml.solar_thermal_systems[0].collector_orientation = HPXML::OrientationNorth
1883
+ hpxml.solar_thermal_systems[0].collector_azimuth = nil
1175
1884
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1176
1885
  hpxml_default = _test_measure()
1177
- _test_default_solar_thermal_values(hpxml_default, 60.0)
1886
+ _test_default_solar_thermal_values(hpxml_default.solar_thermal_systems[0], 60.0, 0)
1178
1887
 
1179
1888
  # Test defaults w/ collector area of 100 sqft
1180
1889
  hpxml.solar_thermal_systems[0].collector_area = 100.0
1181
1890
  hpxml.solar_thermal_systems[0].storage_volume = nil
1182
1891
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1183
1892
  hpxml_default = _test_measure()
1184
- _test_default_solar_thermal_values(hpxml_default, 150.0)
1893
+ _test_default_solar_thermal_values(hpxml_default.solar_thermal_systems[0], 150.0, 0)
1185
1894
  end
1186
1895
 
1187
1896
  def test_pv_systems
@@ -1196,10 +1905,11 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1196
1905
  pv.location = HPXML::LocationGround
1197
1906
  pv.tracking = HPXML::PVTrackingType1Axis
1198
1907
  pv.module_type = HPXML::PVModuleTypePremium
1908
+ pv.array_azimuth = 123
1199
1909
  end
1200
1910
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1201
1911
  hpxml_default = _test_measure()
1202
- _test_default_pv_system_values(hpxml_default, 0.90, 0.20, true, HPXML::LocationGround, HPXML::PVTrackingType1Axis, HPXML::PVModuleTypePremium)
1912
+ _test_default_pv_system_values(hpxml_default, 0.90, 0.20, true, HPXML::LocationGround, HPXML::PVTrackingType1Axis, HPXML::PVModuleTypePremium, 123)
1203
1913
 
1204
1914
  # Test defaults w/o year modules manufactured
1205
1915
  hpxml.pv_systems.each do |pv|
@@ -1209,10 +1919,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1209
1919
  pv.location = nil
1210
1920
  pv.tracking = nil
1211
1921
  pv.module_type = nil
1922
+ pv.array_orientation = HPXML::OrientationSoutheast
1923
+ pv.array_azimuth = nil
1212
1924
  end
1213
1925
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1214
1926
  hpxml_default = _test_measure()
1215
- _test_default_pv_system_values(hpxml_default, 0.96, 0.14, false, HPXML::LocationRoof, HPXML::PVTrackingTypeFixed, HPXML::PVModuleTypeStandard)
1927
+ _test_default_pv_system_values(hpxml_default, 0.96, 0.14, false, HPXML::LocationRoof, HPXML::PVTrackingTypeFixed, HPXML::PVModuleTypeStandard, 135)
1216
1928
 
1217
1929
  # Test defaults w/ year modules manufactured
1218
1930
  hpxml.pv_systems.each do |pv|
@@ -1220,7 +1932,50 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1220
1932
  end
1221
1933
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1222
1934
  hpxml_default = _test_measure()
1223
- _test_default_pv_system_values(hpxml_default, 0.96, 0.186, false, HPXML::LocationRoof, HPXML::PVTrackingTypeFixed, HPXML::PVModuleTypeStandard)
1935
+ _test_default_pv_system_values(hpxml_default, 0.96, 0.186, false, HPXML::LocationRoof, HPXML::PVTrackingTypeFixed, HPXML::PVModuleTypeStandard, 135)
1936
+ end
1937
+
1938
+ def test_batteries
1939
+ # Test inputs not overridden by defaults
1940
+ hpxml = _create_hpxml('base-pv-battery-outside.xml')
1941
+ hpxml.batteries[0].nominal_capacity_kwh = 45.0
1942
+ hpxml.batteries[0].nominal_capacity_ah = nil
1943
+ hpxml.batteries[0].rated_power_output = 1234.0
1944
+ hpxml.batteries[0].location = HPXML::LocationBasementConditioned
1945
+ hpxml.batteries[0].lifetime_model = HPXML::BatteryLifetimeModelKandlerSmith
1946
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1947
+ hpxml_default = _test_measure()
1948
+ _test_default_battery_values(hpxml_default, 45.0, nil, 1234.0, HPXML::LocationBasementConditioned, HPXML::BatteryLifetimeModelKandlerSmith)
1949
+
1950
+ # Test w/ Ah instead of kWh
1951
+ hpxml.batteries[0].nominal_capacity_kwh = nil
1952
+ hpxml.batteries[0].nominal_capacity_ah = 987.0
1953
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1954
+ hpxml_default = _test_measure()
1955
+ _test_default_battery_values(hpxml_default, nil, 987.0, 1234.0, HPXML::LocationBasementConditioned, HPXML::BatteryLifetimeModelKandlerSmith)
1956
+
1957
+ # Test defaults
1958
+ hpxml.batteries[0].nominal_capacity_kwh = nil
1959
+ hpxml.batteries[0].nominal_capacity_ah = nil
1960
+ hpxml.batteries[0].rated_power_output = nil
1961
+ hpxml.batteries[0].location = nil
1962
+ hpxml.batteries[0].lifetime_model = nil
1963
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1964
+ hpxml_default = _test_measure()
1965
+ _test_default_battery_values(hpxml_default, 10.0, nil, 5000.0, HPXML::LocationOutside, HPXML::BatteryLifetimeModelNone)
1966
+
1967
+ # Test defaults w/ kWh
1968
+ hpxml.batteries[0].nominal_capacity_kwh = 14.0
1969
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1970
+ hpxml_default = _test_measure()
1971
+ _test_default_battery_values(hpxml_default, 14.0, nil, 7000.0, HPXML::LocationOutside, HPXML::BatteryLifetimeModelNone)
1972
+
1973
+ # Test defaults w/ Ah
1974
+ hpxml.batteries[0].nominal_capacity_kwh = nil
1975
+ hpxml.batteries[0].nominal_capacity_ah = 280.0
1976
+ XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1977
+ hpxml_default = _test_measure()
1978
+ _test_default_battery_values(hpxml_default, nil, 280.0, 7000.0, HPXML::LocationOutside, HPXML::BatteryLifetimeModelNone)
1224
1979
  end
1225
1980
 
1226
1981
  def test_generators
@@ -1250,14 +2005,16 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1250
2005
  hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeSFA
1251
2006
  hpxml.water_heating_systems[0].is_shared_system = true
1252
2007
  hpxml.water_heating_systems[0].number_of_units_served = 6
1253
- hpxml.water_heating_systems[0].fraction_dhw_load_served = 0
1254
2008
  hpxml.clothes_washers[0].location = HPXML::LocationBasementConditioned
1255
2009
  hpxml.clothes_washers[0].is_shared_appliance = true
1256
2010
  hpxml.clothes_washers[0].usage_multiplier = 1.5
1257
2011
  hpxml.clothes_washers[0].water_heating_system_idref = hpxml.water_heating_systems[0].id
2012
+ hpxml.clothes_washers[0].weekday_fractions = ConstantDaySchedule
2013
+ hpxml.clothes_washers[0].weekend_fractions = ConstantDaySchedule
2014
+ hpxml.clothes_washers[0].monthly_multipliers = ConstantMonthSchedule
1258
2015
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1259
2016
  hpxml_default = _test_measure()
1260
- _test_default_clothes_washer_values(hpxml_default, true, HPXML::LocationBasementConditioned, 1.21, 380.0, 0.12, 1.09, 27.0, 3.2, 6.0, 1.5)
2017
+ _test_default_clothes_washer_values(hpxml_default.clothes_washers[0], true, HPXML::LocationBasementConditioned, 1.21, 380.0, 0.12, 1.09, 27.0, 3.2, 6.0, 1.5, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1261
2018
 
1262
2019
  # Test defaults
1263
2020
  hpxml.clothes_washers[0].is_shared_appliance = nil
@@ -1270,9 +2027,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1270
2027
  hpxml.clothes_washers[0].capacity = nil
1271
2028
  hpxml.clothes_washers[0].label_usage = nil
1272
2029
  hpxml.clothes_washers[0].usage_multiplier = nil
2030
+ hpxml.clothes_washers[0].weekday_fractions = nil
2031
+ hpxml.clothes_washers[0].weekend_fractions = nil
2032
+ hpxml.clothes_washers[0].monthly_multipliers = nil
1273
2033
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1274
2034
  hpxml_default = _test_measure()
1275
- _test_default_clothes_washer_values(hpxml_default, false, HPXML::LocationLivingSpace, 1.0, 400.0, 0.12, 1.09, 27.0, 3.0, 6.0, 1.0)
2035
+ _test_default_clothes_washer_values(hpxml_default.clothes_washers[0], false, HPXML::LocationLivingSpace, 1.0, 400.0, 0.12, 1.09, 27.0, 3.0, 6.0, 1.0, Schedule.ClothesWasherWeekdayFractions, Schedule.ClothesWasherWeekendFractions, Schedule.ClothesWasherMonthlyMultipliers)
1276
2036
 
1277
2037
  # Test defaults before 301-2019 Addendum A
1278
2038
  hpxml = _create_hpxml('base.xml')
@@ -1287,9 +2047,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1287
2047
  hpxml.clothes_washers[0].capacity = nil
1288
2048
  hpxml.clothes_washers[0].label_usage = nil
1289
2049
  hpxml.clothes_washers[0].usage_multiplier = nil
2050
+ hpxml.clothes_washers[0].weekday_fractions = nil
2051
+ hpxml.clothes_washers[0].weekend_fractions = nil
2052
+ hpxml.clothes_washers[0].monthly_multipliers = nil
1290
2053
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1291
2054
  hpxml_default = _test_measure()
1292
- _test_default_clothes_washer_values(hpxml_default, false, HPXML::LocationLivingSpace, 0.331, 704.0, 0.08, 0.58, 23.0, 2.874, 999, 1.0)
2055
+ _test_default_clothes_washer_values(hpxml_default.clothes_washers[0], false, HPXML::LocationLivingSpace, 0.331, 704.0, 0.08, 0.58, 23.0, 2.874, 999, 1.0, Schedule.ClothesWasherWeekdayFractions, Schedule.ClothesWasherWeekendFractions, Schedule.ClothesWasherMonthlyMultipliers)
1293
2056
  end
1294
2057
 
1295
2058
  def test_clothes_dryers
@@ -1298,42 +2061,47 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1298
2061
  hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeSFA
1299
2062
  hpxml.water_heating_systems[0].is_shared_system = true
1300
2063
  hpxml.water_heating_systems[0].number_of_units_served = 6
1301
- hpxml.water_heating_systems[0].fraction_dhw_load_served = 0
1302
2064
  hpxml.clothes_dryers[0].location = HPXML::LocationBasementConditioned
1303
2065
  hpxml.clothes_dryers[0].is_shared_appliance = true
1304
2066
  hpxml.clothes_dryers[0].combined_energy_factor = 3.33
1305
2067
  hpxml.clothes_dryers[0].usage_multiplier = 1.1
2068
+ hpxml.clothes_dryers[0].weekday_fractions = ConstantDaySchedule
2069
+ hpxml.clothes_dryers[0].weekend_fractions = ConstantDaySchedule
2070
+ hpxml.clothes_dryers[0].monthly_multipliers = ConstantMonthSchedule
1306
2071
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1307
2072
  hpxml_default = _test_measure()
1308
- _test_default_clothes_dryer_values(hpxml_default, true, HPXML::LocationBasementConditioned, 3.33, 1.1)
2073
+ _test_default_clothes_dryer_values(hpxml_default.clothes_dryers[0], true, HPXML::LocationBasementConditioned, 3.33, 1.1, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1309
2074
 
1310
2075
  # Test defaults w/ electric clothes dryer
1311
2076
  hpxml.clothes_dryers[0].location = nil
1312
2077
  hpxml.clothes_dryers[0].is_shared_appliance = nil
1313
2078
  hpxml.clothes_dryers[0].combined_energy_factor = nil
1314
2079
  hpxml.clothes_dryers[0].usage_multiplier = nil
2080
+ hpxml.clothes_dryers[0].weekday_fractions = nil
2081
+ hpxml.clothes_dryers[0].weekend_fractions = nil
2082
+ hpxml.clothes_dryers[0].monthly_multipliers = nil
1315
2083
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1316
2084
  hpxml_default = _test_measure()
1317
- _test_default_clothes_dryer_values(hpxml_default, false, HPXML::LocationLivingSpace, 3.01, 1.0)
2085
+ _test_default_clothes_dryer_values(hpxml_default.clothes_dryers[0], false, HPXML::LocationLivingSpace, 3.01, 1.0, Schedule.ClothesDryerWeekdayFractions, Schedule.ClothesDryerWeekendFractions, Schedule.ClothesDryerMonthlyMultipliers)
1318
2086
 
1319
2087
  # Test defaults w/ gas clothes dryer
1320
2088
  hpxml.clothes_dryers[0].fuel_type = HPXML::FuelTypeNaturalGas
1321
2089
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1322
2090
  hpxml_default = _test_measure()
1323
- _test_default_clothes_dryer_values(hpxml_default, false, HPXML::LocationLivingSpace, 3.01, 1.0)
2091
+ _test_default_clothes_dryer_values(hpxml_default.clothes_dryers[0], false, HPXML::LocationLivingSpace, 3.01, 1.0, Schedule.ClothesDryerWeekdayFractions, Schedule.ClothesDryerWeekendFractions, Schedule.ClothesDryerMonthlyMultipliers)
1324
2092
 
1325
2093
  # Test defaults w/ electric clothes dryer before 301-2019 Addendum A
1326
2094
  hpxml.header.eri_calculation_version = '2019'
1327
2095
  hpxml.clothes_dryers[0].fuel_type = HPXML::FuelTypeElectricity
1328
2096
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1329
2097
  hpxml_default = _test_measure()
1330
- _test_default_clothes_dryer_values(hpxml_default, false, HPXML::LocationLivingSpace, 2.62, 1.0)
2098
+ _test_default_clothes_dryer_values(hpxml_default.clothes_dryers[0], false, HPXML::LocationLivingSpace, 2.62, 1.0, Schedule.ClothesDryerWeekdayFractions, Schedule.ClothesDryerWeekendFractions, Schedule.ClothesDryerMonthlyMultipliers)
1331
2099
 
1332
2100
  # Test defaults w/ gas clothes dryer before 301-2019 Addendum A
1333
2101
  hpxml.clothes_dryers[0].fuel_type = HPXML::FuelTypeNaturalGas
1334
2102
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1335
2103
  hpxml_default = _test_measure()
1336
- _test_default_clothes_dryer_values(hpxml_default, false, HPXML::LocationLivingSpace, 2.32, 1.0)
2104
+ _test_default_clothes_dryer_values(hpxml_default.clothes_dryers[0], false, HPXML::LocationLivingSpace, 2.32, 1.0, Schedule.ClothesDryerWeekdayFractions, Schedule.ClothesDryerWeekendFractions, Schedule.ClothesDryerMonthlyMultipliers)
1337
2105
  end
1338
2106
 
1339
2107
  def test_clothes_dryer_exhaust
@@ -1345,21 +2113,21 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1345
2113
  clothes_dryer.vented_flow_rate = 200
1346
2114
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1347
2115
  hpxml_default = _test_measure()
1348
- _test_default_clothes_dryer_exhaust_values(hpxml_default, true, 200)
2116
+ _test_default_clothes_dryer_exhaust_values(hpxml_default.clothes_dryers[0], true, 200)
1349
2117
 
1350
2118
  # Test inputs not overridden by defaults w/ unvented dryer
1351
2119
  clothes_dryer.is_vented = false
1352
2120
  clothes_dryer.vented_flow_rate = nil
1353
2121
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1354
2122
  hpxml_default = _test_measure()
1355
- _test_default_clothes_dryer_exhaust_values(hpxml_default, false, nil)
2123
+ _test_default_clothes_dryer_exhaust_values(hpxml_default.clothes_dryers[0], false, nil)
1356
2124
 
1357
2125
  # Test defaults
1358
2126
  clothes_dryer.is_vented = nil
1359
2127
  clothes_dryer.vented_flow_rate = nil
1360
2128
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1361
2129
  hpxml_default = _test_measure()
1362
- _test_default_clothes_dryer_exhaust_values(hpxml_default, true, 100)
2130
+ _test_default_clothes_dryer_exhaust_values(hpxml_default.clothes_dryers[0], true, 100)
1363
2131
  end
1364
2132
 
1365
2133
  def test_dishwashers
@@ -1368,14 +2136,16 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1368
2136
  hpxml.building_construction.residential_facility_type = HPXML::ResidentialTypeSFA
1369
2137
  hpxml.water_heating_systems[0].is_shared_system = true
1370
2138
  hpxml.water_heating_systems[0].number_of_units_served = 6
1371
- hpxml.water_heating_systems[0].fraction_dhw_load_served = 0
1372
2139
  hpxml.dishwashers[0].location = HPXML::LocationBasementConditioned
1373
2140
  hpxml.dishwashers[0].is_shared_appliance = true
1374
2141
  hpxml.dishwashers[0].usage_multiplier = 1.3
1375
2142
  hpxml.dishwashers[0].water_heating_system_idref = hpxml.water_heating_systems[0].id
2143
+ hpxml.dishwashers[0].weekday_fractions = ConstantDaySchedule
2144
+ hpxml.dishwashers[0].weekend_fractions = ConstantDaySchedule
2145
+ hpxml.dishwashers[0].monthly_multipliers = ConstantMonthSchedule
1376
2146
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1377
2147
  hpxml_default = _test_measure()
1378
- _test_default_dishwasher_values(hpxml_default, true, HPXML::LocationBasementConditioned, 307.0, 0.12, 1.09, 22.32, 4.0, 12, 1.3)
2148
+ _test_default_dishwasher_values(hpxml_default.dishwashers[0], true, HPXML::LocationBasementConditioned, 307.0, 0.12, 1.09, 22.32, 4.0, 12, 1.3, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1379
2149
 
1380
2150
  # Test defaults
1381
2151
  hpxml.dishwashers[0].is_shared_appliance = nil
@@ -1387,15 +2157,18 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1387
2157
  hpxml.dishwashers[0].label_usage = nil
1388
2158
  hpxml.dishwashers[0].place_setting_capacity = nil
1389
2159
  hpxml.dishwashers[0].usage_multiplier = nil
2160
+ hpxml.dishwashers[0].weekday_fractions = nil
2161
+ hpxml.dishwashers[0].weekend_fractions = nil
2162
+ hpxml.dishwashers[0].monthly_multipliers = nil
1390
2163
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1391
2164
  hpxml_default = _test_measure()
1392
- _test_default_dishwasher_values(hpxml_default, false, HPXML::LocationLivingSpace, 467.0, 0.12, 1.09, 33.12, 4.0, 12, 1.0)
2165
+ _test_default_dishwasher_values(hpxml_default.dishwashers[0], false, HPXML::LocationLivingSpace, 467.0, 0.12, 1.09, 33.12, 4.0, 12, 1.0, Schedule.DishwasherWeekdayFractions, Schedule.DishwasherWeekendFractions, Schedule.DishwasherMonthlyMultipliers)
1393
2166
 
1394
2167
  # Test defaults before 301-2019 Addendum A
1395
2168
  hpxml.header.eri_calculation_version = '2019'
1396
2169
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1397
2170
  hpxml_default = _test_measure()
1398
- _test_default_dishwasher_values(hpxml_default, false, HPXML::LocationLivingSpace, 467.0, 999, 999, 999, 999, 12, 1.0)
2171
+ _test_default_dishwasher_values(hpxml_default.dishwashers[0], false, HPXML::LocationLivingSpace, 467.0, 999, 999, 999, 999, 12, 1.0, Schedule.DishwasherWeekdayFractions, Schedule.DishwasherWeekendFractions, Schedule.DishwasherMonthlyMultipliers)
1399
2172
  end
1400
2173
 
1401
2174
  def test_refrigerators
@@ -1419,20 +2192,20 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1419
2192
  hpxml.refrigerators[0].monthly_multipliers = nil
1420
2193
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1421
2194
  hpxml_default = _test_measure()
1422
- _test_default_refrigerator_values(hpxml_default, HPXML::LocationLivingSpace, 691.0, 1.0, '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
2195
+ _test_default_refrigerator_values(hpxml_default, HPXML::LocationLivingSpace, 691.0, 1.0, Schedule.RefrigeratorWeekdayFractions, Schedule.RefrigeratorWeekendFractions, Schedule.RefrigeratorMonthlyMultipliers)
1423
2196
 
1424
2197
  # Test defaults w/ refrigerator in 5-bedroom house
1425
2198
  hpxml.building_construction.number_of_bedrooms = 5
1426
2199
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1427
2200
  hpxml_default = _test_measure()
1428
- _test_default_refrigerator_values(hpxml_default, HPXML::LocationLivingSpace, 727.0, 1.0, '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
2201
+ _test_default_refrigerator_values(hpxml_default, HPXML::LocationLivingSpace, 727.0, 1.0, Schedule.RefrigeratorWeekdayFractions, Schedule.RefrigeratorWeekendFractions, Schedule.RefrigeratorMonthlyMultipliers)
1429
2202
 
1430
2203
  # Test defaults before 301-2019 Addendum A
1431
2204
  hpxml.header.eri_calculation_version = '2019'
1432
2205
  hpxml.building_construction.number_of_bedrooms = 3
1433
2206
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1434
2207
  hpxml_default = _test_measure()
1435
- _test_default_refrigerator_values(hpxml_default, HPXML::LocationLivingSpace, 691.0, 1.0, '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
2208
+ _test_default_refrigerator_values(hpxml_default, HPXML::LocationLivingSpace, 691.0, 1.0, Schedule.RefrigeratorWeekdayFractions, Schedule.RefrigeratorWeekendFractions, Schedule.RefrigeratorMonthlyMultipliers)
1436
2209
  end
1437
2210
 
1438
2211
  def test_extra_refrigerators
@@ -1461,7 +2234,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1461
2234
  end
1462
2235
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1463
2236
  hpxml_default = _test_measure()
1464
- _test_default_extra_refrigerators_values(hpxml_default, HPXML::LocationBasementConditioned, 244.0, 1.0, '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
2237
+ _test_default_extra_refrigerators_values(hpxml_default, HPXML::LocationBasementConditioned, 244.0, 1.0, Schedule.ExtraRefrigeratorWeekdayFractions, Schedule.ExtraRefrigeratorWeekendFractions, Schedule.ExtraRefrigeratorMonthlyMultipliers)
1465
2238
  end
1466
2239
 
1467
2240
  def test_freezers
@@ -1490,7 +2263,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1490
2263
  end
1491
2264
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1492
2265
  hpxml_default = _test_measure()
1493
- _test_default_freezers_values(hpxml_default, HPXML::LocationBasementConditioned, 320.0, 1.0, '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
2266
+ _test_default_freezers_values(hpxml_default, HPXML::LocationBasementConditioned, 320.0, 1.0, Schedule.FreezerWeekdayFractions, Schedule.FreezerWeekendFractions, Schedule.FreezerMonthlyMultipliers)
1494
2267
  end
1495
2268
 
1496
2269
  def test_cooking_ranges
@@ -1504,7 +2277,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1504
2277
  hpxml.cooking_ranges[0].monthly_multipliers = ConstantMonthSchedule
1505
2278
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1506
2279
  hpxml_default = _test_measure()
1507
- _test_default_cooking_range_values(hpxml_default, HPXML::LocationBasementConditioned, true, 1.1, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
2280
+ _test_default_cooking_range_values(hpxml_default.cooking_ranges[0], HPXML::LocationBasementConditioned, true, 1.1, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1508
2281
 
1509
2282
  # Test defaults
1510
2283
  hpxml.cooking_ranges[0].location = nil
@@ -1515,13 +2288,13 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1515
2288
  hpxml.cooking_ranges[0].monthly_multipliers = nil
1516
2289
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1517
2290
  hpxml_default = _test_measure()
1518
- _test_default_cooking_range_values(hpxml_default, HPXML::LocationLivingSpace, false, 1.0, '0.007, 0.007, 0.004, 0.004, 0.007, 0.011, 0.025, 0.042, 0.046, 0.048, 0.042, 0.050, 0.057, 0.046, 0.057, 0.044, 0.092, 0.150, 0.117, 0.060, 0.035, 0.025, 0.016, 0.011', '0.007, 0.007, 0.004, 0.004, 0.007, 0.011, 0.025, 0.042, 0.046, 0.048, 0.042, 0.050, 0.057, 0.046, 0.057, 0.044, 0.092, 0.150, 0.117, 0.060, 0.035, 0.025, 0.016, 0.011', '1.097, 1.097, 0.991, 0.987, 0.991, 0.890, 0.896, 0.896, 0.890, 1.085, 1.085, 1.097')
2291
+ _test_default_cooking_range_values(hpxml_default.cooking_ranges[0], HPXML::LocationLivingSpace, false, 1.0, Schedule.CookingRangeWeekdayFractions, Schedule.CookingRangeWeekendFractions, Schedule.CookingRangeMonthlyMultipliers)
1519
2292
 
1520
2293
  # Test defaults before 301-2019 Addendum A
1521
2294
  hpxml.header.eri_calculation_version = '2019'
1522
2295
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1523
2296
  hpxml_default = _test_measure()
1524
- _test_default_cooking_range_values(hpxml_default, HPXML::LocationLivingSpace, false, 1.0, '0.007, 0.007, 0.004, 0.004, 0.007, 0.011, 0.025, 0.042, 0.046, 0.048, 0.042, 0.050, 0.057, 0.046, 0.057, 0.044, 0.092, 0.150, 0.117, 0.060, 0.035, 0.025, 0.016, 0.011', '0.007, 0.007, 0.004, 0.004, 0.007, 0.011, 0.025, 0.042, 0.046, 0.048, 0.042, 0.050, 0.057, 0.046, 0.057, 0.044, 0.092, 0.150, 0.117, 0.060, 0.035, 0.025, 0.016, 0.011', '1.097, 1.097, 0.991, 0.987, 0.991, 0.890, 0.896, 0.896, 0.890, 1.085, 1.085, 1.097')
2297
+ _test_default_cooking_range_values(hpxml_default.cooking_ranges[0], HPXML::LocationLivingSpace, false, 1.0, Schedule.CookingRangeWeekdayFractions, Schedule.CookingRangeWeekendFractions, Schedule.CookingRangeMonthlyMultipliers)
1525
2298
  end
1526
2299
 
1527
2300
  def test_ovens
@@ -1530,19 +2303,19 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1530
2303
  hpxml.ovens[0].is_convection = true
1531
2304
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1532
2305
  hpxml_default = _test_measure()
1533
- _test_default_oven_values(hpxml_default, true)
2306
+ _test_default_oven_values(hpxml_default.ovens[0], true)
1534
2307
 
1535
2308
  # Test defaults
1536
2309
  hpxml.ovens[0].is_convection = nil
1537
2310
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1538
2311
  hpxml_default = _test_measure()
1539
- _test_default_oven_values(hpxml_default, false)
2312
+ _test_default_oven_values(hpxml_default.ovens[0], false)
1540
2313
 
1541
2314
  # Test defaults before 301-2019 Addendum A
1542
2315
  hpxml.header.eri_calculation_version = '2019'
1543
2316
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1544
2317
  hpxml_default = _test_measure()
1545
- _test_default_oven_values(hpxml_default, false)
2318
+ _test_default_oven_values(hpxml_default.ovens[0], false)
1546
2319
  end
1547
2320
 
1548
2321
  def test_lighting
@@ -1605,9 +2378,9 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1605
2378
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1606
2379
  hpxml_default = _test_measure()
1607
2380
  _test_default_lighting_values(hpxml_default, 1.0, 1.0, 1.0,
1608
- { ext_wk_sch: '0.046, 0.046, 0.046, 0.046, 0.046, 0.037, 0.035, 0.034, 0.033, 0.028, 0.022, 0.015, 0.012, 0.011, 0.011, 0.012, 0.019, 0.037, 0.049, 0.065, 0.091, 0.105, 0.091, 0.063',
1609
- ext_wknd_sch: '0.046, 0.046, 0.045, 0.045, 0.046, 0.045, 0.044, 0.041, 0.036, 0.03, 0.024, 0.016, 0.012, 0.011, 0.011, 0.012, 0.019, 0.038, 0.048, 0.06, 0.083, 0.098, 0.085, 0.059',
1610
- ext_month_mult: '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248' })
2381
+ { ext_wk_sch: Schedule.LightingExteriorWeekdayFractions,
2382
+ ext_wknd_sch: Schedule.LightingExteriorWeekendFractions,
2383
+ ext_month_mult: Schedule.LightingExteriorMonthlyMultipliers })
1611
2384
 
1612
2385
  # Test defaults w/ garage
1613
2386
  hpxml = _create_hpxml('base-enclosure-garage.xml')
@@ -1617,12 +2390,12 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1617
2390
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1618
2391
  hpxml_default = _test_measure()
1619
2392
  _test_default_lighting_values(hpxml_default, 1.0, 1.0, 1.0,
1620
- { ext_wk_sch: '0.046, 0.046, 0.046, 0.046, 0.046, 0.037, 0.035, 0.034, 0.033, 0.028, 0.022, 0.015, 0.012, 0.011, 0.011, 0.012, 0.019, 0.037, 0.049, 0.065, 0.091, 0.105, 0.091, 0.063',
1621
- ext_wknd_sch: '0.046, 0.046, 0.045, 0.045, 0.046, 0.045, 0.044, 0.041, 0.036, 0.03, 0.024, 0.016, 0.012, 0.011, 0.011, 0.012, 0.019, 0.038, 0.048, 0.06, 0.083, 0.098, 0.085, 0.059',
1622
- ext_month_mult: '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248',
1623
- grg_wk_sch: '0.046, 0.046, 0.046, 0.046, 0.046, 0.037, 0.035, 0.034, 0.033, 0.028, 0.022, 0.015, 0.012, 0.011, 0.011, 0.012, 0.019, 0.037, 0.049, 0.065, 0.091, 0.105, 0.091, 0.063',
1624
- grg_wknd_sch: '0.046, 0.046, 0.045, 0.045, 0.046, 0.045, 0.044, 0.041, 0.036, 0.03, 0.024, 0.016, 0.012, 0.011, 0.011, 0.012, 0.019, 0.038, 0.048, 0.06, 0.083, 0.098, 0.085, 0.059',
1625
- grg_month_mult: '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248' })
2393
+ { ext_wk_sch: Schedule.LightingExteriorWeekdayFractions,
2394
+ ext_wknd_sch: Schedule.LightingExteriorWeekendFractions,
2395
+ ext_month_mult: Schedule.LightingExteriorMonthlyMultipliers,
2396
+ grg_wk_sch: Schedule.LightingExteriorWeekdayFractions,
2397
+ grg_wknd_sch: Schedule.LightingExteriorWeekendFractions,
2398
+ grg_month_mult: Schedule.LightingExteriorMonthlyMultipliers })
1626
2399
  end
1627
2400
 
1628
2401
  def test_ceiling_fans
@@ -1630,18 +2403,24 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1630
2403
  hpxml = _create_hpxml('base-lighting-ceiling-fans.xml')
1631
2404
  hpxml.ceiling_fans[0].quantity = 2
1632
2405
  hpxml.ceiling_fans[0].efficiency = 100
2406
+ hpxml.ceiling_fans[0].weekday_fractions = ConstantDaySchedule
2407
+ hpxml.ceiling_fans[0].weekend_fractions = ConstantDaySchedule
2408
+ hpxml.ceiling_fans[0].monthly_multipliers = ConstantMonthSchedule
1633
2409
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1634
2410
  hpxml_default = _test_measure()
1635
- _test_default_ceiling_fan_values(hpxml_default, 2, 100)
2411
+ _test_default_ceiling_fan_values(hpxml_default.ceiling_fans[0], 2, 100, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1636
2412
 
1637
2413
  # Test defaults
1638
2414
  hpxml.ceiling_fans.each do |ceiling_fan|
1639
2415
  ceiling_fan.quantity = nil
1640
2416
  ceiling_fan.efficiency = nil
2417
+ ceiling_fan.weekday_fractions = nil
2418
+ ceiling_fan.weekend_fractions = nil
2419
+ ceiling_fan.monthly_multipliers = nil
1641
2420
  end
1642
2421
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1643
2422
  hpxml_default = _test_measure()
1644
- _test_default_ceiling_fan_values(hpxml_default, 4, 70.4)
2423
+ _test_default_ceiling_fan_values(hpxml_default.ceiling_fans[0], 4, 70.4, Schedule.CeilingFanWeekdayFractions, Schedule.CeilingFanWeekendFractions, '0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0')
1645
2424
  end
1646
2425
 
1647
2426
  def test_pools
@@ -1661,8 +2440,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1661
2440
  pool.pump_monthly_multipliers = ConstantMonthSchedule
1662
2441
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1663
2442
  hpxml_default = _test_measure()
1664
- _test_default_pool_heater_values(hpxml_default, HPXML::UnitsKwhPerYear, 1000, 1.4, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1665
- _test_default_pool_pump_values(hpxml_default, 3000, 1.3, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
2443
+ _test_default_pool_heater_values(hpxml_default.pools[0], HPXML::UnitsKwhPerYear, 1000, 1.4, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
2444
+ _test_default_pool_pump_values(hpxml_default.pools[0], 3000, 1.3, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1666
2445
 
1667
2446
  # Test defaults
1668
2447
  pool = hpxml.pools[0]
@@ -1679,8 +2458,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1679
2458
  pool.pump_monthly_multipliers = nil
1680
2459
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1681
2460
  hpxml_default = _test_measure()
1682
- _test_default_pool_heater_values(hpxml_default, HPXML::UnitsThermPerYear, 236, 1.0, '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003', '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003', '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
1683
- _test_default_pool_pump_values(hpxml_default, 2496, 1.0, '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003', '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003', '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
2461
+ _test_default_pool_heater_values(hpxml_default.pools[0], HPXML::UnitsThermPerYear, 236, 1.0, Schedule.PoolHeaterWeekdayFractions, Schedule.PoolHeaterWeekendFractions, Schedule.PoolHeaterMonthlyMultipliers)
2462
+ _test_default_pool_pump_values(hpxml_default.pools[0], 2496, 1.0, Schedule.PoolPumpWeekdayFractions, Schedule.PoolPumpWeekendFractions, Schedule.PoolPumpMonthlyMultipliers)
1684
2463
 
1685
2464
  # Test defaults 2
1686
2465
  hpxml = _create_hpxml('base-misc-loads-large-uncommon2.xml')
@@ -1698,8 +2477,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1698
2477
  pool.pump_monthly_multipliers = nil
1699
2478
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1700
2479
  hpxml_default = _test_measure()
1701
- _test_default_pool_heater_values(hpxml_default, nil, nil, nil, nil, nil, nil)
1702
- _test_default_pool_pump_values(hpxml_default, 2496, 1.0, '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003', '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003', '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
2480
+ _test_default_pool_heater_values(hpxml_default.pools[0], nil, nil, nil, nil, nil, nil)
2481
+ _test_default_pool_pump_values(hpxml_default.pools[0], 2496, 1.0, Schedule.PoolPumpWeekdayFractions, Schedule.PoolPumpWeekendFractions, Schedule.PoolPumpMonthlyMultipliers)
1703
2482
  end
1704
2483
 
1705
2484
  def test_hot_tubs
@@ -1719,8 +2498,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1719
2498
  hot_tub.pump_monthly_multipliers = ConstantMonthSchedule
1720
2499
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1721
2500
  hpxml_default = _test_measure()
1722
- _test_default_hot_tub_heater_values(hpxml_default, HPXML::UnitsThermPerYear, 1000, 0.8, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1723
- _test_default_hot_tub_pump_values(hpxml_default, 3000, 0.7, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
2501
+ _test_default_hot_tub_heater_values(hpxml_default.hot_tubs[0], HPXML::UnitsThermPerYear, 1000, 0.8, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
2502
+ _test_default_hot_tub_pump_values(hpxml_default.hot_tubs[0], 3000, 0.7, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
1724
2503
 
1725
2504
  # Test defaults
1726
2505
  hot_tub = hpxml.hot_tubs[0]
@@ -1737,8 +2516,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1737
2516
  hot_tub.pump_monthly_multipliers = nil
1738
2517
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1739
2518
  hpxml_default = _test_measure()
1740
- _test_default_hot_tub_heater_values(hpxml_default, HPXML::UnitsKwhPerYear, 1125, 1.0, '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
1741
- _test_default_hot_tub_pump_values(hpxml_default, 1111, 1.0, '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921')
2519
+ _test_default_hot_tub_heater_values(hpxml_default.hot_tubs[0], HPXML::UnitsKwhPerYear, 1125, 1.0, Schedule.HotTubHeaterWeekdayFractions, Schedule.HotTubHeaterWeekendFractions, Schedule.HotTubHeaterMonthlyMultipliers)
2520
+ _test_default_hot_tub_pump_values(hpxml_default.hot_tubs[0], 1111, 1.0, Schedule.HotTubPumpWeekdayFractions, Schedule.HotTubPumpWeekendFractions, Schedule.HotTubPumpMonthlyMultipliers)
1742
2521
 
1743
2522
  # Test defaults 2
1744
2523
  hpxml = _create_hpxml('base-misc-loads-large-uncommon2.xml')
@@ -1756,8 +2535,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1756
2535
  hot_tub.pump_monthly_multipliers = nil
1757
2536
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1758
2537
  hpxml_default = _test_measure()
1759
- _test_default_hot_tub_heater_values(hpxml_default, HPXML::UnitsKwhPerYear, 225, 1.0, '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837')
1760
- _test_default_hot_tub_pump_values(hpxml_default, 1111, 1.0, '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024', '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921')
2538
+ _test_default_hot_tub_heater_values(hpxml_default.hot_tubs[0], HPXML::UnitsKwhPerYear, 225, 1.0, Schedule.HotTubHeaterWeekdayFractions, Schedule.HotTubHeaterWeekendFractions, Schedule.HotTubHeaterMonthlyMultipliers)
2539
+ _test_default_hot_tub_pump_values(hpxml_default.hot_tubs[0], 1111, 1.0, Schedule.HotTubPumpWeekdayFractions, Schedule.HotTubPumpWeekendFractions, Schedule.HotTubPumpMonthlyMultipliers)
1761
2540
  end
1762
2541
 
1763
2542
  def test_plug_loads
@@ -1814,10 +2593,10 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1814
2593
  end
1815
2594
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1816
2595
  hpxml_default = _test_measure()
1817
- _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeTelevision, 620, 1.0, 0.0, 1.0, '0.037, 0.018, 0.009, 0.007, 0.011, 0.018, 0.029, 0.040, 0.049, 0.058, 0.065, 0.072, 0.076, 0.086, 0.091, 0.102, 0.127, 0.156, 0.210, 0.294, 0.363, 0.344, 0.208, 0.090', '0.044, 0.022, 0.012, 0.008, 0.011, 0.014, 0.024, 0.043, 0.071, 0.094, 0.112, 0.123, 0.132, 0.156, 0.178, 0.196, 0.206, 0.213, 0.251, 0.330, 0.388, 0.358, 0.226, 0.103', '1.137, 1.129, 0.961, 0.969, 0.961, 0.993, 0.996, 0.96, 0.993, 0.867, 0.86, 1.137')
1818
- _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeOther, 2457, 0.855, 0.045, 1.0, '0.035, 0.033, 0.032, 0.031, 0.032, 0.033, 0.037, 0.042, 0.043, 0.043, 0.043, 0.044, 0.045, 0.045, 0.044, 0.046, 0.048, 0.052, 0.053, 0.05, 0.047, 0.045, 0.04, 0.036', '0.035, 0.033, 0.032, 0.031, 0.032, 0.033, 0.037, 0.042, 0.043, 0.043, 0.043, 0.044, 0.045, 0.045, 0.044, 0.046, 0.048, 0.052, 0.053, 0.05, 0.047, 0.045, 0.04, 0.036', '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248')
1819
- _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeElectricVehicleCharging, 1667, 0.0, 0.0, 1.0, '0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042', '0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042', '1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1')
1820
- _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeWellPump, 441, 0.0, 0.0, 1.0, '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065', '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065', '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
2596
+ _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeTelevision, 620, 1.0, 0.0, 1.0, Schedule.PlugLoadsTVWeekdayFractions, Schedule.PlugLoadsTVWeekendFractions, Schedule.PlugLoadsTVMonthlyMultipliers)
2597
+ _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeOther, 2457, 0.855, 0.045, 1.0, Schedule.PlugLoadsOtherWeekdayFractions, Schedule.PlugLoadsOtherWeekendFractions, Schedule.PlugLoadsOtherMonthlyMultipliers)
2598
+ _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeElectricVehicleCharging, 1667, 0.0, 0.0, 1.0, Schedule.PlugLoadsVehicleWeekdayFractions, Schedule.PlugLoadsVehicleWeekendFractions, Schedule.PlugLoadsVehicleMonthlyMultipliers)
2599
+ _test_default_plug_load_values(hpxml_default, HPXML::PlugLoadTypeWellPump, 441, 0.0, 0.0, 1.0, Schedule.PlugLoadsWellPumpWeekdayFractions, Schedule.PlugLoadsWellPumpWeekendFractions, Schedule.PlugLoadsWellPumpMonthlyMultipliers)
1821
2600
  end
1822
2601
 
1823
2602
  def test_fuel_loads
@@ -1865,9 +2644,97 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1865
2644
  end
1866
2645
  XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
1867
2646
  hpxml_default = _test_measure()
1868
- _test_default_fuel_load_values(hpxml_default, HPXML::FuelLoadTypeGrill, 33, 0.0, 0.0, 1.0, '0.004, 0.001, 0.001, 0.002, 0.007, 0.012, 0.029, 0.046, 0.044, 0.041, 0.044, 0.046, 0.042, 0.038, 0.049, 0.059, 0.110, 0.161, 0.115, 0.070, 0.044, 0.019, 0.013, 0.007', '0.004, 0.001, 0.001, 0.002, 0.007, 0.012, 0.029, 0.046, 0.044, 0.041, 0.044, 0.046, 0.042, 0.038, 0.049, 0.059, 0.110, 0.161, 0.115, 0.070, 0.044, 0.019, 0.013, 0.007', '1.097, 1.097, 0.991, 0.987, 0.991, 0.890, 0.896, 0.896, 0.890, 1.085, 1.085, 1.097')
1869
- _test_default_fuel_load_values(hpxml_default, HPXML::FuelLoadTypeLighting, 20, 0.0, 0.0, 1.0, '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065', '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065', '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
1870
- _test_default_fuel_load_values(hpxml_default, HPXML::FuelLoadTypeFireplace, 67, 0.5, 0.1, 1.0, '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065', '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065', '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154')
2647
+ _test_default_fuel_load_values(hpxml_default, HPXML::FuelLoadTypeGrill, 33, 0.0, 0.0, 1.0, Schedule.FuelLoadsGrillWeekdayFractions, Schedule.FuelLoadsGrillWeekendFractions, Schedule.FuelLoadsGrillMonthlyMultipliers)
2648
+ _test_default_fuel_load_values(hpxml_default, HPXML::FuelLoadTypeLighting, 20, 0.0, 0.0, 1.0, Schedule.FuelLoadsLightingWeekdayFractions, Schedule.FuelLoadsLightingWeekendFractions, Schedule.FuelLoadsLightingMonthlyMultipliers)
2649
+ _test_default_fuel_load_values(hpxml_default, HPXML::FuelLoadTypeFireplace, 67, 0.5, 0.1, 1.0, Schedule.FuelLoadsFireplaceWeekdayFractions, Schedule.FuelLoadsFireplaceWeekendFractions, Schedule.FuelLoadsFireplaceMonthlyMultipliers)
2650
+ end
2651
+
2652
+ def test_hvac_lookup
2653
+ central_air_conditioner_seer = HVAC.get_default_hvac_efficiency_by_year_installed(1970, 'central air conditioner', 'electricity', 'SEER')
2654
+ assert_equal(central_air_conditioner_seer, 8.0)
2655
+
2656
+ room_air_conditioner_eer = HVAC.get_default_hvac_efficiency_by_year_installed(1993, 'room air conditioner', 'electricity', 'EER')
2657
+ assert_equal(room_air_conditioner_eer, 9.05)
2658
+
2659
+ furnace_afue = HVAC.get_default_hvac_efficiency_by_year_installed(1997, 'Furnace', 'natural gas', 'AFUE')
2660
+ assert_equal(furnace_afue, 0.829)
2661
+
2662
+ furnace_afue = HVAC.get_default_hvac_efficiency_by_year_installed(1981, 'Furnace', 'diesel', 'AFUE')
2663
+ assert_equal(furnace_afue, 0.768)
2664
+
2665
+ wall_furnace_afue = HVAC.get_default_hvac_efficiency_by_year_installed(1997, 'WallFurnace', 'natural gas', 'AFUE')
2666
+ assert_equal(wall_furnace_afue, 0.656)
2667
+
2668
+ wall_furnace_afue = HVAC.get_default_hvac_efficiency_by_year_installed(1971, 'WallFurnace', 'propane', 'AFUE')
2669
+ assert_equal(wall_furnace_afue, 0.6)
2670
+
2671
+ wall_furnace_afue = HVAC.get_default_hvac_efficiency_by_year_installed(1970, 'FloorFurnace', 'natural gas', 'AFUE')
2672
+ assert_equal(wall_furnace_afue, 0.6)
2673
+
2674
+ boiler_afue = HVAC.get_default_hvac_efficiency_by_year_installed(2004, 'Boiler', 'propane', 'AFUE')
2675
+ assert_equal(boiler_afue, 0.831)
2676
+
2677
+ heatpump_seer = HVAC.get_default_hvac_efficiency_by_year_installed(1991, 'air-to-air', 'electricity', 'SEER')
2678
+ assert_equal(heatpump_seer, 9.77)
2679
+
2680
+ heatpump_hspf = HVAC.get_default_hvac_efficiency_by_year_installed(1988, 'air-to-air', 'electricity', 'HSPF')
2681
+ assert_equal(heatpump_hspf, 6.88)
2682
+
2683
+ assert_equal(
2684
+ HVAC.get_default_hvac_efficiency_by_year_installed(2010, 'air-to-air', 'electricity', 'SEER'),
2685
+ HVAC.get_default_hvac_efficiency_by_year_installed(2011, 'air-to-air', 'electricity', 'SEER')
2686
+ )
2687
+
2688
+ assert_equal(
2689
+ HVAC.get_default_hvac_efficiency_by_year_installed(2010, 'Furnace', 'natural gas', 'AFUE'),
2690
+ HVAC.get_default_hvac_efficiency_by_year_installed(2020, 'Furnace', 'natural gas', 'AFUE')
2691
+ )
2692
+
2693
+ assert_equal(
2694
+ HVAC.get_default_hvac_efficiency_by_year_installed(1969, 'Boiler', 'fuel oil', 'AFUE'),
2695
+ HVAC.get_default_hvac_efficiency_by_year_installed(1970, 'Boiler', 'fuel oil', 'AFUE')
2696
+ )
2697
+
2698
+ assert_equal(
2699
+ HVAC.get_default_hvac_efficiency_by_year_installed(1955, 'central air conditioner', 'electricity', 'SEER'),
2700
+ HVAC.get_default_hvac_efficiency_by_year_installed(1970, 'central air conditioner', 'electricity', 'SEER')
2701
+ )
2702
+ end
2703
+
2704
+ def test_dhw_lookup
2705
+ waterheater_elec_ef = Waterheater.get_default_water_heater_efficiency_by_year_installed(2006, 'electricity')
2706
+ assert_equal(waterheater_elec_ef, 0.9)
2707
+
2708
+ waterheater_natural_gas_ef = Waterheater.get_default_water_heater_efficiency_by_year_installed(1998, 'natural gas')
2709
+ assert_equal(waterheater_natural_gas_ef, 0.501)
2710
+
2711
+ waterheater_propane_ef = Waterheater.get_default_water_heater_efficiency_by_year_installed(2007, 'propane')
2712
+ assert_equal(waterheater_propane_ef, 0.55)
2713
+
2714
+ waterheater_fuel_oil_ef = Waterheater.get_default_water_heater_efficiency_by_year_installed(1989, 'fuel oil')
2715
+ assert_equal(waterheater_fuel_oil_ef, 0.54)
2716
+
2717
+ waterheater_fuel_oil_ef = Waterheater.get_default_water_heater_efficiency_by_year_installed(1989, 'wood')
2718
+ assert_equal(waterheater_fuel_oil_ef, 0.54)
2719
+
2720
+ ['natural gas', 'electricity', 'propane', 'fuel oil'].each do |fuel_type|
2721
+ assert_equal(
2722
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(2010, fuel_type),
2723
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(2011, fuel_type)
2724
+ )
2725
+ assert_equal(
2726
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(2010, fuel_type),
2727
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(2020, fuel_type)
2728
+ )
2729
+ assert_equal(
2730
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(1971, fuel_type),
2731
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(1972, fuel_type)
2732
+ )
2733
+ assert_equal(
2734
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(1955, fuel_type),
2735
+ Waterheater.get_default_water_heater_efficiency_by_year_installed(1972, fuel_type)
2736
+ )
2737
+ end
1871
2738
  end
1872
2739
 
1873
2740
  def _test_measure()
@@ -1928,8 +2795,30 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1928
2795
  assert_equal(shielding_of_home, hpxml.site.shielding_of_home)
1929
2796
  end
1930
2797
 
1931
- def _test_default_occupancy_values(hpxml, num_occupants)
2798
+ def _test_default_neighbor_building_values(hpxml, azimuths)
2799
+ assert_equal(azimuths.size, hpxml.neighbor_buildings.size)
2800
+ hpxml.neighbor_buildings.each_with_index do |neighbor_building, idx|
2801
+ assert_equal(azimuths[idx], neighbor_building.azimuth)
2802
+ end
2803
+ end
2804
+
2805
+ def _test_default_occupancy_values(hpxml, num_occupants, weekday_sch, weekend_sch, monthly_mults)
1932
2806
  assert_equal(num_occupants, hpxml.building_occupancy.number_of_residents)
2807
+ if weekday_sch.nil?
2808
+ assert_nil(hpxml.building_occupancy.weekday_fractions)
2809
+ else
2810
+ assert_equal(weekday_sch, hpxml.building_occupancy.weekday_fractions)
2811
+ end
2812
+ if weekend_sch.nil?
2813
+ assert_nil(hpxml.building_occupancy.weekend_fractions)
2814
+ else
2815
+ assert_equal(weekend_sch, hpxml.building_occupancy.weekend_fractions)
2816
+ end
2817
+ if monthly_mults.nil?
2818
+ assert_nil(hpxml.building_occupancy.monthly_multipliers)
2819
+ else
2820
+ assert_equal(monthly_mults, hpxml.building_occupancy.monthly_multipliers)
2821
+ end
1933
2822
  end
1934
2823
 
1935
2824
  def _test_default_building_construction_values(hpxml, building_volume, average_ceiling_height, has_flue_or_chimney, n_bathrooms)
@@ -1939,67 +2828,94 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
1939
2828
  assert_equal(n_bathrooms, hpxml.building_construction.number_of_bathrooms)
1940
2829
  end
1941
2830
 
1942
- def _test_default_infiltration_values(hpxml, volume)
1943
- air_infiltration_measurement = hpxml.air_infiltration_measurements[0]
1944
-
2831
+ def _test_default_infiltration_values(air_infiltration_measurement, volume)
1945
2832
  assert_equal(volume, air_infiltration_measurement.infiltration_volume)
1946
2833
  end
1947
2834
 
1948
- def _test_default_attic_values(hpxml, sla)
1949
- attic = hpxml.attics[0]
1950
-
2835
+ def _test_default_attic_values(attic, sla)
1951
2836
  assert_in_epsilon(sla, attic.vented_attic_sla, 0.001)
1952
2837
  end
1953
2838
 
1954
- def _test_default_foundation_values(hpxml, sla)
1955
- foundation = hpxml.foundations[0]
1956
-
2839
+ def _test_default_foundation_values(foundation, sla)
1957
2840
  assert_in_epsilon(sla, foundation.vented_crawlspace_sla, 0.001)
1958
2841
  end
1959
2842
 
1960
- def _test_default_roof_values(hpxml, roof_type, solar_absorptance, roof_color, emittance, radiant_barrier)
1961
- roof = hpxml.roofs[0]
1962
-
2843
+ def _test_default_roof_values(roof, roof_type, solar_absorptance, roof_color, emittance, radiant_barrier,
2844
+ radiant_barrier_grade, int_finish_type, int_finish_thickness, azimuth)
1963
2845
  assert_equal(roof_type, roof.roof_type)
1964
2846
  assert_equal(solar_absorptance, roof.solar_absorptance)
1965
2847
  assert_equal(roof_color, roof.roof_color)
1966
2848
  assert_equal(emittance, roof.emittance)
1967
2849
  assert_equal(radiant_barrier, roof.radiant_barrier)
2850
+ if not radiant_barrier_grade.nil?
2851
+ assert_equal(radiant_barrier_grade, roof.radiant_barrier_grade)
2852
+ else
2853
+ assert_nil(roof.radiant_barrier_grade)
2854
+ end
2855
+ assert_equal(int_finish_type, roof.interior_finish_type)
2856
+ if not int_finish_thickness.nil?
2857
+ assert_equal(int_finish_thickness, roof.interior_finish_thickness)
2858
+ else
2859
+ assert_nil(roof.interior_finish_thickness)
2860
+ end
2861
+ assert_equal(azimuth, roof.azimuth)
1968
2862
  end
1969
2863
 
1970
- def _test_default_rim_joist_values(hpxml, siding, solar_absorptance, color, emittance)
1971
- rim_joist = hpxml.rim_joists[0]
1972
-
2864
+ def _test_default_rim_joist_values(rim_joist, siding, solar_absorptance, color, emittance, azimuth)
1973
2865
  assert_equal(siding, rim_joist.siding)
1974
2866
  assert_equal(solar_absorptance, rim_joist.solar_absorptance)
1975
2867
  assert_equal(color, rim_joist.color)
1976
2868
  assert_equal(emittance, rim_joist.emittance)
2869
+ assert_equal(azimuth, rim_joist.azimuth)
1977
2870
  end
1978
2871
 
1979
- def _test_default_wall_values(hpxml, siding, solar_absorptance, color, emittance)
1980
- wall = hpxml.walls[0]
1981
-
2872
+ def _test_default_wall_values(wall, siding, solar_absorptance, color, emittance, int_finish_type, int_finish_thickness, azimuth)
1982
2873
  assert_equal(siding, wall.siding)
1983
2874
  assert_equal(solar_absorptance, wall.solar_absorptance)
1984
2875
  assert_equal(color, wall.color)
1985
2876
  assert_equal(emittance, wall.emittance)
2877
+ assert_equal(int_finish_type, wall.interior_finish_type)
2878
+ if not int_finish_thickness.nil?
2879
+ assert_equal(int_finish_thickness, wall.interior_finish_thickness)
2880
+ else
2881
+ assert_nil(wall.interior_finish_thickness)
2882
+ end
1986
2883
  end
1987
2884
 
1988
- def _test_default_foundation_wall_values(hpxml, thickness)
1989
- foundation_wall = hpxml.foundation_walls[0]
1990
-
2885
+ def _test_default_foundation_wall_values(foundation_wall, thickness, int_finish_type, int_finish_thickness, azimuth, area,
2886
+ ins_int_top, ins_int_bottom, ins_ext_top, ins_ext_bottom, type)
1991
2887
  assert_equal(thickness, foundation_wall.thickness)
2888
+ assert_equal(int_finish_type, foundation_wall.interior_finish_type)
2889
+ if not int_finish_thickness.nil?
2890
+ assert_equal(int_finish_thickness, foundation_wall.interior_finish_thickness)
2891
+ else
2892
+ assert_nil(foundation_wall.interior_finish_thickness)
2893
+ end
2894
+ assert_equal(azimuth, foundation_wall.azimuth)
2895
+ assert_equal(area, foundation_wall.area)
2896
+ assert_equal(ins_int_top, foundation_wall.insulation_interior_distance_to_top)
2897
+ assert_equal(ins_int_bottom, foundation_wall.insulation_interior_distance_to_bottom)
2898
+ assert_equal(ins_ext_top, foundation_wall.insulation_exterior_distance_to_top)
2899
+ assert_equal(ins_ext_bottom, foundation_wall.insulation_exterior_distance_to_bottom)
2900
+ assert_equal(type, foundation_wall.type)
1992
2901
  end
1993
2902
 
1994
- def _test_default_slab_values(hpxml, thickness, carpet_r_value, carpet_fraction)
1995
- slab = hpxml.slabs[0]
2903
+ def _test_default_frame_floor_values(frame_floor, int_finish_type, int_finish_thickness)
2904
+ assert_equal(int_finish_type, frame_floor.interior_finish_type)
2905
+ if not int_finish_thickness.nil?
2906
+ assert_equal(int_finish_thickness, frame_floor.interior_finish_thickness)
2907
+ else
2908
+ assert_nil(frame_floor.interior_finish_thickness)
2909
+ end
2910
+ end
1996
2911
 
2912
+ def _test_default_slab_values(slab, thickness, carpet_r_value, carpet_fraction)
1997
2913
  assert_equal(thickness, slab.thickness)
1998
2914
  assert_equal(carpet_r_value, slab.carpet_r_value)
1999
2915
  assert_equal(carpet_fraction, slab.carpet_fraction)
2000
2916
  end
2001
2917
 
2002
- def _test_default_window_values(hpxml, ext_summer_sfs, ext_winter_sfs, int_summer_sfs, int_winter_sfs, fraction_operable)
2918
+ def _test_default_window_values(hpxml, ext_summer_sfs, ext_winter_sfs, int_summer_sfs, int_winter_sfs, fraction_operable, azimuths)
2003
2919
  assert_equal(ext_summer_sfs.size, hpxml.windows.size)
2004
2920
  hpxml.windows.each_with_index do |window, idx|
2005
2921
  assert_equal(ext_summer_sfs[idx], window.exterior_shading_factor_summer)
@@ -2007,23 +2923,40 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2007
2923
  assert_equal(int_summer_sfs[idx], window.interior_shading_factor_summer)
2008
2924
  assert_equal(int_winter_sfs[idx], window.interior_shading_factor_winter)
2009
2925
  assert_equal(fraction_operable[idx], window.fraction_operable)
2926
+ assert_equal(azimuths[idx], window.azimuth)
2010
2927
  end
2011
2928
  end
2012
2929
 
2013
- def _test_default_skylight_values(hpxml, ext_summer_sfs, ext_winter_sfs, int_summer_sfs, int_winter_sfs)
2930
+ def _test_default_skylight_values(hpxml, ext_summer_sfs, ext_winter_sfs, int_summer_sfs, int_winter_sfs, azimuths)
2014
2931
  assert_equal(ext_summer_sfs.size, hpxml.skylights.size)
2015
2932
  hpxml.skylights.each_with_index do |skylight, idx|
2016
2933
  assert_equal(ext_summer_sfs[idx], skylight.exterior_shading_factor_summer)
2017
2934
  assert_equal(ext_winter_sfs[idx], skylight.exterior_shading_factor_winter)
2018
2935
  assert_equal(int_summer_sfs[idx], skylight.interior_shading_factor_summer)
2019
2936
  assert_equal(int_winter_sfs[idx], skylight.interior_shading_factor_winter)
2937
+ assert_equal(azimuths[idx], skylight.azimuth)
2020
2938
  end
2021
2939
  end
2022
2940
 
2023
- def _test_default_central_air_conditioner_values(hpxml, shr, compressor_type, fan_watts_per_cfm, charge_defect_ratio,
2024
- airflow_defect_ratio, cooling_capacity)
2025
- cooling_system = hpxml.cooling_systems[0]
2941
+ def _test_default_door_values(hpxml, azimuths)
2942
+ hpxml.doors.each_with_index do |door, idx|
2943
+ assert_equal(azimuths[idx], door.azimuth)
2944
+ end
2945
+ end
2026
2946
 
2947
+ def _test_default_partition_wall_mass_values(partition_wall_mass, area_fraction, int_finish_type, int_finish_thickness)
2948
+ assert_equal(area_fraction, partition_wall_mass.area_fraction)
2949
+ assert_equal(int_finish_type, partition_wall_mass.interior_finish_type)
2950
+ assert_equal(int_finish_thickness, partition_wall_mass.interior_finish_thickness)
2951
+ end
2952
+
2953
+ def _test_default_furniture_mass_values(furniture_mass, area_fraction, type)
2954
+ assert_equal(area_fraction, furniture_mass.area_fraction)
2955
+ assert_equal(type, furniture_mass.type)
2956
+ end
2957
+
2958
+ def _test_default_central_air_conditioner_values(cooling_system, shr, compressor_type, fan_watts_per_cfm, charge_defect_ratio,
2959
+ airflow_defect_ratio, cooling_capacity, cooling_efficiency_seer)
2027
2960
  assert_equal(shr, cooling_system.cooling_shr)
2028
2961
  assert_equal(compressor_type, cooling_system.compressor_type)
2029
2962
  assert_equal(fan_watts_per_cfm, cooling_system.fan_watts_per_cfm)
@@ -2034,22 +2967,28 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2034
2967
  else
2035
2968
  assert_equal(cooling_system.cooling_capacity, cooling_capacity)
2036
2969
  end
2970
+ if cooling_efficiency_seer.nil?
2971
+ assert_nil(cooling_system.cooling_efficiency_seer)
2972
+ else
2973
+ assert_equal(cooling_system.cooling_efficiency_seer, cooling_efficiency_seer)
2974
+ end
2037
2975
  end
2038
2976
 
2039
- def _test_default_room_air_conditioner_values(hpxml, shr, cooling_capacity)
2040
- cooling_system = hpxml.cooling_systems[0]
2041
-
2977
+ def _test_default_room_air_conditioner_ptac_values(cooling_system, shr, cooling_capacity, cooling_efficiency_eer)
2042
2978
  assert_equal(shr, cooling_system.cooling_shr)
2043
2979
  if cooling_capacity.nil?
2044
2980
  assert(cooling_system.cooling_capacity > 0)
2045
2981
  else
2046
2982
  assert_equal(cooling_system.cooling_capacity, cooling_capacity)
2047
2983
  end
2984
+ if cooling_efficiency_eer.nil?
2985
+ assert_nil(cooling_system.cooling_efficiency_eer)
2986
+ else
2987
+ assert_equal(cooling_system.cooling_efficiency_eer, cooling_efficiency_eer)
2988
+ end
2048
2989
  end
2049
2990
 
2050
- def _test_default_evap_cooler_values(hpxml, cooling_capacity)
2051
- cooling_system = hpxml.cooling_systems[0]
2052
-
2991
+ def _test_default_evap_cooler_values(cooling_system, cooling_capacity)
2053
2992
  if cooling_capacity.nil?
2054
2993
  assert(cooling_system.cooling_capacity > 0)
2055
2994
  else
@@ -2057,10 +2996,8 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2057
2996
  end
2058
2997
  end
2059
2998
 
2060
- def _test_default_mini_split_air_conditioner_values(hpxml, shr, fan_watts_per_cfm, charge_defect_ratio,
2999
+ def _test_default_mini_split_air_conditioner_values(cooling_system, shr, fan_watts_per_cfm, charge_defect_ratio,
2061
3000
  airflow_defect_ratio, cooling_capacity)
2062
- cooling_system = hpxml.cooling_systems[0]
2063
-
2064
3001
  assert_equal(shr, cooling_system.cooling_shr)
2065
3002
  assert_equal(fan_watts_per_cfm, cooling_system.fan_watts_per_cfm)
2066
3003
  assert_equal(charge_defect_ratio, cooling_system.charge_defect_ratio)
@@ -2072,10 +3009,16 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2072
3009
  end
2073
3010
  end
2074
3011
 
2075
- def _test_default_furnace_values(hpxml, fan_watts_per_cfm, airflow_defect_ratio,
2076
- heating_capacity)
2077
- heating_system = hpxml.heating_systems[0]
3012
+ def _test_default_elec_resistance(heating_system, heating_efficiency_percent)
3013
+ if heating_efficiency_percent.nil?
3014
+ assert_nil(heating_system.heating_efficiency_percent)
3015
+ else
3016
+ assert_equal(heating_system.heating_efficiency_percent, heating_efficiency_percent)
3017
+ end
3018
+ end
2078
3019
 
3020
+ def _test_default_furnace_values(heating_system, fan_watts_per_cfm, airflow_defect_ratio,
3021
+ heating_capacity, heating_efficiency_afue)
2079
3022
  assert_equal(fan_watts_per_cfm, heating_system.fan_watts_per_cfm)
2080
3023
  assert_equal(airflow_defect_ratio, heating_system.airflow_defect_ratio)
2081
3024
  if heating_capacity.nil?
@@ -2083,90 +3026,115 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2083
3026
  else
2084
3027
  assert_equal(heating_system.heating_capacity, heating_capacity)
2085
3028
  end
3029
+ if heating_efficiency_afue.nil?
3030
+ assert_nil(heating_system.heating_efficiency_afue)
3031
+ else
3032
+ assert_equal(heating_system.heating_efficiency_afue, heating_efficiency_afue)
3033
+ end
2086
3034
  end
2087
3035
 
2088
- def _test_default_wall_furnace_values(hpxml, fan_watts, heating_capacity)
2089
- heating_system = hpxml.heating_systems[0]
2090
-
3036
+ def _test_default_wall_furnace_values(heating_system, fan_watts, heating_capacity, heating_efficiency_afue)
2091
3037
  assert_equal(fan_watts, heating_system.fan_watts)
2092
3038
  if heating_capacity.nil?
2093
3039
  assert(heating_system.heating_capacity > 0)
2094
3040
  else
2095
3041
  assert_equal(heating_system.heating_capacity, heating_capacity)
2096
3042
  end
3043
+ if heating_efficiency_afue.nil?
3044
+ assert_nil(heating_system.heating_efficiency_afue)
3045
+ else
3046
+ assert_equal(heating_system.heating_efficiency_afue, heating_efficiency_afue)
3047
+ end
2097
3048
  end
2098
3049
 
2099
- def _test_default_floor_furnace_values(hpxml, fan_watts, heating_capacity)
2100
- heating_system = hpxml.heating_systems[0]
2101
-
3050
+ def _test_default_floor_furnace_values(heating_system, fan_watts, heating_capacity, heating_efficiency_afue)
2102
3051
  assert_equal(fan_watts, heating_system.fan_watts)
2103
3052
  if heating_capacity.nil?
2104
3053
  assert(heating_system.heating_capacity > 0)
2105
3054
  else
2106
3055
  assert_equal(heating_system.heating_capacity, heating_capacity)
2107
3056
  end
3057
+ if heating_efficiency_afue.nil?
3058
+ assert_nil(heating_system.heating_efficiency_afue)
3059
+ else
3060
+ assert_equal(heating_system.heating_efficiency_afue, heating_efficiency_afue)
3061
+ end
2108
3062
  end
2109
3063
 
2110
- def _test_default_boiler_values(hpxml, eae, heating_capacity)
2111
- heating_system = hpxml.heating_systems[0]
2112
-
3064
+ def _test_default_boiler_values(heating_system, eae, heating_capacity, heating_efficiency_afue)
2113
3065
  assert_equal(eae, heating_system.electric_auxiliary_energy)
2114
3066
  if heating_capacity.nil?
2115
3067
  assert(heating_system.heating_capacity > 0)
2116
3068
  else
2117
3069
  assert_equal(heating_system.heating_capacity, heating_capacity)
2118
3070
  end
3071
+ if heating_efficiency_afue.nil?
3072
+ assert_nil(heating_system.heating_efficiency_afue)
3073
+ else
3074
+ assert_equal(heating_system.heating_efficiency_afue, heating_efficiency_afue)
3075
+ end
2119
3076
  end
2120
3077
 
2121
- def _test_default_stove_values(hpxml, fan_watts, heating_capacity)
2122
- heating_system = hpxml.heating_systems[0]
2123
-
3078
+ def _test_default_stove_values(heating_system, fan_watts, heating_capacity, heating_efficiency_percent)
2124
3079
  assert_equal(fan_watts, heating_system.fan_watts)
2125
3080
  if heating_capacity.nil?
2126
3081
  assert(heating_system.heating_capacity > 0)
2127
3082
  else
2128
3083
  assert_equal(heating_system.heating_capacity, heating_capacity)
2129
3084
  end
3085
+ if heating_efficiency_percent.nil?
3086
+ assert_nil(heating_system.heating_efficiency_percent)
3087
+ else
3088
+ assert_equal(heating_system.heating_efficiency_percent, heating_efficiency_percent)
3089
+ end
2130
3090
  end
2131
3091
 
2132
- def _test_default_portable_heater_values(hpxml, fan_watts, heating_capacity)
2133
- heating_system = hpxml.heating_systems[0]
2134
-
3092
+ def _test_default_portable_heater_values(heating_system, fan_watts, heating_capacity, heating_efficiency_percent)
2135
3093
  assert_equal(fan_watts, heating_system.fan_watts)
2136
3094
  if heating_capacity.nil?
2137
3095
  assert(heating_system.heating_capacity > 0)
2138
3096
  else
2139
3097
  assert_equal(heating_system.heating_capacity, heating_capacity)
2140
3098
  end
3099
+ if heating_efficiency_percent.nil?
3100
+ assert_nil(heating_system.heating_efficiency_percent)
3101
+ else
3102
+ assert_equal(heating_system.heating_efficiency_percent, heating_efficiency_percent)
3103
+ end
2141
3104
  end
2142
3105
 
2143
- def _test_default_fixed_heater_values(hpxml, fan_watts, heating_capacity)
2144
- heating_system = hpxml.heating_systems[0]
2145
-
3106
+ def _test_default_fixed_heater_values(heating_system, fan_watts, heating_capacity, heating_efficiency_percent)
2146
3107
  assert_equal(fan_watts, heating_system.fan_watts)
2147
3108
  if heating_capacity.nil?
2148
3109
  assert(heating_system.heating_capacity > 0)
2149
3110
  else
2150
3111
  assert_equal(heating_system.heating_capacity, heating_capacity)
2151
3112
  end
3113
+ if heating_efficiency_percent.nil?
3114
+ assert_nil(heating_system.heating_efficiency_percent)
3115
+ else
3116
+ assert_equal(heating_system.heating_efficiency_percent, heating_efficiency_percent)
3117
+ end
2152
3118
  end
2153
3119
 
2154
- def _test_default_fireplace_values(hpxml, fan_watts, heating_capacity)
2155
- heating_system = hpxml.heating_systems[0]
2156
-
3120
+ def _test_default_fireplace_values(heating_system, fan_watts, heating_capacity, heating_efficiency_percent)
2157
3121
  assert_equal(fan_watts, heating_system.fan_watts)
2158
3122
  if heating_capacity.nil?
2159
3123
  assert(heating_system.heating_capacity > 0)
2160
3124
  else
2161
3125
  assert_equal(heating_system.heating_capacity, heating_capacity)
2162
3126
  end
3127
+ if heating_efficiency_percent.nil?
3128
+ assert_nil(heating_system.heating_efficiency_percent)
3129
+ else
3130
+ assert_equal(heating_system.heating_efficiency_percent, heating_efficiency_percent)
3131
+ end
2163
3132
  end
2164
3133
 
2165
- def _test_default_air_to_air_heat_pump_values(hpxml, shr, compressor_type, fan_watts_per_cfm, charge_defect_ratio,
3134
+ def _test_default_air_to_air_heat_pump_values(heat_pump, shr, compressor_type, fan_watts_per_cfm, charge_defect_ratio,
2166
3135
  airflow_defect_ratio, cooling_capacity, heating_capacity,
2167
- heating_capacity_17F, backup_heating_capacity)
2168
- heat_pump = hpxml.heat_pumps[0]
2169
-
3136
+ heating_capacity_17F, backup_heating_capacity,
3137
+ cooling_efficiency_seer, heating_efficiency_hspf)
2170
3138
  assert_equal(shr, heat_pump.cooling_shr)
2171
3139
  assert_equal(compressor_type, heat_pump.compressor_type)
2172
3140
  assert_equal(fan_watts_per_cfm, heat_pump.fan_watts_per_cfm)
@@ -2192,13 +3160,35 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2192
3160
  else
2193
3161
  assert_equal(heat_pump.backup_heating_capacity, backup_heating_capacity)
2194
3162
  end
3163
+ if cooling_efficiency_seer.nil?
3164
+ assert_nil(heat_pump.cooling_efficiency_seer)
3165
+ else
3166
+ assert_equal(heat_pump.cooling_efficiency_seer, cooling_efficiency_seer)
3167
+ end
3168
+ if heating_efficiency_hspf.nil?
3169
+ assert_nil(heat_pump.heating_efficiency_hspf)
3170
+ else
3171
+ assert_equal(heat_pump.heating_efficiency_hspf, heating_efficiency_hspf)
3172
+ end
3173
+ end
3174
+
3175
+ def _test_default_pthp_values(heat_pump, shr, cooling_capacity, heating_capacity)
3176
+ assert_equal(shr, heat_pump.cooling_shr)
3177
+ if cooling_capacity.nil?
3178
+ assert(heat_pump.cooling_capacity > 0)
3179
+ else
3180
+ assert_equal(heat_pump.cooling_capacity, cooling_capacity)
3181
+ end
3182
+ if heating_capacity.nil?
3183
+ assert(heat_pump.heating_capacity > 0)
3184
+ else
3185
+ assert_equal(heat_pump.heating_capacity, heating_capacity)
3186
+ end
2195
3187
  end
2196
3188
 
2197
- def _test_default_mini_split_heat_pump_values(hpxml, shr, fan_watts_per_cfm, charge_defect_ratio,
3189
+ def _test_default_mini_split_heat_pump_values(heat_pump, shr, fan_watts_per_cfm, charge_defect_ratio,
2198
3190
  airflow_defect_ratio, cooling_capacity, heating_capacity,
2199
3191
  heating_capacity_17F, backup_heating_capacity)
2200
- heat_pump = hpxml.heat_pumps[0]
2201
-
2202
3192
  assert_equal(shr, heat_pump.cooling_shr)
2203
3193
  assert_equal(fan_watts_per_cfm, heat_pump.fan_watts_per_cfm)
2204
3194
  assert_equal(charge_defect_ratio, heat_pump.charge_defect_ratio)
@@ -2225,12 +3215,9 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2225
3215
  end
2226
3216
  end
2227
3217
 
2228
- def _test_default_ground_to_air_heat_pump_values(hpxml, pump_watts_per_ton, fan_watts_per_cfm,
3218
+ def _test_default_ground_to_air_heat_pump_values(heat_pump, pump_watts_per_ton, fan_watts_per_cfm,
2229
3219
  airflow_defect_ratio, cooling_capacity, heating_capacity,
2230
3220
  backup_heating_capacity)
2231
-
2232
- heat_pump = hpxml.heat_pumps[0]
2233
-
2234
3221
  assert_equal(pump_watts_per_ton, heat_pump.pump_watts_per_ton)
2235
3222
  assert_equal(fan_watts_per_cfm, heat_pump.fan_watts_per_cfm)
2236
3223
  assert_equal(airflow_defect_ratio, heat_pump.airflow_defect_ratio)
@@ -2251,14 +3238,21 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2251
3238
  end
2252
3239
  end
2253
3240
 
2254
- def _test_default_hvac_control_values(hpxml, htg_setback_start_hr, clg_setup_start_hr)
2255
- hvac_control = hpxml.hvac_controls[0]
2256
-
3241
+ def _test_default_hvac_control_values(hvac_control, htg_setback_start_hr, clg_setup_start_hr, htg_season_begin_month, htg_season_begin_day, htg_season_end_month, htg_season_end_day, clg_season_begin_month, clg_season_begin_day, clg_season_end_month, clg_season_end_day)
2257
3242
  assert_equal(htg_setback_start_hr, hvac_control.heating_setback_start_hour)
2258
3243
  assert_equal(clg_setup_start_hr, hvac_control.cooling_setup_start_hour)
2259
- end
2260
-
2261
- def _test_default_duct_values(hpxml, supply_locations, return_locations, supply_areas, return_areas, n_return_registers)
3244
+ assert_equal(htg_season_begin_month, hvac_control.seasons_heating_begin_month)
3245
+ assert_equal(htg_season_begin_day, hvac_control.seasons_heating_begin_day)
3246
+ assert_equal(htg_season_end_month, hvac_control.seasons_heating_end_month)
3247
+ assert_equal(htg_season_end_day, hvac_control.seasons_heating_end_day)
3248
+ assert_equal(clg_season_begin_month, hvac_control.seasons_cooling_begin_month)
3249
+ assert_equal(clg_season_begin_day, hvac_control.seasons_cooling_begin_day)
3250
+ assert_equal(clg_season_end_month, hvac_control.seasons_cooling_end_month)
3251
+ assert_equal(clg_season_end_day, hvac_control.seasons_cooling_end_day)
3252
+ end
3253
+
3254
+ def _test_default_duct_values(hpxml, supply_locations, return_locations, supply_areas, return_areas,
3255
+ supply_fracs, return_fracs, n_return_registers)
2262
3256
  supply_duct_idx = 0
2263
3257
  return_duct_idx = 0
2264
3258
  hpxml.hvac_distributions.each do |hvac_distribution|
@@ -2269,54 +3263,71 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2269
3263
  if duct.duct_type == HPXML::DuctTypeSupply
2270
3264
  assert_equal(supply_locations[supply_duct_idx], duct.duct_location)
2271
3265
  assert_in_epsilon(supply_areas[supply_duct_idx], duct.duct_surface_area, 0.01)
3266
+ assert_in_epsilon(supply_fracs[supply_duct_idx], duct.duct_fraction_area, 0.01)
2272
3267
  supply_duct_idx += 1
2273
3268
  elsif duct.duct_type == HPXML::DuctTypeReturn
2274
3269
  assert_equal(return_locations[return_duct_idx], duct.duct_location)
2275
3270
  assert_in_epsilon(return_areas[return_duct_idx], duct.duct_surface_area, 0.01)
3271
+ assert_in_epsilon(return_fracs[return_duct_idx], duct.duct_fraction_area, 0.01)
2276
3272
  return_duct_idx += 1
2277
3273
  end
2278
3274
  end
2279
3275
  end
2280
3276
  end
2281
3277
 
2282
- def _test_default_mech_vent_values(hpxml, is_shared_system, hours_in_operation)
3278
+ def _test_default_mech_vent_values(hpxml, is_shared_system, hours_in_operation, fan_power, flow_rate)
2283
3279
  vent_fan = hpxml.ventilation_fans.select { |f| f.used_for_whole_building_ventilation }[0]
2284
3280
 
2285
3281
  assert_equal(is_shared_system, vent_fan.is_shared_system)
2286
3282
  assert_equal(hours_in_operation, vent_fan.hours_in_operation)
3283
+ assert_in_epsilon(fan_power, vent_fan.fan_power, 0.01)
3284
+ assert_in_epsilon(flow_rate, vent_fan.rated_flow_rate.to_f + vent_fan.calculated_flow_rate.to_f + vent_fan.tested_flow_rate.to_f + vent_fan.delivered_ventilation.to_f, 0.01)
2287
3285
  end
2288
3286
 
2289
- def _test_default_kitchen_fan_values(hpxml, quantity, rated_flow_rate, hours_in_operation, fan_power, start_hour)
3287
+ def _test_default_kitchen_fan_values(hpxml, quantity, flow_rate, hours_in_operation, fan_power, start_hour)
2290
3288
  kitchen_fan = hpxml.ventilation_fans.select { |f| f.used_for_local_ventilation && f.fan_location == HPXML::LocationKitchen }[0]
2291
3289
 
2292
3290
  assert_equal(quantity, kitchen_fan.quantity)
2293
- assert_equal(rated_flow_rate, kitchen_fan.rated_flow_rate)
3291
+ assert_equal(flow_rate, kitchen_fan.rated_flow_rate.to_f + kitchen_fan.calculated_flow_rate.to_f + kitchen_fan.tested_flow_rate.to_f + kitchen_fan.delivered_ventilation.to_f)
2294
3292
  assert_equal(hours_in_operation, kitchen_fan.hours_in_operation)
2295
3293
  assert_equal(fan_power, kitchen_fan.fan_power)
2296
3294
  assert_equal(start_hour, kitchen_fan.start_hour)
2297
3295
  end
2298
3296
 
2299
- def _test_default_bath_fan_values(hpxml, quantity, rated_flow_rate, hours_in_operation, fan_power, start_hour)
3297
+ def _test_default_bath_fan_values(hpxml, quantity, flow_rate, hours_in_operation, fan_power, start_hour)
2300
3298
  bath_fan = hpxml.ventilation_fans.select { |f| f.used_for_local_ventilation && f.fan_location == HPXML::LocationBath }[0]
2301
3299
 
2302
3300
  assert_equal(quantity, bath_fan.quantity)
2303
- assert_equal(rated_flow_rate, bath_fan.rated_flow_rate)
3301
+ assert_equal(flow_rate, bath_fan.rated_flow_rate.to_f + bath_fan.calculated_flow_rate.to_f + bath_fan.tested_flow_rate.to_f + bath_fan.delivered_ventilation.to_f)
2304
3302
  assert_equal(hours_in_operation, bath_fan.hours_in_operation)
2305
3303
  assert_equal(fan_power, bath_fan.fan_power)
2306
3304
  assert_equal(start_hour, bath_fan.start_hour)
2307
3305
  end
2308
3306
 
3307
+ def _test_default_whole_house_fan_values(hpxml, flow_rate, fan_power)
3308
+ whf = hpxml.ventilation_fans.select { |f| f.used_for_seasonal_cooling_load_reduction }[0]
3309
+
3310
+ assert_equal(flow_rate, whf.rated_flow_rate.to_f + whf.calculated_flow_rate.to_f + whf.tested_flow_rate.to_f + whf.delivered_ventilation.to_f)
3311
+ assert_equal(fan_power, whf.fan_power)
3312
+ end
3313
+
2309
3314
  def _test_default_storage_water_heater_values(hpxml, *expected_wh_values)
2310
3315
  storage_water_heaters = hpxml.water_heating_systems.select { |w| w.water_heater_type == HPXML::WaterHeaterTypeStorage }
2311
3316
  assert_equal(expected_wh_values.size, storage_water_heaters.size)
2312
3317
  storage_water_heaters.each_with_index do |wh_system, idx|
2313
- is_shared, heating_capacity, tank_volume, recovery_efficiency, location = expected_wh_values[idx]
3318
+ is_shared, heating_capacity, tank_volume, recovery_efficiency, location, temperature, energy_factor = expected_wh_values[idx]
2314
3319
 
2315
3320
  assert_equal(is_shared, wh_system.is_shared_system)
2316
3321
  assert_in_epsilon(heating_capacity, wh_system.heating_capacity, 0.01)
2317
3322
  assert_equal(tank_volume, wh_system.tank_volume)
2318
3323
  assert_in_epsilon(recovery_efficiency, wh_system.recovery_efficiency, 0.01)
2319
3324
  assert_equal(location, wh_system.location)
3325
+ assert_equal(temperature, wh_system.temperature)
3326
+ if energy_factor.nil?
3327
+ assert_nil(wh_system.energy_factor)
3328
+ else
3329
+ assert_equal(energy_factor, wh_system.energy_factor)
3330
+ end
2320
3331
  end
2321
3332
  end
2322
3333
 
@@ -2330,39 +3341,47 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2330
3341
  end
2331
3342
  end
2332
3343
 
2333
- def _test_default_standard_distribution_values(hpxml, piping_length, pipe_r_value)
2334
- hot_water_distribution = hpxml.hot_water_distributions[0]
2335
-
3344
+ def _test_default_standard_distribution_values(hot_water_distribution, piping_length, pipe_r_value)
2336
3345
  assert_in_epsilon(piping_length, hot_water_distribution.standard_piping_length, 0.01)
2337
3346
  assert_equal(pipe_r_value, hot_water_distribution.pipe_r_value)
2338
3347
  end
2339
3348
 
2340
- def _test_default_recirc_distribution_values(hpxml, piping_length, branch_piping_length, pump_power, pipe_r_value)
2341
- hot_water_distribution = hpxml.hot_water_distributions[0]
2342
-
3349
+ def _test_default_recirc_distribution_values(hot_water_distribution, piping_length, branch_piping_length, pump_power, pipe_r_value)
2343
3350
  assert_in_epsilon(piping_length, hot_water_distribution.recirculation_piping_length, 0.01)
2344
3351
  assert_in_epsilon(branch_piping_length, hot_water_distribution.recirculation_branch_piping_length, 0.01)
2345
3352
  assert_in_epsilon(pump_power, hot_water_distribution.recirculation_pump_power, 0.01)
2346
3353
  assert_equal(pipe_r_value, hot_water_distribution.pipe_r_value)
2347
3354
  end
2348
3355
 
2349
- def _test_default_shared_recirc_distribution_values(hpxml, pump_power)
2350
- hot_water_distribution = hpxml.hot_water_distributions[0]
2351
-
3356
+ def _test_default_shared_recirc_distribution_values(hot_water_distribution, pump_power)
2352
3357
  assert_in_epsilon(pump_power, hot_water_distribution.shared_recirculation_pump_power, 0.01)
2353
3358
  end
2354
3359
 
2355
- def _test_default_water_fixture_values(hpxml, usage_multiplier)
3360
+ def _test_default_water_fixture_values(hpxml, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2356
3361
  assert_equal(usage_multiplier, hpxml.water_heating.water_fixtures_usage_multiplier)
3362
+ if weekday_sch.nil?
3363
+ assert_nil(hpxml.water_heating.water_fixtures_weekday_fractions)
3364
+ else
3365
+ assert_equal(weekday_sch, hpxml.water_heating.water_fixtures_weekday_fractions)
3366
+ end
3367
+ if weekend_sch.nil?
3368
+ assert_nil(hpxml.water_heating.water_fixtures_weekend_fractions)
3369
+ else
3370
+ assert_equal(weekend_sch, hpxml.water_heating.water_fixtures_weekend_fractions)
3371
+ end
3372
+ if monthly_mults.nil?
3373
+ assert_nil(hpxml.water_heating.water_fixtures_monthly_multipliers)
3374
+ else
3375
+ assert_equal(monthly_mults, hpxml.water_heating.water_fixtures_monthly_multipliers)
3376
+ end
2357
3377
  end
2358
3378
 
2359
- def _test_default_solar_thermal_values(hpxml, storage_volume)
2360
- solar_thermal_system = hpxml.solar_thermal_systems[0]
2361
-
3379
+ def _test_default_solar_thermal_values(solar_thermal_system, storage_volume, azimuth)
2362
3380
  assert_equal(storage_volume, solar_thermal_system.storage_volume)
3381
+ assert_equal(azimuth, solar_thermal_system.collector_azimuth)
2363
3382
  end
2364
3383
 
2365
- def _test_default_pv_system_values(hpxml, interver_efficiency, system_loss_frac, is_shared_system, location, tracking, module_type)
3384
+ def _test_default_pv_system_values(hpxml, interver_efficiency, system_loss_frac, is_shared_system, location, tracking, module_type, azimuth)
2366
3385
  hpxml.pv_systems.each_with_index do |pv, idx|
2367
3386
  assert_equal(is_shared_system, pv.is_shared_system)
2368
3387
  assert_equal(interver_efficiency, pv.inverter_efficiency)
@@ -2370,18 +3389,35 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2370
3389
  assert_equal(location, pv.location)
2371
3390
  assert_equal(tracking, pv.tracking)
2372
3391
  assert_equal(module_type, pv.module_type)
3392
+ assert_equal(azimuth, pv.array_azimuth)
2373
3393
  end
2374
3394
  end
2375
3395
 
3396
+ def _test_default_battery_values(hpxml, nominal_capacity_kwh, nominal_capacity_ah, rated_power_output, location, lifetime_model)
3397
+ if nominal_capacity_kwh.nil?
3398
+ assert_nil(hpxml.batteries[0].nominal_capacity_kwh)
3399
+ else
3400
+ assert_equal(nominal_capacity_kwh, hpxml.batteries[0].nominal_capacity_kwh)
3401
+ end
3402
+ if nominal_capacity_ah.nil?
3403
+ assert_nil(hpxml.batteries[0].nominal_capacity_ah)
3404
+ else
3405
+ assert_equal(nominal_capacity_ah, hpxml.batteries[0].nominal_capacity_ah)
3406
+ end
3407
+ assert_equal(rated_power_output, hpxml.batteries[0].rated_power_output)
3408
+ assert_equal(location, hpxml.batteries[0].location)
3409
+ assert_equal(lifetime_model, hpxml.batteries[0].lifetime_model)
3410
+ end
3411
+
2376
3412
  def _test_default_generator_values(hpxml, is_shared_system)
2377
3413
  hpxml.generators.each_with_index do |generator, idx|
2378
3414
  assert_equal(is_shared_system, generator.is_shared_system)
2379
3415
  end
2380
3416
  end
2381
3417
 
2382
- def _test_default_clothes_washer_values(hpxml, is_shared, location, imef, rated_annual_kwh, label_electric_rate, label_gas_rate, label_annual_gas_cost, capacity, label_usage, usage_multiplier)
2383
- clothes_washer = hpxml.clothes_washers[0]
2384
-
3418
+ def _test_default_clothes_washer_values(clothes_washer, is_shared, location, imef, rated_annual_kwh, label_electric_rate,
3419
+ label_gas_rate, label_annual_gas_cost, capacity, label_usage, usage_multiplier,
3420
+ weekday_sch, weekend_sch, monthly_mults)
2385
3421
  assert_equal(is_shared, clothes_washer.is_shared_appliance)
2386
3422
  assert_equal(location, clothes_washer.location)
2387
3423
  assert_equal(imef, clothes_washer.integrated_modified_energy_factor)
@@ -2392,20 +3428,47 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2392
3428
  assert_equal(capacity, clothes_washer.capacity)
2393
3429
  assert_equal(label_usage, clothes_washer.label_usage)
2394
3430
  assert_equal(usage_multiplier, clothes_washer.usage_multiplier)
3431
+ if weekday_sch.nil?
3432
+ assert_nil(clothes_washer.weekday_fractions)
3433
+ else
3434
+ assert_equal(weekday_sch, clothes_washer.weekday_fractions)
3435
+ end
3436
+ if weekend_sch.nil?
3437
+ assert_nil(clothes_washer.weekend_fractions)
3438
+ else
3439
+ assert_equal(weekend_sch, clothes_washer.weekend_fractions)
3440
+ end
3441
+ if monthly_mults.nil?
3442
+ assert_nil(clothes_washer.monthly_multipliers)
3443
+ else
3444
+ assert_equal(monthly_mults, clothes_washer.monthly_multipliers)
3445
+ end
2395
3446
  end
2396
3447
 
2397
- def _test_default_clothes_dryer_values(hpxml, is_shared, location, cef, usage_multiplier)
2398
- clothes_dryer = hpxml.clothes_dryers[0]
2399
-
3448
+ def _test_default_clothes_dryer_values(clothes_dryer, is_shared, location, cef, usage_multiplier,
3449
+ weekday_sch, weekend_sch, monthly_mults)
2400
3450
  assert_equal(is_shared, clothes_dryer.is_shared_appliance)
2401
3451
  assert_equal(location, clothes_dryer.location)
2402
3452
  assert_equal(cef, clothes_dryer.combined_energy_factor)
2403
3453
  assert_equal(usage_multiplier, clothes_dryer.usage_multiplier)
3454
+ if weekday_sch.nil?
3455
+ assert_nil(clothes_dryer.weekday_fractions)
3456
+ else
3457
+ assert_equal(weekday_sch, clothes_dryer.weekday_fractions)
3458
+ end
3459
+ if weekend_sch.nil?
3460
+ assert_nil(clothes_dryer.weekend_fractions)
3461
+ else
3462
+ assert_equal(weekend_sch, clothes_dryer.weekend_fractions)
3463
+ end
3464
+ if monthly_mults.nil?
3465
+ assert_nil(clothes_dryer.monthly_multipliers)
3466
+ else
3467
+ assert_equal(monthly_mults, clothes_dryer.monthly_multipliers)
3468
+ end
2404
3469
  end
2405
3470
 
2406
- def _test_default_clothes_dryer_exhaust_values(hpxml, is_vented, vented_flow_rate)
2407
- clothes_dryer = hpxml.clothes_dryers[0]
2408
-
3471
+ def _test_default_clothes_dryer_exhaust_values(clothes_dryer, is_vented, vented_flow_rate)
2409
3472
  assert_equal(is_vented, clothes_dryer.is_vented)
2410
3473
  if vented_flow_rate.nil?
2411
3474
  assert_nil(clothes_dryer.vented_flow_rate)
@@ -2414,9 +3477,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2414
3477
  end
2415
3478
  end
2416
3479
 
2417
- def _test_default_dishwasher_values(hpxml, is_shared, location, rated_annual_kwh, label_electric_rate, label_gas_rate, label_annual_gas_cost, label_usage, place_setting_capacity, usage_multiplier)
2418
- dishwasher = hpxml.dishwashers[0]
2419
-
3480
+ def _test_default_dishwasher_values(dishwasher, is_shared, location, rated_annual_kwh, label_electric_rate, label_gas_rate, label_annual_gas_cost, label_usage, place_setting_capacity, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2420
3481
  assert_equal(is_shared, dishwasher.is_shared_appliance)
2421
3482
  assert_equal(location, dishwasher.location)
2422
3483
  assert_equal(rated_annual_kwh, dishwasher.rated_annual_kwh)
@@ -2426,6 +3487,21 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2426
3487
  assert_equal(label_usage, dishwasher.label_usage)
2427
3488
  assert_equal(place_setting_capacity, dishwasher.place_setting_capacity)
2428
3489
  assert_equal(usage_multiplier, dishwasher.usage_multiplier)
3490
+ if weekday_sch.nil?
3491
+ assert_nil(dishwasher.weekday_fractions)
3492
+ else
3493
+ assert_equal(weekday_sch, dishwasher.weekday_fractions)
3494
+ end
3495
+ if weekend_sch.nil?
3496
+ assert_nil(dishwasher.weekend_fractions)
3497
+ else
3498
+ assert_equal(weekend_sch, dishwasher.weekend_fractions)
3499
+ end
3500
+ if monthly_mults.nil?
3501
+ assert_nil(dishwasher.monthly_multipliers)
3502
+ else
3503
+ assert_equal(monthly_mults, dishwasher.monthly_multipliers)
3504
+ end
2429
3505
  end
2430
3506
 
2431
3507
  def _test_default_refrigerator_values(hpxml, location, rated_annual_kwh, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
@@ -2501,9 +3577,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2501
3577
  end
2502
3578
  end
2503
3579
 
2504
- def _test_default_cooking_range_values(hpxml, location, is_induction, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2505
- cooking_range = hpxml.cooking_ranges[0]
2506
-
3580
+ def _test_default_cooking_range_values(cooking_range, location, is_induction, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2507
3581
  assert_equal(location, cooking_range.location)
2508
3582
  assert_equal(is_induction, cooking_range.is_induction)
2509
3583
  assert_equal(usage_multiplier, cooking_range.usage_multiplier)
@@ -2524,9 +3598,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2524
3598
  end
2525
3599
  end
2526
3600
 
2527
- def _test_default_oven_values(hpxml, is_convection)
2528
- oven = hpxml.ovens[0]
2529
-
3601
+ def _test_default_oven_values(oven, is_convection)
2530
3602
  assert_equal(is_convection, oven.is_convection)
2531
3603
  end
2532
3604
 
@@ -2601,16 +3673,27 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2601
3673
  end
2602
3674
  end
2603
3675
 
2604
- def _test_default_ceiling_fan_values(hpxml, quantity, efficiency)
2605
- ceiling_fan = hpxml.ceiling_fans[0]
2606
-
3676
+ def _test_default_ceiling_fan_values(ceiling_fan, quantity, efficiency, weekday_sch, weekend_sch, monthly_mults)
2607
3677
  assert_equal(quantity, ceiling_fan.quantity)
2608
3678
  assert_in_epsilon(efficiency, ceiling_fan.efficiency, 0.01)
3679
+ if weekday_sch.nil?
3680
+ assert_nil(ceiling_fan.weekday_fractions)
3681
+ else
3682
+ assert_equal(weekday_sch, ceiling_fan.weekday_fractions)
3683
+ end
3684
+ if weekend_sch.nil?
3685
+ assert_nil(ceiling_fan.weekend_fractions)
3686
+ else
3687
+ assert_equal(weekend_sch, ceiling_fan.weekend_fractions)
3688
+ end
3689
+ if monthly_mults.nil?
3690
+ assert_nil(ceiling_fan.monthly_multipliers)
3691
+ else
3692
+ assert_equal(monthly_mults, ceiling_fan.monthly_multipliers)
3693
+ end
2609
3694
  end
2610
3695
 
2611
- def _test_default_pool_heater_values(hpxml, load_units, load_value, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2612
- pool = hpxml.pools[0]
2613
-
3696
+ def _test_default_pool_heater_values(pool, load_units, load_value, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2614
3697
  if load_units.nil?
2615
3698
  assert_nil(pool.heater_load_units)
2616
3699
  else
@@ -2643,9 +3726,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2643
3726
  end
2644
3727
  end
2645
3728
 
2646
- def _test_default_pool_pump_values(hpxml, kWh_per_year, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2647
- pool = hpxml.pools[0]
2648
-
3729
+ def _test_default_pool_pump_values(pool, kWh_per_year, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2649
3730
  assert_in_epsilon(kWh_per_year, pool.pump_kwh_per_year, 0.01)
2650
3731
  assert_equal(usage_multiplier, pool.pump_usage_multiplier)
2651
3732
  assert_equal(weekday_sch, pool.pump_weekday_fractions)
@@ -2653,9 +3734,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2653
3734
  assert_equal(monthly_mults, pool.pump_monthly_multipliers)
2654
3735
  end
2655
3736
 
2656
- def _test_default_hot_tub_heater_values(hpxml, load_units, load_value, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2657
- hot_tub = hpxml.hot_tubs[0]
2658
-
3737
+ def _test_default_hot_tub_heater_values(hot_tub, load_units, load_value, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2659
3738
  if load_units.nil?
2660
3739
  assert_nil(hot_tub.heater_load_units)
2661
3740
  else
@@ -2688,9 +3767,7 @@ class HPXMLtoOpenStudioDefaultsTest < MiniTest::Test
2688
3767
  end
2689
3768
  end
2690
3769
 
2691
- def _test_default_hot_tub_pump_values(hpxml, kWh_per_year, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2692
- hot_tub = hpxml.hot_tubs[0]
2693
-
3770
+ def _test_default_hot_tub_pump_values(hot_tub, kWh_per_year, usage_multiplier, weekday_sch, weekend_sch, monthly_mults)
2694
3771
  assert_in_epsilon(kWh_per_year, hot_tub.pump_kwh_per_year, 0.01)
2695
3772
  assert_equal(usage_multiplier, hot_tub.pump_usage_multiplier)
2696
3773
  assert_equal(weekday_sch, hot_tub.pump_weekday_fractions)