urbanopt-cli 0.5.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +43 -1
- data/CMakeLists.txt +14 -14
- data/FindOpenStudioSDK.cmake +11 -6
- data/Gemfile +11 -5
- data/LICENSE.md +11 -1
- data/Rakefile +16 -6
- data/example_files/Gemfile +8 -8
- data/example_files/example_project_combined.json +100 -5
- data/example_files/example_project_with_streets.json +826 -0
- data/example_files/mappers/Baseline.rb +107 -59
- data/example_files/mappers/CreateBar.rb +17 -7
- data/example_files/mappers/EvCharging.rb +20 -10
- data/example_files/mappers/Floorspace.rb +17 -7
- data/example_files/mappers/HighEfficiency.rb +20 -8
- data/example_files/mappers/HighEfficiencyCreateBar.rb +19 -8
- data/example_files/mappers/HighEfficiencyFloorspace.rb +19 -8
- data/example_files/mappers/ThermalStorage.rb +16 -6
- data/example_files/measures/BuildResidentialModel/measure.rb +249 -134
- data/example_files/reopt/base_assumptions.json +2 -2
- data/example_files/reopt/multiPV_assumptions.json +4 -3
- data/example_files/residential/clothes_dryer.tsv +7 -7
- data/example_files/residential/clothes_washer.tsv +1 -1
- data/example_files/residential/cooling_system.tsv +42 -22
- data/example_files/residential/dishwasher.tsv +1 -1
- data/example_files/residential/exhaust.tsv +3 -0
- data/example_files/residential/heat_pump.tsv +62 -40
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +2 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +116 -0
- data/example_files/resources/hpxml-measures/.gitignore +1 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +746 -1236
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1550 -1215
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +432 -343
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +134 -91
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.json +388 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.md +43 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +41 -65
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +36 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +35 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +35 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +36 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-plug-loads-additional-multipliers.osw → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw} +41 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +37 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +36 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +45 -69
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +49 -73
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-50percent.osw → base-location-honolulu-hi.osw} +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +44 -70
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +37 -61
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +60 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +38 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-portable-heater.osw → extra-second-heating-system-portable-heater-to-heating-system.osw} +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +39 -63
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +38 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/{multipliers-without-plug-loads.osw → multipliers-without-tv-plug-loads.osw} +40 -64
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +38 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
- data/example_files/resources/hpxml-measures/Changelog.md +249 -0
- data/example_files/resources/hpxml-measures/Gemfile +3 -4
- data/example_files/resources/hpxml-measures/Gemfile.lock +27 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +318 -1283
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -121
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +7 -97
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +600 -203
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +21 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +114 -22
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +112 -177
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +16 -180
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +543 -94
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +4 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +410 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +27 -25
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +782 -460
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +455 -107
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1466 -1403
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1391 -1467
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +2 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +20 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +85 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +4 -26
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +14 -33
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +3 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +43 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +24 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +32 -30
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +6 -29
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +523 -635
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +151 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +4 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +297 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +26 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +26 -0
- data/example_files/resources/hpxml-measures/README.md +4 -5
- data/example_files/resources/hpxml-measures/Rakefile +1 -2
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +140 -47
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +351 -495
- data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +260 -189
- data/example_files/resources/hpxml-measures/docs/source/conf.py +4 -1
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +3 -3
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -105
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +538 -396
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +158 -130
- data/example_files/resources/hpxml-measures/tasks.rb +1497 -736
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +10 -10
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +36 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +5 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +5 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +5 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +28 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +28 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +23 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +23 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +23 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +6 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +8 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +17 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +9 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +601 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +22 -21
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2475 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +577 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +644 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +6 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +558 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +558 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed.xml} +557 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed.xml} +557 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml → base-hvac-autosize-boiler-elec-only.xml} +517 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml → base-hvac-autosize-boiler-gas-central-ac-1-speed.xml} +569 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml → base-hvac-autosize-boiler-gas-only.xml} +518 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml → base-hvac-autosize-central-ac-only-1-speed.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml → base-hvac-autosize-central-ac-only-2-speed.xml} +547 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml → base-hvac-autosize-central-ac-only-var-speed.xml} +547 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml → base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml} +2 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml → base-hvac-autosize-elec-resistance-only.xml} +508 -509
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml → base-hvac-autosize-evap-cooler-furnace-gas.xml} +553 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml → base-hvac-autosize-floor-furnace-propane-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml → base-hvac-autosize-furnace-elec-only.xml} +547 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-2-speed.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-var-speed.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +548 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml → base-hvac-autosize-furnace-gas-room-ac.xml} +558 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +555 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml} +562 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml → base-hvac-autosize-ground-to-air-heat-pump.xml} +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +547 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml} +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-room-ac-only-autosize.xml → base-hvac-autosize-room-ac-only.xml} +507 -508
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-stove-oil-only-autosize.xml → base-hvac-autosize-stove-oil-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml → base-hvac-autosize-wall-furnace-elec-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +7 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +11 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +512 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +548 -550
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/slab-zero-exposed-perimeter.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +568 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +566 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml} +571 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-install-quality-all-furnace-gas-only.xml} +552 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml} +552 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +565 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +569 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +570 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +1 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +5 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +6 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +3 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +512 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +7 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +37 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +37 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +517 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +577 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +11 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +32 -29
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +4 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +8 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +12 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +8 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-50percent.xml → invalid_files/dehumidifier-fraction-served.xml} +534 -523
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +7 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +448 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +14 -60
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +760 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +761 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +460 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +579 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +3 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +920 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +407 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +574 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +591 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +591 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +465 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +473 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +9 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +916 -909
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +15 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1657 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ideal-air.xml → invalid_files/multiple-shared-cooling-systems.xml} +431 -498
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +5 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +3 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +571 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +6 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +4 -3
- data/example_files/resources/hpxml-measures/workflow/template.osw +5 -1
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +294 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +27 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +294 -0
- data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +130 -0
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +324 -382
- data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
- data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
- data/example_files/visualization/input_visualization_feature.html +13 -14
- data/example_files/visualization/input_visualization_scenario.html +14 -9
- data/lib/uo_cli.rb +293 -60
- data/lib/uo_cli/version.rb +17 -7
- data/requirements.txt +2 -0
- data/scripts/setup-env-gitbash.sh +4 -4
- data/scripts/setup-env-unix.sh +4 -4
- data/scripts/setup-env.bat +3 -3
- data/scripts/setup-env.ps1 +3 -3
- data/uo_cli.gemspec +10 -7
- metadata +320 -82
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
- data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
- data/example_files/resources/hpxml-measures/.circleci/config.yml +0 -20
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +0 -74
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +0 -369
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +0 -109
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +0 -835
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +0 -563
@@ -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,6 +66,7 @@ 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:,
|
@@ -47,6 +81,7 @@ class Geometry
|
|
47
81
|
garage_position = geometry_garage_position
|
48
82
|
foundation_type = geometry_foundation_type
|
49
83
|
foundation_height = geometry_foundation_height
|
84
|
+
rim_joist_height = geometry_rim_joist_height
|
50
85
|
attic_type = geometry_attic_type
|
51
86
|
roof_type = geometry_roof_type
|
52
87
|
roof_pitch = geometry_roof_pitch
|
@@ -79,6 +114,7 @@ class Geometry
|
|
79
114
|
garage_width = UnitConversions.convert(garage_width, 'ft', 'm')
|
80
115
|
garage_depth = UnitConversions.convert(garage_depth, 'ft', 'm')
|
81
116
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
117
|
+
rim_joist_height = UnitConversions.convert(rim_joist_height, 'ft', 'm')
|
82
118
|
|
83
119
|
garage_area = garage_width * garage_depth
|
84
120
|
has_garage = false
|
@@ -126,12 +162,9 @@ class Geometry
|
|
126
162
|
return false
|
127
163
|
end
|
128
164
|
|
129
|
-
# starting spaces
|
130
|
-
runner.registerInitialCondition("The building started with #{model.getSpaces.size} spaces.")
|
131
|
-
|
132
165
|
# create living zone
|
133
166
|
living_zone = OpenStudio::Model::ThermalZone.new(model)
|
134
|
-
living_zone.setName(
|
167
|
+
living_zone.setName(HPXML::LocationLivingSpace)
|
135
168
|
|
136
169
|
foundation_offset = 0.0
|
137
170
|
if foundation_type == HPXML::FoundationTypeAmbient
|
@@ -142,13 +175,14 @@ class Geometry
|
|
142
175
|
foundation_polygon_with_wrong_zs = nil
|
143
176
|
for floor in (0..num_floors - 1)
|
144
177
|
|
145
|
-
z = wall_height * floor + foundation_offset
|
178
|
+
z = wall_height * floor + foundation_offset + rim_joist_height
|
146
179
|
|
147
|
-
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
|
148
181
|
|
149
182
|
# create garage zone
|
183
|
+
garage_space_name = HPXML::LocationGarage
|
150
184
|
garage_zone = OpenStudio::Model::ThermalZone.new(model)
|
151
|
-
garage_zone.setName(
|
185
|
+
garage_zone.setName(garage_space_name)
|
152
186
|
|
153
187
|
# make points and polygons
|
154
188
|
if garage_position == 'Right'
|
@@ -168,12 +202,10 @@ class Geometry
|
|
168
202
|
# make space
|
169
203
|
garage_space = OpenStudio::Model::Space::fromFloorPrint(garage_polygon, wall_height, model)
|
170
204
|
garage_space = garage_space.get
|
171
|
-
garage_space_name = 'garage space'
|
172
205
|
garage_space.setName(garage_space_name)
|
173
206
|
garage_space_type = OpenStudio::Model::SpaceType.new(model)
|
174
|
-
garage_space_type.setStandardsSpaceType(
|
207
|
+
garage_space_type.setStandardsSpaceType(garage_space_name)
|
175
208
|
garage_space.setSpaceType(garage_space_type)
|
176
|
-
runner.registerInfo("Set #{garage_space_name}.")
|
177
209
|
|
178
210
|
# set this to the garage zone
|
179
211
|
garage_space.setThermalZone(garage_zone)
|
@@ -212,14 +244,13 @@ class Geometry
|
|
212
244
|
end
|
213
245
|
end
|
214
246
|
foundation_polygon_with_wrong_zs = living_polygon
|
215
|
-
|
216
247
|
else # first floor without garage or above first floor
|
217
248
|
|
218
249
|
if has_garage
|
219
|
-
garage_se_point = OpenStudio::Point3d.new(garage_se_point.x, garage_se_point.y,
|
220
|
-
garage_sw_point = OpenStudio::Point3d.new(garage_sw_point.x, garage_sw_point.y,
|
221
|
-
garage_nw_point = OpenStudio::Point3d.new(garage_nw_point.x, garage_nw_point.y,
|
222
|
-
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)
|
223
254
|
if garage_position == 'Right'
|
224
255
|
sw_point = OpenStudio::Point3d.new(0, 0, z)
|
225
256
|
nw_point = OpenStudio::Point3d.new(0, width, z)
|
@@ -251,7 +282,7 @@ class Geometry
|
|
251
282
|
ne_point = OpenStudio::Point3d.new(length, width, z)
|
252
283
|
se_point = OpenStudio::Point3d.new(length, 0, z)
|
253
284
|
living_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
254
|
-
if z == foundation_offset
|
285
|
+
if z == foundation_offset + rim_joist_height
|
255
286
|
foundation_polygon_with_wrong_zs = living_polygon
|
256
287
|
end
|
257
288
|
|
@@ -263,7 +294,7 @@ class Geometry
|
|
263
294
|
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon, wall_height, model)
|
264
295
|
living_space = living_space.get
|
265
296
|
if floor > 0
|
266
|
-
living_space_name = "
|
297
|
+
living_space_name = "#{HPXML::LocationLivingSpace}|story #{floor + 1}"
|
267
298
|
else
|
268
299
|
living_space_name = HPXML::LocationLivingSpace
|
269
300
|
end
|
@@ -271,7 +302,6 @@ class Geometry
|
|
271
302
|
living_space_type = OpenStudio::Model::SpaceType.new(model)
|
272
303
|
living_space_type.setStandardsSpaceType(HPXML::LocationLivingSpace)
|
273
304
|
living_space.setSpaceType(living_space_type)
|
274
|
-
runner.registerInfo("Set #{living_space_name}.")
|
275
305
|
|
276
306
|
# set these to the living zone
|
277
307
|
living_space.setThermalZone(living_zone)
|
@@ -281,7 +311,6 @@ class Geometry
|
|
281
311
|
m[1, 3] = 0
|
282
312
|
m[2, 3] = z
|
283
313
|
living_space.changeTransformation(OpenStudio::Transformation.new(m))
|
284
|
-
|
285
314
|
end
|
286
315
|
|
287
316
|
# Attic
|
@@ -370,23 +399,21 @@ class Geometry
|
|
370
399
|
if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
|
371
400
|
# create attic zone
|
372
401
|
attic_zone = OpenStudio::Model::ThermalZone.new(model)
|
373
|
-
attic_zone.setName("#{attic_type} zone")
|
374
402
|
attic_space.setThermalZone(attic_zone)
|
375
403
|
if attic_type == HPXML::AtticTypeVented
|
376
|
-
|
377
|
-
|
378
|
-
|
404
|
+
attic_space_name = HPXML::LocationAtticVented
|
405
|
+
elsif attic_type == HPXML::AtticTypeUnvented
|
406
|
+
attic_space_name = HPXML::LocationAtticUnvented
|
379
407
|
end
|
408
|
+
attic_zone.setName(attic_space_name)
|
380
409
|
elsif attic_type == HPXML::AtticTypeConditioned
|
381
410
|
attic_space.setThermalZone(living_zone)
|
382
|
-
|
411
|
+
attic_space_name = HPXML::LocationLivingSpace
|
383
412
|
end
|
384
|
-
attic_space_name = "#{attic_type} space"
|
385
413
|
attic_space.setName(attic_space_name)
|
386
414
|
attic_space_type = OpenStudio::Model::SpaceType.new(model)
|
387
|
-
attic_space_type.setStandardsSpaceType(
|
415
|
+
attic_space_type.setStandardsSpaceType(attic_space_name)
|
388
416
|
attic_space.setSpaceType(attic_space_type)
|
389
|
-
runner.registerInfo("Set #{attic_space_name}.")
|
390
417
|
|
391
418
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
392
419
|
m[0, 3] = 0
|
@@ -403,8 +430,6 @@ class Geometry
|
|
403
430
|
|
404
431
|
# create foundation zone
|
405
432
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
406
|
-
foundation_zone_name = "#{foundation_type} zone"
|
407
|
-
foundation_zone.setName(foundation_zone_name)
|
408
433
|
|
409
434
|
# make polygons
|
410
435
|
p = OpenStudio::Point3dVector.new
|
@@ -417,22 +442,21 @@ class Geometry
|
|
417
442
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_polygon, foundation_height, model)
|
418
443
|
foundation_space = foundation_space.get
|
419
444
|
if foundation_type == HPXML::FoundationTypeCrawlspaceVented
|
420
|
-
|
445
|
+
foundation_space_name = HPXML::LocationCrawlspaceVented
|
421
446
|
elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
422
|
-
|
447
|
+
foundation_space_name = HPXML::LocationCrawlspaceUnvented
|
423
448
|
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
424
|
-
|
449
|
+
foundation_space_name = HPXML::LocationBasementUnconditioned
|
425
450
|
elsif foundation_type == HPXML::FoundationTypeBasementConditioned
|
426
|
-
|
451
|
+
foundation_space_name = HPXML::LocationBasementConditioned
|
427
452
|
elsif foundation_type == HPXML::FoundationTypeAmbient
|
428
|
-
|
453
|
+
foundation_space_name = HPXML::LocationOutside
|
429
454
|
end
|
430
|
-
foundation_space_name
|
455
|
+
foundation_zone.setName(foundation_space_name)
|
431
456
|
foundation_space.setName(foundation_space_name)
|
432
457
|
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
433
|
-
foundation_space_type.setStandardsSpaceType(
|
458
|
+
foundation_space_type.setStandardsSpaceType(foundation_space_name)
|
434
459
|
foundation_space.setSpaceType(foundation_space_type)
|
435
|
-
runner.registerInfo("Set #{foundation_space_name}.")
|
436
460
|
|
437
461
|
# set these to the foundation zone
|
438
462
|
foundation_space.setThermalZone(foundation_zone)
|
@@ -456,6 +480,8 @@ class Geometry
|
|
456
480
|
m[2, 3] = z
|
457
481
|
foundation_space.changeTransformation(OpenStudio::Transformation.new(m))
|
458
482
|
|
483
|
+
# Rim Joist
|
484
|
+
add_rim_joist(model, foundation_polygon_with_wrong_zs, foundation_space, rim_joist_height, foundation_height)
|
459
485
|
end
|
460
486
|
|
461
487
|
# put all of the spaces in the model into a vector
|
@@ -514,10 +540,10 @@ class Geometry
|
|
514
540
|
se_point = OpenStudio::Point3d.new(se_point.x, se_point.y, se_point.z - living_space.zOrigin)
|
515
541
|
end
|
516
542
|
else
|
517
|
-
nw_point = OpenStudio::Point3d.new(nw_point.x, nw_point.y, num_floors * nw_point.z)
|
518
|
-
ne_point = OpenStudio::Point3d.new(ne_point.x, ne_point.y, num_floors * ne_point.z)
|
519
|
-
sw_point = OpenStudio::Point3d.new(sw_point.x, sw_point.y, num_floors * sw_point.z)
|
520
|
-
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)
|
521
547
|
end
|
522
548
|
|
523
549
|
garage_attic_height = (ne_point.x - nw_point.x) / 2 * roof_pitch
|
@@ -538,8 +564,8 @@ class Geometry
|
|
538
564
|
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, garage_attic_height + wall_height)
|
539
565
|
end
|
540
566
|
else
|
541
|
-
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)
|
542
|
-
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)
|
543
569
|
end
|
544
570
|
|
545
571
|
polygon_w_roof = make_polygon(nw_point, sw_point, roof_s_point, roof_n_point)
|
@@ -560,31 +586,29 @@ class Geometry
|
|
560
586
|
wall_s.setOutsideBoundaryCondition('Outdoors')
|
561
587
|
|
562
588
|
garage_attic_space = OpenStudio::Model::Space.new(model)
|
563
|
-
garage_attic_space_name = 'garage attic space'
|
564
|
-
garage_attic_space.setName(garage_attic_space_name)
|
565
589
|
deck_w.setSpace(garage_attic_space)
|
566
590
|
deck_e.setSpace(garage_attic_space)
|
567
591
|
wall_n.setSpace(garage_attic_space)
|
568
592
|
wall_s.setSpace(garage_attic_space)
|
569
593
|
|
570
594
|
if attic_type == HPXML::AtticTypeConditioned
|
571
|
-
|
595
|
+
garage_attic_space_name = attic_space_name
|
572
596
|
garage_attic_space.setThermalZone(living_zone)
|
573
597
|
else
|
574
598
|
if num_floors > 1
|
575
|
-
|
599
|
+
garage_attic_space_name = attic_space_name
|
576
600
|
garage_attic_space.setThermalZone(attic_zone)
|
577
601
|
else
|
578
|
-
|
602
|
+
garage_attic_space_name = garage_space_name
|
579
603
|
garage_attic_space.setThermalZone(garage_zone)
|
580
604
|
end
|
581
605
|
end
|
582
606
|
|
583
607
|
surface.createAdjacentSurface(garage_attic_space) # garage attic floor
|
608
|
+
garage_attic_space.setName(garage_attic_space_name)
|
584
609
|
garage_attic_space_type = OpenStudio::Model::SpaceType.new(model)
|
585
|
-
garage_attic_space_type.setStandardsSpaceType(
|
610
|
+
garage_attic_space_type.setStandardsSpaceType(garage_attic_space_name)
|
586
611
|
garage_attic_space.setSpaceType(garage_attic_space_type)
|
587
|
-
runner.registerInfo("Set #{garage_attic_space_name}.")
|
588
612
|
|
589
613
|
# put all of the spaces in the model into a vector
|
590
614
|
spaces = OpenStudio::Model::SpaceVector.new
|
@@ -620,15 +644,45 @@ class Geometry
|
|
620
644
|
|
621
645
|
garage_attic_space.remove
|
622
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
|
+
|
623
663
|
break
|
624
664
|
end
|
625
665
|
end
|
626
666
|
|
667
|
+
garage_spaces = get_garage_spaces(model.getSpaces)
|
668
|
+
|
627
669
|
# set foundation outside boundary condition to Kiva "foundation"
|
628
670
|
model.getSurfaces.each do |surface|
|
629
|
-
|
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'
|
630
675
|
|
631
|
-
|
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
|
632
686
|
end
|
633
687
|
|
634
688
|
# set foundation walls adjacent to garage to adiabatic
|
@@ -639,7 +693,7 @@ class Geometry
|
|
639
693
|
|
640
694
|
foundation_walls << surface
|
641
695
|
end
|
642
|
-
|
696
|
+
|
643
697
|
garage_spaces.each do |garage_space|
|
644
698
|
garage_space.surfaces.each do |surface|
|
645
699
|
next if surface.surfaceType.downcase != 'floor'
|
@@ -654,6 +708,15 @@ class Geometry
|
|
654
708
|
return true
|
655
709
|
end
|
656
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
|
+
|
657
720
|
def self.make_one_space_from_multiple_spaces(model, spaces)
|
658
721
|
new_space = OpenStudio::Model::Space.new(model)
|
659
722
|
spaces.each do |space|
|
@@ -912,12 +975,12 @@ class Geometry
|
|
912
975
|
# If the total window area for the facade is less than the minimum window area,
|
913
976
|
# set all of the window area to the surface with the greatest available wall area on any facade
|
914
977
|
surface = surface_avail_area.max_by { |k, v| v }[0]
|
915
|
-
next if
|
978
|
+
next if get_facade_for_surface(surface) == facade
|
916
979
|
next if surface_avail_area[surface] == facade_avail_area[facade]
|
917
980
|
|
918
981
|
surface_window_area[surface] += target_facade_areas[facade]
|
919
982
|
|
920
|
-
new_facade =
|
983
|
+
new_facade = get_facade_for_surface(surface)
|
921
984
|
area_moved = target_facade_areas[facade]
|
922
985
|
target_facade_areas[facade] = 0
|
923
986
|
target_facade_areas[new_facade] = surface_window_area[surface]
|
@@ -1052,8 +1115,6 @@ class Geometry
|
|
1052
1115
|
sub_surface.setName("#{surface.name} - Skylight")
|
1053
1116
|
sub_surface.setSurface(surface)
|
1054
1117
|
|
1055
|
-
runner.registerInfo("Added a skylight, totaling #{skylight_area.round(1)} ft^2, to #{surface.name}.")
|
1056
|
-
|
1057
1118
|
if not constructions[facade].nil?
|
1058
1119
|
sub_surface.setConstruction(constructions[facade])
|
1059
1120
|
end
|
@@ -1140,7 +1201,7 @@ class Geometry
|
|
1140
1201
|
add_window_to_wall(surface, window_width, window_height, group_cx, group_cy, win_num, facade, constructions, model, runner)
|
1141
1202
|
end
|
1142
1203
|
end
|
1143
|
-
|
1204
|
+
|
1144
1205
|
return true
|
1145
1206
|
end
|
1146
1207
|
|
@@ -1321,7 +1382,7 @@ class Geometry
|
|
1321
1382
|
next unless surface.outsideBoundaryCondition.downcase == 'adiabatic'
|
1322
1383
|
|
1323
1384
|
model.getSpaces.each do |potential_corridor_space|
|
1324
|
-
next unless potential_corridor_space.spaceType.get.standardsSpaceType.get ==
|
1385
|
+
next unless potential_corridor_space.spaceType.get.standardsSpaceType.get == HPXML::LocationOtherHousingUnit
|
1325
1386
|
|
1326
1387
|
potential_corridor_space.surfaces.each do |potential_corridor_surface|
|
1327
1388
|
next unless surface.reverseEqualVertices(potential_corridor_surface)
|
@@ -1431,8 +1492,6 @@ class Geometry
|
|
1431
1492
|
|
1432
1493
|
if door_sub_surface.nil? && unit_has_door
|
1433
1494
|
runner.registerWarning('Could not find appropriate surface for the door. No door was added.')
|
1434
|
-
elsif not door_sub_surface.nil?
|
1435
|
-
runner.registerInfo("Added #{door_area.round(1)} ft^2 door.")
|
1436
1495
|
end
|
1437
1496
|
|
1438
1497
|
return true
|
@@ -1460,6 +1519,7 @@ class Geometry
|
|
1460
1519
|
geometry_corridor_position:,
|
1461
1520
|
geometry_foundation_type:,
|
1462
1521
|
geometry_foundation_height:,
|
1522
|
+
geometry_rim_joist_height:,
|
1463
1523
|
geometry_attic_type:,
|
1464
1524
|
geometry_roof_type:,
|
1465
1525
|
geometry_roof_pitch:,
|
@@ -1474,6 +1534,7 @@ class Geometry
|
|
1474
1534
|
corridor_position = geometry_corridor_position
|
1475
1535
|
foundation_type = geometry_foundation_type
|
1476
1536
|
foundation_height = geometry_foundation_height
|
1537
|
+
rim_joist_height = geometry_rim_joist_height
|
1477
1538
|
attic_type = geometry_attic_type
|
1478
1539
|
roof_type = geometry_roof_type
|
1479
1540
|
roof_pitch = geometry_roof_pitch
|
@@ -1521,14 +1582,16 @@ class Geometry
|
|
1521
1582
|
runner.registerError('Invalid horizontal location entered.')
|
1522
1583
|
return false
|
1523
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
|
1524
1589
|
|
1525
1590
|
# Convert to SI
|
1526
1591
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
1527
1592
|
wall_height = UnitConversions.convert(wall_height, 'ft', 'm')
|
1528
1593
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
1529
|
-
|
1530
|
-
# starting spaces
|
1531
|
-
runner.registerInitialCondition("The building started with #{model.getSpaces.size} spaces.")
|
1594
|
+
rim_joist_height = UnitConversions.convert(rim_joist_height, 'ft', 'm')
|
1532
1595
|
|
1533
1596
|
if (foundation_type == HPXML::FoundationTypeBasementConditioned) && (attic_type == HPXML::AtticTypeConditioned)
|
1534
1597
|
footprint = cfa / (num_floors + 2)
|
@@ -1546,11 +1609,11 @@ class Geometry
|
|
1546
1609
|
foundation_back_polygon = nil
|
1547
1610
|
|
1548
1611
|
# create the front prototype unit
|
1549
|
-
nw_point = OpenStudio::Point3d.new(0, 0,
|
1550
|
-
ne_point = OpenStudio::Point3d.new(x, 0,
|
1551
|
-
sw_point = OpenStudio::Point3d.new(0, -y,
|
1552
|
-
se_point = OpenStudio::Point3d.new(x, -y,
|
1553
|
-
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)
|
1554
1617
|
|
1555
1618
|
# foundation
|
1556
1619
|
if (foundation_height > 0) && foundation_front_polygon.nil?
|
@@ -1574,7 +1637,6 @@ class Geometry
|
|
1574
1637
|
living_spaces_front << living_space
|
1575
1638
|
|
1576
1639
|
# Adiabatic surfaces for walls
|
1577
|
-
##############################################################################################
|
1578
1640
|
# Map unit location to adiabatic surfaces (#if `key` unit then make `value(s)` adiabatic)
|
1579
1641
|
horz_hash = { 'Left' => ['right'], 'Right' => ['left'], 'Middle' => ['left', 'right'], 'None' => [] }
|
1580
1642
|
adb_facade = horz_hash[horizontal_location]
|
@@ -1582,35 +1644,21 @@ class Geometry
|
|
1582
1644
|
adb_facade += ['back']
|
1583
1645
|
end
|
1584
1646
|
|
1585
|
-
if adb_facade.include? 'left'
|
1586
|
-
left_neighbor_offset = 0
|
1587
|
-
end
|
1588
|
-
if adb_facade.include? 'right'
|
1589
|
-
right_neighbor_offset = 0
|
1590
|
-
end
|
1591
|
-
if adb_facade.include? 'back'
|
1592
|
-
back_neighbor_offset = 0
|
1593
|
-
end
|
1594
|
-
if adb_facade.include? 'front'
|
1595
|
-
front_neighbor_offset = 0
|
1596
|
-
end
|
1597
|
-
|
1598
1647
|
adiabatic_surf = adb_facade
|
1599
1648
|
# Make surfaces adiabatic
|
1600
1649
|
model.getSpaces.each do |space|
|
1601
1650
|
space.surfaces.each do |surface|
|
1602
|
-
os_facade =
|
1651
|
+
os_facade = get_facade_for_surface(surface)
|
1603
1652
|
next unless surface.surfaceType == 'Wall'
|
1604
1653
|
next unless adb_facade.include? os_facade
|
1605
1654
|
x_ft = UnitConversions.convert(x, 'm', 'ft')
|
1606
|
-
max_x =
|
1607
|
-
min_x =
|
1655
|
+
max_x = getSurfaceXValues([surface]).max
|
1656
|
+
min_x = getSurfaceXValues([surface]).min
|
1608
1657
|
next if ((max_x - x_ft).abs >= 0.01) && (min_x > 0)
|
1609
1658
|
|
1610
1659
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
1611
1660
|
end
|
1612
1661
|
end
|
1613
|
-
##############################################################################################
|
1614
1662
|
|
1615
1663
|
attic_space_front = nil
|
1616
1664
|
attic_space_back = nil
|
@@ -1622,7 +1670,7 @@ class Geometry
|
|
1622
1670
|
new_living_space.setName("living space|story #{story}")
|
1623
1671
|
new_living_space.setSpaceType(living_space_type)
|
1624
1672
|
|
1625
|
-
m =
|
1673
|
+
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
1626
1674
|
m[2, 3] = wall_height * (story - 1)
|
1627
1675
|
new_living_space.setTransformation(OpenStudio::Transformation.new(m))
|
1628
1676
|
new_living_space.setThermalZone(living_zone)
|
@@ -1632,7 +1680,7 @@ class Geometry
|
|
1632
1680
|
|
1633
1681
|
# attic
|
1634
1682
|
if roof_type != 'flat'
|
1635
|
-
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)
|
1636
1684
|
if attic_type == HPXML::AtticTypeConditioned
|
1637
1685
|
attic_space.setName("#{attic_type} space")
|
1638
1686
|
attic_space.setThermalZone(living_zone)
|
@@ -1644,10 +1692,6 @@ class Geometry
|
|
1644
1692
|
end
|
1645
1693
|
end
|
1646
1694
|
|
1647
|
-
# create the unit
|
1648
|
-
unit_spaces_hash = {}
|
1649
|
-
unit_spaces_hash[1] = [living_spaces_front, 1]
|
1650
|
-
|
1651
1695
|
# foundation
|
1652
1696
|
if foundation_height > 0
|
1653
1697
|
foundation_spaces = []
|
@@ -1656,7 +1700,7 @@ class Geometry
|
|
1656
1700
|
foundation_space_front = []
|
1657
1701
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_front_polygon, foundation_height, model)
|
1658
1702
|
foundation_space = foundation_space.get
|
1659
|
-
m =
|
1703
|
+
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
1660
1704
|
m[2, 3] = foundation_height
|
1661
1705
|
foundation_space.changeTransformation(OpenStudio::Transformation.new(m))
|
1662
1706
|
foundation_space.setXOrigin(0)
|
@@ -1665,20 +1709,19 @@ class Geometry
|
|
1665
1709
|
|
1666
1710
|
if foundation_type == HPXML::FoundationTypeBasementConditioned
|
1667
1711
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1668
|
-
foundation_space.setName(
|
1669
|
-
foundation_zone.setName(
|
1712
|
+
foundation_space.setName(HPXML::FoundationTypeBasementConditioned)
|
1713
|
+
foundation_zone.setName(HPXML::FoundationTypeBasementConditioned)
|
1670
1714
|
foundation_space.setThermalZone(foundation_zone)
|
1671
1715
|
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1672
|
-
foundation_space_type.setStandardsSpaceType(
|
1716
|
+
foundation_space_type.setStandardsSpaceType(HPXML::LocationBasementConditioned)
|
1673
1717
|
foundation_space.setSpaceType(foundation_space_type)
|
1674
1718
|
end
|
1675
1719
|
|
1676
1720
|
foundation_space_front << foundation_space
|
1677
1721
|
foundation_spaces << foundation_space
|
1678
1722
|
|
1679
|
-
|
1680
|
-
|
1681
|
-
end
|
1723
|
+
# Rim Joist
|
1724
|
+
add_rim_joist(model, foundation_front_polygon, foundation_space, rim_joist_height, 0)
|
1682
1725
|
|
1683
1726
|
# put all of the spaces in the model into a vector
|
1684
1727
|
spaces = OpenStudio::Model::SpaceVector.new
|
@@ -1691,46 +1734,42 @@ class Geometry
|
|
1691
1734
|
OpenStudio::Model.matchSurfaces(spaces)
|
1692
1735
|
|
1693
1736
|
if [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented, HPXML::FoundationTypeBasementUnconditioned].include? foundation_type
|
1694
|
-
|
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)
|
1695
1741
|
if foundation_type == HPXML::FoundationTypeCrawlspaceVented
|
1696
|
-
|
1742
|
+
foundation_space_name = HPXML::LocationCrawlspaceVented
|
1697
1743
|
elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
1698
|
-
|
1744
|
+
foundation_space_name = HPXML::LocationCrawlspaceUnvented
|
1699
1745
|
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
1700
|
-
|
1701
|
-
end
|
1702
|
-
if [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented].include? foundation_type
|
1703
|
-
foundation_space.setName("#{foundation_type} space")
|
1704
|
-
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1705
|
-
foundation_zone.setName('crawl zone')
|
1706
|
-
foundation_space.setThermalZone(foundation_zone)
|
1707
|
-
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1708
|
-
foundation_space_type.setStandardsSpaceType(foundation_space_type_name)
|
1709
|
-
foundation_space.setSpaceType(foundation_space_type)
|
1710
|
-
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
1711
|
-
foundation_space.setName("#{foundation_type} space")
|
1712
|
-
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1713
|
-
foundation_zone.setName("#{foundation_type} zone")
|
1714
|
-
foundation_space.setThermalZone(foundation_zone)
|
1715
|
-
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1716
|
-
foundation_space_type.setStandardsSpaceType(foundation_space_type_name)
|
1717
|
-
foundation_space.setSpaceType(foundation_space_type)
|
1746
|
+
foundation_space_name = HPXML::LocationBasementUnconditioned
|
1718
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)
|
1719
1756
|
end
|
1720
1757
|
|
1721
1758
|
# set foundation walls to ground
|
1722
1759
|
spaces = model.getSpaces
|
1723
1760
|
spaces.each do |space|
|
1724
|
-
next unless
|
1761
|
+
next unless get_space_floor_z(space) + UnitConversions.convert(space.zOrigin, 'm', 'ft') < 0
|
1725
1762
|
surfaces = space.surfaces
|
1726
1763
|
surfaces.each do |surface|
|
1727
1764
|
next if surface.surfaceType.downcase != 'wall'
|
1728
1765
|
|
1729
|
-
os_facade =
|
1766
|
+
os_facade = get_facade_for_surface(surface)
|
1730
1767
|
if adb_facade.include? os_facade
|
1731
1768
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
1732
|
-
|
1769
|
+
elsif getSurfaceZValues([surface]).min < 0
|
1733
1770
|
surface.setOutsideBoundaryCondition('Foundation')
|
1771
|
+
else
|
1772
|
+
surface.setOutsideBoundaryCondition('Outdoors')
|
1734
1773
|
end
|
1735
1774
|
end
|
1736
1775
|
end
|
@@ -1749,47 +1788,47 @@ class Geometry
|
|
1749
1788
|
|
1750
1789
|
if [HPXML::AtticTypeVented, HPXML::AtticTypeUnvented].include?(attic_type) && (roof_type != 'flat')
|
1751
1790
|
if offset == 0
|
1752
|
-
# x *= num_units
|
1753
|
-
# if has_rear_units
|
1754
|
-
# x /= 2
|
1755
|
-
# end
|
1756
1791
|
attic_spaces.each do |attic_space|
|
1757
1792
|
attic_space.remove
|
1758
1793
|
end
|
1759
|
-
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)
|
1760
1795
|
else
|
1761
|
-
attic_space =
|
1796
|
+
attic_space = make_one_space_from_multiple_spaces(model, attic_spaces)
|
1762
1797
|
end
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
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
|
1772
1813
|
end
|
1814
|
+
attic_space.setName(attic_space_name)
|
1773
1815
|
attic_space_type = OpenStudio::Model::SpaceType.new(model)
|
1774
|
-
attic_space_type.setStandardsSpaceType(
|
1816
|
+
attic_space_type.setStandardsSpaceType(attic_space_name)
|
1775
1817
|
attic_space.setSpaceType(attic_space_type)
|
1776
|
-
end
|
1777
1818
|
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
min_x = Geometry.getSurfaceXValues([surface]).min
|
1788
|
-
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)
|
1789
1828
|
|
1790
|
-
|
1829
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
1830
|
+
end
|
1791
1831
|
end
|
1792
|
-
################################################################
|
1793
1832
|
|
1794
1833
|
# put all of the spaces in the model into a vector
|
1795
1834
|
spaces = OpenStudio::Model::SpaceVector.new
|
@@ -1811,108 +1850,61 @@ class Geometry
|
|
1811
1850
|
return true
|
1812
1851
|
end
|
1813
1852
|
|
1814
|
-
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)
|
1815
1854
|
y_rear = 0
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
ne_point = OpenStudio::Point3d.new(x, 0, wall_height * num_floors)
|
1828
|
-
sw_point = OpenStudio::Point3d.new(0, -y, wall_height * num_floors)
|
1829
|
-
se_point = OpenStudio::Point3d.new(x, -y, wall_height * num_floors)
|
1830
|
-
# else
|
1831
|
-
# nw_point = OpenStudio::Point3d.new(0, -y, wall_height * num_floors)
|
1832
|
-
# ne_point = OpenStudio::Point3d.new(x, -y, wall_height * num_floors)
|
1833
|
-
# sw_point = OpenStudio::Point3d.new(0, 0, wall_height * num_floors)
|
1834
|
-
# se_point = OpenStudio::Point3d.new(x, 0, wall_height * num_floors)
|
1835
|
-
# end
|
1836
|
-
attic_polygon = Geometry.make_polygon(sw_point, nw_point, ne_point, se_point)
|
1837
|
-
|
1838
|
-
# if y_tot >= x_tot
|
1839
|
-
# attic_height = (x_tot / 2.0) * roof_pitch
|
1840
|
-
# else
|
1841
|
-
# attic_height = (y_tot / 2.0) * roof_pitch
|
1842
|
-
# end
|
1843
|
-
|
1844
|
-
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
|
1845
1866
|
|
1846
1867
|
side_type = nil
|
1847
1868
|
if roof_type == 'gable'
|
1848
|
-
# if y > 0
|
1849
|
-
# if x <= (y + y_rear)
|
1850
|
-
# roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear, wall_height * num_floors + attic_height)
|
1851
|
-
# roof_s_point = OpenStudio::Point3d.new(x / 2.0, -y, wall_height * num_floors + attic_height)
|
1852
|
-
# polygon_w_roof = Geometry.make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1853
|
-
# polygon_e_roof = Geometry.make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1854
|
-
# polygon_s_wall = Geometry.make_polygon(roof_s_point, sw_point, se_point)
|
1855
|
-
# polygon_n_wall = Geometry.make_polygon(roof_n_point, ne_point, nw_point)
|
1856
|
-
# else
|
1857
|
-
# roof_w_point = OpenStudio::Point3d.new(0, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1858
|
-
# roof_e_point = OpenStudio::Point3d.new(x, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1859
1869
|
roof_w_point = OpenStudio::Point3d.new(0, y_peak, wall_height * num_floors + attic_height)
|
1860
1870
|
roof_e_point = OpenStudio::Point3d.new(x, y_peak, wall_height * num_floors + attic_height)
|
1861
|
-
polygon_w_roof =
|
1862
|
-
polygon_e_roof =
|
1863
|
-
polygon_s_wall =
|
1864
|
-
polygon_n_wall =
|
1865
|
-
# end
|
1866
|
-
# else
|
1867
|
-
# if x <= y.abs
|
1868
|
-
# roof_n_point = OpenStudio::Point3d.new(x / 2.0, -y, wall_height * num_floors + attic_height)
|
1869
|
-
# roof_s_point = OpenStudio::Point3d.new(x / 2.0, 0, wall_height * num_floors + attic_height)
|
1870
|
-
# polygon_w_roof = Geometry.make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1871
|
-
# polygon_e_roof = Geometry.make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1872
|
-
# polygon_s_wall = Geometry.make_polygon(roof_s_point, sw_point, se_point)
|
1873
|
-
# polygon_n_wall = Geometry.make_polygon(roof_n_point, ne_point, nw_point)
|
1874
|
-
# else
|
1875
|
-
# roof_w_point = OpenStudio::Point3d.new(0, -y / 2.0, wall_height * num_floors + attic_height)
|
1876
|
-
# roof_e_point = OpenStudio::Point3d.new(x, -y / 2.0, wall_height * num_floors + attic_height)
|
1877
|
-
# polygon_w_roof = Geometry.make_polygon(roof_w_point, roof_e_point, ne_point, nw_point)
|
1878
|
-
# polygon_e_roof = Geometry.make_polygon(roof_e_point, roof_w_point, sw_point, se_point)
|
1879
|
-
# polygon_s_wall = Geometry.make_polygon(roof_w_point, nw_point, sw_point)
|
1880
|
-
# polygon_n_wall = Geometry.make_polygon(roof_e_point, se_point, ne_point)
|
1881
|
-
# end
|
1882
|
-
# 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)
|
1883
1875
|
side_type = 'Wall'
|
1884
|
-
elsif roof_type == 'hip'
|
1876
|
+
elsif roof_type == 'hip'
|
1885
1877
|
if y > 0
|
1886
1878
|
if x <= (y + y_rear)
|
1887
1879
|
roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear - x / 2.0, wall_height * num_floors + attic_height)
|
1888
1880
|
roof_s_point = OpenStudio::Point3d.new(x / 2.0, -y + x / 2.0, wall_height * num_floors + attic_height)
|
1889
|
-
polygon_w_roof =
|
1890
|
-
polygon_e_roof =
|
1891
|
-
polygon_s_wall =
|
1892
|
-
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)
|
1893
1885
|
else
|
1894
1886
|
roof_w_point = OpenStudio::Point3d.new((y + y_rear) / 2.0, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1895
1887
|
roof_e_point = OpenStudio::Point3d.new(x - (y + y_rear) / 2.0, (y_rear - y) / 2.0, wall_height * num_floors + attic_height)
|
1896
|
-
polygon_w_roof =
|
1897
|
-
polygon_e_roof =
|
1898
|
-
polygon_s_wall =
|
1899
|
-
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)
|
1900
1892
|
end
|
1901
1893
|
else
|
1902
1894
|
if x <= y.abs
|
1903
1895
|
roof_n_point = OpenStudio::Point3d.new(x / 2.0, -y - x / 2.0, wall_height * num_floors + attic_height)
|
1904
1896
|
roof_s_point = OpenStudio::Point3d.new(x / 2.0, x / 2.0, wall_height * num_floors + attic_height)
|
1905
|
-
polygon_w_roof =
|
1906
|
-
polygon_e_roof =
|
1907
|
-
polygon_s_wall =
|
1908
|
-
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)
|
1909
1901
|
else
|
1910
1902
|
roof_w_point = OpenStudio::Point3d.new(-y / 2.0, -y / 2.0, wall_height * num_floors + attic_height)
|
1911
1903
|
roof_e_point = OpenStudio::Point3d.new(x + y / 2.0, -y / 2.0, wall_height * num_floors + attic_height)
|
1912
|
-
polygon_w_roof =
|
1913
|
-
polygon_e_roof =
|
1914
|
-
polygon_s_wall =
|
1915
|
-
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)
|
1916
1908
|
end
|
1917
1909
|
end
|
1918
1910
|
side_type = 'RoofCeiling'
|
@@ -1923,11 +1915,7 @@ class Geometry
|
|
1923
1915
|
surface_floor.setOutsideBoundaryCondition('Surface')
|
1924
1916
|
surface_w_roof = OpenStudio::Model::Surface.new(polygon_w_roof, model)
|
1925
1917
|
surface_w_roof.setSurfaceType('RoofCeiling')
|
1926
|
-
|
1927
|
-
surface_w_roof.setOutsideBoundaryCondition('Adiabatic') ###
|
1928
|
-
else
|
1929
|
-
surface_w_roof.setOutsideBoundaryCondition('Outdoors') ###
|
1930
|
-
end
|
1918
|
+
surface_w_roof.setOutsideBoundaryCondition('Outdoors')
|
1931
1919
|
surface_e_roof = OpenStudio::Model::Surface.new(polygon_e_roof, model)
|
1932
1920
|
surface_e_roof.setSurfaceType('RoofCeiling')
|
1933
1921
|
surface_e_roof.setOutsideBoundaryCondition('Outdoors')
|
@@ -1966,6 +1954,7 @@ class Geometry
|
|
1966
1954
|
geometry_balcony_depth:,
|
1967
1955
|
geometry_foundation_type:,
|
1968
1956
|
geometry_foundation_height:,
|
1957
|
+
geometry_rim_joist_height:,
|
1969
1958
|
**remainder)
|
1970
1959
|
|
1971
1960
|
cfa = geometry_cfa
|
@@ -1974,7 +1963,7 @@ class Geometry
|
|
1974
1963
|
num_floors = geometry_num_floors_above_grade
|
1975
1964
|
aspect_ratio = geometry_aspect_ratio
|
1976
1965
|
level = geometry_level.get
|
1977
|
-
|
1966
|
+
horz_location = geometry_horizontal_location.get
|
1978
1967
|
corridor_position = geometry_corridor_position
|
1979
1968
|
corridor_width = geometry_corridor_width
|
1980
1969
|
inset_width = geometry_inset_width
|
@@ -1983,19 +1972,27 @@ class Geometry
|
|
1983
1972
|
balcony_depth = geometry_balcony_depth
|
1984
1973
|
foundation_type = geometry_foundation_type
|
1985
1974
|
foundation_height = geometry_foundation_height
|
1975
|
+
rim_joist_height = geometry_rim_joist_height
|
1986
1976
|
|
1987
1977
|
if level != 'Bottom'
|
1988
1978
|
foundation_type = HPXML::LocationOtherHousingUnit
|
1989
1979
|
foundation_height = 0.0
|
1980
|
+
rim_joist_height = 0.0
|
1990
1981
|
end
|
1991
1982
|
|
1992
1983
|
num_units_per_floor = num_units / num_floors
|
1984
|
+
num_units_per_floor_actual = num_units_per_floor
|
1985
|
+
above_ground_floors = num_floors
|
1993
1986
|
|
1994
1987
|
if (num_floors > 1) && (level != 'Bottom') && (foundation_height != 0.0)
|
1995
1988
|
runner.registerWarning('Unit is not on the bottom floor, setting foundation height to 0.')
|
1996
1989
|
foundation_height = 0.0
|
1997
1990
|
end
|
1998
1991
|
|
1992
|
+
if num_floors == 1
|
1993
|
+
level = 'Bottom'
|
1994
|
+
end
|
1995
|
+
|
1999
1996
|
if (num_units_per_floor % 2 == 0) && ((corridor_position == 'Double-Loaded Interior') || (corridor_position == 'Double Exterior'))
|
2000
1997
|
unit_depth = 2
|
2001
1998
|
unit_width = num_units_per_floor / 2
|
@@ -2041,7 +2038,15 @@ class Geometry
|
|
2041
2038
|
runner.registerWarning('Specified a balcony, but there is no inset.')
|
2042
2039
|
balcony_depth = 0
|
2043
2040
|
end
|
2044
|
-
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')
|
2045
2050
|
runner.registerError('No middle horizontal location exists.')
|
2046
2051
|
return false
|
2047
2052
|
end
|
@@ -2050,52 +2055,57 @@ class Geometry
|
|
2050
2055
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
2051
2056
|
wall_height = UnitConversions.convert(wall_height, 'ft', 'm')
|
2052
2057
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
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')
|
2056
2063
|
|
2057
2064
|
# calculate the dimensions of the unit
|
2058
2065
|
footprint = cfa + inset_width * inset_depth
|
2059
2066
|
x = Math.sqrt(footprint / aspect_ratio)
|
2060
2067
|
y = footprint / x
|
2061
2068
|
|
2069
|
+
story_hash = { 'Bottom' => 0, 'Middle' => 1, 'Top' => num_floors - 1 }
|
2070
|
+
z = wall_height * story_hash[level]
|
2071
|
+
|
2062
2072
|
foundation_corr_polygon = nil
|
2063
2073
|
foundation_front_polygon = nil
|
2064
2074
|
foundation_back_polygon = nil
|
2065
2075
|
|
2066
2076
|
# create the front prototype unit footprint
|
2067
|
-
nw_point = OpenStudio::Point3d.new(0, 0,
|
2068
|
-
ne_point = OpenStudio::Point3d.new(x, 0,
|
2069
|
-
sw_point = OpenStudio::Point3d.new(0, -y,
|
2070
|
-
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)
|
2071
2081
|
|
2072
2082
|
if inset_width * inset_depth > 0
|
2073
2083
|
if inset_position == 'Right'
|
2074
2084
|
# unit footprint
|
2075
|
-
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y,
|
2076
|
-
front_point = OpenStudio::Point3d.new(x - inset_width, -y,
|
2077
|
-
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)
|
2078
2088
|
living_polygon = make_polygon(sw_point, nw_point, ne_point, side_point, inset_point, front_point)
|
2079
2089
|
# unit balcony
|
2080
2090
|
if balcony_depth > 0
|
2081
|
-
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y, wall_height)
|
2082
|
-
side_point = OpenStudio::Point3d.new(x, inset_depth - y, wall_height)
|
2083
|
-
se_point = OpenStudio::Point3d.new(x, inset_depth - y - balcony_depth, wall_height)
|
2084
|
-
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)
|
2085
2095
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([front_point, se_point, side_point, inset_point]), model)
|
2086
2096
|
end
|
2087
2097
|
else
|
2088
2098
|
# unit footprint
|
2089
|
-
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y,
|
2090
|
-
front_point = OpenStudio::Point3d.new(inset_width, -y,
|
2091
|
-
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)
|
2092
2102
|
living_polygon = make_polygon(side_point, nw_point, ne_point, se_point, front_point, inset_point)
|
2093
2103
|
# unit balcony
|
2094
2104
|
if balcony_depth > 0
|
2095
|
-
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y, wall_height)
|
2096
|
-
side_point = OpenStudio::Point3d.new(0, inset_depth - y, wall_height)
|
2097
|
-
sw_point = OpenStudio::Point3d.new(0, inset_depth - y - balcony_depth, wall_height)
|
2098
|
-
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)
|
2099
2109
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([front_point, sw_point, side_point, inset_point]), model)
|
2100
2110
|
end
|
2101
2111
|
end
|
@@ -2130,29 +2140,23 @@ class Geometry
|
|
2130
2140
|
end
|
2131
2141
|
living_spaces_front << living_space
|
2132
2142
|
|
2133
|
-
##############################################################################################
|
2134
2143
|
# Map unit location to adiabatic surfaces
|
2135
2144
|
horz_hash = { 'Left' => ['right'], 'Right' => ['left'], 'Middle' => ['left', 'right'], 'None' => [] }
|
2136
2145
|
level_hash = { 'Bottom' => ['RoofCeiling'], 'Top' => ['Floor'], 'Middle' => ['RoofCeiling', 'Floor'], 'None' => [] }
|
2137
|
-
adb_facade = horz_hash[
|
2146
|
+
adb_facade = horz_hash[horz_location]
|
2138
2147
|
adb_level = level_hash[level]
|
2139
2148
|
|
2140
2149
|
# Check levels
|
2141
2150
|
if num_floors == 1
|
2142
2151
|
adb_level = []
|
2143
2152
|
end
|
2144
|
-
# Check for exposed left and right facades
|
2145
|
-
if (num_units_per_floor == 1) || ((num_units_per_floor == 2) && (has_rear_units == true))
|
2146
|
-
adb_facade = []
|
2147
|
-
end
|
2148
2153
|
if (has_rear_units == true)
|
2149
2154
|
adb_facade += ['back']
|
2150
2155
|
end
|
2151
2156
|
|
2152
|
-
adiabatic_surf = adb_facade +
|
2153
|
-
# Make surfaces adiabatic
|
2157
|
+
adiabatic_surf = adb_facade + adb_level
|
2158
|
+
# Make living space surfaces adiabatic
|
2154
2159
|
model.getSpaces.each do |space|
|
2155
|
-
# Store has_rear_units to call in the door geometry measure
|
2156
2160
|
space.surfaces.each do |surface|
|
2157
2161
|
os_facade = get_facade_for_surface(surface)
|
2158
2162
|
if surface.surfaceType == 'Wall'
|
@@ -2168,20 +2172,20 @@ class Geometry
|
|
2168
2172
|
if (adb_level.include? surface.surfaceType)
|
2169
2173
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
2170
2174
|
end
|
2175
|
+
|
2171
2176
|
end
|
2172
2177
|
end
|
2173
2178
|
end
|
2174
|
-
##############################################################################################
|
2175
2179
|
|
2176
2180
|
if (corridor_position == 'Double-Loaded Interior')
|
2177
2181
|
interior_corridor_width = corridor_width / 2 # Only half the corridor is attached to a unit
|
2178
2182
|
# corridors
|
2179
2183
|
if corridor_width > 0
|
2180
2184
|
# create the prototype corridor
|
2181
|
-
nw_point = OpenStudio::Point3d.new(0, interior_corridor_width,
|
2182
|
-
ne_point = OpenStudio::Point3d.new(x, interior_corridor_width,
|
2183
|
-
sw_point = OpenStudio::Point3d.new(0, 0,
|
2184
|
-
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)
|
2185
2189
|
corr_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
2186
2190
|
|
2187
2191
|
if (foundation_height > 0) && foundation_corr_polygon.nil?
|
@@ -2190,32 +2194,24 @@ class Geometry
|
|
2190
2194
|
|
2191
2195
|
# create corridor zone
|
2192
2196
|
corridor_zone = OpenStudio::Model::ThermalZone.new(model)
|
2193
|
-
corridor_zone.setName(
|
2197
|
+
corridor_zone.setName(HPXML::LocationOtherHousingUnit)
|
2194
2198
|
corridor_space = OpenStudio::Model::Space::fromFloorPrint(corr_polygon, wall_height, model)
|
2195
2199
|
corridor_space = corridor_space.get
|
2196
|
-
|
2197
|
-
corridor_space.setName(corridor_space_name)
|
2200
|
+
corridor_space.setName(HPXML::LocationOtherHousingUnit)
|
2198
2201
|
corridor_space_type = OpenStudio::Model::SpaceType.new(model)
|
2199
|
-
corridor_space_type.setStandardsSpaceType(
|
2202
|
+
corridor_space_type.setStandardsSpaceType(HPXML::LocationOtherHousingUnit)
|
2200
2203
|
|
2201
2204
|
corridor_space.setSpaceType(corridor_space_type)
|
2202
2205
|
corridor_space.setThermalZone(corridor_zone)
|
2203
|
-
|
2204
|
-
# Make walls of corridor adiabatic
|
2205
|
-
if has_rear_units == true
|
2206
|
-
corridor_space.surfaces.each do |surface|
|
2207
|
-
os_facade = get_facade_for_surface(surface)
|
2208
|
-
end
|
2209
|
-
end
|
2210
2206
|
end
|
2211
2207
|
|
2212
2208
|
elsif (corridor_position == 'Double Exterior') || (corridor_position == 'Single Exterior (Front)')
|
2213
2209
|
interior_corridor_width = 0
|
2214
2210
|
# front access
|
2215
|
-
nw_point = OpenStudio::Point3d.new(0, -y, wall_height)
|
2216
|
-
sw_point = OpenStudio::Point3d.new(0, -y - corridor_width, wall_height)
|
2217
|
-
ne_point = OpenStudio::Point3d.new(x, -y, wall_height)
|
2218
|
-
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)
|
2219
2215
|
|
2220
2216
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([sw_point, se_point, ne_point, nw_point]), model)
|
2221
2217
|
shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
|
@@ -2228,17 +2224,20 @@ class Geometry
|
|
2228
2224
|
foundation_spaces = []
|
2229
2225
|
|
2230
2226
|
# foundation corridor
|
2227
|
+
foundation_corridor_space = nil
|
2231
2228
|
if (corridor_width > 0) && (corridor_position == 'Double-Loaded Interior')
|
2232
|
-
|
2233
|
-
|
2229
|
+
foundation_corridor_space = OpenStudio::Model::Space::fromFloorPrint(foundation_corr_polygon, foundation_height, model)
|
2230
|
+
foundation_corridor_space = foundation_corridor_space.get
|
2234
2231
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
2235
|
-
m[2, 3] = foundation_height
|
2236
|
-
|
2237
|
-
|
2238
|
-
|
2239
|
-
|
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
|
2240
2238
|
|
2241
|
-
|
2239
|
+
# Rim Joist
|
2240
|
+
add_rim_joist(model, foundation_corr_polygon, foundation_corridor_space, rim_joist_height, 0)
|
2242
2241
|
end
|
2243
2242
|
|
2244
2243
|
# foundation front
|
@@ -2246,7 +2245,7 @@ class Geometry
|
|
2246
2245
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_front_polygon, foundation_height, model)
|
2247
2246
|
foundation_space = foundation_space.get
|
2248
2247
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
2249
|
-
m[2, 3] = foundation_height
|
2248
|
+
m[2, 3] = foundation_height + rim_joist_height
|
2250
2249
|
foundation_space.changeTransformation(OpenStudio::Transformation.new(m))
|
2251
2250
|
foundation_space.setXOrigin(0)
|
2252
2251
|
foundation_space.setYOrigin(0)
|
@@ -2255,6 +2254,31 @@ class Geometry
|
|
2255
2254
|
foundation_space_front << foundation_space
|
2256
2255
|
foundation_spaces << foundation_space
|
2257
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
|
+
|
2258
2282
|
# put all of the spaces in the model into a vector
|
2259
2283
|
spaces = OpenStudio::Model::SpaceVector.new
|
2260
2284
|
model.getSpaces.each do |space|
|
@@ -2265,43 +2289,56 @@ class Geometry
|
|
2265
2289
|
OpenStudio::Model.intersectSurfaces(spaces)
|
2266
2290
|
OpenStudio::Model.matchSurfaces(spaces)
|
2267
2291
|
|
2268
|
-
|
2269
|
-
|
2270
|
-
|
2271
|
-
|
2272
|
-
|
2273
|
-
|
2274
|
-
|
2275
|
-
|
2276
|
-
|
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')
|
2277
2306
|
else
|
2278
|
-
|
2307
|
+
surface.setOutsideBoundaryCondition('Outdoors')
|
2279
2308
|
end
|
2280
|
-
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
2281
|
-
foundation_space.setName("#{foundation_type} space")
|
2282
|
-
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
2283
|
-
foundation_zone.setName("#{foundation_type} zone")
|
2284
|
-
foundation_space.setThermalZone(foundation_zone)
|
2285
|
-
foundation_space_type_name = 'unconditioned basement'
|
2286
2309
|
end
|
2287
|
-
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
2288
|
-
foundation_space_type.setStandardsSpaceType(foundation_space_type_name)
|
2289
|
-
foundation_space.setSpaceType(foundation_space_type)
|
2290
2310
|
end
|
2291
2311
|
|
2292
|
-
#
|
2293
|
-
|
2294
|
-
|
2295
|
-
|
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'
|
2296
2317
|
|
2297
|
-
|
2298
|
-
|
2299
|
-
|
2300
|
-
|
2301
|
-
|
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
|
2302
2324
|
end
|
2303
2325
|
end
|
2326
|
+
end
|
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
|
2304
2337
|
|
2338
|
+
if (adb_level.include? surface.surfaceType)
|
2339
|
+
surface.setOutsideBoundaryCondition('Adiabatic')
|
2340
|
+
end
|
2341
|
+
end
|
2305
2342
|
end
|
2306
2343
|
|
2307
2344
|
# put all of the spaces in the model into a vector
|
@@ -2314,15 +2351,26 @@ class Geometry
|
|
2314
2351
|
OpenStudio::Model.intersectSurfaces(spaces)
|
2315
2352
|
OpenStudio::Model.matchSurfaces(spaces)
|
2316
2353
|
|
2317
|
-
# make
|
2354
|
+
# make corridor floors adiabatic if no exterior walls to avoid exposed perimeter error
|
2355
|
+
exterior_obcs = ['Foundation', 'Ground', 'Outdoors']
|
2356
|
+
obcs_hash = {}
|
2318
2357
|
model.getSpaces.each do |space|
|
2319
|
-
next unless space.
|
2358
|
+
next unless space.name.get.include? 'corridor' # corridor and foundation corridor spaces
|
2320
2359
|
|
2360
|
+
space_name = space.name
|
2361
|
+
obcs_hash[space_name] = []
|
2321
2362
|
space.surfaces.each do |surface|
|
2322
|
-
|
2323
|
-
|
2324
|
-
|
2325
|
-
|
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')
|
2326
2374
|
end
|
2327
2375
|
end
|
2328
2376
|
|
@@ -2333,9 +2381,25 @@ class Geometry
|
|
2333
2381
|
surface.setOutsideBoundaryCondition('Foundation')
|
2334
2382
|
end
|
2335
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
|
+
|
2336
2396
|
return true
|
2337
2397
|
end
|
2338
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
|
+
|
2339
2403
|
# Returns true if space is either fully or partially below grade
|
2340
2404
|
def self.space_is_below_grade(space)
|
2341
2405
|
space.surfaces.each do |surface|
|
@@ -2386,7 +2450,7 @@ class Geometry
|
|
2386
2450
|
floor_vertices.each_with_index do |fv1, fidx|
|
2387
2451
|
fv2 = floor_vertices[fidx - 1]
|
2388
2452
|
# Wall within floor edge?
|
2389
|
-
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])
|
2390
2454
|
|
2391
2455
|
if not adjacent_wall_surfaces.include? wall_surface
|
2392
2456
|
adjacent_wall_surfaces << wall_surface
|
@@ -2457,19 +2521,13 @@ class Geometry
|
|
2457
2521
|
end
|
2458
2522
|
|
2459
2523
|
def self.get_edges_for_surfaces(surfaces, use_top_edge)
|
2460
|
-
top_z = -99999
|
2461
|
-
bottom_z = 99999
|
2462
|
-
surfaces.each do |surface|
|
2463
|
-
top_z = [getSurfaceZValues([surface]).max, top_z].max
|
2464
|
-
bottom_z = [getSurfaceZValues([surface]).min, bottom_z].min
|
2465
|
-
end
|
2466
2524
|
edges = []
|
2467
2525
|
edge_counter = 0
|
2468
2526
|
surfaces.each do |surface|
|
2469
2527
|
if use_top_edge
|
2470
|
-
matchz =
|
2528
|
+
matchz = getSurfaceZValues([surface]).max
|
2471
2529
|
else
|
2472
|
-
matchz =
|
2530
|
+
matchz = getSurfaceZValues([surface]).min
|
2473
2531
|
end
|
2474
2532
|
|
2475
2533
|
# get vertices
|
@@ -2585,4 +2643,35 @@ class Geometry
|
|
2585
2643
|
zrange = zvalues.max - zvalues.min
|
2586
2644
|
return zrange
|
2587
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
|
2588
2677
|
end
|