urbanopt-cli 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1045) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/CMakeLists.txt +7 -7
  4. data/FindOpenStudioSDK.cmake +6 -6
  5. data/example_files/mappers/Baseline.rb +27 -27
  6. data/example_files/mappers/CreateBar.rb +7 -0
  7. data/example_files/mappers/HighEfficiency.rb +5 -4
  8. data/example_files/measures/BuildResidentialModel/measure.rb +109 -76
  9. data/example_files/residential/enclosure.tsv +102 -102
  10. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +22 -16
  11. data/example_files/resources/hpxml-measures/.gitignore +3 -7
  12. data/example_files/resources/hpxml-measures/.rubocop.yml +67 -8
  13. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1752 -1455
  14. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +3229 -5431
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +386 -553
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +1075 -363
  17. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +212 -0
  18. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +898 -0
  19. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules.rb +109 -188
  20. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_README.md +0 -0
  21. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_dryer_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_dryer_consumption_dist.csv} +0 -0
  22. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_dryer_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_dryer_duration_dist.csv} +0 -0
  23. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_washer_consumption_dist.csv} +0 -0
  24. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_washer_duration_dist.csv} +0 -0
  25. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.json +2 -2
  26. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.md +0 -0
  27. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_consumption_dist.csv} +0 -0
  28. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_duration_dist.csv} +0 -0
  29. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_consumption_dist.csv} +0 -0
  30. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_duration_dist.csv} +0 -0
  31. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_cluster_size_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_clothes_washer_cluster_size_probability.csv} +0 -0
  32. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_event_duration_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_clothes_washer_event_duration_probability.csv} +0 -0
  33. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_cluster_size_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_dishwasher_cluster_size_probability.csv} +0 -0
  34. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_event_duration_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_dishwasher_event_duration_probability.csv} +0 -0
  35. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_cluster_size_probability.csv +0 -0
  36. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_event_duration_probability.csv +0 -0
  37. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  38. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  39. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  40. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  41. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  42. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  43. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  44. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  45. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  46. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  47. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  48. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  49. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  50. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  51. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  52. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  53. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  54. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  55. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  56. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  57. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  58. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  59. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  60. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  61. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  62. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  63. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  64. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  65. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  66. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  67. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  68. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  69. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  70. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  71. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  72. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  73. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  74. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  75. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  76. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  77. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  78. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  79. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  80. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  81. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  82. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  83. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  84. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  85. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_0.csv +0 -0
  86. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_1.csv +0 -0
  87. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_2.csv +0 -0
  88. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_3.csv +0 -0
  89. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_0.csv +0 -0
  90. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_1.csv +0 -0
  91. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_2.csv +0 -0
  92. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_3.csv +0 -0
  93. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +0 -0
  94. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
  95. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
  96. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
  97. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
  98. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
  99. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
  100. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
  101. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
  102. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
  103. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
  104. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
  105. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
  106. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
  107. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
  108. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
  109. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
  110. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
  111. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
  112. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
  113. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
  114. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
  115. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
  116. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
  117. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
  118. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
  119. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
  120. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
  121. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
  122. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
  123. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
  124. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
  125. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
  126. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
  127. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
  128. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
  129. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
  130. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
  131. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
  132. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
  133. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
  134. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
  135. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
  136. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
  137. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
  138. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
  139. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
  140. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
  141. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
  142. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_0.csv +0 -0
  143. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_1.csv +0 -0
  144. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_2.csv +0 -0
  145. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_3.csv +0 -0
  146. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_0.csv +0 -0
  147. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_1.csv +0 -0
  148. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_2.csv +0 -0
  149. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_3.csv +0 -0
  150. data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +0 -0
  151. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +526 -0
  152. data/example_files/resources/hpxml-measures/Changelog.md +84 -8
  153. data/example_files/resources/hpxml-measures/Gemfile +4 -1
  154. data/example_files/resources/hpxml-measures/Gemfile.lock +17 -6
  155. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +387 -387
  156. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -251
  157. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +275 -59
  158. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +471 -247
  159. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXML.xsd +1 -1
  160. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +171 -79
  161. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +155 -78
  162. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +188 -141
  163. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +83 -0
  164. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +99 -11
  165. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +558 -342
  166. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +2 -0
  167. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +64 -72
  168. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +96 -93
  169. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +965 -350
  170. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +887 -216
  171. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +664 -760
  172. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +306 -287
  173. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +20 -29
  174. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +0 -20
  175. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_hvac_equipment_efficiency.csv +493 -0
  176. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_water_heater_efficiency.csv +157 -0
  177. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +156 -108
  178. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +41 -3
  179. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +14 -2
  180. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +18 -18
  181. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +14 -7
  182. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/smooth.csv +8761 -0
  183. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic-vacancy.csv +8761 -0
  184. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic.csv +8761 -0
  185. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +431 -428
  186. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +21 -12
  187. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +3 -3
  188. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +245 -234
  189. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +10 -5
  190. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +19 -8
  191. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +44 -23
  192. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +241 -0
  193. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1374 -297
  194. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +702 -55
  195. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
  196. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
  197. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +238 -40
  198. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +2 -2
  199. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -2
  200. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +186 -0
  201. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +955 -176
  202. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +47 -61
  203. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +1 -1
  204. data/example_files/resources/hpxml-measures/LICENSE.md +1 -1
  205. data/example_files/resources/hpxml-measures/README.md +12 -9
  206. data/example_files/resources/hpxml-measures/Rakefile +1 -1
  207. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +448 -0
  208. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +81 -0
  209. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +71 -0
  210. data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +232 -0
  211. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +1977 -0
  212. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/measure.xml +682 -31
  213. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/resources/constants.rb +20 -2
  214. data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/tests/output_report_test.rb +83 -218
  215. data/example_files/resources/hpxml-measures/docs/source/index.rst +1 -2
  216. data/example_files/resources/hpxml-measures/docs/source/intro.rst +6 -3
  217. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +73 -0
  218. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +915 -494
  219. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +263 -111
  220. data/example_files/resources/hpxml-measures/tasks.rb +3830 -6981
  221. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +35 -0
  222. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC.epw +8768 -0
  223. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +25 -5
  224. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +102 -91
  225. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +93 -83
  226. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +93 -83
  227. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +93 -83
  228. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +93 -83
  229. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +102 -91
  230. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +103 -97
  231. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +96 -85
  232. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +102 -91
  233. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +102 -91
  234. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +102 -91
  235. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +96 -125
  236. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +119 -104
  237. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +94 -89
  238. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +93 -83
  239. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +104 -95
  240. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +104 -95
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-outside.xml +584 -0
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +99 -68
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +119 -79
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +99 -68
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +99 -68
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +99 -68
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +97 -66
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +97 -66
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +97 -66
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +100 -69
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +100 -69
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +94 -65
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +94 -65
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +94 -65
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +94 -65
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +97 -68
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +94 -65
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +94 -65
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +94 -65
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +97 -68
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +97 -68
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +98 -67
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +96 -64
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +105 -84
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +108 -77
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +100 -69
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +100 -69
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +98 -67
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +97 -66
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +97 -66
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +97 -66
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-facility-type-surfaces.xml → base-bldgtype-single-family-attached-2stories.xml} +152 -167
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +124 -114
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +102 -95
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +102 -95
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +102 -95
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +104 -94
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +105 -96
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +102 -95
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +102 -95
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +102 -95
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +104 -95
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +102 -95
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +102 -95
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +102 -95
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +104 -97
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +102 -95
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +104 -95
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +104 -95
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +104 -95
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +102 -95
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +104 -95
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +108 -101
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +96 -85
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +104 -95
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +104 -95
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +104 -95
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +104 -95
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +104 -95
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +106 -97
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +106 -97
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +106 -97
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +106 -97
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +106 -97
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +106 -97
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +104 -95
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +105 -96
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +104 -95
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +574 -0
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +105 -96
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +104 -95
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +104 -95
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +105 -97
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +106 -97
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +106 -97
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +104 -95
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +104 -95
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +104 -95
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +104 -95
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +104 -95
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +104 -95
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +104 -95
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +106 -97
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +106 -97
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +104 -95
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +104 -95
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +131 -119
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +120 -99
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +104 -95
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +104 -95
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +104 -95
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +104 -95
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +131 -118
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +104 -95
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +104 -95
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +104 -95
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +104 -95
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +104 -95
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +579 -0
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +110 -101
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +213 -95
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-id.xml → base-enclosure-skylights-physical-properties.xml} +123 -105
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +114 -105
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +112 -103
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +92 -82
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +533 -547
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +545 -559
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/generator-output-greater-than-consumption.xml → base-enclosure-thermal-mass.xml} +117 -111
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +239 -109
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +88 -79
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +584 -0
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +115 -106
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +89 -79
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +123 -110
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +119 -172
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +104 -95
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +107 -95
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +572 -0
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +119 -128
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +92 -82
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +117 -110
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +106 -91
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +107 -98
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +105 -97
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +108 -98
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +108 -98
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +115 -110
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +101 -94
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +103 -95
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +104 -94
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +104 -94
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +590 -0
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +589 -0
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +104 -94
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +104 -94
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +105 -94
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +103 -93
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +106 -93
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml +103 -93
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +106 -93
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-invalid-distribution-system-type.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml} +587 -570
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml +103 -93
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +106 -93
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +102 -95
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +103 -94
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +101 -94
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +101 -94
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +101 -94
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +101 -94
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +108 -95
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +106 -93
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +106 -93
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +99 -92
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +103 -94
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +99 -92
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +102 -95
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +104 -95
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +104 -95
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +101 -94
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +103 -94
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +104 -94
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +105 -94
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +103 -93
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +106 -93
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +101 -94
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +104 -94
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +105 -94
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +103 -93
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +106 -93
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +541 -0
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-relatedhvac-dhw-indirect.xml → base-hvac-autosize-ptac-with-heating.xml} +528 -517
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/boiler-invalid-afue.xml → base-hvac-autosize-ptac.xml} +109 -113
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp.xml +531 -0
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +99 -92
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +99 -92
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +100 -93
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +104 -95
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +101 -94
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +102 -95
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +103 -94
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +101 -94
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +101 -94
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +101 -94
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +101 -94
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +101 -94
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +101 -94
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +101 -94
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +106 -96
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +104 -95
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +104 -94
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +104 -94
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +104 -94
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +104 -94
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +104 -94
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/unattached-solar-thermal-system.xml → base-hvac-ducts-area-fractions.xml} +596 -577
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml → base-hvac-ducts-leakage-cfm50.xml} +108 -106
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +104 -95
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +99 -92
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +103 -94
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +101 -94
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +99 -92
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +99 -92
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +99 -92
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +99 -92
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +101 -94
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +104 -95
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +102 -95
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +104 -95
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +104 -95
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +101 -94
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +103 -94
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +101 -94
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +101 -94
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +101 -94
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +104 -95
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +101 -94
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +102 -94
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +103 -93
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml} +104 -94
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml} +104 -94
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml} +104 -94
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml} +104 -95
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml} +104 -95
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml} +104 -95
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-only.xml → base-hvac-install-quality-furnace-gas-only.xml} +101 -94
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-ground-to-air-heat-pump.xml → base-hvac-install-quality-ground-to-air-heat-pump.xml} +104 -94
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml → base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml} +101 -94
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml → base-hvac-install-quality-mini-split-heat-pump-ducted.xml} +104 -94
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +101 -94
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +99 -92
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +101 -94
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +103 -95
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +104 -94
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +542 -0
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +101 -92
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +124 -100
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +94 -89
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +99 -92
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +104 -95
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +104 -95
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/cfis-with-hydronic-distribution.xml → base-hvac-ptac-with-heating.xml} +530 -532
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-distribution-return-duct-leakage-missing.xml → base-hvac-ptac.xml} +515 -528
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +531 -0
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +99 -92
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +516 -0
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +99 -92
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +584 -0
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +104 -95
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +99 -92
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +99 -92
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +104 -95
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +104 -95
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +100 -93
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +110 -96
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +586 -0
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +95 -86
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +104 -95
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +108 -98
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-foundation-wall-properties.xml → base-location-capetown-zaf.xml} +134 -127
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +92 -82
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +105 -98
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +104 -95
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +92 -82
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +92 -82
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +92 -82
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +108 -98
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +106 -97
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +106 -97
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +107 -98
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +104 -97
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +107 -98
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +106 -97
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +106 -97
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +105 -96
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +106 -97
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +106 -97
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +106 -97
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +141 -114
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +106 -97
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +105 -96
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +101 -101
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +105 -96
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +157 -112
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +157 -112
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +96 -87
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +108 -99
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +104 -95
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +113 -102
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +318 -291
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +608 -0
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/enclosure-garage-missing-roof-ceiling.xml → base-pv-battery-garage.xml} +678 -626
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/multifamily-reference-surface.xml → base-pv-battery-outside-degrades.xml} +610 -575
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-outside.xml +608 -0
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +105 -96
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-smooth.xml} +105 -101
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-stochastic-vacancy.xml} +105 -98
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-stochastic.xml} +105 -101
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-lighting-detailed.xml → base-schedules-simple.xml} +625 -585
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +104 -95
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +104 -95
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +104 -95
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +104 -95
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +104 -95
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +104 -95
  545. data/example_files/resources/hpxml-measures/workflow/template-build-hpxml-and-stocastic-schedules.osw +129 -0
  546. data/example_files/resources/hpxml-measures/workflow/template-stochastic-schedules.osw +53 -0
  547. data/example_files/resources/hpxml-measures/workflow/template.osw +7 -2
  548. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +75 -44
  549. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +75 -44
  550. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +75 -44
  551. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +75 -44
  552. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +75 -44
  553. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +75 -44
  554. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +75 -44
  555. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +75 -44
  556. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +63 -32
  557. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +63 -32
  558. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +66 -35
  559. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +66 -35
  560. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +66 -35
  561. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +66 -35
  562. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +69 -38
  563. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +69 -38
  564. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +75 -44
  565. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +75 -44
  566. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +75 -44
  567. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +75 -44
  568. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +75 -44
  569. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +75 -44
  570. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +78 -47
  571. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +78 -47
  572. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +114 -103
  573. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +126 -103
  574. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +321 -294
  575. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +26 -26
  576. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +320 -293
  577. data/example_files/resources/hpxml-measures/workflow/tests/compare.py +351 -0
  578. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +253 -260
  579. data/example_files/visualization/input_visualization_feature.html +12 -3
  580. data/example_files/visualization/input_visualization_scenario.html +10 -4
  581. data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.ddy +17 -17
  582. data/lib/uo_cli/version.rb +1 -1
  583. data/lib/uo_cli.rb +10 -3
  584. data/uo_cli.gemspec +6 -6
  585. metadata +217 -639
  586. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -59
  587. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +0 -337
  588. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +0 -337
  589. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +0 -337
  590. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +0 -337
  591. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +0 -337
  592. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +0 -337
  593. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +0 -337
  594. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +0 -337
  595. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +0 -337
  596. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +0 -337
  597. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +0 -337
  598. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +0 -337
  599. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +0 -337
  600. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +0 -337
  601. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +0 -341
  602. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +0 -341
  603. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +0 -348
  604. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +0 -342
  605. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +0 -341
  606. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +0 -341
  607. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +0 -341
  608. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +0 -339
  609. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +0 -337
  610. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +0 -337
  611. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +0 -337
  612. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +0 -337
  613. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +0 -337
  614. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +0 -337
  615. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +0 -337
  616. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +0 -337
  617. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +0 -337
  618. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +0 -337
  619. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +0 -337
  620. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +0 -337
  621. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +0 -337
  622. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +0 -337
  623. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +0 -337
  624. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +0 -337
  625. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +0 -337
  626. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +0 -337
  627. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +0 -337
  628. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +0 -337
  629. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +0 -337
  630. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +0 -337
  631. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +0 -337
  632. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +0 -337
  633. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +0 -337
  634. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +0 -338
  635. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +0 -337
  636. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +0 -338
  637. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +0 -337
  638. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +0 -337
  639. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +0 -338
  640. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +0 -337
  641. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +0 -337
  642. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +0 -337
  643. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +0 -337
  644. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +0 -337
  645. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +0 -337
  646. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +0 -337
  647. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +0 -337
  648. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +0 -337
  649. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +0 -337
  650. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +0 -337
  651. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +0 -337
  652. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +0 -337
  653. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +0 -337
  654. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +0 -337
  655. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +0 -337
  656. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +0 -337
  657. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +0 -337
  658. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +0 -337
  659. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +0 -337
  660. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +0 -337
  661. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +0 -337
  662. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +0 -337
  663. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +0 -337
  664. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +0 -337
  665. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +0 -337
  666. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +0 -337
  667. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +0 -337
  668. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +0 -337
  669. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +0 -337
  670. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +0 -338
  671. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +0 -337
  672. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +0 -337
  673. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +0 -337
  674. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +0 -337
  675. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +0 -337
  676. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +0 -337
  677. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +0 -337
  678. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +0 -337
  679. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +0 -337
  680. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +0 -337
  681. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +0 -337
  682. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +0 -337
  683. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +0 -337
  684. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +0 -337
  685. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +0 -337
  686. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +0 -337
  687. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +0 -337
  688. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +0 -337
  689. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +0 -337
  690. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +0 -337
  691. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +0 -338
  692. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +0 -338
  693. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +0 -338
  694. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +0 -338
  695. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +0 -338
  696. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +0 -337
  697. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +0 -337
  698. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +0 -335
  699. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +0 -335
  700. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +0 -335
  701. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +0 -337
  702. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +0 -337
  703. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +0 -337
  704. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +0 -337
  705. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +0 -337
  706. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +0 -337
  707. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +0 -337
  708. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +0 -337
  709. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +0 -337
  710. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +0 -336
  711. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +0 -337
  712. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +0 -337
  713. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +0 -337
  714. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +0 -336
  715. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +0 -336
  716. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +0 -336
  717. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +0 -339
  718. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +0 -339
  719. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +0 -339
  720. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +0 -339
  721. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +0 -340
  722. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +0 -340
  723. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +0 -340
  724. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +0 -338
  725. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +0 -338
  726. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +0 -338
  727. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +0 -339
  728. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +0 -338
  729. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +0 -340
  730. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +0 -336
  731. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +0 -336
  732. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +0 -337
  733. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +0 -337
  734. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +0 -337
  735. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +0 -337
  736. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +0 -337
  737. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +0 -337
  738. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +0 -337
  739. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +0 -336
  740. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +0 -336
  741. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +0 -337
  742. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +0 -337
  743. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +0 -337
  744. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +0 -337
  745. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +0 -337
  746. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +0 -337
  747. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +0 -337
  748. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +0 -337
  749. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +0 -337
  750. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +0 -337
  751. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +0 -337
  752. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +0 -337
  753. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +0 -337
  754. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +0 -337
  755. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +0 -337
  756. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +0 -337
  757. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +0 -337
  758. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +0 -345
  759. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +0 -335
  760. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +0 -337
  761. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +0 -337
  762. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +0 -337
  763. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +0 -337
  764. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +0 -337
  765. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +0 -337
  766. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +0 -337
  767. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +0 -337
  768. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +0 -337
  769. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +0 -324
  770. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +0 -337
  771. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +0 -337
  772. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +0 -337
  773. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +0 -337
  774. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +0 -337
  775. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +0 -337
  776. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +0 -341
  777. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +0 -337
  778. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +0 -338
  779. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +0 -338
  780. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +0 -342
  781. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +0 -338
  782. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +0 -341
  783. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +0 -337
  784. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +0 -337
  785. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +0 -337
  786. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +0 -341
  787. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +0 -341
  788. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +0 -341
  789. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +0 -341
  790. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +0 -341
  791. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +0 -341
  792. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +0 -341
  793. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +0 -341
  794. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +0 -341
  795. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +0 -341
  796. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +0 -341
  797. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +0 -341
  798. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +0 -341
  799. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +0 -341
  800. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +0 -341
  801. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +0 -341
  802. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +0 -341
  803. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +0 -341
  804. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +0 -341
  805. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +0 -341
  806. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +0 -341
  807. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +0 -341
  808. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +0 -341
  809. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +0 -341
  810. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +0 -341
  811. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  812. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +0 -341
  813. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  814. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +0 -341
  815. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  816. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +0 -341
  817. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  818. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +0 -341
  819. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  820. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +0 -341
  821. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  822. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +0 -341
  823. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  824. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +0 -341
  825. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  826. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +0 -341
  827. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  828. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +0 -341
  829. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +0 -341
  830. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +0 -341
  831. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
  832. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +0 -341
  833. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
  834. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +0 -341
  835. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +0 -341
  836. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +0 -341
  837. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
  838. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +0 -341
  839. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
  840. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +0 -341
  841. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
  842. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +0 -341
  843. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
  844. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +0 -341
  845. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
  846. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +0 -341
  847. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +0 -341
  848. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +0 -341
  849. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +0 -341
  850. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +0 -339
  851. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +0 -339
  852. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +0 -339
  853. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +0 -339
  854. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +0 -339
  855. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +0 -339
  856. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +0 -339
  857. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +0 -339
  858. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +0 -339
  859. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +0 -339
  860. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +0 -339
  861. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +0 -339
  862. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +0 -339
  863. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +0 -339
  864. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +0 -339
  865. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +0 -339
  866. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +0 -339
  867. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +0 -339
  868. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +0 -337
  869. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +0 -337
  870. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +0 -337
  871. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +0 -337
  872. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +0 -337
  873. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +0 -339
  874. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +0 -337
  875. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +0 -337
  876. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +0 -337
  877. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +0 -338
  878. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +0 -336
  879. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +0 -337
  880. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +0 -337
  881. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +0 -337
  882. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +0 -337
  883. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +0 -337
  884. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +0 -337
  885. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +0 -337
  886. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +0 -337
  887. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +0 -337
  888. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +0 -337
  889. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +0 -337
  890. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +0 -337
  891. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +0 -337
  892. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +0 -337
  893. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +0 -337
  894. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +0 -337
  895. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +0 -337
  896. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +0 -337
  897. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +0 -337
  898. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +0 -341
  899. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +0 -341
  900. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +0 -338
  901. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +0 -337
  902. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +0 -337
  903. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +0 -337
  904. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +0 -337
  905. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +0 -337
  906. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +0 -337
  907. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +0 -337
  908. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +0 -337
  909. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +0 -337
  910. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +0 -337
  911. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +0 -337
  912. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +0 -339
  913. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +0 -337
  914. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +0 -337
  915. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +0 -337
  916. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +0 -337
  917. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +0 -337
  918. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +0 -337
  919. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +0 -337
  920. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  921. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +0 -337
  922. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
  923. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +0 -337
  924. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/stochastic.csv +0 -8761
  925. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/user-specified.csv +0 -8761
  926. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +0 -8761
  927. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_1bed.csv +0 -369
  928. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_2bed.csv +0 -465
  929. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_3bed.csv +0 -611
  930. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_4bed.csv +0 -685
  931. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_5bed.csv +0 -767
  932. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_1bed.csv +0 -637
  933. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_2bed.csv +0 -744
  934. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_3bed.csv +0 -929
  935. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_4bed.csv +0 -1044
  936. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_5bed.csv +0 -1250
  937. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_1bed.csv +0 -754
  938. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_2bed.csv +0 -961
  939. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_3bed.csv +0 -1102
  940. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_4bed.csv +0 -1293
  941. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_5bed.csv +0 -1508
  942. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_1bed.csv +0 -13097
  943. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_2bed.csv +0 -15977
  944. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_3bed.csv +0 -18624
  945. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_4bed.csv +0 -22075
  946. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_5bed.csv +0 -25005
  947. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_max_flows.csv +0 -6
  948. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +0 -2444
  949. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +0 -110
  950. data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +0 -57
  951. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +0 -564
  952. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +0 -564
  953. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +0 -564
  954. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +0 -563
  955. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +0 -563
  956. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +0 -563
  957. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +0 -535
  958. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +0 -535
  959. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -576
  960. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +0 -563
  961. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +0 -564
  962. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +0 -563
  963. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +0 -563
  964. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +0 -563
  965. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +0 -563
  966. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +0 -563
  967. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +0 -563
  968. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +0 -547
  969. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +0 -544
  970. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +0 -547
  971. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +0 -563
  972. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +0 -448
  973. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +0 -614
  974. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +0 -611
  975. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +0 -551
  976. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +0 -473
  977. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +0 -489
  978. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +0 -760
  979. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +0 -759
  980. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +0 -761
  981. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +0 -759
  982. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +0 -563
  983. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +0 -460
  984. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +0 -560
  985. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +0 -921
  986. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +0 -921
  987. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -547
  988. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -547
  989. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +0 -921
  990. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +0 -569
  991. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +0 -407
  992. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +0 -563
  993. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +0 -563
  994. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +0 -563
  995. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +0 -563
  996. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +0 -570
  997. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +0 -563
  998. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +0 -563
  999. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +0 -466
  1000. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +0 -591
  1001. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +0 -563
  1002. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +0 -565
  1003. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +0 -576
  1004. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +0 -465
  1005. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +0 -563
  1006. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +0 -451
  1007. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +0 -551
  1008. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +0 -565
  1009. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +0 -563
  1010. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +0 -473
  1011. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +0 -563
  1012. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +0 -583
  1013. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +0 -563
  1014. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +0 -917
  1015. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +0 -561
  1016. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +0 -563
  1017. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +0 -563
  1018. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +0 -563
  1019. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +0 -1657
  1020. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +0 -1657
  1021. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +0 -432
  1022. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +0 -434
  1023. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +0 -591
  1024. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +0 -563
  1025. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +0 -563
  1026. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +0 -547
  1027. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +0 -563
  1028. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +0 -569
  1029. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +0 -569
  1030. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +0 -564
  1031. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -527
  1032. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +0 -571
  1033. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -532
  1034. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +0 -566
  1035. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -532
  1036. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +0 -576
  1037. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +0 -563
  1038. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +0 -563
  1039. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +0 -466
  1040. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +0 -466
  1041. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +0 -591
  1042. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +0 -563
  1043. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +0 -563
  1044. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +0 -563
  1045. data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +0 -130
@@ -3,11 +3,11 @@
3
3
  class Constructions
4
4
  # Container class for walls, floors/ceilings, roofs, etc.
5
5
 
6
- def self.apply_wood_stud_wall(runner, model, surfaces, wall, constr_name,
6
+ def self.apply_wood_stud_wall(runner, model, surfaces, constr_name,
7
7
  cavity_r, install_grade, cavity_depth_in, cavity_filled,
8
- framing_factor, drywall_thick_in, osb_thick_in,
9
- rigid_r, mat_ext_finish, otherside_drywall_thick_in,
10
- inside_film, outside_film)
8
+ framing_factor, mat_int_finish, osb_thick_in,
9
+ rigid_r, mat_ext_finish, inside_film, outside_film,
10
+ solar_absorptance = nil, emittance = nil)
11
11
 
12
12
  return if surfaces.empty?
13
13
 
@@ -15,25 +15,25 @@ class Constructions
15
15
  if cavity_r > 0
16
16
  if cavity_filled
17
17
  # Insulation
18
- mat_cavity = Material.new(name = nil, thick_in = cavity_depth_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth_in / cavity_r)
18
+ mat_cavity = Material.new(thick_in: cavity_depth_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth_in / cavity_r)
19
19
  else
20
20
  # Insulation plus air gap when insulation thickness < cavity depth
21
- mat_cavity = Material.new(name = nil, thick_in = cavity_depth_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth_in / (cavity_r + Gas.AirGapRvalue))
21
+ mat_cavity = Material.new(thick_in: cavity_depth_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth_in / (cavity_r + Gas.AirGapRvalue))
22
22
  end
23
23
  else
24
24
  # Empty cavity
25
25
  mat_cavity = Material.AirCavityClosed(cavity_depth_in)
26
26
  end
27
- mat_framing = Material.new(name = nil, thick_in = cavity_depth_in, mat_base = BaseMaterial.Wood)
27
+ mat_framing = Material.new(thick_in: cavity_depth_in, mat_base: BaseMaterial.Wood)
28
28
  mat_gap = Material.AirCavityClosed(cavity_depth_in)
29
29
  mat_osb = nil
30
30
  if osb_thick_in > 0
31
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
31
+ mat_osb = Material.OSBSheathing(osb_thick_in)
32
32
  end
33
33
  mat_rigid = nil
34
34
  if rigid_r > 0
35
35
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
36
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
36
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
37
37
  end
38
38
 
39
39
  # Set paths
@@ -46,58 +46,60 @@ class Constructions
46
46
  if not mat_ext_finish.nil?
47
47
  constr.add_layer(mat_ext_finish)
48
48
  end
49
- if otherside_drywall_thick_in > 0 # E.g., interior partition wall
50
- constr.add_layer(Material.GypsumWall(otherside_drywall_thick_in))
51
- end
52
49
  if not mat_rigid.nil?
53
50
  constr.add_layer(mat_rigid)
54
51
  end
55
52
  if not mat_osb.nil?
56
53
  constr.add_layer(mat_osb)
57
54
  end
58
- constr.add_layer([mat_framing, mat_cavity, mat_gap], 'WallStudAndCavity')
59
- if drywall_thick_in > 0
60
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
55
+ constr.add_layer([mat_framing, mat_cavity, mat_gap], 'wall stud and cavity')
56
+ if not mat_int_finish.nil?
57
+ constr.add_layer(mat_int_finish)
61
58
  end
62
59
  constr.add_layer(inside_film)
63
60
 
61
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
62
+ constr.set_interior_material_properties()
63
+
64
64
  # Create and assign construction to surfaces
65
65
  constr.create_and_assign_constructions(runner, surfaces, model)
66
66
  end
67
67
 
68
- def self.apply_double_stud_wall(runner, model, surfaces, wall, constr_name,
68
+ def self.apply_double_stud_wall(runner, model, surfaces, constr_name,
69
69
  cavity_r, install_grade, stud_depth_in, gap_depth_in,
70
70
  framing_factor, framing_spacing, is_staggered,
71
- drywall_thick_in, osb_thick_in, rigid_r,
72
- mat_ext_finish, inside_film, outside_film)
71
+ mat_int_finish, osb_thick_in, rigid_r,
72
+ mat_ext_finish, inside_film, outside_film,
73
+ solar_absorptance = nil, emittance = nil)
73
74
 
74
75
  return if surfaces.empty?
75
76
 
76
77
  # Define materials
77
78
  cavity_depth_in = 2.0 * stud_depth_in + gap_depth_in
78
- mat_ins_inner_outer = Material.new(name = nil, thick_in = stud_depth_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth_in / cavity_r)
79
- mat_ins_middle = Material.new(name = nil, thick_in = gap_depth_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth_in / cavity_r)
80
- mat_framing_inner_outer = Material.new(name = nil, thick_in = stud_depth_in, mat_base = BaseMaterial.Wood)
81
- mat_framing_middle = Material.new(name = nil, thick_in = gap_depth_in, mat_base = BaseMaterial.Wood)
82
- mat_stud = Material.new(name = nil, thick_in = stud_depth_in, mat_base = BaseMaterial.Wood)
79
+ mat_ins_inner_outer = Material.new(thick_in: stud_depth_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth_in / cavity_r)
80
+ mat_ins_middle = Material.new(thick_in: gap_depth_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth_in / cavity_r)
81
+ mat_framing_inner_outer = Material.new(thick_in: stud_depth_in, mat_base: BaseMaterial.Wood)
82
+ mat_framing_middle = Material.new(thick_in: gap_depth_in, mat_base: BaseMaterial.Wood)
83
+ mat_stud = Material.new(thick_in: stud_depth_in, mat_base: BaseMaterial.Wood)
83
84
  mat_gap_total = Material.AirCavityClosed(cavity_depth_in)
84
- mat_gap_inner_outer = Material.new(name = nil, thick_in = stud_depth_in, mat_base = nil, k_in = stud_depth_in / (mat_gap_total.rvalue * stud_depth_in / cavity_depth_in), rho = Gas.Air.rho, cp = Gas.Air.cp)
85
- mat_gap_middle = Material.new(name = nil, thick_in = gap_depth_in, mat_base = nil, k_in = gap_depth_in / (mat_gap_total.rvalue * gap_depth_in / cavity_depth_in), rho = Gas.Air.rho, cp = Gas.Air.cp)
85
+ mat_gap_inner_outer = Material.new(thick_in: stud_depth_in, k_in: stud_depth_in / (mat_gap_total.rvalue * stud_depth_in / cavity_depth_in), rho: Gas.Air.rho, cp: Gas.Air.cp)
86
+ mat_gap_middle = Material.new(thick_in: gap_depth_in, k_in: gap_depth_in / (mat_gap_total.rvalue * gap_depth_in / cavity_depth_in), rho: Gas.Air.rho, cp: Gas.Air.cp)
86
87
  mat_osb = nil
87
88
  if osb_thick_in > 0
88
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
89
+ mat_osb = Material.OSBSheathing(osb_thick_in)
89
90
  end
90
91
  mat_rigid = nil
91
92
  if rigid_r > 0
92
93
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
93
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
94
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
94
95
  end
95
96
 
96
97
  # Set paths
97
98
  stud_frac = 1.5 / framing_spacing
98
99
  misc_framing_factor = framing_factor - stud_frac
99
100
  if misc_framing_factor < 0
100
- fail "Framing Factor (#{framing_factor}) is less than the framing solely provided by the studs (#{stud_frac})."
101
+ stud_frac = framing_factor
102
+ misc_framing_factor = 0.0
101
103
  end
102
104
 
103
105
  dsGapFactor = get_gap_factor(install_grade, framing_factor, cavity_r)
@@ -116,52 +118,56 @@ class Constructions
116
118
  constr.add_layer(mat_osb)
117
119
  end
118
120
  if is_staggered
119
- constr.add_layer([mat_framing_inner_outer, mat_ins_inner_outer, mat_stud, mat_gap_inner_outer, mat_ins_inner_outer], 'WallStudandCavityOuter')
121
+ constr.add_layer([mat_framing_inner_outer, mat_ins_inner_outer, mat_stud, mat_gap_inner_outer, mat_ins_inner_outer], 'wall stud and cavity')
120
122
  else
121
- constr.add_layer([mat_framing_inner_outer, mat_stud, mat_ins_inner_outer, mat_gap_inner_outer, mat_ins_inner_outer], 'WallStudandCavityOuter')
123
+ constr.add_layer([mat_framing_inner_outer, mat_stud, mat_ins_inner_outer, mat_gap_inner_outer, mat_ins_inner_outer], 'wall stud and cavity')
122
124
  end
123
125
  if gap_depth_in > 0
124
- constr.add_layer([mat_framing_middle, mat_ins_middle, mat_ins_middle, mat_gap_middle, mat_ins_middle], 'WallCavity')
126
+ constr.add_layer([mat_framing_middle, mat_ins_middle, mat_ins_middle, mat_gap_middle, mat_ins_middle], 'wall cavity')
125
127
  end
126
- constr.add_layer([mat_framing_inner_outer, mat_stud, mat_ins_inner_outer, mat_gap_inner_outer, mat_ins_inner_outer], 'WallStudandCavityInner')
127
- if drywall_thick_in > 0
128
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
128
+ constr.add_layer([mat_framing_inner_outer, mat_stud, mat_ins_inner_outer, mat_gap_inner_outer, mat_ins_inner_outer], 'wall stud and cavity')
129
+ if not mat_int_finish.nil?
130
+ constr.add_layer(mat_int_finish)
129
131
  end
130
132
  constr.add_layer(inside_film)
131
133
 
134
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
135
+ constr.set_interior_material_properties()
136
+
132
137
  # Create and assign construction to surfaces
133
138
  constr.create_and_assign_constructions(runner, surfaces, model)
134
139
  end
135
140
 
136
- def self.apply_cmu_wall(runner, model, surfaces, wall, constr_name,
141
+ def self.apply_cmu_wall(runner, model, surfaces, constr_name,
137
142
  thick_in, conductivity, density, framing_factor,
138
143
  furring_r, furring_cavity_depth, furring_spacing,
139
- drywall_thick_in, osb_thick_in, rigid_r,
140
- mat_ext_finish, inside_film, outside_film)
144
+ mat_int_finish, osb_thick_in, rigid_r,
145
+ mat_ext_finish, inside_film, outside_film,
146
+ solar_absorptance = nil, emittance = nil)
141
147
 
142
148
  return if surfaces.empty?
143
149
 
144
150
  # Define materials
145
- mat_cmu = Material.new(name = nil, thick_in = thick_in, mat_base = BaseMaterial.Concrete, k_in = conductivity, rho = density)
146
- mat_framing = Material.new(name = nil, thick_in = thick_in, mat_base = BaseMaterial.Wood)
151
+ mat_cmu = Material.new(thick_in: thick_in, mat_base: BaseMaterial.Concrete, k_in: conductivity, rho: density)
152
+ mat_framing = Material.new(thick_in: thick_in, mat_base: BaseMaterial.Wood)
147
153
  mat_furring = nil
148
154
  mat_furring_cavity = nil
149
155
  if furring_cavity_depth != 0
150
- mat_furring = Material.new(name = nil, thick_in = furring_cavity_depth, mat_base = BaseMaterial.Wood)
156
+ mat_furring = Material.new(thick_in: furring_cavity_depth, mat_base: BaseMaterial.Wood)
151
157
  if furring_r == 0
152
158
  mat_furring_cavity = Material.AirCavityClosed(furring_cavity_depth)
153
159
  else
154
- mat_furring_cavity = Material.new(name = nil, thick_in = furring_cavity_depth, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = furring_cavity_depth / furring_r)
160
+ mat_furring_cavity = Material.new(thick_in: furring_cavity_depth, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: furring_cavity_depth / furring_r)
155
161
  end
156
162
  end
157
163
  mat_osb = nil
158
164
  if osb_thick_in > 0
159
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
165
+ mat_osb = Material.OSBSheathing(osb_thick_in)
160
166
  end
161
167
  mat_rigid = nil
162
168
  if rigid_r > 0
163
169
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
164
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
170
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
165
171
  end
166
172
 
167
173
  # Set paths
@@ -186,40 +192,44 @@ class Constructions
186
192
  constr.add_layer(mat_osb)
187
193
  end
188
194
  if not mat_furring.nil?
189
- constr.add_layer([mat_framing, mat_cmu, mat_cmu], 'WallCMU')
190
- constr.add_layer([mat_furring, mat_furring, mat_furring_cavity], 'WallFurring')
195
+ constr.add_layer([mat_framing, mat_cmu, mat_cmu], 'concrete block')
196
+ constr.add_layer([mat_furring, mat_furring, mat_furring_cavity], 'furring')
191
197
  else
192
- constr.add_layer([mat_framing, mat_cmu], 'WallCMU')
198
+ constr.add_layer([mat_framing, mat_cmu], 'concrete block')
193
199
  end
194
- if drywall_thick_in > 0
195
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
200
+ if not mat_int_finish.nil?
201
+ constr.add_layer(mat_int_finish)
196
202
  end
197
203
  constr.add_layer(inside_film)
198
204
 
205
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
206
+ constr.set_interior_material_properties()
207
+
199
208
  # Create and assign construction to surfaces
200
209
  constr.create_and_assign_constructions(runner, surfaces, model)
201
210
  end
202
211
 
203
- def self.apply_icf_wall(runner, model, surfaces, wall, constr_name,
212
+ def self.apply_icf_wall(runner, model, surfaces, constr_name,
204
213
  icf_r, ins_thick_in, concrete_thick_in, framing_factor,
205
- drywall_thick_in, osb_thick_in, rigid_r,
206
- mat_ext_finish, inside_film, outside_film)
214
+ mat_int_finish, osb_thick_in, rigid_r,
215
+ mat_ext_finish, inside_film, outside_film,
216
+ solar_absorptance = nil, emittance = nil)
207
217
 
208
218
  return if surfaces.empty?
209
219
 
210
220
  # Define materials
211
- mat_ins = Material.new(name = nil, thick_in = ins_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = ins_thick_in / icf_r)
212
- mat_conc = Material.new(name = nil, thick_in = concrete_thick_in, mat_base = BaseMaterial.Concrete)
213
- mat_framing_inner_outer = Material.new(name = nil, thick_in = ins_thick_in, mat_base = BaseMaterial.Wood)
214
- mat_framing_middle = Material.new(name = nil, thick_in = concrete_thick_in, mat_base = BaseMaterial.Wood)
221
+ mat_ins = Material.new(thick_in: ins_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: ins_thick_in / icf_r)
222
+ mat_conc = Material.new(thick_in: concrete_thick_in, mat_base: BaseMaterial.Concrete)
223
+ mat_framing_inner_outer = Material.new(thick_in: ins_thick_in, mat_base: BaseMaterial.Wood)
224
+ mat_framing_middle = Material.new(thick_in: concrete_thick_in, mat_base: BaseMaterial.Wood)
215
225
  mat_osb = nil
216
226
  if osb_thick_in > 0
217
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
227
+ mat_osb = Material.OSBSheathing(osb_thick_in)
218
228
  end
219
229
  mat_rigid = nil
220
230
  if rigid_r > 0
221
231
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
222
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
232
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
223
233
  end
224
234
 
225
235
  # Set paths
@@ -237,42 +247,46 @@ class Constructions
237
247
  if not mat_osb.nil?
238
248
  constr.add_layer(mat_osb)
239
249
  end
240
- constr.add_layer([mat_framing_inner_outer, mat_ins], 'WallICFInsFormOuter')
241
- constr.add_layer([mat_framing_middle, mat_conc], 'WallICFConcrete')
242
- constr.add_layer([mat_framing_inner_outer, mat_ins], 'WallICFInsFormInner')
243
- if drywall_thick_in > 0
244
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
250
+ constr.add_layer([mat_framing_inner_outer, mat_ins], 'wall ins form')
251
+ constr.add_layer([mat_framing_middle, mat_conc], 'wall concrete')
252
+ constr.add_layer([mat_framing_inner_outer, mat_ins], 'wall ins form')
253
+ if not mat_int_finish.nil?
254
+ constr.add_layer(mat_int_finish)
245
255
  end
246
256
  constr.add_layer(inside_film)
247
257
 
258
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
259
+ constr.set_interior_material_properties()
260
+
248
261
  # Create and assign construction to surfaces
249
262
  constr.create_and_assign_constructions(runner, surfaces, model)
250
263
  end
251
264
 
252
- def self.apply_sip_wall(runner, model, surfaces, wall, constr_name, sip_r,
265
+ def self.apply_sip_wall(runner, model, surfaces, constr_name, sip_r,
253
266
  sip_thick_in, framing_factor, sheathing_thick_in,
254
- drywall_thick_in, osb_thick_in, rigid_r,
255
- mat_ext_finish, inside_film, outside_film)
267
+ mat_int_finish, osb_thick_in, rigid_r,
268
+ mat_ext_finish, inside_film, outside_film,
269
+ solar_absorptance = nil, emittance = nil)
256
270
 
257
271
  return if surfaces.empty?
258
272
 
259
273
  # Define materials
260
274
  spline_thick_in = 0.5
261
275
  ins_thick_in = sip_thick_in - (2.0 * spline_thick_in) # in
262
- mat_int_sheath = Material.new(name = 'WallIntSheathing', thick_in = sheathing_thick_in, mat_base = BaseMaterial.Wood)
263
- mat_framing_inner_outer = Material.new(name = nil, thick_in = spline_thick_in, mat_base = BaseMaterial.Wood)
264
- mat_framing_middle = Material.new(name = nil, thick_in = ins_thick_in, mat_base = BaseMaterial.Wood)
265
- mat_spline = Material.new(name = nil, thick_in = spline_thick_in, mat_base = BaseMaterial.Wood)
266
- mat_ins_inner_outer = Material.new(name = nil, thick_in = spline_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = sip_thick_in / sip_r)
267
- mat_ins_middle = Material.new(name = nil, thick_in = ins_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = sip_thick_in / sip_r)
276
+ mat_int_sheath = Material.OSBSheathing(sheathing_thick_in)
277
+ mat_framing_inner_outer = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.Wood)
278
+ mat_framing_middle = Material.new(thick_in: ins_thick_in, mat_base: BaseMaterial.Wood)
279
+ mat_spline = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.Wood)
280
+ mat_ins_inner_outer = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: sip_thick_in / sip_r)
281
+ mat_ins_middle = Material.new(thick_in: ins_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: sip_thick_in / sip_r)
268
282
  mat_osb = nil
269
283
  if osb_thick_in > 0
270
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
284
+ mat_osb = Material.OSBSheathing(osb_thick_in)
271
285
  end
272
286
  mat_rigid = nil
273
287
  if rigid_r > 0
274
288
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
275
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
289
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
276
290
  end
277
291
 
278
292
  # Set paths
@@ -292,24 +306,28 @@ class Constructions
292
306
  if not mat_osb.nil?
293
307
  constr.add_layer(mat_osb)
294
308
  end
295
- constr.add_layer([mat_framing_inner_outer, mat_spline, mat_ins_inner_outer], 'WallSplineLayerOuter')
296
- constr.add_layer([mat_framing_middle, mat_ins_middle, mat_ins_middle], 'WallIns')
297
- constr.add_layer([mat_framing_inner_outer, mat_spline, mat_ins_inner_outer], 'WallSplineLayerInner')
309
+ constr.add_layer([mat_framing_inner_outer, mat_spline, mat_ins_inner_outer], 'wall spline layer')
310
+ constr.add_layer([mat_framing_middle, mat_ins_middle, mat_ins_middle], 'wall ins layer')
311
+ constr.add_layer([mat_framing_inner_outer, mat_spline, mat_ins_inner_outer], 'wall spline layer')
298
312
  constr.add_layer(mat_int_sheath)
299
- if drywall_thick_in > 0
300
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
313
+ if not mat_int_finish.nil?
314
+ constr.add_layer(mat_int_finish)
301
315
  end
302
316
  constr.add_layer(inside_film)
303
317
 
318
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
319
+ constr.set_interior_material_properties()
320
+
304
321
  # Create and assign construction to surfaces
305
322
  constr.create_and_assign_constructions(runner, surfaces, model)
306
323
  end
307
324
 
308
- def self.apply_steel_stud_wall(runner, model, surfaces, wall, constr_name,
325
+ def self.apply_steel_stud_wall(runner, model, surfaces, constr_name,
309
326
  cavity_r, install_grade, cavity_depth,
310
327
  cavity_filled, framing_factor, correction_factor,
311
- drywall_thick_in, osb_thick_in, rigid_r,
312
- mat_ext_finish, inside_film, outside_film)
328
+ mat_int_finish, osb_thick_in, rigid_r,
329
+ mat_ext_finish, inside_film, outside_film,
330
+ solar_absorptance = nil, emittance = nil)
313
331
 
314
332
  return if surfaces.empty?
315
333
 
@@ -318,10 +336,10 @@ class Constructions
318
336
  if eR > 0
319
337
  if cavity_filled
320
338
  # Insulation
321
- mat_cavity = Material.new(name = nil, thick_in = cavity_depth, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth / eR)
339
+ mat_cavity = Material.new(thick_in: cavity_depth, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth / eR)
322
340
  else
323
341
  # Insulation plus air gap when insulation thickness < cavity depth
324
- mat_cavity = Material.new(name = nil, thick_in = cavity_depth, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth / (eR + Gas.AirGapRvalue))
342
+ mat_cavity = Material.new(thick_in: cavity_depth, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth / (eR + Gas.AirGapRvalue))
325
343
  end
326
344
  else
327
345
  # Empty cavity
@@ -330,12 +348,12 @@ class Constructions
330
348
  mat_gap = Material.AirCavityClosed(cavity_depth)
331
349
  mat_osb = nil
332
350
  if osb_thick_in > 0
333
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
351
+ mat_osb = Material.OSBSheathing(osb_thick_in)
334
352
  end
335
353
  mat_rigid = nil
336
354
  if rigid_r > 0
337
355
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
338
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
356
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
339
357
  end
340
358
 
341
359
  # Set paths
@@ -354,20 +372,24 @@ class Constructions
354
372
  if not mat_osb.nil?
355
373
  constr.add_layer(mat_osb)
356
374
  end
357
- constr.add_layer([mat_cavity, mat_gap], 'WallStudAndCavity')
358
- if drywall_thick_in > 0
359
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
375
+ constr.add_layer([mat_cavity, mat_gap], 'wall stud and cavity')
376
+ if not mat_int_finish.nil?
377
+ constr.add_layer(mat_int_finish)
360
378
  end
361
379
  constr.add_layer(inside_film)
362
380
 
381
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
382
+ constr.set_interior_material_properties()
383
+
363
384
  # Create and assign construction to surfaces
364
385
  constr.create_and_assign_constructions(runner, surfaces, model)
365
386
  end
366
387
 
367
- def self.apply_generic_layered_wall(runner, model, surfaces, wall, constr_name,
388
+ def self.apply_generic_layered_wall(runner, model, surfaces, constr_name,
368
389
  thick_ins, conds, denss, specheats,
369
- drywall_thick_in, osb_thick_in, rigid_r,
370
- mat_ext_finish, inside_film, outside_film)
390
+ mat_int_finish, osb_thick_in, rigid_r,
391
+ mat_ext_finish, inside_film, outside_film,
392
+ solar_absorptance = nil, emittance = nil)
371
393
 
372
394
  return if surfaces.empty?
373
395
 
@@ -380,27 +402,27 @@ class Constructions
380
402
 
381
403
  # Define materials
382
404
  mats = []
383
- mats << Material.new(name = 'WallLayer1', thick_in = thick_ins[0], mat_base = nil, k_in = conds[0], rho = denss[0], cp = specheats[0])
405
+ mats << Material.new(name: 'wall layer 1', thick_in: thick_ins[0], k_in: conds[0], rho: denss[0], cp: specheats[0])
384
406
  if not thick_ins[1].nil?
385
- mats << Material.new(name = 'WallLayer2', thick_in = thick_ins[1], mat_base = nil, k_in = conds[1], rho = denss[1], cp = specheats[1])
407
+ mats << Material.new(name: 'wall layer 2', thick_in: thick_ins[1], k_in: conds[1], rho: denss[1], cp: specheats[1])
386
408
  end
387
409
  if not thick_ins[2].nil?
388
- mats << Material.new(name = 'WallLayer3', thick_in = thick_ins[2], mat_base = nil, k_in = conds[2], rho = denss[2], cp = specheats[2])
410
+ mats << Material.new(name: 'wall layer 3', thick_in: thick_ins[2], k_in: conds[2], rho: denss[2], cp: specheats[2])
389
411
  end
390
412
  if not thick_ins[3].nil?
391
- mats << Material.new(name = 'WallLayer4', thick_in = thick_ins[3], mat_base = nil, k_in = conds[3], rho = denss[3], cp = specheats[3])
413
+ mats << Material.new(name: 'wall layer 4', thick_in: thick_ins[3], k_in: conds[3], rho: denss[3], cp: specheats[3])
392
414
  end
393
415
  if not thick_ins[4].nil?
394
- mats << Material.new(name = 'WallLayer5', thick_in = thick_ins[4], mat_base = nil, k_in = conds[4], rho = denss[4], cp = specheats[4])
416
+ mats << Material.new(name: 'wall layer 5', thick_in: thick_ins[4], k_in: conds[4], rho: denss[4], cp: specheats[4])
395
417
  end
396
418
  mat_osb = nil
397
419
  if osb_thick_in > 0
398
- mat_osb = Material.new(name = 'WallSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
420
+ mat_osb = Material.OSBSheathing(osb_thick_in)
399
421
  end
400
422
  mat_rigid = nil
401
423
  if rigid_r > 0
402
424
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
403
- mat_rigid = Material.new(name = 'WallRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
425
+ mat_rigid = Material.new(name: 'wall rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
404
426
  end
405
427
 
406
428
  # Set paths
@@ -421,20 +443,23 @@ class Constructions
421
443
  mats.each do |mat|
422
444
  constr.add_layer(mat)
423
445
  end
424
- if drywall_thick_in > 0
425
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
446
+ if not mat_int_finish.nil?
447
+ constr.add_layer(mat_int_finish)
426
448
  end
427
449
  constr.add_layer(inside_film)
428
450
 
451
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
452
+ constr.set_interior_material_properties()
453
+
429
454
  # Create and assign construction to surfaces
430
455
  constr.create_and_assign_constructions(runner, surfaces, model)
431
456
  end
432
457
 
433
- def self.apply_rim_joist(runner, model, surfaces, rim_joist, constr_name,
458
+ def self.apply_rim_joist(runner, model, surfaces, constr_name,
434
459
  cavity_r, install_grade, framing_factor,
435
- drywall_thick_in, osb_thick_in,
460
+ mat_int_finish, osb_thick_in,
436
461
  rigid_r, mat_ext_finish, inside_film,
437
- outside_film)
462
+ outside_film, solar_absorptance = nil, emittance = nil)
438
463
 
439
464
  return if surfaces.empty?
440
465
 
@@ -444,21 +469,21 @@ class Constructions
444
469
  framing_thick_in = sill_plate_thick_in - rim_joist_thick_in # Extra non-continuous wood beyond rim joist thickness
445
470
  if cavity_r > 0
446
471
  # Insulation
447
- mat_cavity = Material.new(name = nil, thick_in = framing_thick_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = framing_thick_in / cavity_r)
472
+ mat_cavity = Material.new(thick_in: framing_thick_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: framing_thick_in / cavity_r)
448
473
  else
449
474
  # Empty cavity
450
475
  mat_cavity = Material.AirCavityOpen(framing_thick_in)
451
476
  end
452
- mat_framing = Material.new(name = nil, thick_in = framing_thick_in, mat_base = BaseMaterial.Wood)
477
+ mat_framing = Material.new(thick_in: framing_thick_in, mat_base: BaseMaterial.Wood)
453
478
  mat_gap = Material.AirCavityClosed(framing_thick_in)
454
479
  mat_osb = nil
455
480
  if osb_thick_in > 0
456
- mat_osb = Material.new(name = 'RimJoistSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
481
+ mat_osb = Material.OSBSheathing(osb_thick_in)
457
482
  end
458
483
  mat_rigid = nil
459
484
  if rigid_r > 0
460
485
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
461
- mat_rigid = Material.new(name = 'RimJoistRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
486
+ mat_rigid = Material.new(name: 'rim joist rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
462
487
  end
463
488
 
464
489
  # Set paths
@@ -477,12 +502,15 @@ class Constructions
477
502
  if not mat_osb.nil?
478
503
  constr.add_layer(mat_osb)
479
504
  end
480
- constr.add_layer([mat_framing, mat_cavity, mat_gap], 'RimJoistStudAndCavity')
481
- if drywall_thick_in > 0
482
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
505
+ constr.add_layer([mat_framing, mat_cavity, mat_gap], 'rim joist stud and cavity')
506
+ if not mat_int_finish.nil?
507
+ constr.add_layer(mat_int_finish)
483
508
  end
484
509
  constr.add_layer(inside_film)
485
510
 
511
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
512
+ constr.set_interior_material_properties()
513
+
486
514
  # Create and assign construction to surfaces
487
515
  constr.create_and_assign_constructions(runner, surfaces, model)
488
516
  end
@@ -492,7 +520,8 @@ class Constructions
492
520
  framing_factor, framing_thick_in,
493
521
  osb_thick_in, rigid_r,
494
522
  mat_roofing, has_radiant_barrier,
495
- inside_film, outside_film, radiant_barrier_grade)
523
+ inside_film, outside_film, radiant_barrier_grade,
524
+ solar_absorptance = nil, emittance = nil)
496
525
 
497
526
  return if surfaces.empty?
498
527
 
@@ -505,23 +534,23 @@ class Constructions
505
534
  if cavity_ins_thick_in < framing_thick_in
506
535
  cavity_k = cavity_k * framing_thick_in / cavity_ins_thick_in
507
536
  end
508
- mat_cavity = Material.new(name = nil, thick_in = roof_ins_thickness_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_k)
537
+ mat_cavity = Material.new(thick_in: roof_ins_thickness_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_k)
509
538
  end
510
539
  if (cavity_ins_thick_in > framing_thick_in) && (framing_thick_in > 0)
511
540
  wood_k = BaseMaterial.Wood.k_in * cavity_ins_thick_in / framing_thick_in
512
541
  else
513
542
  wood_k = BaseMaterial.Wood.k_in
514
543
  end
515
- mat_framing = Material.new(name = nil, thick_in = roof_ins_thickness_in, mat_base = BaseMaterial.Wood, k_in = wood_k)
544
+ mat_framing = Material.new(thick_in: roof_ins_thickness_in, mat_base: BaseMaterial.Wood, k_in: wood_k)
516
545
  mat_gap = Material.AirCavityOpen(roof_ins_thickness_in)
517
546
  mat_osb = nil
518
547
  if osb_thick_in > 0
519
- mat_osb = Material.new(name = 'RoofSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
548
+ mat_osb = Material.OSBSheathing(osb_thick_in)
520
549
  end
521
550
  mat_rigid = nil
522
551
  if rigid_r > 0
523
552
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
524
- mat_rigid = Material.new(name = 'RoofRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
553
+ mat_rigid = Material.new(name: 'roof rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
525
554
  end
526
555
  mat_rb = nil
527
556
  if has_radiant_barrier
@@ -545,22 +574,26 @@ class Constructions
545
574
  constr.add_layer(mat_osb)
546
575
  end
547
576
  if framing_thick_in > 0
548
- constr.add_layer([mat_framing, mat_cavity, mat_gap], 'RoofStudAndCavity')
577
+ constr.add_layer([mat_framing, mat_cavity, mat_gap], 'roof stud and cavity')
549
578
  end
550
579
  if not mat_rb.nil?
551
580
  constr.add_layer(mat_rb)
552
581
  end
553
582
  constr.add_layer(inside_film)
554
583
 
584
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
585
+ constr.set_interior_material_properties() unless has_radiant_barrier
586
+
555
587
  # Create and assign construction to roof surfaces
556
588
  constr.create_and_assign_constructions(runner, surfaces, model)
557
589
  end
558
590
 
559
591
  def self.apply_closed_cavity_roof(runner, model, surfaces, constr_name,
560
592
  cavity_r, install_grade, cavity_depth,
561
- filled_cavity, framing_factor, drywall_thick_in,
593
+ filled_cavity, framing_factor, mat_int_finish,
562
594
  osb_thick_in, rigid_r, mat_roofing, has_radiant_barrier,
563
- inside_film, outside_film, radiant_barrier_grade)
595
+ inside_film, outside_film, radiant_barrier_grade,
596
+ solar_absorptance = nil, emittance = nil)
564
597
 
565
598
  return if surfaces.empty?
566
599
 
@@ -568,25 +601,25 @@ class Constructions
568
601
  if cavity_r > 0
569
602
  if filled_cavity
570
603
  # Insulation
571
- mat_cavity = Material.new(name = nil, thick_in = cavity_depth, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth / cavity_r)
604
+ mat_cavity = Material.new(thick_in: cavity_depth, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth / cavity_r)
572
605
  else
573
606
  # Insulation plus air gap when insulation thickness < cavity depth
574
- mat_cavity = Material.new(name = nil, thick_in = cavity_depth, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = cavity_depth / (cavity_r + Gas.AirGapRvalue))
607
+ mat_cavity = Material.new(thick_in: cavity_depth, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: cavity_depth / (cavity_r + Gas.AirGapRvalue))
575
608
  end
576
609
  else
577
610
  # Empty cavity
578
611
  mat_cavity = Material.AirCavityClosed(cavity_depth)
579
612
  end
580
- mat_framing = Material.new(name = nil, thick_in = cavity_depth, mat_base = BaseMaterial.Wood)
613
+ mat_framing = Material.new(thick_in: cavity_depth, mat_base: BaseMaterial.Wood)
581
614
  mat_gap = Material.AirCavityClosed(cavity_depth)
582
615
  mat_osb = nil
583
616
  if osb_thick_in > 0
584
- mat_osb = Material.new(name = 'RoofSheathing', thick_in = osb_thick_in, mat_base = BaseMaterial.Wood)
617
+ mat_osb = Material.OSBSheathing(osb_thick_in)
585
618
  end
586
619
  mat_rigid = nil
587
620
  if rigid_r > 0
588
621
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
589
- mat_rigid = Material.new(name = 'RoofRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
622
+ mat_rigid = Material.new(name: 'roof rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
590
623
  end
591
624
  mat_rb = nil
592
625
  if has_radiant_barrier
@@ -609,48 +642,45 @@ class Constructions
609
642
  if not mat_osb.nil?
610
643
  constr.add_layer(mat_osb)
611
644
  end
612
- constr.add_layer([mat_framing, mat_cavity, mat_gap], 'RoofStudAndCavity')
613
- if drywall_thick_in > 0
614
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
645
+ constr.add_layer([mat_framing, mat_cavity, mat_gap], 'roof stud and cavity')
646
+ if not mat_int_finish.nil?
647
+ constr.add_layer(mat_int_finish)
615
648
  end
616
649
  if not mat_rb.nil?
617
650
  constr.add_layer(mat_rb)
618
651
  end
619
652
  constr.add_layer(inside_film)
620
653
 
654
+ constr.set_exterior_material_properties(solar_absorptance, emittance)
655
+ constr.set_interior_material_properties() unless has_radiant_barrier
656
+
621
657
  # Create and assign construction to surfaces
622
658
  constr.create_and_assign_constructions(runner, surfaces, model)
623
659
  end
624
660
 
625
661
  def self.apply_ceiling(runner, model, surfaces, constr_name,
626
- cavity_r, install_grade, ins_thick_in,
662
+ cavity_r, install_grade, addtl_r,
627
663
  framing_factor, joist_height_in,
628
- drywall_thick_in, inside_film, outside_film)
664
+ mat_int_finish, inside_film, outside_film)
629
665
 
630
- # Drywall below, open cavity above (e.g., attic floor)
666
+ # Interior finish below, open cavity above (e.g., attic floor)
631
667
 
632
668
  return if surfaces.empty?
633
669
 
634
670
  # Define materials
635
671
  mat_addtl_ins = nil
636
- if ins_thick_in >= joist_height_in
637
- # If the ceiling insulation thickness is greater than the joist thickness
638
- cavity_k = ins_thick_in / cavity_r
639
- if ins_thick_in > joist_height_in
672
+ if cavity_r == 0
673
+ mat_cavity = Material.AirCavityOpen(joist_height_in)
674
+ else
675
+ if addtl_r > 0
640
676
  # If there is additional insulation beyond the rafter height,
641
677
  # these inputs are used for defining an additional layer
642
- mat_addtl_ins = Material.new(name = 'CeilingAdditionalIns', thick_in = (ins_thick_in - joist_height_in), mat_base = BaseMaterial.InsulationGenericLoosefill, k_in = cavity_k)
643
- end
644
- mat_cavity = Material.new(name = nil, thick_in = joist_height_in, mat_base = BaseMaterial.InsulationGenericLoosefill, k_in = cavity_k)
645
- else
646
- # Else the joist thickness is greater than the ceiling insulation thickness
647
- if cavity_r == 0
648
- mat_cavity = Material.AirCavityOpen(joist_height_in)
649
- else
650
- mat_cavity = Material.new(name = nil, thick_in = joist_height_in, mat_base = BaseMaterial.InsulationGenericLoosefill, k_in = joist_height_in / cavity_r)
678
+ addtl_thick_in = addtl_r / 3.0 # Assume roughly R-3 per inch of loose-fill above cavity
679
+ mat_addtl_ins = Material.new(name: 'ceiling loosefill ins', thick_in: addtl_thick_in, mat_base: BaseMaterial.InsulationGenericLoosefill, k_in: addtl_thick_in / addtl_r)
651
680
  end
681
+ mat_cavity = Material.new(thick_in: joist_height_in, mat_base: BaseMaterial.InsulationGenericLoosefill, k_in: joist_height_in / cavity_r)
652
682
  end
653
- mat_framing = Material.new(name = nil, thick_in = joist_height_in, mat_base = BaseMaterial.Wood)
683
+ mat_framing = Material.new(thick_in: joist_height_in, mat_base: BaseMaterial.Wood)
654
684
  mat_gap = Material.AirCavityOpen(joist_height_in)
655
685
 
656
686
  # Set paths
@@ -663,12 +693,14 @@ class Constructions
663
693
  if not mat_addtl_ins.nil?
664
694
  constr.add_layer(mat_addtl_ins)
665
695
  end
666
- constr.add_layer([mat_framing, mat_cavity, mat_gap], 'CeilingStudAndCavity')
667
- if drywall_thick_in > 0
668
- constr.add_layer(Material.GypsumWall(drywall_thick_in))
696
+ constr.add_layer([mat_framing, mat_cavity, mat_gap], 'ceiling stud and cavity')
697
+ if not mat_int_finish.nil?
698
+ constr.add_layer(mat_int_finish)
669
699
  end
670
700
  constr.add_layer(inside_film)
671
701
 
702
+ constr.set_interior_material_properties(debug: true)
703
+
672
704
  # Create and assign construction to ceiling surfaces
673
705
  constr.create_and_assign_constructions(runner, surfaces, model)
674
706
  end
@@ -688,14 +720,14 @@ class Constructions
688
720
  if cavity_r == 0
689
721
  mat_cavity = Material.AirCavityOpen(mat_2x.thick_in)
690
722
  else
691
- mat_cavity = Material.new(name = nil, thick_in = mat_2x.thick_in, mat_base = BaseMaterial.InsulationGenericDensepack, k_in = mat_2x.thick_in / cavity_r)
723
+ mat_cavity = Material.new(thick_in: mat_2x.thick_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: mat_2x.thick_in / cavity_r)
692
724
  end
693
- mat_framing = Material.new(name = nil, thick_in = mat_2x.thick_in, mat_base = BaseMaterial.Wood)
725
+ mat_framing = Material.new(thick_in: mat_2x.thick_in, mat_base: BaseMaterial.Wood)
694
726
  mat_gap = Material.AirCavityOpen(joist_height_in)
695
727
  mat_rigid = nil
696
728
  if rigid_r > 0
697
729
  rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
698
- mat_rigid = Material.new(name = 'FloorRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / rigid_r)
730
+ mat_rigid = Material.new(name: 'floor rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
699
731
  end
700
732
 
701
733
  # Set paths
@@ -705,48 +737,48 @@ class Constructions
705
737
  # Define construction
706
738
  constr = Construction.new(constr_name, path_fracs)
707
739
  constr.add_layer(outside_film)
708
- constr.add_layer([mat_framing, mat_cavity, mat_gap], 'FloorStudAndCavity')
740
+ constr.add_layer([mat_framing, mat_cavity, mat_gap], 'floor stud and cavity')
709
741
  if not mat_rigid.nil?
710
742
  constr.add_layer(mat_rigid)
711
743
  end
712
744
  if plywood_thick_in > 0
713
- constr.add_layer(Material.Plywood(plywood_thick_in))
745
+ constr.add_layer(Material.OSBSheathing(plywood_thick_in))
714
746
  end
715
747
  if not mat_floor_covering.nil?
716
748
  constr.add_layer(mat_floor_covering)
717
749
  end
718
750
  constr.add_layer(inside_film)
719
751
 
752
+ constr.set_interior_material_properties()
753
+
720
754
  # Create and assign construction to surfaces
721
755
  constr.create_and_assign_constructions(runner, surfaces, model)
722
756
  end
723
757
 
724
- def self.apply_foundation_wall(runner, model, wall_surfaces, wall_constr_name,
758
+ def self.apply_foundation_wall(runner, model, surfaces, constr_name,
725
759
  ext_rigid_ins_offset, int_rigid_ins_offset, ext_rigid_ins_height,
726
- int_rigid_ins_height, ext_rigid_r, int_rigid_r, wall_drywall_thick_in, wall_concrete_thick_in, wall_height_above_grade)
760
+ int_rigid_ins_height, ext_rigid_r, int_rigid_r, mat_int_finish,
761
+ mat_wall, height_above_grade)
727
762
 
728
763
  # Create Kiva foundation
729
764
  foundation = apply_kiva_walled_foundation(model, ext_rigid_r, int_rigid_r, ext_rigid_ins_offset,
730
765
  int_rigid_ins_offset, ext_rigid_ins_height,
731
- int_rigid_ins_height, wall_height_above_grade,
732
- wall_concrete_thick_in, wall_drywall_thick_in)
733
-
734
- # Define materials
735
- mat_concrete = Material.Concrete(wall_concrete_thick_in)
766
+ int_rigid_ins_height, height_above_grade,
767
+ mat_wall.thick_in, mat_int_finish)
736
768
 
737
769
  # Define construction
738
- constr = Construction.new(wall_constr_name, [1])
739
- constr.add_layer(mat_concrete)
740
- if wall_drywall_thick_in > 0
741
- constr.add_layer(Material.GypsumWall(wall_drywall_thick_in))
770
+ constr = Construction.new(constr_name, [1])
771
+ constr.add_layer(mat_wall)
772
+ if not mat_int_finish.nil?
773
+ constr.add_layer(mat_int_finish)
742
774
  end
743
775
 
744
776
  # Create and assign construction to surfaces
745
- constr.create_and_assign_constructions(runner, wall_surfaces, model)
777
+ constr.create_and_assign_constructions(runner, surfaces, model)
746
778
 
747
779
  # Assign surfaces to Kiva foundation
748
- wall_surfaces.each do |wall_surface|
749
- wall_surface.setAdjacentFoundation(foundation)
780
+ surfaces.each do |surface|
781
+ surface.setAdjacentFoundation(foundation)
750
782
  end
751
783
  end
752
784
 
@@ -767,7 +799,7 @@ class Constructions
767
799
  else
768
800
  # Kiva foundation (for crawlspace/basement) exists
769
801
  if (under_r > 0) && (under_width > 0)
770
- int_horiz_mat = create_insulation_material(model, 'FoundationIntHorizIns', under_r)
802
+ int_horiz_mat = create_insulation_material(model, 'interior horizontal ins', under_r)
771
803
  foundation.setInteriorHorizontalInsulationMaterial(int_horiz_mat)
772
804
  foundation.setInteriorHorizontalInsulationDepth(0)
773
805
  foundation.setInteriorHorizontalInsulationWidth(UnitConversions.convert(under_width, 'ft', 'm'))
@@ -786,7 +818,7 @@ class Constructions
786
818
  mat_rigid = nil
787
819
  if whole_r > 0
788
820
  rigid_thick_in = whole_r * BaseMaterial.InsulationRigid.k_in
789
- mat_rigid = Material.new(name = 'SlabRigidIns', thick_in = rigid_thick_in, mat_base = BaseMaterial.InsulationRigid, k_in = rigid_thick_in / whole_r)
821
+ mat_rigid = Material.new(name: 'slab rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / whole_r)
790
822
  end
791
823
 
792
824
  # Define construction
@@ -818,7 +850,7 @@ class Constructions
818
850
  # Define materials
819
851
  door_Rvalue = 1.0 / ufactor - inside_film.rvalue - outside_film.rvalue
820
852
  door_thickness = 1.75 # in
821
- fin_door_mat = Material.new(name = 'DoorMaterial', thick_in = door_thickness, mat_base = BaseMaterial.Wood, k_in = 1.0 / door_Rvalue * door_thickness)
853
+ fin_door_mat = Material.new(name: 'door material', thick_in: door_thickness, mat_base: BaseMaterial.Wood, k_in: 1.0 / door_Rvalue * door_thickness)
822
854
 
823
855
  # Set paths
824
856
  path_fracs = [1]
@@ -839,19 +871,19 @@ class Constructions
839
871
  apply_window_skylight(runner, model, 'Skylight', subsurface, constr_name, ufactor, shgc)
840
872
  end
841
873
 
842
- def self.apply_partition_walls(runner, model, constr_name, drywall_thick_in, frac_of_ffa,
874
+ def self.apply_partition_walls(runner, model, constr_name, mat_int_finish, partition_wall_area,
843
875
  basement_frac_of_cfa, cond_base_surfaces, living_space)
844
876
 
845
877
  imdefs = []
846
878
 
847
879
  # Determine additional partition wall mass required
848
- addtl_surface_area_base = frac_of_ffa * living_space.floorArea * basement_frac_of_cfa
849
- addtl_surface_area_lv = frac_of_ffa * living_space.floorArea * (1.0 - basement_frac_of_cfa)
880
+ addtl_surface_area_base = partition_wall_area * basement_frac_of_cfa
881
+ addtl_surface_area_lv = partition_wall_area * (1.0 - basement_frac_of_cfa)
850
882
 
851
883
  if addtl_surface_area_lv > 0
852
884
  # Add remaining partition walls within spaces (those without geometric representation)
853
885
  # as internal mass object.
854
- obj_name = "#{living_space.name} Living Partition"
886
+ obj_name = 'partition wall mass above grade'
855
887
  imdef = create_os_int_mass_and_def(model, obj_name, living_space, addtl_surface_area_lv)
856
888
  imdefs << imdef
857
889
  end
@@ -859,21 +891,29 @@ class Constructions
859
891
  if addtl_surface_area_base > 0
860
892
  # Add remaining partition walls within spaces (those without geometric representation)
861
893
  # as internal mass object.
862
- obj_name = "#{living_space.name} Basement Partition"
894
+ obj_name = 'partition wall mass below grade'
863
895
  imdef = create_os_int_mass_and_def(model, obj_name, living_space, addtl_surface_area_base)
864
896
  cond_base_surfaces << imdef
865
897
  imdefs << imdef
866
898
  end
867
899
 
868
- apply_wood_stud_wall(runner, model, imdefs, nil, constr_name,
900
+ apply_wood_stud_wall(runner, model, imdefs, constr_name,
869
901
  0, 1, 3.5, false, 0.16,
870
- drywall_thick_in, 0, 0, nil, drywall_thick_in,
902
+ mat_int_finish, 0, 0, mat_int_finish,
871
903
  Material.AirFilmVertical,
872
904
  Material.AirFilmVertical)
873
905
  end
874
906
 
875
- def self.apply_furniture(runner, model, mass_lb_per_sqft, density_lb_per_cuft,
876
- mat, basement_frac_of_cfa, cond_base_surfaces, living_space)
907
+ def self.apply_furniture(runner, model, furniture_mass, cfa, ubfa, gfa,
908
+ basement_frac_of_cfa, cond_base_surfaces, living_space)
909
+
910
+ if furniture_mass.type == HPXML::FurnitureMassTypeLightWeight
911
+ mass_lb_per_sqft = 8.0
912
+ mat = BaseMaterial.FurnitureLightWeight
913
+ elsif furniture_mass.type == HPXML::FurnitureMassTypeHeavyWeight
914
+ mass_lb_per_sqft = 16.0
915
+ mat = BaseMaterial.FurnitureHeavyWeight
916
+ end
877
917
 
878
918
  # Add user-specified furniture mass
879
919
  model.getSpaces.each do |space|
@@ -881,13 +921,19 @@ class Constructions
881
921
  furnConductivity = mat.k_in
882
922
  furnSolarAbsorptance = 0.6
883
923
  furnSpecHeat = mat.cp
884
- furnDensity = density_lb_per_cuft
885
- if (space == living_space) || Geometry.is_unconditioned_basement(space)
886
- furnAreaFraction = 1.0
924
+ furnDensity = mat.rho
925
+ if space == living_space
926
+ furnAreaFraction = furniture_mass.area_fraction
927
+ furnMass = mass_lb_per_sqft
928
+ floor_area = cfa
929
+ elsif Geometry.is_unconditioned_basement(space)
930
+ furnAreaFraction = 0.4
887
931
  furnMass = mass_lb_per_sqft
932
+ floor_area = ubfa
888
933
  elsif Geometry.is_garage(space)
889
934
  furnAreaFraction = 0.1
890
935
  furnMass = 2.0
936
+ floor_area = gfa
891
937
  end
892
938
 
893
939
  next if furnAreaFraction.nil?
@@ -901,7 +947,7 @@ class Constructions
901
947
  furnThickness = UnitConversions.convert(furnMass / (furnDensity * furnAreaFraction), 'ft', 'in')
902
948
 
903
949
  # Define materials
904
- mat_fm = Material.new(name = mat_obj_name_space, thick_in = furnThickness, mat_base = nil, k_in = furnConductivity, rho = furnDensity, cp = furnSpecHeat, tAbs = 0.9, sAbs = furnSolarAbsorptance, vAbs = 0.1)
950
+ mat_fm = Material.new(name: mat_obj_name_space, thick_in: furnThickness, k_in: furnConductivity, rho: furnDensity, cp: furnSpecHeat, tAbs: 0.9, sAbs: furnSolarAbsorptance)
905
951
 
906
952
  # Set paths
907
953
  path_fracs = [1]
@@ -913,23 +959,23 @@ class Constructions
913
959
  imdefs = []
914
960
  if space == living_space
915
961
  # if living space, judge if includes conditioned basement, create furniture independently
916
- living_surface_area = furnAreaFraction * space.floorArea * (1 - basement_frac_of_cfa)
917
- base_surface_area = furnAreaFraction * space.floorArea * basement_frac_of_cfa
962
+ living_surface_area = furnAreaFraction * floor_area * (1 - basement_frac_of_cfa)
963
+ base_surface_area = furnAreaFraction * floor_area * basement_frac_of_cfa
918
964
  # living furniture mass
919
965
  if living_surface_area > 0
920
- living_obj_name = mass_obj_name_space + ' living'
966
+ living_obj_name = mass_obj_name_space + ' above grade'
921
967
  imdef = create_os_int_mass_and_def(model, living_obj_name, space, living_surface_area)
922
968
  imdefs << imdef
923
969
  end
924
970
  # basement furniture mass
925
971
  if base_surface_area > 0
926
- base_obj_name = mass_obj_name_space + ' basement'
972
+ base_obj_name = mass_obj_name_space + ' below grade'
927
973
  imdef = create_os_int_mass_and_def(model, base_obj_name, space, base_surface_area)
928
974
  cond_base_surfaces << imdef
929
975
  imdefs << imdef
930
976
  end
931
977
  else
932
- surface_area = furnAreaFraction * space.floorArea
978
+ surface_area = furnAreaFraction * floor_area
933
979
  imdef = create_os_int_mass_and_def(model, mass_obj_name_space, space, surface_area)
934
980
  imdefs << imdef
935
981
  end
@@ -943,7 +989,7 @@ class Constructions
943
989
  # then the user should input twice the area when defining the Internal Mass object.
944
990
  imdef = OpenStudio::Model::InternalMassDefinition.new(model)
945
991
  imdef.setName(object_name)
946
- imdef.setSurfaceArea(area)
992
+ imdef.setSurfaceArea(UnitConversions.convert(area, 'ft^2', 'm^2'))
947
993
 
948
994
  im = OpenStudio::Model::InternalMass.new(imdef)
949
995
  im.setName(object_name)
@@ -986,37 +1032,172 @@ class Constructions
986
1032
  return map[color]
987
1033
  end
988
1034
 
1035
+ def self.get_default_window_skylight_ufactor_shgc(window_or_skylight, type)
1036
+ if window_or_skylight.glass_layers == HPXML::WindowLayersSinglePane
1037
+ n_panes = 1
1038
+ elsif window_or_skylight.glass_layers == HPXML::WindowLayersDoublePane
1039
+ n_panes = 2
1040
+ elsif window_or_skylight.glass_layers == HPXML::WindowLayersTriplePane
1041
+ n_panes = 3
1042
+ elsif window_or_skylight.glass_layers == HPXML::WindowLayersGlassBlock
1043
+ return [0.6, 0.6] # From https://www.federalregister.gov/documents/2016/06/17/2016-13547/energy-conservation-standards-for-manufactured-housing
1044
+ end
1045
+
1046
+ if [HPXML::WindowFrameTypeAluminum,
1047
+ HPXML::WindowFrameTypeMetal].include? window_or_skylight.frame_type
1048
+ is_metal_frame = true
1049
+ elsif [HPXML::WindowFrameTypeWood,
1050
+ HPXML::WindowFrameTypeVinyl,
1051
+ HPXML::WindowFrameTypeFiberglass].include? window_or_skylight.frame_type
1052
+ is_metal_frame = false
1053
+ else
1054
+ fail "Unexpected #{type.downcase} frame type."
1055
+ end
1056
+
1057
+ if window_or_skylight.glass_type.nil?
1058
+ glass_type = 'clear'
1059
+ elsif [HPXML::WindowGlassTypeTinted,
1060
+ HPXML::WindowGlassTypeTintedReflective].include? window_or_skylight.glass_type
1061
+ glass_type = 'tinted'
1062
+ elsif [HPXML::WindowGlassTypeLowE].include? window_or_skylight.glass_type
1063
+ glass_type = 'low_e'
1064
+ elsif [HPXML::WindowGlassTypeReflective].include? window_or_skylight.glass_type
1065
+ glass_type = 'reflective'
1066
+ else
1067
+ fail "Unexpected #{type.downcase} glass type."
1068
+ end
1069
+
1070
+ if window_or_skylight.glass_layers == HPXML::WindowLayersSinglePane
1071
+ gas_fill = 'none'
1072
+ elsif [HPXML::WindowGasAir].include? window_or_skylight.gas_fill
1073
+ gas_fill = 'air'
1074
+ elsif [HPXML::WindowGasArgon,
1075
+ HPXML::WindowGasKrypton,
1076
+ HPXML::WindowGasXenon,
1077
+ HPXML::WindowGasNitrogen,
1078
+ HPXML::WindowGasOther].include? window_or_skylight.gas_fill
1079
+ gas_fill = 'gas'
1080
+ else
1081
+ fail "Unexpected #{type.downcase} gas type."
1082
+ end
1083
+
1084
+ # Lookup values
1085
+ # From http://hes-documentation.lbl.gov/calculation-methodology/calculation-of-energy-consumption/heating-and-cooling-calculation/building-envelope/window-skylight-construction-types
1086
+ key = [is_metal_frame, window_or_skylight.thermal_break, n_panes, glass_type, gas_fill]
1087
+ if type.downcase == 'window'
1088
+ vals = { [true, false, 1, 'clear', 'none'] => [1.27, 0.75], # Single-pane, clear, aluminum frame
1089
+ [false, nil, 1, 'clear', 'none'] => [0.89, 0.64], # Single-pane, clear, wood or vinyl frame
1090
+ [true, false, 1, 'tinted', 'none'] => [1.27, 0.64], # Single-pane, tinted, aluminum frame
1091
+ [false, nil, 1, 'tinted', 'none'] => [0.89, 0.54], # Single-pane, tinted, wood or vinyl frame
1092
+ [true, false, 2, 'clear', 'air'] => [0.81, 0.67], # Double-pane, clear, aluminum frame
1093
+ [true, true, 2, 'clear', 'air'] => [0.60, 0.67], # Double-pane, clear, aluminum frame w/ thermal break
1094
+ [false, nil, 2, 'clear', 'air'] => [0.51, 0.56], # Double-pane, clear, wood or vinyl frame
1095
+ [true, false, 2, 'tinted', 'air'] => [0.81, 0.55], # Double-pane, tinted, aluminum frame
1096
+ [true, true, 2, 'tinted', 'air'] => [0.60, 0.55], # Double-pane, tinted, aluminum frame w/ thermal break
1097
+ [false, nil, 2, 'tinted', 'air'] => [0.51, 0.46], # Double-pane, tinted, wood or vinyl frame
1098
+ [false, nil, 2, 'low_e', 'air'] => [0.42, 0.52], # Double-pane, insulating low-E, wood or vinyl frame
1099
+ [true, true, 2, 'low_e', 'gas'] => [0.47, 0.62], # Double-pane, insulating low-E, argon gas fill, aluminum frame w/ thermal break
1100
+ [false, nil, 2, 'low_e', 'gas'] => [0.39, 0.52], # Double-pane, insulating low-E, argon gas fill, wood or vinyl frame
1101
+ [true, false, 2, 'reflective', 'air'] => [0.67, 0.37], # Double-pane, solar-control low-E, aluminum frame
1102
+ [true, true, 2, 'reflective', 'air'] => [0.47, 0.37], # Double-pane, solar-control low-E, aluminum frame w/ thermal break
1103
+ [false, nil, 2, 'reflective', 'air'] => [0.39, 0.31], # Double-pane, solar-control low-E, wood or vinyl frame
1104
+ [false, nil, 2, 'reflective', 'gas'] => [0.36, 0.31], # Double-pane, solar-control low-E, argon gas fill, wood or vinyl frame
1105
+ [false, nil, 3, 'low_e', 'gas'] => [0.27, 0.31] }[key] # Triple-pane, insulating low-E, argon gas fill, wood or vinyl frame
1106
+ elsif type.downcase == 'skylight'
1107
+ vals = { [true, false, 1, 'clear', 'none'] => [1.98, 0.75], # Single-pane, clear, aluminum frame
1108
+ [false, nil, 1, 'clear', 'none'] => [1.47, 0.64], # Single-pane, clear, wood or vinyl frame
1109
+ [true, false, 1, 'tinted', 'none'] => [1.98, 0.64], # Single-pane, tinted, aluminum frame
1110
+ [false, nil, 1, 'tinted', 'none'] => [1.47, 0.54], # Single-pane, tinted, wood or vinyl frame
1111
+ [true, false, 2, 'clear', 'air'] => [1.30, 0.67], # Double-pane, clear, aluminum frame
1112
+ [true, true, 2, 'clear', 'air'] => [1.10, 0.67], # Double-pane, clear, aluminum frame w/ thermal break
1113
+ [false, nil, 2, 'clear', 'air'] => [0.84, 0.56], # Double-pane, clear, wood or vinyl frame
1114
+ [true, false, 2, 'tinted', 'air'] => [1.30, 0.55], # Double-pane, tinted, aluminum frame
1115
+ [true, true, 2, 'tinted', 'air'] => [1.10, 0.55], # Double-pane, tinted, aluminum frame w/ thermal break
1116
+ [false, nil, 2, 'tinted', 'air'] => [0.84, 0.46], # Double-pane, tinted, wood or vinyl frame
1117
+ [false, nil, 2, 'low_e', 'air'] => [0.74, 0.52], # Double-pane, insulating low-E, wood or vinyl frame
1118
+ [true, true, 2, 'low_e', 'gas'] => [0.95, 0.62], # Double-pane, insulating low-E, argon gas fill, aluminum frame w/ thermal break
1119
+ [false, nil, 2, 'low_e', 'gas'] => [0.68, 0.52], # Double-pane, insulating low-E, argon gas fill, wood or vinyl frame
1120
+ [true, false, 2, 'reflective', 'air'] => [1.17, 0.37], # Double-pane, solar-control low-E, aluminum frame
1121
+ [true, true, 2, 'reflective', 'air'] => [0.98, 0.37], # Double-pane, solar-control low-E, aluminum frame w/ thermal break
1122
+ [false, nil, 2, 'reflective', 'air'] => [0.71, 0.31], # Double-pane, solar-control low-E, wood or vinyl frame
1123
+ [false, nil, 2, 'reflective', 'gas'] => [0.65, 0.31], # Double-pane, solar-control low-E, argon gas fill, wood or vinyl frame
1124
+ [false, nil, 3, 'low_e', 'gas'] => [0.47, 0.31] }[key] # Triple-pane, insulating low-E, argon gas fill, wood or vinyl frame
1125
+ else
1126
+ fail 'Unexpected type.'
1127
+ end
1128
+ return vals if not vals.nil?
1129
+
1130
+ fail "Could not lookup UFactor and SHGC for #{type.downcase} '#{window_or_skylight.id}'."
1131
+ end
1132
+
989
1133
  private
990
1134
 
991
1135
  def self.get_roof_color_and_solar_absorptance_map
992
- return { [HPXML::ColorDark, HPXML::RoofTypeAsphaltShingles] => 0.92,
993
- [HPXML::ColorMediumDark, HPXML::RoofTypeAsphaltShingles] => 0.89,
994
- [HPXML::ColorMedium, HPXML::RoofTypeAsphaltShingles] => 0.85,
995
- [HPXML::ColorLight, HPXML::RoofTypeAsphaltShingles] => 0.75,
996
- [HPXML::ColorReflective, HPXML::RoofTypeAsphaltShingles] => 0.50,
997
- [HPXML::ColorDark, HPXML::RoofTypeWoodShingles] => 0.92,
998
- [HPXML::ColorMediumDark, HPXML::RoofTypeWoodShingles] => 0.89,
999
- [HPXML::ColorMedium, HPXML::RoofTypeWoodShingles] => 0.85,
1000
- [HPXML::ColorLight, HPXML::RoofTypeWoodShingles] => 0.75,
1001
- [HPXML::ColorReflective, HPXML::RoofTypeWoodShingles] => 0.50,
1002
- [HPXML::ColorDark, HPXML::RoofTypeClayTile] => 0.90,
1003
- [HPXML::ColorMediumDark, HPXML::RoofTypeClayTile] => 0.83,
1004
- [HPXML::ColorMedium, HPXML::RoofTypeClayTile] => 0.75,
1005
- [HPXML::ColorLight, HPXML::RoofTypeClayTile] => 0.60,
1006
- [HPXML::ColorReflective, HPXML::RoofTypeClayTile] => 0.30,
1007
- [HPXML::ColorDark, HPXML::RoofTypeMetal] => 0.90,
1008
- [HPXML::ColorMediumDark, HPXML::RoofTypeMetal] => 0.83,
1009
- [HPXML::ColorMedium, HPXML::RoofTypeMetal] => 0.75,
1010
- [HPXML::ColorLight, HPXML::RoofTypeMetal] => 0.60,
1011
- [HPXML::ColorReflective, HPXML::RoofTypeMetal] => 0.30 }
1136
+ return { # asphalt or fiberglass shingles
1137
+ [HPXML::ColorDark, HPXML::RoofTypeAsphaltShingles] => 0.92,
1138
+ [HPXML::ColorMediumDark, HPXML::RoofTypeAsphaltShingles] => 0.89,
1139
+ [HPXML::ColorMedium, HPXML::RoofTypeAsphaltShingles] => 0.85,
1140
+ [HPXML::ColorLight, HPXML::RoofTypeAsphaltShingles] => 0.75,
1141
+ [HPXML::ColorReflective, HPXML::RoofTypeAsphaltShingles] => 0.50,
1142
+ # wood shingles or shakes
1143
+ [HPXML::ColorDark, HPXML::RoofTypeWoodShingles] => 0.92,
1144
+ [HPXML::ColorMediumDark, HPXML::RoofTypeWoodShingles] => 0.89,
1145
+ [HPXML::ColorMedium, HPXML::RoofTypeWoodShingles] => 0.85,
1146
+ [HPXML::ColorLight, HPXML::RoofTypeWoodShingles] => 0.75,
1147
+ [HPXML::ColorReflective, HPXML::RoofTypeWoodShingles] => 0.50,
1148
+ # shingles
1149
+ [HPXML::ColorDark, HPXML::RoofTypeShingles] => 0.92,
1150
+ [HPXML::ColorMediumDark, HPXML::RoofTypeShingles] => 0.89,
1151
+ [HPXML::ColorMedium, HPXML::RoofTypeShingles] => 0.85,
1152
+ [HPXML::ColorLight, HPXML::RoofTypeShingles] => 0.75,
1153
+ [HPXML::ColorReflective, HPXML::RoofTypeShingles] => 0.50,
1154
+ # slate or tile shingles
1155
+ [HPXML::ColorDark, HPXML::RoofTypeClayTile] => 0.90,
1156
+ [HPXML::ColorMediumDark, HPXML::RoofTypeClayTile] => 0.83,
1157
+ [HPXML::ColorMedium, HPXML::RoofTypeClayTile] => 0.75,
1158
+ [HPXML::ColorLight, HPXML::RoofTypeClayTile] => 0.60,
1159
+ [HPXML::ColorReflective, HPXML::RoofTypeClayTile] => 0.30,
1160
+ # metal surfacing
1161
+ [HPXML::ColorDark, HPXML::RoofTypeMetal] => 0.90,
1162
+ [HPXML::ColorMediumDark, HPXML::RoofTypeMetal] => 0.83,
1163
+ [HPXML::ColorMedium, HPXML::RoofTypeMetal] => 0.75,
1164
+ [HPXML::ColorLight, HPXML::RoofTypeMetal] => 0.60,
1165
+ [HPXML::ColorReflective, HPXML::RoofTypeMetal] => 0.30,
1166
+ # plastic/rubber/synthetic sheeting
1167
+ [HPXML::ColorDark, HPXML::RoofTypePlasticRubber] => 0.90,
1168
+ [HPXML::ColorMediumDark, HPXML::RoofTypePlasticRubber] => 0.83,
1169
+ [HPXML::ColorMedium, HPXML::RoofTypePlasticRubber] => 0.75,
1170
+ [HPXML::ColorLight, HPXML::RoofTypePlasticRubber] => 0.60,
1171
+ [HPXML::ColorReflective, HPXML::RoofTypePlasticRubber] => 0.30,
1172
+ # expanded polystyrene sheathing
1173
+ [HPXML::ColorDark, HPXML::RoofTypeEPS] => 0.92,
1174
+ [HPXML::ColorMediumDark, HPXML::RoofTypeEPS] => 0.89,
1175
+ [HPXML::ColorMedium, HPXML::RoofTypeEPS] => 0.85,
1176
+ [HPXML::ColorLight, HPXML::RoofTypeEPS] => 0.75,
1177
+ [HPXML::ColorReflective, HPXML::RoofTypeEPS] => 0.50,
1178
+ # concrete
1179
+ [HPXML::ColorDark, HPXML::RoofTypeConcrete] => 0.90,
1180
+ [HPXML::ColorMediumDark, HPXML::RoofTypeConcrete] => 0.83,
1181
+ [HPXML::ColorMedium, HPXML::RoofTypeConcrete] => 0.75,
1182
+ [HPXML::ColorLight, HPXML::RoofTypeConcrete] => 0.65,
1183
+ [HPXML::ColorReflective, HPXML::RoofTypeConcrete] => 0.50,
1184
+ # cool roof
1185
+ [HPXML::ColorDark, HPXML::RoofTypeCool] => 0.30,
1186
+ [HPXML::ColorMediumDark, HPXML::RoofTypeCool] => 0.30,
1187
+ [HPXML::ColorMedium, HPXML::RoofTypeCool] => 0.30,
1188
+ [HPXML::ColorLight, HPXML::RoofTypeCool] => 0.30,
1189
+ [HPXML::ColorReflective, HPXML::RoofTypeCool] => 0.30,
1190
+ }
1012
1191
  end
1013
1192
 
1014
1193
  def self.get_wall_color_and_solar_absorptance_map
1015
- return { HPXML::ColorDark => 0.95,
1016
- HPXML::ColorMediumDark => 0.85,
1017
- HPXML::ColorMedium => 0.70,
1018
- HPXML::ColorLight => 0.50,
1019
- HPXML::ColorReflective => 0.30 }
1194
+ return {
1195
+ HPXML::ColorDark => 0.95,
1196
+ HPXML::ColorMediumDark => 0.85,
1197
+ HPXML::ColorMedium => 0.70,
1198
+ HPXML::ColorLight => 0.50,
1199
+ HPXML::ColorReflective => 0.30
1200
+ }
1020
1201
  end
1021
1202
 
1022
1203
  def self.get_gap_factor(install_grade, framing_factor, cavity_r)
@@ -1042,7 +1223,7 @@ class Constructions
1042
1223
 
1043
1224
  # Interior horizontal insulation
1044
1225
  if (int_horiz_r > 0) && (int_horiz_width > 0)
1045
- int_horiz_mat = create_insulation_material(model, 'FoundationIntHorizIns', int_horiz_r)
1226
+ int_horiz_mat = create_insulation_material(model, 'interior horizontal ins', int_horiz_r)
1046
1227
  foundation.setInteriorHorizontalInsulationMaterial(int_horiz_mat)
1047
1228
  foundation.setInteriorHorizontalInsulationDepth(0)
1048
1229
  foundation.setInteriorHorizontalInsulationWidth(UnitConversions.convert(int_horiz_width, 'ft', 'm'))
@@ -1050,14 +1231,14 @@ class Constructions
1050
1231
 
1051
1232
  # Interior vertical insulation
1052
1233
  if int_vert_r > 0
1053
- int_vert_mat = create_insulation_material(model, 'FoundationIntVertIns', int_vert_r)
1234
+ int_vert_mat = create_insulation_material(model, 'interior vertical ins', int_vert_r)
1054
1235
  foundation.setInteriorVerticalInsulationMaterial(int_vert_mat)
1055
1236
  foundation.setInteriorVerticalInsulationDepth(UnitConversions.convert(int_vert_depth, 'ft', 'm'))
1056
1237
  end
1057
1238
 
1058
1239
  # Exterior vertical insulation
1059
1240
  if (ext_vert_r > 0) && (ext_vert_depth > 0)
1060
- ext_vert_mat = create_insulation_material(model, 'FoundationExtVertIns', ext_vert_r)
1241
+ ext_vert_mat = create_insulation_material(model, 'exterior vertical ins', ext_vert_r)
1061
1242
  foundation.setExteriorVerticalInsulationMaterial(ext_vert_mat)
1062
1243
  foundation.setExteriorVerticalInsulationDepth(UnitConversions.convert(ext_vert_depth, 'ft', 'm'))
1063
1244
  end
@@ -1072,14 +1253,14 @@ class Constructions
1072
1253
 
1073
1254
  def self.apply_kiva_walled_foundation(model, ext_vert_r, int_vert_r,
1074
1255
  ext_vert_offset, int_vert_offset, ext_vert_depth, int_vert_depth,
1075
- wall_height_above_grade, wall_concrete_thick_in, wall_drywall_thick_in)
1256
+ wall_height_above_grade, wall_material_thick_in, wall_mat_int_finish)
1076
1257
 
1077
1258
  # Create the Foundation:Kiva object for crawl/basement foundations
1078
1259
  foundation = OpenStudio::Model::FoundationKiva.new(model)
1079
1260
 
1080
1261
  # Interior vertical insulation
1081
1262
  if (int_vert_r > 0) && (int_vert_depth > 0)
1082
- int_vert_mat = create_insulation_material(model, 'FoundationIntVertIns', int_vert_r)
1263
+ int_vert_mat = create_insulation_material(model, 'interior vertical ins', int_vert_r)
1083
1264
  foundation.addCustomBlock(int_vert_mat,
1084
1265
  UnitConversions.convert(int_vert_depth, 'ft', 'm'),
1085
1266
  -int_vert_mat.thickness,
@@ -1088,10 +1269,11 @@ class Constructions
1088
1269
 
1089
1270
  # Exterior vertical insulation
1090
1271
  if (ext_vert_r > 0) && (ext_vert_depth > 0)
1091
- ext_vert_mat = create_insulation_material(model, 'FoundationExtVertIns', ext_vert_r)
1272
+ ext_vert_mat = create_insulation_material(model, 'exterior vertical ins', ext_vert_r)
1273
+ wall_mat_int_finish_thick_in = wall_mat_int_finish.nil? ? 0.0 : wall_mat_int_finish.thick_in
1092
1274
  foundation.addCustomBlock(ext_vert_mat,
1093
1275
  UnitConversions.convert(ext_vert_depth, 'ft', 'm'),
1094
- UnitConversions.convert(wall_concrete_thick_in + wall_drywall_thick_in, 'in', 'm'),
1276
+ UnitConversions.convert(wall_material_thick_in + wall_mat_int_finish_thick_in, 'in', 'm'),
1095
1277
  UnitConversions.convert(ext_vert_offset, 'ft', 'm'))
1096
1278
  end
1097
1279
 
@@ -1156,7 +1338,7 @@ class Constructions
1156
1338
  # by 1.20." Thus we divide by 1.2 to get the vertical position value.
1157
1339
  ufactor /= 1.2
1158
1340
  end
1159
- glaz_mat = GlazingMaterial.new("#{type}Material", ufactor, shgc)
1341
+ glaz_mat = GlazingMaterial.new(name: "#{type}Material", ufactor: ufactor, shgc: shgc)
1160
1342
 
1161
1343
  # Set paths
1162
1344
  path_fracs = [1]
@@ -1234,29 +1416,35 @@ class Constructions
1234
1416
  def self.calc_non_cavity_r(film_r, constr_set)
1235
1417
  # Calculate R-value for all non-cavity layers
1236
1418
  non_cavity_r = film_r
1237
- if not constr_set.exterior_material.nil?
1238
- non_cavity_r += constr_set.exterior_material.rvalue
1419
+ if not constr_set.mat_ext_finish.nil?
1420
+ non_cavity_r += constr_set.mat_ext_finish.rvalue
1239
1421
  end
1240
1422
  if not constr_set.rigid_r.nil?
1241
1423
  non_cavity_r += constr_set.rigid_r
1242
1424
  end
1243
1425
  if not constr_set.osb_thick_in.nil?
1244
- non_cavity_r += Material.Plywood(constr_set.osb_thick_in).rvalue
1426
+ non_cavity_r += Material.OSBSheathing(constr_set.osb_thick_in).rvalue
1245
1427
  end
1246
- if not constr_set.drywall_thick_in.nil?
1247
- non_cavity_r += Material.GypsumWall(constr_set.drywall_thick_in).rvalue
1428
+ if not constr_set.mat_int_finish.nil?
1429
+ non_cavity_r += constr_set.mat_int_finish.rvalue
1248
1430
  end
1249
1431
  return non_cavity_r
1250
1432
  end
1251
1433
 
1252
- def self.apply_wall_construction(runner, model, surfaces, wall, wall_id, wall_type, assembly_r,
1253
- drywall_thick_in, inside_film, outside_film, mat_ext_finish)
1434
+ def self.apply_wall_construction(runner, model, surfaces, wall_id, wall_type, assembly_r,
1435
+ mat_int_finish, inside_film, outside_film, mat_ext_finish,
1436
+ solar_absorptance, emittance)
1254
1437
 
1255
1438
  film_r = inside_film.rvalue + outside_film.rvalue
1256
1439
  if mat_ext_finish.nil?
1257
1440
  fallback_mat_ext_finish = nil
1258
1441
  else
1259
- fallback_mat_ext_finish = Material.ExteriorFinishMaterial(mat_ext_finish.name, mat_ext_finish.tAbs, mat_ext_finish.sAbs, 0.1)
1442
+ fallback_mat_ext_finish = Material.ExteriorFinishMaterial(mat_ext_finish.name, 0.1) # Try thin material
1443
+ end
1444
+ if mat_int_finish.nil?
1445
+ fallback_mat_int_finish = nil
1446
+ else
1447
+ fallback_mat_int_finish = Material.InteriorFinishMaterial(mat_int_finish.name, 0.1) # Try thin material
1260
1448
  end
1261
1449
 
1262
1450
  if wall_type == HPXML::WallTypeWoodStud
@@ -1264,57 +1452,60 @@ class Constructions
1264
1452
  cavity_filled = true
1265
1453
 
1266
1454
  constr_sets = [
1267
- WoodStudConstructionSet.new(Material.Stud2x6, 0.20, 20.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x6, 24" o.c. + R20
1268
- WoodStudConstructionSet.new(Material.Stud2x6, 0.20, 10.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x6, 24" o.c. + R10
1269
- WoodStudConstructionSet.new(Material.Stud2x6, 0.20, 0.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x6, 24" o.c.
1270
- WoodStudConstructionSet.new(Material.Stud2x4, 0.23, 0.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x4, 16" o.c.
1271
- WoodStudConstructionSet.new(Material.Stud2x4, 0.01, 0.0, 0.0, 0.0, fallback_mat_ext_finish), # Fallback
1455
+ WoodStudConstructionSet.new(Material.Stud2x6, 0.20, 20.0, 0.5, mat_int_finish, mat_ext_finish), # 2x6, 24" o.c. + R20
1456
+ WoodStudConstructionSet.new(Material.Stud2x6, 0.20, 10.0, 0.5, mat_int_finish, mat_ext_finish), # 2x6, 24" o.c. + R10
1457
+ WoodStudConstructionSet.new(Material.Stud2x6, 0.20, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x6, 24" o.c.
1458
+ WoodStudConstructionSet.new(Material.Stud2x4, 0.23, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x4, 16" o.c.
1459
+ WoodStudConstructionSet.new(Material.Stud2x4, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
1272
1460
  ]
1273
1461
  match, constr_set, cavity_r = pick_wood_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1274
1462
 
1275
- apply_wood_stud_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1463
+ apply_wood_stud_wall(runner, model, surfaces, "#{wall_id} construction",
1276
1464
  cavity_r, install_grade, constr_set.stud.thick_in,
1277
1465
  cavity_filled, constr_set.framing_factor,
1278
- constr_set.drywall_thick_in, constr_set.osb_thick_in,
1279
- constr_set.rigid_r, constr_set.exterior_material,
1280
- 0, inside_film, outside_film)
1466
+ constr_set.mat_int_finish, constr_set.osb_thick_in,
1467
+ constr_set.rigid_r, constr_set.mat_ext_finish,
1468
+ inside_film, outside_film, solar_absorptance,
1469
+ emittance)
1281
1470
  elsif wall_type == HPXML::WallTypeSteelStud
1282
1471
  install_grade = 1
1283
1472
  cavity_filled = true
1284
1473
  corr_factor = 0.45
1285
1474
 
1286
1475
  constr_sets = [
1287
- SteelStudConstructionSet.new(5.5, corr_factor, 0.20, 10.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x6, 24" o.c. + R20
1288
- SteelStudConstructionSet.new(5.5, corr_factor, 0.20, 10.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x6, 24" o.c. + R10
1289
- SteelStudConstructionSet.new(5.5, corr_factor, 0.20, 0.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x6, 24" o.c.
1290
- SteelStudConstructionSet.new(3.5, corr_factor, 0.23, 0.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x4, 16" o.c.
1291
- SteelStudConstructionSet.new(3.5, 1.0, 0.01, 0.0, 0.0, 0.0, fallback_mat_ext_finish), # Fallback
1476
+ SteelStudConstructionSet.new(5.5, corr_factor, 0.20, 10.0, 0.5, mat_int_finish, mat_ext_finish), # 2x6, 24" o.c. + R20
1477
+ SteelStudConstructionSet.new(5.5, corr_factor, 0.20, 10.0, 0.5, mat_int_finish, mat_ext_finish), # 2x6, 24" o.c. + R10
1478
+ SteelStudConstructionSet.new(5.5, corr_factor, 0.20, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x6, 24" o.c.
1479
+ SteelStudConstructionSet.new(3.5, corr_factor, 0.23, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x4, 16" o.c.
1480
+ SteelStudConstructionSet.new(3.5, 1.0, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
1292
1481
  ]
1293
1482
  match, constr_set, cavity_r = pick_steel_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1294
1483
 
1295
- apply_steel_stud_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1484
+ apply_steel_stud_wall(runner, model, surfaces, "#{wall_id} construction",
1296
1485
  cavity_r, install_grade, constr_set.cavity_thick_in,
1297
1486
  cavity_filled, constr_set.framing_factor,
1298
- constr_set.corr_factor, constr_set.drywall_thick_in,
1487
+ constr_set.corr_factor, constr_set.mat_int_finish,
1299
1488
  constr_set.osb_thick_in, constr_set.rigid_r,
1300
- constr_set.exterior_material, inside_film, outside_film)
1489
+ constr_set.mat_ext_finish, inside_film, outside_film,
1490
+ solar_absorptance, emittance)
1301
1491
  elsif wall_type == HPXML::WallTypeDoubleWoodStud
1302
1492
  install_grade = 1
1303
1493
  is_staggered = false
1304
1494
 
1305
1495
  constr_sets = [
1306
- DoubleStudConstructionSet.new(Material.Stud2x4, 0.23, 24.0, 0.0, 0.5, drywall_thick_in, mat_ext_finish), # 2x4, 24" o.c.
1307
- DoubleStudConstructionSet.new(Material.Stud2x4, 0.01, 16.0, 0.0, 0.0, 0.0, fallback_mat_ext_finish), # Fallback
1496
+ DoubleStudConstructionSet.new(Material.Stud2x4, 0.23, 24.0, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x4, 24" o.c.
1497
+ DoubleStudConstructionSet.new(Material.Stud2x4, 0.01, 16.0, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
1308
1498
  ]
1309
1499
  match, constr_set, cavity_r = pick_double_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1310
1500
 
1311
- apply_double_stud_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1501
+ apply_double_stud_wall(runner, model, surfaces, "#{wall_id} construction",
1312
1502
  cavity_r, install_grade, constr_set.stud.thick_in,
1313
1503
  constr_set.stud.thick_in, constr_set.framing_factor,
1314
1504
  constr_set.framing_spacing, is_staggered,
1315
- constr_set.drywall_thick_in, constr_set.osb_thick_in,
1316
- constr_set.rigid_r, constr_set.exterior_material,
1317
- inside_film, outside_film)
1505
+ constr_set.mat_int_finish, constr_set.osb_thick_in,
1506
+ constr_set.rigid_r, constr_set.mat_ext_finish,
1507
+ inside_film, outside_film, solar_absorptance,
1508
+ emittance)
1318
1509
  elsif wall_type == HPXML::WallTypeCMU
1319
1510
  density = 119.0 # lb/ft^3
1320
1511
  furring_r = 0
@@ -1322,51 +1513,53 @@ class Constructions
1322
1513
  furring_spacing = 0
1323
1514
 
1324
1515
  constr_sets = [
1325
- CMUConstructionSet.new(8.0, 1.4, 0.08, 0.5, drywall_thick_in, mat_ext_finish), # 8" perlite-filled CMU
1326
- CMUConstructionSet.new(6.0, 5.29, 0.01, 0.0, 0.0, fallback_mat_ext_finish), # Fallback (6" hollow CMU)
1516
+ CMUConstructionSet.new(8.0, 1.4, 0.08, 0.5, mat_int_finish, mat_ext_finish), # 8" perlite-filled CMU
1517
+ CMUConstructionSet.new(6.0, 5.29, 0.01, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback (6" hollow CMU)
1327
1518
  ]
1328
1519
  match, constr_set, rigid_r = pick_cmu_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1329
1520
 
1330
- apply_cmu_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1521
+ apply_cmu_wall(runner, model, surfaces, "#{wall_id} construction",
1331
1522
  constr_set.thick_in, constr_set.cond_in, density,
1332
1523
  constr_set.framing_factor, furring_r,
1333
1524
  furring_cavity_depth_in, furring_spacing,
1334
- constr_set.drywall_thick_in, constr_set.osb_thick_in,
1335
- rigid_r, constr_set.exterior_material, inside_film,
1336
- outside_film)
1525
+ constr_set.mat_int_finish, constr_set.osb_thick_in,
1526
+ rigid_r, constr_set.mat_ext_finish, inside_film,
1527
+ outside_film, solar_absorptance, emittance)
1337
1528
  elsif wall_type == HPXML::WallTypeSIP
1338
1529
  sheathing_thick_in = 0.44
1339
1530
 
1340
1531
  constr_sets = [
1341
- SIPConstructionSet.new(10.0, 0.16, 0.0, sheathing_thick_in, 0.5, drywall_thick_in, mat_ext_finish), # 10" SIP core
1342
- SIPConstructionSet.new(5.0, 0.16, 0.0, sheathing_thick_in, 0.5, drywall_thick_in, mat_ext_finish), # 5" SIP core
1343
- SIPConstructionSet.new(1.0, 0.01, 0.0, sheathing_thick_in, 0.0, 0.0, fallback_mat_ext_finish), # Fallback
1532
+ SIPConstructionSet.new(10.0, 0.16, 0.0, sheathing_thick_in, 0.5, mat_int_finish, mat_ext_finish), # 10" SIP core
1533
+ SIPConstructionSet.new(5.0, 0.16, 0.0, sheathing_thick_in, 0.5, mat_int_finish, mat_ext_finish), # 5" SIP core
1534
+ SIPConstructionSet.new(1.0, 0.01, 0.0, sheathing_thick_in, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
1344
1535
  ]
1345
1536
  match, constr_set, cavity_r = pick_sip_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1346
1537
 
1347
- apply_sip_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1538
+ apply_sip_wall(runner, model, surfaces, "#{wall_id} construction",
1348
1539
  cavity_r, constr_set.thick_in, constr_set.framing_factor,
1349
- constr_set.sheath_thick_in, constr_set.drywall_thick_in,
1540
+ constr_set.sheath_thick_in, constr_set.mat_int_finish,
1350
1541
  constr_set.osb_thick_in, constr_set.rigid_r,
1351
- constr_set.exterior_material, inside_film, outside_film)
1542
+ constr_set.mat_ext_finish, inside_film, outside_film,
1543
+ solar_absorptance, emittance)
1352
1544
  elsif wall_type == HPXML::WallTypeICF
1353
1545
  constr_sets = [
1354
- ICFConstructionSet.new(2.0, 4.0, 0.08, 0.0, 0.5, drywall_thick_in, mat_ext_finish), # ICF w/4" concrete and 2" rigid ins layers
1355
- ICFConstructionSet.new(1.0, 1.0, 0.01, 0.0, 0.0, 0.0, fallback_mat_ext_finish), # Fallback
1546
+ ICFConstructionSet.new(2.0, 4.0, 0.08, 0.0, 0.5, mat_int_finish, mat_ext_finish), # ICF w/4" concrete and 2" rigid ins layers
1547
+ ICFConstructionSet.new(1.0, 1.0, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
1356
1548
  ]
1357
1549
  match, constr_set, icf_r = pick_icf_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1358
1550
 
1359
- apply_icf_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1551
+ apply_icf_wall(runner, model, surfaces, "#{wall_id} construction",
1360
1552
  icf_r, constr_set.ins_thick_in,
1361
1553
  constr_set.concrete_thick_in, constr_set.framing_factor,
1362
- constr_set.drywall_thick_in, constr_set.osb_thick_in,
1363
- constr_set.rigid_r, constr_set.exterior_material,
1364
- inside_film, outside_film)
1554
+ constr_set.mat_int_finish, constr_set.osb_thick_in,
1555
+ constr_set.rigid_r, constr_set.mat_ext_finish,
1556
+ inside_film, outside_film, solar_absorptance,
1557
+ emittance)
1365
1558
  elsif [HPXML::WallTypeConcrete, HPXML::WallTypeBrick, HPXML::WallTypeAdobe, HPXML::WallTypeStrawBale, HPXML::WallTypeStone, HPXML::WallTypeLog].include? wall_type
1366
1559
  constr_sets = [
1367
- GenericConstructionSet.new(10.0, 0.5, drywall_thick_in, mat_ext_finish), # w/R-10 rigid
1368
- GenericConstructionSet.new(0.0, 0.5, drywall_thick_in, mat_ext_finish), # Standard
1369
- GenericConstructionSet.new(0.0, 0.0, 0.0, fallback_mat_ext_finish), # Fallback
1560
+ GenericConstructionSet.new(10.0, 0.5, mat_int_finish, mat_ext_finish), # w/R-10 rigid
1561
+ GenericConstructionSet.new(0.0, 0.5, mat_int_finish, mat_ext_finish), # Standard
1562
+ GenericConstructionSet.new(0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
1370
1563
  ]
1371
1564
  match, constr_set, layer_r = pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film, wall_id)
1372
1565
 
@@ -1398,11 +1591,12 @@ class Constructions
1398
1591
  denss = [base_mat.rho]
1399
1592
  specheats = [base_mat.cp]
1400
1593
 
1401
- apply_generic_layered_wall(runner, model, surfaces, wall, "#{wall_id} construction",
1594
+ apply_generic_layered_wall(runner, model, surfaces, "#{wall_id} construction",
1402
1595
  thick_ins, conds, denss, specheats,
1403
- constr_set.drywall_thick_in, constr_set.osb_thick_in,
1404
- constr_set.rigid_r, constr_set.exterior_material,
1405
- inside_film, outside_film)
1596
+ constr_set.mat_int_finish, constr_set.osb_thick_in,
1597
+ constr_set.rigid_r, constr_set.mat_ext_finish,
1598
+ inside_film, outside_film, solar_absorptance,
1599
+ emittance)
1406
1600
  else
1407
1601
  fail "Unexpected wall type '#{wall_type}'."
1408
1602
  end
@@ -1424,7 +1618,7 @@ class Constructions
1424
1618
  # Assumes installation quality 1
1425
1619
  cavity_frac = 1.0 - constr_set.framing_factor
1426
1620
  cavity_r = cavity_frac / (1.0 / assembly_r - constr_set.framing_factor / (constr_set.stud.rvalue + non_cavity_r)) - non_cavity_r
1427
- if cavity_r > 0 # Choose this construction set
1621
+ if cavity_r > 0 && cavity_r < Float::INFINITY # Choose this construction set
1428
1622
  return true, constr_set, cavity_r
1429
1623
  end
1430
1624
  end
@@ -1445,7 +1639,7 @@ class Constructions
1445
1639
  # Calculate effective cavity R-value
1446
1640
  # Assumes installation quality 1
1447
1641
  cavity_r = (assembly_r - non_cavity_r) / constr_set.corr_factor
1448
- if cavity_r > 0 # Choose this construction set
1642
+ if cavity_r > 0 && cavity_r < Float::INFINITY # Choose this construction set
1449
1643
  return true, constr_set, cavity_r
1450
1644
  end
1451
1645
  end
@@ -1476,7 +1670,7 @@ class Constructions
1476
1670
  e = misc_framing_factor
1477
1671
  cavity_r = ((3 * c + d) * Math.sqrt(4 * a**2 * b**2 + 12 * a**2 * b * e + 4 * a**2 * b + 9 * a**2 * e**2 - 6 * a**2 * e + a**2 - 48 * a * b * c - 16 * a * b * d - 36 * a * c * e + 12 * a * c - 12 * a * d * e + 4 * a * d + 36 * c**2 + 24 * c * d + 4 * d**2) + 6 * a * b * c + 2 * a * b * d + 3 * a * c * e + 3 * a * c + 3 * a * d * e + a * d - 18 * c**2 - 18 * c * d - 4 * d**2) / (2 * (-3 * a * e + 9 * c + 3 * d))
1478
1672
  cavity_r = 3 * cavity_r
1479
- if cavity_r > 0 # Choose this construction set
1673
+ if cavity_r > 0 && cavity_r < Float::INFINITY # Choose this construction set
1480
1674
  return true, constr_set, cavity_r
1481
1675
  end
1482
1676
  end
@@ -1493,14 +1687,14 @@ class Constructions
1493
1687
 
1494
1688
  film_r = inside_film.rvalue + outside_film.rvalue
1495
1689
  non_cavity_r = calc_non_cavity_r(film_r, constr_set)
1496
- non_cavity_r += Material.new(nil, constr_set.sheath_thick_in, BaseMaterial.Wood).rvalue
1690
+ non_cavity_r += Material.new(thick_in: constr_set.sheath_thick_in, mat_base: BaseMaterial.Wood).rvalue
1497
1691
 
1498
1692
  # Calculate effective SIP core R-value
1499
1693
  # Solved in Wolfram Alpha: https://www.wolframalpha.com/input/?i=1%2FA+%3D+B%2F(C%2BD)+%2B+E%2F(2*F%2BG%2FH*x%2BD)+%2B+(1-B-E)%2F(x%2BD)
1500
1694
  spline_thick_in = 0.5 # in
1501
1695
  ins_thick_in = constr_set.thick_in - (2.0 * spline_thick_in) # in
1502
- framing_r = Material.new(nil, constr_set.thick_in, BaseMaterial.Wood).rvalue
1503
- spline_r = Material.new(nil, spline_thick_in, BaseMaterial.Wood).rvalue
1696
+ framing_r = Material.new(thick_in: constr_set.thick_in, mat_base: BaseMaterial.Wood).rvalue
1697
+ spline_r = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.Wood).rvalue
1504
1698
  spline_frac = 4.0 / 48.0 # One 4" spline for every 48" wide panel
1505
1699
  cavity_frac = 1.0 - (spline_frac + constr_set.framing_factor)
1506
1700
  a = assembly_r
@@ -1512,7 +1706,7 @@ class Constructions
1512
1706
  g = ins_thick_in
1513
1707
  h = constr_set.thick_in
1514
1708
  cavity_r = (Math.sqrt((a * b * c * g - a * b * d * h - 2 * a * b * f * h + a * c * e * g - a * c * e * h - a * c * g + a * d * e * g - a * d * e * h - a * d * g + c * d * g + c * d * h + 2 * c * f * h + d**2 * g + d**2 * h + 2 * d * f * h)**2 - 4 * (-a * b * g + c * g + d * g) * (a * b * c * d * h + 2 * a * b * c * f * h - a * c * d * h + 2 * a * c * e * f * h - 2 * a * c * f * h - a * d**2 * h + 2 * a * d * e * f * h - 2 * a * d * f * h + c * d**2 * h + 2 * c * d * f * h + d**3 * h + 2 * d**2 * f * h)) - a * b * c * g + a * b * d * h + 2 * a * b * f * h - a * c * e * g + a * c * e * h + a * c * g - a * d * e * g + a * d * e * h + a * d * g - c * d * g - c * d * h - 2 * c * f * h - g * d**2 - d**2 * h - 2 * d * f * h) / (2 * (-a * b * g + c * g + d * g))
1515
- if cavity_r > 0 # Choose this construction set
1709
+ if cavity_r > 0 && cavity_r < Float::INFINITY # Choose this construction set
1516
1710
  return true, constr_set, cavity_r
1517
1711
  end
1518
1712
  end
@@ -1535,11 +1729,11 @@ class Constructions
1535
1729
  # Solved in Wolfram Alpha: https://www.wolframalpha.com/input/?i=1%2FA+%3D+B%2F(C%2BE%2Bx)+%2B+(1-B)%2F(D%2BE%2Bx)
1536
1730
  a = assembly_r
1537
1731
  b = constr_set.framing_factor
1538
- c = Material.new(nil, constr_set.thick_in, BaseMaterial.Wood).rvalue # Framing
1539
- d = Material.new(nil, constr_set.thick_in, BaseMaterial.Concrete, constr_set.cond_in).rvalue # Concrete
1732
+ c = Material.new(thick_in: constr_set.thick_in, mat_base: BaseMaterial.Wood).rvalue # Framing
1733
+ d = Material.new(thick_in: constr_set.thick_in, mat_base: BaseMaterial.Concrete, k_in: constr_set.cond_in).rvalue # Concrete
1540
1734
  e = non_cavity_r
1541
1735
  rigid_r = 0.5 * (Math.sqrt(a**2 - 4 * a * b * c + 4 * a * b * d + 2 * a * c - 2 * a * d + c**2 - 2 * c * d + d**2) + a - c - d - 2 * e)
1542
- if rigid_r > 0 # Choose this construction set
1736
+ if rigid_r > 0 && rigid_r < Float::INFINITY # Choose this construction set
1543
1737
  return true, constr_set, rigid_r
1544
1738
  end
1545
1739
  end
@@ -1561,11 +1755,11 @@ class Constructions
1561
1755
  # Solved in Wolfram Alpha: https://www.wolframalpha.com/input/?i=1%2FA+%3D+B%2F(C%2BE)+%2B+(1-B)%2F(D%2BE%2B2*x)
1562
1756
  a = assembly_r
1563
1757
  b = constr_set.framing_factor
1564
- c = Material.new(nil, 2 * constr_set.ins_thick_in + constr_set.concrete_thick_in, BaseMaterial.Wood).rvalue # Framing
1565
- d = Material.new(nil, constr_set.concrete_thick_in, BaseMaterial.Concrete).rvalue # Concrete
1758
+ c = Material.new(thick_in: 2 * constr_set.ins_thick_in + constr_set.concrete_thick_in, mat_base: BaseMaterial.Wood).rvalue # Framing
1759
+ d = Material.new(thick_in: constr_set.concrete_thick_in, mat_base: BaseMaterial.Concrete).rvalue # Concrete
1566
1760
  e = non_cavity_r
1567
1761
  icf_r = (a * b * c - a * b * d - a * c - a * e + c * d + c * e + d * e + e**2) / (2 * (a * b - c - e))
1568
- if icf_r > 0 # Choose this construction set
1762
+ if icf_r > 0 && icf_r < Float::INFINITY # Choose this construction set
1569
1763
  return true, constr_set, icf_r
1570
1764
  end
1571
1765
  end
@@ -1585,7 +1779,7 @@ class Constructions
1585
1779
 
1586
1780
  # Calculate effective ins layer R-value
1587
1781
  layer_r = assembly_r - non_cavity_r
1588
- if layer_r > 0 # Choose this construction set
1782
+ if layer_r > 0 && layer_r < Float::INFINITY # Choose this construction set
1589
1783
  return true, constr_set, layer_r
1590
1784
  end
1591
1785
  end
@@ -1713,13 +1907,29 @@ class Construction
1713
1907
  end
1714
1908
  end
1715
1909
 
1910
+ def set_exterior_material_properties(solar_absorptance = 0.75, emittance = 0.9)
1911
+ @layers_materials[1].each do |exterior_material|
1912
+ exterior_material.sAbs = solar_absorptance
1913
+ exterior_material.tAbs = emittance
1914
+ end
1915
+ end
1916
+
1917
+ def set_interior_material_properties(solar_absorptance = 0.6, emittance = 0.9, debug: false)
1918
+ if @layers_materials.size > 3 # Only apply if there is a separate interior material
1919
+ @layers_materials[-2].each do |interior_material|
1920
+ interior_material.sAbs = solar_absorptance
1921
+ interior_material.tAbs = emittance
1922
+ end
1923
+ end
1924
+ end
1925
+
1716
1926
  private
1717
1927
 
1718
1928
  def get_parallel_material(curr_layer_num, name)
1719
1929
  # Returns a Material object with effective properties for the specified
1720
1930
  # parallel path layer of the construction.
1721
1931
 
1722
- mat = Material.new(name)
1932
+ mat = Material.new(name: name)
1723
1933
 
1724
1934
  curr_layer_materials = @layers_materials[curr_layer_num]
1725
1935
 
@@ -1767,6 +1977,12 @@ class Construction
1767
1977
  mat.cp += (curr_layer_materials[path_num].cp * curr_layer_materials[path_num].rho * path_frac) / mat.rho
1768
1978
  end
1769
1979
 
1980
+ # Material solar absorptance
1981
+ mat.sAbs = curr_layer_materials[0].sAbs # All paths have equal solar absorptance
1982
+
1983
+ # Material thermal absorptance
1984
+ mat.tAbs = curr_layer_materials[0].tAbs # All paths have equal thermal absorptance
1985
+
1770
1986
  return mat
1771
1987
  end
1772
1988
 
@@ -1822,8 +2038,8 @@ class Construction
1822
2038
  # Check for valid object types
1823
2039
  @layers_materials.each do |layer_materials|
1824
2040
  layer_materials.each do |mat|
1825
- if (not mat.is_a? SimpleMaterial) && (not mat.is_a? Material)
1826
- fail 'Invalid construction: Materials must be instances of SimpleMaterial or Material classes.'
2041
+ if (not mat.is_a? Material)
2042
+ fail 'Invalid construction: Materials must be instances of Material classes.'
1827
2043
  end
1828
2044
  end
1829
2045
  end
@@ -1835,17 +2051,29 @@ class Construction
1835
2051
  end
1836
2052
  end
1837
2053
 
1838
- # Check if multiple materials in a given layer have differing thicknesses
2054
+ # Check if multiple materials in a given layer have differing thicknesses/absorptances
1839
2055
  @layers_materials.each do |layer_materials|
1840
2056
  next unless layer_materials.size > 1
1841
2057
 
1842
2058
  thick_in = nil
2059
+ solar_abs = nil
2060
+ emitt = nil
1843
2061
  layer_materials.each do |mat|
1844
2062
  if thick_in.nil?
1845
2063
  thick_in = mat.thick_in
1846
2064
  elsif thick_in != mat.thick_in
1847
2065
  fail 'Invalid construction: Materials in a layer have different thicknesses.'
1848
2066
  end
2067
+ if solar_abs.nil?
2068
+ solar_abs = mat.sAbs
2069
+ elsif solar_abs != mat.sAbs
2070
+ fail 'Invalid construction: Materials in a layer have different solar absorptances.'
2071
+ end
2072
+ if emitt.nil?
2073
+ emitt = mat.tAbs
2074
+ elsif emitt != mat.tAbs
2075
+ fail 'Invalid construction: Materials in a layer have different thermal absorptances.'
2076
+ end
1849
2077
  end
1850
2078
  end
1851
2079
 
@@ -1868,20 +2096,7 @@ class Construction
1868
2096
  def self.create_os_material(runner, model, material)
1869
2097
  name = material.name
1870
2098
  tolerance = 0.0001
1871
- if material.is_a? SimpleMaterial
1872
- # Material already exists?
1873
- model.getMasslessOpaqueMaterials.each do |mat|
1874
- next if mat.roughness.downcase.to_s != 'rough'
1875
- next if (mat.thermalResistance - UnitConversions.convert(material.rvalue, 'hr*ft^2*F/Btu', 'm^2*K/W')).abs > tolerance
1876
-
1877
- return mat
1878
- end
1879
- # New material
1880
- mat = OpenStudio::Model::MasslessOpaqueMaterial.new(model)
1881
- mat.setName(name)
1882
- mat.setRoughness('Rough')
1883
- mat.setThermalResistance(UnitConversions.convert(material.rvalue, 'hr*ft^2*F/Btu', 'm^2*K/W'))
1884
- elsif material.is_a? GlazingMaterial
2099
+ if material.is_a? GlazingMaterial
1885
2100
  max_ufactor = UnitConversions.convert(7.0, 'W/(m^2*K)', 'Btu/(hr*ft^2*F)') # Max value EnergyPlus allows
1886
2101
  if material.ufactor > max_ufactor
1887
2102
  runner.registerWarning("Glazing U-factor (#{material.ufactor}) for '#{material.name}' above maximum expected value. U-factor decreased to #{max_ufactor.round(2)}.")
@@ -1890,11 +2105,13 @@ class Construction
1890
2105
 
1891
2106
  # Material already exists?
1892
2107
  model.getSimpleGlazings.each do |mat|
2108
+ next if !mat.name.to_s.start_with?(material.name)
1893
2109
  next if (mat.uFactor - UnitConversions.convert(material.ufactor, 'Btu/(hr*ft^2*F)', 'W/(m^2*K)')).abs > tolerance
1894
2110
  next if (mat.solarHeatGainCoefficient - material.shgc).abs > tolerance
1895
2111
 
1896
2112
  return mat
1897
2113
  end
2114
+
1898
2115
  # New material
1899
2116
  mat = OpenStudio::Model::SimpleGlazing.new(model)
1900
2117
  mat.setName(name)
@@ -1903,17 +2120,18 @@ class Construction
1903
2120
  else
1904
2121
  # Material already exists?
1905
2122
  model.getStandardOpaqueMaterials.each do |mat|
2123
+ next if !mat.name.to_s.start_with?(material.name)
1906
2124
  next if mat.roughness.downcase.to_s != 'rough'
1907
2125
  next if (mat.thickness - UnitConversions.convert(material.thick_in, 'in', 'm')).abs > tolerance
1908
2126
  next if (mat.conductivity - UnitConversions.convert(material.k, 'Btu/(hr*ft*R)', 'W/(m*K)')).abs > tolerance
1909
2127
  next if (mat.density - UnitConversions.convert(material.rho, 'lbm/ft^3', 'kg/m^3')).abs > tolerance
1910
2128
  next if (mat.specificHeat - UnitConversions.convert(material.cp, 'Btu/(lbm*R)', 'J/(kg*K)')).abs > tolerance
1911
- next if (not material.tAbs.nil?) && ((mat.thermalAbsorptance - material.tAbs).abs > tolerance)
1912
- next if (not material.sAbs.nil?) && ((mat.solarAbsorptance - material.sAbs).abs > tolerance)
1913
- next if (not material.vAbs.nil?) && ((mat.visibleAbsorptance - material.vAbs).abs > tolerance)
2129
+ next if (mat.thermalAbsorptance - material.tAbs.to_f).abs > tolerance
2130
+ next if (mat.solarAbsorptance - material.sAbs.to_f).abs > tolerance
1914
2131
 
1915
2132
  return mat
1916
2133
  end
2134
+
1917
2135
  # New material
1918
2136
  mat = OpenStudio::Model::StandardOpaqueMaterial.new(model)
1919
2137
  mat.setName(name)
@@ -1927,9 +2145,7 @@ class Construction
1927
2145
  end
1928
2146
  if not material.sAbs.nil?
1929
2147
  mat.setSolarAbsorptance(material.sAbs)
1930
- end
1931
- if not material.vAbs.nil?
1932
- mat.setVisibleAbsorptance(material.vAbs)
2148
+ mat.setVisibleAbsorptance(material.sAbs)
1933
2149
  end
1934
2150
  end
1935
2151
  return mat
@@ -1937,88 +2153,88 @@ class Construction
1937
2153
  end
1938
2154
 
1939
2155
  class WoodStudConstructionSet
1940
- def initialize(stud, framing_factor, rigid_r, osb_thick_in, drywall_thick_in, exterior_material)
2156
+ def initialize(stud, framing_factor, rigid_r, osb_thick_in, mat_int_finish, mat_ext_finish)
1941
2157
  @stud = stud
1942
2158
  @framing_factor = framing_factor
1943
2159
  @rigid_r = rigid_r
1944
2160
  @osb_thick_in = osb_thick_in
1945
- @drywall_thick_in = drywall_thick_in
1946
- @exterior_material = exterior_material
2161
+ @mat_int_finish = mat_int_finish
2162
+ @mat_ext_finish = mat_ext_finish
1947
2163
  end
1948
- attr_accessor(:stud, :framing_factor, :rigid_r, :osb_thick_in, :drywall_thick_in, :exterior_material)
2164
+ attr_accessor(:stud, :framing_factor, :rigid_r, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
1949
2165
  end
1950
2166
 
1951
2167
  class SteelStudConstructionSet
1952
- def initialize(cavity_thick_in, corr_factor, framing_factor, rigid_r, osb_thick_in, drywall_thick_in, exterior_material)
2168
+ def initialize(cavity_thick_in, corr_factor, framing_factor, rigid_r, osb_thick_in, mat_int_finish, mat_ext_finish)
1953
2169
  @cavity_thick_in = cavity_thick_in
1954
2170
  @corr_factor = corr_factor
1955
2171
  @framing_factor = framing_factor
1956
2172
  @rigid_r = rigid_r
1957
2173
  @osb_thick_in = osb_thick_in
1958
- @drywall_thick_in = drywall_thick_in
1959
- @exterior_material = exterior_material
2174
+ @mat_int_finish = mat_int_finish
2175
+ @mat_ext_finish = mat_ext_finish
1960
2176
  end
1961
- attr_accessor(:cavity_thick_in, :corr_factor, :framing_factor, :rigid_r, :osb_thick_in, :drywall_thick_in, :exterior_material)
2177
+ attr_accessor(:cavity_thick_in, :corr_factor, :framing_factor, :rigid_r, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
1962
2178
  end
1963
2179
 
1964
2180
  class DoubleStudConstructionSet
1965
- def initialize(stud, framing_factor, framing_spacing, rigid_r, osb_thick_in, drywall_thick_in, exterior_material)
2181
+ def initialize(stud, framing_factor, framing_spacing, rigid_r, osb_thick_in, mat_int_finish, mat_ext_finish)
1966
2182
  @stud = stud
1967
2183
  @framing_factor = framing_factor
1968
2184
  @framing_spacing = framing_spacing
1969
2185
  @rigid_r = rigid_r
1970
2186
  @osb_thick_in = osb_thick_in
1971
- @drywall_thick_in = drywall_thick_in
1972
- @exterior_material = exterior_material
2187
+ @mat_int_finish = mat_int_finish
2188
+ @mat_ext_finish = mat_ext_finish
1973
2189
  end
1974
- attr_accessor(:stud, :framing_factor, :framing_spacing, :rigid_r, :osb_thick_in, :drywall_thick_in, :exterior_material)
2190
+ attr_accessor(:stud, :framing_factor, :framing_spacing, :rigid_r, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
1975
2191
  end
1976
2192
 
1977
2193
  class SIPConstructionSet
1978
- def initialize(thick_in, framing_factor, rigid_r, sheath_thick_in, osb_thick_in, drywall_thick_in, exterior_material)
2194
+ def initialize(thick_in, framing_factor, rigid_r, sheath_thick_in, osb_thick_in, mat_int_finish, mat_ext_finish)
1979
2195
  @thick_in = thick_in
1980
2196
  @framing_factor = framing_factor
1981
2197
  @rigid_r = rigid_r
1982
2198
  @sheath_thick_in = sheath_thick_in
1983
2199
  @osb_thick_in = osb_thick_in
1984
- @drywall_thick_in = drywall_thick_in
1985
- @exterior_material = exterior_material
2200
+ @mat_int_finish = mat_int_finish
2201
+ @mat_ext_finish = mat_ext_finish
1986
2202
  end
1987
- attr_accessor(:thick_in, :framing_factor, :rigid_r, :sheath_thick_in, :osb_thick_in, :drywall_thick_in, :exterior_material)
2203
+ attr_accessor(:thick_in, :framing_factor, :rigid_r, :sheath_thick_in, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
1988
2204
  end
1989
2205
 
1990
2206
  class CMUConstructionSet
1991
- def initialize(thick_in, cond_in, framing_factor, osb_thick_in, drywall_thick_in, exterior_material)
2207
+ def initialize(thick_in, cond_in, framing_factor, osb_thick_in, mat_int_finish, mat_ext_finish)
1992
2208
  @thick_in = thick_in
1993
2209
  @cond_in = cond_in
1994
2210
  @framing_factor = framing_factor
1995
2211
  @osb_thick_in = osb_thick_in
1996
- @drywall_thick_in = drywall_thick_in
1997
- @exterior_material = exterior_material
2212
+ @mat_int_finish = mat_int_finish
2213
+ @mat_ext_finish = mat_ext_finish
1998
2214
  @rigid_r = nil # solved for
1999
2215
  end
2000
- attr_accessor(:thick_in, :cond_in, :framing_factor, :rigid_r, :osb_thick_in, :drywall_thick_in, :exterior_material)
2216
+ attr_accessor(:thick_in, :cond_in, :framing_factor, :rigid_r, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
2001
2217
  end
2002
2218
 
2003
2219
  class ICFConstructionSet
2004
- def initialize(ins_thick_in, concrete_thick_in, framing_factor, rigid_r, osb_thick_in, drywall_thick_in, exterior_material)
2220
+ def initialize(ins_thick_in, concrete_thick_in, framing_factor, rigid_r, osb_thick_in, mat_int_finish, mat_ext_finish)
2005
2221
  @ins_thick_in = ins_thick_in
2006
2222
  @concrete_thick_in = concrete_thick_in
2007
2223
  @framing_factor = framing_factor
2008
2224
  @rigid_r = rigid_r
2009
2225
  @osb_thick_in = osb_thick_in
2010
- @drywall_thick_in = drywall_thick_in
2011
- @exterior_material = exterior_material
2226
+ @mat_int_finish = mat_int_finish
2227
+ @mat_ext_finish = mat_ext_finish
2012
2228
  end
2013
- attr_accessor(:ins_thick_in, :concrete_thick_in, :framing_factor, :rigid_r, :osb_thick_in, :drywall_thick_in, :exterior_material)
2229
+ attr_accessor(:ins_thick_in, :concrete_thick_in, :framing_factor, :rigid_r, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
2014
2230
  end
2015
2231
 
2016
2232
  class GenericConstructionSet
2017
- def initialize(rigid_r, osb_thick_in, drywall_thick_in, exterior_material)
2233
+ def initialize(rigid_r, osb_thick_in, mat_int_finish, mat_ext_finish)
2018
2234
  @rigid_r = rigid_r
2019
2235
  @osb_thick_in = osb_thick_in
2020
- @drywall_thick_in = drywall_thick_in
2021
- @exterior_material = exterior_material
2236
+ @mat_int_finish = mat_int_finish
2237
+ @mat_ext_finish = mat_ext_finish
2022
2238
  end
2023
- attr_accessor(:rigid_r, :osb_thick_in, :drywall_thick_in, :exterior_material)
2239
+ attr_accessor(:rigid_r, :osb_thick_in, :mat_int_finish, :mat_ext_finish)
2024
2240
  end