urbanopt-cli 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1062) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +34 -0
  4. data/CMakeLists.txt +7 -7
  5. data/FindOpenStudioSDK.cmake +6 -6
  6. data/Gemfile +11 -5
  7. data/example_files/Gemfile +6 -3
  8. data/example_files/base_workflow_res.osw +10 -0
  9. data/example_files/example_project_combined.json +13 -3
  10. data/example_files/example_project_with_PV.json +751 -0
  11. data/example_files/example_project_with_streets.json +826 -0
  12. data/example_files/mappers/Baseline.rb +52 -31
  13. data/example_files/mappers/CreateBar.rb +37 -0
  14. data/example_files/mappers/FlexibleHotWater.rb +69 -0
  15. data/example_files/mappers/Floorspace.rb +30 -0
  16. data/example_files/mappers/HighEfficiency.rb +5 -4
  17. data/example_files/mappers/base_workflow.osw +5 -0
  18. data/example_files/mappers/createbar_workflow.osw +3 -1
  19. data/example_files/mappers/floorspace_workflow.osw +2 -1
  20. data/example_files/measures/BuildResidentialModel/measure.rb +109 -76
  21. data/example_files/osm_building/7.osm +0 -307
  22. data/example_files/osm_building/8.osm +0 -419
  23. data/example_files/osm_building/9.osm +0 -664
  24. data/example_files/reopt/base_assumptions.json +3 -3
  25. data/example_files/reopt/multiPV_assumptions.json +2 -2
  26. data/example_files/residential/enclosure.tsv +102 -102
  27. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +22 -16
  28. data/example_files/resources/hpxml-measures/.gitignore +3 -7
  29. data/example_files/resources/hpxml-measures/.rubocop.yml +67 -8
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1752 -1455
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +3229 -5431
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +386 -553
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +1075 -363
  34. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +212 -0
  35. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +898 -0
  36. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules.rb +109 -188
  37. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_README.md +0 -0
  38. 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
  39. 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
  40. 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
  41. 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
  42. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.json +2 -2
  43. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.md +0 -0
  44. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_consumption_dist.csv} +0 -0
  45. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_duration_dist.csv} +0 -0
  46. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_consumption_dist.csv} +0 -0
  47. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_duration_dist.csv} +0 -0
  48. 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
  49. 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
  50. 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
  51. 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
  52. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_cluster_size_probability.csv +0 -0
  53. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_event_duration_probability.csv +0 -0
  54. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  55. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  56. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  57. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  58. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  59. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  60. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  61. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  62. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  63. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  64. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  65. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  66. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  67. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  68. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  69. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  70. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  71. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  72. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  73. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  74. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  75. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  76. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  77. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  78. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  79. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  80. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  81. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  82. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  83. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  84. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  85. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  86. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  87. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  88. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  89. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  90. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  91. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  92. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  93. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  94. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  95. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  96. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  97. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  98. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  99. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  100. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  101. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  102. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_0.csv +0 -0
  103. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_1.csv +0 -0
  104. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_2.csv +0 -0
  105. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_3.csv +0 -0
  106. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_0.csv +0 -0
  107. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_1.csv +0 -0
  108. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_2.csv +0 -0
  109. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_3.csv +0 -0
  110. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +0 -0
  111. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  112. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  113. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  114. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  115. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  116. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  117. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  118. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  119. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  120. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  121. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  122. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  123. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  124. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  125. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  126. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  127. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  128. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  129. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  130. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  131. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  132. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  133. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  134. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  135. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  136. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  137. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  138. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  139. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  140. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  141. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  142. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  143. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  144. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  145. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  146. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  147. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  148. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  149. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  150. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  151. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  152. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  153. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  154. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  155. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  156. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  157. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  158. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  159. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_0.csv +0 -0
  160. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_1.csv +0 -0
  161. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_2.csv +0 -0
  162. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_3.csv +0 -0
  163. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_0.csv +0 -0
  164. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_1.csv +0 -0
  165. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_2.csv +0 -0
  166. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_3.csv +0 -0
  167. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +0 -0
  168. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +526 -0
  169. data/example_files/resources/hpxml-measures/Changelog.md +84 -8
  170. data/example_files/resources/hpxml-measures/Gemfile +3 -0
  171. data/example_files/resources/hpxml-measures/Gemfile.lock +3 -11
  172. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +387 -387
  173. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -251
  174. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +275 -59
  175. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +471 -247
  176. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXML.xsd +1 -1
  177. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +171 -79
  178. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +155 -78
  179. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +188 -141
  180. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +83 -0
  181. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +99 -11
  182. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +558 -342
  183. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +2 -0
  184. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +64 -72
  185. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +96 -93
  186. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +965 -350
  187. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +887 -216
  188. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +664 -760
  189. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +306 -287
  190. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +20 -29
  191. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +0 -20
  192. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_hvac_equipment_efficiency.csv +493 -0
  193. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_water_heater_efficiency.csv +157 -0
  194. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +156 -108
  195. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +41 -3
  196. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +14 -2
  197. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +18 -18
  198. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +14 -7
  199. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/smooth.csv +8761 -0
  200. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic-vacancy.csv +8761 -0
  201. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic.csv +8761 -0
  202. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +431 -428
  203. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +21 -12
  204. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +3 -3
  205. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +245 -234
  206. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +10 -5
  207. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +19 -8
  208. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +44 -23
  209. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +241 -0
  210. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1374 -297
  211. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +702 -55
  212. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
  213. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
  214. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +238 -40
  215. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +2 -2
  216. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -2
  217. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +186 -0
  218. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +955 -176
  219. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +47 -61
  220. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +1 -1
  221. data/example_files/resources/hpxml-measures/LICENSE.md +1 -1
  222. data/example_files/resources/hpxml-measures/README.md +12 -9
  223. data/example_files/resources/hpxml-measures/Rakefile +1 -1
  224. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +448 -0
  225. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +81 -0
  226. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +71 -0
  227. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +232 -0
  228. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +1977 -0
  229. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/measure.xml +682 -31
  230. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/resources/constants.rb +20 -2
  231. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/tests/output_report_test.rb +83 -218
  232. data/example_files/resources/hpxml-measures/docs/source/index.rst +1 -2
  233. data/example_files/resources/hpxml-measures/docs/source/intro.rst +6 -3
  234. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +73 -0
  235. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +915 -494
  236. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +263 -111
  237. data/example_files/resources/hpxml-measures/tasks.rb +3830 -6981
  238. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +35 -0
  239. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC.epw +8768 -0
  240. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +25 -5
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +102 -91
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +93 -83
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +93 -83
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +93 -83
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +93 -83
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +102 -91
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +103 -97
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +96 -85
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +102 -91
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +102 -91
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +102 -91
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +96 -125
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +119 -104
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +94 -89
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +93 -83
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +104 -95
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +104 -95
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-outside.xml +584 -0
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +99 -68
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +119 -79
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +99 -68
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +99 -68
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +99 -68
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +97 -66
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +97 -66
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +97 -66
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +100 -69
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +100 -69
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +94 -65
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +94 -65
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +94 -65
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +94 -65
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +97 -68
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +94 -65
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +94 -65
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +94 -65
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +97 -68
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +97 -68
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +98 -67
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +96 -64
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +105 -84
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +108 -77
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +100 -69
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +100 -69
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +98 -67
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +97 -66
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +97 -66
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +97 -66
  289. 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
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +124 -114
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +102 -95
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +102 -95
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +102 -95
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +104 -94
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +105 -96
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +102 -95
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +102 -95
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +102 -95
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +104 -95
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +102 -95
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +102 -95
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +102 -95
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +104 -97
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +102 -95
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +104 -95
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +104 -95
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +104 -95
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +102 -95
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +104 -95
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +108 -101
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +96 -85
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +104 -95
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +104 -95
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +104 -95
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +104 -95
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +104 -95
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +106 -97
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +106 -97
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +106 -97
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +106 -97
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +106 -97
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +106 -97
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +104 -95
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +105 -96
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +104 -95
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +574 -0
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +105 -96
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +104 -95
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +104 -95
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +105 -97
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +106 -97
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +106 -97
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +104 -95
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +104 -95
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +104 -95
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +104 -95
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +104 -95
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +104 -95
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +104 -95
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +106 -97
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +106 -97
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +104 -95
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +104 -95
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +131 -119
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +120 -99
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +104 -95
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +104 -95
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +104 -95
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +104 -95
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +131 -118
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +104 -95
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +104 -95
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +104 -95
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +104 -95
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +104 -95
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +579 -0
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +110 -101
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +213 -95
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-id.xml → base-enclosure-skylights-physical-properties.xml} +123 -105
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +114 -105
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +112 -103
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +92 -82
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +533 -547
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +545 -559
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/generator-output-greater-than-consumption.xml → base-enclosure-thermal-mass.xml} +117 -111
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +239 -109
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +88 -79
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +584 -0
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +115 -106
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +89 -79
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +123 -110
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +119 -172
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +104 -95
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +107 -95
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +572 -0
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +119 -128
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +92 -82
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +117 -110
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +106 -91
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +107 -98
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +105 -97
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +108 -98
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +108 -98
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +115 -110
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +101 -94
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +103 -95
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +104 -94
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +104 -94
  389. 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
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +589 -0
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +104 -94
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +104 -94
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +105 -94
  394. 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
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +106 -93
  396. 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
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +106 -93
  398. 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
  399. 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
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +106 -93
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +102 -95
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +103 -94
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +101 -94
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +101 -94
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +101 -94
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +101 -94
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +108 -95
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +106 -93
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +106 -93
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +99 -92
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +103 -94
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +99 -92
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +102 -95
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +104 -95
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +104 -95
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +101 -94
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +103 -94
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +104 -94
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +105 -94
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +103 -93
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +106 -93
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +101 -94
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +104 -94
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +105 -94
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +103 -93
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +106 -93
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +541 -0
  428. 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
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/boiler-invalid-afue.xml → base-hvac-autosize-ptac.xml} +109 -113
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp.xml +531 -0
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +99 -92
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +99 -92
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +100 -93
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +104 -95
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +101 -94
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +102 -95
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +103 -94
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +101 -94
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +101 -94
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +101 -94
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +101 -94
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +101 -94
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +101 -94
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +101 -94
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +106 -96
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +104 -95
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +104 -94
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +104 -94
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +104 -94
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +104 -94
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +104 -94
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/unattached-solar-thermal-system.xml → base-hvac-ducts-area-fractions.xml} +596 -577
  453. 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
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +104 -95
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +99 -92
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +103 -94
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +101 -94
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +99 -92
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +99 -92
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +99 -92
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +99 -92
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +101 -94
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +104 -95
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +102 -95
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +104 -95
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +104 -95
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +101 -94
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +103 -94
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +101 -94
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +101 -94
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +101 -94
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +104 -95
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +101 -94
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +102 -94
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +103 -93
  476. 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
  477. 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
  478. 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
  479. 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
  480. 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
  481. 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
  482. 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
  483. 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
  484. 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
  485. 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
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +101 -94
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +99 -92
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +101 -94
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +103 -95
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +104 -94
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +542 -0
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +101 -92
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +124 -100
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +94 -89
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +99 -92
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +104 -95
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +104 -95
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/cfis-with-hydronic-distribution.xml → base-hvac-ptac-with-heating.xml} +530 -532
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-distribution-return-duct-leakage-missing.xml → base-hvac-ptac.xml} +515 -528
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +531 -0
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +99 -92
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +516 -0
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +99 -92
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +584 -0
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +104 -95
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +99 -92
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +99 -92
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +104 -95
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +104 -95
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +100 -93
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +110 -96
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +586 -0
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +95 -86
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +104 -95
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +108 -98
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-foundation-wall-properties.xml → base-location-capetown-zaf.xml} +134 -127
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +92 -82
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +105 -98
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +104 -95
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +92 -82
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +92 -82
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +92 -82
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +108 -98
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +106 -97
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +106 -97
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +107 -98
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +104 -97
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +107 -98
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +106 -97
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +106 -97
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +105 -96
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +106 -97
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +106 -97
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +106 -97
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +141 -114
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +106 -97
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +105 -96
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +101 -101
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +105 -96
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +157 -112
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +157 -112
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +96 -87
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +108 -99
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +104 -95
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +113 -102
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +318 -291
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +608 -0
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/enclosure-garage-missing-roof-ceiling.xml → base-pv-battery-garage.xml} +678 -626
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/multifamily-reference-surface.xml → base-pv-battery-outside-degrades.xml} +610 -575
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-outside.xml +608 -0
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +105 -96
  552. 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
  553. 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
  554. 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
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-lighting-detailed.xml → base-schedules-simple.xml} +625 -585
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +104 -95
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +104 -95
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +104 -95
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +104 -95
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +104 -95
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +104 -95
  562. data/example_files/resources/hpxml-measures/workflow/template-build-hpxml-and-stocastic-schedules.osw +129 -0
  563. data/example_files/resources/hpxml-measures/workflow/template-stochastic-schedules.osw +53 -0
  564. data/example_files/resources/hpxml-measures/workflow/template.osw +7 -2
  565. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +75 -44
  566. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +75 -44
  567. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +75 -44
  568. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +75 -44
  569. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +75 -44
  570. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +75 -44
  571. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +75 -44
  572. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +75 -44
  573. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +63 -32
  574. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +63 -32
  575. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +66 -35
  576. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +66 -35
  577. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +66 -35
  578. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +66 -35
  579. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +69 -38
  580. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +69 -38
  581. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +75 -44
  582. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +75 -44
  583. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +75 -44
  584. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +75 -44
  585. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +75 -44
  586. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +75 -44
  587. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +78 -47
  588. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +78 -47
  589. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +114 -103
  590. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +126 -103
  591. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +321 -294
  592. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +26 -26
  593. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +320 -293
  594. data/example_files/resources/hpxml-measures/workflow/tests/compare.py +351 -0
  595. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +253 -260
  596. data/example_files/visualization/input_visualization_feature.html +25 -17
  597. data/example_files/visualization/input_visualization_scenario.html +23 -12
  598. data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.ddy +17 -17
  599. data/lib/uo_cli/version.rb +1 -1
  600. data/lib/uo_cli.rb +146 -28
  601. data/uo_cli.gemspec +6 -5
  602. metadata +232 -637
  603. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -59
  604. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +0 -337
  605. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +0 -337
  606. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +0 -337
  607. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +0 -337
  608. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +0 -337
  609. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +0 -337
  610. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +0 -337
  611. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +0 -337
  612. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +0 -337
  613. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +0 -337
  614. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +0 -337
  615. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +0 -337
  616. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +0 -337
  617. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +0 -337
  618. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +0 -341
  619. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +0 -341
  620. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +0 -348
  621. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +0 -342
  622. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +0 -341
  623. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +0 -341
  624. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +0 -341
  625. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +0 -339
  626. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +0 -337
  627. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +0 -337
  628. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +0 -337
  629. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +0 -337
  630. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +0 -337
  631. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +0 -337
  632. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +0 -337
  633. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +0 -337
  634. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +0 -337
  635. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +0 -337
  636. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +0 -337
  637. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +0 -337
  638. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +0 -337
  639. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +0 -337
  640. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +0 -337
  641. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +0 -337
  642. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +0 -337
  643. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +0 -337
  644. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +0 -337
  645. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +0 -337
  646. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +0 -337
  647. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +0 -337
  648. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +0 -337
  649. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +0 -337
  650. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +0 -337
  651. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +0 -338
  652. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +0 -337
  653. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +0 -338
  654. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +0 -337
  655. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +0 -337
  656. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +0 -338
  657. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +0 -337
  658. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +0 -337
  659. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +0 -337
  660. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +0 -337
  661. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +0 -337
  662. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +0 -337
  663. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +0 -337
  664. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +0 -337
  665. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +0 -337
  666. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +0 -337
  667. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +0 -337
  668. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +0 -337
  669. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +0 -337
  670. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +0 -337
  671. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +0 -337
  672. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +0 -337
  673. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +0 -337
  674. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +0 -337
  675. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +0 -337
  676. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +0 -337
  677. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +0 -337
  678. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +0 -337
  679. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +0 -337
  680. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +0 -337
  681. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +0 -337
  682. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +0 -337
  683. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +0 -337
  684. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +0 -337
  685. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +0 -337
  686. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +0 -337
  687. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +0 -338
  688. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +0 -337
  689. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +0 -337
  690. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +0 -337
  691. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +0 -337
  692. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +0 -337
  693. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +0 -337
  694. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +0 -337
  695. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +0 -337
  696. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +0 -337
  697. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +0 -337
  698. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +0 -337
  699. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +0 -337
  700. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +0 -337
  701. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +0 -337
  702. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +0 -337
  703. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +0 -337
  704. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +0 -337
  705. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +0 -337
  706. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +0 -337
  707. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +0 -337
  708. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +0 -338
  709. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +0 -338
  710. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +0 -338
  711. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +0 -338
  712. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +0 -338
  713. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +0 -337
  714. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +0 -337
  715. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +0 -335
  716. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +0 -335
  717. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +0 -335
  718. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +0 -337
  719. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +0 -337
  720. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +0 -337
  721. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +0 -337
  722. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +0 -337
  723. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +0 -337
  724. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +0 -337
  725. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +0 -337
  726. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +0 -337
  727. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +0 -336
  728. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +0 -337
  729. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +0 -337
  730. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +0 -337
  731. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +0 -336
  732. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +0 -336
  733. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +0 -336
  734. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +0 -339
  735. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +0 -339
  736. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +0 -339
  737. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +0 -339
  738. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +0 -340
  739. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +0 -340
  740. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +0 -340
  741. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +0 -338
  742. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +0 -338
  743. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +0 -338
  744. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +0 -339
  745. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +0 -338
  746. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +0 -340
  747. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +0 -336
  748. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +0 -336
  749. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +0 -337
  750. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +0 -337
  751. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +0 -337
  752. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +0 -337
  753. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +0 -337
  754. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +0 -337
  755. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +0 -337
  756. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +0 -336
  757. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +0 -336
  758. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +0 -337
  759. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +0 -337
  760. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +0 -337
  761. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +0 -337
  762. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +0 -337
  763. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +0 -337
  764. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +0 -337
  765. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +0 -337
  766. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +0 -337
  767. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +0 -337
  768. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +0 -337
  769. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +0 -337
  770. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +0 -337
  771. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +0 -337
  772. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +0 -337
  773. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +0 -337
  774. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +0 -337
  775. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +0 -345
  776. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +0 -335
  777. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +0 -337
  778. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +0 -337
  779. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +0 -337
  780. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +0 -337
  781. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +0 -337
  782. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +0 -337
  783. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +0 -337
  784. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +0 -337
  785. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +0 -337
  786. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +0 -324
  787. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +0 -337
  788. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +0 -337
  789. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +0 -337
  790. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +0 -337
  791. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +0 -337
  792. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +0 -337
  793. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +0 -341
  794. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +0 -337
  795. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +0 -338
  796. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +0 -338
  797. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +0 -342
  798. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +0 -338
  799. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +0 -341
  800. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +0 -337
  801. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +0 -337
  802. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +0 -337
  803. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +0 -341
  804. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +0 -341
  805. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +0 -341
  806. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +0 -341
  807. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +0 -341
  808. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +0 -341
  809. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +0 -341
  810. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +0 -341
  811. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +0 -341
  812. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +0 -341
  813. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +0 -341
  814. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +0 -341
  815. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +0 -341
  816. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +0 -341
  817. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +0 -341
  818. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +0 -341
  819. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +0 -341
  820. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +0 -341
  821. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +0 -341
  822. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +0 -341
  823. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +0 -341
  824. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +0 -341
  825. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +0 -341
  826. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +0 -341
  827. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +0 -341
  828. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  829. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +0 -341
  830. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  831. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +0 -341
  832. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  833. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +0 -341
  834. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  835. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +0 -341
  836. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  837. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +0 -341
  838. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  839. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +0 -341
  840. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  841. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +0 -341
  842. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  843. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +0 -341
  844. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  845. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +0 -341
  846. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +0 -341
  847. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +0 -341
  848. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  849. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +0 -341
  850. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  851. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +0 -341
  852. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  853. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +0 -341
  854. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  855. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +0 -341
  856. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  857. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +0 -341
  858. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  859. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +0 -341
  860. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  861. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +0 -341
  862. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  863. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +0 -341
  864. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  865. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +0 -341
  866. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +0 -341
  867. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +0 -339
  868. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +0 -339
  869. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +0 -339
  870. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +0 -339
  871. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +0 -339
  872. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +0 -339
  873. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +0 -339
  874. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +0 -339
  875. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +0 -339
  876. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +0 -339
  877. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +0 -339
  878. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +0 -339
  879. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +0 -339
  880. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +0 -339
  881. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +0 -339
  882. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +0 -339
  883. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +0 -339
  884. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +0 -339
  885. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +0 -337
  886. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +0 -337
  887. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +0 -337
  888. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +0 -337
  889. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +0 -337
  890. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +0 -339
  891. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +0 -337
  892. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +0 -337
  893. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +0 -337
  894. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +0 -338
  895. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +0 -336
  896. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +0 -337
  897. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +0 -337
  898. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +0 -337
  899. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +0 -337
  900. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +0 -337
  901. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +0 -337
  902. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +0 -337
  903. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +0 -337
  904. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +0 -337
  905. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +0 -337
  906. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +0 -337
  907. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +0 -337
  908. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +0 -337
  909. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +0 -337
  910. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +0 -337
  911. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +0 -337
  912. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +0 -337
  913. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +0 -337
  914. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +0 -337
  915. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +0 -341
  916. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +0 -341
  917. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +0 -338
  918. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +0 -337
  919. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +0 -337
  920. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +0 -337
  921. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +0 -337
  922. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +0 -337
  923. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +0 -337
  924. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +0 -337
  925. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +0 -337
  926. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +0 -337
  927. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +0 -337
  928. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +0 -337
  929. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +0 -339
  930. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +0 -337
  931. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +0 -337
  932. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +0 -337
  933. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +0 -337
  934. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +0 -337
  935. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +0 -337
  936. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +0 -337
  937. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  938. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +0 -337
  939. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  940. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +0 -337
  941. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/stochastic.csv +0 -8761
  942. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/user-specified.csv +0 -8761
  943. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +0 -8761
  944. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_1bed.csv +0 -369
  945. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_2bed.csv +0 -465
  946. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_3bed.csv +0 -611
  947. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_4bed.csv +0 -685
  948. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_5bed.csv +0 -767
  949. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_1bed.csv +0 -637
  950. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_2bed.csv +0 -744
  951. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_3bed.csv +0 -929
  952. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_4bed.csv +0 -1044
  953. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_5bed.csv +0 -1250
  954. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_1bed.csv +0 -754
  955. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_2bed.csv +0 -961
  956. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_3bed.csv +0 -1102
  957. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_4bed.csv +0 -1293
  958. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_5bed.csv +0 -1508
  959. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_1bed.csv +0 -13097
  960. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_2bed.csv +0 -15977
  961. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_3bed.csv +0 -18624
  962. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_4bed.csv +0 -22075
  963. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_5bed.csv +0 -25005
  964. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_max_flows.csv +0 -6
  965. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +0 -2444
  966. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +0 -110
  967. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +0 -57
  968. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +0 -564
  969. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +0 -564
  970. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +0 -564
  971. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +0 -563
  972. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +0 -563
  973. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +0 -563
  974. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +0 -535
  975. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +0 -535
  976. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -576
  977. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +0 -563
  978. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +0 -564
  979. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +0 -563
  980. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +0 -563
  981. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +0 -563
  982. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +0 -563
  983. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +0 -563
  984. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +0 -563
  985. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +0 -547
  986. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +0 -544
  987. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +0 -547
  988. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +0 -563
  989. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +0 -448
  990. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +0 -614
  991. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +0 -611
  992. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +0 -551
  993. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +0 -473
  994. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +0 -489
  995. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +0 -760
  996. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +0 -759
  997. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +0 -761
  998. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +0 -759
  999. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +0 -563
  1000. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +0 -460
  1001. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +0 -560
  1002. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +0 -921
  1003. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +0 -921
  1004. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -547
  1005. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -547
  1006. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +0 -921
  1007. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +0 -569
  1008. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +0 -407
  1009. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +0 -563
  1010. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +0 -563
  1011. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +0 -563
  1012. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +0 -563
  1013. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +0 -570
  1014. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +0 -563
  1015. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +0 -563
  1016. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +0 -466
  1017. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +0 -591
  1018. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +0 -563
  1019. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +0 -565
  1020. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +0 -576
  1021. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +0 -465
  1022. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +0 -563
  1023. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +0 -451
  1024. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +0 -551
  1025. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +0 -565
  1026. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +0 -563
  1027. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +0 -473
  1028. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +0 -563
  1029. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +0 -583
  1030. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +0 -563
  1031. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +0 -917
  1032. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +0 -561
  1033. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +0 -563
  1034. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +0 -563
  1035. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +0 -563
  1036. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +0 -1657
  1037. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +0 -1657
  1038. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +0 -432
  1039. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +0 -434
  1040. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +0 -591
  1041. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +0 -563
  1042. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +0 -563
  1043. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +0 -547
  1044. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +0 -563
  1045. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +0 -569
  1046. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +0 -569
  1047. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +0 -564
  1048. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -527
  1049. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +0 -571
  1050. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -532
  1051. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +0 -566
  1052. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -532
  1053. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +0 -576
  1054. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +0 -563
  1055. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +0 -563
  1056. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +0 -466
  1057. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +0 -466
  1058. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +0 -591
  1059. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +0 -563
  1060. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +0 -563
  1061. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +0 -563
  1062. data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +0 -130
@@ -2,52 +2,108 @@
2
2
 
3
3
  class HPXMLDefaults
4
4
  # Note: Each HPXML object (e.g., HPXML::Wall) has an additional_properties
5
- # child object where # custom information can be attached to the object without
5
+ # child object where custom information can be attached to the object without
6
6
  # being written to the HPXML file. This is useful to associate additional values
7
7
  # with the HPXML objects that will ultimately get passed around.
8
8
 
9
- def self.apply(hpxml, eri_version, weather, epw_file: nil)
9
+ def self.apply(hpxml, eri_version, weather, epw_file: nil, convert_shared_systems: true)
10
10
  cfa = hpxml.building_construction.conditioned_floor_area
11
11
  nbeds = hpxml.building_construction.number_of_bedrooms
12
12
  ncfl = hpxml.building_construction.number_of_conditioned_floors
13
13
  ncfl_ag = hpxml.building_construction.number_of_conditioned_floors_above_grade
14
- has_uncond_bsmnt = hpxml.has_space_type(HPXML::LocationBasementUnconditioned)
14
+ has_uncond_bsmnt = hpxml.has_location(HPXML::LocationBasementUnconditioned)
15
+
16
+ infil_volume = nil
17
+ infil_measurements = []
18
+ hpxml.air_infiltration_measurements.each do |measurement|
19
+ is_ach = ((measurement.unit_of_measure == HPXML::UnitsACH) && !measurement.house_pressure.nil?)
20
+ is_cfm = ((measurement.unit_of_measure == HPXML::UnitsCFM) && !measurement.house_pressure.nil?)
21
+ is_nach = (measurement.unit_of_measure == HPXML::UnitsACHNatural)
22
+ next unless (is_ach || is_cfm || is_nach)
23
+
24
+ infil_measurements << measurement
25
+ next if measurement.infiltration_volume.nil?
26
+
27
+ infil_volume = measurement.infiltration_volume
28
+ end
15
29
 
16
30
  apply_header(hpxml, epw_file)
17
31
  apply_site(hpxml)
32
+ apply_neighbor_buildings(hpxml)
18
33
  apply_building_occupancy(hpxml, nbeds)
19
- apply_building_construction(hpxml, cfa, nbeds)
20
- apply_infiltration(hpxml)
34
+ apply_building_construction(hpxml, cfa, nbeds, infil_volume)
35
+ apply_infiltration(hpxml, infil_volume, infil_measurements)
21
36
  apply_attics(hpxml)
22
37
  apply_foundations(hpxml)
23
38
  apply_roofs(hpxml)
24
39
  apply_rim_joists(hpxml)
25
40
  apply_walls(hpxml)
26
41
  apply_foundation_walls(hpxml)
42
+ apply_frame_floors(hpxml)
27
43
  apply_slabs(hpxml)
28
44
  apply_windows(hpxml)
29
45
  apply_skylights(hpxml)
30
- apply_hvac(hpxml, weather)
46
+ apply_doors(hpxml)
47
+ apply_partition_wall_mass(hpxml)
48
+ apply_furniture_mass(hpxml)
49
+ apply_hvac(hpxml, weather, convert_shared_systems)
31
50
  apply_hvac_control(hpxml)
32
51
  apply_hvac_distribution(hpxml, ncfl, ncfl_ag)
33
- apply_ventilation_fans(hpxml)
52
+ apply_ventilation_fans(hpxml, infil_measurements, weather, cfa, nbeds)
34
53
  apply_water_heaters(hpxml, nbeds, eri_version)
35
54
  apply_hot_water_distribution(hpxml, cfa, ncfl, has_uncond_bsmnt)
36
55
  apply_water_fixtures(hpxml)
37
56
  apply_solar_thermal_systems(hpxml)
38
57
  apply_appliances(hpxml, nbeds, eri_version)
39
58
  apply_lighting(hpxml)
40
- apply_ceiling_fans(hpxml, nbeds)
59
+ apply_ceiling_fans(hpxml, nbeds, weather)
41
60
  apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
42
61
  apply_plug_loads(hpxml, cfa, nbeds)
43
62
  apply_fuel_loads(hpxml, cfa, nbeds)
44
63
  apply_pv_systems(hpxml)
45
64
  apply_generators(hpxml)
65
+ apply_batteries(hpxml)
46
66
 
47
67
  # Do HVAC sizing after all other defaults have been applied
48
68
  apply_hvac_sizing(hpxml, weather, cfa, nbeds)
49
69
  end
50
70
 
71
+ def self.get_default_azimuths(hpxml)
72
+ def self.sanitize_azimuth(azimuth)
73
+ # Ensure 0 <= orientation < 360
74
+ while azimuth < 0
75
+ azimuth += 360
76
+ end
77
+ while azimuth >= 360
78
+ azimuth -= 360
79
+ end
80
+ return azimuth
81
+ end
82
+
83
+ # Returns a list of four azimuths (facing each direction). Determined based
84
+ # on the primary azimuth, as defined by the azimuth with the largest surface
85
+ # area, plus azimuths that are offset by 90/180/270 degrees. Used for
86
+ # surfaces that may not have an azimuth defined (e.g., walls).
87
+ azimuth_areas = {}
88
+ (hpxml.roofs + hpxml.rim_joists + hpxml.walls + hpxml.foundation_walls +
89
+ hpxml.windows + hpxml.skylights + hpxml.doors).each do |surface|
90
+ az = surface.azimuth
91
+ next if az.nil?
92
+
93
+ azimuth_areas[az] = 0 if azimuth_areas[az].nil?
94
+ azimuth_areas[az] += surface.area
95
+ end
96
+ if azimuth_areas.empty?
97
+ primary_azimuth = 0
98
+ else
99
+ primary_azimuth = azimuth_areas.max_by { |k, v| v }[0]
100
+ end
101
+ return [primary_azimuth,
102
+ sanitize_azimuth(primary_azimuth + 90),
103
+ sanitize_azimuth(primary_azimuth + 180),
104
+ sanitize_azimuth(primary_azimuth + 270)].sort
105
+ end
106
+
51
107
  private
52
108
 
53
109
  def self.apply_header(hpxml, epw_file)
@@ -142,24 +198,54 @@ class HPXMLDefaults
142
198
  hpxml.site.additional_properties.aim2_shelter_coeff = Airflow.get_aim2_shelter_coefficient(hpxml.site.shielding_of_home)
143
199
  end
144
200
 
201
+ def self.apply_neighbor_buildings(hpxml)
202
+ hpxml.neighbor_buildings.each do |neighbor_building|
203
+ if neighbor_building.azimuth.nil?
204
+ neighbor_building.azimuth = get_azimuth_from_orientation(neighbor_building.orientation)
205
+ neighbor_building.azimuth_isdefaulted = true
206
+ end
207
+ if neighbor_building.orientation.nil?
208
+ neighbor_building.orientation = get_orientation_from_azimuth(neighbor_building.azimuth)
209
+ neighbor_building.orientation_isdefaulted = true
210
+ end
211
+ end
212
+ end
213
+
145
214
  def self.apply_building_occupancy(hpxml, nbeds)
146
215
  if hpxml.building_occupancy.number_of_residents.nil?
147
216
  hpxml.building_occupancy.number_of_residents = Geometry.get_occupancy_default_num(nbeds)
148
217
  hpxml.building_occupancy.number_of_residents_isdefaulted = true
149
218
  end
219
+ if hpxml.building_occupancy.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
220
+ hpxml.building_occupancy.weekday_fractions = Schedule.OccupantsWeekdayFractions
221
+ hpxml.building_occupancy.weekday_fractions_isdefaulted = true
222
+ end
223
+ if hpxml.building_occupancy.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
224
+ hpxml.building_occupancy.weekend_fractions = Schedule.OccupantsWeekendFractions
225
+ hpxml.building_occupancy.weekend_fractions_isdefaulted = true
226
+ end
227
+ if hpxml.building_occupancy.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
228
+ hpxml.building_occupancy.monthly_multipliers = Schedule.OccupantsMonthlyMultipliers
229
+ hpxml.building_occupancy.monthly_multipliers_isdefaulted = true
230
+ end
150
231
  end
151
232
 
152
- def self.apply_building_construction(hpxml, cfa, nbeds)
233
+ def self.apply_building_construction(hpxml, cfa, nbeds, infil_volume)
234
+ cond_crawl_volume = hpxml.inferred_conditioned_crawlspace_volume()
153
235
  if hpxml.building_construction.conditioned_building_volume.nil? && hpxml.building_construction.average_ceiling_height.nil?
154
- hpxml.building_construction.average_ceiling_height = 8.0
236
+ if not infil_volume.nil?
237
+ hpxml.building_construction.average_ceiling_height = [infil_volume / cfa, 8.0].min
238
+ else
239
+ hpxml.building_construction.average_ceiling_height = 8.0
240
+ end
155
241
  hpxml.building_construction.average_ceiling_height_isdefaulted = true
156
- hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height
242
+ hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height + cond_crawl_volume
157
243
  hpxml.building_construction.conditioned_building_volume_isdefaulted = true
158
244
  elsif hpxml.building_construction.conditioned_building_volume.nil?
159
- hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height
245
+ hpxml.building_construction.conditioned_building_volume = cfa * hpxml.building_construction.average_ceiling_height + cond_crawl_volume
160
246
  hpxml.building_construction.conditioned_building_volume_isdefaulted = true
161
247
  elsif hpxml.building_construction.average_ceiling_height.nil?
162
- hpxml.building_construction.average_ceiling_height = hpxml.building_construction.conditioned_building_volume / cfa
248
+ hpxml.building_construction.average_ceiling_height = (hpxml.building_construction.conditioned_building_volume - cond_crawl_volume) / cfa
163
249
  hpxml.building_construction.average_ceiling_height_isdefaulted = true
164
250
  end
165
251
 
@@ -198,39 +284,25 @@ class HPXMLDefaults
198
284
  end
199
285
  end
200
286
 
201
- def self.apply_infiltration(hpxml)
202
- measurements = []
203
- infil_volume = nil
204
- hpxml.air_infiltration_measurements.each do |measurement|
205
- is_ach = ((measurement.unit_of_measure == HPXML::UnitsACH) && !measurement.house_pressure.nil?)
206
- is_cfm = ((measurement.unit_of_measure == HPXML::UnitsCFM) && !measurement.house_pressure.nil?)
207
- is_nach = (measurement.unit_of_measure == HPXML::UnitsACHNatural)
208
- next unless (is_ach || is_cfm || is_nach)
209
-
210
- measurements << measurement
211
- next if measurement.infiltration_volume.nil?
212
-
213
- infil_volume = measurement.infiltration_volume
214
- end
287
+ def self.apply_infiltration(hpxml, infil_volume, infil_measurements)
215
288
  if infil_volume.nil?
216
289
  infil_volume = hpxml.building_construction.conditioned_building_volume
217
- measurements.each do |measurement|
290
+ infil_measurements.each do |measurement|
218
291
  measurement.infiltration_volume = infil_volume
219
292
  measurement.infiltration_volume_isdefaulted = true
220
293
  end
221
294
  end
222
-
223
- return infil_volume
224
295
  end
225
296
 
226
297
  def self.apply_attics(hpxml)
227
- return unless hpxml.has_space_type(HPXML::LocationAtticVented)
298
+ return unless hpxml.has_location(HPXML::LocationAtticVented)
228
299
 
229
300
  vented_attics = []
230
301
  default_sla = Airflow.get_default_vented_attic_sla()
231
302
  default_ach = nil
232
303
  hpxml.attics.each do |attic|
233
304
  next unless attic.attic_type == HPXML::AtticTypeVented
305
+
234
306
  # check existing sla and ach
235
307
  default_sla = attic.vented_attic_sla unless attic.vented_attic_sla.nil?
236
308
  default_ach = attic.vented_attic_ach unless attic.vented_attic_ach.nil?
@@ -245,6 +317,7 @@ class HPXMLDefaults
245
317
  end
246
318
  vented_attics.each do |vented_attic|
247
319
  next unless (vented_attic.vented_attic_sla.nil? && vented_attic.vented_attic_ach.nil?)
320
+
248
321
  if not default_ach.nil? # ACH specified
249
322
  vented_attic.vented_attic_ach = default_ach
250
323
  else # Use SLA
@@ -255,12 +328,13 @@ class HPXMLDefaults
255
328
  end
256
329
 
257
330
  def self.apply_foundations(hpxml)
258
- return unless hpxml.has_space_type(HPXML::LocationCrawlspaceVented)
331
+ return unless hpxml.has_location(HPXML::LocationCrawlspaceVented)
259
332
 
260
333
  vented_crawls = []
261
334
  default_sla = Airflow.get_default_vented_crawl_sla()
262
335
  hpxml.foundations.each do |foundation|
263
336
  next unless foundation.foundation_type == HPXML::FoundationTypeCrawlspaceVented
337
+
264
338
  # check existing sla
265
339
  default_sla = foundation.vented_crawlspace_sla unless foundation.vented_crawlspace_sla.nil?
266
340
 
@@ -274,6 +348,7 @@ class HPXMLDefaults
274
348
  end
275
349
  vented_crawls.each do |vented_crawl|
276
350
  next unless vented_crawl.vented_crawlspace_sla.nil?
351
+
277
352
  vented_crawl.vented_crawlspace_sla = default_sla
278
353
  vented_crawl.vented_crawlspace_sla_isdefaulted = true
279
354
  end
@@ -281,6 +356,14 @@ class HPXMLDefaults
281
356
 
282
357
  def self.apply_roofs(hpxml)
283
358
  hpxml.roofs.each do |roof|
359
+ if roof.azimuth.nil?
360
+ roof.azimuth = get_azimuth_from_orientation(roof.orientation)
361
+ roof.azimuth_isdefaulted = true
362
+ end
363
+ if roof.orientation.nil?
364
+ roof.orientation = get_orientation_from_azimuth(roof.azimuth)
365
+ roof.orientation_isdefaulted = true
366
+ end
284
367
  if roof.roof_type.nil?
285
368
  roof.roof_type = HPXML::RoofTypeAsphaltShingles
286
369
  roof.roof_type_isdefaulted = true
@@ -293,6 +376,14 @@ class HPXMLDefaults
293
376
  roof.radiant_barrier = false
294
377
  roof.radiant_barrier_isdefaulted = true
295
378
  end
379
+ if roof.radiant_barrier && roof.radiant_barrier_grade.nil?
380
+ roof.radiant_barrier_grade = 1
381
+ roof.radiant_barrier_grade_isdefaulted = true
382
+ end
383
+ if roof.roof_color.nil? && roof.solar_absorptance.nil?
384
+ roof.roof_color = HPXML::ColorMedium
385
+ roof.roof_color_isdefaulted = true
386
+ end
296
387
  if roof.roof_color.nil?
297
388
  roof.roof_color = Constructions.get_default_roof_color(roof.roof_type, roof.solar_absorptance)
298
389
  roof.roof_color_isdefaulted = true
@@ -300,11 +391,34 @@ class HPXMLDefaults
300
391
  roof.solar_absorptance = Constructions.get_default_roof_solar_absorptance(roof.roof_type, roof.roof_color)
301
392
  roof.solar_absorptance_isdefaulted = true
302
393
  end
394
+ if roof.interior_finish_type.nil?
395
+ if HPXML::conditioned_finished_locations.include? roof.interior_adjacent_to
396
+ roof.interior_finish_type = HPXML::InteriorFinishGypsumBoard
397
+ else
398
+ roof.interior_finish_type = HPXML::InteriorFinishNone
399
+ end
400
+ roof.interior_finish_type_isdefaulted = true
401
+ end
402
+ next unless roof.interior_finish_thickness.nil?
403
+
404
+ if roof.interior_finish_type != HPXML::InteriorFinishNone
405
+ roof.interior_finish_thickness = 0.5
406
+ roof.interior_finish_thickness_isdefaulted = true
407
+ end
303
408
  end
304
409
  end
305
410
 
306
411
  def self.apply_rim_joists(hpxml)
307
412
  hpxml.rim_joists.each do |rim_joist|
413
+ if rim_joist.azimuth.nil?
414
+ rim_joist.azimuth = get_azimuth_from_orientation(rim_joist.orientation)
415
+ rim_joist.azimuth_isdefaulted = true
416
+ end
417
+ if rim_joist.orientation.nil?
418
+ rim_joist.orientation = get_orientation_from_azimuth(rim_joist.azimuth)
419
+ rim_joist.orientation_isdefaulted = true
420
+ end
421
+
308
422
  next unless rim_joist.is_exterior
309
423
 
310
424
  if rim_joist.emittance.nil?
@@ -315,6 +429,10 @@ class HPXMLDefaults
315
429
  rim_joist.siding = HPXML::SidingTypeWood
316
430
  rim_joist.siding_isdefaulted = true
317
431
  end
432
+ if rim_joist.color.nil? && rim_joist.solar_absorptance.nil?
433
+ rim_joist.color = HPXML::ColorMedium
434
+ rim_joist.color_isdefaulted = true
435
+ end
318
436
  if rim_joist.color.nil?
319
437
  rim_joist.color = Constructions.get_default_wall_color(rim_joist.solar_absorptance)
320
438
  rim_joist.color_isdefaulted = true
@@ -327,32 +445,126 @@ class HPXMLDefaults
327
445
 
328
446
  def self.apply_walls(hpxml)
329
447
  hpxml.walls.each do |wall|
330
- next unless wall.is_exterior
448
+ if wall.azimuth.nil?
449
+ wall.azimuth = get_azimuth_from_orientation(wall.orientation)
450
+ wall.azimuth_isdefaulted = true
451
+ end
452
+ if wall.orientation.nil?
453
+ wall.orientation = get_orientation_from_azimuth(wall.azimuth)
454
+ wall.orientation_isdefaulted = true
455
+ end
331
456
 
332
- if wall.emittance.nil?
333
- wall.emittance = 0.90
334
- wall.emittance_isdefaulted = true
457
+ if wall.is_exterior
458
+ if wall.emittance.nil?
459
+ wall.emittance = 0.90
460
+ wall.emittance_isdefaulted = true
461
+ end
462
+ if wall.siding.nil?
463
+ wall.siding = HPXML::SidingTypeWood
464
+ wall.siding_isdefaulted = true
465
+ end
466
+ if wall.color.nil? && wall.solar_absorptance.nil?
467
+ wall.color = HPXML::ColorMedium
468
+ wall.color_isdefaulted = true
469
+ end
470
+ if wall.color.nil?
471
+ wall.color = Constructions.get_default_wall_color(wall.solar_absorptance)
472
+ wall.color_isdefaulted = true
473
+ elsif wall.solar_absorptance.nil?
474
+ wall.solar_absorptance = Constructions.get_default_wall_solar_absorptance(wall.color)
475
+ wall.solar_absorptance_isdefaulted = true
476
+ end
335
477
  end
336
- if wall.siding.nil?
337
- wall.siding = HPXML::SidingTypeWood
338
- wall.siding_isdefaulted = true
478
+ if wall.interior_finish_type.nil?
479
+ if HPXML::conditioned_finished_locations.include? wall.interior_adjacent_to
480
+ wall.interior_finish_type = HPXML::InteriorFinishGypsumBoard
481
+ else
482
+ wall.interior_finish_type = HPXML::InteriorFinishNone
483
+ end
484
+ wall.interior_finish_type_isdefaulted = true
339
485
  end
340
- if wall.color.nil?
341
- wall.color = Constructions.get_default_wall_color(wall.solar_absorptance)
342
- wall.color_isdefaulted = true
343
- elsif wall.solar_absorptance.nil?
344
- wall.solar_absorptance = Constructions.get_default_wall_solar_absorptance(wall.color)
345
- wall.solar_absorptance_isdefaulted = true
486
+ next unless wall.interior_finish_thickness.nil?
487
+
488
+ if wall.interior_finish_type != HPXML::InteriorFinishNone
489
+ wall.interior_finish_thickness = 0.5
490
+ wall.interior_finish_thickness_isdefaulted = true
346
491
  end
347
492
  end
348
493
  end
349
494
 
350
495
  def self.apply_foundation_walls(hpxml)
351
496
  hpxml.foundation_walls.each do |foundation_wall|
497
+ if foundation_wall.type.nil?
498
+ foundation_wall.type = HPXML::FoundationWallTypeSolidConcrete
499
+ foundation_wall.type_isdefaulted = true
500
+ end
501
+ if foundation_wall.azimuth.nil?
502
+ foundation_wall.azimuth = get_azimuth_from_orientation(foundation_wall.orientation)
503
+ foundation_wall.azimuth_isdefaulted = true
504
+ end
505
+ if foundation_wall.orientation.nil?
506
+ foundation_wall.orientation = get_orientation_from_azimuth(foundation_wall.azimuth)
507
+ foundation_wall.orientation_isdefaulted = true
508
+ end
352
509
  if foundation_wall.thickness.nil?
353
510
  foundation_wall.thickness = 8.0
354
511
  foundation_wall.thickness_isdefaulted = true
355
512
  end
513
+ if foundation_wall.area.nil?
514
+ foundation_wall.area = foundation_wall.length * foundation_wall.height
515
+ foundation_wall.area_isdefaulted = true
516
+ end
517
+ if foundation_wall.interior_finish_type.nil?
518
+ if HPXML::conditioned_finished_locations.include? foundation_wall.interior_adjacent_to
519
+ foundation_wall.interior_finish_type = HPXML::InteriorFinishGypsumBoard
520
+ else
521
+ foundation_wall.interior_finish_type = HPXML::InteriorFinishNone
522
+ end
523
+ foundation_wall.interior_finish_type_isdefaulted = true
524
+ end
525
+ if foundation_wall.insulation_interior_distance_to_top.nil?
526
+ foundation_wall.insulation_interior_distance_to_top = 0.0
527
+ foundation_wall.insulation_interior_distance_to_top_isdefaulted = true
528
+ end
529
+ if foundation_wall.insulation_interior_distance_to_bottom.nil?
530
+ foundation_wall.insulation_interior_distance_to_bottom = foundation_wall.height
531
+ foundation_wall.insulation_interior_distance_to_bottom_isdefaulted = true
532
+ end
533
+ if foundation_wall.insulation_exterior_distance_to_top.nil?
534
+ foundation_wall.insulation_exterior_distance_to_top = 0.0
535
+ foundation_wall.insulation_exterior_distance_to_top_isdefaulted = true
536
+ end
537
+ if foundation_wall.insulation_exterior_distance_to_bottom.nil?
538
+ foundation_wall.insulation_exterior_distance_to_bottom = foundation_wall.height
539
+ foundation_wall.insulation_exterior_distance_to_bottom_isdefaulted = true
540
+ end
541
+ next unless foundation_wall.interior_finish_thickness.nil?
542
+
543
+ if foundation_wall.interior_finish_type != HPXML::InteriorFinishNone
544
+ foundation_wall.interior_finish_thickness = 0.5
545
+ foundation_wall.interior_finish_thickness_isdefaulted = true
546
+ end
547
+ end
548
+ end
549
+
550
+ def self.apply_frame_floors(hpxml)
551
+ hpxml.frame_floors.each do |frame_floor|
552
+ if frame_floor.interior_finish_type.nil?
553
+ if frame_floor.is_floor
554
+ frame_floor.interior_finish_type = HPXML::InteriorFinishNone
555
+ elsif HPXML::conditioned_finished_locations.include? frame_floor.interior_adjacent_to
556
+ frame_floor.interior_finish_type = HPXML::InteriorFinishGypsumBoard
557
+ else
558
+ frame_floor.interior_finish_type = HPXML::InteriorFinishNone
559
+ end
560
+ frame_floor.interior_finish_type_isdefaulted = true
561
+ end
562
+ next unless frame_floor.interior_finish_thickness.nil?
563
+
564
+ if frame_floor.interior_finish_type != HPXML::InteriorFinishNone
565
+ frame_floor.interior_finish_thickness = 0.5
566
+ frame_floor.interior_finish_thickness_isdefaulted = true
567
+ end
356
568
  end
357
569
  end
358
570
 
@@ -363,8 +575,7 @@ class HPXMLDefaults
363
575
  slab.thickness = crawl_slab ? 0.0 : 4.0
364
576
  slab.thickness_isdefaulted = true
365
577
  end
366
- conditioned_slab = [HPXML::LocationLivingSpace,
367
- HPXML::LocationBasementConditioned].include?(slab.interior_adjacent_to)
578
+ conditioned_slab = HPXML::conditioned_finished_locations.include?(slab.interior_adjacent_to)
368
579
  if slab.carpet_r_value.nil?
369
580
  slab.carpet_r_value = conditioned_slab ? 2.0 : 0.0
370
581
  slab.carpet_r_value_isdefaulted = true
@@ -379,6 +590,14 @@ class HPXMLDefaults
379
590
  def self.apply_windows(hpxml)
380
591
  default_shade_summer, default_shade_winter = Constructions.get_default_interior_shading_factors()
381
592
  hpxml.windows.each do |window|
593
+ if window.azimuth.nil?
594
+ window.azimuth = get_azimuth_from_orientation(window.orientation)
595
+ window.azimuth_isdefaulted = true
596
+ end
597
+ if window.orientation.nil?
598
+ window.orientation = get_orientation_from_azimuth(window.azimuth)
599
+ window.orientation_isdefaulted = true
600
+ end
382
601
  if window.interior_shading_factor_summer.nil?
383
602
  window.interior_shading_factor_summer = default_shade_summer
384
603
  window.interior_shading_factor_summer_isdefaulted = true
@@ -399,11 +618,50 @@ class HPXMLDefaults
399
618
  window.fraction_operable = Airflow.get_default_fraction_of_windows_operable()
400
619
  window.fraction_operable_isdefaulted = true
401
620
  end
621
+ next unless window.ufactor.nil? || window.shgc.nil?
622
+
623
+ # Frame/Glass provided instead, fill in more defaults as needed
624
+ if window.thermal_break.nil? && [HPXML::WindowFrameTypeAluminum, HPXML::WindowFrameTypeMetal].include?(window.frame_type)
625
+ if window.glass_layers == HPXML::WindowLayersSinglePane
626
+ window.thermal_break = false
627
+ window.thermal_break_isdefaulted = true
628
+ elsif window.glass_layers == HPXML::WindowLayersDoublePane
629
+ window.thermal_break = true
630
+ window.thermal_break_isdefaulted = true
631
+ end
632
+ end
633
+ if window.gas_fill.nil?
634
+ if window.glass_layers == HPXML::WindowLayersDoublePane
635
+ window.gas_fill = HPXML::WindowGasAir
636
+ window.gas_fill_isdefaulted = true
637
+ elsif window.glass_layers == HPXML::WindowLayersTriplePane
638
+ window.gas_fill = HPXML::WindowGasArgon
639
+ window.gas_fill_isdefaulted = true
640
+ end
641
+ end
642
+ # Now lookup U/SHGC based on properties
643
+ ufactor, shgc = Constructions.get_default_window_skylight_ufactor_shgc(window, 'window')
644
+ if window.ufactor.nil?
645
+ window.ufactor = ufactor
646
+ window.ufactor_isdefaulted = true
647
+ end
648
+ if window.shgc.nil?
649
+ window.shgc = shgc
650
+ window.shgc_isdefaulted = true
651
+ end
402
652
  end
403
653
  end
404
654
 
405
655
  def self.apply_skylights(hpxml)
406
656
  hpxml.skylights.each do |skylight|
657
+ if skylight.azimuth.nil?
658
+ skylight.azimuth = get_azimuth_from_orientation(skylight.orientation)
659
+ skylight.azimuth_isdefaulted = true
660
+ end
661
+ if skylight.orientation.nil?
662
+ skylight.orientation = get_orientation_from_azimuth(skylight.azimuth)
663
+ skylight.orientation_isdefaulted = true
664
+ end
407
665
  if skylight.interior_shading_factor_summer.nil?
408
666
  skylight.interior_shading_factor_summer = 1.0
409
667
  skylight.interior_shading_factor_summer_isdefaulted = true
@@ -420,11 +678,164 @@ class HPXMLDefaults
420
678
  skylight.exterior_shading_factor_winter = 1.0
421
679
  skylight.exterior_shading_factor_winter_isdefaulted = true
422
680
  end
681
+ next unless skylight.ufactor.nil? || skylight.shgc.nil?
682
+
683
+ # Frame/Glass provided instead, fill in more defaults as needed
684
+ if skylight.thermal_break.nil? && [HPXML::WindowFrameTypeAluminum, HPXML::WindowFrameTypeMetal].include?(skylight.frame_type)
685
+ if skylight.glass_layers == HPXML::WindowLayersSinglePane
686
+ skylight.thermal_break = false
687
+ skylight.thermal_break_isdefaulted = true
688
+ elsif skylight.glass_layers == HPXML::WindowLayersDoublePane
689
+ skylight.thermal_break = true
690
+ skylight.thermal_break_isdefaulted = true
691
+ end
692
+ end
693
+ if skylight.gas_fill.nil?
694
+ if skylight.glass_layers == HPXML::WindowLayersDoublePane
695
+ skylight.gas_fill = HPXML::WindowGasAir
696
+ skylight.gas_fill_isdefaulted = true
697
+ elsif skylight.glass_layers == HPXML::WindowLayersTriplePane
698
+ skylight.gas_fill = HPXML::WindowGasArgon
699
+ skylight.gas_fill_isdefaulted = true
700
+ end
701
+ end
702
+ # Now lookup U/SHGC based on properties
703
+ ufactor, shgc = Constructions.get_default_window_skylight_ufactor_shgc(skylight, 'skylight')
704
+ if skylight.ufactor.nil?
705
+ skylight.ufactor = ufactor
706
+ skylight.ufactor_isdefaulted = true
707
+ end
708
+ if skylight.shgc.nil?
709
+ skylight.shgc = shgc
710
+ skylight.shgc_isdefaulted = true
711
+ end
712
+ end
713
+ end
714
+
715
+ def self.apply_doors(hpxml)
716
+ hpxml.doors.each do |door|
717
+ if door.azimuth.nil?
718
+ door.azimuth = get_azimuth_from_orientation(door.orientation)
719
+ door.azimuth_isdefaulted = true
720
+ end
721
+ if door.orientation.nil?
722
+ door.orientation = get_orientation_from_azimuth(door.azimuth)
723
+ door.orientation_isdefaulted = true
724
+ end
725
+
726
+ next unless door.azimuth.nil?
727
+
728
+ if (not door.wall.nil?) && (not door.wall.azimuth.nil?)
729
+ door.azimuth = door.wall.azimuth
730
+ else
731
+ primary_azimuth = get_default_azimuths(hpxml)[0]
732
+ door.azimuth = primary_azimuth
733
+ door.azimuth_isdefaulted = true
734
+ end
735
+ end
736
+ end
737
+
738
+ def self.apply_partition_wall_mass(hpxml)
739
+ if hpxml.partition_wall_mass.area_fraction.nil?
740
+ hpxml.partition_wall_mass.area_fraction = 1.0
741
+ hpxml.partition_wall_mass.area_fraction_isdefaulted = true
742
+ end
743
+ if hpxml.partition_wall_mass.interior_finish_type.nil?
744
+ hpxml.partition_wall_mass.interior_finish_type = HPXML::InteriorFinishGypsumBoard
745
+ hpxml.partition_wall_mass.interior_finish_type_isdefaulted = true
746
+ end
747
+ if hpxml.partition_wall_mass.interior_finish_thickness.nil?
748
+ hpxml.partition_wall_mass.interior_finish_thickness = 0.5
749
+ hpxml.partition_wall_mass.interior_finish_thickness_isdefaulted = true
423
750
  end
424
751
  end
425
752
 
426
- def self.apply_hvac(hpxml, weather)
427
- HVAC.apply_shared_systems(hpxml)
753
+ def self.apply_furniture_mass(hpxml)
754
+ if hpxml.furniture_mass.area_fraction.nil?
755
+ hpxml.furniture_mass.area_fraction = 0.4
756
+ hpxml.furniture_mass.area_fraction_isdefaulted = true
757
+ end
758
+ if hpxml.furniture_mass.type.nil?
759
+ hpxml.furniture_mass.type = HPXML::FurnitureMassTypeLightWeight
760
+ hpxml.furniture_mass.type_isdefaulted = true
761
+ end
762
+ end
763
+
764
+ def self.apply_hvac(hpxml, weather, convert_shared_systems)
765
+ if convert_shared_systems
766
+ HVAC.apply_shared_systems(hpxml)
767
+ end
768
+
769
+ # HVAC efficiencies (based on HEScore assumption)
770
+ hpxml.heating_systems.each do |heating_system|
771
+ year_installed = heating_system.year_installed
772
+ heating_system_type = heating_system.heating_system_type
773
+ heating_system_fuel = heating_system.heating_system_fuel
774
+
775
+ if [HPXML::HVACTypeBoiler, HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace].include? heating_system_type
776
+ next unless heating_system.heating_efficiency_afue.nil?
777
+
778
+ if heating_system_fuel == HPXML::FuelTypeElectricity
779
+ heating_system.heating_efficiency_afue = 0.98
780
+ else
781
+ heating_system.heating_efficiency_afue = HVAC.get_default_hvac_efficiency_by_year_installed(year_installed, heating_system_type, heating_system_fuel, HPXML::UnitsAFUE)
782
+ end
783
+ heating_system.heating_efficiency_afue_isdefaulted = true
784
+ elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypePTACHeating].include? heating_system_type
785
+ next unless heating_system.heating_efficiency_percent.nil?
786
+
787
+ heating_system.heating_efficiency_percent = 1.0
788
+ heating_system.heating_efficiency_percent_isdefaulted = true
789
+ elsif [HPXML::HVACTypeStove, HPXML::HVACTypeFireplace, HPXML::HVACTypePortableHeater, HPXML::HVACTypeFixedHeater].include? heating_system_type
790
+ next unless heating_system.heating_efficiency_percent.nil?
791
+
792
+ if heating_system_fuel == HPXML::FuelTypeElectricity
793
+ heating_system.heating_efficiency_percent = 1.0
794
+ elsif heating_system_fuel == HPXML::FuelTypeWoodCord
795
+ heating_system.heating_efficiency_percent = 0.60 # HEScore assumption
796
+ elsif heating_system_fuel == HPXML::FuelTypeWoodPellets
797
+ heating_system.heating_efficiency_percent = 0.78 # HEScore assumption
798
+ else
799
+ heating_system.heating_efficiency_percent = 0.81 # https://www.lopistoves.com/products/ and https://www.kozyheat.com/products/
800
+ end
801
+ heating_system.heating_efficiency_percent_isdefaulted = true
802
+ end
803
+ end
804
+
805
+ hpxml.cooling_systems.each do |cooling_system|
806
+ year_installed = cooling_system.year_installed
807
+ cooling_system_type = cooling_system.cooling_system_type
808
+ cooling_system_fuel = HPXML::FuelTypeElectricity
809
+
810
+ if cooling_system_type == HPXML::HVACTypeCentralAirConditioner
811
+ next unless cooling_system.cooling_efficiency_seer.nil?
812
+
813
+ cooling_system.cooling_efficiency_seer = HVAC.get_default_hvac_efficiency_by_year_installed(year_installed, cooling_system_type, cooling_system_fuel, HPXML::UnitsSEER)
814
+ cooling_system.cooling_efficiency_seer_isdefaulted = true
815
+ elsif [HPXML::HVACTypeRoomAirConditioner].include? cooling_system_type
816
+ next unless cooling_system.cooling_efficiency_eer.nil? && cooling_system.cooling_efficiency_ceer.nil?
817
+
818
+ cooling_system.cooling_efficiency_eer = HVAC.get_default_hvac_efficiency_by_year_installed(year_installed, cooling_system_type, cooling_system_fuel, HPXML::UnitsEER)
819
+ cooling_system.cooling_efficiency_eer_isdefaulted = true
820
+ end
821
+ end
822
+
823
+ hpxml.heat_pumps.each do |heat_pump|
824
+ year_installed = heat_pump.year_installed
825
+ heat_pump_type = heat_pump.heat_pump_type
826
+ heat_pump_fuel = HPXML::FuelTypeElectricity
827
+
828
+ next unless [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump_type
829
+
830
+ if heat_pump.cooling_efficiency_seer.nil?
831
+ heat_pump.cooling_efficiency_seer = HVAC.get_default_hvac_efficiency_by_year_installed(year_installed, heat_pump_type, heat_pump_fuel, HPXML::UnitsSEER)
832
+ heat_pump.cooling_efficiency_seer_isdefaulted = true
833
+ end
834
+ if heat_pump.heating_efficiency_hspf.nil?
835
+ heat_pump.heating_efficiency_hspf = HVAC.get_default_hvac_efficiency_by_year_installed(year_installed, heat_pump_type, heat_pump_fuel, HPXML::UnitsHSPF)
836
+ heat_pump.heating_efficiency_hspf_isdefaulted = true
837
+ end
838
+ end
428
839
 
429
840
  # Default AC/HP compressor type
430
841
  hpxml.cooling_systems.each do |cooling_system|
@@ -443,6 +854,7 @@ class HPXMLDefaults
443
854
  # Default boiler EAE
444
855
  hpxml.heating_systems.each do |heating_system|
445
856
  next unless heating_system.electric_auxiliary_energy.nil?
857
+
446
858
  heating_system.electric_auxiliary_energy_isdefaulted = true
447
859
  heating_system.electric_auxiliary_energy = HVAC.get_default_boiler_eae(heating_system)
448
860
  heating_system.shared_loop_watts = nil
@@ -463,7 +875,8 @@ class HPXMLDefaults
463
875
  cooling_system.cooling_shr = 0.78
464
876
  end
465
877
  cooling_system.cooling_shr_isdefaulted = true
466
- elsif cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner
878
+ elsif cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner ||
879
+ cooling_system.cooling_system_type == HPXML::HVACTypePTAC
467
880
  cooling_system.cooling_shr = 0.65
468
881
  cooling_system.cooling_shr_isdefaulted = true
469
882
  elsif cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
@@ -489,6 +902,9 @@ class HPXMLDefaults
489
902
  elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpGroundToAir
490
903
  heat_pump.cooling_shr = 0.732
491
904
  heat_pump.cooling_shr_isdefaulted = true
905
+ elsif heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpPTHP
906
+ heat_pump.cooling_shr = 0.65
907
+ heat_pump.cooling_shr_isdefaulted = true
492
908
  end
493
909
  end
494
910
 
@@ -509,7 +925,6 @@ class HPXMLDefaults
509
925
 
510
926
  cooling_system.charge_defect_ratio = 0.0
511
927
  cooling_system.charge_defect_ratio_isdefaulted = true
512
- cooling_system.charge_not_tested = nil
513
928
  end
514
929
  hpxml.heat_pumps.each do |heat_pump|
515
930
  next unless [HPXML::HVACTypeHeatPumpAirToAir,
@@ -519,7 +934,6 @@ class HPXMLDefaults
519
934
 
520
935
  heat_pump.charge_defect_ratio = 0.0
521
936
  heat_pump.charge_defect_ratio_isdefaulted = true
522
- heat_pump.charge_not_tested = nil
523
937
  end
524
938
 
525
939
  # Airflow defect ratio
@@ -529,38 +943,30 @@ class HPXMLDefaults
529
943
 
530
944
  heating_system.airflow_defect_ratio = 0.0
531
945
  heating_system.airflow_defect_ratio_isdefaulted = true
532
- heating_system.airflow_not_tested = nil
533
946
  end
534
947
  hpxml.cooling_systems.each do |cooling_system|
535
948
  next unless [HPXML::HVACTypeCentralAirConditioner,
536
949
  HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
537
- if cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner && cooling_system.distribution_system_idref.nil?
538
- next # Ducted mini-splits only
539
- end
540
950
  next unless cooling_system.airflow_defect_ratio.nil?
541
951
 
542
952
  cooling_system.airflow_defect_ratio = 0.0
543
953
  cooling_system.airflow_defect_ratio_isdefaulted = true
544
- cooling_system.airflow_not_tested = nil
545
954
  end
546
955
  hpxml.heat_pumps.each do |heat_pump|
547
956
  next unless [HPXML::HVACTypeHeatPumpAirToAir,
548
957
  HPXML::HVACTypeHeatPumpGroundToAir,
549
958
  HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
550
- if heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit && heat_pump.distribution_system_idref.nil?
551
- next # Ducted mini-splits only
552
- end
553
959
  next unless heat_pump.airflow_defect_ratio.nil?
554
960
 
555
961
  heat_pump.airflow_defect_ratio = 0.0
556
962
  heat_pump.airflow_defect_ratio_isdefaulted = true
557
- heat_pump.airflow_not_tested = nil
558
963
  end
559
964
 
560
965
  # Fan power
561
966
  psc_watts_per_cfm = 0.5 # W/cfm, PSC fan
562
967
  ecm_watts_per_cfm = 0.375 # W/cfm, ECM fan
563
- mini_split_ducted_watts_per_cfm = 0.18 # W/cfm, ducted mini split
968
+ mini_split_ductless_watts_per_cfm = 0.07 # W/cfm
969
+ mini_split_ducted_watts_per_cfm = 0.18 # W/cfm
564
970
  hpxml.heating_systems.each do |heating_system|
565
971
  if [HPXML::HVACTypeFurnace].include? heating_system.heating_system_type
566
972
  if heating_system.fan_watts_per_cfm.nil?
@@ -572,7 +978,6 @@ class HPXMLDefaults
572
978
  heating_system.fan_watts_per_cfm = psc_watts_per_cfm
573
979
  end
574
980
  heating_system.fan_watts_per_cfm_isdefaulted = true
575
- heating_system.fan_power_not_tested = nil
576
981
  end
577
982
  elsif [HPXML::HVACTypeStove].include? heating_system.heating_system_type
578
983
  if heating_system.fan_watts.nil?
@@ -596,7 +1001,6 @@ class HPXMLDefaults
596
1001
  if (not cooling_system.attached_heating_system.nil?) && (not cooling_system.attached_heating_system.fan_watts_per_cfm.nil?)
597
1002
  cooling_system.fan_watts_per_cfm = cooling_system.attached_heating_system.fan_watts_per_cfm
598
1003
  cooling_system.fan_watts_per_cfm_isdefaulted = true
599
- cooling_system.fan_power_not_tested = nil
600
1004
  elsif [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
601
1005
  if cooling_system.cooling_efficiency_seer > 13.5 # HEScore assumption
602
1006
  cooling_system.fan_watts_per_cfm = ecm_watts_per_cfm
@@ -604,13 +1008,13 @@ class HPXMLDefaults
604
1008
  cooling_system.fan_watts_per_cfm = psc_watts_per_cfm
605
1009
  end
606
1010
  cooling_system.fan_watts_per_cfm_isdefaulted = true
607
- cooling_system.fan_power_not_tested = nil
608
1011
  elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
609
1012
  if not cooling_system.distribution_system.nil?
610
1013
  cooling_system.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
1014
+ else
1015
+ cooling_system.fan_watts_per_cfm = mini_split_ductless_watts_per_cfm
611
1016
  end
612
1017
  cooling_system.fan_watts_per_cfm_isdefaulted = true
613
- cooling_system.fan_power_not_tested = nil
614
1018
  elsif [HPXML::HVACTypeEvaporativeCooler].include? cooling_system.cooling_system_type
615
1019
  # Depends on airflow rate, so defaulted in hvac_sizing.rb
616
1020
  end
@@ -625,7 +1029,6 @@ class HPXMLDefaults
625
1029
  heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
626
1030
  end
627
1031
  heat_pump.fan_watts_per_cfm_isdefaulted = true
628
- heat_pump.fan_power_not_tested = nil
629
1032
  elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
630
1033
  if heat_pump.heating_efficiency_cop > 8.75 / 3.2 # HEScore assumption
631
1034
  heat_pump.fan_watts_per_cfm = ecm_watts_per_cfm
@@ -633,37 +1036,37 @@ class HPXMLDefaults
633
1036
  heat_pump.fan_watts_per_cfm = psc_watts_per_cfm
634
1037
  end
635
1038
  heat_pump.fan_watts_per_cfm_isdefaulted = true
636
- heat_pump.fan_power_not_tested = nil
637
1039
  elsif [HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
638
1040
  if not heat_pump.distribution_system.nil?
639
1041
  heat_pump.fan_watts_per_cfm = mini_split_ducted_watts_per_cfm
1042
+ else
1043
+ heat_pump.fan_watts_per_cfm = mini_split_ductless_watts_per_cfm
640
1044
  end
641
1045
  heat_pump.fan_watts_per_cfm_isdefaulted = true
642
- heat_pump.fan_power_not_tested = nil
643
1046
  end
644
1047
  end
645
1048
 
646
1049
  # Detailed HVAC performance
647
1050
  hpxml.cooling_systems.each do |cooling_system|
648
1051
  clg_ap = cooling_system.additional_properties
649
- if [HPXML::HVACTypeCentralAirConditioner].include? cooling_system.cooling_system_type
1052
+ if [HPXML::HVACTypeCentralAirConditioner,
1053
+ HPXML::HVACTypeRoomAirConditioner,
1054
+ HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
1055
+ if [HPXML::HVACTypeRoomAirConditioner,
1056
+ HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
1057
+ use_eer = true
1058
+ else
1059
+ use_eer = false
1060
+ end
650
1061
  # Note: We use HP cooling curve so that a central AC behaves the same.
651
1062
  HVAC.set_num_speeds(cooling_system)
652
- HVAC.set_fan_power_rated(cooling_system)
1063
+ HVAC.set_fan_power_rated(cooling_system) unless use_eer
653
1064
  HVAC.set_crankcase_assumptions(cooling_system)
654
-
655
- HVAC.set_cool_c_d(cooling_system, clg_ap.num_speeds)
656
- HVAC.set_cool_curves_ashp(cooling_system)
657
- HVAC.set_cool_rated_cfm_per_ton(cooling_system)
658
- HVAC.set_cool_rated_shrs_gross(cooling_system)
659
- HVAC.set_cool_rated_eirs(cooling_system)
660
-
661
- elsif [HPXML::HVACTypeRoomAirConditioner].include? cooling_system.cooling_system_type
662
- HVAC.set_num_speeds(cooling_system)
663
1065
  HVAC.set_cool_c_d(cooling_system, clg_ap.num_speeds)
664
- HVAC.set_cool_curves_room_ac(cooling_system)
1066
+ HVAC.set_cool_curves_central_air_source(cooling_system, use_eer)
665
1067
  HVAC.set_cool_rated_cfm_per_ton(cooling_system)
666
1068
  HVAC.set_cool_rated_shrs_gross(cooling_system)
1069
+ HVAC.set_cool_rated_eirs(cooling_system) unless use_eer
667
1070
 
668
1071
  elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
669
1072
  num_speeds = 10
@@ -691,26 +1094,33 @@ class HPXMLDefaults
691
1094
  HPXML::HVACTypeWallFurnace,
692
1095
  HPXML::HVACTypeFloorFurnace,
693
1096
  HPXML::HVACTypeFireplace].include? heating_system.heating_system_type
1097
+
694
1098
  HVAC.set_heat_rated_cfm_per_ton(heating_system)
695
1099
  end
696
1100
  hpxml.heat_pumps.each do |heat_pump|
697
1101
  hp_ap = heat_pump.additional_properties
698
- if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump.heat_pump_type
1102
+ if [HPXML::HVACTypeHeatPumpAirToAir,
1103
+ HPXML::HVACTypeHeatPumpPTHP].include? heat_pump.heat_pump_type
1104
+ if heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpPTHP
1105
+ use_eer_cop = true
1106
+ else
1107
+ use_eer_cop = false
1108
+ end
699
1109
  HVAC.set_num_speeds(heat_pump)
700
- HVAC.set_fan_power_rated(heat_pump)
1110
+ HVAC.set_fan_power_rated(heat_pump) unless use_eer_cop
701
1111
  HVAC.set_crankcase_assumptions(heat_pump)
702
1112
  HVAC.set_heat_pump_temperatures(heat_pump)
703
1113
 
704
1114
  HVAC.set_cool_c_d(heat_pump, hp_ap.num_speeds)
705
- HVAC.set_cool_curves_ashp(heat_pump)
1115
+ HVAC.set_cool_curves_central_air_source(heat_pump, use_eer_cop)
706
1116
  HVAC.set_cool_rated_cfm_per_ton(heat_pump)
707
1117
  HVAC.set_cool_rated_shrs_gross(heat_pump)
708
- HVAC.set_cool_rated_eirs(heat_pump)
1118
+ HVAC.set_cool_rated_eirs(heat_pump) unless use_eer_cop
709
1119
 
710
1120
  HVAC.set_heat_c_d(heat_pump, hp_ap.num_speeds)
711
- HVAC.set_ashp_htg_curves(heat_pump)
1121
+ HVAC.set_heat_curves_central_air_source(heat_pump, use_eer_cop)
712
1122
  HVAC.set_heat_rated_cfm_per_ton(heat_pump)
713
- HVAC.set_heat_rated_eirs(heat_pump)
1123
+ HVAC.set_heat_rated_eirs(heat_pump) unless use_eer_cop
714
1124
 
715
1125
  elsif [HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
716
1126
  num_speeds = 10
@@ -744,32 +1154,57 @@ class HPXMLDefaults
744
1154
 
745
1155
  def self.apply_hvac_control(hpxml)
746
1156
  hpxml.hvac_controls.each do |hvac_control|
747
- if not hvac_control.heating_setback_temp.nil?
748
- if hvac_control.heating_setback_start_hour.nil?
749
- hvac_control.heating_setback_start_hour = 23 # 11 pm
750
- hvac_control.heating_setback_start_hour_isdefaulted = true
751
- end
1157
+ if hvac_control.heating_setpoint_temp.nil? && hvac_control.weekday_heating_setpoints.nil?
1158
+ # No heating setpoints; set a default heating setpoint for, e.g., natural ventilation
1159
+ htg_sp, htg_setback_sp, htg_setback_hrs_per_week, htg_setback_start_hr = HVAC.get_default_heating_setpoint(HPXML::HVACControlTypeManual)
1160
+ hvac_control.heating_setpoint_temp = htg_sp
1161
+ hvac_control.heating_setpoint_temp_isdefaulted = true
1162
+ end
1163
+
1164
+ if hvac_control.cooling_setpoint_temp.nil? && hvac_control.weekday_cooling_setpoints.nil?
1165
+ # No cooling setpoints; set a default cooling setpoint for, e.g., natural ventilation
1166
+ clg_sp, clg_setup_sp, clg_setup_hrs_per_week, clg_setup_start_hr = HVAC.get_default_cooling_setpoint(HPXML::HVACControlTypeManual)
1167
+ hvac_control.cooling_setpoint_temp = clg_sp
1168
+ hvac_control.cooling_setpoint_temp_isdefaulted = true
752
1169
  end
753
1170
 
754
- next unless not hvac_control.cooling_setup_temp.nil?
1171
+ if hvac_control.heating_setback_start_hour.nil? && (not hvac_control.heating_setback_temp.nil?)
1172
+ hvac_control.heating_setback_start_hour = 23 # 11 pm
1173
+ hvac_control.heating_setback_start_hour_isdefaulted = true
1174
+ end
755
1175
 
756
- if hvac_control.cooling_setup_start_hour.nil?
1176
+ if hvac_control.cooling_setup_start_hour.nil? && (not hvac_control.cooling_setup_temp.nil?)
757
1177
  hvac_control.cooling_setup_start_hour = 9 # 9 am
758
1178
  hvac_control.cooling_setup_start_hour_isdefaulted = true
759
1179
  end
1180
+
1181
+ if hvac_control.seasons_heating_begin_month.nil? || hvac_control.seasons_heating_begin_day.nil? ||
1182
+ hvac_control.seasons_heating_end_month.nil? || hvac_control.seasons_heating_end_day.nil?
1183
+ hvac_control.seasons_heating_begin_month = 1
1184
+ hvac_control.seasons_heating_begin_day = 1
1185
+ hvac_control.seasons_heating_end_month = 12
1186
+ hvac_control.seasons_heating_end_day = 31
1187
+ hvac_control.seasons_heating_begin_month_isdefaulted = true
1188
+ hvac_control.seasons_heating_begin_day_isdefaulted = true
1189
+ hvac_control.seasons_heating_end_month_isdefaulted = true
1190
+ hvac_control.seasons_heating_end_day_isdefaulted = true
1191
+ end
1192
+
1193
+ next unless hvac_control.seasons_cooling_begin_month.nil? || hvac_control.seasons_cooling_begin_day.nil? ||
1194
+ hvac_control.seasons_cooling_end_month.nil? || hvac_control.seasons_cooling_end_day.nil?
1195
+
1196
+ hvac_control.seasons_cooling_begin_month = 1
1197
+ hvac_control.seasons_cooling_begin_day = 1
1198
+ hvac_control.seasons_cooling_end_month = 12
1199
+ hvac_control.seasons_cooling_end_day = 31
1200
+ hvac_control.seasons_cooling_begin_month_isdefaulted = true
1201
+ hvac_control.seasons_cooling_begin_day_isdefaulted = true
1202
+ hvac_control.seasons_cooling_end_month_isdefaulted = true
1203
+ hvac_control.seasons_cooling_end_day_isdefaulted = true
760
1204
  end
761
1205
  end
762
1206
 
763
1207
  def self.apply_hvac_distribution(hpxml, ncfl, ncfl_ag)
764
- # Check either all ducts have location and surface area or all ducts have no location and surface area
765
- n_ducts = 0
766
- n_ducts_to_be_defaulted = 0
767
- hpxml.hvac_distributions.each do |hvac_distribution|
768
- n_ducts += hvac_distribution.ducts.size
769
- n_ducts_to_be_defaulted += hvac_distribution.ducts.select { |duct| duct.duct_surface_area.nil? && duct.duct_location.nil? }.size
770
- end
771
- fail if n_ducts_to_be_defaulted > 0 && (n_ducts != n_ducts_to_be_defaulted) # EPvalidator.xml should prevent this
772
-
773
1208
  hpxml.hvac_distributions.each do |hvac_distribution|
774
1209
  next unless [HPXML::HVACDistributionTypeAir].include? hvac_distribution.distribution_system_type
775
1210
 
@@ -779,41 +1214,75 @@ class HPXMLDefaults
779
1214
  hvac_distribution.number_of_return_registers_isdefaulted = true
780
1215
  end
781
1216
 
1217
+ next if hvac_distribution.ducts.empty?
1218
+
782
1219
  # Default ducts
1220
+
783
1221
  cfa_served = hvac_distribution.conditioned_floor_area_served
784
1222
  n_returns = hvac_distribution.number_of_return_registers
785
-
786
1223
  supply_ducts = hvac_distribution.ducts.select { |duct| duct.duct_type == HPXML::DuctTypeSupply }
787
1224
  return_ducts = hvac_distribution.ducts.select { |duct| duct.duct_type == HPXML::DuctTypeReturn }
788
- [supply_ducts, return_ducts].each do |ducts|
789
- ducts.each do |duct|
790
- next unless duct.duct_surface_area.nil?
791
-
792
- primary_duct_area, secondary_duct_area = HVAC.get_default_duct_surface_area(duct.duct_type, ncfl_ag, cfa_served, n_returns).map { |area| area / ducts.size }
793
- primary_duct_location, secondary_duct_location = HVAC.get_default_duct_locations(hpxml)
794
- if primary_duct_location.nil? # If a home doesn't have any non-living spaces (outside living space), place all ducts in living space.
795
- duct.duct_surface_area = primary_duct_area + secondary_duct_area
796
- duct.duct_location = secondary_duct_location
797
- else
798
- duct.duct_surface_area = primary_duct_area
799
- duct.duct_location = primary_duct_location
800
- if secondary_duct_area > 0
801
- hvac_distribution.ducts.add(duct_type: duct.duct_type,
802
- duct_insulation_r_value: duct.duct_insulation_r_value,
803
- duct_location: secondary_duct_location,
804
- duct_location_isdefaulted: true,
805
- duct_surface_area: secondary_duct_area,
806
- duct_surface_area_isdefaulted: true)
1225
+
1226
+ if hvac_distribution.ducts[0].duct_location.nil?
1227
+ # Default both duct location(s) and duct surface area(s)
1228
+ [supply_ducts, return_ducts].each do |ducts|
1229
+ ducts.each do |duct|
1230
+ primary_duct_area, secondary_duct_area = HVAC.get_default_duct_surface_area(duct.duct_type, ncfl_ag, cfa_served, n_returns).map { |area| area / ducts.size }
1231
+ primary_duct_location, secondary_duct_location = HVAC.get_default_duct_locations(hpxml)
1232
+ if primary_duct_location.nil? # If a home doesn't have any non-living spaces (outside living space), place all ducts in living space.
1233
+ duct.duct_surface_area = primary_duct_area + secondary_duct_area
1234
+ duct.duct_surface_area_isdefaulted = true
1235
+ duct.duct_location = secondary_duct_location
1236
+ duct.duct_location_isdefaulted = true
1237
+ else
1238
+ duct.duct_surface_area = primary_duct_area
1239
+ duct.duct_surface_area_isdefaulted = true
1240
+ duct.duct_location = primary_duct_location
1241
+ duct.duct_location_isdefaulted = true
1242
+
1243
+ if secondary_duct_area > 0
1244
+ hvac_distribution.ducts.add(duct_type: duct.duct_type,
1245
+ duct_insulation_r_value: duct.duct_insulation_r_value,
1246
+ duct_location: secondary_duct_location,
1247
+ duct_location_isdefaulted: true,
1248
+ duct_surface_area: secondary_duct_area,
1249
+ duct_surface_area_isdefaulted: true)
1250
+ end
807
1251
  end
808
1252
  end
809
- duct.duct_surface_area_isdefaulted = true
810
- duct.duct_location_isdefaulted = true
1253
+ end
1254
+
1255
+ elsif hvac_distribution.ducts[0].duct_surface_area.nil?
1256
+ # Default duct surface area(s)
1257
+ [supply_ducts, return_ducts].each do |ducts|
1258
+ ducts.each do |duct|
1259
+ total_duct_area = HVAC.get_default_duct_surface_area(duct.duct_type, ncfl_ag, cfa_served, n_returns).sum()
1260
+ duct.duct_surface_area = total_duct_area * duct.duct_fraction_area
1261
+ duct.duct_surface_area_isdefaulted = true
1262
+ end
1263
+ end
1264
+ end
1265
+
1266
+ # Calculate FractionDuctArea from DuctSurfaceArea
1267
+ supply_ducts = hvac_distribution.ducts.select { |duct| duct.duct_type == HPXML::DuctTypeSupply }
1268
+ return_ducts = hvac_distribution.ducts.select { |duct| duct.duct_type == HPXML::DuctTypeReturn }
1269
+ total_supply_area = supply_ducts.map { |d| d.duct_surface_area }.sum
1270
+ total_return_area = return_ducts.map { |d| d.duct_surface_area }.sum
1271
+ (supply_ducts + return_ducts).each do |duct|
1272
+ next unless duct.duct_fraction_area.nil?
1273
+
1274
+ if duct.duct_type == HPXML::DuctTypeSupply
1275
+ duct.duct_fraction_area = (duct.duct_surface_area / total_supply_area).round(3)
1276
+ duct.duct_fraction_area_isdefaulted = true
1277
+ elsif duct.duct_type == HPXML::DuctTypeReturn
1278
+ duct.duct_fraction_area = (duct.duct_surface_area / total_return_area).round(3)
1279
+ duct.duct_fraction_area_isdefaulted = true
811
1280
  end
812
1281
  end
813
1282
  end
814
1283
  end
815
1284
 
816
- def self.apply_ventilation_fans(hpxml)
1285
+ def self.apply_ventilation_fans(hpxml, infil_measurements, weather, cfa, nbeds)
817
1286
  # Default mech vent systems
818
1287
  hpxml.ventilation_fans.each do |vent_fan|
819
1288
  next unless vent_fan.used_for_whole_building_ventilation
@@ -826,6 +1295,18 @@ class HPXMLDefaults
826
1295
  vent_fan.hours_in_operation = (vent_fan.fan_type == HPXML::MechVentTypeCFIS) ? 8.0 : 24.0
827
1296
  vent_fan.hours_in_operation_isdefaulted = true
828
1297
  end
1298
+ if vent_fan.rated_flow_rate.nil? && vent_fan.tested_flow_rate.nil? && vent_fan.calculated_flow_rate.nil? && vent_fan.delivered_ventilation.nil?
1299
+ if hpxml.ventilation_fans.select { |vf| vf.used_for_whole_building_ventilation }.size > 1
1300
+ fail 'Defaulting flow rates for multiple mechanical ventilation systems is currently not supported.'
1301
+ end
1302
+
1303
+ vent_fan.rated_flow_rate = Airflow.get_default_mech_vent_flow_rate(hpxml, vent_fan, infil_measurements, weather, 1.0, cfa, nbeds).round(1)
1304
+ vent_fan.rated_flow_rate_isdefaulted = true
1305
+ end
1306
+ if vent_fan.fan_power.nil?
1307
+ vent_fan.fan_power = (vent_fan.flow_rate * Airflow.get_default_mech_vent_fan_power(vent_fan)).round(1)
1308
+ vent_fan.fan_power_isdefaulted = true
1309
+ end
829
1310
  end
830
1311
 
831
1312
  # Default kitchen fan
@@ -836,7 +1317,7 @@ class HPXMLDefaults
836
1317
  vent_fan.quantity = 1
837
1318
  vent_fan.quantity_isdefaulted = true
838
1319
  end
839
- if vent_fan.rated_flow_rate.nil?
1320
+ if vent_fan.rated_flow_rate.nil? && vent_fan.tested_flow_rate.nil? && vent_fan.calculated_flow_rate.nil? && vent_fan.delivered_ventilation.nil?
840
1321
  vent_fan.rated_flow_rate = 100.0 # cfm, per BA HSP
841
1322
  vent_fan.rated_flow_rate_isdefaulted = true
842
1323
  end
@@ -845,7 +1326,7 @@ class HPXMLDefaults
845
1326
  vent_fan.hours_in_operation_isdefaulted = true
846
1327
  end
847
1328
  if vent_fan.fan_power.nil?
848
- vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
1329
+ vent_fan.fan_power = 0.3 * vent_fan.flow_rate # W, per BA HSP
849
1330
  vent_fan.fan_power_isdefaulted = true
850
1331
  end
851
1332
  if vent_fan.start_hour.nil?
@@ -862,7 +1343,7 @@ class HPXMLDefaults
862
1343
  vent_fan.quantity = hpxml.building_construction.number_of_bathrooms
863
1344
  vent_fan.quantity_isdefaulted = true
864
1345
  end
865
- if vent_fan.rated_flow_rate.nil?
1346
+ if vent_fan.rated_flow_rate.nil? && vent_fan.tested_flow_rate.nil? && vent_fan.calculated_flow_rate.nil? && vent_fan.delivered_ventilation.nil?
866
1347
  vent_fan.rated_flow_rate = 50.0 # cfm, per BA HSP
867
1348
  vent_fan.rated_flow_rate_isdefaulted = true
868
1349
  end
@@ -871,7 +1352,7 @@ class HPXMLDefaults
871
1352
  vent_fan.hours_in_operation_isdefaulted = true
872
1353
  end
873
1354
  if vent_fan.fan_power.nil?
874
- vent_fan.fan_power = 0.3 * vent_fan.rated_flow_rate # W, per BA HSP
1355
+ vent_fan.fan_power = 0.3 * vent_fan.flow_rate # W, per BA HSP
875
1356
  vent_fan.fan_power_isdefaulted = true
876
1357
  end
877
1358
  if vent_fan.start_hour.nil?
@@ -879,6 +1360,20 @@ class HPXMLDefaults
879
1360
  vent_fan.start_hour_isdefaulted = true
880
1361
  end
881
1362
  end
1363
+
1364
+ # Default whole house fan
1365
+ hpxml.ventilation_fans.each do |vent_fan|
1366
+ next unless vent_fan.used_for_seasonal_cooling_load_reduction
1367
+
1368
+ if vent_fan.rated_flow_rate.nil? && vent_fan.tested_flow_rate.nil? && vent_fan.calculated_flow_rate.nil? && vent_fan.delivered_ventilation.nil?
1369
+ vent_fan.rated_flow_rate = cfa * 2.0
1370
+ vent_fan.rated_flow_rate_isdefaulted = true
1371
+ end
1372
+ if vent_fan.fan_power.nil?
1373
+ vent_fan.fan_power = 0.1 * vent_fan.flow_rate # W
1374
+ vent_fan.fan_power_isdefaulted = true
1375
+ end
1376
+ end
882
1377
  end
883
1378
 
884
1379
  def self.apply_water_heaters(hpxml, nbeds, eri_version)
@@ -913,6 +1408,10 @@ class HPXMLDefaults
913
1408
  water_heating_system.tank_volume = Waterheater.get_default_tank_volume(water_heating_system.fuel_type, nbeds, hpxml.building_construction.number_of_bathrooms)
914
1409
  water_heating_system.tank_volume_isdefaulted = true
915
1410
  end
1411
+ if water_heating_system.energy_factor.nil? && water_heating_system.uniform_energy_factor.nil?
1412
+ water_heating_system.energy_factor = Waterheater.get_default_water_heater_efficiency_by_year_installed(water_heating_system.year_installed, water_heating_system.fuel_type)
1413
+ water_heating_system.energy_factor_isdefaulted = true
1414
+ end
916
1415
  if water_heating_system.recovery_efficiency.nil?
917
1416
  water_heating_system.recovery_efficiency = Waterheater.get_default_recovery_efficiency(water_heating_system)
918
1417
  water_heating_system.recovery_efficiency_isdefaulted = true
@@ -922,6 +1421,14 @@ class HPXMLDefaults
922
1421
  water_heating_system.location = Waterheater.get_default_location(hpxml, hpxml.climate_and_risk_zones.iecc_zone)
923
1422
  water_heating_system.location_isdefaulted = true
924
1423
  end
1424
+ next unless water_heating_system.usage_bin.nil? && (not water_heating_system.uniform_energy_factor.nil?) # FHR & UsageBin only applies to UEF
1425
+
1426
+ if not water_heating_system.first_hour_rating.nil?
1427
+ water_heating_system.usage_bin = Waterheater.get_usage_bin_from_first_hour_rating(water_heating_system.first_hour_rating)
1428
+ else
1429
+ water_heating_system.usage_bin = HPXML::WaterHeaterUsageBinMedium
1430
+ end
1431
+ water_heating_system.usage_bin_isdefaulted = true
925
1432
  end
926
1433
  end
927
1434
 
@@ -970,17 +1477,32 @@ class HPXMLDefaults
970
1477
  hpxml.water_heating.water_fixtures_usage_multiplier = 1.0
971
1478
  hpxml.water_heating.water_fixtures_usage_multiplier_isdefaulted = true
972
1479
  end
1480
+ if hpxml.water_heating.water_fixtures_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1481
+ hpxml.water_heating.water_fixtures_weekday_fractions = Schedule.FixturesWeekdayFractions
1482
+ hpxml.water_heating.water_fixtures_weekday_fractions_isdefaulted = true
1483
+ end
1484
+ if hpxml.water_heating.water_fixtures_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1485
+ hpxml.water_heating.water_fixtures_weekend_fractions = Schedule.FixturesWeekendFractions
1486
+ hpxml.water_heating.water_fixtures_weekend_fractions_isdefaulted = true
1487
+ end
1488
+ if hpxml.water_heating.water_fixtures_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1489
+ hpxml.water_heating.water_fixtures_monthly_multipliers = Schedule.FixturesMonthlyMultipliers
1490
+ hpxml.water_heating.water_fixtures_monthly_multipliers_isdefaulted = true
1491
+ end
973
1492
  end
974
1493
 
975
1494
  def self.apply_solar_thermal_systems(hpxml)
976
- return if hpxml.solar_thermal_systems.size == 0
977
-
978
- solar_thermal_system = hpxml.solar_thermal_systems[0]
979
- collector_area = solar_thermal_system.collector_area
980
-
981
- if not collector_area.nil? # Detailed solar water heater
982
- if solar_thermal_system.storage_volume.nil?
983
- solar_thermal_system.storage_volume = Waterheater.calc_default_solar_thermal_system_storage_volume(collector_area)
1495
+ hpxml.solar_thermal_systems.each do |solar_thermal_system|
1496
+ if solar_thermal_system.collector_azimuth.nil?
1497
+ solar_thermal_system.collector_azimuth = get_azimuth_from_orientation(solar_thermal_system.collector_orientation)
1498
+ solar_thermal_system.collector_azimuth_isdefaulted = true
1499
+ end
1500
+ if solar_thermal_system.collector_orientation.nil?
1501
+ solar_thermal_system.collector_orientation = get_orientation_from_azimuth(solar_thermal_system.collector_azimuth)
1502
+ solar_thermal_system.collector_orientation_isdefaulted = true
1503
+ end
1504
+ if solar_thermal_system.storage_volume.nil? && (not solar_thermal_system.collector_area.nil?) # Detailed solar water heater
1505
+ solar_thermal_system.storage_volume = Waterheater.calc_default_solar_thermal_system_storage_volume(solar_thermal_system.collector_area)
984
1506
  solar_thermal_system.storage_volume_isdefaulted = true
985
1507
  end
986
1508
  end
@@ -988,6 +1510,14 @@ class HPXMLDefaults
988
1510
 
989
1511
  def self.apply_pv_systems(hpxml)
990
1512
  hpxml.pv_systems.each do |pv_system|
1513
+ if pv_system.array_azimuth.nil?
1514
+ pv_system.array_azimuth = get_azimuth_from_orientation(pv_system.array_orientation)
1515
+ pv_system.array_azimuth_isdefaulted = true
1516
+ end
1517
+ if pv_system.array_orientation.nil?
1518
+ pv_system.array_orientation = get_orientation_from_azimuth(pv_system.array_azimuth)
1519
+ pv_system.array_orientation_isdefaulted = true
1520
+ end
991
1521
  if pv_system.is_shared_system.nil?
992
1522
  pv_system.is_shared_system = false
993
1523
  pv_system.is_shared_system_isdefaulted = true
@@ -1024,6 +1554,40 @@ class HPXMLDefaults
1024
1554
  end
1025
1555
  end
1026
1556
 
1557
+ def self.apply_batteries(hpxml)
1558
+ default_values = Battery.get_battery_default_values()
1559
+ hpxml.batteries.each do |battery|
1560
+ if battery.location.nil?
1561
+ battery.location = default_values[:location]
1562
+ battery.location_isdefaulted = true
1563
+ end
1564
+ if battery.lifetime_model.nil?
1565
+ battery.lifetime_model = default_values[:lifetime_model]
1566
+ battery.lifetime_model_isdefaulted = true
1567
+ end
1568
+ if battery.nominal_voltage.nil?
1569
+ battery.nominal_voltage = default_values[:nominal_voltage] # V
1570
+ battery.nominal_voltage_isdefaulted = true
1571
+ end
1572
+ if battery.rated_power_output.nil? && battery.nominal_capacity_kwh.nil? && battery.nominal_capacity_ah.nil?
1573
+ battery.rated_power_output = default_values[:rated_power_output] # W
1574
+ battery.rated_power_output_isdefaulted = true
1575
+ battery.nominal_capacity_kwh = default_values[:nominal_capacity_kwh] # kWh
1576
+ battery.nominal_capacity_kwh_isdefaulted = true
1577
+ elsif battery.rated_power_output.nil?
1578
+ nominal_capacity_kwh = battery.nominal_capacity_kwh
1579
+ if nominal_capacity_kwh.nil?
1580
+ nominal_capacity_kwh = Battery.get_kWh_from_Ah(battery.nominal_capacity_ah, battery.nominal_voltage)
1581
+ end
1582
+ battery.rated_power_output = UnitConversions.convert(nominal_capacity_kwh, 'kWh', 'Wh') * 0.5 # W
1583
+ battery.rated_power_output_isdefaulted = true
1584
+ elsif battery.nominal_capacity_kwh.nil? && battery.nominal_capacity_ah.nil?
1585
+ battery.nominal_capacity_kwh = UnitConversions.convert(battery.rated_power_output, 'W', 'kW') / 0.5 # kWh
1586
+ battery.nominal_capacity_kwh_isdefaulted = true
1587
+ end
1588
+ end
1589
+ end
1590
+
1027
1591
  def self.apply_appliances(hpxml, nbeds, eri_version)
1028
1592
  # Default clothes washer
1029
1593
  if hpxml.clothes_washers.size > 0
@@ -1057,6 +1621,18 @@ class HPXMLDefaults
1057
1621
  clothes_washer.usage_multiplier = 1.0
1058
1622
  clothes_washer.usage_multiplier_isdefaulted = true
1059
1623
  end
1624
+ if clothes_washer.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1625
+ clothes_washer.weekday_fractions = Schedule.ClothesWasherWeekdayFractions
1626
+ clothes_washer.weekday_fractions_isdefaulted = true
1627
+ end
1628
+ if clothes_washer.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1629
+ clothes_washer.weekend_fractions = Schedule.ClothesWasherWeekendFractions
1630
+ clothes_washer.weekend_fractions_isdefaulted = true
1631
+ end
1632
+ if clothes_washer.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1633
+ clothes_washer.monthly_multipliers = Schedule.ClothesWasherMonthlyMultipliers
1634
+ clothes_washer.monthly_multipliers_isdefaulted = true
1635
+ end
1060
1636
  end
1061
1637
 
1062
1638
  # Default clothes dryer
@@ -1092,6 +1668,18 @@ class HPXMLDefaults
1092
1668
  clothes_dryer.vented_flow_rate = 100.0
1093
1669
  clothes_dryer.vented_flow_rate_isdefaulted = true
1094
1670
  end
1671
+ if clothes_dryer.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1672
+ clothes_dryer.weekday_fractions = Schedule.ClothesDryerWeekdayFractions
1673
+ clothes_dryer.weekday_fractions_isdefaulted = true
1674
+ end
1675
+ if clothes_dryer.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1676
+ clothes_dryer.weekend_fractions = Schedule.ClothesDryerWeekendFractions
1677
+ clothes_dryer.weekend_fractions_isdefaulted = true
1678
+ end
1679
+ if clothes_dryer.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1680
+ clothes_dryer.monthly_multipliers = Schedule.ClothesDryerMonthlyMultipliers
1681
+ clothes_dryer.monthly_multipliers_isdefaulted = true
1682
+ end
1095
1683
  end
1096
1684
 
1097
1685
  # Default dishwasher
@@ -1124,6 +1712,18 @@ class HPXMLDefaults
1124
1712
  dishwasher.usage_multiplier = 1.0
1125
1713
  dishwasher.usage_multiplier_isdefaulted = true
1126
1714
  end
1715
+ if dishwasher.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1716
+ dishwasher.weekday_fractions = Schedule.DishwasherWeekdayFractions
1717
+ dishwasher.weekday_fractions_isdefaulted = true
1718
+ end
1719
+ if dishwasher.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1720
+ dishwasher.weekend_fractions = Schedule.DishwasherWeekendFractions
1721
+ dishwasher.weekend_fractions_isdefaulted = true
1722
+ end
1723
+ if dishwasher.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1724
+ dishwasher.monthly_multipliers = Schedule.DishwasherMonthlyMultipliers
1725
+ dishwasher.monthly_multipliers_isdefaulted = true
1726
+ end
1127
1727
  end
1128
1728
 
1129
1729
  # Default refrigerators
@@ -1137,20 +1737,20 @@ class HPXMLDefaults
1137
1737
  refrigerator.location = HotWaterAndAppliances.get_default_extra_refrigerator_and_freezer_locations(hpxml)
1138
1738
  refrigerator.location_isdefaulted = true
1139
1739
  end
1140
- if refrigerator.adjusted_annual_kwh.nil? && refrigerator.rated_annual_kwh.nil?
1740
+ if refrigerator.rated_annual_kwh.nil?
1141
1741
  default_values = HotWaterAndAppliances.get_extra_refrigerator_default_values
1142
1742
  refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
1143
1743
  refrigerator.rated_annual_kwh_isdefaulted = true
1144
1744
  end
1145
- if refrigerator.weekday_fractions.nil?
1745
+ if refrigerator.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1146
1746
  refrigerator.weekday_fractions = Schedule.ExtraRefrigeratorWeekdayFractions
1147
1747
  refrigerator.weekday_fractions_isdefaulted = true
1148
1748
  end
1149
- if refrigerator.weekend_fractions.nil?
1749
+ if refrigerator.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1150
1750
  refrigerator.weekend_fractions = Schedule.ExtraRefrigeratorWeekendFractions
1151
1751
  refrigerator.weekend_fractions_isdefaulted = true
1152
1752
  end
1153
- if refrigerator.monthly_multipliers.nil?
1753
+ if refrigerator.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1154
1754
  refrigerator.monthly_multipliers = Schedule.ExtraRefrigeratorMonthlyMultipliers
1155
1755
  refrigerator.monthly_multipliers_isdefaulted = true
1156
1756
  end
@@ -1159,20 +1759,20 @@ class HPXMLDefaults
1159
1759
  refrigerator.location = HPXML::LocationLivingSpace
1160
1760
  refrigerator.location_isdefaulted = true
1161
1761
  end
1162
- if refrigerator.adjusted_annual_kwh.nil? && refrigerator.rated_annual_kwh.nil?
1762
+ if refrigerator.rated_annual_kwh.nil?
1163
1763
  default_values = HotWaterAndAppliances.get_refrigerator_default_values(nbeds)
1164
1764
  refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
1165
1765
  refrigerator.rated_annual_kwh_isdefaulted = true
1166
1766
  end
1167
- if refrigerator.weekday_fractions.nil?
1767
+ if refrigerator.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1168
1768
  refrigerator.weekday_fractions = Schedule.RefrigeratorWeekdayFractions
1169
1769
  refrigerator.weekday_fractions_isdefaulted = true
1170
1770
  end
1171
- if refrigerator.weekend_fractions.nil?
1771
+ if refrigerator.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1172
1772
  refrigerator.weekend_fractions = Schedule.RefrigeratorWeekendFractions
1173
1773
  refrigerator.weekend_fractions_isdefaulted = true
1174
1774
  end
1175
- if refrigerator.monthly_multipliers.nil?
1775
+ if refrigerator.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1176
1776
  refrigerator.monthly_multipliers = Schedule.RefrigeratorMonthlyMultipliers
1177
1777
  refrigerator.monthly_multipliers_isdefaulted = true
1178
1778
  end
@@ -1189,7 +1789,7 @@ class HPXMLDefaults
1189
1789
  freezer.location = HotWaterAndAppliances.get_default_extra_refrigerator_and_freezer_locations(hpxml)
1190
1790
  freezer.location_isdefaulted = true
1191
1791
  end
1192
- if freezer.adjusted_annual_kwh.nil? && freezer.rated_annual_kwh.nil?
1792
+ if freezer.rated_annual_kwh.nil?
1193
1793
  default_values = HotWaterAndAppliances.get_freezer_default_values
1194
1794
  freezer.rated_annual_kwh = default_values[:rated_annual_kwh]
1195
1795
  freezer.rated_annual_kwh_isdefaulted = true
@@ -1198,15 +1798,15 @@ class HPXMLDefaults
1198
1798
  freezer.usage_multiplier = 1.0
1199
1799
  freezer.usage_multiplier_isdefaulted = true
1200
1800
  end
1201
- if freezer.weekday_fractions.nil?
1801
+ if freezer.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1202
1802
  freezer.weekday_fractions = Schedule.FreezerWeekdayFractions
1203
1803
  freezer.weekday_fractions_isdefaulted = true
1204
1804
  end
1205
- if freezer.weekend_fractions.nil?
1805
+ if freezer.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1206
1806
  freezer.weekend_fractions = Schedule.FreezerWeekendFractions
1207
1807
  freezer.weekend_fractions_isdefaulted = true
1208
1808
  end
1209
- if freezer.monthly_multipliers.nil?
1809
+ if freezer.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1210
1810
  freezer.monthly_multipliers = Schedule.FreezerMonthlyMultipliers
1211
1811
  freezer.monthly_multipliers_isdefaulted = true
1212
1812
  end
@@ -1228,15 +1828,15 @@ class HPXMLDefaults
1228
1828
  cooking_range.usage_multiplier = 1.0
1229
1829
  cooking_range.usage_multiplier_isdefaulted = true
1230
1830
  end
1231
- if cooking_range.weekday_fractions.nil?
1831
+ if cooking_range.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1232
1832
  cooking_range.weekday_fractions = Schedule.CookingRangeWeekdayFractions
1233
1833
  cooking_range.weekday_fractions_isdefaulted = true
1234
1834
  end
1235
- if cooking_range.weekend_fractions.nil?
1835
+ if cooking_range.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1236
1836
  cooking_range.weekend_fractions = Schedule.CookingRangeWeekendFractions
1237
1837
  cooking_range.weekend_fractions_isdefaulted = true
1238
1838
  end
1239
- if cooking_range.monthly_multipliers.nil?
1839
+ if cooking_range.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1240
1840
  cooking_range.monthly_multipliers = Schedule.CookingRangeMonthlyMultipliers
1241
1841
  cooking_range.monthly_multipliers_isdefaulted = true
1242
1842
  end
@@ -1272,29 +1872,29 @@ class HPXMLDefaults
1272
1872
  default_exterior_lighting_weekday_fractions = Schedule.LightingExteriorWeekdayFractions
1273
1873
  default_exterior_lighting_weekend_fractions = Schedule.LightingExteriorWeekendFractions
1274
1874
  default_exterior_lighting_monthly_multipliers = Schedule.LightingExteriorMonthlyMultipliers
1275
- if hpxml.has_space_type(HPXML::LocationGarage)
1276
- if hpxml.lighting.garage_weekday_fractions.nil?
1875
+ if hpxml.has_location(HPXML::LocationGarage)
1876
+ if hpxml.lighting.garage_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1277
1877
  hpxml.lighting.garage_weekday_fractions = default_exterior_lighting_weekday_fractions
1278
1878
  hpxml.lighting.garage_weekday_fractions_isdefaulted = true
1279
1879
  end
1280
- if hpxml.lighting.garage_weekend_fractions.nil?
1880
+ if hpxml.lighting.garage_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1281
1881
  hpxml.lighting.garage_weekend_fractions = default_exterior_lighting_weekend_fractions
1282
1882
  hpxml.lighting.garage_weekend_fractions_isdefaulted = true
1283
1883
  end
1284
- if hpxml.lighting.garage_monthly_multipliers.nil?
1884
+ if hpxml.lighting.garage_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1285
1885
  hpxml.lighting.garage_monthly_multipliers = default_exterior_lighting_monthly_multipliers
1286
1886
  hpxml.lighting.garage_monthly_multipliers_isdefaulted = true
1287
1887
  end
1288
1888
  end
1289
- if hpxml.lighting.exterior_weekday_fractions.nil?
1889
+ if hpxml.lighting.exterior_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1290
1890
  hpxml.lighting.exterior_weekday_fractions = default_exterior_lighting_weekday_fractions
1291
1891
  hpxml.lighting.exterior_weekday_fractions_isdefaulted = true
1292
1892
  end
1293
- if hpxml.lighting.exterior_weekend_fractions.nil?
1893
+ if hpxml.lighting.exterior_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1294
1894
  hpxml.lighting.exterior_weekend_fractions = default_exterior_lighting_weekend_fractions
1295
1895
  hpxml.lighting.exterior_weekend_fractions_isdefaulted = true
1296
1896
  end
1297
- if hpxml.lighting.exterior_monthly_multipliers.nil?
1897
+ if hpxml.lighting.exterior_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1298
1898
  hpxml.lighting.exterior_monthly_multipliers = default_exterior_lighting_monthly_multipliers
1299
1899
  hpxml.lighting.exterior_monthly_multipliers_isdefaulted = true
1300
1900
  end
@@ -1320,18 +1920,18 @@ class HPXMLDefaults
1320
1920
  hpxml.lighting.holiday_period_end_day = 6
1321
1921
  hpxml.lighting.holiday_period_end_day_isdefaulted = true
1322
1922
  end
1323
- if hpxml.lighting.holiday_weekday_fractions.nil?
1923
+ if hpxml.lighting.holiday_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1324
1924
  hpxml.lighting.holiday_weekday_fractions = Schedule.LightingExteriorHolidayWeekdayFractions
1325
1925
  hpxml.lighting.holiday_weekday_fractions_isdefaulted = true
1326
1926
  end
1327
- if hpxml.lighting.holiday_weekend_fractions.nil?
1927
+ if hpxml.lighting.holiday_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1328
1928
  hpxml.lighting.holiday_weekend_fractions = Schedule.LightingExteriorHolidayWeekendFractions
1329
1929
  hpxml.lighting.holiday_weekend_fractions_isdefaulted = true
1330
1930
  end
1331
1931
  end
1332
1932
  end
1333
1933
 
1334
- def self.apply_ceiling_fans(hpxml, nbeds)
1934
+ def self.apply_ceiling_fans(hpxml, nbeds, weather)
1335
1935
  return if hpxml.ceiling_fans.size == 0
1336
1936
 
1337
1937
  ceiling_fan = hpxml.ceiling_fans[0]
@@ -1344,6 +1944,18 @@ class HPXMLDefaults
1344
1944
  ceiling_fan.quantity = HVAC.get_default_ceiling_fan_quantity(nbeds)
1345
1945
  ceiling_fan.quantity_isdefaulted = true
1346
1946
  end
1947
+ if ceiling_fan.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1948
+ ceiling_fan.weekday_fractions = Schedule.CeilingFanWeekdayFractions
1949
+ ceiling_fan.weekday_fractions_isdefaulted = true
1950
+ end
1951
+ if ceiling_fan.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1952
+ ceiling_fan.weekend_fractions = Schedule.CeilingFanWeekendFractions
1953
+ ceiling_fan.weekend_fractions_isdefaulted = true
1954
+ end
1955
+ if ceiling_fan.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1956
+ ceiling_fan.monthly_multipliers = Schedule.CeilingFanMonthlyMultipliers(weather: weather)
1957
+ ceiling_fan.monthly_multipliers_isdefaulted = true
1958
+ end
1347
1959
  end
1348
1960
 
1349
1961
  def self.apply_pools_and_hot_tubs(hpxml, cfa, nbeds)
@@ -1360,16 +1972,16 @@ class HPXMLDefaults
1360
1972
  pool.pump_usage_multiplier = 1.0
1361
1973
  pool.pump_usage_multiplier_isdefaulted = true
1362
1974
  end
1363
- if pool.pump_weekday_fractions.nil?
1364
- pool.pump_weekday_fractions = '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'
1975
+ if pool.pump_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1976
+ pool.pump_weekday_fractions = Schedule.PoolPumpWeekdayFractions
1365
1977
  pool.pump_weekday_fractions_isdefaulted = true
1366
1978
  end
1367
- if pool.pump_weekend_fractions.nil?
1368
- pool.pump_weekend_fractions = '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'
1979
+ if pool.pump_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1980
+ pool.pump_weekend_fractions = Schedule.PoolPumpWeekendFractions
1369
1981
  pool.pump_weekend_fractions_isdefaulted = true
1370
1982
  end
1371
- if pool.pump_monthly_multipliers.nil?
1372
- pool.pump_monthly_multipliers = '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
1983
+ if pool.pump_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1984
+ pool.pump_monthly_multipliers = Schedule.PoolPumpMonthlyMultipliers
1373
1985
  pool.pump_monthly_multipliers_isdefaulted = true
1374
1986
  end
1375
1987
  end
@@ -1387,16 +1999,16 @@ class HPXMLDefaults
1387
1999
  pool.heater_usage_multiplier = 1.0
1388
2000
  pool.heater_usage_multiplier_isdefaulted = true
1389
2001
  end
1390
- if pool.heater_weekday_fractions.nil?
1391
- pool.heater_weekday_fractions = '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'
2002
+ if pool.heater_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
2003
+ pool.heater_weekday_fractions = Schedule.PoolHeaterWeekdayFractions
1392
2004
  pool.heater_weekday_fractions_isdefaulted = true
1393
2005
  end
1394
- if pool.heater_weekend_fractions.nil?
1395
- pool.heater_weekend_fractions = '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'
2006
+ if pool.heater_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
2007
+ pool.heater_weekend_fractions = Schedule.PoolHeaterWeekendFractions
1396
2008
  pool.heater_weekend_fractions_isdefaulted = true
1397
2009
  end
1398
- if pool.heater_monthly_multipliers.nil?
1399
- pool.heater_monthly_multipliers = '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
2010
+ if pool.heater_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
2011
+ pool.heater_monthly_multipliers = Schedule.PoolHeaterMonthlyMultipliers
1400
2012
  pool.heater_monthly_multipliers_isdefaulted = true
1401
2013
  end
1402
2014
  end
@@ -1414,16 +2026,16 @@ class HPXMLDefaults
1414
2026
  hot_tub.pump_usage_multiplier = 1.0
1415
2027
  hot_tub.pump_usage_multiplier_isdefaulted = true
1416
2028
  end
1417
- if hot_tub.pump_weekday_fractions.nil?
1418
- hot_tub.pump_weekday_fractions = '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'
2029
+ if hot_tub.pump_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
2030
+ hot_tub.pump_weekday_fractions = Schedule.HotTubPumpWeekdayFractions
1419
2031
  hot_tub.pump_weekday_fractions_isdefaulted = true
1420
2032
  end
1421
- if hot_tub.pump_weekend_fractions.nil?
1422
- hot_tub.pump_weekend_fractions = '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'
2033
+ if hot_tub.pump_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
2034
+ hot_tub.pump_weekend_fractions = Schedule.HotTubPumpWeekendFractions
1423
2035
  hot_tub.pump_weekend_fractions_isdefaulted = true
1424
2036
  end
1425
- if hot_tub.pump_monthly_multipliers.nil?
1426
- hot_tub.pump_monthly_multipliers = '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921'
2037
+ if hot_tub.pump_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
2038
+ hot_tub.pump_monthly_multipliers = Schedule.HotTubPumpMonthlyMultipliers
1427
2039
  hot_tub.pump_monthly_multipliers_isdefaulted = true
1428
2040
  end
1429
2041
  end
@@ -1441,16 +2053,16 @@ class HPXMLDefaults
1441
2053
  hot_tub.heater_usage_multiplier = 1.0
1442
2054
  hot_tub.heater_usage_multiplier_isdefaulted = true
1443
2055
  end
1444
- if hot_tub.heater_weekday_fractions.nil?
1445
- hot_tub.heater_weekday_fractions = '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'
2056
+ if hot_tub.heater_weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
2057
+ hot_tub.heater_weekday_fractions = Schedule.HotTubHeaterWeekdayFractions
1446
2058
  hot_tub.heater_weekday_fractions_isdefaulted = true
1447
2059
  end
1448
- if hot_tub.heater_weekend_fractions.nil?
1449
- hot_tub.heater_weekend_fractions = '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'
2060
+ if hot_tub.heater_weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
2061
+ hot_tub.heater_weekend_fractions = Schedule.HotTubHeaterWeekendFractions
1450
2062
  hot_tub.heater_weekend_fractions_isdefaulted = true
1451
2063
  end
1452
- if hot_tub.heater_monthly_multipliers.nil?
1453
- hot_tub.heater_monthly_multipliers = '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
2064
+ if hot_tub.heater_monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
2065
+ hot_tub.heater_monthly_multipliers = Schedule.HotTubHeaterMonthlyMultipliers
1454
2066
  hot_tub.heater_monthly_multipliers_isdefaulted = true
1455
2067
  end
1456
2068
  end
@@ -1472,15 +2084,15 @@ class HPXMLDefaults
1472
2084
  plug_load.frac_latent = default_lat_frac
1473
2085
  plug_load.frac_latent_isdefaulted = true
1474
2086
  end
1475
- if plug_load.weekday_fractions.nil?
2087
+ if plug_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1476
2088
  plug_load.weekday_fractions = Schedule.PlugLoadsOtherWeekdayFractions
1477
2089
  plug_load.weekday_fractions_isdefaulted = true
1478
2090
  end
1479
- if plug_load.weekend_fractions.nil?
2091
+ if plug_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1480
2092
  plug_load.weekend_fractions = Schedule.PlugLoadsOtherWeekendFractions
1481
2093
  plug_load.weekend_fractions_isdefaulted = true
1482
2094
  end
1483
- if plug_load.monthly_multipliers.nil?
2095
+ if plug_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1484
2096
  plug_load.monthly_multipliers = Schedule.PlugLoadsOtherMonthlyMultipliers
1485
2097
  plug_load.monthly_multipliers_isdefaulted = true
1486
2098
  end
@@ -1498,15 +2110,15 @@ class HPXMLDefaults
1498
2110
  plug_load.frac_latent = default_lat_frac
1499
2111
  plug_load.frac_latent_isdefaulted = true
1500
2112
  end
1501
- if plug_load.weekday_fractions.nil?
2113
+ if plug_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1502
2114
  plug_load.weekday_fractions = Schedule.PlugLoadsTVWeekdayFractions
1503
2115
  plug_load.weekday_fractions_isdefaulted = true
1504
2116
  end
1505
- if plug_load.weekend_fractions.nil?
2117
+ if plug_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1506
2118
  plug_load.weekend_fractions = Schedule.PlugLoadsTVWeekendFractions
1507
2119
  plug_load.weekend_fractions_isdefaulted = true
1508
2120
  end
1509
- if plug_load.monthly_multipliers.nil?
2121
+ if plug_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1510
2122
  plug_load.monthly_multipliers = Schedule.PlugLoadsTVMonthlyMultipliers
1511
2123
  plug_load.monthly_multipliers_isdefaulted = true
1512
2124
  end
@@ -1524,15 +2136,15 @@ class HPXMLDefaults
1524
2136
  plug_load.frac_latent = 0.0
1525
2137
  plug_load.frac_latent_isdefaulted = true
1526
2138
  end
1527
- if plug_load.weekday_fractions.nil?
2139
+ if plug_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1528
2140
  plug_load.weekday_fractions = Schedule.PlugLoadsVehicleWeekdayFractions
1529
2141
  plug_load.weekday_fractions_isdefaulted = true
1530
2142
  end
1531
- if plug_load.weekend_fractions.nil?
2143
+ if plug_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1532
2144
  plug_load.weekend_fractions = Schedule.PlugLoadsVehicleWeekendFractions
1533
2145
  plug_load.weekend_fractions_isdefaulted = true
1534
2146
  end
1535
- if plug_load.monthly_multipliers.nil?
2147
+ if plug_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1536
2148
  plug_load.monthly_multipliers = Schedule.PlugLoadsVehicleMonthlyMultipliers
1537
2149
  plug_load.monthly_multipliers_isdefaulted = true
1538
2150
  end
@@ -1550,15 +2162,15 @@ class HPXMLDefaults
1550
2162
  plug_load.frac_latent = 0.0
1551
2163
  plug_load.frac_latent_isdefaulted = true
1552
2164
  end
1553
- if plug_load.weekday_fractions.nil?
2165
+ if plug_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1554
2166
  plug_load.weekday_fractions = Schedule.PlugLoadsWellPumpWeekdayFractions
1555
2167
  plug_load.weekday_fractions_isdefaulted = true
1556
2168
  end
1557
- if plug_load.weekend_fractions.nil?
2169
+ if plug_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1558
2170
  plug_load.weekend_fractions = Schedule.PlugLoadsWellPumpWeekendFractions
1559
2171
  plug_load.weekend_fractions_isdefaulted = true
1560
2172
  end
1561
- if plug_load.monthly_multipliers.nil?
2173
+ if plug_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1562
2174
  plug_load.monthly_multipliers = Schedule.PlugLoadsWellPumpMonthlyMultipliers
1563
2175
  plug_load.monthly_multipliers_isdefaulted = true
1564
2176
  end
@@ -1585,15 +2197,15 @@ class HPXMLDefaults
1585
2197
  fuel_load.frac_latent = 0.0
1586
2198
  fuel_load.frac_latent_isdefaulted = true
1587
2199
  end
1588
- if fuel_load.weekday_fractions.nil?
2200
+ if fuel_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1589
2201
  fuel_load.weekday_fractions = Schedule.FuelLoadsGrillWeekdayFractions
1590
2202
  fuel_load.weekday_fractions_isdefaulted = true
1591
2203
  end
1592
- if fuel_load.weekend_fractions.nil?
2204
+ if fuel_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1593
2205
  fuel_load.weekend_fractions = Schedule.FuelLoadsGrillWeekendFractions
1594
2206
  fuel_load.weekend_fractions_isdefaulted = true
1595
2207
  end
1596
- if fuel_load.monthly_multipliers.nil?
2208
+ if fuel_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1597
2209
  fuel_load.monthly_multipliers = Schedule.FuelLoadsGrillMonthlyMultipliers
1598
2210
  fuel_load.monthly_multipliers_isdefaulted = true
1599
2211
  end
@@ -1610,15 +2222,15 @@ class HPXMLDefaults
1610
2222
  fuel_load.frac_latent = 0.0
1611
2223
  fuel_load.frac_latent_isdefaulted = true
1612
2224
  end
1613
- if fuel_load.weekday_fractions.nil?
2225
+ if fuel_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1614
2226
  fuel_load.weekday_fractions = Schedule.FuelLoadsLightingWeekdayFractions
1615
2227
  fuel_load.weekday_fractions_isdefaulted = true
1616
2228
  end
1617
- if fuel_load.weekend_fractions.nil?
2229
+ if fuel_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1618
2230
  fuel_load.weekend_fractions = Schedule.FuelLoadsLightingWeekendFractions
1619
2231
  fuel_load.weekend_fractions_isdefaulted = true
1620
2232
  end
1621
- if fuel_load.monthly_multipliers.nil?
2233
+ if fuel_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1622
2234
  fuel_load.monthly_multipliers = Schedule.FuelLoadsLightingMonthlyMultipliers
1623
2235
  fuel_load.monthly_multipliers_isdefaulted = true
1624
2236
  end
@@ -1635,15 +2247,15 @@ class HPXMLDefaults
1635
2247
  fuel_load.frac_latent = 0.1
1636
2248
  fuel_load.frac_latent_isdefaulted = true
1637
2249
  end
1638
- if fuel_load.weekday_fractions.nil?
2250
+ if fuel_load.weekday_fractions.nil? && hpxml.header.schedules_filepath.nil?
1639
2251
  fuel_load.weekday_fractions = Schedule.FuelLoadsFireplaceWeekdayFractions
1640
2252
  fuel_load.weekday_fractions_isdefaulted = true
1641
2253
  end
1642
- if fuel_load.weekend_fractions.nil?
2254
+ if fuel_load.weekend_fractions.nil? && hpxml.header.schedules_filepath.nil?
1643
2255
  fuel_load.weekend_fractions = Schedule.FuelLoadsFireplaceWeekendFractions
1644
2256
  fuel_load.weekend_fractions_isdefaulted = true
1645
2257
  end
1646
- if fuel_load.monthly_multipliers.nil?
2258
+ if fuel_load.monthly_multipliers.nil? && hpxml.header.schedules_filepath.nil?
1647
2259
  fuel_load.monthly_multipliers = Schedule.FuelLoadsFireplaceMonthlyMultipliers
1648
2260
  fuel_load.monthly_multipliers_isdefaulted = true
1649
2261
  end
@@ -1672,7 +2284,7 @@ class HPXMLDefaults
1672
2284
  end
1673
2285
  end
1674
2286
 
1675
- hvac_systems = HVAC.get_hpxml_hvac_systems(hpxml)
2287
+ hvac_systems = HVAC.get_hpxml_hvac_systems(hpxml, exclude_hp_backup_systems: true)
1676
2288
 
1677
2289
  # Calculate building design loads and equipment capacities/airflows
1678
2290
  bldg_design_loads, all_hvac_sizing_values = HVACSizing.calculate(weather, hpxml, cfa, nbeds, hvac_systems)
@@ -1745,7 +2357,7 @@ class HPXMLDefaults
1745
2357
  # Heating capacities
1746
2358
  if htg_sys.heating_capacity.nil? || ((htg_sys.heating_capacity - hvac_sizing_values.Heat_Capacity).abs >= 1.0)
1747
2359
  # Heating capacity @ 17F
1748
- if htg_sys.respond_to? :heating_capacity_17F
2360
+ if htg_sys.is_a? HPXML::HeatPump
1749
2361
  if (not htg_sys.heating_capacity.nil?) && (not htg_sys.heating_capacity_17F.nil?)
1750
2362
  # Fixed value entered; scale w/ heating_capacity in case allow_increased_fixed_capacities=true
1751
2363
  htg_cap_17f = htg_sys.heating_capacity_17F * hvac_sizing_values.Heat_Capacity.round / htg_sys.heating_capacity
@@ -1763,20 +2375,33 @@ class HPXMLDefaults
1763
2375
  htg_sys.heating_capacity = hvac_sizing_values.Heat_Capacity.round
1764
2376
  htg_sys.heating_capacity_isdefaulted = true
1765
2377
  end
1766
- if htg_sys.respond_to? :backup_heating_capacity
1767
- if not htg_sys.backup_heating_fuel.nil? # If there is a backup heating source
2378
+ if htg_sys.is_a? HPXML::HeatPump
2379
+ if htg_sys.backup_type.nil?
2380
+ htg_sys.backup_heating_capacity = 0.0
2381
+ elsif htg_sys.backup_type == HPXML::HeatPumpBackupTypeIntegrated
1768
2382
  if htg_sys.backup_heating_capacity.nil? || ((htg_sys.backup_heating_capacity - hvac_sizing_values.Heat_Capacity_Supp).abs >= 1.0)
1769
2383
  htg_sys.backup_heating_capacity = hvac_sizing_values.Heat_Capacity_Supp.round
1770
2384
  htg_sys.backup_heating_capacity_isdefaulted = true
1771
2385
  end
1772
- else
1773
- htg_sys.backup_heating_capacity = 0.0
2386
+ elsif htg_sys.backup_type == HPXML::HeatPumpBackupTypeSeparate
2387
+ if htg_sys.backup_system.heating_capacity.nil? || ((htg_sys.backup_system.heating_capacity - hvac_sizing_values.Heat_Capacity_Supp).abs >= 1.0)
2388
+ htg_sys.backup_system.heating_capacity = hvac_sizing_values.Heat_Capacity_Supp.round
2389
+ htg_sys.backup_system.heating_capacity_isdefaulted = true
2390
+ end
1774
2391
  end
1775
2392
  end
1776
2393
 
1777
2394
  # Heating airflow
1778
- htg_sys.heating_airflow_cfm = hvac_sizing_values.Heat_Airflow.round
1779
- htg_sys.heating_airflow_cfm_isdefaulted = true
2395
+ if not (htg_sys.is_a?(HPXML::HeatingSystem) &&
2396
+ [HPXML::HVACTypeBoiler,
2397
+ HPXML::HVACTypeElectricResistance].include?(htg_sys.heating_system_type))
2398
+ htg_sys.heating_airflow_cfm = hvac_sizing_values.Heat_Airflow.round
2399
+ htg_sys.heating_airflow_cfm_isdefaulted = true
2400
+ end
2401
+ if htg_sys.is_a?(HPXML::HeatPump) && (htg_sys.backup_type == HPXML::HeatPumpBackupTypeSeparate)
2402
+ htg_sys.backup_system.heating_airflow_cfm = hvac_sizing_values.Heat_Airflow_Supp.round
2403
+ htg_sys.backup_system.heating_airflow_cfm_isdefaulted = true
2404
+ end
1780
2405
 
1781
2406
  # Heating GSHP loop
1782
2407
  if htg_sys.is_a? HPXML::HeatPump
@@ -1802,4 +2427,50 @@ class HPXMLDefaults
1802
2427
  clg_sys.cooling_airflow_cfm_isdefaulted = true
1803
2428
  end
1804
2429
  end
2430
+
2431
+ def self.get_azimuth_from_orientation(orientation)
2432
+ return if orientation.nil?
2433
+
2434
+ if orientation == HPXML::OrientationNorth
2435
+ return 0
2436
+ elsif orientation == HPXML::OrientationNortheast
2437
+ return 45
2438
+ elsif orientation == HPXML::OrientationEast
2439
+ return 90
2440
+ elsif orientation == HPXML::OrientationSoutheast
2441
+ return 135
2442
+ elsif orientation == HPXML::OrientationSouth
2443
+ return 180
2444
+ elsif orientation == HPXML::OrientationSouthwest
2445
+ return 225
2446
+ elsif orientation == HPXML::OrientationWest
2447
+ return 270
2448
+ elsif orientation == HPXML::OrientationNorthwest
2449
+ return 315
2450
+ end
2451
+
2452
+ fail "Unexpected orientation: #{orientation}."
2453
+ end
2454
+
2455
+ def self.get_orientation_from_azimuth(azimuth)
2456
+ return if azimuth.nil?
2457
+
2458
+ if (azimuth >= 0.0 - 22.5 + 360.0) || (azimuth < 0.0 + 22.5)
2459
+ return HPXML::OrientationNorth
2460
+ elsif (azimuth >= 45.0 - 22.5) && (azimuth < 45.0 + 22.5)
2461
+ return HPXML::OrientationNortheast
2462
+ elsif (azimuth >= 90.0 - 22.5) && (azimuth < 90.0 + 22.5)
2463
+ return HPXML::OrientationEast
2464
+ elsif (azimuth >= 135.0 - 22.5) && (azimuth < 135.0 + 22.5)
2465
+ return HPXML::OrientationSoutheast
2466
+ elsif (azimuth >= 180.0 - 22.5) && (azimuth < 180.0 + 22.5)
2467
+ return HPXML::OrientationSouth
2468
+ elsif (azimuth >= 225.0 - 22.5) && (azimuth < 225.0 + 22.5)
2469
+ return HPXML::OrientationSouthwest
2470
+ elsif (azimuth >= 270.0 - 22.5) && (azimuth < 270.0 + 22.5)
2471
+ return HPXML::OrientationWest
2472
+ elsif (azimuth >= 315.0 - 22.5) && (azimuth < 315.0 + 22.5)
2473
+ return HPXML::OrientationNorthwest
2474
+ end
2475
+ end
1805
2476
  end