urbanopt-cli 0.6.2 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1061) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +32 -0
  4. data/CMakeLists.txt +23 -23
  5. data/FindOpenStudioSDK.cmake +6 -6
  6. data/Gemfile +5 -5
  7. data/example_files/Gemfile +10 -7
  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/mappers/Baseline.rb +51 -30
  12. data/example_files/mappers/CreateBar.rb +37 -0
  13. data/example_files/mappers/FlexibleHotWater.rb +69 -0
  14. data/example_files/mappers/Floorspace.rb +30 -0
  15. data/example_files/mappers/HighEfficiency.rb +5 -4
  16. data/example_files/mappers/base_workflow.osw +5 -0
  17. data/example_files/mappers/createbar_workflow.osw +3 -1
  18. data/example_files/mappers/floorspace_workflow.osw +2 -1
  19. data/example_files/measures/BuildResidentialModel/measure.rb +109 -76
  20. data/example_files/osm_building/7.osm +0 -307
  21. data/example_files/osm_building/8.osm +0 -419
  22. data/example_files/osm_building/9.osm +0 -664
  23. data/example_files/reopt/base_assumptions.json +3 -3
  24. data/example_files/reopt/multiPV_assumptions.json +2 -2
  25. data/example_files/residential/enclosure.tsv +102 -102
  26. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +22 -16
  27. data/example_files/resources/hpxml-measures/.gitignore +3 -7
  28. data/example_files/resources/hpxml-measures/.rubocop.yml +67 -8
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1752 -1455
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +3229 -5431
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +386 -553
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +1075 -363
  33. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +212 -0
  34. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +898 -0
  35. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules.rb +109 -188
  36. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_README.md +0 -0
  37. 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
  38. 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
  39. 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
  40. 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
  41. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.json +2 -2
  42. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.md +0 -0
  43. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_consumption_dist.csv} +0 -0
  44. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_duration_dist.csv} +0 -0
  45. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_consumption_dist.csv} +0 -0
  46. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_duration_dist.csv} +0 -0
  47. 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
  48. 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
  49. 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
  50. 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
  51. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_cluster_size_probability.csv +0 -0
  52. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_event_duration_probability.csv +0 -0
  53. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  54. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  55. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  56. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  57. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  58. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  59. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  60. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  61. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  62. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  63. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  64. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  65. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  66. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  67. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  68. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  69. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  70. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  71. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  72. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  73. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  74. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  75. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  76. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  77. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  78. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  79. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  80. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  81. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  82. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  83. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  84. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  85. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  86. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  87. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  88. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  89. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  90. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  91. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  92. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  93. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  94. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  95. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  96. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  97. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  98. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  99. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  100. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  101. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_0.csv +0 -0
  102. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_1.csv +0 -0
  103. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_2.csv +0 -0
  104. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_3.csv +0 -0
  105. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_0.csv +0 -0
  106. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_1.csv +0 -0
  107. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_2.csv +0 -0
  108. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_3.csv +0 -0
  109. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +0 -0
  110. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  111. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  112. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  113. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  114. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  115. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  116. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  117. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  118. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  119. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  120. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  121. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  122. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  123. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  124. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  125. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  126. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  127. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  128. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  129. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  130. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  131. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  132. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  133. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  134. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  135. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  136. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  137. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  138. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  139. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  140. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  141. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  142. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  143. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  144. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  145. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  146. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  147. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  148. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  149. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  150. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  151. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  152. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  153. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  154. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  155. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  156. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  157. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  158. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_0.csv +0 -0
  159. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_1.csv +0 -0
  160. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_2.csv +0 -0
  161. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_3.csv +0 -0
  162. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_0.csv +0 -0
  163. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_1.csv +0 -0
  164. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_2.csv +0 -0
  165. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_3.csv +0 -0
  166. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +0 -0
  167. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +526 -0
  168. data/example_files/resources/hpxml-measures/Changelog.md +84 -8
  169. data/example_files/resources/hpxml-measures/Gemfile +3 -0
  170. data/example_files/resources/hpxml-measures/Gemfile.lock +3 -11
  171. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +387 -387
  172. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -251
  173. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +275 -59
  174. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +471 -247
  175. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXML.xsd +1 -1
  176. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +171 -79
  177. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +155 -78
  178. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +188 -141
  179. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +83 -0
  180. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +99 -11
  181. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +558 -342
  182. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +2 -0
  183. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +64 -72
  184. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +96 -93
  185. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +965 -350
  186. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +887 -216
  187. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +664 -760
  188. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +306 -287
  189. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +20 -29
  190. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +0 -20
  191. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_hvac_equipment_efficiency.csv +493 -0
  192. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_water_heater_efficiency.csv +157 -0
  193. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +156 -108
  194. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +41 -3
  195. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +14 -2
  196. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +18 -18
  197. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +14 -7
  198. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/smooth.csv +8761 -0
  199. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic-vacancy.csv +8761 -0
  200. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic.csv +8761 -0
  201. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +431 -428
  202. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +21 -12
  203. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +3 -3
  204. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +245 -234
  205. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +10 -5
  206. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +19 -8
  207. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +44 -23
  208. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +241 -0
  209. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1374 -297
  210. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +702 -55
  211. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
  212. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
  213. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +238 -40
  214. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +2 -2
  215. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -2
  216. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +186 -0
  217. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +955 -176
  218. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +47 -61
  219. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +1 -1
  220. data/example_files/resources/hpxml-measures/LICENSE.md +1 -1
  221. data/example_files/resources/hpxml-measures/README.md +12 -9
  222. data/example_files/resources/hpxml-measures/Rakefile +1 -1
  223. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +448 -0
  224. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +81 -0
  225. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +71 -0
  226. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +232 -0
  227. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +1977 -0
  228. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/measure.xml +682 -31
  229. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/resources/constants.rb +20 -2
  230. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/tests/output_report_test.rb +83 -218
  231. data/example_files/resources/hpxml-measures/docs/source/index.rst +1 -2
  232. data/example_files/resources/hpxml-measures/docs/source/intro.rst +6 -3
  233. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +73 -0
  234. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +915 -494
  235. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +263 -111
  236. data/example_files/resources/hpxml-measures/tasks.rb +3830 -6981
  237. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +35 -0
  238. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC.epw +8768 -0
  239. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +25 -5
  240. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +102 -91
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +93 -83
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +93 -83
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +93 -83
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +93 -83
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +102 -91
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +103 -97
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +96 -85
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +102 -91
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +102 -91
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +102 -91
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +96 -125
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +119 -104
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +94 -89
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +93 -83
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +104 -95
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +104 -95
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-outside.xml +584 -0
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +99 -68
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +119 -79
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +99 -68
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +99 -68
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +99 -68
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +97 -66
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +97 -66
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +97 -66
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +100 -69
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +100 -69
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +94 -65
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +94 -65
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +94 -65
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +94 -65
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +97 -68
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +94 -65
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +94 -65
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +94 -65
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +97 -68
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +97 -68
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +98 -67
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +96 -64
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +105 -84
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +108 -77
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +100 -69
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +100 -69
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +98 -67
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +97 -66
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +97 -66
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +97 -66
  288. 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
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +124 -114
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +102 -95
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +102 -95
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +102 -95
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +104 -94
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +105 -96
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +102 -95
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +102 -95
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +102 -95
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +104 -95
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +102 -95
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +102 -95
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +102 -95
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +104 -97
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +102 -95
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +104 -95
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +104 -95
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +104 -95
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +102 -95
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +104 -95
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +108 -101
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +96 -85
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +104 -95
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +104 -95
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +104 -95
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +104 -95
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +104 -95
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +106 -97
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +106 -97
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +106 -97
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +106 -97
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +106 -97
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +106 -97
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +104 -95
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +105 -96
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +104 -95
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +574 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +105 -96
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +104 -95
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +104 -95
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +105 -97
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +106 -97
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +106 -97
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +104 -95
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +104 -95
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +104 -95
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +104 -95
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +104 -95
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +104 -95
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +104 -95
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +106 -97
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +106 -97
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +104 -95
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +104 -95
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +131 -119
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +120 -99
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +104 -95
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +104 -95
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +104 -95
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +104 -95
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +131 -118
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +104 -95
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +104 -95
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +104 -95
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +104 -95
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +104 -95
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +579 -0
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +110 -101
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +213 -95
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-id.xml → base-enclosure-skylights-physical-properties.xml} +123 -105
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +114 -105
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +112 -103
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +92 -82
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +533 -547
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +545 -559
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/generator-output-greater-than-consumption.xml → base-enclosure-thermal-mass.xml} +117 -111
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +239 -109
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +88 -79
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +584 -0
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +115 -106
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +89 -79
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +123 -110
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +119 -172
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +104 -95
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +107 -95
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +572 -0
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +119 -128
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +92 -82
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +117 -110
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +106 -91
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +107 -98
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +105 -97
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +108 -98
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +108 -98
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +115 -110
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +101 -94
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +103 -95
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +104 -94
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +104 -94
  388. 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
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +589 -0
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +104 -94
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +104 -94
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +105 -94
  393. 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
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +106 -93
  395. 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
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +106 -93
  397. 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
  398. 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
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +106 -93
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +102 -95
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +103 -94
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +101 -94
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +101 -94
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +101 -94
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +101 -94
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +108 -95
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +106 -93
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +106 -93
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +99 -92
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +103 -94
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +99 -92
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +102 -95
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +104 -95
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +104 -95
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +101 -94
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +103 -94
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +104 -94
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +105 -94
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +103 -93
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +106 -93
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +101 -94
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +104 -94
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +105 -94
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +103 -93
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +106 -93
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +541 -0
  427. 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
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/boiler-invalid-afue.xml → base-hvac-autosize-ptac.xml} +109 -113
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp.xml +531 -0
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +99 -92
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +99 -92
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +100 -93
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +104 -95
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +101 -94
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +102 -95
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +103 -94
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +101 -94
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +101 -94
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +101 -94
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +101 -94
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +101 -94
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +101 -94
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +101 -94
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +106 -96
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +104 -95
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +104 -94
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +104 -94
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +104 -94
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +104 -94
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +104 -94
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/unattached-solar-thermal-system.xml → base-hvac-ducts-area-fractions.xml} +596 -577
  452. 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
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +104 -95
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +99 -92
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +103 -94
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +101 -94
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +99 -92
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +99 -92
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +99 -92
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +99 -92
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +101 -94
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +104 -95
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +102 -95
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +104 -95
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +104 -95
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +101 -94
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +103 -94
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +101 -94
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +101 -94
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +101 -94
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +104 -95
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +101 -94
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +102 -94
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +103 -93
  475. 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
  476. 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
  477. 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
  478. 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
  479. 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
  480. 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
  481. 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
  482. 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
  483. 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
  484. 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
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +101 -94
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +99 -92
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +101 -94
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +103 -95
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +104 -94
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +542 -0
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +101 -92
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +124 -100
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +94 -89
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +99 -92
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +104 -95
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +104 -95
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/cfis-with-hydronic-distribution.xml → base-hvac-ptac-with-heating.xml} +530 -532
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-distribution-return-duct-leakage-missing.xml → base-hvac-ptac.xml} +515 -528
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +531 -0
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +99 -92
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +516 -0
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +99 -92
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +584 -0
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +104 -95
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +99 -92
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +99 -92
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +104 -95
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +104 -95
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +100 -93
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +110 -96
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +586 -0
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +95 -86
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +104 -95
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +108 -98
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-foundation-wall-properties.xml → base-location-capetown-zaf.xml} +134 -127
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +92 -82
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +105 -98
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +104 -95
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +92 -82
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +92 -82
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +92 -82
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +108 -98
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +106 -97
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +106 -97
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +107 -98
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +104 -97
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +107 -98
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +106 -97
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +106 -97
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +105 -96
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +106 -97
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +106 -97
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +106 -97
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +141 -114
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +106 -97
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +105 -96
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +101 -101
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +105 -96
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +157 -112
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +157 -112
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +96 -87
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +108 -99
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +104 -95
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +113 -102
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +318 -291
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +608 -0
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/enclosure-garage-missing-roof-ceiling.xml → base-pv-battery-garage.xml} +678 -626
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/multifamily-reference-surface.xml → base-pv-battery-outside-degrades.xml} +610 -575
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-outside.xml +608 -0
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +105 -96
  551. 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
  552. 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
  553. 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
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-lighting-detailed.xml → base-schedules-simple.xml} +625 -585
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +104 -95
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +104 -95
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +104 -95
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +104 -95
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +104 -95
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +104 -95
  561. data/example_files/resources/hpxml-measures/workflow/template-build-hpxml-and-stocastic-schedules.osw +129 -0
  562. data/example_files/resources/hpxml-measures/workflow/template-stochastic-schedules.osw +53 -0
  563. data/example_files/resources/hpxml-measures/workflow/template.osw +7 -2
  564. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +75 -44
  565. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +75 -44
  566. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +75 -44
  567. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +75 -44
  568. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +75 -44
  569. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +75 -44
  570. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +75 -44
  571. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +75 -44
  572. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +63 -32
  573. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +63 -32
  574. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +66 -35
  575. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +66 -35
  576. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +66 -35
  577. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +66 -35
  578. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +69 -38
  579. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +69 -38
  580. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +75 -44
  581. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +75 -44
  582. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +75 -44
  583. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +75 -44
  584. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +75 -44
  585. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +75 -44
  586. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +78 -47
  587. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +78 -47
  588. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +114 -103
  589. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +126 -103
  590. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +321 -294
  591. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +26 -26
  592. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +320 -293
  593. data/example_files/resources/hpxml-measures/workflow/tests/compare.py +351 -0
  594. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +253 -260
  595. data/example_files/visualization/input_visualization_feature.html +14 -5
  596. data/example_files/visualization/input_visualization_scenario.html +12 -6
  597. data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.ddy +17 -17
  598. data/lib/uo_cli/version.rb +1 -1
  599. data/lib/uo_cli.rb +66 -17
  600. data/uo_cli.gemspec +6 -6
  601. metadata +219 -639
  602. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -59
  603. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +0 -337
  604. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +0 -337
  605. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +0 -337
  606. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +0 -337
  607. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +0 -337
  608. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +0 -337
  609. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +0 -337
  610. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +0 -337
  611. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +0 -337
  612. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +0 -337
  613. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +0 -337
  614. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +0 -337
  615. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +0 -337
  616. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +0 -337
  617. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +0 -341
  618. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +0 -341
  619. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +0 -348
  620. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +0 -342
  621. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +0 -341
  622. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +0 -341
  623. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +0 -341
  624. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +0 -339
  625. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +0 -337
  626. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +0 -337
  627. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +0 -337
  628. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +0 -337
  629. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +0 -337
  630. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +0 -337
  631. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +0 -337
  632. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +0 -337
  633. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +0 -337
  634. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +0 -337
  635. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +0 -337
  636. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +0 -337
  637. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +0 -337
  638. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +0 -337
  639. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +0 -337
  640. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +0 -337
  641. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +0 -337
  642. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +0 -337
  643. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +0 -337
  644. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +0 -337
  645. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +0 -337
  646. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +0 -337
  647. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +0 -337
  648. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +0 -337
  649. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +0 -337
  650. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +0 -338
  651. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +0 -337
  652. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +0 -338
  653. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +0 -337
  654. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +0 -337
  655. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +0 -338
  656. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +0 -337
  657. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +0 -337
  658. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +0 -337
  659. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +0 -337
  660. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +0 -337
  661. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +0 -337
  662. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +0 -337
  663. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +0 -337
  664. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +0 -337
  665. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +0 -337
  666. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +0 -337
  667. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +0 -337
  668. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +0 -337
  669. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +0 -337
  670. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +0 -337
  671. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +0 -337
  672. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +0 -337
  673. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +0 -337
  674. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +0 -337
  675. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +0 -337
  676. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +0 -337
  677. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +0 -337
  678. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +0 -337
  679. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +0 -337
  680. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +0 -337
  681. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +0 -337
  682. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +0 -337
  683. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +0 -337
  684. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +0 -337
  685. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +0 -337
  686. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +0 -338
  687. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +0 -337
  688. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +0 -337
  689. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +0 -337
  690. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +0 -337
  691. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +0 -337
  692. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +0 -337
  693. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +0 -337
  694. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +0 -337
  695. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +0 -337
  696. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +0 -337
  697. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +0 -337
  698. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +0 -337
  699. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +0 -337
  700. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +0 -337
  701. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +0 -337
  702. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +0 -337
  703. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +0 -337
  704. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +0 -337
  705. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +0 -337
  706. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +0 -337
  707. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +0 -338
  708. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +0 -338
  709. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +0 -338
  710. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +0 -338
  711. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +0 -338
  712. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +0 -337
  713. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +0 -337
  714. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +0 -335
  715. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +0 -335
  716. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +0 -335
  717. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +0 -337
  718. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +0 -337
  719. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +0 -337
  720. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +0 -337
  721. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +0 -337
  722. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +0 -337
  723. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +0 -337
  724. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +0 -337
  725. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +0 -337
  726. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +0 -336
  727. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +0 -337
  728. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +0 -337
  729. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +0 -337
  730. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +0 -336
  731. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +0 -336
  732. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +0 -336
  733. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +0 -339
  734. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +0 -339
  735. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +0 -339
  736. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +0 -339
  737. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +0 -340
  738. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +0 -340
  739. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +0 -340
  740. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +0 -338
  741. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +0 -338
  742. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +0 -338
  743. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +0 -339
  744. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +0 -338
  745. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +0 -340
  746. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +0 -336
  747. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +0 -336
  748. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +0 -337
  749. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +0 -337
  750. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +0 -337
  751. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +0 -337
  752. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +0 -337
  753. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +0 -337
  754. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +0 -337
  755. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +0 -336
  756. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +0 -336
  757. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +0 -337
  758. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +0 -337
  759. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +0 -337
  760. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +0 -337
  761. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +0 -337
  762. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +0 -337
  763. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +0 -337
  764. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +0 -337
  765. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +0 -337
  766. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +0 -337
  767. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +0 -337
  768. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +0 -337
  769. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +0 -337
  770. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +0 -337
  771. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +0 -337
  772. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +0 -337
  773. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +0 -337
  774. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +0 -345
  775. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +0 -335
  776. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +0 -337
  777. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +0 -337
  778. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +0 -337
  779. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +0 -337
  780. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +0 -337
  781. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +0 -337
  782. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +0 -337
  783. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +0 -337
  784. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +0 -337
  785. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +0 -324
  786. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +0 -337
  787. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +0 -337
  788. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +0 -337
  789. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +0 -337
  790. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +0 -337
  791. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +0 -337
  792. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +0 -341
  793. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +0 -337
  794. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +0 -338
  795. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +0 -338
  796. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +0 -342
  797. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +0 -338
  798. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +0 -341
  799. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +0 -337
  800. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +0 -337
  801. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +0 -337
  802. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +0 -341
  803. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +0 -341
  804. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +0 -341
  805. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +0 -341
  806. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +0 -341
  807. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +0 -341
  808. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +0 -341
  809. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +0 -341
  810. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +0 -341
  811. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +0 -341
  812. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +0 -341
  813. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +0 -341
  814. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +0 -341
  815. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +0 -341
  816. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +0 -341
  817. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +0 -341
  818. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +0 -341
  819. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +0 -341
  820. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +0 -341
  821. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +0 -341
  822. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +0 -341
  823. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +0 -341
  824. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +0 -341
  825. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +0 -341
  826. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +0 -341
  827. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  828. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +0 -341
  829. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  830. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +0 -341
  831. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  832. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +0 -341
  833. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  834. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +0 -341
  835. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  836. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +0 -341
  837. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  838. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +0 -341
  839. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  840. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +0 -341
  841. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  842. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +0 -341
  843. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  844. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +0 -341
  845. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +0 -341
  846. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +0 -341
  847. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  848. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +0 -341
  849. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  850. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +0 -341
  851. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  852. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +0 -341
  853. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  854. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +0 -341
  855. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  856. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +0 -341
  857. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  858. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +0 -341
  859. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  860. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +0 -341
  861. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  862. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +0 -341
  863. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  864. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +0 -341
  865. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +0 -341
  866. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +0 -339
  867. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +0 -339
  868. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +0 -339
  869. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +0 -339
  870. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +0 -339
  871. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +0 -339
  872. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +0 -339
  873. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +0 -339
  874. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +0 -339
  875. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +0 -339
  876. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +0 -339
  877. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +0 -339
  878. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +0 -339
  879. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +0 -339
  880. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +0 -339
  881. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +0 -339
  882. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +0 -339
  883. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +0 -339
  884. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +0 -337
  885. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +0 -337
  886. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +0 -337
  887. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +0 -337
  888. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +0 -337
  889. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +0 -339
  890. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +0 -337
  891. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +0 -337
  892. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +0 -337
  893. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +0 -338
  894. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +0 -336
  895. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +0 -337
  896. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +0 -337
  897. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +0 -337
  898. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +0 -337
  899. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +0 -337
  900. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +0 -337
  901. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +0 -337
  902. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +0 -337
  903. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +0 -337
  904. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +0 -337
  905. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +0 -337
  906. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +0 -337
  907. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +0 -337
  908. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +0 -337
  909. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +0 -337
  910. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +0 -337
  911. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +0 -337
  912. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +0 -337
  913. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +0 -337
  914. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +0 -341
  915. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +0 -341
  916. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +0 -338
  917. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +0 -337
  918. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +0 -337
  919. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +0 -337
  920. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +0 -337
  921. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +0 -337
  922. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +0 -337
  923. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +0 -337
  924. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +0 -337
  925. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +0 -337
  926. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +0 -337
  927. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +0 -337
  928. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +0 -339
  929. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +0 -337
  930. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +0 -337
  931. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +0 -337
  932. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +0 -337
  933. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +0 -337
  934. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +0 -337
  935. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +0 -337
  936. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  937. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +0 -337
  938. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  939. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +0 -337
  940. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/stochastic.csv +0 -8761
  941. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/user-specified.csv +0 -8761
  942. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +0 -8761
  943. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_1bed.csv +0 -369
  944. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_2bed.csv +0 -465
  945. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_3bed.csv +0 -611
  946. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_4bed.csv +0 -685
  947. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_5bed.csv +0 -767
  948. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_1bed.csv +0 -637
  949. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_2bed.csv +0 -744
  950. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_3bed.csv +0 -929
  951. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_4bed.csv +0 -1044
  952. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_5bed.csv +0 -1250
  953. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_1bed.csv +0 -754
  954. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_2bed.csv +0 -961
  955. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_3bed.csv +0 -1102
  956. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_4bed.csv +0 -1293
  957. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_5bed.csv +0 -1508
  958. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_1bed.csv +0 -13097
  959. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_2bed.csv +0 -15977
  960. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_3bed.csv +0 -18624
  961. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_4bed.csv +0 -22075
  962. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_5bed.csv +0 -25005
  963. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_max_flows.csv +0 -6
  964. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +0 -2444
  965. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +0 -110
  966. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +0 -57
  967. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +0 -564
  968. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +0 -564
  969. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +0 -564
  970. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +0 -563
  971. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +0 -563
  972. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +0 -563
  973. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +0 -535
  974. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +0 -535
  975. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -576
  976. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +0 -563
  977. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +0 -564
  978. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +0 -563
  979. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +0 -563
  980. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +0 -563
  981. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +0 -563
  982. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +0 -563
  983. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +0 -563
  984. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +0 -547
  985. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +0 -544
  986. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +0 -547
  987. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +0 -563
  988. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +0 -448
  989. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +0 -614
  990. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +0 -611
  991. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +0 -551
  992. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +0 -473
  993. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +0 -489
  994. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +0 -760
  995. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +0 -759
  996. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +0 -761
  997. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +0 -759
  998. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +0 -563
  999. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +0 -460
  1000. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +0 -560
  1001. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +0 -921
  1002. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +0 -921
  1003. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -547
  1004. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -547
  1005. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +0 -921
  1006. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +0 -569
  1007. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +0 -407
  1008. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +0 -563
  1009. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +0 -563
  1010. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +0 -563
  1011. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +0 -563
  1012. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +0 -570
  1013. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +0 -563
  1014. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +0 -563
  1015. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +0 -466
  1016. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +0 -591
  1017. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +0 -563
  1018. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +0 -565
  1019. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +0 -576
  1020. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +0 -465
  1021. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +0 -563
  1022. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +0 -451
  1023. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +0 -551
  1024. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +0 -565
  1025. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +0 -563
  1026. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +0 -473
  1027. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +0 -563
  1028. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +0 -583
  1029. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +0 -563
  1030. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +0 -917
  1031. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +0 -561
  1032. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +0 -563
  1033. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +0 -563
  1034. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +0 -563
  1035. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +0 -1657
  1036. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +0 -1657
  1037. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +0 -432
  1038. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +0 -434
  1039. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +0 -591
  1040. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +0 -563
  1041. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +0 -563
  1042. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +0 -547
  1043. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +0 -563
  1044. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +0 -569
  1045. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +0 -569
  1046. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +0 -564
  1047. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -527
  1048. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +0 -571
  1049. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -532
  1050. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +0 -566
  1051. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -532
  1052. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +0 -576
  1053. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +0 -563
  1054. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +0 -563
  1055. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +0 -466
  1056. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +0 -466
  1057. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +0 -591
  1058. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +0 -563
  1059. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +0 -563
  1060. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +0 -563
  1061. 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