urbanopt-cli 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/{nightly_build.yml → nightly_ci_build.yml} +6 -5
- data/CHANGELOG.md +16 -2
- data/CMakeLists.txt +7 -7
- data/Gemfile +8 -7
- data/LICENSE.md +18 -15
- data/README.md +2 -1
- data/Rakefile +2 -37
- data/example_files/Gemfile +10 -8
- data/example_files/mappers/Baseline.rb +170 -191
- data/example_files/mappers/ChilledWaterStorage.rb +8 -30
- data/example_files/mappers/ClassProject.rb +2 -27
- data/example_files/mappers/CreateBar.rb +2 -28
- data/example_files/mappers/EvCharging.rb +2 -27
- data/example_files/mappers/FlexibleHotWater.rb +2 -27
- data/example_files/mappers/Floorspace.rb +2 -27
- data/example_files/mappers/HighEfficiency.rb +2 -27
- data/example_files/mappers/HighEfficiencyCreateBar.rb +2 -27
- data/example_files/mappers/HighEfficiencyFloorspace.rb +2 -27
- data/example_files/mappers/PeakHoursMelsShedding.rb +4 -27
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +4 -27
- data/example_files/mappers/ThermalStorage.rb +2 -28
- data/example_files/measures/BuildResidentialModel/measure.rb +30 -60
- data/example_files/measures/BuildResidentialModel/measure.xml +253 -84
- data/example_files/measures/BuildResidentialModel/resources/util.rb +45 -45
- data/example_files/python_deps/dependencies.json +3 -3
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +28 -19
- data/example_files/resources/hpxml-measures/.gitignore +0 -997
- data/example_files/resources/hpxml-measures/.readthedocs.yml +9 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +476 -230
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +244 -75
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +42 -15
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +24 -9
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +11 -33
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +23 -50
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/README.md +2 -2
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/constants.rb +119 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +67 -290
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.md +6 -5
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +78 -349
- data/example_files/resources/hpxml-measures/Changelog.md +80 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +212 -144
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +164 -170
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +238 -167
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +36 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv +33 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +9 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +79 -61
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +387 -124
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +427 -196
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +11515 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/README.md +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +224 -85
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +334 -319
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +572 -838
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +162 -68
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +4 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +12 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +34 -37
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +8 -101
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +31 -40
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-non-stochastic.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-10-mins.csv +52561 -52561
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic.csv +8761 -8761
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +384 -155
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/util.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +68 -90
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +34 -223
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +16 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +94 -40
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +765 -302
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +119 -69
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +51 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +196 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +36 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +571 -61
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +190 -81
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +11 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +188 -50
- data/example_files/resources/hpxml-measures/README.md +3 -3
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +659 -815
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +301 -1112
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +605 -350
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +18 -14
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +15 -15
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +13 -3
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +3 -3
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +894 -596
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +127 -76
- data/example_files/resources/hpxml-measures/tasks.rb +185 -2802
- data/example_files/resources/hpxml-measures/workflow/hpxml_inputs.json +3401 -0
- data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +1 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +1 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +1 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +17 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +12 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +9 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +9 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-2stories.xml → base-bldgtype-attached-2stories.xml} +610 -639
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-attached-infil-compartmentalization-test.xml +611 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached.xml → base-bldgtype-attached.xml} +610 -639
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-infil-compartmentalization-test.xml +462 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-calctype-operational.xml → base-bldgtype-multifamily-residents-1.xml} +453 -480
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +11 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +15 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +11 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +19 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +18 -24
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ela.xml +549 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +13 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-cfm.xml +552 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +17 -47
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading-seasons.xml +559 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +19 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-insulation.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-autosized-backup.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +16 -41
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +16 -41
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +16 -41
- 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
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +10 -40
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +10 -40
- 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
- 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
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +10 -40
- 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
- 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
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted-backup-hardsized.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-baseboard.xml +519 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-sizing-controls.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only-pilot.xml +513 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-crankcase-heater-40w.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +10 -40
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-buried.xml +555 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-effective-rvalue.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only-pilot-light.xml +506 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-pilot.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml +525 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-furnace.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml +506 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-natural-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp-heating-capacity-17f.xml +513 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-kwh-per-year.xml +529 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-mixed.xml +537 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none-ceiling-fans.xml +516 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +14 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +14 -37
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading-bldgtype-multifamily.xml +509 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +10 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +30 -138
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +24 -26
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-round-trip-efficiency.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +18 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +18 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +18 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0-runperiod-1-month.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0.xml +556 -0
- 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
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational.xml → base-residents-1.xml} +547 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-defaults.xml → base-residents-5.xml} +515 -539
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml +565 -0
- 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
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +21 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-available.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-unavailable.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml +620 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy-year-round.xml +619 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml +619 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-temperature-capacitance-multiplier.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-30-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +10 -37
- data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +16 -4
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +16 -3
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +16 -3
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +16 -2
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Long_Residence.xml +386 -0
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Vatilo_Residence.xml +381 -0
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Victor_Residence.xml +370 -0
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +2 -12
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +2 -12
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -9
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -9
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +475 -444
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +475 -444
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +177 -112
- data/example_files/resources/meta_measure.rb +2 -27
- data/example_files/xml_building/17/README.md +3 -3
- data/lib/uo_cli/version.rb +3 -38
- data/lib/uo_cli.rb +3 -38
- data/uo_cli.gemspec +6 -7
- metadata +70 -51
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.json +0 -388
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +0 -6136
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +0 -4846
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-smooth.csv +0 -8761
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-vacancy.csv +0 -8761
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_CO_Colorado.Springs-Peterson.Field.724660_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_DE_Wilmington-New.Castle.County.AP.724089_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_FL_Miami.Intl.AP.722020_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_MD_Baltimore-Washington.Intl.AP.724060_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_MN_Duluth.Intl.AP.727450_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_NC_Charlotte-Douglas.Intl.AP.723140_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_NJ_Cape.May.County.AP.745966_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_NV_Las.Vegas-McCarran.Intl.AP.723860_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_TX_Dallas-Fort.Worth.Intl.AP.722590_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/US_CO_Boulder_AMY_2012-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +0 -2508
- 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 = [@
|
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 =
|
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.
|
1073
|
-
begin_end_dates =
|
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 '#{
|
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
|
1082
|
-
fail "Invalid date format specified for '#{
|
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 '#{
|
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
|
-
|
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.
|
1115
|
-
|
1116
|
-
if not
|
1117
|
-
|
1118
|
-
|
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
|
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
|
-
|
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?
|
1261
|
-
fail "Schedule has invalid number of rows (#{
|
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(
|
1268
|
-
return false if
|
1470
|
+
def export()
|
1471
|
+
return false if @output_schedules_path.nil?
|
1269
1472
|
|
1270
|
-
CSV.open(
|
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(@
|
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
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
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
|
1423
|
-
|
1424
|
-
|
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
|
-
|
1427
|
-
|
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[
|
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 = {
|
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
|