urbanopt-cli 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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)