urbanopt-cli 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (732) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +2 -2
  3. data/CHANGELOG.md +15 -0
  4. data/Gemfile +11 -11
  5. data/README.md +1 -1
  6. data/example_files/Gemfile +3 -3
  7. data/example_files/mappers/Baseline.rb +233 -204
  8. data/example_files/mappers/HighEfficiency.rb +41 -8
  9. data/example_files/measures/BuildResidentialModel/measure.rb +25 -5
  10. data/example_files/resources/hpxml-measures/.gitignore +1 -2
  11. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +364 -694
  12. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1506 -889
  13. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +12 -0
  14. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +1 -1
  15. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +1068 -0
  16. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_README.md +45 -0
  17. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_clothes_dryer_power_consumption_dist.csv +95 -0
  18. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_clothes_dryer_power_duration_dist.csv +95 -0
  19. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_clothes_washer_cluster_size_probability.csv +6 -0
  20. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_clothes_washer_event_duration_probability.csv +44 -0
  21. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_clothes_washer_power_consumption_dist.csv +93 -0
  22. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_clothes_washer_power_duration_dist.csv +93 -0
  23. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +61 -0
  24. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_cooking_power_consumption_dist.csv +63 -0
  25. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_cooking_power_duration_dist.csv +63 -0
  26. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_dishwasher_cluster_size_probability.csv +8 -0
  27. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_dishwasher_event_duration_probability.csv +192 -0
  28. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_dishwasher_power_consumption_dist.csv +56 -0
  29. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_dishwasher_power_duration_dist.csv +56 -0
  30. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_shower_cluster_size_probability.csv +4 -0
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_shower_event_duration_probability.csv +1531 -0
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_cooking_evening_duration_probability.csv +10 -0
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_cooking_midday_duration_probability.csv +20 -0
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_cooking_morning_duration_probability.csv +19 -0
  35. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +7 -0
  36. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +11 -0
  37. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +11 -0
  38. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_laundry_evening_duration_probability.csv +12 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_laundry_midday_duration_probability.csv +19 -0
  40. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_laundry_morning_duration_probability.csv +19 -0
  41. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_shower_evening_duration_probability.csv +10 -0
  42. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_shower_midday_duration_probability.csv +12 -0
  43. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_0_shower_morning_duration_probability.csv +11 -0
  44. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_cooking_evening_duration_probability.csv +8 -0
  45. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_cooking_midday_duration_probability.csv +21 -0
  46. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_cooking_morning_duration_probability.csv +26 -0
  47. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +6 -0
  48. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +14 -0
  49. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +15 -0
  50. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_laundry_evening_duration_probability.csv +7 -0
  51. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_laundry_midday_duration_probability.csv +19 -0
  52. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_laundry_morning_duration_probability.csv +25 -0
  53. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_shower_evening_duration_probability.csv +9 -0
  54. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_shower_midday_duration_probability.csv +11 -0
  55. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_1_shower_morning_duration_probability.csv +14 -0
  56. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_cooking_evening_duration_probability.csv +10 -0
  57. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_cooking_midday_duration_probability.csv +16 -0
  58. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_cooking_morning_duration_probability.csv +15 -0
  59. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +7 -0
  60. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +5 -0
  61. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +5 -0
  62. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_laundry_evening_duration_probability.csv +13 -0
  63. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_laundry_midday_duration_probability.csv +12 -0
  64. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_laundry_morning_duration_probability.csv +13 -0
  65. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_shower_evening_duration_probability.csv +10 -0
  66. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_shower_midday_duration_probability.csv +10 -0
  67. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_2_shower_morning_duration_probability.csv +14 -0
  68. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_cooking_evening_duration_probability.csv +9 -0
  69. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_cooking_midday_duration_probability.csv +18 -0
  70. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_cooking_morning_duration_probability.csv +10 -0
  71. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +8 -0
  72. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +10 -0
  73. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +8 -0
  74. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_laundry_evening_duration_probability.csv +10 -0
  75. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_laundry_midday_duration_probability.csv +17 -0
  76. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_laundry_morning_duration_probability.csv +14 -0
  77. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_shower_evening_duration_probability.csv +7 -0
  78. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_shower_midday_duration_probability.csv +12 -0
  79. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_duration_probability_cluster_3_shower_morning_duration_probability.csv +14 -0
  80. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_initial_prob_cluster_0.csv +7 -0
  81. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_initial_prob_cluster_1.csv +7 -0
  82. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_initial_prob_cluster_2.csv +7 -0
  83. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_initial_prob_cluster_3.csv +7 -0
  84. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_transition_prob_cluster_0.csv +665 -0
  85. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_transition_prob_cluster_1.csv +665 -0
  86. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_transition_prob_cluster_2.csv +665 -0
  87. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_mkv_chain_transition_prob_cluster_3.csv +665 -0
  88. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_cooking_evening_duration_probability.csv +12 -0
  89. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_cooking_midday_duration_probability.csv +22 -0
  90. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_cooking_morning_duration_probability.csv +18 -0
  91. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +9 -0
  92. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +10 -0
  93. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +10 -0
  94. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_laundry_evening_duration_probability.csv +11 -0
  95. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_laundry_midday_duration_probability.csv +22 -0
  96. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_laundry_morning_duration_probability.csv +18 -0
  97. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_shower_evening_duration_probability.csv +8 -0
  98. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_shower_midday_duration_probability.csv +10 -0
  99. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_0_shower_morning_duration_probability.csv +15 -0
  100. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_cooking_evening_duration_probability.csv +14 -0
  101. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_cooking_midday_duration_probability.csv +23 -0
  102. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_cooking_morning_duration_probability.csv +24 -0
  103. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +12 -0
  104. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +14 -0
  105. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +15 -0
  106. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_laundry_evening_duration_probability.csv +12 -0
  107. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_laundry_midday_duration_probability.csv +21 -0
  108. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_laundry_morning_duration_probability.csv +22 -0
  109. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_shower_evening_duration_probability.csv +9 -0
  110. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_shower_midday_duration_probability.csv +15 -0
  111. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_1_shower_morning_duration_probability.csv +14 -0
  112. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_cooking_evening_duration_probability.csv +7 -0
  113. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_cooking_midday_duration_probability.csv +21 -0
  114. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_cooking_morning_duration_probability.csv +20 -0
  115. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +7 -0
  116. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +6 -0
  117. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +10 -0
  118. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_laundry_evening_duration_probability.csv +9 -0
  119. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_laundry_midday_duration_probability.csv +16 -0
  120. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_laundry_morning_duration_probability.csv +16 -0
  121. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_shower_evening_duration_probability.csv +9 -0
  122. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_shower_midday_duration_probability.csv +11 -0
  123. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_2_shower_morning_duration_probability.csv +14 -0
  124. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_cooking_evening_duration_probability.csv +8 -0
  125. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_cooking_midday_duration_probability.csv +24 -0
  126. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_cooking_morning_duration_probability.csv +34 -0
  127. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +6 -0
  128. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +12 -0
  129. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +13 -0
  130. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_laundry_evening_duration_probability.csv +10 -0
  131. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_laundry_midday_duration_probability.csv +24 -0
  132. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_laundry_morning_duration_probability.csv +29 -0
  133. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_shower_evening_duration_probability.csv +8 -0
  134. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_shower_midday_duration_probability.csv +14 -0
  135. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_duration_probability_cluster_3_shower_morning_duration_probability.csv +16 -0
  136. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_initial_prob_cluster_0.csv +7 -0
  137. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_initial_prob_cluster_1.csv +7 -0
  138. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_initial_prob_cluster_2.csv +7 -0
  139. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_initial_prob_cluster_3.csv +7 -0
  140. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_transition_prob_cluster_0.csv +665 -0
  141. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_transition_prob_cluster_1.csv +665 -0
  142. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_transition_prob_cluster_2.csv +665 -0
  143. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_mkv_chain_transition_prob_cluster_3.csv +665 -0
  144. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +11 -57
  145. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +11 -57
  146. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief.osw +11 -57
  147. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +11 -57
  148. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +11 -57
  149. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +11 -57
  150. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +11 -57
  151. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +11 -57
  152. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +11 -57
  153. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +11 -57
  154. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +11 -57
  155. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +11 -57
  156. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +11 -57
  157. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +11 -57
  158. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +11 -57
  159. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +11 -57
  160. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +11 -57
  161. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +11 -57
  162. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +11 -57
  163. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +11 -57
  164. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +11 -57
  165. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +11 -57
  166. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +11 -57
  167. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +11 -57
  168. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +11 -57
  169. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +11 -57
  170. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +11 -57
  171. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +11 -57
  172. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +11 -57
  173. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +11 -57
  174. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +11 -57
  175. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +11 -57
  176. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +11 -57
  177. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +11 -57
  178. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +11 -57
  179. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +11 -57
  180. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +11 -57
  181. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +11 -57
  182. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +11 -57
  183. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +11 -57
  184. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +11 -57
  185. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +11 -57
  186. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +11 -57
  187. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +11 -57
  188. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +11 -57
  189. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +11 -57
  190. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +11 -57
  191. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +11 -57
  192. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +11 -57
  193. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +11 -57
  194. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +11 -57
  195. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +11 -57
  196. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +11 -57
  197. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-uef.osw +11 -57
  198. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +11 -57
  199. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +11 -57
  200. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +11 -57
  201. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +11 -57
  202. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +11 -57
  203. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +11 -57
  204. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +11 -57
  205. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +11 -57
  206. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +11 -57
  207. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +11 -57
  208. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +11 -57
  209. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +11 -57
  210. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +11 -57
  211. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +11 -57
  212. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +11 -57
  213. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +11 -57
  214. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +11 -57
  215. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +11 -57
  216. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +11 -57
  217. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +11 -57
  218. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +11 -57
  219. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +11 -57
  220. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +11 -57
  221. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +11 -57
  222. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +11 -57
  223. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +11 -57
  224. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +11 -57
  225. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +11 -57
  226. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +11 -57
  227. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +11 -57
  228. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +11 -57
  229. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +11 -57
  230. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +11 -57
  231. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +11 -57
  232. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +11 -57
  233. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +11 -57
  234. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +11 -57
  235. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +11 -57
  236. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +11 -57
  237. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +11 -57
  238. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +11 -57
  239. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +11 -57
  240. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +11 -57
  241. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +11 -57
  242. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +11 -57
  243. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +11 -57
  244. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +11 -57
  245. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +11 -57
  246. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +11 -57
  247. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +11 -57
  248. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +11 -57
  249. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +11 -57
  250. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +11 -57
  251. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +11 -57
  252. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +11 -57
  253. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +11 -57
  254. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +11 -57
  255. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +11 -57
  256. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +11 -57
  257. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +11 -57
  258. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +11 -57
  259. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +11 -57
  260. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +11 -57
  261. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +11 -57
  262. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +11 -57
  263. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +11 -57
  264. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +11 -57
  265. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat.osw +11 -57
  266. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +11 -57
  267. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +11 -57
  268. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +11 -57
  269. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +11 -57
  270. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +11 -57
  271. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +11 -57
  272. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +11 -57
  273. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +11 -57
  274. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +11 -57
  275. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-location-epw-filepath-AMY-2012.osw → base-location-AMY-2012.osw} +12 -58
  276. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +11 -57
  277. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +11 -57
  278. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +11 -57
  279. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +11 -57
  280. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +11 -57
  281. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +11 -57
  282. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +11 -57
  283. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +11 -57
  284. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +11 -57
  285. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +11 -57
  286. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +11 -57
  287. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +11 -57
  288. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +11 -57
  289. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +11 -57
  290. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +11 -57
  291. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +11 -57
  292. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +11 -57
  293. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +11 -57
  294. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +11 -57
  295. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +11 -57
  296. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-multifamily.osw +11 -57
  297. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +11 -57
  298. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +363 -0
  299. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-location-epw-filepath.osw → base-schedules-user-specified.osw} +13 -58
  300. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +364 -0
  301. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +11 -57
  302. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +11 -57
  303. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +11 -57
  304. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +11 -57
  305. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-single-family-attached.osw +11 -57
  306. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +11 -57
  307. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +53 -2
  308. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +11 -57
  309. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-shared-water-heater.osw +11 -57
  310. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +11 -57
  311. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +11 -57
  312. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-mechvent-shared-preconditioning.osw +373 -0
  313. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-mechvent-shared.osw +367 -0
  314. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +11 -57
  315. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-shared.osw +11 -57
  316. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace.osw +11 -57
  317. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater.osw +11 -57
  318. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +11 -57
  319. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-vacancy-6-months.osw +367 -0
  320. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +11 -57
  321. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +11 -57
  322. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +11 -57
  323. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +11 -57
  324. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +11 -57
  325. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +11 -57
  326. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +11 -57
  327. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +11 -57
  328. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +11 -57
  329. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +11 -57
  330. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +11 -57
  331. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +11 -57
  332. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +11 -57
  333. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +11 -57
  334. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +11 -57
  335. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +11 -57
  336. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +11 -57
  337. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +11 -57
  338. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +11 -57
  339. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +11 -57
  340. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +11 -57
  341. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +11 -57
  342. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +11 -57
  343. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/stochastic.csv +8761 -0
  344. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/user-specified.csv +8761 -0
  345. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +65 -61
  346. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +104 -113
  347. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +9 -1
  348. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +62 -10
  349. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -0
  350. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +8 -3
  351. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +127 -52
  352. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +21 -3
  353. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +67 -45
  354. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +17 -11
  355. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +54 -26
  356. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +3 -7
  357. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +85 -20
  358. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +500 -21
  359. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +5 -2
  360. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +14 -0
  361. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +44 -5
  362. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +2 -2
  363. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +15 -5
  364. data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +10 -10
  365. data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +2 -0
  366. data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +29 -3
  367. data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +21 -7
  368. data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +36 -8
  369. data/example_files/resources/hpxml-measures/docs/source/simulation_output_report.rst +5 -4
  370. data/example_files/resources/hpxml-measures/tasks.rb +101 -175
  371. data/example_files/resources/hpxml-measures/weather/US_CO_Boulder_AMY_2012-cache.csv +1 -1
  372. data/example_files/resources/hpxml-measures/weather/US_CO_Boulder_AMY_2012.epw +1 -1
  373. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +0 -1
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +3 -1
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +7 -1
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief.xml +7 -1
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +7 -1
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +3 -1
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +6 -1
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +3 -1
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +3 -1
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +3 -1
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +3 -1
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +7 -1
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +7 -1
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +7 -1
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +7 -1
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +7 -1
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +7 -1
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +7 -1
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +7 -1
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +7 -1
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +7 -1
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +7 -1
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +7 -1
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +7 -1
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +7 -1
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +7 -1
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +7 -1
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +7 -1
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +7 -1
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +7 -1
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +7 -1
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +7 -1
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +7 -1
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +7 -1
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +7 -1
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +7 -1
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +7 -1
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +3 -1
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +7 -1
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +7 -1
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +7 -1
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +7 -1
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +7 -1
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +7 -1
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +7 -1
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +7 -1
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +7 -1
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +7 -1
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +7 -1
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +7 -1
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +7 -1
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +7 -1
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +7 -1
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +7 -1
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +7 -1
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +7 -1
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +7 -1
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +7 -1
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +7 -1
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +7 -1
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +7 -1
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +7 -1
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +7 -1
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +7 -1
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +7 -1
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +7 -1
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +7 -1
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-uef.xml +7 -1
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +7 -1
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +7 -1
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +7 -1
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +7 -1
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +7 -1
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +7 -1
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +7 -1
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +7 -1
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +7 -1
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +7 -1
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +7 -1
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +7 -1
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +7 -1
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +7 -1
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-other-heated-space.xml +7 -1
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-other-housing-unit.xml +7 -1
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-other-multifamily-buffer-space.xml +7 -1
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-other-non-freezing-space.xml +7 -1
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +7 -1
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +7 -1
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +7 -1
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +7 -1
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +7 -1
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-interior-shading.xml +7 -1
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +7 -1
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +7 -1
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +7 -1
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +7 -1
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +7 -1
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +7 -1
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +7 -1
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +7 -1
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +7 -1
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +7 -1
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +7 -1
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +7 -1
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +7 -1
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +7 -1
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +7 -1
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +7 -1
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +7 -1
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +7 -1
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +7 -1
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +7 -1
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +7 -1
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +7 -1
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +7 -1
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +7 -1
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +7 -1
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +7 -1
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +7 -1
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +7 -1
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +7 -1
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +7 -1
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +7 -1
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +7 -1
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +7 -1
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +7 -1
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +7 -1
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +7 -1
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +7 -1
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +7 -1
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +7 -1
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +7 -1
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +7 -1
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +7 -1
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-flowrate.xml +7 -1
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +7 -1
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +7 -1
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +7 -1
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +7 -1
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +7 -1
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +7 -1
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +7 -1
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +7 -1
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +7 -1
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +7 -1
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +7 -1
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +7 -1
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +7 -1
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +7 -1
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +7 -1
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +7 -1
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +7 -1
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +7 -1
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +7 -1
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +7 -1
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +7 -1
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +7 -1
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +7 -1
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +7 -1
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +7 -1
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +7 -1
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +7 -1
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +7 -1
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +7 -1
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +7 -1
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +7 -1
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +7 -1
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +7 -1
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +7 -1
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +7 -1
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +7 -1
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +7 -1
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +7 -1
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +7 -1
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +7 -1
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +7 -1
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +7 -1
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +7 -1
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +7 -1
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +7 -1
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +7 -1
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +7 -1
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +7 -1
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +7 -1
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +7 -1
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-location-epw-filepath-AMY-2012.xml → base-location-AMY-2012.xml} +8 -0
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +7 -1
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +7 -1
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +7 -1
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +7 -1
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +7 -1
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +7 -1
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +7 -1
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +7 -1
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +7 -1
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +7 -1
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +7 -1
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +7 -1
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +7 -1
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +7 -1
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +7 -1
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +7 -1
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-multiple.xml +7 -1
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +7 -1
  577. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +7 -1
  578. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +7 -1
  579. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +7 -1
  580. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +3 -1
  581. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +7 -1
  582. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +7 -1
  583. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +7 -1
  584. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +7 -1
  585. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shelter-coefficient.xml +7 -1
  586. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +5 -1
  587. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +7 -1
  588. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +7 -1
  589. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +565 -0
  590. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +565 -0
  591. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-location-epw-filepath.xml → base-simcontrol-calendar-year-custom.xml} +5 -0
  592. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +7 -1
  593. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +7 -1
  594. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +7 -1
  595. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +7 -1
  596. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +7 -1
  597. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-autosize.xml +7 -1
  598. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml +7 -1
  599. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml +7 -1
  600. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml +7 -1
  601. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml +7 -1
  602. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml +7 -1
  603. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml +7 -1
  604. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml +7 -1
  605. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml +7 -1
  606. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml +7 -1
  607. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml +7 -1
  608. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml +7 -1
  609. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml +7 -1
  610. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml +7 -1
  611. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml +7 -1
  612. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml +7 -1
  613. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml +7 -1
  614. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml +7 -1
  615. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml +7 -1
  616. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml +7 -1
  617. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml +7 -1
  618. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml +7 -1
  619. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml +7 -1
  620. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml +7 -1
  621. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml +7 -1
  622. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml +7 -1
  623. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml +7 -1
  624. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml +7 -1
  625. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml +7 -1
  626. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml +7 -1
  627. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml +7 -1
  628. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-room-ac-only-autosize.xml +7 -1
  629. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-stove-oil-only-autosize.xml +7 -1
  630. data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml +7 -1
  631. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/appliances-location-unconditioned-space.xml +7 -1
  632. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +7 -1
  633. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +7 -1
  634. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +7 -1
  635. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +7 -1
  636. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +7 -1
  637. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +7 -1
  638. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +7 -1
  639. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +7 -1
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +7 -1
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +7 -1
  642. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +7 -1
  643. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +7 -1
  644. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +7 -1
  645. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +7 -1
  646. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +7 -1
  647. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +7 -1
  648. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +7 -1
  649. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +7 -1
  650. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +7 -1
  651. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +7 -1
  652. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +7 -1
  653. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +7 -1
  654. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +7 -1
  655. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +7 -1
  656. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +7 -1
  657. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +7 -1
  658. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +7 -1
  659. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +7 -1
  660. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{invalid-wmo.xml → invalid-calendar-year.xml} +8 -1
  661. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +7 -1
  662. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +7 -1
  663. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +4 -0
  664. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +7 -1
  665. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +7 -1
  666. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +7 -1
  667. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +7 -1
  668. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +7 -1
  669. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +7 -1
  670. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +7 -1
  671. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-interior-shading.xml +7 -1
  672. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +7 -1
  673. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +7 -1
  674. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +7 -1
  675. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +7 -1
  676. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +7 -1
  677. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +7 -1
  678. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +7 -1
  679. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +7 -1
  680. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +7 -1
  681. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +7 -1
  682. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +7 -1
  683. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +7 -1
  684. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +7 -1
  685. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +7 -1
  686. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +7 -1
  687. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/slab-zero-exposed-perimeter.xml +7 -1
  688. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +7 -1
  689. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +7 -1
  690. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +7 -1
  691. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +7 -1
  692. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +7 -1
  693. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +7 -1
  694. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +7 -1
  695. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +7 -1
  696. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +7 -1
  697. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +7 -1
  698. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +7 -1
  699. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +7 -1
  700. data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +7 -1
  701. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +3 -1
  702. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +3 -1
  703. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +3 -1
  704. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +3 -1
  705. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +3 -1
  706. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +3 -1
  707. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +3 -1
  708. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +3 -1
  709. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +3 -1
  710. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +3 -1
  711. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +3 -1
  712. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +3 -1
  713. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +3 -1
  714. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +3 -1
  715. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +3 -1
  716. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +3 -1
  717. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +3 -1
  718. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +3 -1
  719. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +3 -1
  720. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +3 -1
  721. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +3 -1
  722. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +3 -1
  723. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +3 -1
  724. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +3 -1
  725. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +3 -1
  726. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +3 -1
  727. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +4 -2
  728. data/lib/uo_cli.rb +40 -22
  729. data/lib/uo_cli/version.rb +1 -1
  730. data/uo_cli.gemspec +3 -4
  731. metadata +149 -27
  732. data/example_files/resources/hpxml-measures/weather/data.csv +0 -1012
@@ -2,7 +2,7 @@
2
2
 
3
3
  class Location
4
4
  def self.apply(model, runner, weather, epw_file, hpxml)
5
- apply_year(model, epw_file)
5
+ apply_year(model, hpxml)
6
6
  apply_site(model, epw_file)
7
7
  apply_climate_zones(model, epw_file)
8
8
  apply_dst(model, hpxml)
@@ -50,13 +50,9 @@ class Location
50
50
  climateZones.setClimateZone(Constants.BuildingAmericaClimateZone, ba_zone)
51
51
  end
52
52
 
53
- def self.apply_year(model, epw_file)
53
+ def self.apply_year(model, hpxml)
54
54
  year_description = model.getYearDescription
55
- if epw_file.startDateActualYear.is_initialized # AMY
56
- year_description.setCalendarYear(epw_file.startDateActualYear.get)
57
- else # TMY
58
- year_description.setDayofWeekforStartDay('Monday') # For consistency with SAM utility bill calculations
59
- end
55
+ year_description.setCalendarYear(hpxml.header.sim_calendar_year)
60
56
  end
61
57
 
62
58
  def self.apply_dst(model, hpxml)
@@ -1,11 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class MiscLoads
4
- def self.apply_plug(model, plug_load, obj_name, living_space)
4
+ def self.apply_plug(model, plug_load, obj_name, living_space, schedules_file)
5
5
  kwh = 0
6
+
6
7
  if not plug_load.nil?
7
8
  kwh = plug_load.kWh_per_year * plug_load.usage_multiplier
8
- sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', plug_load.weekday_fractions, plug_load.weekend_fractions, plug_load.monthly_multipliers, 1.0, 1.0, true, true, Constants.ScheduleTypeLimitsFraction)
9
+ if not schedules_file.nil?
10
+ if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
11
+ col_name = 'plug_loads_other'
12
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
13
+ col_name = 'plug_loads_tv'
14
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
15
+ col_name = 'plug_loads_vehicle'
16
+ elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
17
+ col_name = 'plug_loads_well_pump'
18
+ end
19
+ space_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: col_name, annual_kwh: kwh)
20
+ sch = schedules_file.create_schedule_file(col_name: col_name)
21
+ else
22
+ sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', plug_load.weekday_fractions, plug_load.weekend_fractions, plug_load.monthly_multipliers, Constants.ScheduleTypeLimitsFraction)
23
+ space_design_level = sch.calcDesignLevelFromDailykWh(kwh / 365.0)
24
+ sch = sch.schedule
25
+ end
9
26
  end
10
27
 
11
28
  return if kwh <= 0
@@ -30,8 +47,6 @@ class MiscLoads
30
47
  lat_fract = 0.0
31
48
  end
32
49
 
33
- space_design_level = sch.calcDesignLevelFromDailykWh(kwh / 365.0)
34
-
35
50
  # Add electric equipment for the mel
36
51
  mel_def = OpenStudio::Model::ElectricEquipmentDefinition.new(model)
37
52
  mel = OpenStudio::Model::ElectricEquipment.new(mel_def)
@@ -43,14 +58,29 @@ class MiscLoads
43
58
  mel_def.setFractionRadiant(0.6 * sens_frac)
44
59
  mel_def.setFractionLatent(lat_frac)
45
60
  mel_def.setFractionLost(1 - sens_frac - lat_frac)
46
- mel.setSchedule(sch.schedule)
61
+ mel.setSchedule(sch)
47
62
  end
48
63
 
49
- def self.apply_fuel(model, fuel_load, obj_name, living_space)
64
+ def self.apply_fuel(model, fuel_load, obj_name, living_space, schedules_file)
50
65
  therm = 0
66
+
51
67
  if not fuel_load.nil?
52
68
  therm = fuel_load.therm_per_year * fuel_load.usage_multiplier
53
- sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', fuel_load.weekday_fractions, fuel_load.weekend_fractions, fuel_load.monthly_multipliers, 1.0, 1.0, true, true, Constants.ScheduleTypeLimitsFraction)
69
+ if not schedules_file.nil?
70
+ if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
71
+ col_name = 'fuel_loads_grill'
72
+ elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
73
+ col_name = 'fuel_loads_lighting'
74
+ elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
75
+ col_name = 'fuel_loads_fireplace'
76
+ end
77
+ space_design_level = schedules_file.calc_design_level_from_annual_therm(col_name: col_name, annual_therm: therm)
78
+ sch = schedules_file.create_schedule_file(col_name: col_name)
79
+ else
80
+ sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', fuel_load.weekday_fractions, fuel_load.weekend_fractions, fuel_load.monthly_multipliers, Constants.ScheduleTypeLimitsFraction)
81
+ space_design_level = sch.calcDesignLevelFromDailyTherm(therm / 365.0)
82
+ sch = sch.schedule
83
+ end
54
84
  end
55
85
 
56
86
  return if therm <= 0
@@ -75,8 +105,6 @@ class MiscLoads
75
105
  lat_fract = 0.0
76
106
  end
77
107
 
78
- space_design_level = sch.calcDesignLevelFromDailyTherm(therm / 365.0)
79
-
80
108
  # Add other equipment for the mfl
81
109
  mfl_def = OpenStudio::Model::OtherEquipmentDefinition.new(model)
82
110
  mfl = OpenStudio::Model::OtherEquipment.new(mfl_def)
@@ -89,13 +117,24 @@ class MiscLoads
89
117
  mfl_def.setFractionRadiant(0.6 * sens_frac)
90
118
  mfl_def.setFractionLatent(lat_frac)
91
119
  mfl_def.setFractionLost(1 - sens_frac - lat_frac)
92
- mfl.setSchedule(sch.schedule)
120
+ mfl.setSchedule(sch)
93
121
  end
94
122
 
95
- def self.apply_pool_or_hot_tub_heater(model, pool_or_hot_tub, obj_name, living_space)
123
+ def self.apply_pool_or_hot_tub_heater(model, pool_or_hot_tub, obj_name, living_space, schedules_file)
96
124
  heater_kwh = 0
97
125
  heater_therm = 0
98
- heater_sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', pool_or_hot_tub.heater_weekday_fractions, pool_or_hot_tub.heater_weekend_fractions, pool_or_hot_tub.heater_monthly_multipliers, 1.0, 1.0, true, true, Constants.ScheduleTypeLimitsFraction)
126
+
127
+ if not schedules_file.nil?
128
+ if obj_name.include?('pool')
129
+ col_name = 'pool_heater'
130
+ else
131
+ col_name = 'hot_tub_heater'
132
+ end
133
+ heater_sch = schedules_file.create_schedule_file(col_name: col_name)
134
+ else
135
+ heater_sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', pool_or_hot_tub.heater_weekday_fractions, pool_or_hot_tub.heater_weekend_fractions, pool_or_hot_tub.heater_monthly_multipliers, Constants.ScheduleTypeLimitsFraction)
136
+ end
137
+
99
138
  if pool_or_hot_tub.heater_load_units == HPXML::UnitsKwhPerYear
100
139
  heater_kwh = pool_or_hot_tub.heater_load_value * pool_or_hot_tub.heater_usage_multiplier
101
140
  elsif pool_or_hot_tub.heater_load_units == HPXML::UnitsThermPerYear
@@ -103,7 +142,12 @@ class MiscLoads
103
142
  end
104
143
 
105
144
  if heater_kwh > 0
106
- space_design_level = heater_sch.calcDesignLevelFromDailykWh(heater_kwh / 365.0)
145
+ if (not schedules_file.nil?)
146
+ space_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: col_name, annual_kwh: heater_kwh)
147
+ else
148
+ space_design_level = heater_sch.calcDesignLevelFromDailykWh(heater_kwh / 365.0)
149
+ heater_sch = heater_sch.schedule
150
+ end
107
151
 
108
152
  mel_def = OpenStudio::Model::ElectricEquipmentDefinition.new(model)
109
153
  mel = OpenStudio::Model::ElectricEquipment.new(mel_def)
@@ -115,11 +159,16 @@ class MiscLoads
115
159
  mel_def.setFractionRadiant(0)
116
160
  mel_def.setFractionLatent(0)
117
161
  mel_def.setFractionLost(1)
118
- mel.setSchedule(heater_sch.schedule)
162
+ mel.setSchedule(heater_sch)
119
163
  end
120
164
 
121
165
  if heater_therm > 0
122
- space_design_level = heater_sch.calcDesignLevelFromDailyTherm(heater_therm / 365.0)
166
+ if not schedules_file.nil?
167
+ space_design_level = schedules_file.calc_design_level_from_annual_therm(col_name: col_name, annual_therm: heater_therm)
168
+ else
169
+ space_design_level = heater_sch.calcDesignLevelFromDailyTherm(heater_therm / 365.0)
170
+ heater_sch = heater_sch.schedule
171
+ end
123
172
 
124
173
  mel_def = OpenStudio::Model::GasEquipmentDefinition.new(model)
125
174
  mel = OpenStudio::Model::GasEquipment.new(mel_def)
@@ -131,19 +180,35 @@ class MiscLoads
131
180
  mel_def.setFractionRadiant(0)
132
181
  mel_def.setFractionLatent(0)
133
182
  mel_def.setFractionLost(1)
134
- mel.setSchedule(heater_sch.schedule)
183
+ mel.setSchedule(heater_sch)
135
184
  end
136
185
  end
137
186
 
138
- def self.apply_pool_or_hot_tub_pump(model, pool_or_hot_tub, obj_name, living_space)
187
+ def self.apply_pool_or_hot_tub_pump(model, pool_or_hot_tub, obj_name, living_space, schedules_file)
139
188
  pump_kwh = 0
140
- pump_sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', pool_or_hot_tub.pump_weekday_fractions, pool_or_hot_tub.pump_weekend_fractions, pool_or_hot_tub.pump_monthly_multipliers, 1.0, 1.0, true, true, Constants.ScheduleTypeLimitsFraction)
189
+
190
+ if not schedules_file.nil?
191
+ if obj_name.include?('pool')
192
+ col_name = 'pool_pump'
193
+ else
194
+ col_name = 'hot_tub_pump'
195
+ end
196
+ pump_sch = schedules_file.create_schedule_file(col_name: col_name)
197
+ else
198
+ pump_sch = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', pool_or_hot_tub.pump_weekday_fractions, pool_or_hot_tub.pump_weekend_fractions, pool_or_hot_tub.pump_monthly_multipliers, Constants.ScheduleTypeLimitsFraction)
199
+ end
200
+
141
201
  if not pool_or_hot_tub.pump_kwh_per_year.nil?
142
202
  pump_kwh = pool_or_hot_tub.pump_kwh_per_year * pool_or_hot_tub.pump_usage_multiplier
143
203
  end
144
204
 
145
205
  if pump_kwh > 0
146
- space_design_level = pump_sch.calcDesignLevelFromDailykWh(pump_kwh / 365.0)
206
+ if not schedules_file.nil?
207
+ space_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: col_name, annual_kwh: pump_kwh)
208
+ else
209
+ space_design_level = pump_sch.calcDesignLevelFromDailykWh(pump_kwh / 365.0)
210
+ pump_sch = pump_sch.schedule
211
+ end
147
212
 
148
213
  mel_def = OpenStudio::Model::ElectricEquipmentDefinition.new(model)
149
214
  mel = OpenStudio::Model::ElectricEquipment.new(mel_def)
@@ -155,7 +220,7 @@ class MiscLoads
155
220
  mel_def.setFractionRadiant(0)
156
221
  mel_def.setFractionLatent(0)
157
222
  mel_def.setFractionLost(1)
158
- mel.setSchedule(pump_sch.schedule)
223
+ mel.setSchedule(pump_sch)
159
224
  end
160
225
  end
161
226
 
@@ -5,8 +5,7 @@ class HourlyByMonthSchedule
5
5
  # weekday_month_by_hour_values must be a 12-element array of 24-element arrays of numbers.
6
6
  # weekend_month_by_hour_values must be a 12-element array of 24-element arrays of numbers.
7
7
  def initialize(model, sch_name, weekday_month_by_hour_values, weekend_month_by_hour_values,
8
- normalize_values = true, create_sch_object = true,
9
- schedule_type_limits_name = nil)
8
+ schedule_type_limits_name = nil, normalize_values = true)
10
9
  @model = model
11
10
  @sch_name = sch_name
12
11
  @schedule = nil
@@ -19,9 +18,7 @@ class HourlyByMonthSchedule
19
18
  else
20
19
  @maxval = 1.0
21
20
  end
22
- if create_sch_object
23
- @schedule = createSchedule()
24
- end
21
+ @schedule = createSchedule()
25
22
  end
26
23
 
27
24
  def calcDesignLevel(val)
@@ -180,13 +177,11 @@ class MonthWeekdayWeekendSchedule
180
177
  # weekend_hourly_values can either be a comma-separated string of 24 numbers or a 24-element array of numbers.
181
178
  # monthly_values can either be a comma-separated string of 12 numbers or a 12-element array of numbers.
182
179
  def initialize(model, sch_name, weekday_hourly_values, weekend_hourly_values, monthly_values,
183
- mult_weekday = 1.0, mult_weekend = 1.0, normalize_values = true, create_sch_object = true,
184
- schedule_type_limits_name = nil, begin_month = 1, begin_day_of_month = 1, end_month = 12, end_day_of_month = 31)
180
+ schedule_type_limits_name = nil, normalize_values = true, begin_month = 1,
181
+ begin_day_of_month = 1, end_month = 12, end_day_of_month = 31)
185
182
  @model = model
186
183
  @sch_name = sch_name
187
184
  @schedule = nil
188
- @mult_weekday = mult_weekday
189
- @mult_weekend = mult_weekend
190
185
  @weekday_hourly_values = validateValues(weekday_hourly_values, 24, 'weekday')
191
186
  @weekend_hourly_values = validateValues(weekend_hourly_values, 24, 'weekend')
192
187
  @monthly_values = validateValues(monthly_values, 12, 'monthly')
@@ -206,9 +201,7 @@ class MonthWeekdayWeekendSchedule
206
201
  @maxval = 1.0
207
202
  @schadjust = 1.0
208
203
  end
209
- if create_sch_object
210
- @schedule = createSchedule()
211
- end
204
+ @schedule = createSchedule()
212
205
  end
213
206
 
214
207
  def calcDesignLevelFromDailykWh(daily_kwh)
@@ -283,9 +276,9 @@ class MonthWeekdayWeekendSchedule
283
276
 
284
277
  def calcMaxval()
285
278
  if @weekday_hourly_values.max > @weekend_hourly_values.max
286
- maxval = @monthly_values.max * @weekday_hourly_values.max * @mult_weekday
279
+ maxval = @monthly_values.max * @weekday_hourly_values.max
287
280
  else
288
- maxval = @monthly_values.max * @weekend_hourly_values.max * @mult_weekend
281
+ maxval = @monthly_values.max * @weekend_hourly_values.max
289
282
  end
290
283
  if maxval == 0.0
291
284
  maxval == 1.0 # Prevent divide by zero
@@ -359,8 +352,8 @@ class MonthWeekdayWeekendSchedule
359
352
  wkdy_vals = []
360
353
  wknd_vals = []
361
354
  for h in 1..24
362
- wkdy_vals[h] = (@monthly_values[m - 1] * @weekday_hourly_values[h - 1] * @mult_weekday) / @maxval
363
- wknd_vals[h] = (@monthly_values[m - 1] * @weekend_hourly_values[h - 1] * @mult_weekend) / @maxval
355
+ wkdy_vals[h] = (@monthly_values[m - 1] * @weekday_hourly_values[h - 1]) / @maxval
356
+ wknd_vals[h] = (@monthly_values[m - 1] * @weekend_hourly_values[h - 1]) / @maxval
364
357
  end
365
358
 
366
359
  if (wkdy_vals == prev_wkdy_vals) && (wknd_vals == prev_wknd_vals)
@@ -434,11 +427,10 @@ class MonthWeekdayWeekendSchedule
434
427
  end
435
428
 
436
429
  class HotWaterSchedule
437
- def initialize(model, obj_name, nbeds, days_shift = 0, create_sch_object = true)
430
+ def initialize(model, obj_name, nbeds, days_shift = 0, dryer_exhaust_min_runtime = 0, create_sch_object = true)
438
431
  @model = model
439
432
  @sch_name = "#{obj_name} schedule"
440
433
  @schedule = nil
441
- @days_shift = days_shift
442
434
  if nbeds < 1
443
435
  @nbeds = 1
444
436
  elsif nbeds > 5
@@ -448,6 +440,7 @@ class HotWaterSchedule
448
440
  end
449
441
  file_prefixes = { Constants.ObjectNameClothesWasher => 'ClothesWasher',
450
442
  Constants.ObjectNameClothesDryer => 'ClothesWasher',
443
+ Constants.ObjectNameClothesDryerExhaust => 'ClothesWasher',
451
444
  Constants.ObjectNameDishwasher => 'Dishwasher',
452
445
  Constants.ObjectNameFixtures => 'Fixtures' }
453
446
  @file_prefix = file_prefixes[obj_name]
@@ -455,13 +448,17 @@ class HotWaterSchedule
455
448
  timestep_minutes = (60 / @model.getTimestep.numberOfTimestepsPerHour).to_i
456
449
  weeks = 1 # use a single week that repeats
457
450
 
458
- data = loadMinuteDrawProfileFromFile(timestep_minutes, days_shift, weeks)
451
+ @data = loadMinuteDrawProfileFromFile(timestep_minutes, days_shift, weeks, dryer_exhaust_min_runtime)
459
452
  @totflow, @maxflow, @ontime = loadDrawProfileStatsFromFile()
460
453
  if create_sch_object
461
- @schedule = createSchedule(data, timestep_minutes, weeks)
454
+ @schedule = createSchedule(@data, timestep_minutes, weeks)
462
455
  end
463
456
  end
464
457
 
458
+ def data
459
+ return @data
460
+ end
461
+
465
462
  def calcDesignLevelFromDailykWh(daily_kWh)
466
463
  return UnitConversions.convert(daily_kWh * 365 * 60 / (365 * @totflow / @maxflow), 'kW', 'W')
467
464
  end
@@ -488,7 +485,7 @@ class HotWaterSchedule
488
485
 
489
486
  private
490
487
 
491
- def loadMinuteDrawProfileFromFile(timestep_minutes, days_shift, weeks)
488
+ def loadMinuteDrawProfileFromFile(timestep_minutes, days_shift, weeks, dryer_exhaust_min_runtime)
492
489
  data = []
493
490
  if @file_prefix.nil?
494
491
  return data
@@ -526,6 +523,17 @@ class HotWaterSchedule
526
523
  end
527
524
  end
528
525
 
526
+ if dryer_exhaust_min_runtime > 0
527
+ # Clothes dryer exhaust vent should operate whenever the dryer is operating,
528
+ # with a minimum runtime in minutes.
529
+ items.reverse.each_with_index do |val, i|
530
+ next unless val > 0
531
+ place = (items.length - 1) - i
532
+ last = place + dryer_exhaust_min_runtime
533
+ items.fill(1, place...last)
534
+ end
535
+ end
536
+
529
537
  # Aggregate minute schedule up to the timestep level to reduce the size
530
538
  # and speed of processing.
531
539
  for tstep in 0..(minutes_in_year / timestep_minutes).to_i - 1
@@ -787,4 +795,475 @@ class Schedule
787
795
  rule.setApplySaturday(true)
788
796
  rule.setApplySunday(true)
789
797
  end
798
+
799
+ def self.OccupantsWeekdayFractions
800
+ return '1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 0.88310, 0.40861, 0.24189, 0.24189, 0.24189, 0.24189, 0.24189, 0.24189, 0.24189, 0.29498, 0.55310, 0.89693, 0.89693, 0.89693, 1.00000, 1.00000, 1.00000'
801
+ end
802
+
803
+ def self.OccupantsWeekendFractions
804
+ return '1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 0.88310, 0.40861, 0.24189, 0.24189, 0.24189, 0.24189, 0.24189, 0.24189, 0.24189, 0.29498, 0.55310, 0.89693, 0.89693, 0.89693, 1.00000, 1.00000, 1.00000'
805
+ end
806
+
807
+ def self.OccupantsMonthlyMultipliers
808
+ return '1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0'
809
+ end
810
+
811
+ def self.LightingExteriorWeekdayFractions
812
+ # Schedules from T24 2016 Residential ACM Appendix C Table 8 Exterior Lighting Hourly Multiplier (Weekdays and weekends)
813
+ return '0.046, 0.046, 0.046, 0.046, 0.046, 0.037, 0.035, 0.034, 0.033, 0.028, 0.022, 0.015, 0.012, 0.011, 0.011, 0.012, 0.019, 0.037, 0.049, 0.065, 0.091, 0.105, 0.091, 0.063'
814
+ end
815
+
816
+ def self.LightingExteriorWeekendFractions
817
+ return '0.046, 0.046, 0.045, 0.045, 0.046, 0.045, 0.044, 0.041, 0.036, 0.03, 0.024, 0.016, 0.012, 0.011, 0.011, 0.012, 0.019, 0.038, 0.048, 0.06, 0.083, 0.098, 0.085, 0.059'
818
+ end
819
+
820
+ def self.LightingExteriorMonthlyMultipliers
821
+ return '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248'
822
+ end
823
+
824
+ def self.LightingExteriorHolidayWeekdayFractions
825
+ return '0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.008, 0.098, 0.168, 0.194, 0.284, 0.192, 0.037, 0.019'
826
+ end
827
+
828
+ def self.LightingExteriorHolidayWeekendFractions
829
+ return '0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.008, 0.098, 0.168, 0.194, 0.284, 0.192, 0.037, 0.019'
830
+ end
831
+
832
+ def self.LightingExteriorHolidayMonthlyMultipliers
833
+ return '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248'
834
+ end
835
+
836
+ def self.CookingRangeWeekdayFractions
837
+ return '0.007, 0.007, 0.004, 0.004, 0.007, 0.011, 0.025, 0.042, 0.046, 0.048, 0.042, 0.050, 0.057, 0.046, 0.057, 0.044, 0.092, 0.150, 0.117, 0.060, 0.035, 0.025, 0.016, 0.011'
838
+ end
839
+
840
+ def self.CookingRangeWeekendFractions
841
+ return '0.007, 0.007, 0.004, 0.004, 0.007, 0.011, 0.025, 0.042, 0.046, 0.048, 0.042, 0.050, 0.057, 0.046, 0.057, 0.044, 0.092, 0.150, 0.117, 0.060, 0.035, 0.025, 0.016, 0.011'
842
+ end
843
+
844
+ def self.CookingRangeMonthlyMultipliers
845
+ return '1.097, 1.097, 0.991, 0.987, 0.991, 0.890, 0.896, 0.896, 0.890, 1.085, 1.085, 1.097'
846
+ end
847
+
848
+ def self.RefrigeratorWeekdayFractions
849
+ return '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
850
+ end
851
+
852
+ def self.RefrigeratorWeekendFractions
853
+ return '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
854
+ end
855
+
856
+ def self.RefrigeratorMonthlyMultipliers
857
+ return '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
858
+ end
859
+
860
+ def self.ExtraRefrigeratorWeekdayFractions
861
+ return '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
862
+ end
863
+
864
+ def self.ExtraRefrigeratorWeekendFractions
865
+ return '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
866
+ end
867
+
868
+ def self.ExtraRefrigeratorMonthlyMultipliers
869
+ return '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
870
+ end
871
+
872
+ def self.FreezerWeekdayFractions
873
+ return '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
874
+ end
875
+
876
+ def self.FreezerWeekendFractions
877
+ return '0.040, 0.039, 0.038, 0.037, 0.036, 0.036, 0.038, 0.040, 0.041, 0.041, 0.040, 0.040, 0.042, 0.042, 0.042, 0.041, 0.044, 0.048, 0.050, 0.048, 0.047, 0.046, 0.044, 0.041'
878
+ end
879
+
880
+ def self.FreezerMonthlyMultipliers
881
+ return '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
882
+ end
883
+
884
+ def self.CeilingFanWeekdayFractions
885
+ return '0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0'
886
+ end
887
+
888
+ def self.CeilingFanWeekendFractions
889
+ return '0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0'
890
+ end
891
+
892
+ def self.CeilingFanMonthlyMultipliers(weather:)
893
+ return HVAC.get_default_ceiling_fan_months(weather).join(', ')
894
+ end
895
+
896
+ def self.PlugLoadsOtherWeekdayFractions
897
+ return '0.035, 0.033, 0.032, 0.031, 0.032, 0.033, 0.037, 0.042, 0.043, 0.043, 0.043, 0.044, 0.045, 0.045, 0.044, 0.046, 0.048, 0.052, 0.053, 0.05, 0.047, 0.045, 0.04, 0.036'
898
+ end
899
+
900
+ def self.PlugLoadsOtherWeekendFractions
901
+ return '0.035, 0.033, 0.032, 0.031, 0.032, 0.033, 0.037, 0.042, 0.043, 0.043, 0.043, 0.044, 0.045, 0.045, 0.044, 0.046, 0.048, 0.052, 0.053, 0.05, 0.047, 0.045, 0.04, 0.036'
902
+ end
903
+
904
+ def self.PlugLoadsOtherMonthlyMultipliers
905
+ return '1.248, 1.257, 0.993, 0.989, 0.993, 0.827, 0.821, 0.821, 0.827, 0.99, 0.987, 1.248'
906
+ end
907
+
908
+ def self.PlugLoadsTVWeekdayFractions
909
+ return '0.037, 0.018, 0.009, 0.007, 0.011, 0.018, 0.029, 0.040, 0.049, 0.058, 0.065, 0.072, 0.076, 0.086, 0.091, 0.102, 0.127, 0.156, 0.210, 0.294, 0.363, 0.344, 0.208, 0.090'
910
+ end
911
+
912
+ def self.PlugLoadsTVWeekendFractions
913
+ return '0.044, 0.022, 0.012, 0.008, 0.011, 0.014, 0.024, 0.043, 0.071, 0.094, 0.112, 0.123, 0.132, 0.156, 0.178, 0.196, 0.206, 0.213, 0.251, 0.330, 0.388, 0.358, 0.226, 0.103'
914
+ end
915
+
916
+ def self.PlugLoadsTVMonthlyMultipliers
917
+ return '1.137, 1.129, 0.961, 0.969, 0.961, 0.993, 0.996, 0.96, 0.993, 0.867, 0.86, 1.137'
918
+ end
919
+
920
+ def self.PlugLoadsVehicleWeekdayFractions
921
+ return '0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042'
922
+ end
923
+
924
+ def self.PlugLoadsVehicleWeekendFractions
925
+ return '0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042, 0.042'
926
+ end
927
+
928
+ def self.PlugLoadsVehicleMonthlyMultipliers
929
+ return '1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1'
930
+ end
931
+
932
+ def self.PlugLoadsWellPumpWeekdayFractions
933
+ return '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065'
934
+ end
935
+
936
+ def self.PlugLoadsWellPumpWeekendFractions
937
+ return '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065'
938
+ end
939
+
940
+ def self.PlugLoadsWellPumpMonthlyMultipliers
941
+ return '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
942
+ end
943
+
944
+ def self.FuelLoadsGrillWeekdayFractions
945
+ return '0.004, 0.001, 0.001, 0.002, 0.007, 0.012, 0.029, 0.046, 0.044, 0.041, 0.044, 0.046, 0.042, 0.038, 0.049, 0.059, 0.110, 0.161, 0.115, 0.070, 0.044, 0.019, 0.013, 0.007'
946
+ end
947
+
948
+ def self.FuelLoadsGrillWeekendFractions
949
+ return '0.004, 0.001, 0.001, 0.002, 0.007, 0.012, 0.029, 0.046, 0.044, 0.041, 0.044, 0.046, 0.042, 0.038, 0.049, 0.059, 0.110, 0.161, 0.115, 0.070, 0.044, 0.019, 0.013, 0.007'
950
+ end
951
+
952
+ def self.FuelLoadsGrillMonthlyMultipliers
953
+ return '1.097, 1.097, 0.991, 0.987, 0.991, 0.890, 0.896, 0.896, 0.890, 1.085, 1.085, 1.097'
954
+ end
955
+
956
+ def self.FuelLoadsLightingWeekdayFractions
957
+ return '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065'
958
+ end
959
+
960
+ def self.FuelLoadsLightingWeekendFractions
961
+ return '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065'
962
+ end
963
+
964
+ def self.FuelLoadsLightingMonthlyMultipliers
965
+ return '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
966
+ end
967
+
968
+ def self.FuelLoadsFireplaceWeekdayFractions
969
+ return '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065'
970
+ end
971
+
972
+ def self.FuelLoadsFireplaceWeekendFractions
973
+ return '0.044, 0.023, 0.019, 0.015, 0.016, 0.018, 0.026, 0.033, 0.033, 0.032, 0.033, 0.033, 0.032, 0.032, 0.032, 0.033, 0.045, 0.057, 0.066, 0.076, 0.081, 0.086, 0.075, 0.065'
974
+ end
975
+
976
+ def self.FuelLoadsFireplaceMonthlyMultipliers
977
+ return '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
978
+ end
979
+
980
+ def self.PoolPumpWeekdayFractions
981
+ return '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
982
+ end
983
+
984
+ def self.PoolPumpWeekendFractions
985
+ return '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
986
+ end
987
+
988
+ def self.PoolPumpMonthlyMultipliers
989
+ return '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
990
+ end
991
+
992
+ def self.PoolHeaterWeekdayFractions
993
+ return '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
994
+ end
995
+
996
+ def self.PoolHeaterWeekendFractions
997
+ return '0.003, 0.003, 0.003, 0.004, 0.008, 0.015, 0.026, 0.044, 0.084, 0.121, 0.127, 0.121, 0.120, 0.090, 0.075, 0.061, 0.037, 0.023, 0.013, 0.008, 0.004, 0.003, 0.003, 0.003'
998
+ end
999
+
1000
+ def self.PoolHeaterMonthlyMultipliers
1001
+ return '1.154, 1.161, 1.013, 1.010, 1.013, 0.888, 0.883, 0.883, 0.888, 0.978, 0.974, 1.154'
1002
+ end
1003
+
1004
+ def self.HotTubPumpWeekdayFractions
1005
+ return '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1006
+ end
1007
+
1008
+ def self.HotTubPumpWeekendFractions
1009
+ return '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1010
+ end
1011
+
1012
+ def self.HotTubPumpMonthlyMultipliers
1013
+ return '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921'
1014
+ end
1015
+
1016
+ def self.HotTubHeaterWeekdayFractions
1017
+ return '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1018
+ end
1019
+
1020
+ def self.HotTubHeaterWeekendFractions
1021
+ return '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
1022
+ end
1023
+
1024
+ def self.HotTubHeaterMonthlyMultipliers
1025
+ return '0.837, 0.835, 1.084, 1.084, 1.084, 1.096, 1.096, 1.096, 1.096, 0.931, 0.925, 0.837'
1026
+ end
1027
+ end
1028
+
1029
+ class SchedulesFile
1030
+ def initialize(runner:,
1031
+ model:,
1032
+ schedules_path:,
1033
+ col_names:,
1034
+ **remainder)
1035
+
1036
+ @validated = true
1037
+ @runner = runner
1038
+ @model = model
1039
+ @schedules_path = schedules_path
1040
+ @external_file = get_external_file
1041
+ import(col_names: col_names)
1042
+ end
1043
+
1044
+ def validated?
1045
+ return @validated
1046
+ end
1047
+
1048
+ def schedules
1049
+ return @schedules
1050
+ end
1051
+
1052
+ def get_col_index(col_name:)
1053
+ headers = CSV.open(@schedules_path, 'r') { |csv| csv.first }
1054
+ col_num = headers.index(col_name)
1055
+ return col_num
1056
+ end
1057
+
1058
+ def get_col_name(col_index:)
1059
+ headers = CSV.open(@schedules_path, 'r') { |csv| csv.first }
1060
+ col_name = headers[col_index]
1061
+ return col_name
1062
+ end
1063
+
1064
+ def create_schedule_file(col_name:,
1065
+ rows_to_skip: 1)
1066
+ @model.getScheduleFiles.each do |schedule_file|
1067
+ next if schedule_file.name.to_s != col_name
1068
+
1069
+ return schedule_file
1070
+ end
1071
+
1072
+ if @schedules[col_name].nil?
1073
+ @runner.registerError("Could not find the '#{col_name}' schedule.")
1074
+ return false
1075
+ end
1076
+
1077
+ col_index = get_col_index(col_name: col_name)
1078
+ year_description = @model.getYearDescription
1079
+ num_hrs_in_year = Constants.NumHoursInYear(year_description.isLeapYear)
1080
+ schedule_length = @schedules[col_name].length
1081
+ min_per_item = 60.0 / (schedule_length / num_hrs_in_year)
1082
+
1083
+ schedule_file = OpenStudio::Model::ScheduleFile.new(@external_file)
1084
+ schedule_file.setName(col_name)
1085
+ schedule_file.setColumnNumber(col_index + 1)
1086
+ schedule_file.setRowstoSkipatTop(rows_to_skip)
1087
+ schedule_file.setNumberofHoursofData(num_hrs_in_year.to_i)
1088
+ schedule_file.setMinutesperItem("#{min_per_item.to_i}")
1089
+
1090
+ return schedule_file
1091
+ end
1092
+
1093
+ # the equivalent number of hours in the year, if the schedule was at full load (1.0)
1094
+ def annual_equivalent_full_load_hrs(col_name:)
1095
+ # import(col_names: [col_name])
1096
+
1097
+ year_description = @model.getYearDescription
1098
+ num_hrs_in_year = Constants.NumHoursInYear(year_description.isLeapYear)
1099
+ schedule_length = @schedules[col_name].length
1100
+ min_per_item = 60.0 / (schedule_length / num_hrs_in_year)
1101
+
1102
+ ann_equiv_full_load_hrs = @schedules[col_name].reduce(:+) / (60.0 / min_per_item)
1103
+
1104
+ return ann_equiv_full_load_hrs
1105
+ end
1106
+
1107
+ # the power in watts the equipment needs to consume so that, if it were to run annual_equivalent_full_load_hrs hours,
1108
+ # it would consume the annual_kwh energy in the year. Essentially, returns the watts for the equipment when schedule
1109
+ # is at 1.0, so that, for the given schedule values, the equipment will consume annual_kwh energy in a year.
1110
+ def calc_design_level_from_annual_kwh(col_name:,
1111
+ annual_kwh:)
1112
+
1113
+ ann_equiv_full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1114
+ design_level = annual_kwh * 1000.0 / ann_equiv_full_load_hrs # W
1115
+
1116
+ return design_level
1117
+ end
1118
+
1119
+ # Similar to ann_equiv_full_load_hrs, but for thermal energy
1120
+ def calc_design_level_from_annual_therm(col_name:,
1121
+ annual_therm:)
1122
+
1123
+ annual_kwh = UnitConversions.convert(annual_therm, 'therm', 'kWh')
1124
+ design_level = calc_design_level_from_annual_kwh(col_name: col_name, annual_kwh: annual_kwh)
1125
+
1126
+ return design_level
1127
+ end
1128
+
1129
+ # similar to the calc_design_level_from_annual_kwh, but use daily_kwh instead of annual_kwh to calculate the design
1130
+ # level
1131
+ def calc_design_level_from_daily_kwh(col_name:,
1132
+ daily_kwh:)
1133
+ full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1134
+ year_description = @model.getYearDescription
1135
+ num_days_in_year = Constants.NumDaysInYear(year_description.isLeapYear)
1136
+ daily_full_load_hrs = full_load_hrs / num_days_in_year
1137
+ design_level = UnitConversions.convert(daily_kwh / daily_full_load_hrs, 'kW', 'W')
1138
+
1139
+ return design_level
1140
+ end
1141
+
1142
+ # thermal equivalent of calc_design_level_from_daily_kwh
1143
+ def calc_design_level_from_daily_therm(col_name:,
1144
+ daily_therm:)
1145
+ daily_kwh = UnitConversions.convert(daily_therm, 'therm', 'kWh')
1146
+ design_level = calc_design_level_from_daily_kwh(col_name: col_name, daily_kwh: daily_kwh)
1147
+ return design_level
1148
+ end
1149
+
1150
+ # similar to calc_design_level_from_daily_kwh but for water usage
1151
+ def calc_peak_flow_from_daily_gpm(col_name:, daily_water:)
1152
+ ann_equiv_full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1153
+ year_description = @model.getYearDescription
1154
+ num_days_in_year = Constants.NumDaysInYear(year_description.isLeapYear)
1155
+ daily_full_load_hrs = ann_equiv_full_load_hrs / num_days_in_year
1156
+ peak_flow = daily_water / daily_full_load_hrs # gallons_per_hour
1157
+ peak_flow /= 60 # convert to gallons per minute
1158
+ peak_flow = UnitConversions.convert(peak_flow, 'gal/min', 'm^3/s') # convert to m^3/s
1159
+ return peak_flow
1160
+ end
1161
+
1162
+ # get daily gallons from the peak flow rate
1163
+ def calc_daily_gpm_from_peak_flow(col_name:, peak_flow:)
1164
+ ann_equiv_full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1165
+ year_description = @model.getYearDescription
1166
+ num_days_in_year = Constants.NumDaysInYear(year_description.isLeapYear)
1167
+ peak_flow = UnitConversions.convert(peak_flow, 'm^3/s', 'gal/min')
1168
+ daily_gallons = (ann_equiv_full_load_hrs * 60 * peak_flow) / num_days_in_year
1169
+ return daily_gallons
1170
+ end
1171
+
1172
+ def validate_schedule(col_name:,
1173
+ values:)
1174
+
1175
+ year_description = @model.getYearDescription
1176
+ num_hrs_in_year = Constants.NumHoursInYear(year_description.isLeapYear)
1177
+ schedule_length = values.length
1178
+
1179
+ if values.max > 1
1180
+ @runner.registerError("The max value of schedule '#{col_name}' is greater than 1.")
1181
+ @validated = false
1182
+ end
1183
+
1184
+ min_per_item = 60.0 / (schedule_length / num_hrs_in_year)
1185
+ unless [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60].include? min_per_item
1186
+ @runner.registerError("Calculated an invalid schedule min_per_item=#{min_per_item}.")
1187
+ @validated = false
1188
+ end
1189
+ end
1190
+
1191
+ def external_file
1192
+ return @external_file
1193
+ end
1194
+
1195
+ def get_external_file
1196
+ if File.exist? @schedules_path
1197
+ external_file = OpenStudio::Model::ExternalFile::getExternalFile(@model, @schedules_path)
1198
+ if external_file.is_initialized
1199
+ external_file = external_file.get
1200
+ end
1201
+ end
1202
+ return external_file
1203
+ end
1204
+
1205
+ def set_vacancy(col_names:)
1206
+ return unless @schedules.keys.include? 'vacancy'
1207
+ return if @schedules['vacancy'].all? { |i| i == 0 }
1208
+
1209
+ @schedules[col_names[0]].each_with_index do |ts, i|
1210
+ col_names.each do |col_name|
1211
+ @schedules[col_name][i] *= (1.0 - @schedules['vacancy'][i])
1212
+ end
1213
+ end
1214
+
1215
+ update(col_names: col_names)
1216
+ end
1217
+
1218
+ def import(col_names:)
1219
+ @schedules = {}
1220
+ col_names += ['vacancy']
1221
+ columns = CSV.read(@schedules_path).transpose
1222
+ columns.each do |col|
1223
+ next if not col_names.include? col[0]
1224
+
1225
+ values = col[1..-1].reject { |v| v.nil? }
1226
+ values = values.map { |v| v.to_f }
1227
+ validate_schedule(col_name: col[0], values: values)
1228
+ @schedules[col[0]] = values
1229
+ end
1230
+ end
1231
+
1232
+ def export
1233
+ return false if @schedules_path.nil?
1234
+
1235
+ CSV.open(@schedules_path, 'wb') do |csv|
1236
+ csv << @schedules.keys
1237
+ rows = @schedules.values.transpose
1238
+ rows.each do |row|
1239
+ csv << row
1240
+ end
1241
+ end
1242
+
1243
+ return true
1244
+ end
1245
+
1246
+ def update(col_names:)
1247
+ return false if @schedules_path.nil?
1248
+
1249
+ # need to update schedules csv in generated_files folder (alongside run folder) since this is what the simulation points to
1250
+ schedules_path = File.expand_path(File.join(File.dirname(@schedules_path), '../generated_files', File.basename(@schedules_path)))
1251
+
1252
+ columns = CSV.read(schedules_path).transpose
1253
+ col_names.each do |col_name|
1254
+ col_num = get_col_index(col_name: col_name)
1255
+ columns.each_with_index do |col, i|
1256
+ next unless i == col_num
1257
+
1258
+ columns[i][1..-1] = @schedules[col_name]
1259
+ end
1260
+ end
1261
+
1262
+ rows = columns.transpose
1263
+ CSV.open(schedules_path, 'wb') do |csv|
1264
+ rows.each do |row|
1265
+ csv << row
1266
+ end
1267
+ end
1268
+ end
790
1269
  end