urbanopt-cli 0.4.1 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/CHANGELOG.md +59 -0
- data/CMakeLists.txt +17 -17
- data/FindOpenStudioSDK.cmake +12 -7
- data/Gemfile +8 -10
- data/LICENSE.md +11 -1
- data/README.md +1 -0
- data/Rakefile +16 -6
- data/example_files/Gemfile +25 -9
- data/example_files/example_project.json +35 -20
- data/example_files/example_project_combined.json +100 -5
- data/example_files/example_project_with_electric_network.json +2116 -0
- data/example_files/mappers/Baseline.rb +111 -51
- data/example_files/mappers/CreateBar.rb +19 -7
- data/example_files/mappers/EvCharging.rb +141 -0
- data/example_files/mappers/Floorspace.rb +29 -17
- data/example_files/mappers/HighEfficiency.rb +20 -8
- data/example_files/mappers/HighEfficiencyCreateBar.rb +19 -8
- data/example_files/mappers/HighEfficiencyFloorspace.rb +19 -8
- data/example_files/mappers/ThermalStorage.rb +16 -6
- data/example_files/mappers/base_workflow.osw +26 -1
- data/example_files/mappers/floorspace_workflow.osw +9 -0
- data/example_files/measures/BuildResidentialModel/measure.rb +249 -134
- data/example_files/reopt/base_assumptions.json +2 -2
- data/example_files/reopt/multiPV_assumptions.json +4 -3
- data/example_files/residential/clothes_dryer.tsv +7 -7
- data/example_files/residential/clothes_washer.tsv +2 -2
- data/example_files/residential/cooling_system.tsv +42 -22
- data/example_files/residential/dishwasher.tsv +1 -1
- data/example_files/residential/exhaust.tsv +3 -0
- data/example_files/residential/heat_pump.tsv +62 -40
- data/example_files/residential/water_heater.tsv +1 -1
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +14 -0
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +116 -0
- data/example_files/resources/hpxml-measures/.gitignore +1 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1088 -1329
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1819 -1383
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +450 -362
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +165 -112
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.json +388 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.md +43 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → base-appliances-dehumidifier-ief-whole-home.osw} +59 -85
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +61 -87
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +56 -82
- 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/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +70 -95
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +70 -95
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +59 -85
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +56 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +55 -81
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +56 -84
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +64 -90
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +69 -95
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +64 -92
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +57 -83
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +60 -86
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +60 -86
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +52 -78
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +52 -78
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +59 -85
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +71 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → extra-bldgtype-single-family-attached-double-exterior.osw} +62 -89
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-bldgtype-single-family-attached-single-exterior-front.osw} +60 -86
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → extra-bldgtype-single-family-attached-unconditioned-basement.osw} +64 -91
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +58 -84
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-portable-heater.osw → extra-second-heating-system-portable-heater-to-heating-system.osw} +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +59 -85
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +64 -89
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +64 -89
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +63 -88
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +54 -80
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-vehicle-plug-loads.osw} +58 -84
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +58 -84
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +58 -84
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +59 -85
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +58 -84
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +56 -82
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
- data/example_files/resources/hpxml-measures/Changelog.md +249 -0
- data/example_files/resources/hpxml-measures/Gemfile +2 -5
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +404 -1357
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +247 -171
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +11 -101
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +824 -301
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +18 -35
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +526 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +135 -207
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +14 -186
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +549 -93
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +12 -15
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +78 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +413 -15
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +48 -37
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1627 -1227
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +1192 -434
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1555 -1616
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1436 -1479
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +3 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +22 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +85 -19
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +22 -46
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +22 -21
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +51 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +24 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +106 -75
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +109 -34
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +22 -36
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1565 -768
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +151 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +101 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +9 -18
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +316 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +53 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +4 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +13 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +4 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +5 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +13 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +102 -62
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +189 -35
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
- data/example_files/resources/hpxml-measures/README.md +5 -5
- data/example_files/resources/hpxml-measures/Rakefile +2 -10
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +416 -299
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +364 -481
- data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
- data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +327 -320
- data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
- data/example_files/resources/hpxml-measures/docs/source/conf.py +11 -5
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +6 -6
- data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +7 -109
- data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2482 -0
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +282 -0
- data/example_files/resources/hpxml-measures/tasks.rb +2494 -1248
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +96 -21
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +8 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → base-appliances-dehumidifier-ief-whole-home.xml} +10 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +525 -524
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +564 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +513 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +633 -634
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +531 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +517 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-multifamily-buffer-space.xml → base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml} +34 -62
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +554 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-non-freezing-space.xml → base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml} +34 -62
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +34 -62
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +34 -62
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +425 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +427 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +479 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +474 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +408 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +406 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +409 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +457 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +407 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +408 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +456 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +460 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +466 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +43 -415
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +489 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +473 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +465 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +458 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +448 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +619 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +516 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +516 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +550 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +7 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +550 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +550 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +567 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +517 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +517 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +518 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +525 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +517 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +567 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +568 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +566 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +522 -525
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +575 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +497 -497
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +577 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +577 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +577 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +570 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +577 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +577 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +569 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +576 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +561 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +561 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +568 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +661 -664
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +636 -639
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +582 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +590 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +601 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +590 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2474 -2493
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2475 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +754 -755
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +504 -505
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +23 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +498 -497
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +644 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +724 -729
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +685 -688
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +516 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +609 -610
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +573 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +573 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +573 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +576 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +627 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml} +8 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml} +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml} +5 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +561 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +558 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml → base-hvac-autosize-boiler-elec-only.xml} +2 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml → base-hvac-autosize-boiler-gas-central-ac-1-speed.xml} +4 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml → base-hvac-autosize-boiler-gas-only.xml} +2 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml → base-hvac-autosize-central-ac-only-1-speed.xml} +547 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml → base-hvac-autosize-central-ac-only-2-speed.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml → base-hvac-autosize-central-ac-only-var-speed.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml → base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml} +570 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +559 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml} +557 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml → base-hvac-autosize-elec-resistance-only.xml} +2 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml → base-hvac-autosize-evap-cooler-furnace-gas.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml → base-hvac-autosize-floor-furnace-propane-only.xml} +5 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml → base-hvac-autosize-furnace-elec-only.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-2-speed.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-var-speed.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-autosize-furnace-gas-only.xml} +4 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml → base-hvac-autosize-furnace-gas-room-ac.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +555 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml} +4 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml → base-hvac-autosize-ground-to-air-heat-pump.xml} +4 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +547 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml} +551 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml} +556 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted.xml} +556 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-room-ac-only-autosize.xml → base-hvac-autosize-room-ac-only.xml} +2 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-stove-oil-only-autosize.xml → base-hvac-autosize-stove-oil-only.xml} +5 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml → base-hvac-autosize-wall-furnace-elec-only.xml} +5 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +518 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +518 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +519 -522
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +518 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +518 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +518 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +532 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +509 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +555 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +536 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +503 -505
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +6 -57
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +549 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +548 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +576 -579
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +7 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +8 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +13 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-only.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml} +10 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +13 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +569 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml} +9 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +570 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +547 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +508 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +554 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +515 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +21 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +486 -489
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +6 -57
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +570 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +508 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +508 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +573 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +585 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +488 -489
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +573 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +516 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +573 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +516 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +577 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +574 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +590 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +545 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +549 -541
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +576 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +576 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +574 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +574 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +796 -795
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +574 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +572 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +478 -495
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +579 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +758 -833
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +749 -820
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +550 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-calendar-year.xml → base-misc-shielding-of-home.xml} +7 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +728 -725
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +6 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +569 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +566 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +532 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +575 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +7 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +546 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +543 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +546 -545
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +448 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +613 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +626 -629
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +610 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +550 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +472 -473
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +488 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +760 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +761 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +460 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +579 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +559 -560
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +21 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +21 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +528 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +546 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +546 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +21 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +569 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +570 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +407 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +569 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +466 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +644 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{appliances-location-unconditioned-space.xml → invalid-foundation-wall-properties.xml} +39 -29
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +591 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +591 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +465 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{slab-zero-exposed-perimeter.xml → invalid-number-of-conditioned-floors.xml} +7 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +550 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +517 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +564 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +473 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +582 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +21 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +560 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +575 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +432 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +590 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +546 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +568 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +568 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +526 -529
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +571 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +531 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +565 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +531 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +575 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +465 -827
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +465 -827
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +590 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +577 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +562 -563
- data/example_files/resources/hpxml-measures/workflow/template.osw +5 -1
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -17
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -19
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -19
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -19
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -19
- 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 +522 -527
- data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
- data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
- data/example_files/validation_schema.yaml +149 -0
- data/example_files/visualization/input_visualization_feature.html +213 -56
- data/example_files/visualization/input_visualization_scenario.html +92 -30
- data/lib/uo_cli.rb +406 -128
- data/lib/uo_cli/version.rb +17 -7
- data/requirements.txt +2 -0
- data/scripts/setup-env-gitbash.sh +5 -5
- data/scripts/setup-env-unix.sh +4 -4
- data/scripts/setup-env.bat +14 -11
- data/scripts/setup-env.ps1 +13 -10
- data/uo_cli.gemspec +10 -8
- metadata +390 -130
- data/developer_nrel_key.rb +0 -31
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
- data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -61
- data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
- data/example_files/resources/hpxml-measures/docs/source/simulation_output_report.rst +0 -252
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +0 -501
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -838
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-interior-shading.xml +0 -564
@@ -21,6 +21,39 @@ class Geometry
|
|
21
21
|
return azimuth
|
22
22
|
end
|
23
23
|
|
24
|
+
def self.add_rim_joist(model, polygon, space, rim_joist_height, z)
|
25
|
+
if rim_joist_height > 0
|
26
|
+
# make polygons
|
27
|
+
p = OpenStudio::Point3dVector.new
|
28
|
+
polygon.each do |point|
|
29
|
+
p << OpenStudio::Point3d.new(point.x, point.y, z)
|
30
|
+
end
|
31
|
+
rim_joist_polygon = p
|
32
|
+
|
33
|
+
# make space
|
34
|
+
rim_joist_space = OpenStudio::Model::Space::fromFloorPrint(rim_joist_polygon, rim_joist_height, model)
|
35
|
+
rim_joist_space = rim_joist_space.get
|
36
|
+
|
37
|
+
space.surfaces.each do |surface|
|
38
|
+
next if surface.surfaceType.downcase != 'roofceiling'
|
39
|
+
|
40
|
+
surface.remove
|
41
|
+
end
|
42
|
+
|
43
|
+
rim_joist_space.surfaces.each do |surface|
|
44
|
+
next if surface.surfaceType.downcase != 'floor'
|
45
|
+
|
46
|
+
surface.remove
|
47
|
+
end
|
48
|
+
|
49
|
+
rim_joist_space.surfaces.each do |surface|
|
50
|
+
surface.setSpace(space)
|
51
|
+
end
|
52
|
+
|
53
|
+
rim_joist_space.remove
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
24
57
|
def self.create_single_family_detached(runner:,
|
25
58
|
model:,
|
26
59
|
geometry_cfa:,
|
@@ -33,10 +66,10 @@ class Geometry
|
|
33
66
|
geometry_garage_position:,
|
34
67
|
geometry_foundation_type:,
|
35
68
|
geometry_foundation_height:,
|
69
|
+
geometry_rim_joist_height:,
|
36
70
|
geometry_attic_type:,
|
37
71
|
geometry_roof_type:,
|
38
72
|
geometry_roof_pitch:,
|
39
|
-
geometry_roof_structure:,
|
40
73
|
**remainder)
|
41
74
|
cfa = geometry_cfa
|
42
75
|
wall_height = geometry_wall_height
|
@@ -48,10 +81,10 @@ class Geometry
|
|
48
81
|
garage_position = geometry_garage_position
|
49
82
|
foundation_type = geometry_foundation_type
|
50
83
|
foundation_height = geometry_foundation_height
|
84
|
+
rim_joist_height = geometry_rim_joist_height
|
51
85
|
attic_type = geometry_attic_type
|
52
86
|
roof_type = geometry_roof_type
|
53
87
|
roof_pitch = geometry_roof_pitch
|
54
|
-
roof_structure = geometry_roof_structure
|
55
88
|
|
56
89
|
# error checking
|
57
90
|
if model.getSpaces.size > 0
|
@@ -81,6 +114,7 @@ class Geometry
|
|
81
114
|
garage_width = UnitConversions.convert(garage_width, 'ft', 'm')
|
82
115
|
garage_depth = UnitConversions.convert(garage_depth, 'ft', 'm')
|
83
116
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
117
|
+
rim_joist_height = UnitConversions.convert(rim_joist_height, 'ft', 'm')
|
84
118
|
|
85
119
|
garage_area = garage_width * garage_depth
|
86
120
|
has_garage = false
|
@@ -128,12 +162,9 @@ class Geometry
|
|
128
162
|
return false
|
129
163
|
end
|
130
164
|
|
131
|
-
# starting spaces
|
132
|
-
runner.registerInitialCondition("The building started with #{model.getSpaces.size} spaces.")
|
133
|
-
|
134
165
|
# create living zone
|
135
166
|
living_zone = OpenStudio::Model::ThermalZone.new(model)
|
136
|
-
living_zone.setName(
|
167
|
+
living_zone.setName(HPXML::LocationLivingSpace)
|
137
168
|
|
138
169
|
foundation_offset = 0.0
|
139
170
|
if foundation_type == HPXML::FoundationTypeAmbient
|
@@ -144,13 +175,14 @@ class Geometry
|
|
144
175
|
foundation_polygon_with_wrong_zs = nil
|
145
176
|
for floor in (0..num_floors - 1)
|
146
177
|
|
147
|
-
z = wall_height * floor + foundation_offset
|
178
|
+
z = wall_height * floor + foundation_offset + rim_joist_height
|
148
179
|
|
149
|
-
if has_garage && (z == foundation_offset) # first floor and has garage
|
180
|
+
if has_garage && (z == foundation_offset + rim_joist_height) # first floor and has garage
|
150
181
|
|
151
182
|
# create garage zone
|
183
|
+
garage_space_name = HPXML::LocationGarage
|
152
184
|
garage_zone = OpenStudio::Model::ThermalZone.new(model)
|
153
|
-
garage_zone.setName(
|
185
|
+
garage_zone.setName(garage_space_name)
|
154
186
|
|
155
187
|
# make points and polygons
|
156
188
|
if garage_position == 'Right'
|
@@ -170,12 +202,10 @@ class Geometry
|
|
170
202
|
# make space
|
171
203
|
garage_space = OpenStudio::Model::Space::fromFloorPrint(garage_polygon, wall_height, model)
|
172
204
|
garage_space = garage_space.get
|
173
|
-
garage_space_name = 'garage space'
|
174
205
|
garage_space.setName(garage_space_name)
|
175
206
|
garage_space_type = OpenStudio::Model::SpaceType.new(model)
|
176
|
-
garage_space_type.setStandardsSpaceType(
|
207
|
+
garage_space_type.setStandardsSpaceType(garage_space_name)
|
177
208
|
garage_space.setSpaceType(garage_space_type)
|
178
|
-
runner.registerInfo("Set #{garage_space_name}.")
|
179
209
|
|
180
210
|
# set this to the garage zone
|
181
211
|
garage_space.setThermalZone(garage_zone)
|
@@ -214,14 +244,13 @@ class Geometry
|
|
214
244
|
end
|
215
245
|
end
|
216
246
|
foundation_polygon_with_wrong_zs = living_polygon
|
217
|
-
|
218
247
|
else # first floor without garage or above first floor
|
219
248
|
|
220
249
|
if has_garage
|
221
|
-
garage_se_point = OpenStudio::Point3d.new(garage_se_point.x, garage_se_point.y,
|
222
|
-
garage_sw_point = OpenStudio::Point3d.new(garage_sw_point.x, garage_sw_point.y,
|
223
|
-
garage_nw_point = OpenStudio::Point3d.new(garage_nw_point.x, garage_nw_point.y,
|
224
|
-
garage_ne_point = OpenStudio::Point3d.new(garage_ne_point.x, garage_ne_point.y,
|
250
|
+
garage_se_point = OpenStudio::Point3d.new(garage_se_point.x, garage_se_point.y, z)
|
251
|
+
garage_sw_point = OpenStudio::Point3d.new(garage_sw_point.x, garage_sw_point.y, z)
|
252
|
+
garage_nw_point = OpenStudio::Point3d.new(garage_nw_point.x, garage_nw_point.y, z)
|
253
|
+
garage_ne_point = OpenStudio::Point3d.new(garage_ne_point.x, garage_ne_point.y, z)
|
225
254
|
if garage_position == 'Right'
|
226
255
|
sw_point = OpenStudio::Point3d.new(0, 0, z)
|
227
256
|
nw_point = OpenStudio::Point3d.new(0, width, z)
|
@@ -253,7 +282,7 @@ class Geometry
|
|
253
282
|
ne_point = OpenStudio::Point3d.new(length, width, z)
|
254
283
|
se_point = OpenStudio::Point3d.new(length, 0, z)
|
255
284
|
living_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
256
|
-
if z == foundation_offset
|
285
|
+
if z == foundation_offset + rim_joist_height
|
257
286
|
foundation_polygon_with_wrong_zs = living_polygon
|
258
287
|
end
|
259
288
|
|
@@ -265,7 +294,7 @@ class Geometry
|
|
265
294
|
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon, wall_height, model)
|
266
295
|
living_space = living_space.get
|
267
296
|
if floor > 0
|
268
|
-
living_space_name = "
|
297
|
+
living_space_name = "#{HPXML::LocationLivingSpace}|story #{floor + 1}"
|
269
298
|
else
|
270
299
|
living_space_name = HPXML::LocationLivingSpace
|
271
300
|
end
|
@@ -273,7 +302,6 @@ class Geometry
|
|
273
302
|
living_space_type = OpenStudio::Model::SpaceType.new(model)
|
274
303
|
living_space_type.setStandardsSpaceType(HPXML::LocationLivingSpace)
|
275
304
|
living_space.setSpaceType(living_space_type)
|
276
|
-
runner.registerInfo("Set #{living_space_name}.")
|
277
305
|
|
278
306
|
# set these to the living zone
|
279
307
|
living_space.setThermalZone(living_zone)
|
@@ -283,7 +311,6 @@ class Geometry
|
|
283
311
|
m[1, 3] = 0
|
284
312
|
m[2, 3] = z
|
285
313
|
living_space.changeTransformation(OpenStudio::Transformation.new(m))
|
286
|
-
|
287
314
|
end
|
288
315
|
|
289
316
|
# Attic
|
@@ -372,23 +399,21 @@ class Geometry
|
|
372
399
|
if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
|
373
400
|
# create attic zone
|
374
401
|
attic_zone = OpenStudio::Model::ThermalZone.new(model)
|
375
|
-
attic_zone.setName("#{attic_type} zone")
|
376
402
|
attic_space.setThermalZone(attic_zone)
|
377
403
|
if attic_type == HPXML::AtticTypeVented
|
378
|
-
|
379
|
-
|
380
|
-
|
404
|
+
attic_space_name = HPXML::LocationAtticVented
|
405
|
+
elsif attic_type == HPXML::AtticTypeUnvented
|
406
|
+
attic_space_name = HPXML::LocationAtticUnvented
|
381
407
|
end
|
408
|
+
attic_zone.setName(attic_space_name)
|
382
409
|
elsif attic_type == HPXML::AtticTypeConditioned
|
383
410
|
attic_space.setThermalZone(living_zone)
|
384
|
-
|
411
|
+
attic_space_name = HPXML::LocationLivingSpace
|
385
412
|
end
|
386
|
-
attic_space_name = "#{attic_type} space"
|
387
413
|
attic_space.setName(attic_space_name)
|
388
414
|
attic_space_type = OpenStudio::Model::SpaceType.new(model)
|
389
|
-
attic_space_type.setStandardsSpaceType(
|
415
|
+
attic_space_type.setStandardsSpaceType(attic_space_name)
|
390
416
|
attic_space.setSpaceType(attic_space_type)
|
391
|
-
runner.registerInfo("Set #{attic_space_name}.")
|
392
417
|
|
393
418
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
394
419
|
m[0, 3] = 0
|
@@ -405,8 +430,6 @@ class Geometry
|
|
405
430
|
|
406
431
|
# create foundation zone
|
407
432
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
408
|
-
foundation_zone_name = "#{foundation_type} zone"
|
409
|
-
foundation_zone.setName(foundation_zone_name)
|
410
433
|
|
411
434
|
# make polygons
|
412
435
|
p = OpenStudio::Point3dVector.new
|
@@ -419,22 +442,21 @@ class Geometry
|
|
419
442
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_polygon, foundation_height, model)
|
420
443
|
foundation_space = foundation_space.get
|
421
444
|
if foundation_type == HPXML::FoundationTypeCrawlspaceVented
|
422
|
-
|
445
|
+
foundation_space_name = HPXML::LocationCrawlspaceVented
|
423
446
|
elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
424
|
-
|
447
|
+
foundation_space_name = HPXML::LocationCrawlspaceUnvented
|
425
448
|
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
426
|
-
|
449
|
+
foundation_space_name = HPXML::LocationBasementUnconditioned
|
427
450
|
elsif foundation_type == HPXML::FoundationTypeBasementConditioned
|
428
|
-
|
451
|
+
foundation_space_name = HPXML::LocationBasementConditioned
|
429
452
|
elsif foundation_type == HPXML::FoundationTypeAmbient
|
430
|
-
|
453
|
+
foundation_space_name = HPXML::LocationOutside
|
431
454
|
end
|
432
|
-
foundation_space_name
|
455
|
+
foundation_zone.setName(foundation_space_name)
|
433
456
|
foundation_space.setName(foundation_space_name)
|
434
457
|
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
435
|
-
foundation_space_type.setStandardsSpaceType(
|
458
|
+
foundation_space_type.setStandardsSpaceType(foundation_space_name)
|
436
459
|
foundation_space.setSpaceType(foundation_space_type)
|
437
|
-
runner.registerInfo("Set #{foundation_space_name}.")
|
438
460
|
|
439
461
|
# set these to the foundation zone
|
440
462
|
foundation_space.setThermalZone(foundation_zone)
|
@@ -458,6 +480,8 @@ class Geometry
|
|
458
480
|
m[2, 3] = z
|
459
481
|
foundation_space.changeTransformation(OpenStudio::Transformation.new(m))
|
460
482
|
|
483
|
+
# Rim Joist
|
484
|
+
add_rim_joist(model, foundation_polygon_with_wrong_zs, foundation_space, rim_joist_height, foundation_height)
|
461
485
|
end
|
462
486
|
|
463
487
|
# put all of the spaces in the model into a vector
|
@@ -516,10 +540,10 @@ class Geometry
|
|
516
540
|
se_point = OpenStudio::Point3d.new(se_point.x, se_point.y, se_point.z - living_space.zOrigin)
|
517
541
|
end
|
518
542
|
else
|
519
|
-
nw_point = OpenStudio::Point3d.new(nw_point.x, nw_point.y, num_floors * nw_point.z)
|
520
|
-
ne_point = OpenStudio::Point3d.new(ne_point.x, ne_point.y, num_floors * ne_point.z)
|
521
|
-
sw_point = OpenStudio::Point3d.new(sw_point.x, sw_point.y, num_floors * sw_point.z)
|
522
|
-
se_point = OpenStudio::Point3d.new(se_point.x, se_point.y, num_floors * se_point.z)
|
543
|
+
nw_point = OpenStudio::Point3d.new(nw_point.x, nw_point.y, num_floors * nw_point.z + rim_joist_height)
|
544
|
+
ne_point = OpenStudio::Point3d.new(ne_point.x, ne_point.y, num_floors * ne_point.z + rim_joist_height)
|
545
|
+
sw_point = OpenStudio::Point3d.new(sw_point.x, sw_point.y, num_floors * sw_point.z + rim_joist_height)
|
546
|
+
se_point = OpenStudio::Point3d.new(se_point.x, se_point.y, num_floors * se_point.z + rim_joist_height)
|
523
547
|
end
|
524
548
|
|
525
549
|
garage_attic_height = (ne_point.x - nw_point.x) / 2 * roof_pitch
|
@@ -540,8 +564,8 @@ class Geometry
|
|
540
564
|
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, garage_attic_height + wall_height)
|
541
565
|
end
|
542
566
|
else
|
543
|
-
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, num_floors * wall_height + garage_attic_height)
|
544
|
-
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, num_floors * wall_height + garage_attic_height)
|
567
|
+
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, num_floors * wall_height + garage_attic_height + rim_joist_height)
|
568
|
+
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, num_floors * wall_height + garage_attic_height + rim_joist_height)
|
545
569
|
end
|
546
570
|
|
547
571
|
polygon_w_roof = make_polygon(nw_point, sw_point, roof_s_point, roof_n_point)
|
@@ -562,31 +586,29 @@ class Geometry
|
|
562
586
|
wall_s.setOutsideBoundaryCondition('Outdoors')
|
563
587
|
|
564
588
|
garage_attic_space = OpenStudio::Model::Space.new(model)
|
565
|
-
garage_attic_space_name = 'garage attic space'
|
566
|
-
garage_attic_space.setName(garage_attic_space_name)
|
567
589
|
deck_w.setSpace(garage_attic_space)
|
568
590
|
deck_e.setSpace(garage_attic_space)
|
569
591
|
wall_n.setSpace(garage_attic_space)
|
570
592
|
wall_s.setSpace(garage_attic_space)
|
571
593
|
|
572
594
|
if attic_type == HPXML::AtticTypeConditioned
|
573
|
-
|
595
|
+
garage_attic_space_name = attic_space_name
|
574
596
|
garage_attic_space.setThermalZone(living_zone)
|
575
597
|
else
|
576
598
|
if num_floors > 1
|
577
|
-
|
599
|
+
garage_attic_space_name = attic_space_name
|
578
600
|
garage_attic_space.setThermalZone(attic_zone)
|
579
601
|
else
|
580
|
-
|
602
|
+
garage_attic_space_name = garage_space_name
|
581
603
|
garage_attic_space.setThermalZone(garage_zone)
|
582
604
|
end
|
583
605
|
end
|
584
606
|
|
585
607
|
surface.createAdjacentSurface(garage_attic_space) # garage attic floor
|
608
|
+
garage_attic_space.setName(garage_attic_space_name)
|
586
609
|
garage_attic_space_type = OpenStudio::Model::SpaceType.new(model)
|
587
|
-
garage_attic_space_type.setStandardsSpaceType(
|
610
|
+
garage_attic_space_type.setStandardsSpaceType(garage_attic_space_name)
|
588
611
|
garage_attic_space.setSpaceType(garage_attic_space_type)
|
589
|
-
runner.registerInfo("Set #{garage_attic_space_name}.")
|
590
612
|
|
591
613
|
# put all of the spaces in the model into a vector
|
592
614
|
spaces = OpenStudio::Model::SpaceVector.new
|
@@ -622,15 +644,45 @@ class Geometry
|
|
622
644
|
|
623
645
|
garage_attic_space.remove
|
624
646
|
|
647
|
+
# remove other unused surfaces
|
648
|
+
# TODO: remove this once geometry methods are fixed in openstudio 3.x
|
649
|
+
attic_space.surfaces.each do |surface1|
|
650
|
+
next if surface1.surfaceType != 'RoofCeiling'
|
651
|
+
|
652
|
+
attic_space.surfaces.each do |surface2|
|
653
|
+
next if surface2.surfaceType != 'RoofCeiling'
|
654
|
+
next if surface1 == surface2
|
655
|
+
|
656
|
+
if has_same_vertices(surface1, surface2)
|
657
|
+
surface1.remove
|
658
|
+
surface2.remove
|
659
|
+
end
|
660
|
+
end
|
661
|
+
end
|
662
|
+
|
625
663
|
break
|
626
664
|
end
|
627
665
|
end
|
628
666
|
|
667
|
+
garage_spaces = get_garage_spaces(model.getSpaces)
|
668
|
+
|
629
669
|
# set foundation outside boundary condition to Kiva "foundation"
|
630
670
|
model.getSurfaces.each do |surface|
|
631
|
-
|
671
|
+
if surface.outsideBoundaryCondition.downcase == 'ground'
|
672
|
+
surface.setOutsideBoundaryCondition('Foundation')
|
673
|
+
elsif (UnitConversions.convert(rim_joist_height, 'm', 'ft') - get_surface_height(surface)).abs < 0.001
|
674
|
+
next if surface.surfaceType.downcase != 'wall'
|
632
675
|
|
633
|
-
|
676
|
+
garage_spaces.each do |garage_space|
|
677
|
+
garage_space.surfaces.each do |garage_surface|
|
678
|
+
next if garage_surface.surfaceType.downcase != 'floor'
|
679
|
+
|
680
|
+
if get_walls_connected_to_floor([surface], garage_surface, false).include? surface
|
681
|
+
surface.setOutsideBoundaryCondition('Foundation')
|
682
|
+
end
|
683
|
+
end
|
684
|
+
end
|
685
|
+
end
|
634
686
|
end
|
635
687
|
|
636
688
|
# set foundation walls adjacent to garage to adiabatic
|
@@ -641,7 +693,7 @@ class Geometry
|
|
641
693
|
|
642
694
|
foundation_walls << surface
|
643
695
|
end
|
644
|
-
|
696
|
+
|
645
697
|
garage_spaces.each do |garage_space|
|
646
698
|
garage_space.surfaces.each do |surface|
|
647
699
|
next if surface.surfaceType.downcase != 'floor'
|
@@ -656,6 +708,15 @@ class Geometry
|
|
656
708
|
return true
|
657
709
|
end
|
658
710
|
|
711
|
+
def self.has_same_vertices(surface1, surface2)
|
712
|
+
if getSurfaceXValues([surface1]) == getSurfaceXValues([surface2]) &&
|
713
|
+
getSurfaceYValues([surface1]) == getSurfaceYValues([surface2]) &&
|
714
|
+
getSurfaceZValues([surface1]) == getSurfaceZValues([surface2])
|
715
|
+
return true
|
716
|
+
end
|
717
|
+
return false
|
718
|
+
end
|
719
|
+
|
659
720
|
def self.make_one_space_from_multiple_spaces(model, spaces)
|
660
721
|
new_space = OpenStudio::Model::Space.new(model)
|
661
722
|
spaces.each do |space|
|
@@ -886,39 +947,51 @@ class Geometry
|
|
886
947
|
end
|
887
948
|
end
|
888
949
|
|
950
|
+
# Initialize
|
889
951
|
surface_window_area = {}
|
890
952
|
target_facade_areas = {}
|
891
953
|
facades.each do |facade|
|
892
|
-
|
954
|
+
target_facade_areas[facade] = 0.0
|
893
955
|
wall_surfaces[facade].each do |surface|
|
894
956
|
surface_window_area[surface] = 0
|
895
957
|
end
|
958
|
+
end
|
896
959
|
|
960
|
+
facades.each do |facade|
|
897
961
|
# Calculate target window area for this facade
|
898
|
-
target_facade_areas[facade] = 0.0
|
899
962
|
if wwrs[facade] > 0
|
900
963
|
wall_area = 0
|
901
964
|
wall_surfaces[facade].each do |surface|
|
902
965
|
wall_area += UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2')
|
903
966
|
end
|
904
|
-
target_facade_areas[facade]
|
967
|
+
target_facade_areas[facade] += wall_area * wwrs[facade]
|
905
968
|
else
|
906
|
-
target_facade_areas[facade]
|
969
|
+
target_facade_areas[facade] += window_areas[facade]
|
907
970
|
end
|
908
971
|
|
909
972
|
next if target_facade_areas[facade] == 0
|
910
973
|
|
911
974
|
if target_facade_areas[facade] < min_single_window_area
|
912
975
|
# If the total window area for the facade is less than the minimum window area,
|
913
|
-
# set all of the window area to the surface with the greatest available wall area
|
914
|
-
surface =
|
915
|
-
|
976
|
+
# set all of the window area to the surface with the greatest available wall area on any facade
|
977
|
+
surface = surface_avail_area.max_by { |k, v| v }[0]
|
978
|
+
next if get_facade_for_surface(surface) == facade
|
979
|
+
next if surface_avail_area[surface] == facade_avail_area[facade]
|
980
|
+
|
981
|
+
surface_window_area[surface] += target_facade_areas[facade]
|
982
|
+
|
983
|
+
new_facade = get_facade_for_surface(surface)
|
984
|
+
area_moved = target_facade_areas[facade]
|
985
|
+
target_facade_areas[facade] = 0
|
986
|
+
target_facade_areas[new_facade] = surface_window_area[surface]
|
987
|
+
|
988
|
+
runner.registerWarning("The #{facade} facade window area (#{area_moved.round(2)} ft2) is less than the minimum window area allowed (#{min_single_window_area.round(2)} ft2), and has been added to the #{new_facade} facade.")
|
916
989
|
next
|
917
990
|
end
|
918
991
|
|
919
992
|
# Initial guess for wall of this facade
|
920
993
|
wall_surfaces[facade].each do |surface|
|
921
|
-
surface_window_area[surface]
|
994
|
+
surface_window_area[surface] += surface_avail_area[surface] / facade_avail_area[facade] * target_facade_areas[facade]
|
922
995
|
end
|
923
996
|
|
924
997
|
# If window area for a surface is less than the minimum window area,
|
@@ -954,6 +1027,7 @@ class Geometry
|
|
954
1027
|
sum_window_area += surface_window_area[surface]
|
955
1028
|
end
|
956
1029
|
next if sum_window_area == 0
|
1030
|
+
next if target_facade_areas[facade] < sum_window_area # for cases where window area was added from different facade
|
957
1031
|
|
958
1032
|
wall_surfaces[facade].each do |surface|
|
959
1033
|
surface_window_area[surface] += surface_window_area[surface] / sum_window_area * (target_facade_areas[facade] - sum_window_area)
|
@@ -1041,8 +1115,6 @@ class Geometry
|
|
1041
1115
|
sub_surface.setName("#{surface.name} - Skylight")
|
1042
1116
|
sub_surface.setSurface(surface)
|
1043
1117
|
|
1044
|
-
runner.registerInfo("Added a skylight, totaling #{skylight_area.round(1)} ft^2, to #{surface.name}.")
|
1045
|
-
|
1046
1118
|
if not constructions[facade].nil?
|
1047
1119
|
sub_surface.setConstruction(constructions[facade])
|
1048
1120
|
end
|
@@ -1129,7 +1201,7 @@ class Geometry
|
|
1129
1201
|
add_window_to_wall(surface, window_width, window_height, group_cx, group_cy, win_num, facade, constructions, model, runner)
|
1130
1202
|
end
|
1131
1203
|
end
|
1132
|
-
|
1204
|
+
|
1133
1205
|
return true
|
1134
1206
|
end
|
1135
1207
|
|
@@ -1310,7 +1382,7 @@ class Geometry
|
|
1310
1382
|
next unless surface.outsideBoundaryCondition.downcase == 'adiabatic'
|
1311
1383
|
|
1312
1384
|
model.getSpaces.each do |potential_corridor_space|
|
1313
|
-
next unless potential_corridor_space.spaceType.get.standardsSpaceType.get ==
|
1385
|
+
next unless potential_corridor_space.spaceType.get.standardsSpaceType.get == HPXML::LocationOtherHousingUnit
|
1314
1386
|
|
1315
1387
|
potential_corridor_space.surfaces.each do |potential_corridor_surface|
|
1316
1388
|
next unless surface.reverseEqualVertices(potential_corridor_surface)
|
@@ -1420,8 +1492,6 @@ class Geometry
|
|
1420
1492
|
|
1421
1493
|
if door_sub_surface.nil? && unit_has_door
|
1422
1494
|
runner.registerWarning('Could not find appropriate surface for the door. No door was added.')
|
1423
|
-
elsif not door_sub_surface.nil?
|
1424
|
-
runner.registerInfo("Added #{door_area.round(1)} ft^2 door.")
|
1425
1495
|
end
|
1426
1496
|
|
1427
1497
|
return true
|
@@ -1449,6 +1519,7 @@ class Geometry
|
|
1449
1519
|
geometry_corridor_position:,
|
1450
1520
|
geometry_foundation_type:,
|
1451
1521
|
geometry_foundation_height:,
|
1522
|
+
geometry_rim_joist_height:,
|
1452
1523
|
geometry_attic_type:,
|
1453
1524
|
geometry_roof_type:,
|
1454
1525
|
geometry_roof_pitch:,
|
@@ -1463,6 +1534,7 @@ class Geometry
|
|
1463
1534
|
corridor_position = geometry_corridor_position
|
1464
1535
|
foundation_type = geometry_foundation_type
|
1465
1536
|
foundation_height = geometry_foundation_height
|
1537
|
+
rim_joist_height = geometry_rim_joist_height
|
1466
1538
|
attic_type = geometry_attic_type
|
1467
1539
|
roof_type = geometry_roof_type
|
1468
1540
|
roof_pitch = geometry_roof_pitch
|
@@ -1510,14 +1582,16 @@ class Geometry
|
|
1510
1582
|
runner.registerError('Invalid horizontal location entered.')
|
1511
1583
|
return false
|
1512
1584
|
end
|
1585
|
+
if (unit_width == 1) && (horizontal_location != 'None')
|
1586
|
+
runner.registerWarning("No #{horizontal_location} location exists, setting horizontal_location to 'None'")
|
1587
|
+
horizontal_location = 'None'
|
1588
|
+
end
|
1513
1589
|
|
1514
1590
|
# Convert to SI
|
1515
1591
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
1516
1592
|
wall_height = UnitConversions.convert(wall_height, 'ft', 'm')
|
1517
1593
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
1518
|
-
|
1519
|
-
# starting spaces
|
1520
|
-
runner.registerInitialCondition("The building started with #{model.getSpaces.size} spaces.")
|
1594
|
+
rim_joist_height = UnitConversions.convert(rim_joist_height, 'ft', 'm')
|
1521
1595
|
|
1522
1596
|
if (foundation_type == HPXML::FoundationTypeBasementConditioned) && (attic_type == HPXML::AtticTypeConditioned)
|
1523
1597
|
footprint = cfa / (num_floors + 2)
|
@@ -1535,11 +1609,11 @@ class Geometry
|
|
1535
1609
|
foundation_back_polygon = nil
|
1536
1610
|
|
1537
1611
|
# create the front prototype unit
|
1538
|
-
nw_point = OpenStudio::Point3d.new(0, 0,
|
1539
|
-
ne_point = OpenStudio::Point3d.new(x, 0,
|
1540
|
-
sw_point = OpenStudio::Point3d.new(0, -y,
|
1541
|
-
se_point = OpenStudio::Point3d.new(x, -y,
|
1542
|
-
living_polygon =
|
1612
|
+
nw_point = OpenStudio::Point3d.new(0, 0, rim_joist_height)
|
1613
|
+
ne_point = OpenStudio::Point3d.new(x, 0, rim_joist_height)
|
1614
|
+
sw_point = OpenStudio::Point3d.new(0, -y, rim_joist_height)
|
1615
|
+
se_point = OpenStudio::Point3d.new(x, -y, rim_joist_height)
|
1616
|
+
living_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
1543
1617
|
|
1544
1618
|
# foundation
|
1545
1619
|
if (foundation_height > 0) && foundation_front_polygon.nil?
|
@@ -1563,7 +1637,6 @@ class Geometry
|
|
1563
1637
|
living_spaces_front << living_space
|
1564
1638
|
|
1565
1639
|
# Adiabatic surfaces for walls
|
1566
|
-
##############################################################################################
|
1567
1640
|
# Map unit location to adiabatic surfaces (#if `key` unit then make `value(s)` adiabatic)
|
1568
1641
|
horz_hash = { 'Left' => ['right'], 'Right' => ['left'], 'Middle' => ['left', 'right'], 'None' => [] }
|
1569
1642
|
adb_facade = horz_hash[horizontal_location]
|
@@ -1571,35 +1644,21 @@ class Geometry
|
|
1571
1644
|
adb_facade += ['back']
|
1572
1645
|
end
|
1573
1646
|
|
1574
|
-
if adb_facade.include? 'left'
|
1575
|
-
left_neighbor_offset = 0
|
1576
|
-
end
|
1577
|
-
if adb_facade.include? 'right'
|
1578
|
-
right_neighbor_offset = 0
|
1579
|
-
end
|
1580
|
-
if adb_facade.include? 'back'
|
1581
|
-
back_neighbor_offset = 0
|
1582
|
-
end
|
1583
|
-
if adb_facade.include? 'front'
|
1584
|
-
front_neighbor_offset = 0
|
1585
|
-
end
|
1586
|
-
|
1587
1647
|
adiabatic_surf = adb_facade
|
1588
1648
|
# Make surfaces adiabatic
|
1589
1649
|
model.getSpaces.each do |space|
|
1590
1650
|
space.surfaces.each do |surface|
|
1591
|
-
os_facade =
|
1651
|
+
os_facade = get_facade_for_surface(surface)
|
1592
1652
|
next unless surface.surfaceType == 'Wall'
|
1593
1653
|
next unless adb_facade.include? os_facade
|
1594
1654
|
x_ft = UnitConversions.convert(x, 'm', 'ft')
|
1595
|
-
max_x =
|
1596
|
-
min_x =
|
1655
|
+
max_x = getSurfaceXValues([surface]).max
|
1656
|
+
min_x = getSurfaceXValues([surface]).min
|
1597
1657
|
next if ((max_x - x_ft).abs >= 0.01) && (min_x > 0)
|
1598
1658
|
|
1599
1659
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
1600
1660
|
end
|
1601
1661
|
end
|
1602
|
-
##############################################################################################
|
1603
1662
|
|
1604
1663
|
attic_space_front = nil
|
1605
1664
|
attic_space_back = nil
|
@@ -1611,7 +1670,7 @@ class Geometry
|
|
1611
1670
|
new_living_space.setName("living space|story #{story}")
|
1612
1671
|
new_living_space.setSpaceType(living_space_type)
|
1613
1672
|
|
1614
|
-
m =
|
1673
|
+
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
1615
1674
|
m[2, 3] = wall_height * (story - 1)
|
1616
1675
|
new_living_space.setTransformation(OpenStudio::Transformation.new(m))
|
1617
1676
|
new_living_space.setThermalZone(living_zone)
|
@@ -1621,7 +1680,7 @@ class Geometry
|
|
1621
1680
|
|
1622
1681
|
# attic
|
1623
1682
|
if roof_type != 'flat'
|
1624
|
-
attic_space = get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type)
|
1683
|
+
attic_space = get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height)
|
1625
1684
|
if attic_type == HPXML::AtticTypeConditioned
|
1626
1685
|
attic_space.setName("#{attic_type} space")
|
1627
1686
|
attic_space.setThermalZone(living_zone)
|
@@ -1633,10 +1692,6 @@ class Geometry
|
|
1633
1692
|
end
|
1634
1693
|
end
|
1635
1694
|
|
1636
|
-
# create the unit
|
1637
|
-
unit_spaces_hash = {}
|
1638
|
-
unit_spaces_hash[1] = [living_spaces_front, 1]
|
1639
|
-
|
1640
1695
|
# foundation
|
1641
1696
|
if foundation_height > 0
|
1642
1697
|
foundation_spaces = []
|
@@ -1645,7 +1700,7 @@ class Geometry
|
|
1645
1700
|
foundation_space_front = []
|
1646
1701
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_front_polygon, foundation_height, model)
|
1647
1702
|
foundation_space = foundation_space.get
|
1648
|
-
m =
|
1703
|
+
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
1649
1704
|
m[2, 3] = foundation_height
|
1650
1705
|
foundation_space.changeTransformation(OpenStudio::Transformation.new(m))
|
1651
1706
|
foundation_space.setXOrigin(0)
|
@@ -1654,20 +1709,19 @@ class Geometry
|
|
1654
1709
|
|
1655
1710
|
if foundation_type == HPXML::FoundationTypeBasementConditioned
|
1656
1711
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1657
|
-
foundation_space.setName(
|
1658
|
-
foundation_zone.setName(
|
1712
|
+
foundation_space.setName(HPXML::FoundationTypeBasementConditioned)
|
1713
|
+
foundation_zone.setName(HPXML::FoundationTypeBasementConditioned)
|
1659
1714
|
foundation_space.setThermalZone(foundation_zone)
|
1660
1715
|
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1661
|
-
foundation_space_type.setStandardsSpaceType(
|
1716
|
+
foundation_space_type.setStandardsSpaceType(HPXML::LocationBasementConditioned)
|
1662
1717
|
foundation_space.setSpaceType(foundation_space_type)
|
1663
1718
|
end
|
1664
1719
|
|
1665
1720
|
foundation_space_front << foundation_space
|
1666
1721
|
foundation_spaces << foundation_space
|
1667
1722
|
|
1668
|
-
|
1669
|
-
|
1670
|
-
end
|
1723
|
+
# Rim Joist
|
1724
|
+
add_rim_joist(model, foundation_front_polygon, foundation_space, rim_joist_height, 0)
|
1671
1725
|
|
1672
1726
|
# put all of the spaces in the model into a vector
|
1673
1727
|
spaces = OpenStudio::Model::SpaceVector.new
|
@@ -1680,46 +1734,42 @@ class Geometry
|
|
1680
1734
|
OpenStudio::Model.matchSurfaces(spaces)
|
1681
1735
|
|
1682
1736
|
if [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented, HPXML::FoundationTypeBasementUnconditioned].include? foundation_type
|
1683
|
-
|
1737
|
+
# create foundation zone
|
1738
|
+
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1739
|
+
|
1740
|
+
foundation_space = make_one_space_from_multiple_spaces(model, foundation_spaces)
|
1684
1741
|
if foundation_type == HPXML::FoundationTypeCrawlspaceVented
|
1685
|
-
|
1742
|
+
foundation_space_name = HPXML::LocationCrawlspaceVented
|
1686
1743
|
elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
1687
|
-
|
1744
|
+
foundation_space_name = HPXML::LocationCrawlspaceUnvented
|
1688
1745
|
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
1689
|
-
|
1690
|
-
end
|
1691
|
-
if [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented].include? foundation_type
|
1692
|
-
foundation_space.setName("#{foundation_type} space")
|
1693
|
-
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1694
|
-
foundation_zone.setName('crawl zone')
|
1695
|
-
foundation_space.setThermalZone(foundation_zone)
|
1696
|
-
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1697
|
-
foundation_space_type.setStandardsSpaceType(foundation_space_type_name)
|
1698
|
-
foundation_space.setSpaceType(foundation_space_type)
|
1699
|
-
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
1700
|
-
foundation_space.setName("#{foundation_type} space")
|
1701
|
-
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1702
|
-
foundation_zone.setName("#{foundation_type} zone")
|
1703
|
-
foundation_space.setThermalZone(foundation_zone)
|
1704
|
-
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1705
|
-
foundation_space_type.setStandardsSpaceType(foundation_space_type_name)
|
1706
|
-
foundation_space.setSpaceType(foundation_space_type)
|
1746
|
+
foundation_space_name = HPXML::LocationBasementUnconditioned
|
1707
1747
|
end
|
1748
|
+
foundation_zone.setName(foundation_space_name)
|
1749
|
+
foundation_space.setName(foundation_space_name)
|
1750
|
+
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1751
|
+
foundation_space_type.setStandardsSpaceType(foundation_space_name)
|
1752
|
+
foundation_space.setSpaceType(foundation_space_type)
|
1753
|
+
|
1754
|
+
# set these to the foundation zone
|
1755
|
+
foundation_space.setThermalZone(foundation_zone)
|
1708
1756
|
end
|
1709
1757
|
|
1710
1758
|
# set foundation walls to ground
|
1711
1759
|
spaces = model.getSpaces
|
1712
1760
|
spaces.each do |space|
|
1713
|
-
next unless
|
1761
|
+
next unless get_space_floor_z(space) + UnitConversions.convert(space.zOrigin, 'm', 'ft') < 0
|
1714
1762
|
surfaces = space.surfaces
|
1715
1763
|
surfaces.each do |surface|
|
1716
1764
|
next if surface.surfaceType.downcase != 'wall'
|
1717
1765
|
|
1718
|
-
os_facade =
|
1766
|
+
os_facade = get_facade_for_surface(surface)
|
1719
1767
|
if adb_facade.include? os_facade
|
1720
1768
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
1721
|
-
|
1769
|
+
elsif getSurfaceZValues([surface]).min < 0
|
1722
1770
|
surface.setOutsideBoundaryCondition('Foundation')
|
1771
|
+
else
|
1772
|
+
surface.setOutsideBoundaryCondition('Outdoors')
|
1723
1773
|
end
|
1724
1774
|
end
|
1725
1775
|
end
|
@@ -1738,47 +1788,47 @@ class Geometry
|
|
1738
1788
|
|
1739
1789
|
if [HPXML::AtticTypeVented, HPXML::AtticTypeUnvented].include?(attic_type) && (roof_type != 'flat')
|
1740
1790
|
if offset == 0
|
1741
|
-
# x *= num_units
|
1742
|
-
# if has_rear_units
|
1743
|
-
# x /= 2
|
1744
|
-
# end
|
1745
1791
|
attic_spaces.each do |attic_space|
|
1746
1792
|
attic_space.remove
|
1747
1793
|
end
|
1748
|
-
attic_space = get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type, has_rear_units)
|
1794
|
+
attic_space = get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height, has_rear_units)
|
1749
1795
|
else
|
1750
|
-
attic_space =
|
1796
|
+
attic_space = make_one_space_from_multiple_spaces(model, attic_spaces)
|
1751
1797
|
end
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1798
|
+
|
1799
|
+
# set these to the attic zone
|
1800
|
+
if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
|
1801
|
+
# create attic zone
|
1802
|
+
attic_zone = OpenStudio::Model::ThermalZone.new(model)
|
1803
|
+
attic_space.setThermalZone(attic_zone)
|
1804
|
+
if attic_type == HPXML::AtticTypeVented
|
1805
|
+
attic_space_name = HPXML::LocationAtticVented
|
1806
|
+
elsif attic_type == HPXML::AtticTypeUnvented
|
1807
|
+
attic_space_name = HPXML::LocationAtticUnvented
|
1808
|
+
end
|
1809
|
+
attic_zone.setName(attic_space_name)
|
1810
|
+
elsif attic_type == HPXML::AtticTypeConditioned
|
1811
|
+
attic_space.setThermalZone(living_zone)
|
1812
|
+
attic_space_name = HPXML::LocationLivingSpace
|
1761
1813
|
end
|
1814
|
+
attic_space.setName(attic_space_name)
|
1762
1815
|
attic_space_type = OpenStudio::Model::SpaceType.new(model)
|
1763
|
-
attic_space_type.setStandardsSpaceType(
|
1816
|
+
attic_space_type.setStandardsSpaceType(attic_space_name)
|
1764
1817
|
attic_space.setSpaceType(attic_space_type)
|
1765
|
-
end
|
1766
1818
|
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
min_x = Geometry.getSurfaceXValues([surface]).min
|
1777
|
-
next if ((max_x - x_ft).abs >= 0.01) && (min_x > 0)
|
1819
|
+
# Adiabatic surfaces for attic walls
|
1820
|
+
attic_space.surfaces.each do |surface|
|
1821
|
+
os_facade = get_facade_for_surface(surface)
|
1822
|
+
next unless surface.surfaceType == 'Wall'
|
1823
|
+
next unless adb_facade.include? os_facade
|
1824
|
+
x_ft = UnitConversions.convert(x, 'm', 'ft')
|
1825
|
+
max_x = getSurfaceXValues([surface]).max
|
1826
|
+
min_x = getSurfaceXValues([surface]).min
|
1827
|
+
next if ((max_x - x_ft).abs >= 0.01) && (min_x > 0)
|
1778
1828
|
|
1779
|
-
|
1829
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
1830
|
+
end
|
1780
1831
|
end
|
1781
|
-
################################################################
|
1782
1832
|
|
1783
1833
|
# put all of the spaces in the model into a vector
|
1784
1834
|
spaces = OpenStudio::Model::SpaceVector.new
|
@@ -1800,108 +1850,61 @@ class Geometry
|
|
1800
1850
|
return true
|
1801
1851
|
end
|
1802
1852
|
|
1803
|
-
def self.get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type, has_rear_units = false)
|
1853
|
+
def self.get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height, has_rear_units = false)
|
1804
1854
|
y_rear = 0
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
ne_point = OpenStudio::Point3d.new(x, 0, wall_height * num_floors)
|
1817
|
-
sw_point = OpenStudio::Point3d.new(0, -y, wall_height * num_floors)
|
1818
|
-
se_point = OpenStudio::Point3d.new(x, -y, wall_height * num_floors)
|
1819
|
-
# else
|
1820
|
-
# nw_point = OpenStudio::Point3d.new(0, -y, wall_height * num_floors)
|
1821
|
-
# ne_point = OpenStudio::Point3d.new(x, -y, wall_height * num_floors)
|
1822
|
-
# sw_point = OpenStudio::Point3d.new(0, 0, wall_height * num_floors)
|
1823
|
-
# se_point = OpenStudio::Point3d.new(x, 0, wall_height * num_floors)
|
1824
|
-
# end
|
1825
|
-
attic_polygon = Geometry.make_polygon(sw_point, nw_point, ne_point, se_point)
|
1826
|
-
|
1827
|
-
# if y_tot >= x_tot
|
1828
|
-
# attic_height = (x_tot / 2.0) * roof_pitch
|
1829
|
-
# else
|
1830
|
-
# attic_height = (y_tot / 2.0) * roof_pitch
|
1831
|
-
# end
|
1832
|
-
|
1833
|
-
attic_height = (y_tot / 2.0) * roof_pitch # Roof always has same orientation
|
1855
|
+
y_peak = -y / 2
|
1856
|
+
y_tot = y
|
1857
|
+
x_tot = x * num_units
|
1858
|
+
|
1859
|
+
nw_point = OpenStudio::Point3d.new(0, 0, wall_height * num_floors + rim_joist_height)
|
1860
|
+
ne_point = OpenStudio::Point3d.new(x, 0, wall_height * num_floors + rim_joist_height)
|
1861
|
+
sw_point = OpenStudio::Point3d.new(0, -y, wall_height * num_floors + rim_joist_height)
|
1862
|
+
se_point = OpenStudio::Point3d.new(x, -y, wall_height * num_floors + rim_joist_height)
|
1863
|
+
attic_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
1864
|
+
|
1865
|
+
attic_height = (y_tot / 2.0) * roof_pitch + rim_joist_height # Roof always has same orientation
|
1834
1866
|
|
1835
1867
|
side_type = nil
|
1836
1868
|
if roof_type == 'gable'
|
1837
|
-
# if y > 0
|
1838
|
-
# if x <= (y + y_rear)
|
1839
|
-
# roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear, wall_height * num_floors + attic_height)
|
1840
|
-
# roof_s_point = OpenStudio::Point3d.new(x / 2.0, -y, wall_height * num_floors + attic_height)
|
1841
|
-
# polygon_w_roof = Geometry.make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1842
|
-
# polygon_e_roof = Geometry.make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1843
|
-
# polygon_s_wall = Geometry.make_polygon(roof_s_point, sw_point, se_point)
|
1844
|
-
# polygon_n_wall = Geometry.make_polygon(roof_n_point, ne_point, nw_point)
|
1845
|
-
# else
|
1846
|
-
# roof_w_point = OpenStudio::Point3d.new(0, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1847
|
-
# roof_e_point = OpenStudio::Point3d.new(x, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1848
1869
|
roof_w_point = OpenStudio::Point3d.new(0, y_peak, wall_height * num_floors + attic_height)
|
1849
1870
|
roof_e_point = OpenStudio::Point3d.new(x, y_peak, wall_height * num_floors + attic_height)
|
1850
|
-
polygon_w_roof =
|
1851
|
-
polygon_e_roof =
|
1852
|
-
polygon_s_wall =
|
1853
|
-
polygon_n_wall =
|
1854
|
-
# end
|
1855
|
-
# else
|
1856
|
-
# if x <= y.abs
|
1857
|
-
# roof_n_point = OpenStudio::Point3d.new(x / 2.0, -y, wall_height * num_floors + attic_height)
|
1858
|
-
# roof_s_point = OpenStudio::Point3d.new(x / 2.0, 0, wall_height * num_floors + attic_height)
|
1859
|
-
# polygon_w_roof = Geometry.make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1860
|
-
# polygon_e_roof = Geometry.make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1861
|
-
# polygon_s_wall = Geometry.make_polygon(roof_s_point, sw_point, se_point)
|
1862
|
-
# polygon_n_wall = Geometry.make_polygon(roof_n_point, ne_point, nw_point)
|
1863
|
-
# else
|
1864
|
-
# roof_w_point = OpenStudio::Point3d.new(0, -y / 2.0, wall_height * num_floors + attic_height)
|
1865
|
-
# roof_e_point = OpenStudio::Point3d.new(x, -y / 2.0, wall_height * num_floors + attic_height)
|
1866
|
-
# polygon_w_roof = Geometry.make_polygon(roof_w_point, roof_e_point, ne_point, nw_point)
|
1867
|
-
# polygon_e_roof = Geometry.make_polygon(roof_e_point, roof_w_point, sw_point, se_point)
|
1868
|
-
# polygon_s_wall = Geometry.make_polygon(roof_w_point, nw_point, sw_point)
|
1869
|
-
# polygon_n_wall = Geometry.make_polygon(roof_e_point, se_point, ne_point)
|
1870
|
-
# end
|
1871
|
-
# end
|
1871
|
+
polygon_w_roof = make_polygon(roof_w_point, roof_e_point, ne_point, nw_point)
|
1872
|
+
polygon_e_roof = make_polygon(roof_e_point, roof_w_point, sw_point, se_point)
|
1873
|
+
polygon_s_wall = make_polygon(roof_w_point, nw_point, sw_point)
|
1874
|
+
polygon_n_wall = make_polygon(roof_e_point, se_point, ne_point)
|
1872
1875
|
side_type = 'Wall'
|
1873
|
-
elsif roof_type == 'hip'
|
1876
|
+
elsif roof_type == 'hip'
|
1874
1877
|
if y > 0
|
1875
1878
|
if x <= (y + y_rear)
|
1876
1879
|
roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear - x / 2.0, wall_height * num_floors + attic_height)
|
1877
1880
|
roof_s_point = OpenStudio::Point3d.new(x / 2.0, -y + x / 2.0, wall_height * num_floors + attic_height)
|
1878
|
-
polygon_w_roof =
|
1879
|
-
polygon_e_roof =
|
1880
|
-
polygon_s_wall =
|
1881
|
-
polygon_n_wall =
|
1881
|
+
polygon_w_roof = make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1882
|
+
polygon_e_roof = make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1883
|
+
polygon_s_wall = make_polygon(roof_s_point, sw_point, se_point)
|
1884
|
+
polygon_n_wall = make_polygon(roof_n_point, ne_point, nw_point)
|
1882
1885
|
else
|
1883
1886
|
roof_w_point = OpenStudio::Point3d.new((y + y_rear) / 2.0, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1884
1887
|
roof_e_point = OpenStudio::Point3d.new(x - (y + y_rear) / 2.0, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1885
|
-
polygon_w_roof =
|
1886
|
-
polygon_e_roof =
|
1887
|
-
polygon_s_wall =
|
1888
|
-
polygon_n_wall =
|
1888
|
+
polygon_w_roof = make_polygon(roof_w_point, sw_point, se_point, roof_e_point)
|
1889
|
+
polygon_e_roof = make_polygon(roof_e_point, ne_point, nw_point, roof_w_point)
|
1890
|
+
polygon_s_wall = make_polygon(roof_e_point, se_point, ne_point)
|
1891
|
+
polygon_n_wall = make_polygon(roof_w_point, nw_point, sw_point)
|
1889
1892
|
end
|
1890
1893
|
else
|
1891
1894
|
if x <= y.abs
|
1892
1895
|
roof_n_point = OpenStudio::Point3d.new(x / 2.0, -y - x / 2.0, wall_height * num_floors + attic_height)
|
1893
1896
|
roof_s_point = OpenStudio::Point3d.new(x / 2.0, x / 2.0, wall_height * num_floors + attic_height)
|
1894
|
-
polygon_w_roof =
|
1895
|
-
polygon_e_roof =
|
1896
|
-
polygon_s_wall =
|
1897
|
-
polygon_n_wall =
|
1897
|
+
polygon_w_roof = make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1898
|
+
polygon_e_roof = make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1899
|
+
polygon_s_wall = make_polygon(roof_s_point, sw_point, se_point)
|
1900
|
+
polygon_n_wall = make_polygon(roof_n_point, ne_point, nw_point)
|
1898
1901
|
else
|
1899
1902
|
roof_w_point = OpenStudio::Point3d.new(-y / 2.0, -y / 2.0, wall_height * num_floors + attic_height)
|
1900
1903
|
roof_e_point = OpenStudio::Point3d.new(x + y / 2.0, -y / 2.0, wall_height * num_floors + attic_height)
|
1901
|
-
polygon_w_roof =
|
1902
|
-
polygon_e_roof =
|
1903
|
-
polygon_s_wall =
|
1904
|
-
polygon_n_wall =
|
1904
|
+
polygon_w_roof = make_polygon(roof_w_point, sw_point, se_point, roof_e_point)
|
1905
|
+
polygon_e_roof = make_polygon(roof_e_point, ne_point, nw_point, roof_w_point)
|
1906
|
+
polygon_s_wall = make_polygon(roof_e_point, se_point, ne_point)
|
1907
|
+
polygon_n_wall = make_polygon(roof_w_point, nw_point, sw_point)
|
1905
1908
|
end
|
1906
1909
|
end
|
1907
1910
|
side_type = 'RoofCeiling'
|
@@ -1912,11 +1915,7 @@ class Geometry
|
|
1912
1915
|
surface_floor.setOutsideBoundaryCondition('Surface')
|
1913
1916
|
surface_w_roof = OpenStudio::Model::Surface.new(polygon_w_roof, model)
|
1914
1917
|
surface_w_roof.setSurfaceType('RoofCeiling')
|
1915
|
-
|
1916
|
-
surface_w_roof.setOutsideBoundaryCondition('Adiabatic') ###
|
1917
|
-
else
|
1918
|
-
surface_w_roof.setOutsideBoundaryCondition('Outdoors') ###
|
1919
|
-
end
|
1918
|
+
surface_w_roof.setOutsideBoundaryCondition('Outdoors')
|
1920
1919
|
surface_e_roof = OpenStudio::Model::Surface.new(polygon_e_roof, model)
|
1921
1920
|
surface_e_roof.setSurfaceType('RoofCeiling')
|
1922
1921
|
surface_e_roof.setOutsideBoundaryCondition('Outdoors')
|
@@ -1955,6 +1954,7 @@ class Geometry
|
|
1955
1954
|
geometry_balcony_depth:,
|
1956
1955
|
geometry_foundation_type:,
|
1957
1956
|
geometry_foundation_height:,
|
1957
|
+
geometry_rim_joist_height:,
|
1958
1958
|
**remainder)
|
1959
1959
|
|
1960
1960
|
cfa = geometry_cfa
|
@@ -1963,7 +1963,7 @@ class Geometry
|
|
1963
1963
|
num_floors = geometry_num_floors_above_grade
|
1964
1964
|
aspect_ratio = geometry_aspect_ratio
|
1965
1965
|
level = geometry_level.get
|
1966
|
-
|
1966
|
+
horz_location = geometry_horizontal_location.get
|
1967
1967
|
corridor_position = geometry_corridor_position
|
1968
1968
|
corridor_width = geometry_corridor_width
|
1969
1969
|
inset_width = geometry_inset_width
|
@@ -1972,20 +1972,27 @@ class Geometry
|
|
1972
1972
|
balcony_depth = geometry_balcony_depth
|
1973
1973
|
foundation_type = geometry_foundation_type
|
1974
1974
|
foundation_height = geometry_foundation_height
|
1975
|
+
rim_joist_height = geometry_rim_joist_height
|
1975
1976
|
|
1976
1977
|
if level != 'Bottom'
|
1977
1978
|
foundation_type = HPXML::LocationOtherHousingUnit
|
1978
1979
|
foundation_height = 0.0
|
1980
|
+
rim_joist_height = 0.0
|
1979
1981
|
end
|
1980
1982
|
|
1981
1983
|
num_units_per_floor = num_units / num_floors
|
1982
1984
|
num_units_per_floor_actual = num_units_per_floor
|
1985
|
+
above_ground_floors = num_floors
|
1983
1986
|
|
1984
1987
|
if (num_floors > 1) && (level != 'Bottom') && (foundation_height != 0.0)
|
1985
1988
|
runner.registerWarning('Unit is not on the bottom floor, setting foundation height to 0.')
|
1986
1989
|
foundation_height = 0.0
|
1987
1990
|
end
|
1988
1991
|
|
1992
|
+
if num_floors == 1
|
1993
|
+
level = 'Bottom'
|
1994
|
+
end
|
1995
|
+
|
1989
1996
|
if (num_units_per_floor % 2 == 0) && ((corridor_position == 'Double-Loaded Interior') || (corridor_position == 'Double Exterior'))
|
1990
1997
|
unit_depth = 2
|
1991
1998
|
unit_width = num_units_per_floor / 2
|
@@ -2031,7 +2038,15 @@ class Geometry
|
|
2031
2038
|
runner.registerWarning('Specified a balcony, but there is no inset.')
|
2032
2039
|
balcony_depth = 0
|
2033
2040
|
end
|
2034
|
-
if (unit_width
|
2041
|
+
if (unit_width == 1) && (horz_location != 'None')
|
2042
|
+
runner.registerWarning("No #{horz_location} location exists, setting horizontal location to 'None'")
|
2043
|
+
horz_location = 'None'
|
2044
|
+
end
|
2045
|
+
if (unit_width > 1) && (horz_location == 'None')
|
2046
|
+
runner.registerError('Specified incompatible horizontal location for the corridor and unit configuration.')
|
2047
|
+
return false
|
2048
|
+
end
|
2049
|
+
if (unit_width < 3) && (horz_location == 'Middle')
|
2035
2050
|
runner.registerError('No middle horizontal location exists.')
|
2036
2051
|
return false
|
2037
2052
|
end
|
@@ -2040,52 +2055,57 @@ class Geometry
|
|
2040
2055
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
2041
2056
|
wall_height = UnitConversions.convert(wall_height, 'ft', 'm')
|
2042
2057
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2058
|
+
corridor_width = UnitConversions.convert(corridor_width, 'ft', 'm')
|
2059
|
+
inset_width = UnitConversions.convert(inset_width, 'ft', 'm')
|
2060
|
+
inset_depth = UnitConversions.convert(inset_depth, 'ft', 'm')
|
2061
|
+
balcony_depth = UnitConversions.convert(balcony_depth, 'ft', 'm')
|
2062
|
+
rim_joist_height = UnitConversions.convert(rim_joist_height, 'ft', 'm')
|
2046
2063
|
|
2047
2064
|
# calculate the dimensions of the unit
|
2048
2065
|
footprint = cfa + inset_width * inset_depth
|
2049
2066
|
x = Math.sqrt(footprint / aspect_ratio)
|
2050
2067
|
y = footprint / x
|
2051
2068
|
|
2069
|
+
story_hash = { 'Bottom' => 0, 'Middle' => 1, 'Top' => num_floors - 1 }
|
2070
|
+
z = wall_height * story_hash[level]
|
2071
|
+
|
2052
2072
|
foundation_corr_polygon = nil
|
2053
2073
|
foundation_front_polygon = nil
|
2054
2074
|
foundation_back_polygon = nil
|
2055
2075
|
|
2056
2076
|
# create the front prototype unit footprint
|
2057
|
-
nw_point = OpenStudio::Point3d.new(0, 0,
|
2058
|
-
ne_point = OpenStudio::Point3d.new(x, 0,
|
2059
|
-
sw_point = OpenStudio::Point3d.new(0, -y,
|
2060
|
-
se_point = OpenStudio::Point3d.new(x, -y,
|
2077
|
+
nw_point = OpenStudio::Point3d.new(0, 0, rim_joist_height)
|
2078
|
+
ne_point = OpenStudio::Point3d.new(x, 0, rim_joist_height)
|
2079
|
+
sw_point = OpenStudio::Point3d.new(0, -y, rim_joist_height)
|
2080
|
+
se_point = OpenStudio::Point3d.new(x, -y, rim_joist_height)
|
2061
2081
|
|
2062
2082
|
if inset_width * inset_depth > 0
|
2063
2083
|
if inset_position == 'Right'
|
2064
2084
|
# unit footprint
|
2065
|
-
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y,
|
2066
|
-
front_point = OpenStudio::Point3d.new(x - inset_width, -y,
|
2067
|
-
side_point = OpenStudio::Point3d.new(x, inset_depth - y,
|
2085
|
+
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y, rim_joist_height)
|
2086
|
+
front_point = OpenStudio::Point3d.new(x - inset_width, -y, rim_joist_height)
|
2087
|
+
side_point = OpenStudio::Point3d.new(x, inset_depth - y, rim_joist_height)
|
2068
2088
|
living_polygon = make_polygon(sw_point, nw_point, ne_point, side_point, inset_point, front_point)
|
2069
2089
|
# unit balcony
|
2070
2090
|
if balcony_depth > 0
|
2071
|
-
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y, wall_height)
|
2072
|
-
side_point = OpenStudio::Point3d.new(x, inset_depth - y, wall_height)
|
2073
|
-
se_point = OpenStudio::Point3d.new(x, inset_depth - y - balcony_depth, wall_height)
|
2074
|
-
front_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y - balcony_depth, wall_height)
|
2091
|
+
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y, wall_height + rim_joist_height)
|
2092
|
+
side_point = OpenStudio::Point3d.new(x, inset_depth - y, wall_height + rim_joist_height)
|
2093
|
+
se_point = OpenStudio::Point3d.new(x, inset_depth - y - balcony_depth, wall_height + rim_joist_height)
|
2094
|
+
front_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y - balcony_depth, wall_height + rim_joist_height)
|
2075
2095
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([front_point, se_point, side_point, inset_point]), model)
|
2076
2096
|
end
|
2077
2097
|
else
|
2078
2098
|
# unit footprint
|
2079
|
-
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y,
|
2080
|
-
front_point = OpenStudio::Point3d.new(inset_width, -y,
|
2081
|
-
side_point = OpenStudio::Point3d.new(0, inset_depth - y,
|
2099
|
+
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y, rim_joist_height)
|
2100
|
+
front_point = OpenStudio::Point3d.new(inset_width, -y, rim_joist_height)
|
2101
|
+
side_point = OpenStudio::Point3d.new(0, inset_depth - y, rim_joist_height)
|
2082
2102
|
living_polygon = make_polygon(side_point, nw_point, ne_point, se_point, front_point, inset_point)
|
2083
2103
|
# unit balcony
|
2084
2104
|
if balcony_depth > 0
|
2085
|
-
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y, wall_height)
|
2086
|
-
side_point = OpenStudio::Point3d.new(0, inset_depth - y, wall_height)
|
2087
|
-
sw_point = OpenStudio::Point3d.new(0, inset_depth - y - balcony_depth, wall_height)
|
2088
|
-
front_point = OpenStudio::Point3d.new(inset_width, inset_depth - y - balcony_depth, wall_height)
|
2105
|
+
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y, wall_height + rim_joist_height)
|
2106
|
+
side_point = OpenStudio::Point3d.new(0, inset_depth - y, wall_height + rim_joist_height)
|
2107
|
+
sw_point = OpenStudio::Point3d.new(0, inset_depth - y - balcony_depth, wall_height + rim_joist_height)
|
2108
|
+
front_point = OpenStudio::Point3d.new(inset_width, inset_depth - y - balcony_depth, wall_height + rim_joist_height)
|
2089
2109
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([front_point, sw_point, side_point, inset_point]), model)
|
2090
2110
|
end
|
2091
2111
|
end
|
@@ -2120,29 +2140,23 @@ class Geometry
|
|
2120
2140
|
end
|
2121
2141
|
living_spaces_front << living_space
|
2122
2142
|
|
2123
|
-
##############################################################################################
|
2124
2143
|
# Map unit location to adiabatic surfaces
|
2125
2144
|
horz_hash = { 'Left' => ['right'], 'Right' => ['left'], 'Middle' => ['left', 'right'], 'None' => [] }
|
2126
2145
|
level_hash = { 'Bottom' => ['RoofCeiling'], 'Top' => ['Floor'], 'Middle' => ['RoofCeiling', 'Floor'], 'None' => [] }
|
2127
|
-
adb_facade = horz_hash[
|
2146
|
+
adb_facade = horz_hash[horz_location]
|
2128
2147
|
adb_level = level_hash[level]
|
2129
2148
|
|
2130
2149
|
# Check levels
|
2131
2150
|
if num_floors == 1
|
2132
2151
|
adb_level = []
|
2133
2152
|
end
|
2134
|
-
# Check for exposed left and right facades
|
2135
|
-
if (num_units_per_floor == 1) || ((num_units_per_floor == 2) && (has_rear_units == true))
|
2136
|
-
adb_facade = []
|
2137
|
-
end
|
2138
2153
|
if (has_rear_units == true)
|
2139
2154
|
adb_facade += ['back']
|
2140
2155
|
end
|
2141
2156
|
|
2142
|
-
adiabatic_surf = adb_facade +
|
2143
|
-
# Make surfaces adiabatic
|
2157
|
+
adiabatic_surf = adb_facade + adb_level
|
2158
|
+
# Make living space surfaces adiabatic
|
2144
2159
|
model.getSpaces.each do |space|
|
2145
|
-
# Store has_rear_units to call in the door geometry measure
|
2146
2160
|
space.surfaces.each do |surface|
|
2147
2161
|
os_facade = get_facade_for_surface(surface)
|
2148
2162
|
if surface.surfaceType == 'Wall'
|
@@ -2158,20 +2172,20 @@ class Geometry
|
|
2158
2172
|
if (adb_level.include? surface.surfaceType)
|
2159
2173
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
2160
2174
|
end
|
2175
|
+
|
2161
2176
|
end
|
2162
2177
|
end
|
2163
2178
|
end
|
2164
|
-
##############################################################################################
|
2165
2179
|
|
2166
2180
|
if (corridor_position == 'Double-Loaded Interior')
|
2167
2181
|
interior_corridor_width = corridor_width / 2 # Only half the corridor is attached to a unit
|
2168
2182
|
# corridors
|
2169
2183
|
if corridor_width > 0
|
2170
2184
|
# create the prototype corridor
|
2171
|
-
nw_point = OpenStudio::Point3d.new(0, interior_corridor_width,
|
2172
|
-
ne_point = OpenStudio::Point3d.new(x, interior_corridor_width,
|
2173
|
-
sw_point = OpenStudio::Point3d.new(0, 0,
|
2174
|
-
se_point = OpenStudio::Point3d.new(x, 0,
|
2185
|
+
nw_point = OpenStudio::Point3d.new(0, interior_corridor_width, rim_joist_height)
|
2186
|
+
ne_point = OpenStudio::Point3d.new(x, interior_corridor_width, rim_joist_height)
|
2187
|
+
sw_point = OpenStudio::Point3d.new(0, 0, rim_joist_height)
|
2188
|
+
se_point = OpenStudio::Point3d.new(x, 0, rim_joist_height)
|
2175
2189
|
corr_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
2176
2190
|
|
2177
2191
|
if (foundation_height > 0) && foundation_corr_polygon.nil?
|
@@ -2180,32 +2194,24 @@ class Geometry
|
|
2180
2194
|
|
2181
2195
|
# create corridor zone
|
2182
2196
|
corridor_zone = OpenStudio::Model::ThermalZone.new(model)
|
2183
|
-
corridor_zone.setName(
|
2197
|
+
corridor_zone.setName(HPXML::LocationOtherHousingUnit)
|
2184
2198
|
corridor_space = OpenStudio::Model::Space::fromFloorPrint(corr_polygon, wall_height, model)
|
2185
2199
|
corridor_space = corridor_space.get
|
2186
|
-
|
2187
|
-
corridor_space.setName(corridor_space_name)
|
2200
|
+
corridor_space.setName(HPXML::LocationOtherHousingUnit)
|
2188
2201
|
corridor_space_type = OpenStudio::Model::SpaceType.new(model)
|
2189
|
-
corridor_space_type.setStandardsSpaceType(
|
2202
|
+
corridor_space_type.setStandardsSpaceType(HPXML::LocationOtherHousingUnit)
|
2190
2203
|
|
2191
2204
|
corridor_space.setSpaceType(corridor_space_type)
|
2192
2205
|
corridor_space.setThermalZone(corridor_zone)
|
2193
|
-
|
2194
|
-
# Make walls of corridor adiabatic
|
2195
|
-
if has_rear_units == true
|
2196
|
-
corridor_space.surfaces.each do |surface|
|
2197
|
-
os_facade = get_facade_for_surface(surface)
|
2198
|
-
end
|
2199
|
-
end
|
2200
2206
|
end
|
2201
2207
|
|
2202
2208
|
elsif (corridor_position == 'Double Exterior') || (corridor_position == 'Single Exterior (Front)')
|
2203
2209
|
interior_corridor_width = 0
|
2204
2210
|
# front access
|
2205
|
-
nw_point = OpenStudio::Point3d.new(0, -y, wall_height)
|
2206
|
-
sw_point = OpenStudio::Point3d.new(0, -y - corridor_width, wall_height)
|
2207
|
-
ne_point = OpenStudio::Point3d.new(x, -y, wall_height)
|
2208
|
-
se_point = OpenStudio::Point3d.new(x, -y - corridor_width, wall_height)
|
2211
|
+
nw_point = OpenStudio::Point3d.new(0, -y, wall_height + rim_joist_height)
|
2212
|
+
sw_point = OpenStudio::Point3d.new(0, -y - corridor_width, wall_height + rim_joist_height)
|
2213
|
+
ne_point = OpenStudio::Point3d.new(x, -y, wall_height + rim_joist_height)
|
2214
|
+
se_point = OpenStudio::Point3d.new(x, -y - corridor_width, wall_height + rim_joist_height)
|
2209
2215
|
|
2210
2216
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([sw_point, se_point, ne_point, nw_point]), model)
|
2211
2217
|
shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
|
@@ -2218,17 +2224,20 @@ class Geometry
|
|
2218
2224
|
foundation_spaces = []
|
2219
2225
|
|
2220
2226
|
# foundation corridor
|
2227
|
+
foundation_corridor_space = nil
|
2221
2228
|
if (corridor_width > 0) && (corridor_position == 'Double-Loaded Interior')
|
2222
|
-
|
2223
|
-
|
2229
|
+
foundation_corridor_space = OpenStudio::Model::Space::fromFloorPrint(foundation_corr_polygon, foundation_height, model)
|
2230
|
+
foundation_corridor_space = foundation_corridor_space.get
|
2224
2231
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
2225
|
-
m[2, 3] = foundation_height
|
2226
|
-
|
2227
|
-
|
2228
|
-
|
2229
|
-
|
2232
|
+
m[2, 3] = foundation_height + rim_joist_height
|
2233
|
+
foundation_corridor_space.changeTransformation(OpenStudio::Transformation.new(m))
|
2234
|
+
foundation_corridor_space.setXOrigin(0)
|
2235
|
+
foundation_corridor_space.setYOrigin(0)
|
2236
|
+
foundation_corridor_space.setZOrigin(0)
|
2237
|
+
foundation_spaces << foundation_corridor_space
|
2230
2238
|
|
2231
|
-
|
2239
|
+
# Rim Joist
|
2240
|
+
add_rim_joist(model, foundation_corr_polygon, foundation_corridor_space, rim_joist_height, 0)
|
2232
2241
|
end
|
2233
2242
|
|
2234
2243
|
# foundation front
|
@@ -2236,7 +2245,7 @@ class Geometry
|
|
2236
2245
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_front_polygon, foundation_height, model)
|
2237
2246
|
foundation_space = foundation_space.get
|
2238
2247
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
2239
|
-
m[2, 3] = foundation_height
|
2248
|
+
m[2, 3] = foundation_height + rim_joist_height
|
2240
2249
|
foundation_space.changeTransformation(OpenStudio::Transformation.new(m))
|
2241
2250
|
foundation_space.setXOrigin(0)
|
2242
2251
|
foundation_space.setYOrigin(0)
|
@@ -2245,6 +2254,31 @@ class Geometry
|
|
2245
2254
|
foundation_space_front << foundation_space
|
2246
2255
|
foundation_spaces << foundation_space
|
2247
2256
|
|
2257
|
+
foundation_spaces.each do |foundation_space| # (corridor and foundation)
|
2258
|
+
next unless [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented, HPXML::FoundationTypeBasementUnconditioned].include?(foundation_type)
|
2259
|
+
# create foundation zone
|
2260
|
+
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
2261
|
+
|
2262
|
+
if foundation_type == HPXML::FoundationTypeCrawlspaceVented
|
2263
|
+
foundation_space_name = HPXML::LocationCrawlspaceVented
|
2264
|
+
elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
2265
|
+
foundation_space_name = HPXML::LocationCrawlspaceUnvented
|
2266
|
+
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
2267
|
+
foundation_space_name = HPXML::LocationBasementUnconditioned
|
2268
|
+
end
|
2269
|
+
foundation_zone.setName(foundation_space_name)
|
2270
|
+
foundation_space.setName(foundation_space_name)
|
2271
|
+
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
2272
|
+
foundation_space_type.setStandardsSpaceType(foundation_space_name)
|
2273
|
+
foundation_space.setSpaceType(foundation_space_type)
|
2274
|
+
|
2275
|
+
# set these to the foundation zone
|
2276
|
+
foundation_space.setThermalZone(foundation_zone)
|
2277
|
+
end
|
2278
|
+
|
2279
|
+
# Rim Joist
|
2280
|
+
add_rim_joist(model, foundation_front_polygon, foundation_space, rim_joist_height, 0)
|
2281
|
+
|
2248
2282
|
# put all of the spaces in the model into a vector
|
2249
2283
|
spaces = OpenStudio::Model::SpaceVector.new
|
2250
2284
|
model.getSpaces.each do |space|
|
@@ -2255,43 +2289,56 @@ class Geometry
|
|
2255
2289
|
OpenStudio::Model.intersectSurfaces(spaces)
|
2256
2290
|
OpenStudio::Model.matchSurfaces(spaces)
|
2257
2291
|
|
2258
|
-
|
2259
|
-
|
2260
|
-
|
2261
|
-
|
2262
|
-
|
2263
|
-
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2292
|
+
# Foundation space boundary conditions
|
2293
|
+
model.getSpaces.each do |space|
|
2294
|
+
next unless get_space_floor_z(space) + UnitConversions.convert(space.zOrigin, 'm', 'ft') < 0 # Foundation
|
2295
|
+
next if space.name.get.include? 'corridor'
|
2296
|
+
|
2297
|
+
surfaces = space.surfaces
|
2298
|
+
surfaces.each do |surface|
|
2299
|
+
next unless surface.surfaceType.downcase == 'wall'
|
2300
|
+
|
2301
|
+
os_facade = get_facade_for_surface(surface)
|
2302
|
+
if adb_facade.include?(os_facade) && (os_facade != 'RoofCeiling') && (os_facade != 'Floor')
|
2303
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2304
|
+
elsif getSurfaceZValues([surface]).min < 0
|
2305
|
+
surface.setOutsideBoundaryCondition('Foundation')
|
2267
2306
|
else
|
2268
|
-
|
2307
|
+
surface.setOutsideBoundaryCondition('Outdoors')
|
2269
2308
|
end
|
2270
|
-
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
2271
|
-
foundation_space.setName("#{foundation_type} space")
|
2272
|
-
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
2273
|
-
foundation_zone.setName("#{foundation_type} zone")
|
2274
|
-
foundation_space.setThermalZone(foundation_zone)
|
2275
|
-
foundation_space_type_name = 'unconditioned basement'
|
2276
2309
|
end
|
2277
|
-
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
2278
|
-
foundation_space_type.setStandardsSpaceType(foundation_space_type_name)
|
2279
|
-
foundation_space.setSpaceType(foundation_space_type)
|
2280
2310
|
end
|
2281
2311
|
|
2282
|
-
#
|
2283
|
-
|
2284
|
-
|
2285
|
-
|
2286
|
-
|
2287
|
-
surfaces = space.surfaces
|
2288
|
-
surfaces.each do |surface|
|
2289
|
-
next if surface.surfaceType.downcase != 'wall'
|
2312
|
+
# Foundation corridor space boundary conditions
|
2313
|
+
foundation_corr_obcs = []
|
2314
|
+
if not foundation_corridor_space.nil?
|
2315
|
+
foundation_corridor_space.surfaces.each do |surface|
|
2316
|
+
next unless surface.surfaceType.downcase == 'wall'
|
2290
2317
|
|
2291
|
-
surface
|
2318
|
+
os_facade = get_facade_for_surface(surface)
|
2319
|
+
if adb_facade.include? os_facade
|
2320
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2321
|
+
else
|
2322
|
+
surface.setOutsideBoundaryCondition('Foundation')
|
2323
|
+
end
|
2292
2324
|
end
|
2293
2325
|
end
|
2326
|
+
end
|
2294
2327
|
|
2328
|
+
# Corridor space boundary conditions
|
2329
|
+
model.getSpaces.each do |space|
|
2330
|
+
next unless is_corridor(space)
|
2331
|
+
|
2332
|
+
space.surfaces.each do |surface|
|
2333
|
+
os_facade = get_facade_for_surface(surface)
|
2334
|
+
if adb_facade.include? os_facade
|
2335
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2336
|
+
end
|
2337
|
+
|
2338
|
+
if (adb_level.include? surface.surfaceType)
|
2339
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2340
|
+
end
|
2341
|
+
end
|
2295
2342
|
end
|
2296
2343
|
|
2297
2344
|
# put all of the spaces in the model into a vector
|
@@ -2304,15 +2351,26 @@ class Geometry
|
|
2304
2351
|
OpenStudio::Model.intersectSurfaces(spaces)
|
2305
2352
|
OpenStudio::Model.matchSurfaces(spaces)
|
2306
2353
|
|
2307
|
-
# make
|
2354
|
+
# make corridor floors adiabatic if no exterior walls to avoid exposed perimeter error
|
2355
|
+
exterior_obcs = ['Foundation', 'Ground', 'Outdoors']
|
2356
|
+
obcs_hash = {}
|
2308
2357
|
model.getSpaces.each do |space|
|
2309
|
-
next unless space.
|
2358
|
+
next unless space.name.get.include? 'corridor' # corridor and foundation corridor spaces
|
2310
2359
|
|
2360
|
+
space_name = space.name
|
2361
|
+
obcs_hash[space_name] = []
|
2311
2362
|
space.surfaces.each do |surface|
|
2312
|
-
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2363
|
+
next unless surface.surfaceType.downcase == 'wall'
|
2364
|
+
|
2365
|
+
obcs_hash[space_name] << surface.outsideBoundaryCondition
|
2366
|
+
end
|
2367
|
+
|
2368
|
+
next if (obcs_hash[space_name] & exterior_obcs).any?
|
2369
|
+
|
2370
|
+
space.surfaces.each do |surface|
|
2371
|
+
next unless surface.surfaceType.downcase == 'floor'
|
2372
|
+
|
2373
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2316
2374
|
end
|
2317
2375
|
end
|
2318
2376
|
|
@@ -2323,9 +2381,25 @@ class Geometry
|
|
2323
2381
|
surface.setOutsideBoundaryCondition('Foundation')
|
2324
2382
|
end
|
2325
2383
|
|
2384
|
+
# set adjacent corridor walls to adiabatic
|
2385
|
+
model.getSpaces.each do |space|
|
2386
|
+
next unless is_corridor(space)
|
2387
|
+
|
2388
|
+
space.surfaces.each do |surface|
|
2389
|
+
if surface.adjacentSurface.is_initialized && (surface.surfaceType.downcase == 'wall')
|
2390
|
+
surface.adjacentSurface.get.setOutsideBoundaryCondition('Adiabatic')
|
2391
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2392
|
+
end
|
2393
|
+
end
|
2394
|
+
end
|
2395
|
+
|
2326
2396
|
return true
|
2327
2397
|
end
|
2328
2398
|
|
2399
|
+
def self.is_corridor(space_or_zone)
|
2400
|
+
return space_or_zone_is_of_type(space_or_zone, HPXML::LocationOtherHousingUnit)
|
2401
|
+
end
|
2402
|
+
|
2329
2403
|
# Returns true if space is either fully or partially below grade
|
2330
2404
|
def self.space_is_below_grade(space)
|
2331
2405
|
space.surfaces.each do |surface|
|
@@ -2376,7 +2450,7 @@ class Geometry
|
|
2376
2450
|
floor_vertices.each_with_index do |fv1, fidx|
|
2377
2451
|
fv2 = floor_vertices[fidx - 1]
|
2378
2452
|
# Wall within floor edge?
|
2379
|
-
next unless is_point_between([wv1.x, wv1.y, wv1.z], [fv1.x, fv1.y, fv1.z], [fv2.x, fv2.y, fv2.z]) && is_point_between([wv2.x, wv2.y, wv2.z], [fv1.x, fv1.y, fv1.z], [fv2.x, fv2.y, fv2.z])
|
2453
|
+
next unless is_point_between([wv1.x, wv1.y, wv1.z + wall_surface.space.get.zOrigin], [fv1.x, fv1.y, fv1.z + floor_surface.space.get.zOrigin], [fv2.x, fv2.y, fv2.z + floor_surface.space.get.zOrigin]) && is_point_between([wv2.x, wv2.y, wv2.z + wall_surface.space.get.zOrigin], [fv1.x, fv1.y, fv1.z + floor_surface.space.get.zOrigin], [fv2.x, fv2.y, fv2.z + floor_surface.space.get.zOrigin])
|
2380
2454
|
|
2381
2455
|
if not adjacent_wall_surfaces.include? wall_surface
|
2382
2456
|
adjacent_wall_surfaces << wall_surface
|
@@ -2447,19 +2521,13 @@ class Geometry
|
|
2447
2521
|
end
|
2448
2522
|
|
2449
2523
|
def self.get_edges_for_surfaces(surfaces, use_top_edge)
|
2450
|
-
top_z = -99999
|
2451
|
-
bottom_z = 99999
|
2452
|
-
surfaces.each do |surface|
|
2453
|
-
top_z = [getSurfaceZValues([surface]).max, top_z].max
|
2454
|
-
bottom_z = [getSurfaceZValues([surface]).min, bottom_z].min
|
2455
|
-
end
|
2456
2524
|
edges = []
|
2457
2525
|
edge_counter = 0
|
2458
2526
|
surfaces.each do |surface|
|
2459
2527
|
if use_top_edge
|
2460
|
-
matchz =
|
2528
|
+
matchz = getSurfaceZValues([surface]).max
|
2461
2529
|
else
|
2462
|
-
matchz =
|
2530
|
+
matchz = getSurfaceZValues([surface]).min
|
2463
2531
|
end
|
2464
2532
|
|
2465
2533
|
# get vertices
|
@@ -2558,17 +2626,6 @@ class Geometry
|
|
2558
2626
|
return yValueArray
|
2559
2627
|
end
|
2560
2628
|
|
2561
|
-
# Return an array of z values for surfaces passed in. The values will be relative to the parent origin. This was intended for spaces.
|
2562
|
-
def self.getSurfaceZValues(surfaceArray)
|
2563
|
-
zValueArray = []
|
2564
|
-
surfaceArray.each do |surface|
|
2565
|
-
surface.vertices.each do |vertex|
|
2566
|
-
zValueArray << UnitConversions.convert(vertex.z, 'm', 'ft')
|
2567
|
-
end
|
2568
|
-
end
|
2569
|
-
return zValueArray
|
2570
|
-
end
|
2571
|
-
|
2572
2629
|
def self.get_surface_length(surface)
|
2573
2630
|
xvalues = getSurfaceXValues([surface])
|
2574
2631
|
yvalues = getSurfaceYValues([surface])
|
@@ -2586,4 +2643,35 @@ class Geometry
|
|
2586
2643
|
zrange = zvalues.max - zvalues.min
|
2587
2644
|
return zrange
|
2588
2645
|
end
|
2646
|
+
|
2647
|
+
def self.get_conditioned_attic_height(spaces)
|
2648
|
+
# gable roof type
|
2649
|
+
get_conditioned_spaces(spaces).each do |space|
|
2650
|
+
space.surfaces.each do |surface|
|
2651
|
+
next if surface.vertices.size != 3
|
2652
|
+
next if surface.outsideBoundaryCondition != 'Outdoors'
|
2653
|
+
next if surface.surfaceType != 'Wall'
|
2654
|
+
|
2655
|
+
return get_height_of_spaces([space])
|
2656
|
+
end
|
2657
|
+
end
|
2658
|
+
|
2659
|
+
# hip roof type
|
2660
|
+
get_conditioned_spaces(spaces).each do |space|
|
2661
|
+
space.surfaces.each do |surface|
|
2662
|
+
next if surface.outsideBoundaryCondition != 'Outdoors'
|
2663
|
+
next if surface.surfaceType != 'RoofCeiling'
|
2664
|
+
|
2665
|
+
return get_height_of_spaces([space])
|
2666
|
+
end
|
2667
|
+
end
|
2668
|
+
|
2669
|
+
return false
|
2670
|
+
end
|
2671
|
+
|
2672
|
+
def self.surface_is_rim_joist(surface, height)
|
2673
|
+
return false unless (height - Geometry.get_surface_height(surface)).abs < 0.00001
|
2674
|
+
return false unless Geometry.getSurfaceZValues([surface]).max > 0
|
2675
|
+
return true
|
2676
|
+
end
|
2589
2677
|
end
|