urbanopt-cli 0.9.3 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{nightly_build.yml → nightly_ci_build.yml} +6 -5
  3. data/CHANGELOG.md +11 -2
  4. data/CMakeLists.txt +7 -7
  5. data/Gemfile +6 -5
  6. data/LICENSE.md +18 -15
  7. data/README.md +2 -1
  8. data/Rakefile +2 -37
  9. data/example_files/Gemfile +8 -8
  10. data/example_files/mappers/Baseline.rb +170 -191
  11. data/example_files/mappers/ChilledWaterStorage.rb +8 -30
  12. data/example_files/mappers/ClassProject.rb +2 -27
  13. data/example_files/mappers/CreateBar.rb +2 -28
  14. data/example_files/mappers/EvCharging.rb +2 -27
  15. data/example_files/mappers/FlexibleHotWater.rb +2 -27
  16. data/example_files/mappers/Floorspace.rb +2 -27
  17. data/example_files/mappers/HighEfficiency.rb +2 -27
  18. data/example_files/mappers/HighEfficiencyCreateBar.rb +2 -27
  19. data/example_files/mappers/HighEfficiencyFloorspace.rb +2 -27
  20. data/example_files/mappers/PeakHoursMelsShedding.rb +4 -27
  21. data/example_files/mappers/PeakHoursThermostatAdjust.rb +4 -27
  22. data/example_files/mappers/ThermalStorage.rb +2 -28
  23. data/example_files/measures/BuildResidentialModel/measure.rb +30 -60
  24. data/example_files/measures/BuildResidentialModel/measure.xml +253 -84
  25. data/example_files/measures/BuildResidentialModel/resources/util.rb +45 -45
  26. data/example_files/python_deps/dependencies.json +3 -3
  27. data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -1
  28. data/example_files/resources/hpxml-measures/.github/workflows/config.yml +28 -19
  29. data/example_files/resources/hpxml-measures/.gitignore +0 -997
  30. data/example_files/resources/hpxml-measures/.readthedocs.yml +9 -0
  31. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +476 -230
  32. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +244 -75
  33. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +42 -15
  34. data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +24 -9
  35. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +11 -33
  36. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +23 -50
  37. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/README.md +2 -2
  38. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/constants.rb +119 -0
  39. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +67 -290
  40. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.md +6 -5
  41. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +78 -349
  42. data/example_files/resources/hpxml-measures/Changelog.md +80 -10
  43. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +212 -144
  44. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +164 -170
  45. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +238 -167
  46. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +1 -1
  47. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -4
  48. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +36 -6
  49. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv +33 -0
  50. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
  51. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +9 -7
  52. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +79 -61
  53. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +387 -124
  54. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +427 -196
  55. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +11515 -2
  56. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/README.md +1 -0
  57. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +224 -85
  58. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +334 -319
  59. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +572 -838
  60. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +162 -68
  61. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +4 -20
  62. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +12 -10
  63. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +34 -37
  64. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +8 -101
  65. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +31 -40
  66. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -1
  67. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-non-stochastic.csv +8761 -0
  68. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-10-mins.csv +52561 -52561
  69. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic.csv +8761 -8761
  70. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +384 -155
  71. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +1 -1
  72. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/util.rb +2 -2
  73. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
  74. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +68 -90
  75. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +34 -223
  76. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +1 -1
  77. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +16 -4
  78. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +94 -40
  79. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +765 -302
  80. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +119 -69
  81. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +8 -8
  82. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
  83. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +51 -11
  84. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +196 -9
  85. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +36 -13
  86. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -3
  87. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
  88. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +571 -61
  89. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +190 -81
  90. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +11 -11
  91. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +188 -50
  92. data/example_files/resources/hpxml-measures/README.md +3 -3
  93. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +659 -815
  94. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +301 -1112
  95. data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +605 -350
  96. data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +18 -14
  97. data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +15 -15
  98. data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +13 -3
  99. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +3 -3
  100. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +894 -596
  101. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +127 -76
  102. data/example_files/resources/hpxml-measures/tasks.rb +185 -2802
  103. data/example_files/resources/hpxml-measures/workflow/hpxml_inputs.json +3401 -0
  104. data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +0 -1
  105. data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +0 -1
  106. data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +0 -1
  107. data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +0 -1
  108. data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +0 -1
  109. data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +1 -3
  110. data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +0 -1
  111. data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +1 -3
  112. data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +0 -1
  113. data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +1 -3
  114. data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +0 -1
  115. data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +0 -1
  116. data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +0 -1
  117. data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +0 -1
  118. data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +0 -1
  119. data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +3 -4
  120. data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +17 -4
  121. data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +2 -3
  122. data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +3 -4
  123. data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +3 -4
  124. data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +4 -5
  125. data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +3 -4
  126. data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +3 -4
  127. data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +3 -4
  128. data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +3 -4
  129. data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +1 -1
  130. data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +1 -1
  131. data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +1 -1
  132. data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +1 -1
  133. data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +0 -1
  134. data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +4 -5
  135. data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +3 -3
  136. data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +3 -3
  137. data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +3 -4
  138. data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +3 -3
  139. data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +3 -4
  140. data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +3 -3
  141. data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +3 -4
  142. data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +3 -3
  143. data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +3 -4
  144. data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +0 -1
  145. data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +0 -1
  146. data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +0 -1
  147. data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +0 -1
  148. data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +0 -1
  149. data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +1 -0
  150. data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +1 -0
  151. data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +12 -8
  152. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +10 -40
  153. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +10 -40
  154. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +10 -40
  155. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +10 -40
  156. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +10 -40
  157. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +10 -40
  158. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +10 -40
  159. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +10 -40
  160. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +10 -40
  161. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +10 -40
  162. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +10 -40
  163. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +10 -40
  164. data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +10 -40
  165. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +10 -40
  166. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +9 -39
  167. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +9 -39
  168. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +10 -40
  169. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +10 -40
  170. data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +10 -40
  171. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +10 -40
  172. data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +10 -40
  173. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-2stories.xml → base-bldgtype-attached-2stories.xml} +610 -639
  174. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-atticroof-cathedral.xml → base-bldgtype-attached-atticroof-cathedral.xml} +558 -587
  175. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-attached-infil-compartmentalization-test.xml +611 -0
  176. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached.xml → base-bldgtype-attached.xml} +610 -639
  177. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +10 -39
  178. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +10 -39
  179. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +10 -39
  180. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +10 -39
  181. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +10 -39
  182. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-infil-compartmentalization-test.xml +462 -0
  183. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-calctype-operational.xml → base-bldgtype-multifamily-residents-1.xml} +453 -480
  184. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +10 -39
  185. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +10 -39
  186. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +10 -39
  187. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +10 -39
  188. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +10 -39
  189. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +10 -39
  190. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +10 -39
  191. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +10 -39
  192. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +10 -39
  193. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +10 -39
  194. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +10 -39
  195. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +10 -39
  196. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +10 -39
  197. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +10 -39
  198. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +10 -39
  199. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +11 -40
  200. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +10 -39
  201. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +10 -39
  202. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +10 -39
  203. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +10 -39
  204. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +10 -39
  205. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +10 -39
  206. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +15 -40
  207. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +10 -39
  208. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +10 -39
  209. data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +10 -39
  210. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +10 -40
  211. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +10 -40
  212. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +10 -40
  213. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +10 -40
  214. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +10 -40
  215. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +10 -40
  216. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +10 -40
  217. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +10 -40
  218. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +10 -40
  219. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +10 -40
  220. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +10 -40
  221. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +10 -40
  222. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +10 -40
  223. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +10 -40
  224. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +10 -40
  225. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +10 -40
  226. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +10 -40
  227. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +10 -40
  228. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +10 -40
  229. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +10 -40
  230. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +10 -40
  231. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +10 -40
  232. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +10 -40
  233. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +10 -40
  234. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +10 -40
  235. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +10 -40
  236. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +10 -40
  237. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +10 -40
  238. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +10 -40
  239. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +10 -40
  240. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +10 -40
  241. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +10 -40
  242. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +10 -40
  243. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +10 -40
  244. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +10 -40
  245. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +10 -40
  246. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +10 -40
  247. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +10 -40
  248. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +10 -40
  249. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +10 -40
  250. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +10 -40
  251. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +11 -43
  252. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +10 -40
  253. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +10 -40
  254. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +10 -40
  255. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +10 -40
  256. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +10 -40
  257. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +10 -40
  258. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +10 -40
  259. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +10 -40
  260. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +10 -40
  261. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +10 -40
  262. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +10 -40
  263. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +10 -40
  264. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +10 -40
  265. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +10 -40
  266. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +10 -40
  267. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +10 -40
  268. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +10 -40
  269. data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +10 -40
  270. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +19 -25
  271. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +10 -40
  272. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +10 -40
  273. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +10 -40
  274. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +10 -40
  275. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +10 -40
  276. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +10 -40
  277. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +10 -40
  278. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +18 -24
  279. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +11 -41
  280. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +11 -41
  281. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +10 -40
  282. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ela.xml +549 -0
  283. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +13 -43
  284. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +10 -40
  285. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-cfm.xml +552 -0
  286. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +10 -40
  287. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +10 -40
  288. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +17 -47
  289. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +10 -40
  290. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +10 -40
  291. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +10 -40
  292. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +10 -40
  293. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +10 -40
  294. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +10 -40
  295. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +10 -40
  296. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +10 -40
  297. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +10 -40
  298. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +10 -40
  299. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading-seasons.xml +559 -0
  300. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +10 -40
  301. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +10 -40
  302. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +10 -40
  303. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +19 -25
  304. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +10 -40
  305. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +10 -40
  306. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-insulation.xml +10 -40
  307. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +10 -40
  308. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +10 -40
  309. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +10 -40
  310. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +10 -40
  311. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +10 -40
  312. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +10 -40
  313. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +10 -40
  314. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +10 -40
  315. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +10 -40
  316. data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +10 -40
  317. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-autosized-backup.xml +557 -0
  318. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +16 -41
  319. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml → base-hvac-air-to-air-heat-pump-1-speed-heating-capacity-17f.xml} +552 -583
  320. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +16 -41
  321. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml → base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml} +562 -586
  322. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +16 -41
  323. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +16 -41
  324. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +16 -41
  325. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml +587 -0
  326. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +17 -42
  327. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +16 -41
  328. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +16 -41
  329. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +16 -41
  330. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +10 -40
  331. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +10 -40
  332. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +10 -40
  333. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +10 -40
  334. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml +10 -40
  335. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +10 -40
  336. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +10 -40
  337. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +10 -40
  338. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +10 -40
  339. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +10 -40
  340. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +10 -40
  341. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml +10 -40
  342. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml +10 -40
  343. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +10 -40
  344. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +10 -40
  345. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +10 -40
  346. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +10 -40
  347. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +10 -40
  348. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +10 -40
  349. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +10 -40
  350. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +10 -40
  351. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +11 -41
  352. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +11 -41
  353. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +11 -41
  354. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted-backup-hardsized.xml +553 -0
  355. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +11 -41
  356. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +10 -40
  357. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +10 -40
  358. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +10 -40
  359. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +10 -40
  360. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +10 -40
  361. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +10 -40
  362. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +10 -40
  363. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +10 -40
  364. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +10 -40
  365. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +10 -40
  366. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +10 -40
  367. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +10 -40
  368. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +10 -40
  369. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +10 -40
  370. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +10 -40
  371. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +10 -40
  372. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +10 -40
  373. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +10 -40
  374. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +10 -40
  375. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-baseboard.xml +519 -0
  376. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +10 -40
  377. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +10 -40
  378. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +10 -40
  379. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +16 -40
  380. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +16 -40
  381. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +16 -40
  382. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +10 -40
  383. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +10 -40
  384. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +16 -40
  385. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +16 -40
  386. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +16 -40
  387. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-sizing-controls.xml +566 -0
  388. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +10 -40
  389. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +10 -40
  390. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +10 -40
  391. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +10 -40
  392. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +10 -40
  393. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +10 -40
  394. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only-pilot.xml +513 -0
  395. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +10 -40
  396. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +10 -40
  397. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +10 -40
  398. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +10 -40
  399. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +10 -40
  400. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +10 -40
  401. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +10 -40
  402. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +10 -40
  403. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +16 -41
  404. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-crankcase-heater-40w.xml +556 -0
  405. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +10 -40
  406. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +560 -0
  407. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +17 -42
  408. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +17 -42
  409. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +17 -42
  410. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +17 -42
  411. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +10 -40
  412. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +10 -40
  413. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-buried.xml +555 -0
  414. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-effective-rvalue.xml +553 -0
  415. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +10 -40
  416. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +10 -40
  417. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +10 -40
  418. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +10 -40
  419. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -40
  420. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +10 -40
  421. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +10 -40
  422. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +10 -40
  423. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only-pilot-light.xml +506 -0
  424. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +10 -40
  425. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +10 -40
  426. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +10 -40
  427. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +10 -40
  428. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +10 -40
  429. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +10 -40
  430. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +10 -40
  431. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-pilot.xml +542 -0
  432. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +10 -40
  433. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +10 -40
  434. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +10 -40
  435. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +10 -40
  436. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +10 -40
  437. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +10 -40
  438. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +10 -40
  439. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +10 -40
  440. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +10 -40
  441. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +14 -41
  442. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +14 -41
  443. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +14 -41
  444. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +10 -40
  445. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +10 -40
  446. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +10 -40
  447. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +10 -40
  448. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +10 -40
  449. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +10 -40
  450. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +14 -41
  451. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +10 -40
  452. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +10 -40
  453. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +16 -41
  454. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +16 -41
  455. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +16 -41
  456. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml +525 -0
  457. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-furnace.xml +564 -0
  458. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +16 -41
  459. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml +506 -0
  460. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -41
  461. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +10 -40
  462. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +10 -40
  463. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +10 -40
  464. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +10 -40
  465. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-natural-gas.xml +10 -40
  466. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +10 -40
  467. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp-heating-capacity-17f.xml +513 -0
  468. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +16 -40
  469. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +10 -40
  470. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +10 -40
  471. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +10 -40
  472. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +10 -40
  473. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +10 -40
  474. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +16 -40
  475. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +10 -40
  476. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +10 -40
  477. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +10 -40
  478. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +10 -40
  479. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +10 -40
  480. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +10 -40
  481. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +10 -40
  482. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +10 -40
  483. data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +10 -40
  484. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +11 -41
  485. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +10 -40
  486. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-kwh-per-year.xml +529 -0
  487. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-mixed.xml +537 -0
  488. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none-ceiling-fans.xml +516 -0
  489. data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -7
  490. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +10 -40
  491. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +10 -40
  492. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +10 -40
  493. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +10 -40
  494. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +10 -40
  495. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +10 -40
  496. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +10 -40
  497. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +10 -40
  498. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +10 -40
  499. data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +10 -40
  500. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +10 -40
  501. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +12 -42
  502. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +10 -40
  503. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +10 -40
  504. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -40
  505. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +10 -40
  506. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +10 -40
  507. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +10 -40
  508. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +10 -40
  509. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +10 -40
  510. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +10 -40
  511. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +10 -40
  512. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +10 -40
  513. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +10 -40
  514. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +14 -44
  515. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +10 -40
  516. data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +10 -40
  517. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +10 -38
  518. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +10 -40
  519. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +16 -42
  520. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +16 -42
  521. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +16 -42
  522. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +10 -40
  523. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +14 -37
  524. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +16 -42
  525. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +12 -42
  526. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +12 -42
  527. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +12 -42
  528. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +10 -40
  529. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +10 -38
  530. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +10 -38
  531. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +10 -40
  532. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading-bldgtype-multifamily.xml +509 -0
  533. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +10 -40
  534. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +10 -40
  535. data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +10 -41
  536. data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +30 -138
  537. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +16 -42
  538. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +24 -26
  539. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-round-trip-efficiency.xml +16 -42
  540. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +16 -42
  541. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +16 -42
  542. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +18 -44
  543. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +18 -44
  544. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +18 -44
  545. data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +16 -42
  546. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0-runperiod-1-month.xml +560 -0
  547. data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0.xml +556 -0
  548. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-loads-large-uncommon.xml → base-residents-1-misc-loads-large-uncommon.xml} +616 -644
  549. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-loads-large-uncommon2.xml → base-residents-1-misc-loads-large-uncommon2.xml} +616 -644
  550. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational.xml → base-residents-1.xml} +547 -575
  551. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-defaults.xml → base-residents-5.xml} +515 -539
  552. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +10 -40
  553. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +10 -40
  554. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml +565 -0
  555. data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-detailed-occupancy-smooth.xml → base-schedules-detailed-occupancy-stochastic-vacancy-year-round.xml} +563 -583
  556. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +21 -41
  557. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +10 -40
  558. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +10 -40
  559. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +10 -40
  560. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +10 -40
  561. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-available.xml +565 -0
  562. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-unavailable.xml +565 -0
  563. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml +620 -0
  564. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy-year-round.xml +619 -0
  565. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml +619 -0
  566. data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +10 -38
  567. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +10 -40
  568. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +10 -40
  569. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +10 -40
  570. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +10 -40
  571. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-temperature-capacitance-multiplier.xml +10 -40
  572. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +10 -40
  573. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +10 -40
  574. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +10 -40
  575. data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-30-mins.xml +10 -40
  576. data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +10 -37
  577. data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +16 -4
  578. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +16 -3
  579. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +16 -3
  580. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +16 -2
  581. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Long_Residence.xml +386 -0
  582. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Vatilo_Residence.xml +381 -0
  583. data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Victor_Residence.xml +370 -0
  584. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +2 -2
  585. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +2 -5
  586. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +2 -5
  587. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +2 -5
  588. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +2 -5
  589. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +2 -5
  590. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +2 -5
  591. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +2 -5
  592. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +2 -5
  593. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +2 -5
  594. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +2 -5
  595. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +2 -5
  596. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +2 -5
  597. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +2 -5
  598. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +2 -5
  599. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +2 -5
  600. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +2 -12
  601. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +2 -12
  602. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +2 -5
  603. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +2 -5
  604. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +2 -5
  605. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +2 -5
  606. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +2 -5
  607. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +2 -5
  608. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -9
  609. data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -9
  610. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +475 -444
  611. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +475 -444
  612. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +177 -112
  613. data/example_files/resources/meta_measure.rb +2 -27
  614. data/example_files/xml_building/17/README.md +3 -3
  615. data/lib/uo_cli/version.rb +3 -38
  616. data/lib/uo_cli.rb +3 -38
  617. data/uo_cli.gemspec +6 -7
  618. metadata +70 -51
  619. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.json +0 -388
  620. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +0 -6136
  621. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +0 -4846
  622. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-smooth.csv +0 -8761
  623. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-vacancy.csv +0 -8761
  624. data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +0 -35
  625. data/example_files/resources/hpxml-measures/weather/USA_CO_Colorado.Springs-Peterson.Field.724660_TMY3-cache.csv +0 -35
  626. data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +0 -35
  627. data/example_files/resources/hpxml-measures/weather/USA_DE_Wilmington-New.Castle.County.AP.724089_TMY3-cache.csv +0 -35
  628. data/example_files/resources/hpxml-measures/weather/USA_FL_Miami.Intl.AP.722020_TMY3-cache.csv +0 -35
  629. data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +0 -35
  630. data/example_files/resources/hpxml-measures/weather/USA_MD_Baltimore-Washington.Intl.AP.724060_TMY3-cache.csv +0 -35
  631. data/example_files/resources/hpxml-measures/weather/USA_MN_Duluth.Intl.AP.727450_TMY3-cache.csv +0 -35
  632. data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +0 -35
  633. data/example_files/resources/hpxml-measures/weather/USA_NC_Charlotte-Douglas.Intl.AP.723140_TMY3-cache.csv +0 -35
  634. data/example_files/resources/hpxml-measures/weather/USA_NJ_Cape.May.County.AP.745966_TMY3-cache.csv +0 -35
  635. data/example_files/resources/hpxml-measures/weather/USA_NV_Las.Vegas-McCarran.Intl.AP.723860_TMY3-cache.csv +0 -35
  636. data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +0 -35
  637. data/example_files/resources/hpxml-measures/weather/USA_TX_Dallas-Fort.Worth.Intl.AP.722590_TMY3-cache.csv +0 -35
  638. data/example_files/resources/hpxml-measures/weather/US_CO_Boulder_AMY_2012-cache.csv +0 -35
  639. data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +0 -35
  640. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +0 -2508
  641. data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +0 -2508
@@ -1,11 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Annual constant schedule
4
+ class ScheduleConstant
5
+ def initialize(model, sch_name, val = 1.0, schedule_type_limits_name = nil, unavailable_periods: [])
6
+ @model = model
7
+ @year = model.getYearDescription.assumedYear
8
+ @sch_name = sch_name
9
+ @val = val
10
+ @schedule = nil
11
+ @schedule_type_limits_name = schedule_type_limits_name
12
+ @unavailable_periods = unavailable_periods
13
+
14
+ @schedule = create_schedule()
15
+ end
16
+
17
+ def schedule
18
+ return @schedule
19
+ end
20
+
21
+ private
22
+
23
+ def create_schedule()
24
+ if @unavailable_periods.empty?
25
+ if @val == 1.0 && (@schedule_type_limits_name.nil? || @schedule_type_limits_name == Constants.ScheduleTypeLimitsOnOff)
26
+ schedule = @model.alwaysOnDiscreteSchedule
27
+ elsif @val == 0.0 && (@schedule_type_limits_name.nil? || @schedule_type_limits_name == Constants.ScheduleTypeLimitsOnOff)
28
+ schedule = @model.alwaysOffDiscreteSchedule
29
+ else
30
+ schedule = OpenStudio::Model::ScheduleConstant.new(@model)
31
+ schedule.setName(@sch_name)
32
+ schedule.setValue(@val)
33
+
34
+ Schedule.set_schedule_type_limits(@model, schedule, @schedule_type_limits_name)
35
+ end
36
+ else
37
+ schedule = OpenStudio::Model::ScheduleRuleset.new(@model)
38
+ schedule.setName(@sch_name)
39
+ schedule.defaultDaySchedule.setName(@sch_name + ' default day')
40
+
41
+ default_day_sch = schedule.defaultDaySchedule
42
+ default_day_sch.clearValues
43
+ default_day_sch.addValue(OpenStudio::Time.new(0, 24, 0, 0), @val)
44
+
45
+ Schedule.set_unavailable_periods(schedule, @sch_name, @unavailable_periods, @year)
46
+
47
+ Schedule.set_schedule_type_limits(@model, schedule, @schedule_type_limits_name)
48
+ end
49
+
50
+ return schedule
51
+ end
52
+ end
53
+
3
54
  # Annual schedule defined by 12 24-hour values for weekdays and weekends.
4
55
  class HourlyByMonthSchedule
5
56
  # weekday_month_by_hour_values must be a 12-element array of 24-element arrays of numbers.
6
57
  # weekend_month_by_hour_values must be a 12-element array of 24-element arrays of numbers.
7
58
  def initialize(model, sch_name, weekday_month_by_hour_values, weekend_month_by_hour_values,
8
- schedule_type_limits_name = nil, normalize_values = true)
59
+ schedule_type_limits_name = nil, normalize_values = true, unavailable_periods: nil)
9
60
  @model = model
10
61
  @year = model.getYearDescription.assumedYear
11
62
  @sch_name = sch_name
@@ -13,6 +64,7 @@ class HourlyByMonthSchedule
13
64
  @weekday_month_by_hour_values = validate_values(weekday_month_by_hour_values, 12, 24)
14
65
  @weekend_month_by_hour_values = validate_values(weekend_month_by_hour_values, 12, 24)
15
66
  @schedule_type_limits_name = schedule_type_limits_name
67
+ @unavailable_periods = unavailable_periods
16
68
 
17
69
  if normalize_values
18
70
  @maxval = calc_max_val()
@@ -80,6 +132,7 @@ class HourlyByMonthSchedule
80
132
 
81
133
  schedule = OpenStudio::Model::ScheduleRuleset.new(@model)
82
134
  schedule.setName(@sch_name)
135
+ schedule.defaultDaySchedule.setName(@sch_name + ' default day')
83
136
 
84
137
  prev_wkdy_vals = nil
85
138
  prev_wkdy_rule = nil
@@ -159,6 +212,8 @@ class HourlyByMonthSchedule
159
212
  prev_wknd_vals = wknd_vals
160
213
  end
161
214
 
215
+ Schedule.set_unavailable_periods(schedule, @sch_name, @unavailable_periods, @year)
216
+
162
217
  Schedule.set_schedule_type_limits(@model, schedule, @schedule_type_limits_name)
163
218
 
164
219
  return schedule
@@ -170,7 +225,7 @@ class HourlyByDaySchedule
170
225
  # weekday_day_by_hour_values must be a 365-element array of 24-element arrays of numbers.
171
226
  # weekend_day_by_hour_values must be a 365-element array of 24-element arrays of numbers.
172
227
  def initialize(model, sch_name, weekday_day_by_hour_values, weekend_day_by_hour_values,
173
- schedule_type_limits_name = nil, normalize_values = true)
228
+ schedule_type_limits_name = nil, normalize_values = true, unavailable_periods: nil)
174
229
  @model = model
175
230
  @year = model.getYearDescription.assumedYear
176
231
  @sch_name = sch_name
@@ -179,6 +234,7 @@ class HourlyByDaySchedule
179
234
  @weekday_day_by_hour_values = validate_values(weekday_day_by_hour_values, @num_days, 24)
180
235
  @weekend_day_by_hour_values = validate_values(weekend_day_by_hour_values, @num_days, 24)
181
236
  @schedule_type_limits_name = schedule_type_limits_name
237
+ @unavailable_periods = unavailable_periods
182
238
 
183
239
  if normalize_values
184
240
  @maxval = calc_max_val()
@@ -228,7 +284,7 @@ class HourlyByDaySchedule
228
284
  end
229
285
 
230
286
  def calc_max_val()
231
- maxval = [@weekday_month_by_hour_values.flatten.max, @weekend_month_by_hour_values.flatten.max].max
287
+ maxval = [@weekday_day_by_hour_values.flatten.max, @weekend_day_by_hour_values.flatten.max].max
232
288
  if maxval == 0.0
233
289
  maxval = 1.0 # Prevent divide by zero
234
290
  end
@@ -243,6 +299,7 @@ class HourlyByDaySchedule
243
299
 
244
300
  schedule = OpenStudio::Model::ScheduleRuleset.new(@model)
245
301
  schedule.setName(@sch_name)
302
+ schedule.defaultDaySchedule.setName(@sch_name + ' default day')
246
303
 
247
304
  prev_wkdy_vals = nil
248
305
  prev_wkdy_rule = nil
@@ -322,6 +379,8 @@ class HourlyByDaySchedule
322
379
  prev_wknd_vals = wknd_vals
323
380
  end
324
381
 
382
+ Schedule.set_unavailable_periods(schedule, @sch_name, @unavailable_periods, @year)
383
+
325
384
  Schedule.set_schedule_type_limits(@model, schedule, @schedule_type_limits_name)
326
385
 
327
386
  return schedule
@@ -335,19 +394,20 @@ class MonthWeekdayWeekendSchedule
335
394
  # monthly_values can either be a comma-separated string of 12 numbers or a 12-element array of numbers.
336
395
  def initialize(model, sch_name, weekday_hourly_values, weekend_hourly_values, monthly_values,
337
396
  schedule_type_limits_name = nil, normalize_values = true, begin_month = 1,
338
- begin_day = 1, end_month = 12, end_day = 31)
397
+ begin_day = 1, end_month = 12, end_day = 31, unavailable_periods: nil)
339
398
  @model = model
340
399
  @year = model.getYearDescription.assumedYear
341
400
  @sch_name = sch_name
342
401
  @schedule = nil
343
- @weekday_hourly_values = validate_values(weekday_hourly_values, 24, 'weekday')
344
- @weekend_hourly_values = validate_values(weekend_hourly_values, 24, 'weekend')
345
- @monthly_values = validate_values(monthly_values, 12, 'monthly')
402
+ @weekday_hourly_values = Schedule.validate_values(weekday_hourly_values, 24, 'weekday')
403
+ @weekend_hourly_values = Schedule.validate_values(weekend_hourly_values, 24, 'weekend')
404
+ @monthly_values = Schedule.validate_values(monthly_values, 12, 'monthly')
346
405
  @schedule_type_limits_name = schedule_type_limits_name
347
406
  @begin_month = begin_month
348
407
  @begin_day = begin_day
349
408
  @end_month = end_month
350
409
  @end_day = end_day
410
+ @unavailable_periods = unavailable_periods
351
411
 
352
412
  if normalize_values
353
413
  @weekday_hourly_values = normalize_sum_to_one(@weekday_hourly_values)
@@ -382,44 +442,6 @@ class MonthWeekdayWeekendSchedule
382
442
 
383
443
  private
384
444
 
385
- def validate_values(values, num_values, sch_name)
386
- err_msg = "A comma-separated string of #{num_values} numbers must be entered for the #{sch_name} schedule."
387
- if values.is_a?(Array)
388
- if values.length != num_values
389
- fail err_msg
390
- end
391
-
392
- values.each do |val|
393
- if not valid_float?(val)
394
- fail err_msg
395
- end
396
- end
397
- floats = values.map { |i| i.to_f }
398
- elsif values.is_a?(String)
399
- begin
400
- vals = values.split(',')
401
- vals.each do |val|
402
- if not valid_float?(val)
403
- fail err_msg
404
- end
405
- end
406
- floats = vals.map { |i| i.to_f }
407
- if floats.length != num_values
408
- fail err_msg
409
- end
410
- rescue
411
- fail err_msg
412
- end
413
- else
414
- fail err_msg
415
- end
416
- return floats
417
- end
418
-
419
- def valid_float?(str)
420
- !!Float(str) rescue false
421
- end
422
-
423
445
  def normalize_sum_to_one(values)
424
446
  sum = values.reduce(:+).to_f
425
447
  if sum == 0.0
@@ -482,6 +504,7 @@ class MonthWeekdayWeekendSchedule
482
504
 
483
505
  schedule = OpenStudio::Model::ScheduleRuleset.new(@model)
484
506
  schedule.setName(@sch_name)
507
+ schedule.defaultDaySchedule.setName(@sch_name + ' default day')
485
508
 
486
509
  prev_wkdy_vals = nil
487
510
  prev_wkdy_rule = nil
@@ -571,6 +594,8 @@ class MonthWeekdayWeekendSchedule
571
594
  end
572
595
  end
573
596
 
597
+ Schedule.set_unavailable_periods(schedule, @sch_name, @unavailable_periods, @year)
598
+
574
599
  Schedule.set_schedule_type_limits(@model, schedule, @schedule_type_limits_name)
575
600
 
576
601
  return schedule
@@ -682,14 +707,7 @@ class Schedule
682
707
  def self.set_schedule_type_limits(model, schedule, schedule_type_limits_name)
683
708
  return if schedule_type_limits_name.nil?
684
709
 
685
- schedule_type_limits = nil
686
- model.getScheduleTypeLimitss.each do |stl|
687
- next if stl.name.to_s != schedule_type_limits_name
688
-
689
- schedule_type_limits = stl
690
- break
691
- end
692
-
710
+ schedule_type_limits = model.getScheduleTypeLimitss.find { |stl| stl.name.to_s == schedule_type_limits_name }
693
711
  if schedule_type_limits.nil?
694
712
  schedule_type_limits = OpenStudio::Model::ScheduleTypeLimits.new(model)
695
713
  schedule_type_limits.setName(schedule_type_limits_name)
@@ -722,6 +740,111 @@ class Schedule
722
740
  rule.setApplySunday(true)
723
741
  end
724
742
 
743
+ def self.get_unavailable_periods(runner, schedule_name, unavailable_periods)
744
+ return unavailable_periods.select { |p| Schedule.unavailable_period_applies(runner, schedule_name, p.column_name) }
745
+ end
746
+
747
+ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year)
748
+ return if unavailable_periods.nil?
749
+
750
+ # Add off rule(s), will override previous rules
751
+ unavailable_periods.each_with_index do |period, i|
752
+ # Special Values
753
+ if sch_name.include? Constants.ObjectNameWaterHeaterSetpoint
754
+ # Water heater setpoint
755
+ # Temperature of tank < 2C indicates of possibility of freeze.
756
+ value = 2.0
757
+ elsif sch_name.include? Constants.ObjectNameNaturalVentilation
758
+ if period.natvent_availability == HPXML::ScheduleRegular
759
+ next # don't change the natural ventilation availability schedule
760
+ elsif period.natvent_availability == HPXML::ScheduleAvailable
761
+ value = 1.0
762
+ elsif period.natvent_availability == HPXML::ScheduleUnavailable
763
+ value = 0.0
764
+ end
765
+ else
766
+ value = 0.0
767
+ end
768
+
769
+ day_s = Schedule.get_day_num_from_month_day(year, period.begin_month, period.begin_day)
770
+ day_e = Schedule.get_day_num_from_month_day(year, period.end_month, period.end_day)
771
+
772
+ date_s = OpenStudio::Date::fromDayOfYear(day_s, year)
773
+ date_e = OpenStudio::Date::fromDayOfYear(day_e, year)
774
+
775
+ begin_day_schedule = schedule.getDaySchedules(date_s, date_s)[0]
776
+ end_day_schedule = schedule.getDaySchedules(date_e, date_e)[0]
777
+
778
+ outage_days = day_e - day_s
779
+ if outage_days == 0 # outage is less than 1 calendar day (need 1 outage rule)
780
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e)
781
+ Schedule.set_unavailable_period_values(out, begin_day_schedule, period.begin_hour, period.end_hour, value)
782
+ else # outage is at least 1 calendar day
783
+ if period.begin_hour == 0 && period.end_hour == 24 # 1 outage rule
784
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e)
785
+ out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value)
786
+ elsif (period.begin_hour == 0 && period.end_hour != 24) || (period.begin_hour != 0 && period.end_hour == 24) # 2 outage rules
787
+ if period.begin_hour == 0 && period.end_hour != 24
788
+ # last day
789
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_e, date_e)
790
+ Schedule.set_unavailable_period_values(out, end_day_schedule, 0, period.end_hour, value)
791
+
792
+ # all other days
793
+ date_e2 = OpenStudio::Date::fromDayOfYear(day_e - 1, year)
794
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e2)
795
+ out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value)
796
+ elsif period.begin_hour != 0 && period.end_hour == 24
797
+ # first day
798
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_s)
799
+ Schedule.set_unavailable_period_values(out, begin_day_schedule, period.begin_hour, 24, value)
800
+
801
+ # all other days
802
+ date_s2 = OpenStudio::Date::fromDayOfYear(day_s + 1, year)
803
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s2, date_e)
804
+ out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value)
805
+ end
806
+ else # 3 outage rules
807
+ # first day
808
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_s)
809
+ Schedule.set_unavailable_period_values(out, begin_day_schedule, period.begin_hour, 24, value)
810
+
811
+ # all other days
812
+ date_s2 = OpenStudio::Date::fromDayOfYear(day_s + 1, year)
813
+ date_e2 = OpenStudio::Date::fromDayOfYear(day_e - 1, year)
814
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s2, date_e2)
815
+ out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value)
816
+
817
+ # last day
818
+ out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_e, date_e)
819
+ Schedule.set_unavailable_period_values(out, end_day_schedule, 0, period.end_hour, value)
820
+ end
821
+ end
822
+ end
823
+ end
824
+
825
+ def self.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e)
826
+ out_rule = OpenStudio::Model::ScheduleRule.new(schedule)
827
+ out_rule.setName(sch_name + " unavailable period ruleset#{i}")
828
+ out_sch = out_rule.daySchedule
829
+ out_sch.setName(sch_name + " unavailable period#{i}")
830
+ out_rule.setStartDate(date_s)
831
+ out_rule.setEndDate(date_e)
832
+ Schedule.set_weekday_rule(out_rule)
833
+ Schedule.set_weekend_rule(out_rule)
834
+ return out_sch
835
+ end
836
+
837
+ def self.set_unavailable_period_values(out, day_schedule, begin_hour, end_hour, value)
838
+ for h in 0..23
839
+ time = OpenStudio::Time.new(0, h + 1, 0, 0)
840
+ if (h < begin_hour) || (h >= end_hour)
841
+ out.addValue(time, day_schedule.getValue(time))
842
+ else
843
+ out.addValue(time, value)
844
+ end
845
+ end
846
+ end
847
+
725
848
  def self.OccupantsWeekdayFractions
726
849
  return '0.061, 0.061, 0.061, 0.061, 0.061, 0.061, 0.061, 0.053, 0.025, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.018, 0.033, 0.054, 0.054, 0.054, 0.061, 0.061, 0.061'
727
850
  end
@@ -1069,17 +1192,17 @@ class Schedule
1069
1192
  return s
1070
1193
  end
1071
1194
 
1072
- def self.parse_date_range(date_range)
1073
- begin_end_dates = date_range.split('-').map { |v| v.strip }
1195
+ def self.parse_date_time_range(date_time_range)
1196
+ begin_end_dates = date_time_range.split('-').map { |v| v.strip }
1074
1197
  if begin_end_dates.size != 2
1075
- fail "Invalid date format specified for '#{date_range}'."
1198
+ fail "Invalid date format specified for '#{date_time_range}'."
1076
1199
  end
1077
1200
 
1078
1201
  begin_values = begin_end_dates[0].split(' ').map { |v| v.strip }
1079
1202
  end_values = begin_end_dates[1].split(' ').map { |v| v.strip }
1080
1203
 
1081
- if (begin_values.size != 2) || (end_values.size != 2)
1082
- fail "Invalid date format specified for '#{date_range}'."
1204
+ if !(begin_values.size == 2 || begin_values.size == 3) || !(end_values.size == 2 || end_values.size == 3)
1205
+ fail "Invalid date format specified for '#{date_time_range}'."
1083
1206
  end
1084
1207
 
1085
1208
  require 'date'
@@ -1087,15 +1210,27 @@ class Schedule
1087
1210
  end_month = Date::ABBR_MONTHNAMES.index(end_values[0].capitalize)
1088
1211
  begin_day = begin_values[1].to_i
1089
1212
  end_day = end_values[1].to_i
1213
+ if begin_values.size == 3
1214
+ begin_hour = begin_values[2].to_i
1215
+ end
1216
+ if end_values.size == 3
1217
+ end_hour = end_values[2].to_i
1218
+ end
1090
1219
  if begin_month.nil? || end_month.nil? || begin_day == 0 || end_day == 0
1091
- fail "Invalid date format specified for '#{date_range}'."
1220
+ fail "Invalid date format specified for '#{date_time_range}'."
1092
1221
  end
1093
1222
 
1094
- return begin_month, begin_day, end_month, end_day
1223
+ return begin_month, begin_day, begin_hour, end_month, end_day, end_hour
1095
1224
  end
1096
1225
 
1097
1226
  def self.get_begin_and_end_dates_from_monthly_array(months, year)
1098
- if months[0] == 1 && months[11] == 1 # Wrap around year
1227
+ num_days_in_month = Constants.NumDaysInMonths(year)
1228
+
1229
+ if months.uniq.size == 1 && months[0] == 1 # Year-round
1230
+ return 1, 1, 12, num_days_in_month[11]
1231
+ elsif months.uniq.size == 1 && months[0] == 0 # Never
1232
+ return
1233
+ elsif months[0] == 1 && months[11] == 1 # Wrap around year
1099
1234
  begin_month = 12 - months.reverse.index(0) + 1
1100
1235
  end_month = months.index(0)
1101
1236
  else
@@ -1103,22 +1238,94 @@ class Schedule
1103
1238
  end_month = 12 - months.reverse.index(1)
1104
1239
  end
1105
1240
 
1106
- num_days_in_month = Constants.NumDaysInMonths(year)
1107
-
1108
1241
  begin_day = 1
1109
1242
  end_day = num_days_in_month[end_month - 1]
1110
1243
 
1111
1244
  return begin_month, begin_day, end_month, end_day
1112
1245
  end
1113
1246
 
1114
- def self.schedules_file_includes_col_name(schedules_file, col_name)
1115
- schedules_file_includes_col_name = false
1116
- if not schedules_file.nil?
1117
- if schedules_file.schedules.keys.include?(col_name)
1118
- schedules_file_includes_col_name = true
1247
+ def self.get_unavailable_periods_csv_data
1248
+ unavailable_periods_csv = File.join(File.dirname(__FILE__), 'data', 'unavailable_periods.csv')
1249
+ if not File.exist?(unavailable_periods_csv)
1250
+ fail 'Could not find unavailable_periods.csv'
1251
+ end
1252
+
1253
+ require 'csv'
1254
+ unavailable_periods_csv_data = CSV.open(unavailable_periods_csv, headers: :first_row).map(&:to_h)
1255
+
1256
+ return unavailable_periods_csv_data
1257
+ end
1258
+
1259
+ def self.unavailable_period_applies(runner, schedule_name, col_name)
1260
+ if @unavailable_periods_csv_data.nil?
1261
+ @unavailable_periods_csv_data = get_unavailable_periods_csv_data
1262
+
1263
+ end
1264
+ @unavailable_periods_csv_data.each do |csv_row|
1265
+ next if csv_row['Schedule Name'] != schedule_name
1266
+
1267
+ if not csv_row.keys.include? col_name
1268
+ fail "Could not find column='#{col_name}' in unavailable_periods.csv."
1119
1269
  end
1270
+
1271
+ begin
1272
+ applies = Integer(csv_row[col_name])
1273
+ rescue
1274
+ fail "Value is not a valid integer for row='#{schedule_name}' and column='#{col_name}' in unavailable_periods.csv."
1275
+ end
1276
+ if applies == 1
1277
+ if not runner.nil?
1278
+ if schedule_name == SchedulesFile::ColumnHVAC
1279
+ runner.registerWarning('It is not possible to eliminate all HVAC energy use (e.g. crankcase/defrost energy) in EnergyPlus during an unavailable period.')
1280
+ elsif schedule_name == SchedulesFile::ColumnWaterHeater
1281
+ runner.registerWarning('It is not possible to eliminate all water heater energy use (e.g. parasitics) in EnergyPlus during an unavailable period.')
1282
+ end
1283
+ end
1284
+ return true
1285
+ elsif applies == 0
1286
+ return false
1287
+ end
1288
+ end
1289
+
1290
+ fail "Could not find row='#{schedule_name}' in unavailable_periods.csv"
1291
+ end
1292
+
1293
+ def self.validate_values(values, num_values, sch_name)
1294
+ err_msg = "A comma-separated string of #{num_values} numbers must be entered for the #{sch_name} schedule."
1295
+ if values.is_a?(Array)
1296
+ if values.length != num_values
1297
+ fail err_msg
1298
+ end
1299
+
1300
+ values.each do |val|
1301
+ if not valid_float?(val)
1302
+ fail err_msg
1303
+ end
1304
+ end
1305
+ floats = values.map { |i| i.to_f }
1306
+ elsif values.is_a?(String)
1307
+ begin
1308
+ vals = values.split(',')
1309
+ vals.each do |val|
1310
+ if not valid_float?(val)
1311
+ fail err_msg
1312
+ end
1313
+ end
1314
+ floats = vals.map { |i| i.to_f }
1315
+ if floats.length != num_values
1316
+ fail err_msg
1317
+ end
1318
+ rescue
1319
+ fail err_msg
1320
+ end
1321
+ else
1322
+ fail err_msg
1120
1323
  end
1121
- return schedules_file_includes_col_name
1324
+ return floats
1325
+ end
1326
+
1327
+ def self.valid_float?(str)
1328
+ !!Float(str) rescue false
1122
1329
  end
1123
1330
  end
1124
1331
 
@@ -1151,7 +1358,6 @@ class SchedulesFile
1151
1358
  ColumnHotWaterDishwasher = 'hot_water_dishwasher'
1152
1359
  ColumnHotWaterClothesWasher = 'hot_water_clothes_washer'
1153
1360
  ColumnHotWaterFixtures = 'hot_water_fixtures'
1154
- ColumnVacancy = 'vacancy'
1155
1361
  ColumnSleeping = 'sleeping'
1156
1362
  ColumnHeatingSetpoint = 'heating_setpoint'
1157
1363
  ColumnCoolingSetpoint = 'cooling_setpoint'
@@ -1160,31 +1366,34 @@ class SchedulesFile
1160
1366
  ColumnBattery = 'battery'
1161
1367
  ColumnBatteryCharging = 'battery_charging'
1162
1368
  ColumnBatteryDischarging = 'battery_discharging'
1369
+ ColumnHVAC = 'hvac'
1370
+ ColumnWaterHeater = 'water_heater'
1371
+ ColumnDehumidifier = 'dehumidifier'
1372
+ ColumnKitchenFan = 'kitchen_fan'
1373
+ ColumnBathFan = 'bath_fan'
1374
+ ColumnHouseFan = 'house_fan'
1375
+ ColumnWholeHouseFan = 'whole_house_fan'
1163
1376
 
1164
1377
  def initialize(runner: nil,
1165
1378
  model: nil,
1166
- schedules_paths:)
1379
+ schedules_paths:,
1380
+ year:,
1381
+ unavailable_periods: [],
1382
+ output_path:)
1167
1383
  return if schedules_paths.empty?
1168
1384
 
1169
1385
  @runner = runner
1170
1386
  @model = model
1171
1387
  @schedules_paths = schedules_paths
1388
+ @year = year
1172
1389
 
1173
1390
  import()
1174
1391
  battery_schedules
1175
1392
  @tmp_schedules = Marshal.load(Marshal.dump(@schedules))
1176
-
1177
- set_vacancy
1393
+ set_unavailable_periods(unavailable_periods)
1178
1394
  convert_setpoints
1179
-
1180
- tmpdir = Dir.tmpdir
1181
- tmpdir = ENV['LOCAL_SCRATCH'] if ENV.keys.include?('LOCAL_SCRATCH')
1182
- tmpfile = Tempfile.new(['schedules', '.csv'], tmpdir)
1183
- tmp_schedules_path = tmpfile.path.to_s
1184
-
1185
- export(tmp_schedules_path)
1186
-
1187
- get_external_file(tmp_schedules_path)
1395
+ @output_schedules_path = output_path
1396
+ export()
1188
1397
  end
1189
1398
 
1190
1399
  def nil?
@@ -1195,7 +1404,16 @@ class SchedulesFile
1195
1404
  return false
1196
1405
  end
1197
1406
 
1407
+ def includes_col_name(col_name)
1408
+ if @schedules.keys.include?(col_name)
1409
+ return true
1410
+ end
1411
+
1412
+ return false
1413
+ end
1414
+
1198
1415
  def import()
1416
+ num_hrs_in_year = Constants.NumHoursInYear(@year)
1199
1417
  @schedules = {}
1200
1418
  @schedules_paths.each do |schedules_path|
1201
1419
  columns = CSV.read(schedules_path).transpose
@@ -1214,23 +1432,6 @@ class SchedulesFile
1214
1432
  fail "Schedule column name '#{col_name}' is duplicated. [context: #{schedules_path}]"
1215
1433
  end
1216
1434
 
1217
- @schedules[col_name] = values
1218
- end
1219
- end
1220
- end
1221
-
1222
- def validate_schedules(year:)
1223
- @year = year
1224
- num_hrs_in_year = Constants.NumHoursInYear(@year)
1225
-
1226
- @schedules_paths.each do |schedules_path|
1227
- columns = CSV.read(schedules_path).transpose
1228
- columns.each do |col|
1229
- col_name = col[0]
1230
- values = col[1..-1].reject { |v| v.nil? }
1231
- values = values.map { |v| Float(v) }
1232
- schedule_length = values.length
1233
-
1234
1435
  if max_value_one[col_name]
1235
1436
  if values.max > 1
1236
1437
  fail "Schedule max value for column '#{col_name}' must be 1. [context: #{schedules_path}]"
@@ -1257,17 +1458,19 @@ class SchedulesFile
1257
1458
 
1258
1459
  valid_minutes_per_item = [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60]
1259
1460
  valid_num_rows = valid_minutes_per_item.map { |min_per_item| (60.0 * num_hrs_in_year / min_per_item).to_i }
1260
- unless valid_num_rows.include? schedule_length
1261
- fail "Schedule has invalid number of rows (#{schedule_length}) for column '#{col_name}'. Must be one of: #{valid_num_rows.reverse.join(', ')}. [context: #{@schedules_path}]"
1461
+ unless valid_num_rows.include? values.length
1462
+ fail "Schedule has invalid number of rows (#{values.length}) for column '#{col_name}'. Must be one of: #{valid_num_rows.reverse.join(', ')}. [context: #{@schedules_path}]"
1262
1463
  end
1464
+
1465
+ @schedules[col_name] = values
1263
1466
  end
1264
1467
  end
1265
1468
  end
1266
1469
 
1267
- def export(tmp_schedules_path)
1268
- return false if tmp_schedules_path.nil?
1470
+ def export()
1471
+ return false if @output_schedules_path.nil?
1269
1472
 
1270
- CSV.open(tmp_schedules_path, 'wb') do |csv|
1473
+ CSV.open(@output_schedules_path, 'wb') do |csv|
1271
1474
  csv << @tmp_schedules.keys
1272
1475
  rows = @tmp_schedules.values.transpose
1273
1476
  rows.each do |row|
@@ -1286,10 +1489,6 @@ class SchedulesFile
1286
1489
  return @tmp_schedules
1287
1490
  end
1288
1491
 
1289
- def external_file
1290
- return @external_file
1291
- end
1292
-
1293
1492
  def get_col_index(col_name:)
1294
1493
  headers = @tmp_schedules.keys
1295
1494
 
@@ -1298,7 +1497,8 @@ class SchedulesFile
1298
1497
  end
1299
1498
 
1300
1499
  def create_schedule_file(col_name:,
1301
- rows_to_skip: 1)
1500
+ rows_to_skip: 1,
1501
+ schedule_type_limits_name: nil)
1302
1502
  @model.getScheduleFiles.each do |schedule_file|
1303
1503
  next if schedule_file.name.to_s != col_name
1304
1504
 
@@ -1314,27 +1514,29 @@ class SchedulesFile
1314
1514
  schedule_length = @schedules[col_name].length
1315
1515
  min_per_item = 60.0 / (schedule_length / num_hrs_in_year)
1316
1516
 
1317
- schedule_file = OpenStudio::Model::ScheduleFile.new(@external_file)
1517
+ schedule_file = OpenStudio::Model::ScheduleFile.new(@model, @output_schedules_path)
1318
1518
  schedule_file.setName(col_name)
1319
1519
  schedule_file.setColumnNumber(col_index + 1)
1320
1520
  schedule_file.setRowstoSkipatTop(rows_to_skip)
1321
1521
  schedule_file.setNumberofHoursofData(num_hrs_in_year.to_i)
1322
1522
  schedule_file.setMinutesperItem(min_per_item.to_i)
1323
1523
 
1524
+ Schedule.set_schedule_type_limits(@model, schedule_file, schedule_type_limits_name)
1525
+
1324
1526
  return schedule_file
1325
1527
  end
1326
1528
 
1327
1529
  # the equivalent number of hours in the year, if the schedule was at full load (1.0)
1328
1530
  def annual_equivalent_full_load_hrs(col_name:,
1329
1531
  schedules: nil)
1330
- if @schedules[col_name].nil?
1331
- return
1332
- end
1333
-
1334
1532
  if schedules.nil?
1335
1533
  schedules = @schedules # the schedules before vacancy is applied
1336
1534
  end
1337
1535
 
1536
+ if schedules[col_name].nil?
1537
+ return
1538
+ end
1539
+
1338
1540
  num_hrs_in_year = Constants.NumHoursInYear(@year)
1339
1541
  schedule_length = schedules[col_name].length
1340
1542
  min_per_item = 60.0 / (schedule_length / num_hrs_in_year)
@@ -1353,6 +1555,8 @@ class SchedulesFile
1353
1555
  end
1354
1556
 
1355
1557
  ann_equiv_full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1558
+ return 0 if ann_equiv_full_load_hrs == 0
1559
+
1356
1560
  design_level = annual_kwh * 1000.0 / ann_equiv_full_load_hrs # W
1357
1561
 
1358
1562
  return design_level
@@ -1380,6 +1584,8 @@ class SchedulesFile
1380
1584
  end
1381
1585
 
1382
1586
  full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1587
+ return 0 if full_load_hrs == 0
1588
+
1383
1589
  num_days_in_year = Constants.NumDaysInYear(@year)
1384
1590
  daily_full_load_hrs = full_load_hrs / num_days_in_year
1385
1591
  design_level = UnitConversions.convert(daily_kwh / daily_full_load_hrs, 'kW', 'W')
@@ -1395,6 +1601,8 @@ class SchedulesFile
1395
1601
  end
1396
1602
 
1397
1603
  ann_equiv_full_load_hrs = annual_equivalent_full_load_hrs(col_name: col_name)
1604
+ return 0 if ann_equiv_full_load_hrs == 0
1605
+
1398
1606
  num_days_in_year = Constants.NumDaysInYear(@year)
1399
1607
  daily_full_load_hrs = ann_equiv_full_load_hrs / num_days_in_year
1400
1608
  peak_flow = daily_water / daily_full_load_hrs # gallons_per_hour
@@ -1403,32 +1611,72 @@ class SchedulesFile
1403
1611
  return peak_flow
1404
1612
  end
1405
1613
 
1406
- def get_external_file(tmp_schedules_path)
1407
- if File.exist? tmp_schedules_path
1408
- @external_file = OpenStudio::Model::ExternalFile::getExternalFile(@model, tmp_schedules_path)
1409
- if @external_file.is_initialized
1410
- @external_file = @external_file.get
1411
- # ExternalFile creates a new file, so delete our temporary one immediately if we can
1412
- begin
1413
- File.delete(tmp_schedules_path)
1414
- rescue
1415
- end
1416
- else
1417
- fail "Could not get external file for path '#{tmp_schedules_path}'."
1614
+ def create_column_values_from_periods(col_name, periods)
1615
+ # Create a column of zeroes or ones for, e.g., vacancy periods or power outage periods
1616
+ n_steps = @tmp_schedules[@tmp_schedules.keys[0]].length
1617
+ num_days_in_year = Constants.NumDaysInYear(@year)
1618
+ steps_in_day = n_steps / num_days_in_year
1619
+ steps_in_hour = steps_in_day / 24
1620
+
1621
+ if @tmp_schedules[col_name].nil?
1622
+ @tmp_schedules[col_name] = Array.new(n_steps, 0)
1623
+ end
1624
+
1625
+ periods.each do |period|
1626
+ begin_day_num = Schedule.get_day_num_from_month_day(@year, period.begin_month, period.begin_day)
1627
+ end_day_num = Schedule.get_day_num_from_month_day(@year, period.end_month, period.end_day)
1628
+
1629
+ begin_hour = 0
1630
+ end_hour = 24
1631
+
1632
+ begin_hour = period.begin_hour if not period.begin_hour.nil?
1633
+ end_hour = period.end_hour if not period.end_hour.nil?
1634
+
1635
+ if end_day_num >= begin_day_num
1636
+ @tmp_schedules[col_name].fill(1.0, (begin_day_num - 1) * steps_in_day + (begin_hour * steps_in_hour), (end_day_num - begin_day_num + 1) * steps_in_day - ((24 - end_hour + begin_hour) * steps_in_hour)) # Fill between begin/end days
1637
+ else # Wrap around year
1638
+ @tmp_schedules[col_name].fill(1.0, (begin_day_num - 1) * steps_in_day + (begin_hour * steps_in_hour)) # Fill between begin day and end of year
1639
+ @tmp_schedules[col_name].fill(1.0, 0, (end_day_num - 1) * steps_in_day + (end_hour * steps_in_hour)) # Fill between begin of year and end day
1418
1640
  end
1419
1641
  end
1420
1642
  end
1421
1643
 
1422
- def set_vacancy
1423
- return unless @tmp_schedules.keys.include? ColumnVacancy
1424
- return if @tmp_schedules[ColumnVacancy].all? { |i| i == 0 }
1644
+ def set_unavailable_periods(unavailable_periods)
1645
+ if @unavailable_periods_csv_data.nil?
1646
+ @unavailable_periods_csv_data = Schedule.get_unavailable_periods_csv_data
1647
+ end
1648
+ column_names = @unavailable_periods_csv_data[0].keys[1..-1]
1649
+ column_names.each do |column_name|
1650
+ create_column_values_from_periods(column_name, unavailable_periods.select { |p| p.column_name == column_name })
1651
+ next if @tmp_schedules[column_name].all? { |i| i == 0 }
1652
+
1653
+ @tmp_schedules.keys.each do |schedule_name|
1654
+ next if column_names.include? schedule_name
1655
+ next if SchedulesFile.OperatingModeColumnNames.include?(schedule_name)
1656
+ next if SchedulesFile.BatteryColumnNames.include?(schedule_name)
1657
+
1658
+ schedule_name2 = schedule_name
1659
+ if [SchedulesFile::ColumnHotWaterDishwasher].include?(schedule_name)
1660
+ schedule_name2 = SchedulesFile::ColumnDishwasher
1661
+ elsif [SchedulesFile::ColumnHotWaterClothesWasher].include?(schedule_name)
1662
+ schedule_name2 = SchedulesFile::ColumnClothesWasher
1663
+ elsif [SchedulesFile::ColumnHeatingSetpoint, SchedulesFile::ColumnCoolingSetpoint].include?(schedule_name)
1664
+ schedule_name2 = SchedulesFile::ColumnHVAC
1665
+ elsif [SchedulesFile::ColumnWaterHeaterSetpoint].include?(schedule_name)
1666
+ schedule_name2 = SchedulesFile::ColumnWaterHeater
1667
+ end
1425
1668
 
1426
- @tmp_schedules[ColumnVacancy].each_with_index do |_ts, i|
1427
- @tmp_schedules.keys.each do |col_name|
1428
- next if col_name == ColumnVacancy
1429
- next unless affected_by_vacancy[col_name] # skip those unaffected by vacancy
1669
+ # Skip those unaffected
1670
+ next unless Schedule.unavailable_period_applies(@runner, schedule_name2, column_name)
1430
1671
 
1431
- @tmp_schedules[col_name][i] *= (1.0 - @tmp_schedules[ColumnVacancy][i])
1672
+ @tmp_schedules[column_name].each_with_index do |_ts, i|
1673
+ if schedule_name == ColumnWaterHeaterSetpoint
1674
+ # Temperature of tank < 2C indicates of possibility of freeze.
1675
+ @tmp_schedules[schedule_name][i] = UnitConversions.convert(2.0, 'C', 'F') if @tmp_schedules[column_name][i] == 1.0
1676
+ else
1677
+ @tmp_schedules[schedule_name][i] *= (1.0 - @tmp_schedules[column_name][i])
1678
+ end
1679
+ end
1432
1680
  end
1433
1681
  end
1434
1682
  end
@@ -1442,7 +1690,7 @@ class SchedulesFile
1442
1690
  SchedulesFile.SetpointColumnNames.each do |setpoint_col_name|
1443
1691
  next unless col_names.include?(setpoint_col_name)
1444
1692
 
1445
- @tmp_schedules[setpoint_col_name][i] = UnitConversions.convert(@tmp_schedules[setpoint_col_name][i], 'f', 'c')
1693
+ @tmp_schedules[setpoint_col_name][i] = UnitConversions.convert(@tmp_schedules[setpoint_col_name][i], 'f', 'c').round(4)
1446
1694
  end
1447
1695
  end
1448
1696
  end
@@ -1534,25 +1782,6 @@ class SchedulesFile
1534
1782
  ]
1535
1783
  end
1536
1784
 
1537
- def affected_by_vacancy
1538
- affected_by_vacancy = {}
1539
- column_names = SchedulesFile.ColumnNames
1540
- column_names.each do |column_name|
1541
- affected_by_vacancy[column_name] = true
1542
- next unless ([ColumnRefrigerator,
1543
- ColumnExtraRefrigerator,
1544
- ColumnFreezer,
1545
- ColumnPoolPump,
1546
- ColumnPoolHeater,
1547
- ColumnHotTubPump,
1548
- ColumnHotTubHeater,
1549
- ColumnSleeping] + SchedulesFile.HVACSetpointColumnNames + SchedulesFile.WaterHeaterColumnNames + SchedulesFile.BatteryColumnNames).include? column_name
1550
-
1551
- affected_by_vacancy[column_name] = false
1552
- end
1553
- return affected_by_vacancy
1554
- end
1555
-
1556
1785
  def max_value_one
1557
1786
  max_value_one = {}
1558
1787
  column_names = SchedulesFile.ColumnNames
@@ -1590,7 +1819,7 @@ class SchedulesFile
1590
1819
  end
1591
1820
 
1592
1821
  def only_zeros_and_ones
1593
- only_zeros_and_ones = { SchedulesFile::ColumnVacancy => true }
1822
+ only_zeros_and_ones = {}
1594
1823
  column_names = SchedulesFile.ColumnNames
1595
1824
  column_names.each do |column_name|
1596
1825
  only_zeros_and_ones[column_name] = false