urbanopt-cli 0.5.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +40 -0
- data/CMakeLists.txt +13 -13
- data/FindOpenStudioSDK.cmake +11 -6
- data/Gemfile +12 -6
- data/example_files/Gemfile +11 -8
- data/example_files/base_workflow_res.osw +10 -0
- data/example_files/example_project_combined.json +13 -3
- data/example_files/example_project_with_PV.json +751 -0
- data/example_files/example_project_with_streets.json +826 -0
- data/example_files/mappers/Baseline.rb +106 -50
- data/example_files/mappers/CreateBar.rb +31 -1
- data/example_files/mappers/FlexibleHotWater.rb +69 -0
- data/example_files/mappers/Floorspace.rb +31 -1
- data/example_files/mappers/HighEfficiency.rb +20 -8
- data/example_files/mappers/HighEfficiencyCreateBar.rb +3 -2
- data/example_files/mappers/HighEfficiencyFloorspace.rb +3 -2
- data/example_files/mappers/base_workflow.osw +5 -0
- data/example_files/mappers/createbar_workflow.osw +3 -1
- data/example_files/mappers/floorspace_workflow.osw +2 -1
- data/example_files/measures/BuildResidentialModel/measure.rb +70 -37
- data/example_files/osm_building/7.osm +0 -307
- data/example_files/osm_building/8.osm +0 -419
- data/example_files/osm_building/9.osm +0 -664
- data/example_files/reopt/base_assumptions.json +4 -4
- data/example_files/reopt/multiPV_assumptions.json +6 -5
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +96 -3
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +138 -73
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +509 -487
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +11 -11
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +33 -32
- 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/tests/base-appliances-coal.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +5 -5
- 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 +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +4 -4
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +4 -4
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +4 -4
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +4 -4
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +6 -6
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +4 -2
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +5 -5
- 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 +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +5 -5
- 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 +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +4 -4
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +4 -4
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +8 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +7 -7
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → invalid_files/single-family-detached-with-shared-system.osw} +22 -22
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +5 -5
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +5 -5
- data/example_files/resources/hpxml-measures/Changelog.md +14 -3
- data/example_files/resources/hpxml-measures/Gemfile +1 -4
- data/example_files/resources/hpxml-measures/Gemfile.lock +6 -25
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +136 -528
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +131 -106
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +2 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +31 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +19 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +5 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +62 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +2 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +388 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +54 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +40 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +110 -89
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +2 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +21 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +12 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +2 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +28 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +20 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +2 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +16 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/{test_constructions.rb → test_enclosure.rb} +12 -16
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +13 -38
- 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 +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +1 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
- data/example_files/resources/hpxml-measures/README.md +0 -1
- data/example_files/resources/hpxml-measures/Rakefile +1 -2
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +32 -13
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +37 -9
- data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +24 -7
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +1 -1
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +1 -0
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +75 -58
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +5 -1
- data/example_files/resources/hpxml-measures/tasks.rb +248 -263
- data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +17 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +0 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +0 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +0 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +0 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +6 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +21 -20
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +21 -20
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +1 -52
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +9 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +1 -52
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +30 -28
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +9 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +9 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +9 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +9 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +3 -2
- 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 +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +9 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +9 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +9 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → invalid_files/solar-fraction-one.xml} +570 -524
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/template.osw +1 -0
- 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 +108 -38
- data/example_files/visualization/input_visualization_feature.html +15 -16
- data/example_files/visualization/input_visualization_scenario.html +16 -11
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +158 -26
- 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 +80 -24
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -74
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -838
@@ -72,6 +72,12 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
|
|
72
72
|
arg.setDefaultValue(false)
|
73
73
|
args << arg
|
74
74
|
|
75
|
+
arg = OpenStudio::Measure::OSArgument.makeBoolArgument('add_component_loads', false)
|
76
|
+
arg.setDisplayName('Add component loads?')
|
77
|
+
arg.setDescription('If true, adds the calculation of heating/cooling component loads (not enabled by default for faster performance).')
|
78
|
+
arg.setDefaultValue(false)
|
79
|
+
args << arg
|
80
|
+
|
75
81
|
arg = OpenStudio::Measure::OSArgument.makeBoolArgument('skip_validation', false)
|
76
82
|
arg.setDisplayName('Skip Validation?')
|
77
83
|
arg.setDescription('If true, bypasses HPXML input validation for faster performance. WARNING: This should only be used if the supplied HPXML file has already been validated against the Schema & Schematron documents.')
|
@@ -102,6 +108,7 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
|
|
102
108
|
# assign the user inputs to variables
|
103
109
|
hpxml_path = runner.getStringArgumentValue('hpxml_path', user_arguments)
|
104
110
|
output_dir = runner.getStringArgumentValue('output_dir', user_arguments)
|
111
|
+
add_component_loads = runner.getBoolArgumentValue('add_component_loads', user_arguments)
|
105
112
|
debug = runner.getBoolArgumentValue('debug', user_arguments)
|
106
113
|
skip_validation = runner.getBoolArgumentValue('skip_validation', user_arguments)
|
107
114
|
building_id = runner.getOptionalStringArgumentValue('building_id', user_arguments)
|
@@ -146,7 +153,8 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
|
|
146
153
|
FileUtils.cp(epw_path, epw_output_path)
|
147
154
|
end
|
148
155
|
|
149
|
-
OSModel.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir,
|
156
|
+
OSModel.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir,
|
157
|
+
add_component_loads, building_id, debug)
|
150
158
|
rescue Exception => e
|
151
159
|
runner.registerError("#{e.message}\n#{e.backtrace.join("\n")}")
|
152
160
|
return false
|
@@ -195,7 +203,8 @@ class HPXMLtoOpenStudio < OpenStudio::Measure::ModelMeasure
|
|
195
203
|
end
|
196
204
|
|
197
205
|
class OSModel
|
198
|
-
def self.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir,
|
206
|
+
def self.create(hpxml, runner, model, hpxml_path, epw_path, cache_path, output_dir,
|
207
|
+
add_component_loads, building_id, debug)
|
199
208
|
@hpxml = hpxml
|
200
209
|
@debug = debug
|
201
210
|
|
@@ -238,8 +247,8 @@ class OSModel
|
|
238
247
|
add_conditioned_floor_area(runner, model, spaces)
|
239
248
|
add_thermal_mass(runner, model, spaces)
|
240
249
|
update_conditioned_basement(runner, model, spaces)
|
241
|
-
set_zone_volumes(runner, model, spaces)
|
242
|
-
explode_surfaces(runner, model)
|
250
|
+
Geometry.set_zone_volumes(runner, model, spaces, @hpxml, @apply_ashrae140_assumptions)
|
251
|
+
Geometry.explode_surfaces(runner, model, @hpxml, @walls_top)
|
243
252
|
add_num_occupants(model, runner, spaces)
|
244
253
|
|
245
254
|
# HVAC
|
@@ -274,7 +283,7 @@ class OSModel
|
|
274
283
|
|
275
284
|
# Output
|
276
285
|
|
277
|
-
|
286
|
+
add_loads_output(runner, model, spaces, add_component_loads)
|
278
287
|
add_output_control_files(runner, model)
|
279
288
|
# Uncomment to debug EMS
|
280
289
|
# add_ems_debug_output(runner, model)
|
@@ -309,7 +318,7 @@ class OSModel
|
|
309
318
|
@default_azimuths = get_default_azimuths()
|
310
319
|
|
311
320
|
# Apply defaults to HPXML object
|
312
|
-
HPXMLDefaults.apply(@hpxml, @eri_version, weather, epw_file)
|
321
|
+
HPXMLDefaults.apply(@hpxml, @eri_version, weather, epw_file: epw_file)
|
313
322
|
|
314
323
|
@frac_windows_operable = @hpxml.fraction_of_windows_operable()
|
315
324
|
|
@@ -323,204 +332,18 @@ class OSModel
|
|
323
332
|
end
|
324
333
|
|
325
334
|
def self.add_simulation_params(model)
|
326
|
-
SimControls.apply(model, @hpxml
|
327
|
-
end
|
328
|
-
|
329
|
-
def self.set_zone_volumes(runner, model, spaces)
|
330
|
-
# Living space
|
331
|
-
spaces[HPXML::LocationLivingSpace].thermalZone.get.setVolume(UnitConversions.convert(@hpxml.building_construction.conditioned_building_volume, 'ft^3', 'm^3'))
|
332
|
-
|
333
|
-
# Basement, crawlspace, garage
|
334
|
-
spaces.keys.each do |space_type|
|
335
|
-
next unless [HPXML::LocationBasementUnconditioned, HPXML::LocationCrawlspaceUnvented, HPXML::LocationCrawlspaceVented, HPXML::LocationGarage].include? space_type
|
336
|
-
|
337
|
-
floor_area = @hpxml.slabs.select { |s| s.interior_adjacent_to == space_type }.map { |s| s.area }.sum(0.0)
|
338
|
-
if space_type == HPXML::LocationGarage
|
339
|
-
height = 8.0
|
340
|
-
else
|
341
|
-
height = @hpxml.foundation_walls.select { |w| w.interior_adjacent_to == space_type }.map { |w| w.height }.max
|
342
|
-
end
|
343
|
-
|
344
|
-
spaces[space_type].thermalZone.get.setVolume(UnitConversions.convert(floor_area * height, 'ft^3', 'm^3'))
|
345
|
-
end
|
346
|
-
|
347
|
-
# Attic
|
348
|
-
spaces.keys.each do |space_type|
|
349
|
-
next unless [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? space_type
|
350
|
-
|
351
|
-
floor_area = @hpxml.frame_floors.select { |f| [f.interior_adjacent_to, f.exterior_adjacent_to].include? space_type }.map { |s| s.area }.sum(0.0)
|
352
|
-
roofs = @hpxml.roofs.select { |r| r.interior_adjacent_to == space_type }
|
353
|
-
avg_pitch = roofs.map { |r| r.pitch }.sum(0.0) / roofs.size
|
354
|
-
|
355
|
-
if @apply_ashrae140_assumptions
|
356
|
-
# Hardcode the attic volume to match ASHRAE 140 Table 7-2 specification
|
357
|
-
volume = 3463
|
358
|
-
else
|
359
|
-
# Assume square hip roof for volume calculations; energy results are very insensitive to actual volume
|
360
|
-
length = floor_area**0.5
|
361
|
-
height = 0.5 * Math.sin(Math.atan(avg_pitch / 12.0)) * length
|
362
|
-
volume = [floor_area * height / 3.0, 0.01].max
|
363
|
-
end
|
364
|
-
|
365
|
-
spaces[space_type].thermalZone.get.setVolume(UnitConversions.convert(volume, 'ft^3', 'm^3'))
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
def self.explode_surfaces(runner, model)
|
370
|
-
# Re-position surfaces so as to not shade each other and to make it easier to visualize the building.
|
371
|
-
|
372
|
-
gap_distance = UnitConversions.convert(10.0, 'ft', 'm') # distance between surfaces of the same azimuth
|
373
|
-
rad90 = UnitConversions.convert(90, 'deg', 'rad')
|
374
|
-
|
375
|
-
# Determine surfaces to shift and distance with which to explode surfaces horizontally outward
|
376
|
-
surfaces = []
|
377
|
-
azimuth_lengths = {}
|
378
|
-
model.getSurfaces.sort.each do |surface|
|
379
|
-
next unless ['wall', 'roofceiling'].include? surface.surfaceType.downcase
|
380
|
-
next unless ['outdoors', 'foundation', 'adiabatic'].include? surface.outsideBoundaryCondition.downcase
|
381
|
-
next if surface.additionalProperties.getFeatureAsDouble('Tilt').get <= 0 # skip flat roofs
|
382
|
-
|
383
|
-
surfaces << surface
|
384
|
-
azimuth = surface.additionalProperties.getFeatureAsInteger('Azimuth').get
|
385
|
-
if azimuth_lengths[azimuth].nil?
|
386
|
-
azimuth_lengths[azimuth] = 0.0
|
387
|
-
end
|
388
|
-
azimuth_lengths[azimuth] += surface.additionalProperties.getFeatureAsDouble('Length').get + gap_distance
|
389
|
-
end
|
390
|
-
max_azimuth_length = azimuth_lengths.values.max
|
391
|
-
|
392
|
-
# Using the max length for a given azimuth, calculate the apothem (radius of the incircle) of a regular
|
393
|
-
# n-sided polygon to create the smallest polygon possible without self-shading. The number of polygon
|
394
|
-
# sides is defined by the minimum difference between two azimuths.
|
395
|
-
min_azimuth_diff = 360
|
396
|
-
azimuths_sorted = azimuth_lengths.keys.sort
|
397
|
-
azimuths_sorted.each_with_index do |az, idx|
|
398
|
-
diff1 = (az - azimuths_sorted[(idx + 1) % azimuths_sorted.size]).abs
|
399
|
-
diff2 = 360.0 - diff1 # opposite direction
|
400
|
-
if diff1 < min_azimuth_diff
|
401
|
-
min_azimuth_diff = diff1
|
402
|
-
end
|
403
|
-
if diff2 < min_azimuth_diff
|
404
|
-
min_azimuth_diff = diff2
|
405
|
-
end
|
406
|
-
end
|
407
|
-
if min_azimuth_diff > 0
|
408
|
-
nsides = [(360.0 / min_azimuth_diff).ceil, 4].max # assume rectangle at the minimum
|
409
|
-
else
|
410
|
-
nsides = 4
|
411
|
-
end
|
412
|
-
explode_distance = max_azimuth_length / (2.0 * Math.tan(UnitConversions.convert(180.0 / nsides, 'deg', 'rad')))
|
413
|
-
|
414
|
-
add_neighbors(runner, model, max_azimuth_length)
|
415
|
-
|
416
|
-
# Initial distance of shifts at 90-degrees to horizontal outward
|
417
|
-
azimuth_side_shifts = {}
|
418
|
-
azimuth_lengths.keys.each do |azimuth|
|
419
|
-
azimuth_side_shifts[azimuth] = max_azimuth_length / 2.0
|
420
|
-
end
|
421
|
-
|
422
|
-
# Explode neighbors
|
423
|
-
model.getShadingSurfaceGroups.each do |shading_group|
|
424
|
-
next unless shading_group.name.to_s == Constants.ObjectNameNeighbors
|
425
|
-
|
426
|
-
shading_group.shadingSurfaces.each do |shading_surface|
|
427
|
-
azimuth = shading_surface.additionalProperties.getFeatureAsInteger('Azimuth').get
|
428
|
-
azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
|
429
|
-
distance = shading_surface.additionalProperties.getFeatureAsDouble('Distance').get
|
430
|
-
|
431
|
-
unless azimuth_lengths.keys.include? azimuth
|
432
|
-
fail "A neighbor building has an azimuth (#{azimuth}) not equal to the azimuth of any wall."
|
433
|
-
end
|
434
|
-
|
435
|
-
# Push out horizontally
|
436
|
-
distance += explode_distance
|
437
|
-
transformation = get_surface_transformation(distance, Math::sin(azimuth_rad), Math::cos(azimuth_rad), 0)
|
438
|
-
|
439
|
-
shading_surface.setVertices(transformation * shading_surface.vertices)
|
440
|
-
end
|
441
|
-
end
|
442
|
-
|
443
|
-
# Explode walls, windows, doors, roofs, and skylights
|
444
|
-
surfaces_moved = []
|
445
|
-
|
446
|
-
surfaces.sort.each do |surface|
|
447
|
-
next if surface.additionalProperties.getFeatureAsDouble('Tilt').get <= 0 # skip flat roofs
|
448
|
-
|
449
|
-
if surface.adjacentSurface.is_initialized
|
450
|
-
next if surfaces_moved.include? surface.adjacentSurface.get
|
451
|
-
end
|
452
|
-
|
453
|
-
azimuth = surface.additionalProperties.getFeatureAsInteger('Azimuth').get
|
454
|
-
azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
|
455
|
-
|
456
|
-
# Get associated shading surfaces (e.g., overhangs, interior shading surfaces)
|
457
|
-
overhang_surfaces = []
|
458
|
-
shading_surfaces = []
|
459
|
-
surface.subSurfaces.each do |subsurface|
|
460
|
-
next unless subsurface.subSurfaceType.downcase == 'fixedwindow'
|
461
|
-
|
462
|
-
subsurface.shadingSurfaceGroups.each do |overhang_group|
|
463
|
-
overhang_group.shadingSurfaces.each do |overhang|
|
464
|
-
overhang_surfaces << overhang
|
465
|
-
end
|
466
|
-
end
|
467
|
-
end
|
468
|
-
model.getShadingSurfaceGroups.each do |shading_group|
|
469
|
-
next unless [Constants.ObjectNameSkylightShade, Constants.ObjectNameWindowShade].include? shading_group.name.to_s
|
470
|
-
|
471
|
-
shading_group.shadingSurfaces.each do |window_shade|
|
472
|
-
next unless window_shade.additionalProperties.getFeatureAsString('ParentSurface').get == surface.name.to_s
|
473
|
-
|
474
|
-
shading_surfaces << window_shade
|
475
|
-
end
|
476
|
-
end
|
477
|
-
|
478
|
-
# Push out horizontally
|
479
|
-
distance = explode_distance
|
480
|
-
|
481
|
-
if surface.surfaceType.downcase == 'roofceiling'
|
482
|
-
# Ensure pitched surfaces are positioned outward justified with walls, etc.
|
483
|
-
tilt = surface.additionalProperties.getFeatureAsDouble('Tilt').get
|
484
|
-
width = surface.additionalProperties.getFeatureAsDouble('Width').get
|
485
|
-
distance -= 0.5 * Math.cos(Math.atan(tilt)) * width
|
486
|
-
end
|
487
|
-
transformation = get_surface_transformation(distance, Math::sin(azimuth_rad), Math::cos(azimuth_rad), 0)
|
488
|
-
transformation_shade = get_surface_transformation(distance + 0.001, Math::sin(azimuth_rad), Math::cos(azimuth_rad), 0) # Offset slightly from window
|
489
|
-
|
490
|
-
([surface] + surface.subSurfaces + overhang_surfaces).each do |s|
|
491
|
-
s.setVertices(transformation * s.vertices)
|
492
|
-
end
|
493
|
-
shading_surfaces.each do |s|
|
494
|
-
s.setVertices(transformation_shade * s.vertices)
|
495
|
-
end
|
496
|
-
if surface.adjacentSurface.is_initialized
|
497
|
-
surface.adjacentSurface.get.setVertices(transformation * surface.adjacentSurface.get.vertices)
|
498
|
-
end
|
499
|
-
|
500
|
-
# Shift at 90-degrees to previous transformation, so surfaces don't overlap and shade each other
|
501
|
-
azimuth_side_shifts[azimuth] -= surface.additionalProperties.getFeatureAsDouble('Length').get / 2.0
|
502
|
-
transformation_shift = get_surface_transformation(azimuth_side_shifts[azimuth], Math::sin(azimuth_rad + rad90), Math::cos(azimuth_rad + rad90), 0)
|
503
|
-
|
504
|
-
([surface] + surface.subSurfaces + overhang_surfaces + shading_surfaces).each do |s|
|
505
|
-
s.setVertices(transformation_shift * s.vertices)
|
506
|
-
end
|
507
|
-
if surface.adjacentSurface.is_initialized
|
508
|
-
surface.adjacentSurface.get.setVertices(transformation_shift * surface.adjacentSurface.get.vertices)
|
509
|
-
end
|
510
|
-
|
511
|
-
azimuth_side_shifts[azimuth] -= (surface.additionalProperties.getFeatureAsDouble('Length').get / 2.0 + gap_distance)
|
512
|
-
|
513
|
-
surfaces_moved << surface
|
514
|
-
end
|
335
|
+
SimControls.apply(model, @hpxml)
|
515
336
|
end
|
516
337
|
|
517
338
|
def self.update_conditioned_basement(runner, model, spaces)
|
518
339
|
return if @cond_bsmnt_surfaces.empty?
|
340
|
+
|
519
341
|
# Update @cond_bsmnt_surfaces to include subsurfaces
|
520
342
|
new_cond_bsmnt_surfaces = @cond_bsmnt_surfaces.dup
|
521
343
|
@cond_bsmnt_surfaces.each do |cond_bsmnt_surface|
|
522
344
|
next if cond_bsmnt_surface.is_a? OpenStudio::Model::InternalMassDefinition
|
523
345
|
next if cond_bsmnt_surface.subSurfaces.empty?
|
346
|
+
|
524
347
|
cond_bsmnt_surface.subSurfaces.each do |ss|
|
525
348
|
new_cond_bsmnt_surfaces << ss
|
526
349
|
end
|
@@ -538,6 +361,7 @@ class OSModel
|
|
538
361
|
@cond_bsmnt_surfaces.each do |cond_bsmnt_surface|
|
539
362
|
# skip windows because windows don't have such property to change.
|
540
363
|
next if cond_bsmnt_surface.is_a?(OpenStudio::Model::SubSurface) && (cond_bsmnt_surface.subSurfaceType.downcase == 'fixedwindow')
|
364
|
+
|
541
365
|
adj_surface = nil
|
542
366
|
if not cond_bsmnt_surface.is_a? OpenStudio::Model::InternalMassDefinition
|
543
367
|
if not cond_bsmnt_surface.is_a? OpenStudio::Model::SubSurface
|
@@ -576,6 +400,7 @@ class OSModel
|
|
576
400
|
innermost_material.setSolarAbsorptance(0.0)
|
577
401
|
innermost_material.setVisibleAbsorptance(0.0)
|
578
402
|
next if adj_surface.nil?
|
403
|
+
|
579
404
|
# Create new construction in case of shared construciton.
|
580
405
|
layered_const_adj = OpenStudio::Model::Construction.new(model)
|
581
406
|
layered_const_adj.setName(cond_bsmnt_surface.construction.get.name.get + ' Reversed Bsmnt')
|
@@ -717,163 +542,26 @@ class OSModel
|
|
717
542
|
return vf_map
|
718
543
|
end
|
719
544
|
|
720
|
-
# FUTURE: Move this method and many below to geometry.rb
|
721
|
-
def self.create_space_and_zone(model, spaces, space_type)
|
722
|
-
if not spaces.keys.include? space_type
|
723
|
-
thermal_zone = OpenStudio::Model::ThermalZone.new(model)
|
724
|
-
thermal_zone.setName(space_type)
|
725
|
-
|
726
|
-
space = OpenStudio::Model::Space.new(model)
|
727
|
-
space.setName(space_type)
|
728
|
-
|
729
|
-
st = OpenStudio::Model::SpaceType.new(model)
|
730
|
-
st.setStandardsSpaceType(space_type)
|
731
|
-
space.setSpaceType(st)
|
732
|
-
|
733
|
-
space.setThermalZone(thermal_zone)
|
734
|
-
spaces[space_type] = space
|
735
|
-
end
|
736
|
-
end
|
737
|
-
|
738
|
-
def self.get_surface_transformation(offset, x, y, z)
|
739
|
-
x = UnitConversions.convert(x, 'ft', 'm')
|
740
|
-
y = UnitConversions.convert(y, 'ft', 'm')
|
741
|
-
z = UnitConversions.convert(z, 'ft', 'm')
|
742
|
-
|
743
|
-
m = OpenStudio::Matrix.new(4, 4, 0)
|
744
|
-
m[0, 0] = 1
|
745
|
-
m[1, 1] = 1
|
746
|
-
m[2, 2] = 1
|
747
|
-
m[3, 3] = 1
|
748
|
-
m[0, 3] = x * offset
|
749
|
-
m[1, 3] = y * offset
|
750
|
-
m[2, 3] = z.abs * offset
|
751
|
-
|
752
|
-
return OpenStudio::Transformation.new(m)
|
753
|
-
end
|
754
|
-
|
755
|
-
def self.add_floor_polygon(x, y, z)
|
756
|
-
x = UnitConversions.convert(x, 'ft', 'm')
|
757
|
-
y = UnitConversions.convert(y, 'ft', 'm')
|
758
|
-
z = UnitConversions.convert(z, 'ft', 'm')
|
759
|
-
|
760
|
-
vertices = OpenStudio::Point3dVector.new
|
761
|
-
vertices << OpenStudio::Point3d.new(0 - x / 2, 0 - y / 2, z)
|
762
|
-
vertices << OpenStudio::Point3d.new(0 - x / 2, y / 2, z)
|
763
|
-
vertices << OpenStudio::Point3d.new(x / 2, y / 2, z)
|
764
|
-
vertices << OpenStudio::Point3d.new(x / 2, 0 - y / 2, z)
|
765
|
-
|
766
|
-
# Rotate about the z axis
|
767
|
-
# This is not strictly needed, but will make the floor edges
|
768
|
-
# parallel to the walls for a better geometry rendering.
|
769
|
-
azimuth_rad = UnitConversions.convert(@default_azimuths[0], 'deg', 'rad')
|
770
|
-
m = OpenStudio::Matrix.new(4, 4, 0)
|
771
|
-
m[0, 0] = Math::cos(-azimuth_rad)
|
772
|
-
m[1, 1] = Math::cos(-azimuth_rad)
|
773
|
-
m[0, 1] = -Math::sin(-azimuth_rad)
|
774
|
-
m[1, 0] = Math::sin(-azimuth_rad)
|
775
|
-
m[2, 2] = 1
|
776
|
-
m[3, 3] = 1
|
777
|
-
transformation = OpenStudio::Transformation.new(m)
|
778
|
-
|
779
|
-
return transformation * vertices
|
780
|
-
end
|
781
|
-
|
782
|
-
def self.add_wall_polygon(x, y, z, azimuth, offsets = [0] * 4, subsurface_area = 0)
|
783
|
-
x = UnitConversions.convert(x, 'ft', 'm')
|
784
|
-
y = UnitConversions.convert(y, 'ft', 'm')
|
785
|
-
z = UnitConversions.convert(z, 'ft', 'm')
|
786
|
-
|
787
|
-
vertices = OpenStudio::Point3dVector.new
|
788
|
-
vertices << OpenStudio::Point3d.new(0 - (x / 2) - offsets[1], 0, z - offsets[0])
|
789
|
-
vertices << OpenStudio::Point3d.new(0 - (x / 2) - offsets[1], 0, z + y + offsets[2])
|
790
|
-
if subsurface_area > 0
|
791
|
-
subsurface_area = UnitConversions.convert(subsurface_area, 'ft^2', 'm^2')
|
792
|
-
sub_length = x / 10.0
|
793
|
-
sub_height = subsurface_area / sub_length
|
794
|
-
if sub_height >= y
|
795
|
-
sub_height = y - 0.1
|
796
|
-
sub_length = subsurface_area / sub_height
|
797
|
-
end
|
798
|
-
vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3] - sub_length, 0, z + y + offsets[2])
|
799
|
-
vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3] - sub_length, 0, z + y + offsets[2] - sub_height)
|
800
|
-
vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3], 0, z + y + offsets[2] - sub_height)
|
801
|
-
else
|
802
|
-
vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3], 0, z + y + offsets[2])
|
803
|
-
end
|
804
|
-
vertices << OpenStudio::Point3d.new(x - (x / 2) + offsets[3], 0, z - offsets[0])
|
805
|
-
|
806
|
-
# Rotate about the z axis
|
807
|
-
azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
|
808
|
-
m = OpenStudio::Matrix.new(4, 4, 0)
|
809
|
-
m[0, 0] = Math::cos(-azimuth_rad)
|
810
|
-
m[1, 1] = Math::cos(-azimuth_rad)
|
811
|
-
m[0, 1] = -Math::sin(-azimuth_rad)
|
812
|
-
m[1, 0] = Math::sin(-azimuth_rad)
|
813
|
-
m[2, 2] = 1
|
814
|
-
m[3, 3] = 1
|
815
|
-
transformation = OpenStudio::Transformation.new(m)
|
816
|
-
|
817
|
-
return transformation * vertices
|
818
|
-
end
|
819
|
-
|
820
|
-
def self.add_roof_polygon(x, y, z, azimuth, tilt)
|
821
|
-
x = UnitConversions.convert(x, 'ft', 'm')
|
822
|
-
y = UnitConversions.convert(y, 'ft', 'm')
|
823
|
-
z = UnitConversions.convert(z, 'ft', 'm')
|
824
|
-
|
825
|
-
vertices = OpenStudio::Point3dVector.new
|
826
|
-
vertices << OpenStudio::Point3d.new(x / 2, -y / 2, 0)
|
827
|
-
vertices << OpenStudio::Point3d.new(x / 2, y / 2, 0)
|
828
|
-
vertices << OpenStudio::Point3d.new(-x / 2, y / 2, 0)
|
829
|
-
vertices << OpenStudio::Point3d.new(-x / 2, -y / 2, 0)
|
830
|
-
|
831
|
-
# Rotate about the x axis
|
832
|
-
m = OpenStudio::Matrix.new(4, 4, 0)
|
833
|
-
m[0, 0] = 1
|
834
|
-
m[1, 1] = Math::cos(Math::atan(tilt))
|
835
|
-
m[1, 2] = -Math::sin(Math::atan(tilt))
|
836
|
-
m[2, 1] = Math::sin(Math::atan(tilt))
|
837
|
-
m[2, 2] = Math::cos(Math::atan(tilt))
|
838
|
-
m[3, 3] = 1
|
839
|
-
transformation = OpenStudio::Transformation.new(m)
|
840
|
-
vertices = transformation * vertices
|
841
|
-
|
842
|
-
# Rotate about the z axis
|
843
|
-
azimuth_rad = UnitConversions.convert(azimuth, 'deg', 'rad')
|
844
|
-
rad180 = UnitConversions.convert(180, 'deg', 'rad')
|
845
|
-
m = OpenStudio::Matrix.new(4, 4, 0)
|
846
|
-
m[0, 0] = Math::cos(rad180 - azimuth_rad)
|
847
|
-
m[1, 1] = Math::cos(rad180 - azimuth_rad)
|
848
|
-
m[0, 1] = -Math::sin(rad180 - azimuth_rad)
|
849
|
-
m[1, 0] = Math::sin(rad180 - azimuth_rad)
|
850
|
-
m[2, 2] = 1
|
851
|
-
m[3, 3] = 1
|
852
|
-
transformation = OpenStudio::Transformation.new(m)
|
853
|
-
vertices = transformation * vertices
|
854
|
-
|
855
|
-
# Shift up by z
|
856
|
-
new_vertices = OpenStudio::Point3dVector.new
|
857
|
-
vertices.each do |vertex|
|
858
|
-
new_vertices << OpenStudio::Point3d.new(vertex.x, vertex.y, vertex.z + z)
|
859
|
-
end
|
860
|
-
|
861
|
-
return new_vertices
|
862
|
-
end
|
863
|
-
|
864
|
-
def self.add_ceiling_polygon(x, y, z)
|
865
|
-
return OpenStudio::reverse(add_floor_polygon(x, y, z))
|
866
|
-
end
|
867
|
-
|
868
545
|
def self.add_num_occupants(model, runner, spaces)
|
869
546
|
# Occupants
|
870
547
|
num_occ = @hpxml.building_occupancy.number_of_residents
|
871
548
|
return if num_occ <= 0
|
872
549
|
|
873
|
-
Geometry.
|
550
|
+
Geometry.apply_occupants(model, num_occ, @cfa, spaces[HPXML::LocationLivingSpace], @schedules_file)
|
874
551
|
end
|
875
552
|
|
876
553
|
def self.get_default_azimuths()
|
554
|
+
def self.sanitize_azimuth(azimuth)
|
555
|
+
# Ensure 0 <= orientation < 360
|
556
|
+
while azimuth < 0
|
557
|
+
azimuth += 360
|
558
|
+
end
|
559
|
+
while azimuth >= 360
|
560
|
+
azimuth -= 360
|
561
|
+
end
|
562
|
+
return azimuth
|
563
|
+
end
|
564
|
+
|
877
565
|
# Returns a list of four azimuths (facing each direction). Determined based
|
878
566
|
# on the primary azimuth, as defined by the azimuth with the largest surface
|
879
567
|
# area, plus azimuths that are offset by 90/180/270 degrees. Used for
|
@@ -898,20 +586,9 @@ class OSModel
|
|
898
586
|
sanitize_azimuth(primary_azimuth + 270)].sort
|
899
587
|
end
|
900
588
|
|
901
|
-
def self.sanitize_azimuth(azimuth)
|
902
|
-
# Ensure 0 <= orientation < 360
|
903
|
-
while azimuth < 0
|
904
|
-
azimuth += 360
|
905
|
-
end
|
906
|
-
while azimuth >= 360
|
907
|
-
azimuth -= 360
|
908
|
-
end
|
909
|
-
return azimuth
|
910
|
-
end
|
911
|
-
|
912
589
|
def self.create_or_get_space(model, spaces, spacetype)
|
913
590
|
if spaces[spacetype].nil?
|
914
|
-
create_space_and_zone(model, spaces, spacetype)
|
591
|
+
Geometry.create_space_and_zone(model, spaces, spacetype)
|
915
592
|
end
|
916
593
|
return spaces[spacetype]
|
917
594
|
end
|
@@ -938,7 +615,8 @@ class OSModel
|
|
938
615
|
tilt = roof.pitch / 12.0
|
939
616
|
z_origin = @walls_top + 0.5 * Math.sin(Math.atan(tilt)) * width
|
940
617
|
|
941
|
-
|
618
|
+
vertices = Geometry.create_roof_vertices(length, width, z_origin, azimuth, tilt)
|
619
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
942
620
|
surfaces << surface
|
943
621
|
surface.additionalProperties.setFeature('Length', length)
|
944
622
|
surface.additionalProperties.setFeature('Width', width)
|
@@ -1040,7 +718,8 @@ class OSModel
|
|
1040
718
|
length = (wall.net_area / height) / azimuths.size
|
1041
719
|
z_origin = @foundation_top
|
1042
720
|
|
1043
|
-
|
721
|
+
vertices = Geometry.create_wall_vertices(length, height, z_origin, azimuth)
|
722
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1044
723
|
surfaces << surface
|
1045
724
|
surface.additionalProperties.setFeature('Length', length)
|
1046
725
|
surface.additionalProperties.setFeature('Azimuth', azimuth)
|
@@ -1108,7 +787,8 @@ class OSModel
|
|
1108
787
|
length = (rim_joist.area / height) / azimuths.size
|
1109
788
|
z_origin = @foundation_top
|
1110
789
|
|
1111
|
-
|
790
|
+
vertices = Geometry.create_wall_vertices(length, height, z_origin, azimuth)
|
791
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1112
792
|
surfaces << surface
|
1113
793
|
surface.additionalProperties.setFeature('Length', length)
|
1114
794
|
surface.additionalProperties.setFeature('Azimuth', azimuth)
|
@@ -1176,10 +856,12 @@ class OSModel
|
|
1176
856
|
end
|
1177
857
|
|
1178
858
|
if frame_floor.is_ceiling
|
1179
|
-
|
859
|
+
vertices = Geometry.create_ceiling_vertices(length, width, z_origin, @default_azimuths)
|
860
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1180
861
|
surface.additionalProperties.setFeature('SurfaceType', 'Ceiling')
|
1181
862
|
else
|
1182
|
-
|
863
|
+
vertices = Geometry.create_floor_vertices(length, width, z_origin, @default_azimuths)
|
864
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1183
865
|
surface.additionalProperties.setFeature('SurfaceType', 'Floor')
|
1184
866
|
end
|
1185
867
|
surface.additionalProperties.setFeature('Tilt', 0.0)
|
@@ -1371,7 +1053,8 @@ class OSModel
|
|
1371
1053
|
azimuth = foundation_wall.azimuth
|
1372
1054
|
end
|
1373
1055
|
|
1374
|
-
|
1056
|
+
vertices = Geometry.create_wall_vertices(length, ag_height, z_origin, azimuth)
|
1057
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1375
1058
|
surface.additionalProperties.setFeature('Length', length)
|
1376
1059
|
surface.additionalProperties.setFeature('Azimuth', azimuth)
|
1377
1060
|
surface.additionalProperties.setFeature('Tilt', 90.0)
|
@@ -1436,7 +1119,8 @@ class OSModel
|
|
1436
1119
|
subsurface_area = 0
|
1437
1120
|
end
|
1438
1121
|
|
1439
|
-
|
1122
|
+
vertices = Geometry.create_wall_vertices(length, height, z_origin, azimuth, subsurface_area: subsurface_area)
|
1123
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1440
1124
|
surface.additionalProperties.setFeature('Length', length)
|
1441
1125
|
surface.additionalProperties.setFeature('Azimuth', azimuth)
|
1442
1126
|
surface.additionalProperties.setFeature('Tilt', 90.0)
|
@@ -1505,7 +1189,8 @@ class OSModel
|
|
1505
1189
|
slab_length = slab_tot_perim / 4.0 + Math.sqrt(sqrt_term) / 4.0
|
1506
1190
|
slab_width = slab_tot_perim / 4.0 - Math.sqrt(sqrt_term) / 4.0
|
1507
1191
|
|
1508
|
-
|
1192
|
+
vertices = Geometry.create_floor_vertices(slab_length, slab_width, z_origin, @default_azimuths)
|
1193
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1509
1194
|
surface.setName(slab.id)
|
1510
1195
|
surface.setSurfaceType('Floor')
|
1511
1196
|
surface.setOutsideBoundaryCondition('Foundation')
|
@@ -1580,7 +1265,8 @@ class OSModel
|
|
1580
1265
|
z_origin = @foundation_top + 8.0 * (@ncfl_ag - 1)
|
1581
1266
|
|
1582
1267
|
# Add floor surface
|
1583
|
-
|
1268
|
+
vertices = Geometry.create_floor_vertices(floor_length, floor_width, z_origin, @default_azimuths)
|
1269
|
+
floor_surface = OpenStudio::Model::Surface.new(vertices, model)
|
1584
1270
|
|
1585
1271
|
floor_surface.setSunExposure('NoSun')
|
1586
1272
|
floor_surface.setWindExposure('NoWind')
|
@@ -1592,7 +1278,8 @@ class OSModel
|
|
1592
1278
|
floor_surface.additionalProperties.setFeature('Tilt', 0.0)
|
1593
1279
|
|
1594
1280
|
# Add ceiling surface
|
1595
|
-
|
1281
|
+
vertices = Geometry.create_ceiling_vertices(floor_length, floor_width, z_origin, @default_azimuths)
|
1282
|
+
ceiling_surface = OpenStudio::Model::Surface.new(vertices, model)
|
1596
1283
|
|
1597
1284
|
ceiling_surface.setSunExposure('NoSun')
|
1598
1285
|
ceiling_surface.setWindExposure('NoWind')
|
@@ -1637,27 +1324,6 @@ class OSModel
|
|
1637
1324
|
end
|
1638
1325
|
|
1639
1326
|
def self.add_neighbors(runner, model, length)
|
1640
|
-
z_origin = 0 # shading surface always starts at grade
|
1641
|
-
|
1642
|
-
shading_surfaces = []
|
1643
|
-
@hpxml.neighbor_buildings.each do |neighbor_building|
|
1644
|
-
height = neighbor_building.height.nil? ? @walls_top : neighbor_building.height
|
1645
|
-
|
1646
|
-
shading_surface = OpenStudio::Model::ShadingSurface.new(add_wall_polygon(length, height, z_origin, neighbor_building.azimuth), model)
|
1647
|
-
shading_surface.additionalProperties.setFeature('Azimuth', neighbor_building.azimuth)
|
1648
|
-
shading_surface.additionalProperties.setFeature('Distance', neighbor_building.distance)
|
1649
|
-
shading_surface.setName("Neighbor azimuth #{neighbor_building.azimuth} distance #{neighbor_building.distance}")
|
1650
|
-
|
1651
|
-
shading_surfaces << shading_surface
|
1652
|
-
end
|
1653
|
-
|
1654
|
-
unless shading_surfaces.empty?
|
1655
|
-
shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
|
1656
|
-
shading_surface_group.setName(Constants.ObjectNameNeighbors)
|
1657
|
-
shading_surfaces.each do |shading_surface|
|
1658
|
-
shading_surface.setShadingSurfaceGroup(shading_surface_group)
|
1659
|
-
end
|
1660
|
-
end
|
1661
1327
|
end
|
1662
1328
|
|
1663
1329
|
def self.add_shading_schedule(runner, model, weather)
|
@@ -1682,9 +1348,10 @@ class OSModel
|
|
1682
1348
|
|
1683
1349
|
shading_group = nil
|
1684
1350
|
shading_schedules = {}
|
1351
|
+
shading_ems = { sensors: {}, program: nil }
|
1685
1352
|
|
1686
1353
|
surfaces = []
|
1687
|
-
@hpxml.windows.
|
1354
|
+
@hpxml.windows.each_with_index do |window, i|
|
1688
1355
|
window_height = 4.0 # ft, default
|
1689
1356
|
|
1690
1357
|
overhang_depth = nil
|
@@ -1695,16 +1362,16 @@ class OSModel
|
|
1695
1362
|
window_height = overhang_distance_to_bottom - overhang_distance_to_top
|
1696
1363
|
end
|
1697
1364
|
|
1698
|
-
|
1365
|
+
window_length = window.area / window_height
|
1699
1366
|
z_origin = @foundation_top
|
1700
1367
|
|
1701
1368
|
if window.is_exterior
|
1702
1369
|
|
1703
1370
|
# Create parent surface slightly bigger than window
|
1704
|
-
|
1705
|
-
|
1371
|
+
vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth, add_buffer: true)
|
1372
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1706
1373
|
|
1707
|
-
surface.additionalProperties.setFeature('Length',
|
1374
|
+
surface.additionalProperties.setFeature('Length', window_length)
|
1708
1375
|
surface.additionalProperties.setFeature('Azimuth', window.azimuth)
|
1709
1376
|
surface.additionalProperties.setFeature('Tilt', 90.0)
|
1710
1377
|
surface.additionalProperties.setFeature('SurfaceType', 'Window')
|
@@ -1712,8 +1379,8 @@ class OSModel
|
|
1712
1379
|
surface.setSurfaceType('Wall')
|
1713
1380
|
set_surface_interior(model, spaces, surface, window.wall)
|
1714
1381
|
|
1715
|
-
|
1716
|
-
|
1382
|
+
vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth)
|
1383
|
+
sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
|
1717
1384
|
sub_surface.setName(window.id)
|
1718
1385
|
sub_surface.setSurface(surface)
|
1719
1386
|
sub_surface.setSubSurfaceType('FixedWindow')
|
@@ -1730,18 +1397,19 @@ class OSModel
|
|
1730
1397
|
Constructions.apply_window(runner, model, sub_surface, 'WindowConstruction', window.ufactor, window.shgc)
|
1731
1398
|
|
1732
1399
|
# Apply interior/exterior shading (as needed)
|
1733
|
-
|
1734
|
-
shading_group =
|
1400
|
+
shading_vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth)
|
1401
|
+
shading_group = Constructions.apply_window_skylight_shading(model, window, i, shading_vertices, surface, sub_surface, shading_group,
|
1402
|
+
shading_schedules, shading_ems, Constants.ObjectNameWindowShade, @cooling_season)
|
1735
1403
|
else
|
1736
1404
|
# Window is on an interior surface, which E+ does not allow. Model
|
1737
1405
|
# as a door instead so that we can get the appropriate conduction
|
1738
1406
|
# heat transfer; there is no solar gains anyway.
|
1739
1407
|
|
1740
1408
|
# Create parent surface slightly bigger than window
|
1741
|
-
|
1742
|
-
|
1409
|
+
vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth, add_buffer: true)
|
1410
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1743
1411
|
|
1744
|
-
surface.additionalProperties.setFeature('Length',
|
1412
|
+
surface.additionalProperties.setFeature('Length', window_length)
|
1745
1413
|
surface.additionalProperties.setFeature('Azimuth', window.azimuth)
|
1746
1414
|
surface.additionalProperties.setFeature('Tilt', 90.0)
|
1747
1415
|
surface.additionalProperties.setFeature('SurfaceType', 'Door')
|
@@ -1749,8 +1417,8 @@ class OSModel
|
|
1749
1417
|
surface.setSurfaceType('Wall')
|
1750
1418
|
set_surface_interior(model, spaces, surface, window.wall)
|
1751
1419
|
|
1752
|
-
|
1753
|
-
|
1420
|
+
vertices = Geometry.create_wall_vertices(window_length, window_height, z_origin, window.azimuth)
|
1421
|
+
sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
|
1754
1422
|
sub_surface.setName(window.id)
|
1755
1423
|
sub_surface.setSurface(surface)
|
1756
1424
|
sub_surface.setSubSurfaceType('Door')
|
@@ -1773,17 +1441,17 @@ class OSModel
|
|
1773
1441
|
|
1774
1442
|
shading_group = nil
|
1775
1443
|
shading_schedules = {}
|
1444
|
+
shading_ems = { sensors: {}, program: nil }
|
1776
1445
|
|
1777
|
-
@hpxml.skylights.
|
1446
|
+
@hpxml.skylights.each_with_index do |skylight, i|
|
1778
1447
|
tilt = skylight.roof.pitch / 12.0
|
1779
1448
|
width = Math::sqrt(skylight.area)
|
1780
1449
|
length = skylight.area / width
|
1781
1450
|
z_origin = @walls_top + 0.5 * Math.sin(Math.atan(tilt)) * width
|
1782
1451
|
|
1783
1452
|
# Create parent surface slightly bigger than skylight
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1453
|
+
vertices = Geometry.create_roof_vertices(length, width, z_origin, skylight.azimuth, tilt, add_buffer: true)
|
1454
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1787
1455
|
surface.additionalProperties.setFeature('Length', length)
|
1788
1456
|
surface.additionalProperties.setFeature('Width', width)
|
1789
1457
|
surface.additionalProperties.setFeature('Azimuth', skylight.azimuth)
|
@@ -1795,8 +1463,8 @@ class OSModel
|
|
1795
1463
|
surface.setOutsideBoundaryCondition('Outdoors') # cannot be adiabatic because subsurfaces won't be created
|
1796
1464
|
surfaces << surface
|
1797
1465
|
|
1798
|
-
|
1799
|
-
|
1466
|
+
vertices = Geometry.create_roof_vertices(length, width, z_origin, skylight.azimuth, tilt)
|
1467
|
+
sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
|
1800
1468
|
sub_surface.setName(skylight.id)
|
1801
1469
|
sub_surface.setSurface(surface)
|
1802
1470
|
sub_surface.setSubSurfaceType('Skylight')
|
@@ -1805,62 +1473,26 @@ class OSModel
|
|
1805
1473
|
Constructions.apply_skylight(runner, model, sub_surface, 'SkylightConstruction', skylight.ufactor, skylight.shgc)
|
1806
1474
|
|
1807
1475
|
# Apply interior/exterior shading (as needed)
|
1808
|
-
|
1809
|
-
shading_group =
|
1476
|
+
shading_vertices = Geometry.create_roof_vertices(length, width, z_origin, skylight.azimuth, tilt)
|
1477
|
+
shading_group = Constructions.apply_window_skylight_shading(model, skylight, i, shading_vertices, surface, sub_surface, shading_group,
|
1478
|
+
shading_schedules, shading_ems, Constants.ObjectNameSkylightShade, @cooling_season)
|
1810
1479
|
end
|
1811
1480
|
|
1812
1481
|
apply_adiabatic_construction(runner, model, surfaces, 'roof')
|
1813
1482
|
end
|
1814
1483
|
|
1815
|
-
def self.apply_shading(model, window_or_skylight, shading_polygon, parent_surface, sub_surface, shading_group, shading_schedules, name)
|
1816
|
-
sf_summer = window_or_skylight.interior_shading_factor_summer * window_or_skylight.exterior_shading_factor_summer
|
1817
|
-
sf_winter = window_or_skylight.interior_shading_factor_winter * window_or_skylight.exterior_shading_factor_winter
|
1818
|
-
if (sf_summer < 1.0) || (sf_winter < 1.0)
|
1819
|
-
# Apply shading
|
1820
|
-
# We use a ShadingSurface instead of a Shade so that we perfectly get the result we want.
|
1821
|
-
# The latter object is complex and it is essentially impossible to achieve the target reduction in transmitted
|
1822
|
-
# solar (due to, e.g., re-reflectance, absorptance, angle modifiers, effects on convection, etc.).
|
1823
|
-
|
1824
|
-
# Shading surface is used to reduce beam solar and sky diffuse solar
|
1825
|
-
shading_surface = OpenStudio::Model::ShadingSurface.new(shading_polygon, model)
|
1826
|
-
shading_surface.setName("#{window_or_skylight.id} shading surface")
|
1827
|
-
shading_surface.additionalProperties.setFeature('Azimuth', window_or_skylight.azimuth)
|
1828
|
-
shading_surface.additionalProperties.setFeature('ParentSurface', parent_surface.name.to_s)
|
1829
|
-
|
1830
|
-
# Create transmittance schedule for heating/cooling seasons
|
1831
|
-
trans_values = @cooling_season.map { |c| c == 1 ? sf_summer : sf_winter }
|
1832
|
-
if shading_schedules[trans_values].nil?
|
1833
|
-
trans_sch = MonthWeekdayWeekendSchedule.new(model, "trans schedule winter=#{sf_winter} summer=#{sf_summer}", Array.new(24, 1), Array.new(24, 1), trans_values, Constants.ScheduleTypeLimitsFraction, false)
|
1834
|
-
shading_schedules[trans_values] = trans_sch
|
1835
|
-
end
|
1836
|
-
shading_surface.setTransmittanceSchedule(shading_schedules[trans_values].schedule)
|
1837
|
-
|
1838
|
-
# Adjustment to default view factor is used to reduce ground diffuse solar
|
1839
|
-
avg_trans_value = trans_values.sum(0.0) / 12.0 # FUTURE: Create EnergyPlus actuator to adjust this
|
1840
|
-
default_vf_to_ground = ((1.0 - Math::cos(parent_surface.tilt)) / 2.0).round(2)
|
1841
|
-
sub_surface.setViewFactortoGround(default_vf_to_ground * avg_trans_value)
|
1842
|
-
|
1843
|
-
if shading_group.nil?
|
1844
|
-
shading_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
|
1845
|
-
shading_group.setName(name)
|
1846
|
-
end
|
1847
|
-
shading_surface.setShadingSurfaceGroup(shading_group)
|
1848
|
-
end
|
1849
|
-
return shading_group
|
1850
|
-
end
|
1851
|
-
|
1852
1484
|
def self.add_doors(runner, model, spaces)
|
1853
1485
|
surfaces = []
|
1854
1486
|
@hpxml.doors.each do |door|
|
1855
1487
|
door_height = 6.67 # ft
|
1856
|
-
|
1488
|
+
door_length = door.area / door_height
|
1857
1489
|
z_origin = @foundation_top
|
1858
1490
|
|
1859
1491
|
# Create parent surface slightly bigger than door
|
1860
|
-
|
1861
|
-
|
1492
|
+
vertices = Geometry.create_wall_vertices(door_length, door_height, z_origin, door.azimuth, add_buffer: true)
|
1493
|
+
surface = OpenStudio::Model::Surface.new(vertices, model)
|
1862
1494
|
|
1863
|
-
surface.additionalProperties.setFeature('Length',
|
1495
|
+
surface.additionalProperties.setFeature('Length', door_length)
|
1864
1496
|
surface.additionalProperties.setFeature('Azimuth', door.azimuth)
|
1865
1497
|
surface.additionalProperties.setFeature('Tilt', 90.0)
|
1866
1498
|
surface.additionalProperties.setFeature('SurfaceType', 'Door')
|
@@ -1868,8 +1500,8 @@ class OSModel
|
|
1868
1500
|
surface.setSurfaceType('Wall')
|
1869
1501
|
set_surface_interior(model, spaces, surface, door.wall)
|
1870
1502
|
|
1871
|
-
|
1872
|
-
|
1503
|
+
vertices = Geometry.create_wall_vertices(door_length, door_height, z_origin, door.azimuth)
|
1504
|
+
sub_surface = OpenStudio::Model::SubSurface.new(vertices, model)
|
1873
1505
|
sub_surface.setName(door.id)
|
1874
1506
|
sub_surface.setSurface(surface)
|
1875
1507
|
sub_surface.setSubSurfaceType('Door')
|
@@ -2458,31 +2090,71 @@ class OSModel
|
|
2458
2090
|
return map_str.to_s
|
2459
2091
|
end
|
2460
2092
|
|
2461
|
-
def self.
|
2093
|
+
def self.add_loads_output(runner, model, spaces, add_component_loads)
|
2462
2094
|
living_zone = spaces[HPXML::LocationLivingSpace].thermalZone.get
|
2463
2095
|
|
2464
|
-
|
2465
|
-
|
2096
|
+
liv_load_sensors, intgain_dehumidifier = add_total_loads_output(runner, model, living_zone)
|
2097
|
+
return unless add_component_loads
|
2466
2098
|
|
2467
|
-
|
2099
|
+
add_component_loads_output(runner, model, living_zone, liv_load_sensors, intgain_dehumidifier)
|
2100
|
+
end
|
2468
2101
|
|
2102
|
+
def self.add_total_loads_output(runner, model, living_zone)
|
2469
2103
|
liv_load_sensors = {}
|
2470
|
-
|
2471
2104
|
liv_load_sensors[:htg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Heating:EnergyTransfer:Zone:#{living_zone.name.to_s.upcase}")
|
2472
2105
|
liv_load_sensors[:htg].setName('htg_load_liv')
|
2473
|
-
|
2474
2106
|
liv_load_sensors[:clg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Cooling:EnergyTransfer:Zone:#{living_zone.name.to_s.upcase}")
|
2475
2107
|
liv_load_sensors[:clg].setName('clg_load_liv')
|
2476
2108
|
|
2477
2109
|
tot_load_sensors = {}
|
2478
|
-
|
2479
2110
|
tot_load_sensors[:htg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Heating:EnergyTransfer')
|
2480
2111
|
tot_load_sensors[:htg].setName('htg_load_tot')
|
2481
|
-
|
2482
2112
|
tot_load_sensors[:clg] = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Cooling:EnergyTransfer')
|
2483
2113
|
tot_load_sensors[:clg].setName('clg_load_tot')
|
2484
2114
|
|
2485
|
-
|
2115
|
+
# Need to adjusted E+ EnergyTransfer meters for dehumidifiers
|
2116
|
+
intgain_dehumidifier = nil
|
2117
|
+
model.getZoneHVACDehumidifierDXs.each do |e|
|
2118
|
+
next unless e.thermalZone.get.name.to_s == living_zone.name.to_s
|
2119
|
+
|
2120
|
+
{ 'Zone Dehumidifier Sensible Heating Energy' => 'ig_dehumidifier' }.each do |var, name|
|
2121
|
+
intgain_dehumidifier = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
2122
|
+
intgain_dehumidifier.setName(name)
|
2123
|
+
intgain_dehumidifier.setKeyName(e.name.to_s)
|
2124
|
+
end
|
2125
|
+
end
|
2126
|
+
|
2127
|
+
# EMS program
|
2128
|
+
program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
2129
|
+
program.setName(Constants.ObjectNameTotalLoadsProgram)
|
2130
|
+
program.addLine('Set loads_htg_tot = 0')
|
2131
|
+
program.addLine('Set loads_clg_tot = 0')
|
2132
|
+
program.addLine("If #{liv_load_sensors[:htg].name} > 0")
|
2133
|
+
s = " Set loads_htg_tot = #{tot_load_sensors[:htg].name} - #{tot_load_sensors[:clg].name}"
|
2134
|
+
if not intgain_dehumidifier.nil?
|
2135
|
+
s += " - #{intgain_dehumidifier.name}"
|
2136
|
+
end
|
2137
|
+
program.addLine(s)
|
2138
|
+
program.addLine("ElseIf #{liv_load_sensors[:clg].name} > 0")
|
2139
|
+
s = " Set loads_clg_tot = #{tot_load_sensors[:clg].name} - #{tot_load_sensors[:htg].name}"
|
2140
|
+
if not intgain_dehumidifier.nil?
|
2141
|
+
s += " + #{intgain_dehumidifier.name}"
|
2142
|
+
end
|
2143
|
+
program.addLine(s)
|
2144
|
+
program.addLine('EndIf')
|
2145
|
+
|
2146
|
+
# EMS calling manager
|
2147
|
+
program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
2148
|
+
program_calling_manager.setName("#{program.name} calling manager")
|
2149
|
+
program_calling_manager.setCallingPoint('EndOfZoneTimestepAfterZoneReporting')
|
2150
|
+
program_calling_manager.addProgram(program)
|
2151
|
+
|
2152
|
+
return liv_load_sensors, intgain_dehumidifier
|
2153
|
+
end
|
2154
|
+
|
2155
|
+
def self.add_component_loads_output(runner, model, living_zone, liv_load_sensors, intgain_dehumidifier)
|
2156
|
+
# Prevent certain objects (e.g., OtherEquipment) from being counted towards both, e.g., ducts and internal gains
|
2157
|
+
objects_already_processed = []
|
2486
2158
|
|
2487
2159
|
# EMS Sensors: Surfaces, SubSurfaces, InternalMass
|
2488
2160
|
|
@@ -2672,27 +2344,7 @@ class OSModel
|
|
2672
2344
|
ducts_mix_loss_sensor.setKeyName(living_zone.name.to_s)
|
2673
2345
|
end
|
2674
2346
|
|
2675
|
-
#
|
2676
|
-
model.getOtherEquipments.sort.each do |o|
|
2677
|
-
next if objects_already_processed.include? o
|
2678
|
-
|
2679
|
-
is_duct_load = o.additionalProperties.getFeatureAsBoolean(Constants.IsDuctLoadForReport)
|
2680
|
-
next unless is_duct_load.is_initialized
|
2681
|
-
|
2682
|
-
objects_already_processed << o
|
2683
|
-
next unless is_duct_load.get
|
2684
|
-
|
2685
|
-
ducts_sensors << []
|
2686
|
-
{ 'Other Equipment Convective Heating Energy' => 'ducts_conv',
|
2687
|
-
'Other Equipment Radiant Heating Energy' => 'ducts_rad' }.each do |var, name|
|
2688
|
-
ducts_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
2689
|
-
ducts_sensor.setName(name)
|
2690
|
-
ducts_sensor.setKeyName(o.name.to_s)
|
2691
|
-
ducts_sensors[-1] << ducts_sensor
|
2692
|
-
end
|
2693
|
-
end
|
2694
|
-
|
2695
|
-
# Supply duct losses
|
2347
|
+
# Duct losses
|
2696
2348
|
model.getOtherEquipments.sort.each do |o|
|
2697
2349
|
next if objects_already_processed.include? o
|
2698
2350
|
|
@@ -2730,20 +2382,6 @@ class OSModel
|
|
2730
2382
|
end
|
2731
2383
|
end
|
2732
2384
|
|
2733
|
-
model.getGasEquipments.sort.each do |o|
|
2734
|
-
next unless o.space.get.thermalZone.get.name.to_s == living_zone.name.to_s
|
2735
|
-
next if objects_already_processed.include? o
|
2736
|
-
|
2737
|
-
intgains_sensors << []
|
2738
|
-
{ 'Gas Equipment Convective Heating Energy' => 'ig_ge_conv',
|
2739
|
-
'Gas Equipment Radiant Heating Energy' => 'ig_ge_rad' }.each do |var, name|
|
2740
|
-
intgains_gas_equip_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
2741
|
-
intgains_gas_equip_sensor.setName(name)
|
2742
|
-
intgains_gas_equip_sensor.setKeyName(o.name.to_s)
|
2743
|
-
intgains_sensors[-1] << intgains_gas_equip_sensor
|
2744
|
-
end
|
2745
|
-
end
|
2746
|
-
|
2747
2385
|
model.getOtherEquipments.sort.each do |o|
|
2748
2386
|
next unless o.space.get.thermalZone.get.name.to_s == living_zone.name.to_s
|
2749
2387
|
next if objects_already_processed.include? o
|
@@ -2785,17 +2423,8 @@ class OSModel
|
|
2785
2423
|
end
|
2786
2424
|
end
|
2787
2425
|
|
2788
|
-
|
2789
|
-
|
2790
|
-
|
2791
|
-
intgains_sensors << []
|
2792
|
-
{ 'Zone Dehumidifier Sensible Heating Energy' => 'ig_dehumidifier' }.each do |var, name|
|
2793
|
-
intgain_dehumidifier = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
2794
|
-
intgain_dehumidifier.setName(name)
|
2795
|
-
intgain_dehumidifier.setKeyName(e.name.to_s)
|
2796
|
-
load_adj_sensors[:dehumidifier] = intgain_dehumidifier
|
2797
|
-
intgains_sensors[-1] << intgain_dehumidifier
|
2798
|
-
end
|
2426
|
+
if not intgain_dehumidifier.nil?
|
2427
|
+
intgains_sensors[-1] << intgain_dehumidifier
|
2799
2428
|
end
|
2800
2429
|
|
2801
2430
|
intgains_dhw_sensors = {}
|
@@ -2917,27 +2546,6 @@ class OSModel
|
|
2917
2546
|
end
|
2918
2547
|
end
|
2919
2548
|
|
2920
|
-
# EMS program: Total loads
|
2921
|
-
program.addLine('Set loads_htg_tot = 0')
|
2922
|
-
program.addLine('Set loads_clg_tot = 0')
|
2923
|
-
program.addLine("If #{liv_load_sensors[:htg].name} > 0")
|
2924
|
-
s = " Set loads_htg_tot = #{tot_load_sensors[:htg].name} - #{tot_load_sensors[:clg].name}"
|
2925
|
-
load_adj_sensors.each do |key, adj_sensor|
|
2926
|
-
if ['dehumidifier'].include? key.to_s
|
2927
|
-
s += " - #{adj_sensor.name}"
|
2928
|
-
end
|
2929
|
-
end
|
2930
|
-
program.addLine(s)
|
2931
|
-
program.addLine("ElseIf #{liv_load_sensors[:clg].name} > 0")
|
2932
|
-
s = " Set loads_clg_tot = #{tot_load_sensors[:clg].name} - #{tot_load_sensors[:htg].name}"
|
2933
|
-
load_adj_sensors.each do |key, adj_sensor|
|
2934
|
-
if ['dehumidifier'].include? key.to_s
|
2935
|
-
s += " + #{adj_sensor.name}"
|
2936
|
-
end
|
2937
|
-
end
|
2938
|
-
program.addLine(s)
|
2939
|
-
program.addLine('EndIf')
|
2940
|
-
|
2941
2549
|
# EMS calling manager
|
2942
2550
|
program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
2943
2551
|
program_calling_manager.setName("#{program.name} calling manager")
|