urbanopt-cli 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/CMakeLists.txt +9 -9
- data/Gemfile +10 -12
- data/README.md +1 -0
- data/example_files/Gemfile +26 -10
- data/example_files/mappers/Baseline.rb +9 -0
- data/example_files/mappers/CreateBar.rb +2 -0
- data/example_files/mappers/Floorspace.rb +12 -10
- data/example_files/mappers/floorspace_workflow.osw +9 -0
- data/example_files/residential/clothes_washer.tsv +1 -1
- data/example_files/residential/water_heater.tsv +1 -1
- data/example_files/resources/hpxml-measures/.circleci/config.yml +20 -0
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +13 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +583 -334
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +687 -586
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +21 -22
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +34 -24
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_config.yml +14 -1
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-appliances-dehumidifier-ief.osw → base-appliances-dehumidifier-ief-portable.osw} +34 -36
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +361 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared-preconditioning.osw → base-bldgtype-multifamily-shared-mechvent-preconditioning.osw} +47 -48
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-mechvent-shared.osw → base-bldgtype-multifamily-shared-mechvent.osw} +47 -48
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-pv-shared.osw → base-bldgtype-multifamily-shared-pv.osw} +49 -50
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +365 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-multifamily.osw → base-bldgtype-multifamily.osw} +43 -44
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-single-family-attached.osw → base-bldgtype-single-family-attached.osw} +36 -38
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +362 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +362 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +362 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +33 -36
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +361 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +361 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +33 -34
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +35 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +35 -37
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +34 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +34 -36
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +36 -38
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +39 -41
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +39 -41
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -32
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +29 -31
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +19 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +369 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-plug-loads-additional-multipliers.osw +361 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-dhw-shared-water-heater.osw → extra-schedules-random-seed.osw} +47 -50
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-vacancy-6-months.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +41 -42
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +41 -42
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +40 -41
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-hvac-programmable-thermostat.osw → invalid_files/multipliers-without-fuel-loads.osw} +31 -33
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{base-dhw-uef.osw → invalid_files/multipliers-without-plug-loads.osw} +35 -37
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +35 -37
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +35 -37
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +36 -38
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +33 -35
- data/example_files/resources/hpxml-measures/Gemfile +0 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +141 -129
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +183 -153
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +247 -121
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +0 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +434 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +28 -35
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +4 -12
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +60 -53
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +11 -15
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +81 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +3 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +21 -12
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1150 -1072
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +799 -389
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +227 -351
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +122 -89
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +2 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +0 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +8 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +23 -21
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +8 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +80 -19
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +9 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +103 -72
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +110 -37
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +16 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +109 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1747 -838
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +99 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +5 -16
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +23 -25
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +10 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +10 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +77 -60
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +186 -34
- data/example_files/resources/hpxml-measures/README.md +1 -0
- data/example_files/resources/hpxml-measures/Rakefile +2 -9
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +278 -254
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +32 -5
- data/example_files/resources/hpxml-measures/SimulationOutputReport/resources/constants.rb +1 -2
- data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +73 -137
- data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +3 -3
- data/example_files/resources/hpxml-measures/docs/source/conf.py +7 -4
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +4 -4
- data/example_files/resources/hpxml-measures/docs/source/index.rst +2 -2
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +4 -5
- data/example_files/resources/hpxml-measures/docs/source/nstatic/stylesheet.css +13 -1
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +2340 -0
- data/example_files/resources/hpxml-measures/docs/source/{simulation_output_report.rst → workflow_outputs.rst} +18 -16
- data/example_files/resources/hpxml-measures/tasks.rb +1154 -669
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +64 -20
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +523 -524
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-appliances-dehumidifier-ief.xml → base-appliances-dehumidifier-ief-portable.xml} +3 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +524 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +523 -524
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +563 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +511 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +632 -634
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +530 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +516 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-multifamily-buffer-space.xml → base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml} +30 -59
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-non-freezing-space.xml → base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml} +30 -59
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-heated-space.xml → base-bldgtype-multifamily-adjacent-to-other-heated-space.xml} +30 -59
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-other-housing-unit.xml → base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml} +30 -59
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +426 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +457 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +429 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +469 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +464 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +409 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +439 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +408 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +411 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +445 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +408 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +438 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +410 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +445 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +440 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +459 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +451 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +465 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-mechvent-shared-multiple.xml → base-bldgtype-multifamily-shared-mechvent-multiple.xml} +35 -410
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +488 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +472 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +464 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +457 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +450 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +447 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +606 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +517 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +517 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +549 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +550 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +549 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +552 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +566 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +518 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +518 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +526 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +518 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +566 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +567 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +565 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +523 -525
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +495 -497
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +569 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-window-interior-shading.xml → base-dhw-tank-elec-uef.xml} +8 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +560 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-flowrate.xml → base-dhw-tank-heat-pump-uef.xml} +6 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +568 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +575 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +560 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +560 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +567 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +660 -664
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +635 -639
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +560 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +589 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +589 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +516 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +2473 -2493
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +753 -755
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-interior-shading.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +503 -505
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +497 -497
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +723 -729
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +684 -688
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +515 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +608 -610
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +572 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +572 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +572 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +575 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +626 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +563 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +560 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +560 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +571 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +520 -522
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +550 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +580 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +533 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +564 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +564 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +563 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +510 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +553 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +526 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +506 -505
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +513 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +513 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +548 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +550 -550
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +577 -579
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ideal-air.xml +498 -500
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +549 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +512 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +556 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +562 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +562 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +519 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +913 -912
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +834 -837
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +487 -489
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +569 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +509 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +509 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +513 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +513 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +513 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +572 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +584 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +487 -489
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +515 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +515 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +573 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +589 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +546 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +539 -541
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +575 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +575 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +573 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +573 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +793 -795
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +573 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +571 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +476 -495
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +578 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +753 -833
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +740 -820
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +549 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shelter-coefficient.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +723 -725
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +2 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +568 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +565 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-autosize.xml +559 -561
- 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 +562 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml +559 -558
- 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 +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml +556 -558
- 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 +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml +556 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml +518 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml +569 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml +519 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml +549 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml +546 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml +546 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml +575 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml +560 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml +559 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml +509 -511
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml +552 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml +512 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml +546 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml +549 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml +557 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml +562 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml +548 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml +561 -560
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml +558 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml +553 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml +558 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-room-ac-only-autosize.xml +508 -510
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-stove-oil-only-autosize.xml +512 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml +512 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +533 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-uef.xml → invalid_files/dhw-invalid-ef-tank.xml} +3 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +545 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +542 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +545 -545
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +612 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +625 -629
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +609 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +549 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +471 -473
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +534 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +561 -560
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml +562 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +913 -912
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +913 -912
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +532 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +547 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +913 -912
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/{invalid-calendar-year.xml → hvac-inconsistent-fan-powers.xml} +8 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +569 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +568 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +465 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +643 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +552 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +518 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +563 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +909 -908
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +559 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +564 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +589 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +545 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +567 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +567 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +565 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +527 -529
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/slab-zero-exposed-perimeter.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +532 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +567 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +532 -534
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +574 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +464 -827
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +464 -827
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +589 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +576 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +561 -563
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +6 -14
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +6 -16
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +6 -16
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -16
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -16
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +277 -224
- data/lib/uo_cli/version.rb +1 -1
- data/scripts/setup-env-gitbash.sh +4 -4
- data/scripts/setup-env.bat +14 -11
- data/scripts/setup-env.ps1 +13 -10
- data/uo_cli.gemspec +6 -4
- metadata +106 -57
- data/example_files/resources/hpxml-measures/docs/source/hpxml_to_openstudio.rst +0 -1386
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-laundry-room.xml +0 -828
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater-recirc.xml +0 -820
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-shared-water-heater.xml +0 -813
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-attached-multifamily.xml +0 -810
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-common-surfaces.xml +0 -928
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-baseboard.xml +0 -777
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil-ducted.xml +0 -808
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-fan-coil.xml +0 -780
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-chiller-water-loop-heat-pump.xml +0 -820
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-cooling-tower-water-loop-heat-pump.xml +0 -815
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-baseboard.xml +0 -760
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-ducted.xml +0 -790
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil-eae.xml +0 -759
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-fan-coil.xml +0 -762
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-boiler-only-water-loop-heat-pump.xml +0 -796
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-baseboard.xml +0 -759
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil-ducted.xml +0 -789
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-fan-coil.xml +0 -761
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-chiller-only-water-loop-heat-pump.xml +0 -796
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-cooling-tower-only-water-loop-heat-pump.xml +0 -791
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-shared-ground-loop-ground-to-air-heat-pump.xml +0 -814
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared-preconditioning.xml +0 -851
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-shared.xml +0 -835
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-shared.xml +0 -827
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/appliances-location-unconditioned-space.xml +0 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/coal-for-non-boiler-heating.xml +0 -514
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type.xml +0 -828
@@ -49,7 +49,7 @@ class Lighting
|
|
49
49
|
garage_sch = MonthWeekdayWeekendSchedule.new(model, Constants.ObjectNameGarageLighting + ' schedule', lighting.garage_weekday_fractions, lighting.garage_weekend_fractions, lighting.garage_monthly_multipliers, Constants.ScheduleTypeLimitsFraction)
|
50
50
|
end
|
51
51
|
if not lighting.holiday_kwh_per_day.nil?
|
52
|
-
exterior_holiday_sch = MonthWeekdayWeekendSchedule.new(model, Constants.ObjectNameLightingExteriorHoliday + ' schedule', lighting.holiday_weekday_fractions, lighting.holiday_weekend_fractions, lighting.exterior_monthly_multipliers, Constants.ScheduleTypeLimitsFraction, true, lighting.holiday_period_begin_month, lighting.
|
52
|
+
exterior_holiday_sch = MonthWeekdayWeekendSchedule.new(model, Constants.ObjectNameLightingExteriorHoliday + ' schedule', lighting.holiday_weekday_fractions, lighting.holiday_weekend_fractions, lighting.exterior_monthly_multipliers, Constants.ScheduleTypeLimitsFraction, true, lighting.holiday_period_begin_month, lighting.holiday_period_begin_day, lighting.holiday_period_end_month, lighting.holiday_period_end_day)
|
53
53
|
end
|
54
54
|
|
55
55
|
# Add lighting to each conditioned space
|
@@ -7,7 +7,6 @@ class Location
|
|
7
7
|
apply_climate_zones(model, epw_file)
|
8
8
|
apply_dst(model, hpxml)
|
9
9
|
apply_ground_temps(model, weather)
|
10
|
-
return weather
|
11
10
|
end
|
12
11
|
|
13
12
|
def self.apply_weather_file(model, runner, weather_file_path, weather_cache_path)
|
@@ -59,8 +58,8 @@ class Location
|
|
59
58
|
return unless hpxml.header.dst_enabled
|
60
59
|
|
61
60
|
month_names = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
62
|
-
dst_start_date = "#{month_names[hpxml.header.dst_begin_month - 1]} #{hpxml.header.
|
63
|
-
dst_end_date = "#{month_names[hpxml.header.dst_end_month - 1]} #{hpxml.header.
|
61
|
+
dst_start_date = "#{month_names[hpxml.header.dst_begin_month - 1]} #{hpxml.header.dst_begin_day}"
|
62
|
+
dst_end_date = "#{month_names[hpxml.header.dst_end_month - 1]} #{hpxml.header.dst_end_day}"
|
64
63
|
|
65
64
|
run_period_control_daylight_saving_time = model.getRunPeriodControlDaylightSavingTime
|
66
65
|
run_period_control_daylight_saving_time.setStartDate(dst_start_date)
|
@@ -130,8 +130,6 @@ def run_hpxml_workflow(rundir, hpxml, measures, measures_dir, debug: false, outp
|
|
130
130
|
end
|
131
131
|
|
132
132
|
def apply_measures(measures_dir, measures, runner, model, show_measure_calls = true, measure_type = 'OpenStudio::Measure::ModelMeasure')
|
133
|
-
require 'openstudio'
|
134
|
-
|
135
133
|
# Call each measure in the specified order
|
136
134
|
measures.keys.each do |measure_subdir|
|
137
135
|
# Gather measure arguments and call measure
|
@@ -261,7 +259,6 @@ def validate_measure_args(measure_args, provided_args, lookup_file, measure_name
|
|
261
259
|
end
|
262
260
|
|
263
261
|
def get_argument_map(model, measure, provided_args, lookup_file, measure_name, runner = nil)
|
264
|
-
require 'openstudio'
|
265
262
|
measure_args = measure.arguments(model)
|
266
263
|
provided_args = validate_measure_args(measure_args, provided_args, lookup_file, measure_name, runner)
|
267
264
|
|
@@ -278,7 +275,6 @@ def get_argument_map(model, measure, provided_args, lookup_file, measure_name, r
|
|
278
275
|
end
|
279
276
|
|
280
277
|
def run_measure(model, measure, argument_map, runner)
|
281
|
-
require 'openstudio'
|
282
278
|
begin
|
283
279
|
# run the measure
|
284
280
|
runner_child = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
|
@@ -409,8 +405,6 @@ def report_os_warnings(os_log, rundir)
|
|
409
405
|
next if s.logMessage.include? 'Data will be treated as typical (TMY)'
|
410
406
|
next if s.logMessage.include? 'WorkflowStepResult value called with undefined stepResult'
|
411
407
|
next if s.logMessage.include?("Object of type 'Schedule:Constant' and named 'Always") && s.logMessage.include?('points to an object named') && s.logMessage.include?('but that object cannot be located')
|
412
|
-
# TODO: Remove once https://github.com/NREL/OpenStudio/pull/3999 is available
|
413
|
-
next if s.logMessage.include? "'Propane' is deprecated for Coil_Heating_GasFields:FuelType, use 'Propane' instead"
|
414
408
|
next if s.logMessage.include? 'Appears there are no design condition fields in the EPW file'
|
415
409
|
|
416
410
|
f << "OS Message: #{s.logMessage}\n"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class MiscLoads
|
4
|
-
def self.apply_plug(model, plug_load, obj_name, living_space, schedules_file)
|
4
|
+
def self.apply_plug(model, plug_load, obj_name, living_space, apply_ashrae140_assumptions, schedules_file)
|
5
5
|
kwh = 0
|
6
6
|
|
7
7
|
if not plug_load.nil?
|
@@ -41,10 +41,11 @@ class MiscLoads
|
|
41
41
|
fail 'Sum of sensible and latent fractions must be less than or equal to 1.'
|
42
42
|
end
|
43
43
|
|
44
|
-
if
|
45
|
-
#
|
46
|
-
|
47
|
-
|
44
|
+
if apply_ashrae140_assumptions
|
45
|
+
# ASHRAE 140, Table 7-9. Sensible loads are 70% radiative and 30% convective.
|
46
|
+
rad_frac = 0.7 * sens_frac
|
47
|
+
else
|
48
|
+
rad_frac = 0.6 * sens_frac
|
48
49
|
end
|
49
50
|
|
50
51
|
# Add electric equipment for the mel
|
@@ -55,7 +56,7 @@ class MiscLoads
|
|
55
56
|
mel.setSpace(living_space)
|
56
57
|
mel_def.setName(obj_name)
|
57
58
|
mel_def.setDesignLevel(space_design_level)
|
58
|
-
mel_def.setFractionRadiant(
|
59
|
+
mel_def.setFractionRadiant(rad_frac)
|
59
60
|
mel_def.setFractionLatent(lat_frac)
|
60
61
|
mel_def.setFractionLost(1 - sens_frac - lat_frac)
|
61
62
|
mel.setSchedule(sch)
|
@@ -99,18 +100,12 @@ class MiscLoads
|
|
99
100
|
fail 'Sum of sensible and latent fractions must be less than or equal to 1.'
|
100
101
|
end
|
101
102
|
|
102
|
-
if fuel_load.location == HPXML::LocationExterior
|
103
|
-
# Set all heat gain as lost
|
104
|
-
sens_frac = 0.0
|
105
|
-
lat_fract = 0.0
|
106
|
-
end
|
107
|
-
|
108
103
|
# Add other equipment for the mfl
|
109
104
|
mfl_def = OpenStudio::Model::OtherEquipmentDefinition.new(model)
|
110
105
|
mfl = OpenStudio::Model::OtherEquipment.new(mfl_def)
|
111
106
|
mfl.setName(obj_name)
|
112
107
|
mfl.setEndUseSubcategory(obj_name)
|
113
|
-
mfl.setFuelType(EPlus.
|
108
|
+
mfl.setFuelType(EPlus.fuel_type(fuel_load.fuel_type))
|
114
109
|
mfl.setSpace(living_space)
|
115
110
|
mfl_def.setName(obj_name)
|
116
111
|
mfl_def.setDesignLevel(space_design_level)
|
@@ -8,42 +8,44 @@ class PV
|
|
8
8
|
max_power = pv_system.max_power_output
|
9
9
|
else
|
10
10
|
# Apportion to single dwelling unit by # bedrooms
|
11
|
+
if pv_system.number_of_bedrooms_served.to_f <= nbeds.to_f
|
12
|
+
fail "Shared PV system number of bedrooms served (#{pv_system.number_of_bedrooms_served}) must be greater than the number of bedrooms in the dwelling unit (#{nbeds})."
|
13
|
+
end
|
11
14
|
max_power = pv_system.max_power_output * nbeds.to_f / pv_system.number_of_bedrooms_served.to_f
|
12
15
|
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
gpvwatts = OpenStudio::Model::GeneratorPVWatts.new(model, max_power)
|
18
|
+
gpvwatts.setName("#{obj_name} generator")
|
19
|
+
gpvwatts.setSystemLosses(pv_system.system_losses_fraction)
|
20
|
+
gpvwatts.setTiltAngle(pv_system.array_tilt)
|
21
|
+
gpvwatts.setAzimuthAngle(pv_system.array_azimuth)
|
19
22
|
if (pv_system.tracking == HPXML::PVTrackingTypeFixed) && (pv_system.location == HPXML::LocationRoof)
|
20
|
-
|
23
|
+
gpvwatts.setArrayType('FixedRoofMounted')
|
21
24
|
elsif (pv_system.tracking == HPXML::PVTrackingTypeFixed) && (pv_system.location == HPXML::LocationGround)
|
22
|
-
|
25
|
+
gpvwatts.setArrayType('FixedOpenRack')
|
23
26
|
elsif pv_system.tracking == HPXML::PVTrackingType1Axis
|
24
|
-
|
27
|
+
gpvwatts.setArrayType('OneAxis')
|
25
28
|
elsif pv_system.tracking == HPXML::PVTrackingType1AxisBacktracked
|
26
|
-
|
29
|
+
gpvwatts.setArrayType('OneAxisBacktracking')
|
27
30
|
elsif pv_system.tracking == HPXML::PVTrackingType2Axis
|
28
|
-
|
31
|
+
gpvwatts.setArrayType('TwoAxis')
|
29
32
|
end
|
30
33
|
if pv_system.module_type == HPXML::PVModuleTypeStandard
|
31
|
-
|
34
|
+
gpvwatts.setModuleType('Standard')
|
32
35
|
elsif pv_system.module_type == HPXML::PVModuleTypePremium
|
33
|
-
|
36
|
+
gpvwatts.setModuleType('Premium')
|
34
37
|
elsif pv_system.module_type == HPXML::PVModuleTypeThinFilm
|
35
|
-
|
38
|
+
gpvwatts.setModuleType('ThinFilm')
|
36
39
|
end
|
37
40
|
|
38
|
-
|
39
|
-
|
41
|
+
ipvwatts = OpenStudio::Model::ElectricLoadCenterInverterPVWatts.new(model)
|
42
|
+
ipvwatts.setName("#{obj_name} inverter")
|
43
|
+
ipvwatts.setInverterEfficiency(pv_system.inverter_efficiency)
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
electric_load_center_dist.addGenerator(generator)
|
46
|
-
electric_load_center_dist.setInverter(inverter)
|
45
|
+
elcd = gpvwatts.electricLoadCenterDistribution.get
|
46
|
+
elcd.setName("#{obj_name} elec load center dist")
|
47
|
+
elcd.addGenerator(gpvwatts)
|
48
|
+
elcd.setInverter(ipvwatts)
|
47
49
|
end
|
48
50
|
|
49
51
|
def self.calc_module_power_from_year(year_modules_manufactured)
|
@@ -63,7 +63,7 @@ class HourlyByMonthSchedule
|
|
63
63
|
def calcMaxval()
|
64
64
|
maxval = [@weekday_month_by_hour_values.flatten.max, @weekend_month_by_hour_values.flatten.max].max
|
65
65
|
if maxval == 0.0
|
66
|
-
maxval
|
66
|
+
maxval = 1.0 # Prevent divide by zero
|
67
67
|
end
|
68
68
|
return maxval
|
69
69
|
end
|
@@ -178,7 +178,7 @@ class MonthWeekdayWeekendSchedule
|
|
178
178
|
# monthly_values can either be a comma-separated string of 12 numbers or a 12-element array of numbers.
|
179
179
|
def initialize(model, sch_name, weekday_hourly_values, weekend_hourly_values, monthly_values,
|
180
180
|
schedule_type_limits_name = nil, normalize_values = true, begin_month = 1,
|
181
|
-
|
181
|
+
begin_day = 1, end_month = 12, end_day = 31)
|
182
182
|
@model = model
|
183
183
|
@sch_name = sch_name
|
184
184
|
@schedule = nil
|
@@ -187,9 +187,9 @@ class MonthWeekdayWeekendSchedule
|
|
187
187
|
@monthly_values = validateValues(monthly_values, 12, 'monthly')
|
188
188
|
@schedule_type_limits_name = schedule_type_limits_name
|
189
189
|
@begin_month = begin_month
|
190
|
-
@
|
190
|
+
@begin_day = begin_day
|
191
191
|
@end_month = end_month
|
192
|
-
@
|
192
|
+
@end_day = end_day
|
193
193
|
|
194
194
|
if normalize_values
|
195
195
|
@weekday_hourly_values = normalizeSumToOne(@weekday_hourly_values)
|
@@ -281,7 +281,7 @@ class MonthWeekdayWeekendSchedule
|
|
281
281
|
maxval = @monthly_values.max * @weekend_hourly_values.max
|
282
282
|
end
|
283
283
|
if maxval == 0.0
|
284
|
-
maxval
|
284
|
+
maxval = 1.0 # Prevent divide by zero
|
285
285
|
end
|
286
286
|
return maxval
|
287
287
|
end
|
@@ -311,7 +311,7 @@ class MonthWeekdayWeekendSchedule
|
|
311
311
|
end
|
312
312
|
|
313
313
|
num_days_in_each_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
314
|
-
num_days_in_each_month[@end_month] = @
|
314
|
+
num_days_in_each_month[@end_month] = @end_day
|
315
315
|
num_days_in_each_month.each_index do |i|
|
316
316
|
num_days_in_each_month[i] += leap_offset if i == 2
|
317
317
|
end
|
@@ -320,7 +320,7 @@ class MonthWeekdayWeekendSchedule
|
|
320
320
|
orig_day_startm[i] += leap_offset if i > 2
|
321
321
|
end
|
322
322
|
day_startm = orig_day_startm.map(&:clone)
|
323
|
-
day_startm[@begin_month] = orig_day_startm[@begin_month] + @
|
323
|
+
day_startm[@begin_month] = orig_day_startm[@begin_month] + @begin_day - 1
|
324
324
|
day_endm = [orig_day_startm, num_days_in_each_month].transpose.map { |i| (i != [0, 0]) ? i.reduce(:+) - 1 : 0 }
|
325
325
|
time = []
|
326
326
|
for h in 1..24
|
@@ -528,6 +528,7 @@ class HotWaterSchedule
|
|
528
528
|
# with a minimum runtime in minutes.
|
529
529
|
items.reverse.each_with_index do |val, i|
|
530
530
|
next unless val > 0
|
531
|
+
|
531
532
|
place = (items.length - 1) - i
|
532
533
|
last = place + dryer_exhaust_min_runtime
|
533
534
|
items.fill(1, place...last)
|
@@ -26,8 +26,8 @@ class SimControls
|
|
26
26
|
|
27
27
|
run_period = model.getRunPeriod
|
28
28
|
run_period.setBeginMonth(header.sim_begin_month)
|
29
|
-
run_period.setBeginDayOfMonth(header.
|
29
|
+
run_period.setBeginDayOfMonth(header.sim_begin_day)
|
30
30
|
run_period.setEndMonth(header.sim_end_month)
|
31
|
-
run_period.setEndDayOfMonth(header.
|
31
|
+
run_period.setEndDayOfMonth(header.sim_end_day)
|
32
32
|
end
|
33
33
|
end
|
@@ -1,37 +1,98 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Validator
|
4
|
-
def self.
|
4
|
+
def self.run_validators(hpxml_doc, stron_paths)
|
5
5
|
errors = []
|
6
|
+
warnings = []
|
7
|
+
|
8
|
+
context_elements_cache = {}
|
9
|
+
stron_paths.each do |stron_path|
|
10
|
+
error, warning = run_validator(hpxml_doc, stron_path, context_elements_cache)
|
11
|
+
errors += error
|
12
|
+
warnings += warning
|
13
|
+
end
|
14
|
+
|
15
|
+
return errors.uniq, warnings.uniq
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def self.run_validator(hpxml_doc, stron_path, context_elements_cache)
|
21
|
+
errors = []
|
22
|
+
warnings = []
|
23
|
+
|
6
24
|
doc = XMLHelper.parse_file(stron_path)
|
7
25
|
XMLHelper.get_elements(doc, '/sch:schema/sch:pattern/sch:rule').each do |rule|
|
8
26
|
context_xpath = XMLHelper.get_attribute_value(rule, 'context').gsub('h:', '')
|
9
27
|
|
10
|
-
|
11
|
-
context_elements = hpxml_doc.xpath(context_xpath)
|
12
|
-
rescue
|
13
|
-
fail "Invalid xpath: #{context_xpath}"
|
14
|
-
end
|
28
|
+
context_elements = get_context_elements(hpxml_doc, context_xpath, context_elements_cache)
|
15
29
|
next if context_elements.empty? # Skip if context element doesn't exist
|
16
30
|
|
17
|
-
|
18
|
-
|
31
|
+
['sch:assert', 'sch:report'].each do |element_name|
|
32
|
+
elements = XMLHelper.get_elements(rule, element_name)
|
33
|
+
elements.each do |element|
|
34
|
+
test_attr = XMLHelper.get_attribute_value(element, 'test').gsub('h:', '')
|
19
35
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
36
|
+
context_elements.each do |context_element|
|
37
|
+
begin
|
38
|
+
xpath_result = context_element.xpath(test_attr)
|
39
|
+
rescue
|
40
|
+
fail "Invalid xpath: #{test_attr}"
|
41
|
+
end
|
42
|
+
|
43
|
+
if element_name == 'sch:assert'
|
44
|
+
next if xpath_result # check if assert_test is false
|
45
|
+
|
46
|
+
error_message = element.children.text # the value of sch:assert
|
47
|
+
extended_error_message = [error_message, "[context: #{context_xpath}]"].join(' ') # add context xpath to the error message
|
48
|
+
errors << extended_error_message
|
49
|
+
elsif element_name == 'sch:report'
|
50
|
+
next unless xpath_result # check if assert_test is true
|
27
51
|
|
28
|
-
|
29
|
-
|
30
|
-
|
52
|
+
warning_message = element.children.text # the value of sch:report
|
53
|
+
warnings << warning_message
|
54
|
+
end
|
55
|
+
end
|
31
56
|
end
|
32
57
|
end
|
33
58
|
end
|
34
59
|
|
35
|
-
return errors
|
60
|
+
return errors, warnings
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.get_context_elements(hpxml_doc, context_xpath, context_elements_cache)
|
64
|
+
# Returns all XML elements that match context_xpath.
|
65
|
+
# This method is used to incorporate performance improvements by
|
66
|
+
# attempting to avoid expensive xpath() calls when possible.
|
67
|
+
|
68
|
+
# Check if context_xpath already queried
|
69
|
+
context_elements = context_elements_cache[context_xpath]
|
70
|
+
return context_elements unless context_elements.nil?
|
71
|
+
|
72
|
+
# Check if a parent xpath already found to have no element matches
|
73
|
+
parent_is_empty = false
|
74
|
+
context_elements_cache.each do |k, v|
|
75
|
+
next unless context_xpath.include? k
|
76
|
+
next unless v.empty?
|
77
|
+
|
78
|
+
parent_is_empty = true
|
79
|
+
break
|
80
|
+
end
|
81
|
+
if parent_is_empty
|
82
|
+
# If a parent xpath had no element matches, then context_xpath must
|
83
|
+
# also have no element matches. So return an empty list to skip the
|
84
|
+
# xpath query.
|
85
|
+
context_elements_cache[context_xpath] = []
|
86
|
+
return context_elements_cache[context_xpath]
|
87
|
+
end
|
88
|
+
|
89
|
+
# If we got this far, we must proceed with the xpath query.
|
90
|
+
begin
|
91
|
+
context_elements_cache[context_xpath] = hpxml_doc.xpath(context_xpath)
|
92
|
+
rescue
|
93
|
+
fail "Invalid xpath: #{context_xpath}"
|
94
|
+
end
|
95
|
+
|
96
|
+
return context_elements_cache[context_xpath]
|
36
97
|
end
|
37
98
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Version
|
4
|
-
OS_HPXML_Version = '0.
|
5
|
-
OS_Version = '3.0' # Required version of OpenStudio (can be 'X.X' or 'X.X.X')
|
4
|
+
OS_HPXML_Version = '1.0.0' # Version of the OS-HPXML workflow
|
5
|
+
OS_Version = '3.1.0' # Required version of OpenStudio (can be 'X.X' or 'X.X.X')
|
6
|
+
HPXML_Version = '3.0' # HPXML schemaVersion
|
6
7
|
|
7
8
|
def self.check_openstudio_version
|
8
9
|
if not OpenStudio.openStudioVersion.start_with? OS_Version
|
@@ -13,4 +14,10 @@ class Version
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
17
|
+
|
18
|
+
def self.check_hpxml_version(hpxml_version)
|
19
|
+
if hpxml_version != HPXML_Version
|
20
|
+
fail "HPXML version #{HPXML_Version} is required."
|
21
|
+
end
|
22
|
+
end
|
16
23
|
end
|
@@ -6,10 +6,6 @@ class Waterheater
|
|
6
6
|
|
7
7
|
dhw_map[water_heating_system.id] = []
|
8
8
|
|
9
|
-
if water_heating_system.energy_factor.nil?
|
10
|
-
water_heating_system.energy_factor = calc_ef_from_uef(water_heating_system)
|
11
|
-
end
|
12
|
-
|
13
9
|
solar_fraction = get_water_heater_solar_fraction(water_heating_system, solar_thermal_system)
|
14
10
|
set_temp_c = get_set_temp_c(water_heating_system.temperature, water_heating_system.water_heater_type)
|
15
11
|
loop = create_new_loop(model, Constants.ObjectNamePlantLoopDHW, set_temp_c)
|
@@ -51,11 +47,7 @@ class Waterheater
|
|
51
47
|
|
52
48
|
dhw_map[water_heating_system.id] = []
|
53
49
|
|
54
|
-
if water_heating_system.energy_factor.nil?
|
55
|
-
water_heating_system.energy_factor = calc_ef_from_uef(water_heating_system)
|
56
|
-
end
|
57
50
|
water_heating_system.heating_capacity = 100000000000.0
|
58
|
-
|
59
51
|
solar_fraction = get_water_heater_solar_fraction(water_heating_system, solar_thermal_system)
|
60
52
|
set_temp_c = get_set_temp_c(water_heating_system.temperature, water_heating_system.water_heater_type)
|
61
53
|
loop = create_new_loop(model, Constants.ObjectNamePlantLoopDHW, set_temp_c)
|
@@ -97,10 +89,6 @@ class Waterheater
|
|
97
89
|
|
98
90
|
dhw_map[water_heating_system.id] = []
|
99
91
|
|
100
|
-
if water_heating_system.energy_factor.nil?
|
101
|
-
water_heating_system.energy_factor = calc_ef_from_uef(water_heating_system)
|
102
|
-
end
|
103
|
-
|
104
92
|
obj_name_hpwh = Constants.ObjectNameWaterHeater
|
105
93
|
solar_fraction = get_water_heater_solar_fraction(water_heating_system, solar_thermal_system)
|
106
94
|
set_temp_c = get_set_temp_c(water_heating_system.temperature, water_heating_system.water_heater_type)
|
@@ -157,6 +145,7 @@ class Waterheater
|
|
157
145
|
|
158
146
|
# Fan:OnOff
|
159
147
|
fan = setup_hpwh_fan(hpwh, obj_name_hpwh, airflow_rate)
|
148
|
+
dhw_map[water_heating_system.id] << fan
|
160
149
|
|
161
150
|
# Amb temp & RH sensors, temp sensor shared across programs
|
162
151
|
amb_temp_sensor, amb_rh_sensors = get_loc_temp_rh_sensors(model, obj_name_hpwh, loc_schedule, loc_space, living_zone)
|
@@ -192,11 +181,7 @@ class Waterheater
|
|
192
181
|
|
193
182
|
if water_heating_system.water_heater_type == HPXML::WaterHeaterTypeCombiStorage
|
194
183
|
if water_heating_system.standby_loss <= 0
|
195
|
-
fail '
|
196
|
-
end
|
197
|
-
|
198
|
-
if water_heating_system.standby_loss > 10.0
|
199
|
-
runner.registerWarning('Indirect water heater standby loss is over 10.0 F/hr, double check water heater inputs.')
|
184
|
+
fail 'A negative indirect water heater standby loss was calculated, double check water heater inputs.'
|
200
185
|
end
|
201
186
|
act_vol = calc_storage_tank_actual_vol(water_heating_system.tank_volume, nil)
|
202
187
|
a_side = calc_tank_areas(act_vol)[1]
|
@@ -342,10 +327,10 @@ class Waterheater
|
|
342
327
|
tank_spt_sensor.setName("#{sys_id} Setpoint Temperature")
|
343
328
|
tank_spt_sensor.setKeyName(object.setpointTemperatureSchedule.get.name.to_s)
|
344
329
|
alt_spt_sch = object.indirectAlternateSetpointTemperatureSchedule.get
|
345
|
-
altsch_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(alt_spt_sch,
|
330
|
+
altsch_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(alt_spt_sch, *EPlus::EMSActuatorScheduleConstantValue)
|
346
331
|
altsch_actuator.setName("#{sys_id} AltSchedOverride")
|
347
332
|
elsif object.is_a? OpenStudio::Model::PumpVariableSpeed
|
348
|
-
pump_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(object,
|
333
|
+
pump_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(object, *EPlus::EMSActuatorPumpMassFlowRate)
|
349
334
|
pump_actuator.setName("#{sys_id} Pump MFR")
|
350
335
|
elsif object.is_a? OpenStudio::Model::SetpointManagerScheduled
|
351
336
|
tank_source_temp = object.schedule.to_ScheduleConstant.get.value
|
@@ -671,7 +656,7 @@ class Waterheater
|
|
671
656
|
tank_source_sensor.setKeyName("#{storage_tank.demandOutletModelObject.get.to_Node.get.name}")
|
672
657
|
|
673
658
|
# Actuators
|
674
|
-
swh_pump_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(pump,
|
659
|
+
swh_pump_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(pump, *EPlus::EMSActuatorPumpMassFlowRate)
|
675
660
|
swh_pump_actuator.setName("#{obj_name}_pump")
|
676
661
|
|
677
662
|
# Program
|
@@ -770,8 +755,21 @@ class Waterheater
|
|
770
755
|
twb_adj = Psychrometrics.Twb_fT_w_P(rated_edb_F, w_adj, p_atm)
|
771
756
|
|
772
757
|
# Calculate the COP based on EF
|
773
|
-
|
774
|
-
|
758
|
+
if not water_heating_system.energy_factor.nil?
|
759
|
+
uef = (0.60522 + water_heating_system.energy_factor) / 1.2101
|
760
|
+
cop = 1.174536058 * uef # Based on simulation of the UEF test procedure at varying COPs
|
761
|
+
elsif not water_heating_system.uniform_energy_factor.nil?
|
762
|
+
uef = water_heating_system.uniform_energy_factor
|
763
|
+
if water_heating_system.first_hour_rating < 18.0
|
764
|
+
fail 'It is unlikely that a heat pump water heater falls into the very small bin of the First Hour Rating (FHR) test. Double check FHR input.'
|
765
|
+
elsif water_heating_system.first_hour_rating < 51.0 # Includes 18 gal up to (but not including) 51
|
766
|
+
cop = 1.0005 * uef - 0.0789
|
767
|
+
elsif water_heating_system.first_hour_rating < 75.0
|
768
|
+
cop = 1.0909 * uef - 0.0868
|
769
|
+
else
|
770
|
+
cop = 1.1022 * uef - 0.0877
|
771
|
+
end
|
772
|
+
end
|
775
773
|
|
776
774
|
coil = hpwh.dXCoil.to_CoilWaterHeatingAirToWaterHeatPumpWrapped.get
|
777
775
|
coil.setName("#{obj_name_hpwh} coil")
|
@@ -916,10 +914,10 @@ class Waterheater
|
|
916
914
|
|
917
915
|
def self.add_hpwh_inlet_air_and_zone_heat_gain_program(model, obj_name_hpwh, loc_space, loc_schedule, hpwh_tamb, hpwh_rhamb, tank, coil, fan, amb_temp_sensor, amb_rh_sensors)
|
918
916
|
# EMS Actuators: Inlet T & RH, sensible and latent gains to the space
|
919
|
-
tamb_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_tamb,
|
917
|
+
tamb_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_tamb, *EPlus::EMSActuatorScheduleConstantValue)
|
920
918
|
tamb_act_actuator.setName("#{obj_name_hpwh} Tamb act")
|
921
919
|
|
922
|
-
rhamb_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_rhamb,
|
920
|
+
rhamb_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_rhamb, *EPlus::EMSActuatorScheduleConstantValue)
|
923
921
|
rhamb_act_actuator.setName("#{obj_name_hpwh} RHamb act")
|
924
922
|
|
925
923
|
if not loc_space.nil? # If located in space
|
@@ -946,10 +944,10 @@ class Waterheater
|
|
946
944
|
hpwh_lat_def.setFractionLost(0)
|
947
945
|
hpwh_lat.setSchedule(model.alwaysOnDiscreteSchedule)
|
948
946
|
|
949
|
-
sens_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_sens,
|
947
|
+
sens_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_sens, *EPlus::EMSActuatorOtherEquipmentPower)
|
950
948
|
sens_act_actuator.setName("#{hpwh_sens.name} act")
|
951
949
|
|
952
|
-
lat_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_lat,
|
950
|
+
lat_act_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_lat, *EPlus::EMSActuatorOtherEquipmentPower)
|
953
951
|
lat_act_actuator.setName("#{hpwh_lat.name} act")
|
954
952
|
end
|
955
953
|
|
@@ -966,7 +964,7 @@ class Waterheater
|
|
966
964
|
lat_cool_sensor.setName("#{obj_name_hpwh} lat cool")
|
967
965
|
lat_cool_sensor.setKeyName(coil.name.to_s)
|
968
966
|
|
969
|
-
fan_power_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
967
|
+
fan_power_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Fan #{EPlus::FuelTypeElectricity} Rate")
|
970
968
|
fan_power_sensor.setName("#{obj_name_hpwh} fan pwr")
|
971
969
|
fan_power_sensor.setKeyName(fan.name.to_s)
|
972
970
|
|
@@ -988,7 +986,7 @@ class Waterheater
|
|
988
986
|
|
989
987
|
def self.add_hpwh_control_program(model, obj_name_hpwh, amb_temp_sensor, hpwh_bottom_element_sp, min_temp, max_temp, tset_C)
|
990
988
|
# Lower element is enabled if the ambient air temperature prevents the HP from running
|
991
|
-
leschedoverride_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_bottom_element_sp,
|
989
|
+
leschedoverride_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(hpwh_bottom_element_sp, *EPlus::EMSActuatorScheduleConstantValue)
|
992
990
|
leschedoverride_actuator.setName("#{obj_name_hpwh} LESchedOverride")
|
993
991
|
hpwh_ctrl_program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
994
992
|
hpwh_ctrl_program.setName("#{obj_name_hpwh} Control")
|
@@ -1052,7 +1050,7 @@ class Waterheater
|
|
1052
1050
|
loc_schedule: loc_schedule,
|
1053
1051
|
model: model,
|
1054
1052
|
ua: assumed_ua,
|
1055
|
-
|
1053
|
+
is_dsh_storage: true)
|
1056
1054
|
set_parasitic_power_for_storage_wh(water_heater: storage_tank)
|
1057
1055
|
|
1058
1056
|
loop.addSupplyBranchForComponent(storage_tank)
|
@@ -1188,6 +1186,7 @@ class Waterheater
|
|
1188
1186
|
if water_heating_system.fuel_type == HPXML::FuelTypeElectricity
|
1189
1187
|
return 0.98
|
1190
1188
|
else
|
1189
|
+
# FUTURE: Develop a separate algorithm specific to UEF.
|
1191
1190
|
ef = water_heating_system.energy_factor
|
1192
1191
|
if ef.nil?
|
1193
1192
|
ef = calc_ef_from_uef(water_heating_system)
|
@@ -1283,12 +1282,6 @@ class Waterheater
|
|
1283
1282
|
# EMS for calculating the EC_adj
|
1284
1283
|
|
1285
1284
|
# Sensors
|
1286
|
-
eplus_fuel = EPlus.input_fuel_map(fuel_type)
|
1287
|
-
if eplus_fuel == EPlus::FuelTypeElectricity
|
1288
|
-
ep_consumption_name = "#{EPlus.output_fuel_map(eplus_fuel)} Power"
|
1289
|
-
else
|
1290
|
-
ep_consumption_name = "#{EPlus.output_fuel_map(eplus_fuel)} Rate"
|
1291
|
-
end
|
1292
1285
|
if [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? water_heating_system.water_heater_type
|
1293
1286
|
ec_adj_sensor_hx = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Fluid Heat Exchanger Heat Transfer Energy')
|
1294
1287
|
ec_adj_sensor_hx.setName("#{combi_hx.name} energy")
|
@@ -1296,32 +1289,32 @@ class Waterheater
|
|
1296
1289
|
ec_adj_sensor_boiler_heating = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Boiler Heating Energy')
|
1297
1290
|
ec_adj_sensor_boiler_heating.setName("#{combi_boiler.name} heating energy")
|
1298
1291
|
ec_adj_sensor_boiler_heating.setKeyName(combi_boiler.name.to_s)
|
1299
|
-
ec_adj_sensor_boiler = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Boiler #{
|
1292
|
+
ec_adj_sensor_boiler = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Boiler #{EPlus.fuel_type(fuel_type)} Rate")
|
1300
1293
|
ec_adj_sensor_boiler.setName("#{combi_boiler.name} energy")
|
1301
1294
|
ec_adj_sensor_boiler.setKeyName(combi_boiler.name.to_s)
|
1302
1295
|
else
|
1303
|
-
ec_adj_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Water Heater #{
|
1296
|
+
ec_adj_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Water Heater #{EPlus.fuel_type(fuel_type)} Rate")
|
1304
1297
|
ec_adj_sensor.setName("#{tank.name} energy")
|
1305
1298
|
ec_adj_sensor.setKeyName(tank.name.to_s)
|
1306
1299
|
if water_heating_system.water_heater_type == HPXML::WaterHeaterTypeHeatPump
|
1307
|
-
ec_adj_hp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
1300
|
+
ec_adj_hp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Cooling Coil Water Heating #{EPlus::FuelTypeElectricity} Rate")
|
1308
1301
|
ec_adj_hp_sensor.setName("#{heater.dXCoil.name} energy")
|
1309
1302
|
ec_adj_hp_sensor.setKeyName(heater.dXCoil.name.to_s)
|
1310
|
-
ec_adj_fan_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
1303
|
+
ec_adj_fan_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Fan #{EPlus::FuelTypeElectricity} Rate")
|
1311
1304
|
ec_adj_fan_sensor.setName("#{heater.fan.name} energy")
|
1312
1305
|
ec_adj_fan_sensor.setKeyName(heater.fan.name.to_s)
|
1313
1306
|
end
|
1314
1307
|
end
|
1315
1308
|
|
1316
|
-
ec_adj_oncyc_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
1309
|
+
ec_adj_oncyc_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Water Heater On Cycle Parasitic #{EPlus::FuelTypeElectricity} Rate")
|
1317
1310
|
ec_adj_oncyc_sensor.setName("#{tank.name} on cycle parasitic")
|
1318
1311
|
ec_adj_oncyc_sensor.setKeyName(tank.name.to_s)
|
1319
|
-
ec_adj_offcyc_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
1312
|
+
ec_adj_offcyc_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Water Heater Off Cycle Parasitic #{EPlus::FuelTypeElectricity} Rate")
|
1320
1313
|
ec_adj_offcyc_sensor.setName("#{tank.name} off cycle parasitic")
|
1321
1314
|
ec_adj_offcyc_sensor.setKeyName(tank.name.to_s)
|
1322
1315
|
|
1323
1316
|
# Actuators
|
1324
|
-
ec_adj_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(ec_adj_object,
|
1317
|
+
ec_adj_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(ec_adj_object, *EPlus::EMSActuatorOtherEquipmentPower)
|
1325
1318
|
ec_adj_actuator.setName("#{heater.name} ec_adj_act")
|
1326
1319
|
|
1327
1320
|
# Program
|
@@ -1347,7 +1340,7 @@ class Waterheater
|
|
1347
1340
|
program_calling_manager.addProgram(ec_adj_program)
|
1348
1341
|
|
1349
1342
|
# Sensor for EMS reporting
|
1350
|
-
ec_adj_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Other Equipment #{
|
1343
|
+
ec_adj_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, "Other Equipment #{EPlus.fuel_type(fuel_type)} Energy")
|
1351
1344
|
ec_adj_object_sensor.setName("#{ec_adj_object.name} energy consumption")
|
1352
1345
|
ec_adj_object_sensor.setKeyName(ec_adj_object.name.to_s)
|
1353
1346
|
|
@@ -1386,8 +1379,11 @@ class Waterheater
|
|
1386
1379
|
|
1387
1380
|
def self.get_default_performance_adjustment(water_heating_system)
|
1388
1381
|
return unless water_heating_system.water_heater_type == HPXML::WaterHeaterTypeTankless
|
1389
|
-
|
1390
|
-
|
1382
|
+
if not water_heating_system.energy_factor.nil?
|
1383
|
+
return 0.92 # Applies EF, updated per 301-2019
|
1384
|
+
elsif not water_heating_system.uniform_energy_factor.nil?
|
1385
|
+
return 0.94 # Applies UEF, updated per 301-2019
|
1386
|
+
end
|
1391
1387
|
end
|
1392
1388
|
|
1393
1389
|
def self.get_default_location(hpxml, iecc_zone)
|
@@ -1439,29 +1435,62 @@ class Waterheater
|
|
1439
1435
|
end
|
1440
1436
|
|
1441
1437
|
def self.calc_tank_UA(act_vol, water_heating_system, solar_fraction)
|
1442
|
-
#
|
1443
|
-
#
|
1444
|
-
#
|
1438
|
+
# If using EF:
|
1439
|
+
# Calculates the U value, UA of the tank and conversion efficiency (eta_c)
|
1440
|
+
# based on the Energy Factor and recovery efficiency of the tank
|
1441
|
+
# Source: Burch and Erickson 2004 - http://www.nrel.gov/docs/gen/fy04/36035.pdf
|
1442
|
+
# IF using UEF:
|
1443
|
+
# Calculates the U value, UA of the tank and conversion efficiency (eta_c)
|
1444
|
+
# based on the Uniform Energy Factor, First Hour Rating, and Recovery Efficiency of the tank
|
1445
|
+
# Source: Maguire and Roberts 2020 - https://www.ashrae.org/file%20library/conferences/specialty%20conferences/2020%20building%20performance/papers/d-bsc20-c039.pdf
|
1445
1446
|
if water_heating_system.water_heater_type == HPXML::WaterHeaterTypeTankless
|
1446
|
-
|
1447
|
+
if not water_heating_system.energy_factor.nil?
|
1448
|
+
eta_c = water_heating_system.energy_factor * water_heating_system.performance_adjustment
|
1449
|
+
elsif not water_heating_system.uniform_energy_factor.nil?
|
1450
|
+
eta_c = water_heating_system.uniform_energy_factor * water_heating_system.performance_adjustment
|
1451
|
+
end
|
1447
1452
|
ua = 0.0
|
1448
1453
|
surface_area = 1.0
|
1449
1454
|
else
|
1450
|
-
volume_drawn = 64.3 # gal/day
|
1451
1455
|
density = 8.2938 # lb/gal
|
1452
|
-
draw_mass = volume_drawn * density # lb
|
1453
1456
|
cp = 1.0007 # Btu/lb-F
|
1454
|
-
t = 135.0 # F
|
1455
1457
|
t_in = 58.0 # F
|
1456
1458
|
t_env = 67.5 # F
|
1459
|
+
|
1460
|
+
if not water_heating_system.energy_factor.nil?
|
1461
|
+
t = 135.0 # F
|
1462
|
+
volume_drawn = 64.3 # gal/day
|
1463
|
+
elsif not water_heating_system.uniform_energy_factor.nil?
|
1464
|
+
t = 125.0 # F
|
1465
|
+
if water_heating_system.first_hour_rating < 18.0
|
1466
|
+
volume_drawn = 10.0 # gal
|
1467
|
+
elsif water_heating_system.first_hour_rating < 51.0 # Includes 18 gal up to (but not including) 51
|
1468
|
+
volume_drawn = 38.0 # gal
|
1469
|
+
elsif water_heating_system.first_hour_rating < 75.0
|
1470
|
+
volume_drawn = 55.0 # gal
|
1471
|
+
else
|
1472
|
+
volume_drawn = 84.0 # gal
|
1473
|
+
end
|
1474
|
+
end
|
1475
|
+
|
1476
|
+
draw_mass = volume_drawn * density # lb
|
1457
1477
|
q_load = draw_mass * cp * (t - t_in) # Btu/day
|
1458
|
-
pow = water_heating_system.heating_capacity
|
1478
|
+
pow = water_heating_system.heating_capacity # Btu/h
|
1459
1479
|
surface_area, a_side = calc_tank_areas(act_vol)
|
1460
1480
|
if water_heating_system.fuel_type != HPXML::FuelTypeElectricity
|
1461
|
-
|
1462
|
-
|
1481
|
+
if not water_heating_system.energy_factor.nil?
|
1482
|
+
ua = (water_heating_system.recovery_efficiency / water_heating_system.energy_factor - 1.0) / ((t - t_env) * (24.0 / q_load - 1.0 / (pow * water_heating_system.energy_factor))) # Btu/hr-F
|
1483
|
+
eta_c = (water_heating_system.recovery_efficiency + ua * (t - t_env) / pow) # conversion efficiency is supposed to be calculated with initial tank ua
|
1484
|
+
elsif not water_heating_system.uniform_energy_factor.nil?
|
1485
|
+
ua = ((water_heating_system.recovery_efficiency / water_heating_system.uniform_energy_factor) - 1.0) / ((t - t_env) * (24.0 / q_load) - ((t - t_env) / (pow * water_heating_system.uniform_energy_factor))) # Btu/hr-F
|
1486
|
+
eta_c = water_heating_system.recovery_efficiency + ((ua * (t - t_env)) / pow) # conversion efficiency is slightly larger than recovery efficiency
|
1487
|
+
end
|
1463
1488
|
else # is Electric
|
1464
|
-
|
1489
|
+
if not water_heating_system.energy_factor.nil?
|
1490
|
+
ua = q_load * (1.0 / water_heating_system.energy_factor - 1.0) / ((t - t_env) * 24.0)
|
1491
|
+
elsif not water_heating_system.uniform_energy_factor.nil?
|
1492
|
+
ua = q_load * (1.0 / water_heating_system.uniform_energy_factor - 1.0) / ((24.0 * (t - t_env)) * (0.8 + 0.2 * ((t_in - t_env) / (t - t_env))))
|
1493
|
+
end
|
1465
1494
|
eta_c = 1.0
|
1466
1495
|
end
|
1467
1496
|
ua = apply_tank_jacket(water_heating_system, ua, a_side)
|
@@ -1551,12 +1580,12 @@ class Waterheater
|
|
1551
1580
|
OpenStudio::Model::SetpointManagerScheduled.new(model, new_schedule)
|
1552
1581
|
end
|
1553
1582
|
|
1554
|
-
def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: nil, loc_space:, loc_schedule: nil, model:, ua:, eta_c: nil, oncycle_p: 0.0,
|
1555
|
-
# storage tank doesn't
|
1556
|
-
if
|
1583
|
+
def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: nil, loc_space:, loc_schedule: nil, model:, ua:, eta_c: nil, oncycle_p: 0.0, is_dsh_storage: false, is_combi: false)
|
1584
|
+
# storage tank doesn't require water_heating_system class argument being passed
|
1585
|
+
if is_dsh_storage || is_combi
|
1557
1586
|
fuel = nil
|
1558
1587
|
cap = 0.0
|
1559
|
-
if
|
1588
|
+
if is_dsh_storage
|
1560
1589
|
tank_type = HPXML::WaterHeaterTypeStorage
|
1561
1590
|
else
|
1562
1591
|
tank_type = water_heating_system.water_heater_type
|
@@ -1569,7 +1598,7 @@ class Waterheater
|
|
1569
1598
|
new_heater = OpenStudio::Model::WaterHeaterMixed.new(model)
|
1570
1599
|
new_heater.setName(name)
|
1571
1600
|
new_heater.setHeaterThermalEfficiency(eta_c) unless eta_c.nil?
|
1572
|
-
new_heater.setHeaterFuelType(EPlus.
|
1601
|
+
new_heater.setHeaterFuelType(EPlus.fuel_type(fuel)) unless fuel.nil?
|
1573
1602
|
configure_setpoint_schedule(new_heater, t_set_c, model)
|
1574
1603
|
new_heater.setMaximumTemperatureLimit(99.0)
|
1575
1604
|
if [HPXML::WaterHeaterTypeTankless, HPXML::WaterHeaterTypeCombiTankless].include? tank_type
|
@@ -1583,7 +1612,7 @@ class Waterheater
|
|
1583
1612
|
new_heater.setHeaterMaximumCapacity(UnitConversions.convert(cap, 'kBtu/hr', 'W'))
|
1584
1613
|
new_heater.setHeaterMinimumCapacity(0.0)
|
1585
1614
|
new_heater.setTankVolume(UnitConversions.convert(act_vol, 'gal', 'm^3'))
|
1586
|
-
set_wh_parasitic_parameters(oncycle_p, water_heating_system, new_heater,
|
1615
|
+
set_wh_parasitic_parameters(oncycle_p, water_heating_system, new_heater, is_dsh_storage)
|
1587
1616
|
set_wh_ambient(loc_space, loc_schedule, model, new_heater)
|
1588
1617
|
|
1589
1618
|
ua_w_k = UnitConversions.convert(ua, 'Btu/(hr*F)', 'W/K')
|
@@ -1593,7 +1622,7 @@ class Waterheater
|
|
1593
1622
|
return new_heater
|
1594
1623
|
end
|
1595
1624
|
|
1596
|
-
def self.set_wh_parasitic_parameters(oncycle_p, water_heating_system, water_heater,
|
1625
|
+
def self.set_wh_parasitic_parameters(oncycle_p, water_heating_system, water_heater, is_dsh_storage)
|
1597
1626
|
water_heater.setOnCycleParasiticFuelType(EPlus::FuelTypeElectricity)
|
1598
1627
|
water_heater.setOnCycleParasiticHeatFractiontoTank(0)
|
1599
1628
|
water_heater.setOnCycleLossFractiontoThermalZone(1.0)
|
@@ -1604,15 +1633,15 @@ class Waterheater
|
|
1604
1633
|
# Set fraction of heat loss from tank to ambient (vs out flue)
|
1605
1634
|
# Based on lab testing done by LBNL
|
1606
1635
|
skinlossfrac = 1.0
|
1607
|
-
if not
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1636
|
+
if (not is_dsh_storage) && (water_heating_system.fuel_type != HPXML::FuelTypeElectricity) && (water_heating_system.water_heater_type == HPXML::WaterHeaterTypeStorage)
|
1637
|
+
# Fuel storage water heater
|
1638
|
+
# FUTURE: We currently always end up with oncycle_p (i.e., natural draft); revise this algorithm.
|
1639
|
+
if oncycle_p == 0.0
|
1640
|
+
skinlossfrac = 0.64 # Natural draft
|
1641
|
+
elsif water_heating_system.energy_factor < 0.8
|
1642
|
+
skinlossfrac = 0.91 # Power vent
|
1643
|
+
else
|
1644
|
+
skinlossfrac = 0.96 # Condensing
|
1616
1645
|
end
|
1617
1646
|
end
|
1618
1647
|
water_heater.setOffCycleLossFractiontoThermalZone(skinlossfrac)
|
@@ -1636,12 +1665,14 @@ class Waterheater
|
|
1636
1665
|
end
|
1637
1666
|
avg_elec = oncycle_p * runtime_frac + offcycle_p * (1 - runtime_frac)
|
1638
1667
|
|
1668
|
+
# FUTURE: These are always zero right now; develop smart defaults.
|
1639
1669
|
water_heater.setOnCycleParasiticFuelConsumptionRate(avg_elec)
|
1640
1670
|
water_heater.setOffCycleParasiticFuelConsumptionRate(avg_elec)
|
1641
1671
|
end
|
1642
1672
|
|
1643
1673
|
def self.set_parasitic_power_for_storage_wh(oncycle_p: 0.0, offcycle_p: 0.0, water_heater:)
|
1644
1674
|
# Set parasitic power consumption
|
1675
|
+
# FUTURE: These are always zero right now; develop smart defaults.
|
1645
1676
|
water_heater.setOnCycleParasiticFuelConsumptionRate(oncycle_p)
|
1646
1677
|
water_heater.setOffCycleParasiticFuelConsumptionRate(offcycle_p)
|
1647
1678
|
end
|