urbanopt-cli 0.5.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +43 -1
- data/CMakeLists.txt +14 -14
- data/FindOpenStudioSDK.cmake +11 -6
- data/Gemfile +11 -5
- data/LICENSE.md +11 -1
- data/Rakefile +16 -6
- data/example_files/Gemfile +8 -8
- data/example_files/example_project_combined.json +100 -5
- data/example_files/example_project_with_streets.json +826 -0
- data/example_files/mappers/Baseline.rb +107 -59
- data/example_files/mappers/CreateBar.rb +17 -7
- data/example_files/mappers/EvCharging.rb +20 -10
- data/example_files/mappers/Floorspace.rb +17 -7
- data/example_files/mappers/HighEfficiency.rb +20 -8
- data/example_files/mappers/HighEfficiencyCreateBar.rb +19 -8
- data/example_files/mappers/HighEfficiencyFloorspace.rb +19 -8
- data/example_files/mappers/ThermalStorage.rb +16 -6
- data/example_files/measures/BuildResidentialModel/measure.rb +249 -134
- data/example_files/reopt/base_assumptions.json +2 -2
- data/example_files/reopt/multiPV_assumptions.json +4 -3
- data/example_files/residential/clothes_dryer.tsv +7 -7
- data/example_files/residential/clothes_washer.tsv +1 -1
- data/example_files/residential/cooling_system.tsv +42 -22
- data/example_files/residential/dishwasher.tsv +1 -1
- data/example_files/residential/exhaust.tsv +3 -0
- data/example_files/residential/heat_pump.tsv +62 -40
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +2 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +116 -0
- data/example_files/resources/hpxml-measures/.gitignore +1 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +746 -1236
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1550 -1215
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +432 -343
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +134 -91
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.json +388 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.md +43 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +41 -65
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +36 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +35 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +35 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +36 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-plug-loads-additional-multipliers.osw → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw} +41 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +45 -69
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +49 -73
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → base-location-honolulu-hi.osw} +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +44 -70
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +60 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +38 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-portable-heater.osw → extra-second-heating-system-portable-heater-to-heating-system.osw} +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +38 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/{multipliers-without-plug-loads.osw → multipliers-without-tv-plug-loads.osw} +40 -64
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +38 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
- data/example_files/resources/hpxml-measures/Changelog.md +249 -0
- data/example_files/resources/hpxml-measures/Gemfile +3 -4
- data/example_files/resources/hpxml-measures/Gemfile.lock +27 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +318 -1283
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -121
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +7 -97
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +600 -203
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +21 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +114 -22
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +112 -177
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +16 -180
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +543 -94
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +4 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +410 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +27 -25
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +782 -460
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +455 -107
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1466 -1403
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1391 -1467
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +2 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +20 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +85 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +14 -33
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +3 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +43 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +24 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +32 -30
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +6 -29
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +523 -635
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +151 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +4 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +297 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +26 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
- data/example_files/resources/hpxml-measures/README.md +4 -5
- data/example_files/resources/hpxml-measures/Rakefile +1 -2
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +140 -47
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +351 -495
- data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +260 -189
- data/example_files/resources/hpxml-measures/docs/source/conf.py +4 -1
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +3 -3
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -105
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +538 -396
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +158 -130
- data/example_files/resources/hpxml-measures/tasks.rb +1497 -736
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +36 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +5 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +5 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +5 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +28 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +28 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +23 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +23 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +23 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +6 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +8 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +17 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +9 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +601 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +22 -21
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2475 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +577 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +644 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +6 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +558 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +558 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed.xml} +557 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed.xml} +557 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml → base-hvac-autosize-boiler-elec-only.xml} +517 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml → base-hvac-autosize-boiler-gas-central-ac-1-speed.xml} +569 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml → base-hvac-autosize-boiler-gas-only.xml} +518 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml → base-hvac-autosize-central-ac-only-1-speed.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml → base-hvac-autosize-central-ac-only-2-speed.xml} +547 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml → base-hvac-autosize-central-ac-only-var-speed.xml} +547 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml → base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml} +2 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml → base-hvac-autosize-elec-resistance-only.xml} +508 -509
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml → base-hvac-autosize-evap-cooler-furnace-gas.xml} +553 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml → base-hvac-autosize-floor-furnace-propane-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml → base-hvac-autosize-furnace-elec-only.xml} +547 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-2-speed.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-var-speed.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +548 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml → base-hvac-autosize-furnace-gas-room-ac.xml} +558 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +555 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml} +562 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml → base-hvac-autosize-ground-to-air-heat-pump.xml} +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +547 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-room-ac-only-autosize.xml → base-hvac-autosize-room-ac-only.xml} +507 -508
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-stove-oil-only-autosize.xml → base-hvac-autosize-stove-oil-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml → base-hvac-autosize-wall-furnace-elec-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +7 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +11 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +512 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +548 -550
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/slab-zero-exposed-perimeter.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +568 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +566 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml} +571 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-install-quality-all-furnace-gas-only.xml} +552 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml} +552 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +565 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +569 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +570 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +1 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +6 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +3 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +512 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +7 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +37 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +37 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +577 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +11 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +32 -29
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +8 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +12 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +8 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → invalid_files/dehumidifier-fraction-served.xml} +534 -523
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +7 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +448 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +14 -60
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +760 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +761 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +460 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +579 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +3 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +407 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +574 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +591 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +591 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +465 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +473 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +9 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +916 -909
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +15 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ideal-air.xml → invalid_files/multiple-shared-cooling-systems.xml} +431 -498
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +571 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/template.osw +5 -1
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +294 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +27 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +294 -0
- data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +130 -0
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +324 -382
- data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
- data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
- data/example_files/visualization/input_visualization_feature.html +13 -14
- data/example_files/visualization/input_visualization_scenario.html +14 -9
- data/lib/uo_cli.rb +293 -60
- data/lib/uo_cli/version.rb +17 -7
- data/requirements.txt +2 -0
- data/scripts/setup-env-gitbash.sh +4 -4
- data/scripts/setup-env-unix.sh +4 -4
- data/scripts/setup-env.bat +3 -3
- data/scripts/setup-env.ps1 +3 -3
- data/uo_cli.gemspec +10 -7
- metadata +320 -82
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
- data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
- data/example_files/resources/hpxml-measures/.circleci/config.yml +0 -20
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -74
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +0 -369
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +0 -109
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -835
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +0 -563
|
File without changes
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Helper methods related to having a meta-measure
|
|
2
4
|
|
|
3
5
|
def get_measures(workflow_json, include_only = nil)
|
|
4
6
|
result = []
|
|
5
|
-
JSON.parse(File.read(workflow_json), :
|
|
7
|
+
JSON.parse(File.read(workflow_json), symbolize_names: true).each do |group|
|
|
6
8
|
group[:group_steps].each do |step|
|
|
7
9
|
step[:measures].each do |measure_dir|
|
|
8
|
-
if (not include_only.nil?)
|
|
10
|
+
if (not include_only.nil?) && (not include_only.include? measure_dir)
|
|
9
11
|
next
|
|
10
12
|
end
|
|
11
13
|
|
|
@@ -16,7 +18,7 @@ def get_measures(workflow_json, include_only = nil)
|
|
|
16
18
|
return result
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
def
|
|
21
|
+
def apply_child_measures(measures_dir, measures, runner, model, workflow_json = nil, osw_out = nil, show_measure_calls = true)
|
|
20
22
|
require 'openstudio'
|
|
21
23
|
|
|
22
24
|
workflow_order = []
|
|
@@ -40,13 +42,8 @@ def apply_measures(measures_dir, measures, runner, model, workflow_json = nil, o
|
|
|
40
42
|
# Create a workflow based on the measures we're going to call. Convenient for debugging.
|
|
41
43
|
workflowJSON = OpenStudio::WorkflowJSON.new
|
|
42
44
|
workflowJSON.setOswPath(File.expand_path("../#{osw_out}"))
|
|
43
|
-
workflowJSON.addMeasurePath(
|
|
44
|
-
|
|
45
|
-
# pull in measure paths from primary OSW which will give accss to openstudio-model-articulation gems
|
|
46
|
-
# osw_measure_paths = runner.workflow.measurePaths
|
|
47
|
-
# osw_measure_paths.each do |orig_measure_path|
|
|
48
|
-
# workflowJSON.addMeasurePath(orig_measure_path)
|
|
49
|
-
# end
|
|
45
|
+
workflowJSON.addMeasurePath('measures')
|
|
46
|
+
workflowJSON.addMeasurePath('resources/hpxml-measures')
|
|
50
47
|
steps = OpenStudio::WorkflowStepVector.new
|
|
51
48
|
workflow_order.each do |measure_subdir|
|
|
52
49
|
measures[measure_subdir].each do |args|
|
|
@@ -66,7 +63,7 @@ def apply_measures(measures_dir, measures, runner, model, workflow_json = nil, o
|
|
|
66
63
|
# Call each measure in the specified order
|
|
67
64
|
workflow_order.each do |measure_subdir|
|
|
68
65
|
# Gather measure arguments and call measure
|
|
69
|
-
full_measure_path = File.join(measures_dir, measure_subdir,
|
|
66
|
+
full_measure_path = File.join(measures_dir, measure_subdir, 'measure.rb')
|
|
70
67
|
check_file_exists(full_measure_path, runner)
|
|
71
68
|
measure_instance = get_measure_instance(full_measure_path)
|
|
72
69
|
measures[measure_subdir].each do |args|
|
|
@@ -85,54 +82,61 @@ def apply_measures(measures_dir, measures, runner, model, workflow_json = nil, o
|
|
|
85
82
|
end
|
|
86
83
|
|
|
87
84
|
def print_measure_call(measure_args, measure_dir, runner)
|
|
88
|
-
if measure_args.nil?
|
|
85
|
+
if measure_args.nil? || measure_dir.nil?
|
|
89
86
|
return
|
|
90
87
|
end
|
|
91
88
|
|
|
92
|
-
args_s = hash_to_string(measure_args, delim =
|
|
89
|
+
args_s = hash_to_string(measure_args, delim = ' -> ', separator = ' \n')
|
|
93
90
|
if args_s.size > 0
|
|
94
|
-
runner.registerInfo("Calling #{measure_dir
|
|
91
|
+
runner.registerInfo("Calling #{measure_dir} measure with arguments:\n#{args_s}")
|
|
95
92
|
else
|
|
96
|
-
runner.registerInfo("Calling #{measure_dir
|
|
93
|
+
runner.registerInfo("Calling #{measure_dir} measure with no arguments.")
|
|
97
94
|
end
|
|
98
95
|
end
|
|
99
96
|
|
|
100
97
|
def get_measure_instance(measure_rb_path)
|
|
101
98
|
# Parse XML file for class name
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
# Avoid REXML for performance reasons
|
|
100
|
+
measure_class = nil
|
|
101
|
+
File.readlines(measure_rb_path.sub('.rb', '.xml')).each do |xml_line|
|
|
102
|
+
next unless xml_line.include? '<class_name>'
|
|
103
|
+
|
|
104
|
+
measure_class = xml_line.gsub('<class_name>', '').gsub('</class_name>', '').strip
|
|
105
|
+
break
|
|
106
|
+
end
|
|
106
107
|
# Create new instance
|
|
107
|
-
require
|
|
108
|
+
require File.absolute_path(measure_rb_path)
|
|
108
109
|
measure = eval(measure_class).new
|
|
109
110
|
return measure
|
|
110
111
|
end
|
|
111
112
|
|
|
112
113
|
def validate_measure_args(measure_args, provided_args, lookup_file, measure_name, runner = nil)
|
|
113
114
|
measure_arg_names = measure_args.map { |arg| arg.name }
|
|
114
|
-
lookup_file_str =
|
|
115
|
+
lookup_file_str = ''
|
|
115
116
|
if not lookup_file.nil?
|
|
116
|
-
lookup_file_str = " in #{lookup_file
|
|
117
|
+
lookup_file_str = " in #{lookup_file}"
|
|
117
118
|
end
|
|
118
119
|
# Verify all arguments have been provided
|
|
119
120
|
measure_args.each do |arg|
|
|
120
121
|
next if provided_args.keys.include?(arg.name)
|
|
121
122
|
next if not arg.required
|
|
123
|
+
next if arg.name.include?('hpxml_path')
|
|
122
124
|
|
|
123
|
-
register_error("Required argument '#{arg.name}' not provided#{lookup_file_str} for measure '#{measure_name
|
|
125
|
+
register_error("Required argument '#{arg.name}' not provided#{lookup_file_str} for measure '#{measure_name}'.", runner)
|
|
124
126
|
end
|
|
125
127
|
provided_args.keys.each do |k|
|
|
126
128
|
next if measure_arg_names.include?(k)
|
|
127
129
|
|
|
128
|
-
register_error("Extra argument '#{k}' specified#{lookup_file_str} for measure '#{measure_name
|
|
130
|
+
register_error("Extra argument '#{k}' specified#{lookup_file_str} for measure '#{measure_name}'.", runner)
|
|
129
131
|
end
|
|
130
132
|
# Check for valid argument values
|
|
131
133
|
measure_args.each do |arg|
|
|
132
134
|
# Get measure provided arg
|
|
133
135
|
if provided_args[arg.name].nil?
|
|
134
136
|
if arg.required
|
|
135
|
-
|
|
137
|
+
next if arg.name.include?('hpxml_path')
|
|
138
|
+
|
|
139
|
+
register_error("Required argument '#{arg.name}' for measure '#{measure_name}' must have a value provided.", runner)
|
|
136
140
|
else
|
|
137
141
|
next
|
|
138
142
|
end
|
|
@@ -140,23 +144,23 @@ def validate_measure_args(measure_args, provided_args, lookup_file, measure_name
|
|
|
140
144
|
provided_args[arg.name] = provided_args[arg.name].to_s
|
|
141
145
|
end
|
|
142
146
|
case arg.type.valueName.downcase
|
|
143
|
-
when
|
|
147
|
+
when 'boolean'
|
|
144
148
|
if not ['true', 'false'].include?(provided_args[arg.name])
|
|
145
|
-
register_error("Value of '#{provided_args[arg.name]
|
|
149
|
+
register_error("Value of '#{provided_args[arg.name]}' for argument '#{arg.name}' and measure '#{measure_name}' must be 'true' or 'false'.", runner)
|
|
146
150
|
end
|
|
147
|
-
when
|
|
151
|
+
when 'double'
|
|
148
152
|
if not provided_args[arg.name].is_number?
|
|
149
|
-
register_error("Value of '#{provided_args[arg.name]
|
|
153
|
+
register_error("Value of '#{provided_args[arg.name]}' for argument '#{arg.name}' and measure '#{measure_name}' must be a number.", runner)
|
|
150
154
|
end
|
|
151
|
-
when
|
|
155
|
+
when 'integer'
|
|
152
156
|
if not provided_args[arg.name].is_integer?
|
|
153
|
-
register_error("Value of '#{provided_args[arg.name]
|
|
157
|
+
register_error("Value of '#{provided_args[arg.name]}' for argument '#{arg.name}' and measure '#{measure_name}' must be an integer.", runner)
|
|
154
158
|
end
|
|
155
|
-
when
|
|
159
|
+
when 'string'
|
|
156
160
|
# no op
|
|
157
|
-
when
|
|
158
|
-
if not arg.choiceValues.include?(provided_args[arg.name])
|
|
159
|
-
register_error("Value of '#{provided_args[arg.name]
|
|
161
|
+
when 'choice'
|
|
162
|
+
if (not arg.choiceValues.include?(provided_args[arg.name])) && (not arg.modelDependent)
|
|
163
|
+
register_error("Value of '#{provided_args[arg.name]}' for argument '#{arg.name}' and measure '#{measure_name}' must be one of: #{arg.choiceValues}.", runner)
|
|
160
164
|
end
|
|
161
165
|
end
|
|
162
166
|
end
|
|
@@ -199,6 +203,11 @@ def run_measure(model, measure, argument_map, runner)
|
|
|
199
203
|
runner.registerFinalCondition(result_child.finalCondition.get.logMessage)
|
|
200
204
|
end
|
|
201
205
|
|
|
206
|
+
# re-register runner child registered values on the parent runner
|
|
207
|
+
result_child.stepValues.each do |step_value|
|
|
208
|
+
runner.registerValue(step_value.name, get_value_from_workflow_step_value(step_value))
|
|
209
|
+
end
|
|
210
|
+
|
|
202
211
|
# log messages
|
|
203
212
|
result_child.warnings.each do |warning|
|
|
204
213
|
runner.registerWarning(warning.logMessage)
|
|
@@ -214,21 +223,21 @@ def run_measure(model, measure, argument_map, runner)
|
|
|
214
223
|
end
|
|
215
224
|
|
|
216
225
|
# convert a return false in the measure to a return false and error here.
|
|
217
|
-
if result_child.value.valueName ==
|
|
218
|
-
runner.registerError(
|
|
226
|
+
if result_child.value.valueName == 'Fail'
|
|
227
|
+
runner.registerError('The measure was not successful')
|
|
219
228
|
return false
|
|
220
229
|
end
|
|
221
230
|
rescue => e
|
|
222
|
-
runner.registerError("Measure Failed with an error: #{e.inspect
|
|
231
|
+
runner.registerError("Measure Failed with an error: #{e.inspect} at: #{e.backtrace.join("\n")}")
|
|
223
232
|
return false
|
|
224
233
|
end
|
|
225
234
|
return true
|
|
226
235
|
end
|
|
227
236
|
|
|
228
|
-
def hash_to_string(hash, delim =
|
|
229
|
-
hash_s =
|
|
237
|
+
def hash_to_string(hash, delim = '=', separator = ',')
|
|
238
|
+
hash_s = ''
|
|
230
239
|
hash.each do |k, v|
|
|
231
|
-
hash_s
|
|
240
|
+
hash_s += "#{k}#{delim}#{v}#{separator}"
|
|
232
241
|
end
|
|
233
242
|
if hash_s.size > 0
|
|
234
243
|
hash_s = hash_s.chomp(separator.to_s)
|
|
@@ -247,13 +256,13 @@ end
|
|
|
247
256
|
|
|
248
257
|
def check_file_exists(full_path, runner = nil)
|
|
249
258
|
if not File.exist?(full_path)
|
|
250
|
-
register_error("Cannot find file #{full_path
|
|
259
|
+
register_error("Cannot find file #{full_path}.", runner)
|
|
251
260
|
end
|
|
252
261
|
end
|
|
253
262
|
|
|
254
263
|
def check_dir_exists(full_path, runner = nil)
|
|
255
264
|
if not Dir.exist?(full_path)
|
|
256
|
-
register_error("Cannot find directory #{full_path
|
|
265
|
+
register_error("Cannot find directory #{full_path}.", runner)
|
|
257
266
|
end
|
|
258
267
|
end
|
|
259
268
|
|
|
@@ -275,7 +284,7 @@ class String
|
|
|
275
284
|
end
|
|
276
285
|
|
|
277
286
|
def is_integer?
|
|
278
|
-
if not
|
|
287
|
+
if not is_number?
|
|
279
288
|
return false
|
|
280
289
|
end
|
|
281
290
|
if Integer(Float(self)).to_f != Float(self)
|
|
@@ -387,6 +387,9 @@
|
|
|
387
387
|
|
|
388
388
|
var endUseKeys = ['Heating:Electricity', 'Cooling:Electricity', 'InteriorLights:Electricity', 'ExteriorLights:Electricity', 'ExteriorEquipment:Electricity', 'InteriorEquipment:Electricity', 'Fans:Electricity', 'Pumps:Electricity', 'HeatRejection:Electricity', 'WaterSystems:Electricity'];
|
|
389
389
|
|
|
390
|
+
var kbtu_datasets = ['NaturalGas:Facility', 'Propane:Facility', 'FuelOilNo2:Facility', 'OtherFuels:Facility'];
|
|
391
|
+
var changeToKbtu = false;
|
|
392
|
+
|
|
390
393
|
|
|
391
394
|
var applicableEndUseKeys = [];
|
|
392
395
|
|
|
@@ -449,8 +452,7 @@
|
|
|
449
452
|
|
|
450
453
|
// monthly fuel use
|
|
451
454
|
$scope.monthlyFuelChartData[feature.name] = [];
|
|
452
|
-
|
|
453
|
-
var kbtu_datasets = ['NaturalGas:Facility', 'Propane:Facility', 'FuelOilNo2:Facility', 'OtherFuels:Facility'];
|
|
455
|
+
|
|
454
456
|
// first iterate through all kbtu datasets to see if you'll need to change to kBtu units
|
|
455
457
|
_.forEach(kbtu_datasets, function (kbtu_dataset) {
|
|
456
458
|
var values = feature.monthly_values[kbtu_dataset];
|
|
@@ -530,29 +532,26 @@
|
|
|
530
532
|
// monthly net use
|
|
531
533
|
if(feature['complete_simulation'] == true){
|
|
532
534
|
$scope.monthlyNetChartData[feature.name] = [];
|
|
533
|
-
var
|
|
534
|
-
var changeToKbtu = false;
|
|
535
|
-
if (!(values.every(item => item === 0))) {
|
|
536
|
-
changeToKbtu = true
|
|
537
|
-
}
|
|
535
|
+
var unit = ' (kWh)'
|
|
538
536
|
if (changeToKbtu){
|
|
539
|
-
|
|
540
|
-
}
|
|
541
|
-
else {
|
|
542
|
-
var unit = ' (kWh)'
|
|
537
|
+
unit = ' (kBtu)'
|
|
543
538
|
}
|
|
544
539
|
|
|
545
540
|
$scope.annualNetChartData[feature.name] = 0;
|
|
546
541
|
$scope.monthlyNetChartData[feature.name].push({
|
|
547
542
|
key: 'Net Energy Use' + unit,
|
|
548
543
|
values: _.map(months, function (month, i) {
|
|
544
|
+
var value = 0;
|
|
549
545
|
if (changeToKbtu){
|
|
550
|
-
|
|
546
|
+
value = feature.monthly_values['Electricity:Facility'][i]*3.41 - feature.monthly_values['ElectricityProduced:Facility'][i]*3.41;
|
|
547
|
+
_.forEach(kbtu_datasets, function(ds){
|
|
548
|
+
value += feature.monthly_values[ds][i];
|
|
549
|
+
});
|
|
551
550
|
}
|
|
552
551
|
else {
|
|
553
|
-
|
|
552
|
+
value = feature.monthly_values['Electricity:Facility'][i] - feature.monthly_values['ElectricityProduced:Facility'][i]; //Values are in kWh
|
|
554
553
|
}
|
|
555
|
-
|
|
554
|
+
|
|
556
555
|
$scope.annualNetChartData[feature.name] += value;
|
|
557
556
|
// global
|
|
558
557
|
monthlyNetYMin = _.min([monthlyNetYMin, value]);
|
|
@@ -377,6 +377,9 @@
|
|
|
377
377
|
|
|
378
378
|
var endUseKeys = ['Heating:Electricity', 'Cooling:Electricity', 'InteriorLights:Electricity', 'ExteriorLights:Electricity', 'InteriorEquipment:Electricity', 'ExteriorEquipment:Electricity', 'Fans:Electricity', 'Pumps:Electricity', 'HeatRejection:Electricity', 'WaterSystems:Electricity'];
|
|
379
379
|
|
|
380
|
+
var kbtu_datasets = ['NaturalGas:Facility', 'Propane:Facility', 'FuelOilNo2:Facility', 'OtherFuels:Facility'];
|
|
381
|
+
var changeToKbtu = false;
|
|
382
|
+
|
|
380
383
|
var applicableEndUseKeys = [];
|
|
381
384
|
|
|
382
385
|
$scope.monthlyFuelChartData = {};
|
|
@@ -422,8 +425,7 @@
|
|
|
422
425
|
|
|
423
426
|
// monthly fuel use
|
|
424
427
|
$scope.monthlyFuelChartData[scenario.name] = [];
|
|
425
|
-
|
|
426
|
-
var kbtu_datasets = ['NaturalGas:Facility', 'Propane:Facility', 'FuelOilNo2:Facility', 'OtherFuels:Facility'];
|
|
428
|
+
|
|
427
429
|
// first iterate through all kbtu datasets to see if you'll need to change to kBtu units
|
|
428
430
|
_.forEach(kbtu_datasets, function (kbtu_dataset) {
|
|
429
431
|
var values = scenario.monthly_values[kbtu_dataset];
|
|
@@ -502,24 +504,27 @@
|
|
|
502
504
|
if (!(values.every(item => item === 0))) {
|
|
503
505
|
changeToKbtu = true
|
|
504
506
|
}
|
|
507
|
+
var unit = ' (kWh)'
|
|
505
508
|
if (changeToKbtu){
|
|
506
|
-
|
|
507
|
-
}
|
|
508
|
-
else {
|
|
509
|
-
var unit = ' (kWh)'
|
|
509
|
+
unit = ' (kBtu)'
|
|
510
510
|
}
|
|
511
511
|
|
|
512
512
|
$scope.annualNetChartData[scenario.name] = 0;
|
|
513
513
|
$scope.monthlyNetChartData[scenario.name].push({
|
|
514
514
|
key: 'Net Energy Use' + unit,
|
|
515
515
|
values: _.map(months, function (month, i) {
|
|
516
|
+
var value = 0;
|
|
516
517
|
if (changeToKbtu){
|
|
517
|
-
|
|
518
|
+
value = scenario.monthly_values['Electricity:Facility'][i]*3.41 - scenario.monthly_values['ElectricityProduced:Facility'][i]*3.41 + scenario.monthly_values['NaturalGas:Facility'][i]; //Values are in kBtu
|
|
519
|
+
|
|
520
|
+
_.forEach(kbtu_datasets, function(ds){
|
|
521
|
+
value += scenario.monthly_values[ds][i];
|
|
522
|
+
});
|
|
518
523
|
}
|
|
519
524
|
else {
|
|
520
|
-
|
|
525
|
+
value = scenario.monthly_values['Electricity:Facility'][i] - scenario.monthly_values['ElectricityProduced:Facility'][i]; //Values are in kWh
|
|
521
526
|
}
|
|
522
|
-
value;
|
|
527
|
+
// value;
|
|
523
528
|
$scope.annualNetChartData[scenario.name] += value;
|
|
524
529
|
monthlyNetYMin = _.min([monthlyNetYMin, value]);
|
|
525
530
|
monthlyNetYMax = _.max([monthlyNetYMax, value]);
|
data/lib/uo_cli.rb
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/ ruby
|
|
2
2
|
|
|
3
3
|
# *********************************************************************************
|
|
4
|
-
# URBANopt™, Copyright (c) 2019-
|
|
4
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
|
5
5
|
# contributors. All rights reserved.
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
8
8
|
# are permitted provided that the following conditions are met:
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
# Redistributions of source code must retain the above copyright notice, this list
|
|
11
11
|
# of conditions and the following disclaimer.
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
|
14
14
|
# list of conditions and the following disclaimer in the documentation and/or other
|
|
15
15
|
# materials provided with the distribution.
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
|
18
18
|
# used to endorse or promote products derived from this software without specific
|
|
19
19
|
# prior written permission.
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
# Redistribution of this software, without modification, must refer to the software
|
|
22
|
+
# by the same designation. Redistribution of a modified version of this software
|
|
23
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
|
24
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
|
25
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
|
26
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
|
27
|
+
# refer to any modified version of this software or any modified version of the
|
|
28
|
+
# underlying software originally provided by Alliance without the prior written
|
|
29
|
+
# consent of Alliance.
|
|
30
|
+
|
|
21
31
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
22
32
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
23
33
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
@@ -36,6 +46,7 @@ require 'urbanopt/geojson'
|
|
|
36
46
|
require 'urbanopt/scenario'
|
|
37
47
|
require 'urbanopt/reopt'
|
|
38
48
|
require 'urbanopt/reopt_scenario'
|
|
49
|
+
require 'urbanopt/rnm'
|
|
39
50
|
require 'csv'
|
|
40
51
|
require 'fileutils'
|
|
41
52
|
require 'json'
|
|
@@ -49,11 +60,15 @@ module URBANopt
|
|
|
49
60
|
COMMAND_MAP = {
|
|
50
61
|
'create' => 'Make new things - project directory or files',
|
|
51
62
|
'run' => 'Use files in your directory to simulate district energy use',
|
|
52
|
-
'opendss' => 'Run OpenDSS simulation',
|
|
53
63
|
'process' => 'Post-process URBANopt simulations for additional insights',
|
|
54
64
|
'visualize' => 'Visualize and compare results for features and scenarios',
|
|
55
65
|
'validate' => 'Validate results with custom rules',
|
|
56
|
-
'
|
|
66
|
+
'opendss' => 'Run OpenDSS simulation',
|
|
67
|
+
'rnm' => 'Run RNM simulation',
|
|
68
|
+
'delete' => 'Delete simulations for a specified scenario',
|
|
69
|
+
'des_params' => 'Make a DES system parameters config file',
|
|
70
|
+
'des_create' => 'Create a Modelica model',
|
|
71
|
+
'des_run' => 'Run a Modelica DES model'
|
|
57
72
|
}.freeze
|
|
58
73
|
|
|
59
74
|
def initialize
|
|
@@ -77,22 +92,22 @@ module URBANopt
|
|
|
77
92
|
end
|
|
78
93
|
return if ARGV.empty?
|
|
79
94
|
@command = ARGV.shift
|
|
80
|
-
|
|
95
|
+
begin
|
|
96
|
+
send("opt_#{@command}") ## dispatch to command handling method
|
|
97
|
+
rescue NoMethodError
|
|
98
|
+
abort("Invalid command, please run uo --help for a list of available commands")
|
|
99
|
+
end
|
|
81
100
|
end
|
|
82
101
|
|
|
83
102
|
# Define creation commands
|
|
84
103
|
def opt_create
|
|
85
|
-
cmd = @command
|
|
86
104
|
@subopts = Optimist.options do
|
|
87
|
-
banner "\nURBANopt #{
|
|
105
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
88
106
|
|
|
89
107
|
opt :project_folder, "\nCreate project directory in your current folder. Name the directory\n" \
|
|
90
108
|
"Add additional tags to specify the method for creating geometry, or use the default urban geometry creation method to create building geometry from geojson coordinates with core and perimeter zoning\n" \
|
|
91
109
|
'Example: uo create --project-folder urbanopt_example_project', type: String, short: :p
|
|
92
110
|
|
|
93
|
-
opt :electric, "\nCreate default project with FeatureFile containing electrical network\n" \
|
|
94
|
-
"Example: uo create --project-folder urbanopt_example_project --electric", short: :l
|
|
95
|
-
|
|
96
111
|
opt :create_bar, "\nCreate building geometry and add space types using the create bar from building type ratios measure\n" \
|
|
97
112
|
"Refer to https://docs.urbanopt.net/ for more details about the workflow\n" \
|
|
98
113
|
"Used with --project-folder\n" \
|
|
@@ -107,6 +122,12 @@ module URBANopt
|
|
|
107
122
|
"This functionality has not been exhaustively tested and currently supports the Single-Family Detached building type and the Baseline Scenario only\n" \
|
|
108
123
|
"Used with --project-folder\n" \
|
|
109
124
|
"Example: uo create --project-folder urbanopt_example_project --combined\n", short: :d
|
|
125
|
+
|
|
126
|
+
opt :electric, "\nCreate default project with FeatureFile containing electrical network, used for OpenDSS analysis\n" \
|
|
127
|
+
"Example: uo create --project-folder urbanopt_example_project --electric", short: :l
|
|
128
|
+
|
|
129
|
+
opt :streets, "\nCreate default project wiht FeatureFile containing streets, used for RNM analysis\n" \
|
|
130
|
+
"Example: uo create --project-folder urbanopt_example_project --streets", short: :t
|
|
110
131
|
|
|
111
132
|
opt :empty, "\nUse with --project-folder argument to create an empty project folder\n" \
|
|
112
133
|
"Then add your own Feature file in the project directory you created,\n" \
|
|
@@ -135,35 +156,33 @@ module URBANopt
|
|
|
135
156
|
|
|
136
157
|
# Define running commands
|
|
137
158
|
def opt_run
|
|
138
|
-
cmd = @command
|
|
139
159
|
@subopts = Optimist.options do
|
|
140
|
-
banner "\nURBANopt #{
|
|
160
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
141
161
|
|
|
142
162
|
opt :reopt, "\nSimulate with additional REopt functionality. Must do this before post-processing with REopt"
|
|
143
163
|
|
|
144
164
|
opt :scenario, "\nRun URBANopt simulations for <scenario>\n" \
|
|
145
165
|
"Requires --feature also be specified\n" \
|
|
146
|
-
'Example: uo run --scenario baseline_scenario-2.csv --feature example_project.json', default: 'baseline_scenario.csv', required: true
|
|
166
|
+
'Example: uo run --scenario baseline_scenario-2.csv --feature example_project.json', default: 'baseline_scenario.csv', required: true, short: :s
|
|
147
167
|
|
|
148
168
|
opt :feature, "\nRun URBANopt simulations according to <featurefile>\n" \
|
|
149
169
|
"Requires --scenario also be specified\n" \
|
|
150
|
-
'Example: uo run --scenario baseline_scenario.csv --feature example_project.json', default: 'example_project.json', required: true
|
|
170
|
+
'Example: uo run --scenario baseline_scenario.csv --feature example_project.json', default: 'example_project.json', required: true, short: :f
|
|
151
171
|
end
|
|
152
172
|
end
|
|
153
173
|
|
|
154
174
|
# Define opendss commands
|
|
155
175
|
def opt_opendss
|
|
156
|
-
cmd = @command
|
|
157
176
|
@subopts = Optimist.options do
|
|
158
|
-
banner "\nURBANopt #{
|
|
177
|
+
banner "\nURBANopt #{@command}:\n\n"
|
|
159
178
|
|
|
160
179
|
opt :scenario, "\nRun OpenDSS simulations for <scenario>\n" \
|
|
161
180
|
"Requires --feature also be specified\n" \
|
|
162
|
-
'Example: uo opendss --scenario baseline_scenario-2.csv --feature example_project.json', default: 'baseline_scenario.csv'
|
|
181
|
+
'Example: uo opendss --scenario baseline_scenario-2.csv --feature example_project.json', default: 'baseline_scenario.csv', required: true, short: :s
|
|
163
182
|
|
|
164
183
|
opt :feature, "\nRun OpenDSS simulations according to <featurefile>\n" \
|
|
165
184
|
"Requires --scenario also be specified\n" \
|
|
166
|
-
'Example: uo opendss --scenario baseline_scenario.csv --feature example_project.json', default: 'example_project_with_electric_network.json'
|
|
185
|
+
'Example: uo opendss --scenario baseline_scenario.csv --feature example_project.json', default: 'example_project_with_electric_network.json', required: true, short: :f
|
|
167
186
|
|
|
168
187
|
opt :equipment, "\nRun OpenDSS simulations using <equipmentfile>. If not specified, the electrical_database.json from urbanopt-ditto-reader will be used.\n" \
|
|
169
188
|
'Example: uo opendss --scenario baseline_scenario.csv --feature example_project.json', type: String, short: :e
|
|
@@ -190,11 +209,37 @@ module URBANopt
|
|
|
190
209
|
end
|
|
191
210
|
end
|
|
192
211
|
|
|
212
|
+
# Define RNM commands
|
|
213
|
+
def opt_rnm
|
|
214
|
+
@subopts = Optimist.options do
|
|
215
|
+
banner "\nURBANopt #{@command}:\n\n"
|
|
216
|
+
|
|
217
|
+
opt :scenario, "\nRun RNM simulation for <scenario>. Scenario must be run and post-processed prior to calling the rnm command.\n" \
|
|
218
|
+
"Requires --feature also be specified\n" \
|
|
219
|
+
'Example: uo rnm --scenario baseline_scenario-2.csv --feature example_project.json', default: 'baseline_scenario.csv', required: true, short: :s
|
|
220
|
+
|
|
221
|
+
opt :feature, "\nRun RNM simulation according to <featurefile>\n" \
|
|
222
|
+
"Requires --scenario also be specified\n" \
|
|
223
|
+
'Example: uo rnm --scenario baseline_scenario.csv --feature example_project.json', default: 'example_project_with_streets.json', required: true, short: :f
|
|
224
|
+
|
|
225
|
+
opt :reopt, "\nInclude processed REopt optimization results in the simulation.\n" \
|
|
226
|
+
"Example: uo rnm --scenario baseline_scenario.csv --feature example_project.json --reopt", short: :r
|
|
227
|
+
|
|
228
|
+
opt :extended_catalog, "\nUse this option to specify the extended electrical catalog path.\n" \
|
|
229
|
+
"If this option is not included, the default catalog will be used", short: :c
|
|
230
|
+
|
|
231
|
+
opt :average_peak_catalog, "\nUse this option to specify the average peak catalog path.\n" \
|
|
232
|
+
"If this option is not included, the default catalog will be used", short: :a
|
|
233
|
+
|
|
234
|
+
opt :opendss, "\n If this option is specified, an OpenDSS-compatible electrical database will be created \n" \
|
|
235
|
+
"Example: uo rnm --scenario baseline_scenario.csv --feature example_project_with_streets.json --opendss", short: :o
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
193
239
|
# Define post-processing commands
|
|
194
240
|
def opt_process
|
|
195
|
-
cmd = @command
|
|
196
241
|
@subopts = Optimist.options do
|
|
197
|
-
banner "\nURBANopt #{
|
|
242
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
198
243
|
|
|
199
244
|
opt :default, "\nStandard post-processing for your scenario"
|
|
200
245
|
|
|
@@ -206,23 +251,28 @@ module URBANopt
|
|
|
206
251
|
opt :reopt_feature, "\nOptimize for each building individually with REopt\n" \
|
|
207
252
|
'Example: uo process --reopt-feature'
|
|
208
253
|
|
|
254
|
+
opt :reopt_resilience, "\nInclude resilience reporting in REopt optimization\n" \
|
|
255
|
+
'Example: uo process --reopt-scenario --reopt-resilience'
|
|
256
|
+
|
|
257
|
+
opt :reopt_keep_existing, "\nKeep existing reopt feature optimizations instead of rerunning them to avoid rate limit issues.\n" \
|
|
258
|
+
'Example: uo process --reopt-feature --reopt-keep-existing', short: :k
|
|
259
|
+
|
|
209
260
|
opt :with_database, "\nInclude a sql database output of post-processed results\n" \
|
|
210
261
|
'Example: uo process --default --with-database'
|
|
211
262
|
|
|
212
|
-
opt :reopt_scenario_assumptions_file, "\nPath to the scenario REopt assumptions JSON file you want to use. Use with the --reopt-scenario post-processor
|
|
263
|
+
opt :reopt_scenario_assumptions_file, "\nPath to the scenario REopt assumptions JSON file you want to use. Use with the --reopt-scenario post-processor.\n" \
|
|
213
264
|
"If not specified, the reopt/base_assumptions.json file will be used", type: String, short: :a
|
|
214
265
|
|
|
215
|
-
opt :scenario, "\nSelect which scenario to optimize", default: 'baseline_scenario.csv', required: true
|
|
266
|
+
opt :scenario, "\nSelect which scenario to optimize", default: 'baseline_scenario.csv', required: true, short: :s
|
|
216
267
|
|
|
217
|
-
opt :feature, "\nSelect which FeatureFile to use", default: 'example_project.json', required: true
|
|
268
|
+
opt :feature, "\nSelect which FeatureFile to use", default: 'example_project.json', required: true, short: :f
|
|
218
269
|
end
|
|
219
270
|
end
|
|
220
271
|
|
|
221
272
|
# Define visualization commands
|
|
222
273
|
def opt_visualize
|
|
223
|
-
cmd = @command
|
|
224
274
|
@subopts = Optimist.options do
|
|
225
|
-
banner "\nURBANopt #{
|
|
275
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
226
276
|
|
|
227
277
|
opt :feature, "\nVisualize results for all scenarios for a feature file\n" \
|
|
228
278
|
"Provide the FeatureFile to visualize each associated scenario\n" \
|
|
@@ -243,33 +293,84 @@ module URBANopt
|
|
|
243
293
|
"Provide path to the validation_schema.yaml file in your project directory\n" \
|
|
244
294
|
"Example: uo validate --eui validation_schema.yaml", type: String
|
|
245
295
|
|
|
246
|
-
opt :scenario, "\nProvide the scenario CSV file to validate features from that scenario\n", type: String, required: true
|
|
296
|
+
opt :scenario, "\nProvide the scenario CSV file to validate features from that scenario\n", type: String, required: true, short: :s
|
|
247
297
|
|
|
248
|
-
opt :feature, "\nProvide the Feature JSON file to include info about each feature\n", type: String, required: true
|
|
298
|
+
opt :feature, "\nProvide the Feature JSON file to include info about each feature\n", type: String, required: true, short: :f
|
|
249
299
|
|
|
250
300
|
opt :units, "\nSI (kWh/m2/yr) or IP (kBtu/ft2/yr)", type: String, default: 'IP'
|
|
251
301
|
end
|
|
252
302
|
end
|
|
253
303
|
|
|
254
304
|
def opt_delete
|
|
255
|
-
cmd = @command
|
|
256
305
|
@subopts = Optimist.options do
|
|
257
|
-
banner "\nURBANopt #{
|
|
306
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
258
307
|
|
|
259
308
|
opt :scenario, "\nDelete simulation files for this scenario", default: 'baseline_scenario.csv', required: true
|
|
260
309
|
end
|
|
261
310
|
end
|
|
262
311
|
|
|
312
|
+
def opt_des_params
|
|
313
|
+
@subopts = Optimist.options do
|
|
314
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
315
|
+
|
|
316
|
+
opt :sys_param_file, "\nBuild a system parameters JSON config file for Modelica DES simulation using URBANopt SDK outputs\n" \
|
|
317
|
+
"Provide path/name of json file to be created\n" \
|
|
318
|
+
"Example: uo des_params --sys-param-file path/to/sys_params.json", type: String, required: true, short: :y
|
|
319
|
+
|
|
320
|
+
opt :scenario, "\nPath to the scenario CSV file\n" \
|
|
321
|
+
"Example: uo des_params --sys-param-file path/to/sys_params.json --scenario path/to/baseline_scenario.csv\n", type: String, required: true, short: :s
|
|
322
|
+
|
|
323
|
+
opt :feature, "\nPath to the feature JSON file\n" \
|
|
324
|
+
"Example: uo des_params --sys-param-file path/to/sys_params.json --feature path/to/example_project.json\n", type: String, required: true, short: :f
|
|
325
|
+
|
|
326
|
+
opt :model_type, "\nSelection for which kind of DES simulation to perform\n" \
|
|
327
|
+
"Valid choices: 'time_series'", type: String, default: 'time_series'
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
def opt_des_create
|
|
332
|
+
@subopts = Optimist.options do
|
|
333
|
+
banner "\nURBANopt #{@command}:\n"
|
|
334
|
+
banner ""
|
|
335
|
+
opt :sys_param, "Path to system parameters config file, possibly created with 'des_params' command in this CLI\n" \
|
|
336
|
+
"Example: uo des_create --sys-param system_parameters.json\n", type: String, required: true, short: :y
|
|
337
|
+
banner ""
|
|
338
|
+
opt :feature, "Path to the feature JSON file\n" \
|
|
339
|
+
"Example: uo des_create --feature path/to/example_project.json", type: String, required: true, short: :f
|
|
340
|
+
|
|
341
|
+
opt :des_name, "\nPath to Modelica project dir to be created\n" \
|
|
342
|
+
"Example: uo des_create --des-name path/to/example_modelica_project", type: String, required: true
|
|
343
|
+
|
|
344
|
+
opt :model_type, "\nSelection for which kind of DES simulation to perform\n" \
|
|
345
|
+
"Valid choices: 'time_series'", type: String, default: 'time_series'
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
def opt_des_run
|
|
350
|
+
@subopts = Optimist.options do
|
|
351
|
+
banner "\nURBANopt #{@command}:\n \n"
|
|
352
|
+
|
|
353
|
+
opt :model, "\nPath to Modelica model dir, possibly created with 'des_create' command in this CLI\n" \
|
|
354
|
+
"Example: uo des_run --model path/to/model/dir", type: String, required: true
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
263
358
|
attr_reader :mainopts, :command, :subopts
|
|
264
359
|
end
|
|
265
360
|
|
|
266
361
|
# Initialize the CLI class
|
|
267
362
|
@opthash = UrbanOptCLI.new
|
|
268
363
|
|
|
269
|
-
#
|
|
270
|
-
|
|
271
|
-
|
|
364
|
+
# Rescue if user only enters 'uo' without a command
|
|
365
|
+
begin
|
|
366
|
+
# Pull out feature and scenario filenames and paths
|
|
367
|
+
if @opthash.subopts[:scenario_file]
|
|
368
|
+
@feature_path, @feature_name = File.split(File.expand_path(@opthash.subopts[:scenario_file]))
|
|
369
|
+
end
|
|
370
|
+
rescue NoMethodError
|
|
371
|
+
abort("Invalid command, please run uo --help for a list of available commands")
|
|
272
372
|
end
|
|
373
|
+
|
|
273
374
|
# FIXME: Can this be combined with the above block? This isn't very DRY
|
|
274
375
|
# One solution would be changing scenario_file to feature.
|
|
275
376
|
# Would that be confusing when creating a ScenarioFile from the FeatureFile?
|
|
@@ -281,7 +382,7 @@ module URBANopt
|
|
|
281
382
|
@scenario_name = File.basename(@scenario_file_name, File.extname(@scenario_file_name))
|
|
282
383
|
end
|
|
283
384
|
|
|
284
|
-
# Simulate energy usage as defined by ScenarioCSV
|
|
385
|
+
# Simulate energy usage as defined by ScenarioCSV
|
|
285
386
|
def self.run_func
|
|
286
387
|
run_dir = File.join(@root_dir, 'run', @scenario_name.downcase)
|
|
287
388
|
csv_file = File.join(@root_dir, @scenario_file_name)
|
|
@@ -312,7 +413,16 @@ module URBANopt
|
|
|
312
413
|
# params\
|
|
313
414
|
# +feature_file_path+:: _string_ Path to a FeatureFile
|
|
314
415
|
def self.create_scenario_csv_file(feature_id)
|
|
315
|
-
|
|
416
|
+
begin
|
|
417
|
+
feature_file_json = JSON.parse(File.read(File.expand_path(@opthash.subopts[:scenario_file])), symbolize_names: true)
|
|
418
|
+
# Rescue if user provides path to a dir and not a file
|
|
419
|
+
rescue Errno::EISDIR => dir_error
|
|
420
|
+
wrong_path = dir_error.to_s.split(' - ')[-1]
|
|
421
|
+
abort("\nOops! '#{wrong_path}' is a directory. Please provide path to the geojson feature_file")
|
|
422
|
+
# Rescue if file isn't json
|
|
423
|
+
rescue JSON::ParserError => json_error
|
|
424
|
+
abort("\nOops! You didn't provide a json file. Please provide path to the geojson feature_file")
|
|
425
|
+
end
|
|
316
426
|
Dir["#{@feature_path}/mappers/*.rb"].each do |mapper_file|
|
|
317
427
|
mapper_name = File.basename(mapper_file, File.extname(mapper_file))
|
|
318
428
|
scenario_file_name = if feature_id == 'SKIP'
|
|
@@ -322,20 +432,25 @@ module URBANopt
|
|
|
322
432
|
end
|
|
323
433
|
CSV.open(File.join(@feature_path, scenario_file_name), 'wb', write_headers: true,
|
|
324
434
|
headers: ['Feature Id', 'Feature Name', 'Mapper Class']) do |csv|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
435
|
+
begin
|
|
436
|
+
feature_file_json[:features].each do |feature|
|
|
437
|
+
if feature_id == 'SKIP'
|
|
438
|
+
# ensure that feature is a building
|
|
439
|
+
if feature[:properties][:type] == 'Building'
|
|
440
|
+
csv << [feature[:properties][:id], feature[:properties][:name], "URBANopt::Scenario::#{mapper_name}Mapper"]
|
|
441
|
+
end
|
|
442
|
+
elsif feature_id == feature[:properties][:id]
|
|
329
443
|
csv << [feature[:properties][:id], feature[:properties][:name], "URBANopt::Scenario::#{mapper_name}Mapper"]
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
unless feature_file_json[:features].any? { |hash| hash[:properties][:id].include?(feature_id.to_s) }
|
|
336
|
-
abort("\nYou must provide Feature ID from FeatureFile!\n---\n\n")
|
|
444
|
+
elsif
|
|
445
|
+
# If Feature ID specified does not exist in the Feature File raise error
|
|
446
|
+
unless feature_file_json[:features].any? { |hash| hash[:properties][:id].include?(feature_id.to_s) }
|
|
447
|
+
abort("\nYou must provide Feature ID from FeatureFile!\n---\n\n")
|
|
448
|
+
end
|
|
337
449
|
end
|
|
338
450
|
end
|
|
451
|
+
# Rescue if json isn't a geojson feature_file
|
|
452
|
+
rescue NoMethodError
|
|
453
|
+
abort("\nOops! You didn't provde a valid feature_file. Please provide path to the geojson feature_file")
|
|
339
454
|
end
|
|
340
455
|
end
|
|
341
456
|
end
|
|
@@ -416,11 +531,13 @@ module URBANopt
|
|
|
416
531
|
|
|
417
532
|
if @opthash.subopts[:electric] == true
|
|
418
533
|
FileUtils.cp(File.join(path_item, 'example_project_with_electric_network.json'), dir_name)
|
|
534
|
+
elsif @opthash.subopts[:streets] == true
|
|
535
|
+
FileUtils.cp(File.join(path_item, 'example_project_with_streets.json'), dir_name)
|
|
419
536
|
end
|
|
420
537
|
|
|
421
538
|
if @opthash.subopts[:floorspace] == false
|
|
422
539
|
|
|
423
|
-
if @opthash.subopts[:electric] != true
|
|
540
|
+
if @opthash.subopts[:electric] != true && @opthash.subopts[:streets] != true
|
|
424
541
|
# copy feature file
|
|
425
542
|
FileUtils.cp(File.join(path_item, 'example_project.json'), dir_name)
|
|
426
543
|
end
|
|
@@ -651,6 +768,7 @@ module URBANopt
|
|
|
651
768
|
puts "\nDone\n"
|
|
652
769
|
end
|
|
653
770
|
|
|
771
|
+
# Run OpenDSS simulation
|
|
654
772
|
if @opthash.command == 'opendss'
|
|
655
773
|
|
|
656
774
|
# first check python
|
|
@@ -720,9 +838,43 @@ module URBANopt
|
|
|
720
838
|
begin
|
|
721
839
|
system(ditto_cli_root + ditto_cli_addition)
|
|
722
840
|
rescue FileNotFoundError
|
|
723
|
-
abort("\nMust post-process results before running
|
|
724
|
-
"Once
|
|
841
|
+
abort("\nMust post-process results before running OpenDSS. We recommend 'process --default'." \
|
|
842
|
+
"Once OpenDSS is run, you may then 'process --opendss'")
|
|
843
|
+
end
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
# Run RNM Simulation
|
|
847
|
+
if @opthash.command == 'rnm'
|
|
848
|
+
|
|
849
|
+
run_dir = File.join(@root_dir, 'run', @scenario_name.downcase)
|
|
850
|
+
# check if project has been post-processed appropriately
|
|
851
|
+
if !File.exist?(File.join(run_dir, 'default_scenario_report.json'))
|
|
852
|
+
abort("\nYou must first post-process the scenario before running RNM. We recommend 'process --default'.")
|
|
725
853
|
end
|
|
854
|
+
|
|
855
|
+
puts 'Preparing RNM inputs'
|
|
856
|
+
# prep arguments
|
|
857
|
+
reopt = @opthash.subopts[:reopt] ? true : false
|
|
858
|
+
opendss_catalog = @opthash.subopts[:opendss] ? true : false
|
|
859
|
+
|
|
860
|
+
# if paths below are nil, default paths will be used
|
|
861
|
+
extended_catalog_path = @opthash.subopts[:extended_catalog] ? @opthash.subopts[:extended_catalog] : nil
|
|
862
|
+
average_peak_catalog_path = @opthash.subopts[:average_peak_catalog] ? @opthash.subopts[:average_peak_catalog] : nil
|
|
863
|
+
|
|
864
|
+
# create inputs, run sim and get results
|
|
865
|
+
begin
|
|
866
|
+
runner = URBANopt::RNM::Runner.new(@scenario_name, run_dir, @opthash.subopts[:scenario], @opthash.subopts[:feature], extended_catalog_path:extended_catalog_path, average_peak_catalog_path:average_peak_catalog_path, reopt:reopt, opendss_catalog:opendss_catalog)
|
|
867
|
+
runner.create_simulation_files
|
|
868
|
+
runner.run
|
|
869
|
+
runner.post_process
|
|
870
|
+
rescue => error
|
|
871
|
+
abort("\nError: #{error.message}")
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
# TODO: aggregate back into scenario reports and geojson file
|
|
875
|
+
puts "\nRNM Results saved to: #{File.join(run_dir, 'rnm-us', 'results')}"
|
|
876
|
+
puts "\nDone\n"
|
|
877
|
+
|
|
726
878
|
end
|
|
727
879
|
|
|
728
880
|
# Post-process the scenario
|
|
@@ -740,7 +892,7 @@ module URBANopt
|
|
|
740
892
|
|
|
741
893
|
default_post_processor = URBANopt::Scenario::ScenarioDefaultPostProcessor.new(run_func)
|
|
742
894
|
scenario_report = default_post_processor.run
|
|
743
|
-
scenario_report.save
|
|
895
|
+
scenario_report.save(file_name = 'default_scenario_report', save_feature_reports = false)
|
|
744
896
|
scenario_report.feature_reports.each(&:save)
|
|
745
897
|
|
|
746
898
|
if @opthash.subopts[:with_database] == true
|
|
@@ -752,7 +904,7 @@ module URBANopt
|
|
|
752
904
|
results << { "process_type": 'default', "status": 'Complete', "timestamp": Time.now.strftime('%Y-%m-%dT%k:%M:%S.%L') }
|
|
753
905
|
elsif @opthash.subopts[:opendss] == true
|
|
754
906
|
puts "\nPost-processing OpenDSS results\n"
|
|
755
|
-
opendss_folder = File.join(@root_dir, 'run', @scenario_name, 'opendss')
|
|
907
|
+
opendss_folder = File.join(@root_dir, 'run', @scenario_name.downcase, 'opendss')
|
|
756
908
|
if File.directory?(opendss_folder)
|
|
757
909
|
opendss_folder_name = File.basename(opendss_folder)
|
|
758
910
|
opendss_post_processor = URBANopt::Scenario::OpenDSSPostProcessor.new(scenario_report, opendss_results_dir_name = opendss_folder_name)
|
|
@@ -771,15 +923,30 @@ module URBANopt
|
|
|
771
923
|
scenario_assumptions = File.expand_path(@opthash.subopts[:reopt_scenario_assumptions_file]).to_s
|
|
772
924
|
end
|
|
773
925
|
puts "\nRunning the REopt Scenario post-processor with scenario assumptions file: #{scenario_assumptions}\n"
|
|
774
|
-
reopt_post_processor = URBANopt::REopt::REoptPostProcessor.new(
|
|
926
|
+
reopt_post_processor = URBANopt::REopt::REoptPostProcessor.new(
|
|
927
|
+
scenario_report,
|
|
928
|
+
scenario_assumptions,
|
|
929
|
+
scenario_base.reopt_feature_assumptions,
|
|
930
|
+
DEVELOPER_NREL_KEY
|
|
931
|
+
)
|
|
775
932
|
if @opthash.subopts[:reopt_scenario] == true
|
|
776
933
|
puts "\nPost-processing entire scenario with REopt\n"
|
|
777
|
-
scenario_report_scenario = reopt_post_processor.run_scenario_report(
|
|
934
|
+
scenario_report_scenario = reopt_post_processor.run_scenario_report(
|
|
935
|
+
scenario_report: scenario_report,
|
|
936
|
+
save_name: 'scenario_optimization',
|
|
937
|
+
run_resilience: @opthash.subopts[:reopt_resilience]
|
|
938
|
+
)
|
|
778
939
|
results << { "process_type": 'reopt_scenario', "status": 'Complete', "timestamp": Time.now.strftime('%Y-%m-%dT%k:%M:%S.%L') }
|
|
779
940
|
puts "\nDone\n"
|
|
780
941
|
elsif @opthash.subopts[:reopt_feature] == true
|
|
781
942
|
puts "\nPost-processing each building individually with REopt\n"
|
|
782
|
-
|
|
943
|
+
scenario_report_features = reopt_post_processor.run_scenario_report_features(
|
|
944
|
+
scenario_report: scenario_report,
|
|
945
|
+
save_names_feature_reports: ['feature_optimization'] * scenario_report.feature_reports.length,
|
|
946
|
+
save_name_scenario_report: 'feature_optimization',
|
|
947
|
+
run_resilience: @opthash.subopts[:reopt_resilience],
|
|
948
|
+
keep_existing_output: @opthash.subopts[:reopt_keep_existing]
|
|
949
|
+
)
|
|
783
950
|
results << { "process_type": 'reopt_feature', "status": 'Complete', "timestamp": Time.now.strftime('%Y-%m-%dT%k:%M:%S.%L') }
|
|
784
951
|
puts "\nDone\n"
|
|
785
952
|
end
|
|
@@ -867,7 +1034,7 @@ module URBANopt
|
|
|
867
1034
|
end
|
|
868
1035
|
end
|
|
869
1036
|
end
|
|
870
|
-
html_out_path = File.join(@root_dir, 'run', @scenario_name, 'feature_comparison.html')
|
|
1037
|
+
html_out_path = File.join(@root_dir, 'run', @scenario_name.downcase, 'feature_comparison.html')
|
|
871
1038
|
FileUtils.cp(html_in_path, html_out_path)
|
|
872
1039
|
puts "\nDone\n"
|
|
873
1040
|
end
|
|
@@ -889,8 +1056,8 @@ module URBANopt
|
|
|
889
1056
|
feature_ids = CSV.read(@opthash.subopts[:scenario], headers: true)
|
|
890
1057
|
feature_list = []
|
|
891
1058
|
feature_ids['Feature Id'].each do |feature|
|
|
892
|
-
if Dir.exist?(File.join(@root_dir, 'run', @scenario_name, feature))
|
|
893
|
-
feature_list << File.join(@root_dir, 'run', @scenario_name, feature)
|
|
1059
|
+
if Dir.exist?(File.join(@root_dir, 'run', @scenario_name.downcase, feature))
|
|
1060
|
+
feature_list << File.join(@root_dir, 'run', @scenario_name.downcase, feature)
|
|
894
1061
|
else
|
|
895
1062
|
puts "Warning: did not find a directory for FeatureID: #{feature} ...skipping"
|
|
896
1063
|
end
|
|
@@ -931,6 +1098,72 @@ module URBANopt
|
|
|
931
1098
|
end
|
|
932
1099
|
end
|
|
933
1100
|
|
|
1101
|
+
if @opthash.command == 'des_params'
|
|
1102
|
+
# We're calling the python cli that gets installed when the user pip installs geojson-modelica-reader.
|
|
1103
|
+
# If geojson-modelica-reader is installed into a venv (recommended), that venv must be activated when this command is called.
|
|
1104
|
+
des_cli_root = "uo_des build-sys-param"
|
|
1105
|
+
if @opthash.subopts[:sys_param_file]
|
|
1106
|
+
des_cli_addition = " #{@opthash.subopts[:sys_param_file]}"
|
|
1107
|
+
if @opthash.subopts[:scenario]
|
|
1108
|
+
des_cli_addition += " #{@opthash.subopts[:scenario]}"
|
|
1109
|
+
end
|
|
1110
|
+
if @opthash.subopts[:feature]
|
|
1111
|
+
des_cli_addition += " #{@opthash.subopts[:feature]}"
|
|
1112
|
+
end
|
|
1113
|
+
if @opthash.subopts[:model_type]
|
|
1114
|
+
des_cli_addition += " #{@opthash.subopts[:model_type]}"
|
|
1115
|
+
end
|
|
1116
|
+
else
|
|
1117
|
+
abort("\nCommand must include new system parameter file name, ScenarioFile, & FeatureFile. Please try again")
|
|
1118
|
+
end
|
|
1119
|
+
begin
|
|
1120
|
+
system(des_cli_root + des_cli_addition)
|
|
1121
|
+
rescue FileNotFoundError
|
|
1122
|
+
abort("\nMust simulate using 'uo run' before preparing Modelica models.")
|
|
1123
|
+
end
|
|
1124
|
+
end
|
|
1125
|
+
|
|
1126
|
+
if @opthash.command == 'des_create'
|
|
1127
|
+
# We're calling the python cli that gets installed when the user pip installs geojson-modelica-reader.
|
|
1128
|
+
# If geojson-modelica-reader is installed into a venv (recommended), that venv must be activated when this command is called.
|
|
1129
|
+
des_cli_root = "uo_des create-model"
|
|
1130
|
+
if @opthash.subopts[:sys_param]
|
|
1131
|
+
des_cli_addition = " #{@opthash.subopts[:sys_param]}"
|
|
1132
|
+
if @opthash.subopts[:feature]
|
|
1133
|
+
des_cli_addition += " #{@opthash.subopts[:feature]}"
|
|
1134
|
+
end
|
|
1135
|
+
if @opthash.subopts[:des_name]
|
|
1136
|
+
des_cli_addition += " #{File.expand_path(@opthash.subopts[:des_name])}"
|
|
1137
|
+
end
|
|
1138
|
+
if @opthash.subopts[:model_type]
|
|
1139
|
+
des_cli_addition += " #{@opthash.subopts[:model_type]}"
|
|
1140
|
+
end
|
|
1141
|
+
else
|
|
1142
|
+
abort("\nCommand must include system parameter file name, FeatureFile, and model name. Please try again")
|
|
1143
|
+
end
|
|
1144
|
+
begin
|
|
1145
|
+
system(des_cli_root + des_cli_addition)
|
|
1146
|
+
rescue FileNotFoundError
|
|
1147
|
+
abort("\nMust simulate using 'uo run' before preparing Modelica models.")
|
|
1148
|
+
end
|
|
1149
|
+
end
|
|
1150
|
+
|
|
1151
|
+
if @opthash.command == 'des_run'
|
|
1152
|
+
# We're calling the python cli that gets installed when the user pip installs geojson-modelica-reader.
|
|
1153
|
+
# If geojson-modelica-reader is installed into a venv (recommended), that venv must be activated when this command is called.
|
|
1154
|
+
des_cli_root = "uo_des run-model"
|
|
1155
|
+
if @opthash.subopts[:model]
|
|
1156
|
+
des_cli_addition = " #{File.expand_path(@opthash.subopts[:model])}"
|
|
1157
|
+
else
|
|
1158
|
+
abort("\nCommand must include Modelica model name. Please try again")
|
|
1159
|
+
end
|
|
1160
|
+
begin
|
|
1161
|
+
system(des_cli_root + des_cli_addition)
|
|
1162
|
+
rescue FileNotFoundError
|
|
1163
|
+
abort("\nMust simulate using 'uo run' before preparing Modelica models.")
|
|
1164
|
+
end
|
|
1165
|
+
end
|
|
1166
|
+
|
|
934
1167
|
# Delete simulations from a scenario
|
|
935
1168
|
if @opthash.command == 'delete'
|
|
936
1169
|
scenario_results_dir = File.join(@root_dir, 'run', @scenario_name.downcase)
|