urbanopt-cli 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/{nightly_build.yml → nightly_ci_build.yml} +6 -5
- data/CHANGELOG.md +16 -2
- data/CMakeLists.txt +7 -7
- data/Gemfile +8 -7
- data/LICENSE.md +18 -15
- data/README.md +2 -1
- data/Rakefile +2 -37
- data/example_files/Gemfile +10 -8
- data/example_files/mappers/Baseline.rb +170 -191
- data/example_files/mappers/ChilledWaterStorage.rb +8 -30
- data/example_files/mappers/ClassProject.rb +2 -27
- data/example_files/mappers/CreateBar.rb +2 -28
- data/example_files/mappers/EvCharging.rb +2 -27
- data/example_files/mappers/FlexibleHotWater.rb +2 -27
- data/example_files/mappers/Floorspace.rb +2 -27
- data/example_files/mappers/HighEfficiency.rb +2 -27
- data/example_files/mappers/HighEfficiencyCreateBar.rb +2 -27
- data/example_files/mappers/HighEfficiencyFloorspace.rb +2 -27
- data/example_files/mappers/PeakHoursMelsShedding.rb +4 -27
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +4 -27
- data/example_files/mappers/ThermalStorage.rb +2 -28
- data/example_files/measures/BuildResidentialModel/measure.rb +30 -60
- data/example_files/measures/BuildResidentialModel/measure.xml +253 -84
- data/example_files/measures/BuildResidentialModel/resources/util.rb +45 -45
- data/example_files/python_deps/dependencies.json +3 -3
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +28 -19
- data/example_files/resources/hpxml-measures/.gitignore +0 -997
- data/example_files/resources/hpxml-measures/.readthedocs.yml +9 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +476 -230
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +244 -75
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +42 -15
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +24 -9
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +11 -33
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +23 -50
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/README.md +2 -2
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/constants.rb +119 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +67 -290
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.md +6 -5
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +78 -349
- data/example_files/resources/hpxml-measures/Changelog.md +80 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +212 -144
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +164 -170
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +238 -167
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +36 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv +33 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +9 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +79 -61
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +387 -124
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +427 -196
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +11515 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/README.md +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +224 -85
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +334 -319
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +572 -838
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +162 -68
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +4 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +12 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +34 -37
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +8 -101
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +31 -40
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-non-stochastic.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-10-mins.csv +52561 -52561
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic.csv +8761 -8761
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +384 -155
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/util.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +68 -90
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +34 -223
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +16 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +94 -40
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +765 -302
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +119 -69
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +51 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +196 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +36 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +571 -61
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +190 -81
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +11 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +188 -50
- data/example_files/resources/hpxml-measures/README.md +3 -3
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +659 -815
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +301 -1112
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +605 -350
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +18 -14
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +15 -15
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +13 -3
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +3 -3
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +894 -596
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +127 -76
- data/example_files/resources/hpxml-measures/tasks.rb +185 -2802
- data/example_files/resources/hpxml-measures/workflow/hpxml_inputs.json +3401 -0
- data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +1 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +1 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +1 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +17 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +3 -4
- data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +12 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +9 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +9 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-2stories.xml → base-bldgtype-attached-2stories.xml} +610 -639
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached-atticroof-cathedral.xml → base-bldgtype-attached-atticroof-cathedral.xml} +558 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-attached-infil-compartmentalization-test.xml +611 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-single-family-attached.xml → base-bldgtype-attached.xml} +610 -639
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-infil-compartmentalization-test.xml +462 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-calctype-operational.xml → base-bldgtype-multifamily-residents-1.xml} +453 -480
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +11 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +15 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +10 -39
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +11 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +19 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +18 -24
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ela.xml +549 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +13 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-cfm.xml +552 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +17 -47
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading-seasons.xml +559 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +19 -25
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-insulation.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-autosized-backup.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml → base-hvac-air-to-air-heat-pump-1-speed-heating-capacity-17f.xml} +552 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml → base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml} +562 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml +587 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted-backup-hardsized.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-baseboard.xml +519 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-sizing-controls.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only-pilot.xml +513 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-crankcase-heater-40w.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +17 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-buried.xml +555 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-effective-rvalue.xml +553 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only-pilot-light.xml +506 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-pilot.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +14 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml +525 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-furnace.xml +564 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml +506 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-natural-gas.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp-heating-capacity-17f.xml +513 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +16 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +11 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-kwh-per-year.xml +529 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-mixed.xml +537 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none-ceiling-fans.xml +516 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +14 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +14 -37
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +12 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading-bldgtype-multifamily.xml +509 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +10 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +30 -138
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +24 -26
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-round-trip-efficiency.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +18 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +18 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +18 -44
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +16 -42
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0-runperiod-1-month.xml +560 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-loads-large-uncommon.xml → base-residents-1-misc-loads-large-uncommon.xml} +616 -644
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-loads-large-uncommon2.xml → base-residents-1-misc-loads-large-uncommon2.xml} +616 -644
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational.xml → base-residents-1.xml} +547 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-calctype-operational-misc-defaults.xml → base-residents-5.xml} +515 -539
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-detailed-occupancy-smooth.xml → base-schedules-detailed-occupancy-stochastic-vacancy-year-round.xml} +563 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +21 -41
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-available.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage-natvent-unavailable.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml +620 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy-year-round.xml +619 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml +619 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +10 -38
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-temperature-capacitance-multiplier.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-30-mins.xml +10 -40
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +10 -37
- data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +16 -4
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +16 -3
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +16 -3
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +16 -2
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Long_Residence.xml +386 -0
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Vatilo_Residence.xml +381 -0
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Victor_Residence.xml +370 -0
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +2 -12
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +2 -12
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +2 -5
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -9
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -9
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +475 -444
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +475 -444
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +177 -112
- data/example_files/resources/meta_measure.rb +2 -27
- data/example_files/xml_building/17/README.md +3 -3
- data/lib/uo_cli/version.rb +3 -38
- data/lib/uo_cli.rb +3 -38
- data/uo_cli.gemspec +6 -7
- metadata +70 -51
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules_config.json +0 -388
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +0 -6136
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +0 -4846
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-smooth.csv +0 -8761
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-vacancy.csv +0 -8761
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_CO_Colorado.Springs-Peterson.Field.724660_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_DE_Wilmington-New.Castle.County.AP.724089_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_FL_Miami.Intl.AP.722020_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_MD_Baltimore-Washington.Intl.AP.724060_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_MN_Duluth.Intl.AP.727450_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_NC_Charlotte-Douglas.Intl.AP.723140_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_NJ_Cape.May.County.AP.745966_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_NV_Las.Vegas-McCarran.Intl.AP.723860_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/USA_TX_Dallas-Fort.Worth.Intl.AP.722590_TMY3-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/US_CO_Boulder_AMY_2012-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +0 -35
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +0 -2508
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +0 -2508
@@ -3,7 +3,7 @@
|
|
3
3
|
class HVAC
|
4
4
|
def self.apply_air_source_hvac_systems(model, cooling_system, heating_system,
|
5
5
|
sequential_cool_load_fracs, sequential_heat_load_fracs,
|
6
|
-
control_zone)
|
6
|
+
control_zone, hvac_unavailable_periods)
|
7
7
|
is_heatpump = false
|
8
8
|
if not cooling_system.nil?
|
9
9
|
if cooling_system.is_a? HPXML::HeatPump
|
@@ -105,12 +105,13 @@ class HVAC
|
|
105
105
|
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model)
|
106
106
|
htg_coil.setGasBurnerEfficiency(heating_system.heating_efficiency_afue)
|
107
107
|
htg_coil.setParasiticElectricLoad(0)
|
108
|
-
htg_coil.setParasiticGasLoad(
|
108
|
+
htg_coil.setParasiticGasLoad(UnitConversions.convert(heating_system.pilot_light_btuh.to_f, 'Btu/hr', 'W'))
|
109
109
|
htg_coil.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
|
110
110
|
end
|
111
111
|
htg_coil.setNominalCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
|
112
112
|
htg_coil.setName(obj_name + ' htg coil')
|
113
113
|
htg_coil.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
|
114
|
+
htg_coil.additionalProperties.setFeature('IsHeatPumpBackup', heating_system.is_heat_pump_backup_system) # Used by reporting measure
|
114
115
|
fan_cfms << htg_cfm
|
115
116
|
end
|
116
117
|
end
|
@@ -124,8 +125,8 @@ class HVAC
|
|
124
125
|
end
|
125
126
|
end
|
126
127
|
fan = create_supply_fan(model, obj_name, fan_watts_per_cfm, fan_cfms)
|
127
|
-
if heating_system.is_a?(HPXML::HeatPump) && (not heating_system.backup_system.nil?) && (not
|
128
|
-
# Disable blower fan power below
|
128
|
+
if heating_system.is_a?(HPXML::HeatPump) && (not heating_system.backup_system.nil?) && (not htg_ap.hp_min_temp.nil?)
|
129
|
+
# Disable blower fan power below compressor lockout temperature if separate backup heating system
|
129
130
|
set_fan_power_ems_program(model, fan, htg_ap.hp_min_temp)
|
130
131
|
end
|
131
132
|
if (not cooling_system.nil?) && (not heating_system.nil?) && (cooling_system == heating_system)
|
@@ -139,7 +140,11 @@ class HVAC
|
|
139
140
|
end
|
140
141
|
end
|
141
142
|
if not heating_system.nil?
|
142
|
-
|
143
|
+
if heating_system.is_heat_pump_backup_system
|
144
|
+
disaggregate_fan_or_pump(model, fan, nil, nil, htg_coil, heating_system)
|
145
|
+
else
|
146
|
+
disaggregate_fan_or_pump(model, fan, htg_coil, nil, htg_supp_coil, heating_system)
|
147
|
+
end
|
143
148
|
end
|
144
149
|
end
|
145
150
|
|
@@ -162,15 +167,15 @@ class HVAC
|
|
162
167
|
end
|
163
168
|
|
164
169
|
# Air Loop
|
165
|
-
air_loop = create_air_loop(model, obj_name, air_loop_unitary, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, [htg_cfm.to_f, clg_cfm.to_f].max)
|
170
|
+
air_loop = create_air_loop(model, obj_name, air_loop_unitary, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, [htg_cfm.to_f, clg_cfm.to_f].max, heating_system, hvac_unavailable_periods)
|
166
171
|
|
167
172
|
apply_installation_quality(model, heating_system, cooling_system, air_loop_unitary, htg_coil, clg_coil, control_zone)
|
168
173
|
|
169
174
|
return air_loop
|
170
175
|
end
|
171
176
|
|
172
|
-
def self.apply_evaporative_cooler(model, cooling_system,
|
173
|
-
|
177
|
+
def self.apply_evaporative_cooler(model, cooling_system, sequential_cool_load_fracs, control_zone,
|
178
|
+
hvac_unavailable_periods)
|
174
179
|
|
175
180
|
obj_name = Constants.ObjectNameEvaporativeCooler
|
176
181
|
|
@@ -188,7 +193,7 @@ class HVAC
|
|
188
193
|
evap_cooler.additionalProperties.setFeature('HPXML_ID', cooling_system.id) # Used by reporting measure
|
189
194
|
|
190
195
|
# Air Loop
|
191
|
-
air_loop = create_air_loop(model, obj_name, evap_cooler, control_zone, [0], sequential_cool_load_fracs, clg_cfm)
|
196
|
+
air_loop = create_air_loop(model, obj_name, evap_cooler, control_zone, [0], sequential_cool_load_fracs, clg_cfm, nil, hvac_unavailable_periods)
|
192
197
|
|
193
198
|
# Fan
|
194
199
|
fan_watts_per_cfm = [2.79 * clg_cfm**-0.29, 0.6].min # W/cfm; fit of efficacy to air flow from the CEC listed equipment
|
@@ -221,7 +226,7 @@ class HVAC
|
|
221
226
|
|
222
227
|
def self.apply_ground_to_air_heat_pump(model, runner, weather, heat_pump,
|
223
228
|
sequential_heat_load_fracs, sequential_cool_load_fracs,
|
224
|
-
control_zone, ground_conductivity)
|
229
|
+
control_zone, ground_conductivity, hvac_unavailable_periods)
|
225
230
|
|
226
231
|
obj_name = Constants.ObjectNameGroundSourceHeatPump
|
227
232
|
|
@@ -308,7 +313,7 @@ class HVAC
|
|
308
313
|
sizing_plant = plant_loop.sizingPlant
|
309
314
|
sizing_plant.setLoopType('Condenser')
|
310
315
|
sizing_plant.setDesignLoopExitTemperature(UnitConversions.convert(hp_ap.design_chw, 'F', 'C'))
|
311
|
-
sizing_plant.setLoopDesignTemperatureDifference(UnitConversions.convert(hp_ap.design_delta_t, '
|
316
|
+
sizing_plant.setLoopDesignTemperatureDifference(UnitConversions.convert(hp_ap.design_delta_t, 'deltaF', 'deltaC'))
|
312
317
|
|
313
318
|
setpoint_mgr_follow_ground_temp = OpenStudio::Model::SetpointManagerFollowGroundTemperature.new(model)
|
314
319
|
setpoint_mgr_follow_ground_temp.setName(obj_name + ' condenser loop temp')
|
@@ -379,7 +384,7 @@ class HVAC
|
|
379
384
|
end
|
380
385
|
|
381
386
|
# Air Loop
|
382
|
-
air_loop = create_air_loop(model, obj_name, air_loop_unitary, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, [htg_cfm, clg_cfm].max)
|
387
|
+
air_loop = create_air_loop(model, obj_name, air_loop_unitary, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, [htg_cfm, clg_cfm].max, heat_pump, hvac_unavailable_periods)
|
383
388
|
|
384
389
|
# HVAC Installation Quality
|
385
390
|
apply_installation_quality(model, heat_pump, heat_pump, air_loop_unitary, htg_coil, clg_coil, control_zone)
|
@@ -389,7 +394,7 @@ class HVAC
|
|
389
394
|
|
390
395
|
def self.apply_water_loop_to_air_heat_pump(model, heat_pump,
|
391
396
|
sequential_heat_load_fracs, sequential_cool_load_fracs,
|
392
|
-
control_zone)
|
397
|
+
control_zone, hvac_unavailable_periods)
|
393
398
|
if heat_pump.fraction_cool_load_served > 0
|
394
399
|
# WLHPs connected to chillers or cooling towers should have already been converted to
|
395
400
|
# central air conditioners
|
@@ -398,7 +403,6 @@ class HVAC
|
|
398
403
|
|
399
404
|
obj_name = Constants.ObjectNameWaterLoopHeatPump
|
400
405
|
|
401
|
-
hp_ap = heat_pump.additional_properties
|
402
406
|
htg_cfm = heat_pump.heating_airflow_cfm
|
403
407
|
|
404
408
|
# Cooling Coil (none)
|
@@ -411,7 +415,7 @@ class HVAC
|
|
411
415
|
htg_coil.setName(obj_name + ' htg coil')
|
412
416
|
htg_coil.setRatedCOP(heat_pump.heating_efficiency_cop)
|
413
417
|
htg_coil.setDefrostTimePeriodFraction(0.00001) # Disable defrost; avoid E+ warning w/ value of zero
|
414
|
-
htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(
|
418
|
+
htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(-40)
|
415
419
|
htg_coil.setRatedTotalHeatingCapacity(UnitConversions.convert(heat_pump.heating_capacity, 'Btu/hr', 'W'))
|
416
420
|
htg_coil.setRatedAirFlowRate(htg_cfm)
|
417
421
|
htg_coil.additionalProperties.setFeature('HPXML_ID', heat_pump.id) # Used by reporting measure
|
@@ -425,16 +429,16 @@ class HVAC
|
|
425
429
|
disaggregate_fan_or_pump(model, fan, htg_coil, clg_coil, htg_supp_coil, heat_pump)
|
426
430
|
|
427
431
|
# Unitary System
|
428
|
-
air_loop_unitary = create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil, htg_supp_coil, htg_cfm, nil
|
432
|
+
air_loop_unitary = create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil, htg_supp_coil, htg_cfm, nil)
|
429
433
|
|
430
434
|
# Air Loop
|
431
|
-
air_loop = create_air_loop(model, obj_name, air_loop_unitary, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, htg_cfm)
|
435
|
+
air_loop = create_air_loop(model, obj_name, air_loop_unitary, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, htg_cfm, heat_pump, hvac_unavailable_periods)
|
432
436
|
|
433
437
|
return air_loop
|
434
438
|
end
|
435
439
|
|
436
440
|
def self.apply_boiler(model, runner, heating_system,
|
437
|
-
sequential_heat_load_fracs, control_zone)
|
441
|
+
sequential_heat_load_fracs, control_zone, hvac_unavailable_periods)
|
438
442
|
obj_name = Constants.ObjectNameBoiler
|
439
443
|
is_condensing = false # FUTURE: Expose as input; default based on AFUE
|
440
444
|
oat_reset_enabled = false
|
@@ -462,8 +466,8 @@ class HVAC
|
|
462
466
|
|
463
467
|
loop_sizing = plant_loop.sizingPlant
|
464
468
|
loop_sizing.setLoopType('Heating')
|
465
|
-
loop_sizing.setDesignLoopExitTemperature(UnitConversions.convert(design_temp
|
466
|
-
loop_sizing.setLoopDesignTemperatureDifference(UnitConversions.convert(20.0, '
|
469
|
+
loop_sizing.setDesignLoopExitTemperature(UnitConversions.convert(design_temp, 'F', 'C'))
|
470
|
+
loop_sizing.setLoopDesignTemperatureDifference(UnitConversions.convert(20.0, 'deltaF', 'deltaC'))
|
467
471
|
|
468
472
|
# Pump
|
469
473
|
pump_w = heating_system.electric_auxiliary_energy / 2.08
|
@@ -488,10 +492,10 @@ class HVAC
|
|
488
492
|
boiler.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
|
489
493
|
if is_condensing
|
490
494
|
# Convert Rated Efficiency at 80F and 1.0PLR where the performance curves are derived from to Design condition as input
|
491
|
-
boiler_RatedHWRT = UnitConversions.convert(80.0
|
495
|
+
boiler_RatedHWRT = UnitConversions.convert(80.0, 'F', 'C')
|
492
496
|
plr_Rated = 1.0
|
493
497
|
plr_Design = 1.0
|
494
|
-
boiler_DesignHWRT = UnitConversions.convert(design_temp - 20.0
|
498
|
+
boiler_DesignHWRT = UnitConversions.convert(design_temp - 20.0, 'F', 'C')
|
495
499
|
# Efficiency curves are normalized using 80F return water temperature, at 0.254PLR
|
496
500
|
condBlr_TE_Coeff = [1.058343061, 0.052650153, 0.0087272, 0.001742217, 0.00000333715, 0.000513723]
|
497
501
|
boilerEff_Norm = heating_system.heating_efficiency_afue / (condBlr_TE_Coeff[0] - condBlr_TE_Coeff[1] * plr_Rated - condBlr_TE_Coeff[2] * plr_Rated**2 - condBlr_TE_Coeff[3] * boiler_RatedHWRT + condBlr_TE_Coeff[4] * boiler_RatedHWRT**2 + condBlr_TE_Coeff[5] * boiler_RatedHWRT * plr_Rated)
|
@@ -516,6 +520,10 @@ class HVAC
|
|
516
520
|
boiler.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
|
517
521
|
set_pump_power_ems_program(model, pump_w, pump, boiler)
|
518
522
|
|
523
|
+
# FIXME: EMS program to model pilot light
|
524
|
+
# Can be replaced if https://github.com/NREL/EnergyPlus/issues/9875 is ever implemented
|
525
|
+
set_boiler_pilot_light_ems_program(model, boiler, heating_system)
|
526
|
+
|
519
527
|
if is_condensing && oat_reset_enabled
|
520
528
|
setpoint_manager_oar = OpenStudio::Model::SetpointManagerOutdoorAirReset.new(model)
|
521
529
|
setpoint_manager_oar.setName(obj_name + ' outdoor reset')
|
@@ -547,8 +555,8 @@ class HVAC
|
|
547
555
|
pipe_demand_outlet = OpenStudio::Model::PipeAdiabatic.new(model)
|
548
556
|
pipe_demand_outlet.addToNode(plant_loop.demandOutletNode)
|
549
557
|
|
550
|
-
bb_ua = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(UnitConversions.convert(loop_sizing.designLoopExitTemperature, 'C', 'F') - 10.0 - 95.0, '
|
551
|
-
max_water_flow = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(20.0, '
|
558
|
+
bb_ua = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(UnitConversions.convert(loop_sizing.designLoopExitTemperature, 'C', 'F') - 10.0 - 95.0, 'deltaF', 'deltaC') * 3.0 # W/K
|
559
|
+
max_water_flow = UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W') / UnitConversions.convert(20.0, 'deltaF', 'deltaC') / 4.186 / 998.2 / 1000.0 * 2.0 # m^3/s
|
552
560
|
fan_cfm = 400.0 * UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'ton') # CFM; assumes 400 cfm/ton
|
553
561
|
|
554
562
|
if heating_system.distribution_system.air_type.to_s == HPXML::AirTypeFanCoil
|
@@ -605,17 +613,21 @@ class HVAC
|
|
605
613
|
zone_hvac = OpenStudio::Model::ZoneHVACBaseboardConvectiveWater.new(model, model.alwaysOnDiscreteSchedule, htg_coil)
|
606
614
|
zone_hvac.setName(obj_name + ' baseboard')
|
607
615
|
zone_hvac.addToThermalZone(control_zone)
|
608
|
-
|
616
|
+
zone_hvac.additionalProperties.setFeature('IsHeatPumpBackup', heating_system.is_heat_pump_backup_system) # Used by reporting measure
|
617
|
+
if heating_system.is_heat_pump_backup_system
|
618
|
+
disaggregate_fan_or_pump(model, pump, nil, nil, zone_hvac, heating_system)
|
619
|
+
else
|
620
|
+
disaggregate_fan_or_pump(model, pump, zone_hvac, nil, nil, heating_system)
|
621
|
+
end
|
609
622
|
end
|
610
623
|
|
611
|
-
control_zone
|
612
|
-
control_zone.setSequentialCoolingFractionSchedule(zone_hvac, get_sequential_load_schedule(model, [0]))
|
624
|
+
set_sequential_load_fractions(model, control_zone, zone_hvac, sequential_heat_load_fracs, nil, hvac_unavailable_periods, heating_system)
|
613
625
|
|
614
626
|
return zone_hvac
|
615
627
|
end
|
616
628
|
|
617
629
|
def self.apply_electric_baseboard(model, heating_system,
|
618
|
-
sequential_heat_load_fracs, control_zone)
|
630
|
+
sequential_heat_load_fracs, control_zone, hvac_unavailable_periods)
|
619
631
|
|
620
632
|
obj_name = Constants.ObjectNameElectricBaseboard
|
621
633
|
|
@@ -626,13 +638,13 @@ class HVAC
|
|
626
638
|
zone_hvac.setNominalCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
|
627
639
|
zone_hvac.addToThermalZone(control_zone)
|
628
640
|
zone_hvac.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
|
641
|
+
zone_hvac.additionalProperties.setFeature('IsHeatPumpBackup', heating_system.is_heat_pump_backup_system) # Used by reporting measure
|
629
642
|
|
630
|
-
control_zone
|
631
|
-
control_zone.setSequentialCoolingFractionSchedule(zone_hvac, get_sequential_load_schedule(model, [0]))
|
643
|
+
set_sequential_load_fractions(model, control_zone, zone_hvac, sequential_heat_load_fracs, nil, hvac_unavailable_periods, heating_system)
|
632
644
|
end
|
633
645
|
|
634
646
|
def self.apply_unit_heater(model, heating_system,
|
635
|
-
sequential_heat_load_fracs, control_zone)
|
647
|
+
sequential_heat_load_fracs, control_zone, hvac_unavailable_periods)
|
636
648
|
|
637
649
|
obj_name = Constants.ObjectNameUnitHeater
|
638
650
|
|
@@ -646,12 +658,13 @@ class HVAC
|
|
646
658
|
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model)
|
647
659
|
htg_coil.setGasBurnerEfficiency(efficiency)
|
648
660
|
htg_coil.setParasiticElectricLoad(0.0)
|
649
|
-
htg_coil.setParasiticGasLoad(
|
661
|
+
htg_coil.setParasiticGasLoad(UnitConversions.convert(heating_system.pilot_light_btuh.to_f, 'Btu/hr', 'W'))
|
650
662
|
htg_coil.setFuelType(EPlus.fuel_type(heating_system.heating_system_fuel))
|
651
663
|
end
|
652
664
|
htg_coil.setNominalCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
|
653
665
|
htg_coil.setName(obj_name + ' htg coil')
|
654
666
|
htg_coil.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
|
667
|
+
htg_coil.additionalProperties.setFeature('IsHeatPumpBackup', heating_system.is_heat_pump_backup_system) # Used by reporting measure
|
655
668
|
|
656
669
|
# Fan
|
657
670
|
htg_cfm = heating_system.heating_airflow_cfm
|
@@ -664,12 +677,11 @@ class HVAC
|
|
664
677
|
unitary_system.setControllingZoneorThermostatLocation(control_zone)
|
665
678
|
unitary_system.addToThermalZone(control_zone)
|
666
679
|
|
667
|
-
control_zone
|
668
|
-
control_zone.setSequentialCoolingFractionSchedule(unitary_system, get_sequential_load_schedule(model, [0]))
|
680
|
+
set_sequential_load_fractions(model, control_zone, unitary_system, sequential_heat_load_fracs, nil, hvac_unavailable_periods, heating_system)
|
669
681
|
end
|
670
682
|
|
671
683
|
def self.apply_ideal_air_loads(model, obj_name, sequential_cool_load_fracs,
|
672
|
-
sequential_heat_load_fracs, control_zone)
|
684
|
+
sequential_heat_load_fracs, control_zone, hvac_unavailable_periods)
|
673
685
|
|
674
686
|
# Ideal Air System
|
675
687
|
ideal_air = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(model)
|
@@ -694,11 +706,10 @@ class HVAC
|
|
694
706
|
ideal_air.setHumidificationControlType('None')
|
695
707
|
ideal_air.addToThermalZone(control_zone)
|
696
708
|
|
697
|
-
control_zone
|
698
|
-
control_zone.setSequentialHeatingFractionSchedule(ideal_air, get_sequential_load_schedule(model, sequential_heat_load_fracs))
|
709
|
+
set_sequential_load_fractions(model, control_zone, ideal_air, sequential_heat_load_fracs, sequential_cool_load_fracs, hvac_unavailable_periods)
|
699
710
|
end
|
700
711
|
|
701
|
-
def self.apply_dehumidifiers(model, dehumidifiers, living_space)
|
712
|
+
def self.apply_dehumidifiers(runner, model, dehumidifiers, living_space, unavailable_periods)
|
702
713
|
dehumidifier_id = dehumidifiers[0].id # Syncs with the ReportSimulationOutput measure, which only looks at first dehumidifier ID
|
703
714
|
|
704
715
|
if dehumidifiers.map { |d| d.rh_setpoint }.uniq.size > 1
|
@@ -744,10 +755,15 @@ class HVAC
|
|
744
755
|
humidistat.setDehumidifyingRelativeHumiditySetpointSchedule(relative_humidity_setpoint_sch)
|
745
756
|
control_zone.setZoneControlHumidistat(humidistat)
|
746
757
|
|
758
|
+
# Availability Schedule
|
759
|
+
dehum_unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::ColumnDehumidifier, unavailable_periods)
|
760
|
+
avail_sch = ScheduleConstant.new(model, obj_name + ' schedule', 1.0, Constants.ScheduleTypeLimitsFraction, unavailable_periods: dehum_unavailable_periods)
|
761
|
+
avail_sch = avail_sch.schedule
|
762
|
+
|
747
763
|
# Dehumidifier
|
748
764
|
zone_hvac = OpenStudio::Model::ZoneHVACDehumidifierDX.new(model, capacity_curve, energy_factor_curve, part_load_frac_curve)
|
749
765
|
zone_hvac.setName(obj_name)
|
750
|
-
zone_hvac.setAvailabilitySchedule(
|
766
|
+
zone_hvac.setAvailabilitySchedule(avail_sch)
|
751
767
|
zone_hvac.setRatedWaterRemoval(UnitConversions.convert(total_capacity, 'pint', 'L'))
|
752
768
|
zone_hvac.setRatedEnergyFactor(avg_energy_factor / total_fraction_served)
|
753
769
|
zone_hvac.setRatedAirFlowRate(UnitConversions.convert(air_flow_rate, 'cfm', 'm^3/s'))
|
@@ -761,33 +777,36 @@ class HVAC
|
|
761
777
|
end
|
762
778
|
end
|
763
779
|
|
764
|
-
def self.apply_ceiling_fans(model, runner, weather, ceiling_fan, living_space, schedules_file
|
780
|
+
def self.apply_ceiling_fans(model, runner, weather, ceiling_fan, living_space, schedules_file,
|
781
|
+
unavailable_periods)
|
765
782
|
obj_name = Constants.ObjectNameCeilingFan
|
766
783
|
medium_cfm = 3000.0 # From ANSI 301-2019
|
767
784
|
hrs_per_day = 10.5 # From ANSI 301-2019
|
768
785
|
cfm_per_w = ceiling_fan.efficiency
|
769
|
-
|
770
|
-
annual_kwh = UnitConversions.convert(
|
786
|
+
count = ceiling_fan.count
|
787
|
+
annual_kwh = UnitConversions.convert(count * medium_cfm / cfm_per_w * hrs_per_day * 365.0, 'Wh', 'kWh')
|
771
788
|
|
772
789
|
# Create schedule
|
773
790
|
ceiling_fan_sch = nil
|
791
|
+
ceiling_fan_col_name = SchedulesFile::ColumnCeilingFan
|
774
792
|
if not schedules_file.nil?
|
775
793
|
annual_kwh *= Schedule.CeilingFanMonthlyMultipliers(weather: weather).split(',').map(&:to_f).sum(0.0) / 12.0
|
776
|
-
ceiling_fan_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name:
|
777
|
-
ceiling_fan_sch = schedules_file.create_schedule_file(col_name:
|
794
|
+
ceiling_fan_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: ceiling_fan_col_name, annual_kwh: annual_kwh)
|
795
|
+
ceiling_fan_sch = schedules_file.create_schedule_file(col_name: ceiling_fan_col_name)
|
778
796
|
end
|
779
797
|
if ceiling_fan_sch.nil?
|
798
|
+
ceiling_fan_unavailable_periods = Schedule.get_unavailable_periods(runner, ceiling_fan_col_name, unavailable_periods)
|
780
799
|
annual_kwh *= ceiling_fan.monthly_multipliers.split(',').map(&:to_f).sum(0.0) / 12.0
|
781
800
|
weekday_sch = ceiling_fan.weekday_fractions
|
782
801
|
weekend_sch = ceiling_fan.weekend_fractions
|
783
802
|
monthly_sch = ceiling_fan.monthly_multipliers
|
784
|
-
ceiling_fan_sch_obj = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', weekday_sch, weekend_sch, monthly_sch, Constants.ScheduleTypeLimitsFraction)
|
803
|
+
ceiling_fan_sch_obj = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', weekday_sch, weekend_sch, monthly_sch, Constants.ScheduleTypeLimitsFraction, unavailable_periods: ceiling_fan_unavailable_periods)
|
785
804
|
ceiling_fan_design_level = ceiling_fan_sch_obj.calc_design_level_from_daily_kwh(annual_kwh / 365.0)
|
786
805
|
ceiling_fan_sch = ceiling_fan_sch_obj.schedule
|
787
806
|
else
|
788
|
-
runner.registerWarning("Both '#{
|
789
|
-
runner.registerWarning("Both '#{
|
790
|
-
runner.registerWarning("Both '#{
|
807
|
+
runner.registerWarning("Both '#{ceiling_fan_col_name}' schedule file and weekday fractions provided; the latter will be ignored.") if !ceiling_fan.weekday_fractions.nil?
|
808
|
+
runner.registerWarning("Both '#{ceiling_fan_col_name}' schedule file and weekend fractions provided; the latter will be ignored.") if !ceiling_fan.weekend_fractions.nil?
|
809
|
+
runner.registerWarning("Both '#{ceiling_fan_col_name}' schedule file and monthly multipliers provided; the latter will be ignored.") if !ceiling_fan.monthly_multipliers.nil?
|
791
810
|
end
|
792
811
|
|
793
812
|
equip_def = OpenStudio::Model::ElectricEquipmentDefinition.new(model)
|
@@ -808,6 +827,8 @@ class HVAC
|
|
808
827
|
cooling_sch = nil
|
809
828
|
if not schedules_file.nil?
|
810
829
|
heating_sch = schedules_file.create_schedule_file(col_name: SchedulesFile::ColumnHeatingSetpoint)
|
830
|
+
end
|
831
|
+
if not schedules_file.nil?
|
811
832
|
cooling_sch = schedules_file.create_schedule_file(col_name: SchedulesFile::ColumnCoolingSetpoint)
|
812
833
|
end
|
813
834
|
|
@@ -856,9 +877,8 @@ class HVAC
|
|
856
877
|
# to prevent unmet hours being reported. This is a dangerous idea. These setpoints are used
|
857
878
|
# by natural ventilation, Kiva initialization, and probably other things.
|
858
879
|
|
859
|
-
num_days = Constants.NumDaysInYear(year)
|
860
880
|
warning = false
|
861
|
-
for i in 0..(
|
881
|
+
for i in 0..(Constants.NumDaysInYear(year) - 1)
|
862
882
|
if (heating_days[i] == cooling_days[i]) # both (or neither) heating/cooling seasons
|
863
883
|
htg_wkdy = htg_weekday_setpoints[i].zip(clg_weekday_setpoints[i]).map { |h, c| c < h ? (h + c) / 2.0 : h }
|
864
884
|
htg_wked = htg_weekend_setpoints[i].zip(clg_weekend_setpoints[i]).map { |h, c| c < h ? (h + c) / 2.0 : h }
|
@@ -1006,32 +1026,32 @@ class HVAC
|
|
1006
1026
|
|
1007
1027
|
def self.set_cool_curves_central_air_source(heat_pump, use_eer = false)
|
1008
1028
|
hp_ap = heat_pump.additional_properties
|
1029
|
+
hp_ap.cool_rated_cfm_per_ton = get_default_cool_cfm_per_ton(hp_ap.num_speeds, use_eer)
|
1009
1030
|
if hp_ap.num_speeds == 1
|
1010
1031
|
# From "Improved Modeling of Residential Air Conditioners and Heat Pumps for Energy Calculations", Cutler at al
|
1011
1032
|
# https://www.nrel.gov/docs/fy13osti/56354.pdf
|
1012
1033
|
hp_ap.cool_cap_ft_spec = [[3.68637657, -0.098352478, 0.000956357, 0.005838141, -0.0000127, -0.000131702]]
|
1013
1034
|
hp_ap.cool_eir_ft_spec = [[-3.437356399, 0.136656369, -0.001049231, -0.0079378, 0.000185435, -0.0001441]]
|
1014
1035
|
hp_ap.cool_capacity_ratios = [1.0]
|
1015
|
-
hp_ap.cool_fan_speed_ratios = [1.0]
|
1016
1036
|
if not use_eer
|
1017
|
-
hp_ap.
|
1018
|
-
hp_ap.
|
1037
|
+
hp_ap.cool_rated_airflow_rate = hp_ap.cool_rated_cfm_per_ton[0]
|
1038
|
+
hp_ap.cool_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.cool_capacity_ratios, hp_ap.cool_rated_cfm_per_ton, hp_ap.cool_rated_airflow_rate)
|
1019
1039
|
# Single stage systems have PSC or constant torque ECM blowers, so the airflow rate is affected by the static pressure losses.
|
1020
1040
|
cap_fflow_spec, eir_fflow_spec = get_airflow_fault_cooling_coeff()
|
1021
1041
|
hp_ap.cool_cap_fflow_spec = [cap_fflow_spec]
|
1022
1042
|
hp_ap.cool_eir_fflow_spec = [eir_fflow_spec]
|
1023
1043
|
hp_ap.cool_eers = [calc_eer_cooling_1speed(heat_pump.cooling_efficiency_seer, hp_ap.cool_c_d, hp_ap.fan_power_rated, hp_ap.cool_eir_ft_spec)]
|
1024
1044
|
else
|
1045
|
+
hp_ap.cool_fan_speed_ratios = [1.0]
|
1025
1046
|
hp_ap.cool_cap_fflow_spec = [[1.0, 0.0, 0.0]]
|
1026
1047
|
hp_ap.cool_eir_fflow_spec = [[1.0, 0.0, 0.0]]
|
1027
1048
|
end
|
1028
1049
|
elsif hp_ap.num_speeds == 2
|
1029
1050
|
# From "Improved Modeling of Residential Air Conditioners and Heat Pumps for Energy Calculations", Cutler at al
|
1030
1051
|
# https://www.nrel.gov/docs/fy13osti/56354.pdf
|
1031
|
-
hp_ap.cool_rated_airflow_rate =
|
1052
|
+
hp_ap.cool_rated_airflow_rate = hp_ap.cool_rated_cfm_per_ton[-1]
|
1032
1053
|
hp_ap.cool_capacity_ratios = [0.72, 1.0]
|
1033
|
-
hp_ap.cool_fan_speed_ratios =
|
1034
|
-
hp_ap.cool_rated_shrs_net = [heat_pump.cooling_shr - 0.014, heat_pump.cooling_shr]
|
1054
|
+
hp_ap.cool_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.cool_capacity_ratios, hp_ap.cool_rated_cfm_per_ton, hp_ap.cool_rated_airflow_rate)
|
1035
1055
|
hp_ap.cool_cap_ft_spec = [[3.998418659, -0.108728222, 0.001056818, 0.007512314, -0.0000139, -0.000164716],
|
1036
1056
|
[3.466810106, -0.091476056, 0.000901205, 0.004163355, -0.00000919, -0.000110829]]
|
1037
1057
|
hp_ap.cool_eir_ft_spec = [[-4.282911381, 0.181023691, -0.001357391, -0.026310378, 0.000333282, -0.000197405],
|
@@ -1044,10 +1064,9 @@ class HVAC
|
|
1044
1064
|
hp_ap.cool_eers = calc_eers_cooling_2speed(heat_pump.cooling_efficiency_seer, hp_ap.cool_c_d, hp_ap.cool_capacity_ratios, hp_ap.cool_fan_speed_ratios, hp_ap.fan_power_rated, hp_ap.cool_eir_ft_spec, hp_ap.cool_cap_ft_spec)
|
1045
1065
|
elsif hp_ap.num_speeds == 4
|
1046
1066
|
# From Carrier heat pump lab testing
|
1047
|
-
hp_ap.cool_rated_airflow_rate =
|
1067
|
+
hp_ap.cool_rated_airflow_rate = hp_ap.cool_rated_cfm_per_ton[-1]
|
1048
1068
|
hp_ap.cool_capacity_ratios = [0.36, 0.51, 0.67, 1.0]
|
1049
|
-
hp_ap.cool_fan_speed_ratios =
|
1050
|
-
hp_ap.cool_rated_shrs_net = [1.115, 1.026, 1.013, 1.0].map { |mult| heat_pump.cooling_shr * mult }
|
1069
|
+
hp_ap.cool_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.cool_capacity_ratios, hp_ap.cool_rated_cfm_per_ton, hp_ap.cool_rated_airflow_rate)
|
1051
1070
|
hp_ap.cool_cap_coeff_perf_map = [[1.6516044444444447, 0.0698916049382716, -0.0005546296296296296, -0.08870160493827162, 0.0004135802469135802, 0.00029077160493827157],
|
1052
1071
|
[-6.84948049382716, 0.26946, -0.0019413580246913577, -0.03281469135802469, 0.00015694444444444442, 3.32716049382716e-05],
|
1053
1072
|
[-4.53543086419753, 0.15358543209876546, -0.0009345679012345678, 0.002666913580246914, -7.993827160493826e-06, -0.00011617283950617283],
|
@@ -1074,62 +1093,49 @@ class HVAC
|
|
1074
1093
|
|
1075
1094
|
def self.set_heat_curves_central_air_source(heat_pump, use_cop = false)
|
1076
1095
|
hp_ap = heat_pump.additional_properties
|
1096
|
+
hp_ap.heat_rated_cfm_per_ton = get_default_heat_cfm_per_ton(hp_ap.num_speeds, use_cop)
|
1077
1097
|
if hp_ap.num_speeds == 1
|
1078
1098
|
# From "Improved Modeling of Residential Air Conditioners and Heat Pumps for Energy Calculations", Cutler at al
|
1079
1099
|
# https://www.nrel.gov/docs/fy13osti/56354.pdf
|
1080
|
-
hp_ap.heat_rated_airflow_rate = 384.1 # cfm/ton
|
1081
1100
|
hp_ap.heat_capacity_ratios = [1.0]
|
1082
|
-
hp_ap.heat_fan_speed_ratios = [1.0]
|
1083
1101
|
hp_ap.heat_eir_ft_spec = [[0.718398423, 0.003498178, 0.000142202, -0.005724331, 0.00014085, -0.000215321]]
|
1084
1102
|
cap_fflow_spec, eir_fflow_spec = get_airflow_fault_heating_coeff()
|
1085
1103
|
hp_ap.heat_cap_fflow_spec = [cap_fflow_spec]
|
1086
1104
|
hp_ap.heat_eir_fflow_spec = [eir_fflow_spec]
|
1087
|
-
|
1088
|
-
hp_ap.heat_cap_ft_spec = [[0.566333415, -0.000744164, -0.0000103, 0.009414634, 0.0000506, -0.00000675]]
|
1089
|
-
else
|
1090
|
-
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec_using_capacity_17F(heat_pump)
|
1091
|
-
end
|
1105
|
+
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec(heat_pump, heat_pump.additional_properties.num_speeds)
|
1092
1106
|
if not use_cop
|
1093
1107
|
hp_ap.heat_cops = [calc_cop_heating_1speed(heat_pump.heating_efficiency_hspf, hp_ap.heat_c_d, hp_ap.fan_power_rated, hp_ap.heat_eir_ft_spec, hp_ap.heat_cap_ft_spec)]
|
1108
|
+
hp_ap.heat_rated_airflow_rate = hp_ap.heat_rated_cfm_per_ton[0]
|
1109
|
+
hp_ap.heat_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, hp_ap.heat_rated_airflow_rate)
|
1110
|
+
else
|
1111
|
+
hp_ap.heat_fan_speed_ratios = [1.0]
|
1094
1112
|
end
|
1095
1113
|
elsif hp_ap.num_speeds == 2
|
1096
1114
|
# From "Improved Modeling of Residential Air Conditioners and Heat Pumps for Energy Calculations", Cutler at al
|
1097
1115
|
# https://www.nrel.gov/docs/fy13osti/56354.pdf
|
1098
|
-
hp_ap.heat_rated_airflow_rate =
|
1116
|
+
hp_ap.heat_rated_airflow_rate = hp_ap.heat_rated_cfm_per_ton[-1]
|
1099
1117
|
hp_ap.heat_capacity_ratios = [0.72, 1.0]
|
1100
|
-
hp_ap.heat_fan_speed_ratios =
|
1118
|
+
hp_ap.heat_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, hp_ap.heat_rated_airflow_rate)
|
1101
1119
|
hp_ap.heat_eir_ft_spec = [[0.36338171, 0.013523725, 0.000258872, -0.009450269, 0.000439519, -0.000653723],
|
1102
1120
|
[0.981100941, -0.005158493, 0.000243416, -0.005274352, 0.000230742, -0.000336954]]
|
1103
1121
|
hp_ap.heat_cap_fflow_spec = [[0.741466907, 0.378645444, -0.119754733],
|
1104
1122
|
[0.76634609, 0.32840943, -0.094701495]]
|
1105
1123
|
hp_ap.heat_eir_fflow_spec = [[2.153618211, -1.737190609, 0.584269478],
|
1106
1124
|
[2.001041353, -1.58869128, 0.587593517]]
|
1107
|
-
|
1108
|
-
hp_ap.heat_cap_ft_spec = [[0.335690634, 0.002405123, -0.0000464, 0.013498735, 0.0000499, -0.00000725],
|
1109
|
-
[0.306358843, 0.005376987, -0.0000579, 0.011645092, 0.0000591, -0.0000203]]
|
1110
|
-
else
|
1111
|
-
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec_using_capacity_17F(heat_pump)
|
1112
|
-
end
|
1125
|
+
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec(heat_pump, heat_pump.additional_properties.num_speeds)
|
1113
1126
|
hp_ap.heat_cops = calc_cops_heating_2speed(heat_pump.heating_efficiency_hspf, hp_ap.heat_c_d, hp_ap.heat_capacity_ratios, hp_ap.heat_fan_speed_ratios, hp_ap.fan_power_rated, hp_ap.heat_eir_ft_spec, hp_ap.heat_cap_ft_spec)
|
1114
1127
|
elsif hp_ap.num_speeds == 4
|
1115
|
-
# From
|
1116
|
-
hp_ap.heat_rated_airflow_rate =
|
1128
|
+
# From manufacturers data
|
1129
|
+
hp_ap.heat_rated_airflow_rate = hp_ap.heat_rated_cfm_per_ton[-2]
|
1117
1130
|
hp_ap.heat_capacity_ratios = [0.33, 0.56, 1.0, 1.17]
|
1118
|
-
hp_ap.heat_fan_speed_ratios =
|
1131
|
+
hp_ap.heat_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, hp_ap.heat_rated_airflow_rate)
|
1119
1132
|
hp_ap.heat_eir_ft_spec = [[0.708311527, 0.020732093, 0.000391479, -0.037640031, 0.000979937, -0.001079042],
|
1120
1133
|
[0.025480155, 0.020169585, 0.000121341, -0.004429789, 0.000166472, -0.00036447],
|
1121
1134
|
[0.379003189, 0.014195012, 0.0000821046, -0.008894061, 0.000151519, -0.000210299],
|
1122
1135
|
[0.690404655, 0.00616619, 0.000137643, -0.009350199, 0.000153427, -0.000213258]]
|
1123
1136
|
hp_ap.heat_cap_fflow_spec = [[1, 0, 0]] * 4
|
1124
1137
|
hp_ap.heat_eir_fflow_spec = [[1, 0, 0]] * 4
|
1125
|
-
|
1126
|
-
hp_ap.heat_cap_ft_spec = [[0.304192655, -0.003972566, 0.0000196432, 0.024471251, -0.000000774126, -0.0000841323],
|
1127
|
-
[0.496381324, -0.00144792, 0.0, 0.016020855, 0.0000203447, -0.0000584118],
|
1128
|
-
[0.697171186, -0.006189599, 0.0000337077, 0.014291981, 0.0000105633, -0.0000387956],
|
1129
|
-
[0.555513805, -0.001337363, -0.00000265117, 0.014328826, 0.0000163849, -0.0000480711]]
|
1130
|
-
else
|
1131
|
-
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec_using_capacity_17F(heat_pump)
|
1132
|
-
end
|
1138
|
+
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec(heat_pump, heat_pump.additional_properties.num_speeds)
|
1133
1139
|
hp_ap.heat_cops = calc_cops_heating_4speed(heat_pump.heating_efficiency_hspf, hp_ap.heat_c_d, hp_ap.heat_capacity_ratios, hp_ap.heat_fan_speed_ratios, hp_ap.fan_power_rated, hp_ap.heat_eir_ft_spec, hp_ap.heat_cap_ft_spec)
|
1134
1140
|
end
|
1135
1141
|
end
|
@@ -1143,10 +1149,10 @@ class HVAC
|
|
1143
1149
|
hp_ap.cool_cap_fflow_spec = [[1, 0, 0]] * num_speeds
|
1144
1150
|
hp_ap.cool_eir_fflow_spec = [[1, 0, 0]] * num_speeds
|
1145
1151
|
|
1146
|
-
hp_ap.
|
1147
|
-
hp_ap.
|
1148
|
-
hp_ap.
|
1149
|
-
hp_ap.
|
1152
|
+
hp_ap.cool_capacity_ratios = [0.4, 0.4889, 0.5778, 0.6667, 0.7556, 0.8444, 0.9333, 1.0222, 1.1111, 1.2]
|
1153
|
+
hp_ap.cool_rated_cfm_per_ton = get_default_cool_cfm_per_ton(num_speeds)
|
1154
|
+
hp_ap.cool_rated_airflow_rate = hp_ap.cool_rated_cfm_per_ton[-1] * hp_ap.cool_capacity_ratios[-1]
|
1155
|
+
hp_ap.cool_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.cool_capacity_ratios, hp_ap.cool_rated_cfm_per_ton, hp_ap.cool_rated_airflow_rate)
|
1150
1156
|
end
|
1151
1157
|
|
1152
1158
|
def self.set_heat_curves_mshp(heat_pump, num_speeds)
|
@@ -1157,38 +1163,51 @@ class HVAC
|
|
1157
1163
|
hp_ap.heat_cap_fflow_spec = [[1, 0, 0]] * num_speeds
|
1158
1164
|
hp_ap.heat_eir_fflow_spec = [[1, 0, 0]] * num_speeds
|
1159
1165
|
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1166
|
+
hp_ap.heat_cap_ft_spec = calc_heat_cap_ft_spec(heat_pump, num_speeds)
|
1167
|
+
|
1168
|
+
# fan speed ratios
|
1169
|
+
hp_ap.heat_capacity_ratios = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
|
1170
|
+
hp_ap.heat_rated_cfm_per_ton = get_default_heat_cfm_per_ton(num_speeds)
|
1171
|
+
hp_ap.heat_rated_airflow_rate = hp_ap.heat_rated_cfm_per_ton[-1] * hp_ap.heat_capacity_ratios[-1]
|
1172
|
+
hp_ap.heat_fan_speed_ratios = calc_fan_speed_ratios(hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, hp_ap.heat_rated_airflow_rate)
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
def self.get_default_cool_cfm_per_ton(num_speeds, use_eer = false)
|
1176
|
+
# cfm/ton of rated capacity
|
1177
|
+
if num_speeds == 1
|
1178
|
+
if not use_eer
|
1179
|
+
return [394.2]
|
1180
|
+
else
|
1181
|
+
return [312] # medium speed
|
1182
|
+
end
|
1183
|
+
elsif num_speeds == 2
|
1184
|
+
return [411.0083, 344.1]
|
1185
|
+
elsif num_speeds == 4
|
1186
|
+
return [466.6667, 423.5294, 405.9701, 400.0]
|
1187
|
+
elsif num_speeds == 10
|
1188
|
+
return [470.6, 433.1356, 407.1997, 388.2406, 373.6898, 362.2454, 352.9412, 345.2945, 338.8354, 333.3333]
|
1164
1189
|
else
|
1165
|
-
|
1166
|
-
cap_retention_temp = 17.0 # deg-F
|
1190
|
+
fail 'number of speeds not supported.'
|
1167
1191
|
end
|
1192
|
+
end
|
1168
1193
|
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
hp_ap.heat_cap_ft_spec = [HVAC.convert_curve_biquadratic([a, b, c, d, e, f], false)] * num_speeds
|
1187
|
-
|
1188
|
-
hp_ap.heat_min_capacity_ratio = 0.3 # frac
|
1189
|
-
hp_ap.heat_max_capacity_ratio = 1.2 # frac
|
1190
|
-
hp_ap.heat_min_cfm_per_ton = 200.0 / hp_ap.heat_min_capacity_ratio # Convert cfm/ton of nominal rated capacity to cfm/ton of min capacity
|
1191
|
-
hp_ap.heat_max_cfm_per_ton = 400.0 / hp_ap.heat_max_capacity_ratio # Convert cfm/ton of nominal rated capacity to cfm/ton of min capacity
|
1194
|
+
def self.get_default_heat_cfm_per_ton(num_speeds, use_cop_or_htg_sys = false)
|
1195
|
+
# cfm/ton of rated capacity
|
1196
|
+
if num_speeds == 1
|
1197
|
+
if not use_cop_or_htg_sys
|
1198
|
+
return [384.1]
|
1199
|
+
else
|
1200
|
+
return [350]
|
1201
|
+
end
|
1202
|
+
elsif num_speeds == 2
|
1203
|
+
return [391.3333, 352.2]
|
1204
|
+
elsif num_speeds == 4
|
1205
|
+
return [566.8091, 402.9357, 296.9, 301.9752]
|
1206
|
+
elsif num_speeds == 10
|
1207
|
+
return [666.6667, 555.6000, 488.8800, 444.4667, 412.6857, 388.9000, 370.3556, 355.5600, 343.4182, 333.3333]
|
1208
|
+
else
|
1209
|
+
fail 'number of speeds not supported.'
|
1210
|
+
end
|
1192
1211
|
end
|
1193
1212
|
|
1194
1213
|
def self.set_curves_gshp(heat_pump)
|
@@ -1228,6 +1247,9 @@ class HVAC
|
|
1228
1247
|
elsif seer > 21
|
1229
1248
|
return HPXML::HVACCompressorTypeVariableSpeed
|
1230
1249
|
end
|
1250
|
+
elsif [HPXML::HVACTypeMiniSplitAirConditioner,
|
1251
|
+
HPXML::HVACTypeHeatPumpMiniSplit].include? hvac_type
|
1252
|
+
return HPXML::HVACCompressorTypeVariableSpeed
|
1231
1253
|
elsif [HPXML::HVACTypePTAC,
|
1232
1254
|
HPXML::HVACTypeHeatPumpPTHP,
|
1233
1255
|
HPXML::HVACTypeHeatPumpRoom,
|
@@ -1406,6 +1428,44 @@ class HVAC
|
|
1406
1428
|
pump_program_calling_manager.addProgram(pump_program)
|
1407
1429
|
end
|
1408
1430
|
|
1431
|
+
def self.set_boiler_pilot_light_ems_program(model, boiler, heating_system)
|
1432
|
+
# Create Equipment object for fuel consumption
|
1433
|
+
loc_space = model.getSpaces[0] # Arbitrary; not used
|
1434
|
+
fuel_type = heating_system.heating_system_fuel
|
1435
|
+
pilot_light_object = HotWaterAndAppliances.add_other_equipment(model, Constants.ObjectNameBoilerPilotLight(boiler.name), loc_space, 0.01, 0, 0, model.alwaysOnDiscreteSchedule, fuel_type)
|
1436
|
+
|
1437
|
+
# Sensor
|
1438
|
+
boiler_plr_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Boiler Part Load Ratio')
|
1439
|
+
boiler_plr_sensor.setName("#{boiler.name} plr s")
|
1440
|
+
boiler_plr_sensor.setKeyName(boiler.name.to_s)
|
1441
|
+
|
1442
|
+
# Actuator
|
1443
|
+
pilot_light_act = OpenStudio::Model::EnergyManagementSystemActuator.new(pilot_light_object, *EPlus::EMSActuatorOtherEquipmentPower, pilot_light_object.space.get)
|
1444
|
+
pilot_light_act.setName("#{boiler.name} pilot light act")
|
1445
|
+
|
1446
|
+
# Program
|
1447
|
+
pilot_light_program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
1448
|
+
pilot_light_program.setName("#{boiler.name} pilot light program")
|
1449
|
+
pilot_light_program.addLine("Set #{pilot_light_act.name} = (1.0 - #{boiler_plr_sensor.name}) * #{UnitConversions.convert(heating_system.pilot_light_btuh.to_f, 'Btu/hr', 'W')}")
|
1450
|
+
pilot_light_program.addLine("Set boiler_pilot_energy = #{pilot_light_act.name} * 3600 * SystemTimeStep")
|
1451
|
+
|
1452
|
+
# Program Calling Manager
|
1453
|
+
program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
1454
|
+
program_calling_manager.setName("#{boiler.name} pilot light program manager")
|
1455
|
+
program_calling_manager.setCallingPoint('EndOfSystemTimestepBeforeHVACReporting')
|
1456
|
+
program_calling_manager.addProgram(pilot_light_program)
|
1457
|
+
|
1458
|
+
# EMS Output Variable for reporting
|
1459
|
+
pilot_light_output_var = OpenStudio::Model::EnergyManagementSystemOutputVariable.new(model, 'boiler_pilot_energy')
|
1460
|
+
pilot_light_output_var.setName("#{Constants.ObjectNameBoilerPilotLight(boiler.name)} outvar")
|
1461
|
+
pilot_light_output_var.setTypeOfDataInVariable('Summed')
|
1462
|
+
pilot_light_output_var.setUpdateFrequency('SystemTimestep')
|
1463
|
+
pilot_light_output_var.setEMSProgramOrSubroutineName(pilot_light_program)
|
1464
|
+
pilot_light_output_var.setUnits('J')
|
1465
|
+
pilot_light_output_var.additionalProperties.setFeature('FuelType', EPlus.fuel_type(fuel_type)) # Used by reporting measure
|
1466
|
+
pilot_light_output_var.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
|
1467
|
+
end
|
1468
|
+
|
1409
1469
|
def self.disaggregate_fan_or_pump(model, fan_or_pump, htg_object, clg_object, backup_htg_object, hpxml_object)
|
1410
1470
|
# Disaggregate into heating/cooling output energy use.
|
1411
1471
|
|
@@ -1430,7 +1490,7 @@ class HVAC
|
|
1430
1490
|
if clg_object.is_a? OpenStudio::Model::EvaporativeCoolerDirectResearchSpecial
|
1431
1491
|
var = 'Evaporative Cooler Water Volume'
|
1432
1492
|
else
|
1433
|
-
var =
|
1493
|
+
var = 'Cooling Coil Total Cooling Energy'
|
1434
1494
|
end
|
1435
1495
|
clg_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
1436
1496
|
clg_object_sensor.setName("#{clg_object.name} s")
|
@@ -1440,15 +1500,12 @@ class HVAC
|
|
1440
1500
|
if htg_object.nil?
|
1441
1501
|
htg_object_sensor = nil
|
1442
1502
|
else
|
1443
|
-
|
1444
|
-
var = "Heating Coil #{htg_fuel} Energy"
|
1445
|
-
if htg_object.is_a? OpenStudio::Model::CoilHeatingGas
|
1446
|
-
htg_fuel = htg_object.fuelType
|
1447
|
-
var = "Heating Coil #{htg_fuel} Energy"
|
1448
|
-
elsif htg_object.is_a? OpenStudio::Model::ZoneHVACBaseboardConvectiveWater
|
1503
|
+
if htg_object.is_a? OpenStudio::Model::ZoneHVACBaseboardConvectiveWater
|
1449
1504
|
var = 'Baseboard Total Heating Energy'
|
1450
1505
|
elsif htg_object.is_a? OpenStudio::Model::ZoneHVACFourPipeFanCoil
|
1451
1506
|
var = 'Fan Coil Heating Energy'
|
1507
|
+
else
|
1508
|
+
var = 'Heating Coil Heating Energy'
|
1452
1509
|
end
|
1453
1510
|
|
1454
1511
|
htg_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
@@ -1459,11 +1516,10 @@ class HVAC
|
|
1459
1516
|
if backup_htg_object.nil?
|
1460
1517
|
backup_htg_object_sensor = nil
|
1461
1518
|
else
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
var = "Heating Coil #{backup_htg_fuel} Energy"
|
1519
|
+
if backup_htg_object.is_a? OpenStudio::Model::ZoneHVACBaseboardConvectiveWater
|
1520
|
+
var = 'Baseboard Total Heating Energy'
|
1521
|
+
else
|
1522
|
+
var = 'Heating Coil Heating Energy'
|
1467
1523
|
end
|
1468
1524
|
|
1469
1525
|
backup_htg_object_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, var)
|
@@ -1493,6 +1549,13 @@ class HVAC
|
|
1493
1549
|
end
|
1494
1550
|
sensors.each_with_index do |(mode, sensor), i|
|
1495
1551
|
str_prefix = (i == 0 ? 'If' : 'ElseIf')
|
1552
|
+
if mode == 'primary_htg' && sensors.keys[i + 1] == 'backup_htg'
|
1553
|
+
# HP with both primary and backup heating
|
1554
|
+
# If both are operating, apportion energy use
|
1555
|
+
fan_or_pump_program.addLine("#{str_prefix} (#{sensor.name} > 0) && (#{sensors.values[i + 1].name} > 0)")
|
1556
|
+
fan_or_pump_program.addLine(" Set #{fan_or_pump_var}_#{mode} = #{fan_or_pump_sensor.name} * #{sensor.name} / (#{sensor.name} + #{sensors.values[i + 1].name})")
|
1557
|
+
fan_or_pump_program.addLine(" Set #{fan_or_pump_var}_#{sensors.keys[i + 1]} = #{fan_or_pump_sensor.name} * #{sensors.values[i + 1].name} / (#{sensor.name} + #{sensors.values[i + 1].name})")
|
1558
|
+
end
|
1496
1559
|
fan_or_pump_program.addLine("#{str_prefix} #{sensor.name} > 0")
|
1497
1560
|
fan_or_pump_program.addLine(" Set #{fan_or_pump_var}_#{mode} = #{fan_or_pump_sensor.name}")
|
1498
1561
|
end
|
@@ -1516,11 +1579,7 @@ class HVAC
|
|
1516
1579
|
fan_or_pump_ems_output_var.setUpdateFrequency('SystemTimestep')
|
1517
1580
|
fan_or_pump_ems_output_var.setEMSProgramOrSubroutineName(fan_or_pump_program)
|
1518
1581
|
fan_or_pump_ems_output_var.setUnits('J')
|
1519
|
-
|
1520
|
-
fan_or_pump_ems_output_var.additionalProperties.setFeature('HPXML_ID', sys_id + '_DFHPBackup') # Used by reporting measure
|
1521
|
-
else
|
1522
|
-
fan_or_pump_ems_output_var.additionalProperties.setFeature('HPXML_ID', sys_id) # Used by reporting measure
|
1523
|
-
end
|
1582
|
+
fan_or_pump_ems_output_var.additionalProperties.setFeature('HPXML_ID', sys_id) # Used by reporting measure
|
1524
1583
|
end
|
1525
1584
|
end
|
1526
1585
|
|
@@ -1547,7 +1606,7 @@ class HVAC
|
|
1547
1606
|
dehumidifier_load_adj.setSpace(living_space)
|
1548
1607
|
dehumidifier_load_adj.setSchedule(model.alwaysOnDiscreteSchedule)
|
1549
1608
|
|
1550
|
-
dehumidifier_load_adj_act = OpenStudio::Model::EnergyManagementSystemActuator.new(dehumidifier_load_adj, *EPlus::EMSActuatorOtherEquipmentPower)
|
1609
|
+
dehumidifier_load_adj_act = OpenStudio::Model::EnergyManagementSystemActuator.new(dehumidifier_load_adj, *EPlus::EMSActuatorOtherEquipmentPower, dehumidifier_load_adj.space.get)
|
1551
1610
|
dehumidifier_load_adj_act.setName("#{zone_hvac.name} sens htg adj act")
|
1552
1611
|
|
1553
1612
|
# EMS program
|
@@ -1587,11 +1646,8 @@ class HVAC
|
|
1587
1646
|
end
|
1588
1647
|
htg_supp_coil.setNominalCapacity(UnitConversions.convert(capacity, 'Btu/hr', 'W'))
|
1589
1648
|
htg_supp_coil.setName(obj_name + ' ' + Constants.ObjectNameBackupHeatingCoil)
|
1590
|
-
|
1591
|
-
|
1592
|
-
else
|
1593
|
-
htg_supp_coil.additionalProperties.setFeature('HPXML_ID', heat_pump.id) # Used by reporting measure
|
1594
|
-
end
|
1649
|
+
htg_supp_coil.additionalProperties.setFeature('HPXML_ID', heat_pump.id) # Used by reporting measure
|
1650
|
+
htg_supp_coil.additionalProperties.setFeature('IsHeatPumpBackup', true) # Used by reporting measure
|
1595
1651
|
|
1596
1652
|
return htg_supp_coil
|
1597
1653
|
end
|
@@ -1670,7 +1726,7 @@ class HVAC
|
|
1670
1726
|
return air_loop_unitary
|
1671
1727
|
end
|
1672
1728
|
|
1673
|
-
def self.create_air_loop(model, obj_name, system, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, airflow_cfm)
|
1729
|
+
def self.create_air_loop(model, obj_name, system, control_zone, sequential_heat_load_fracs, sequential_cool_load_fracs, airflow_cfm, heating_system, hvac_unavailable_periods)
|
1674
1730
|
air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
|
1675
1731
|
air_loop.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
1676
1732
|
air_loop.setName(obj_name + ' airloop')
|
@@ -1691,8 +1747,7 @@ class HVAC
|
|
1691
1747
|
air_terminal.setName(obj_name + ' terminal')
|
1692
1748
|
air_loop.multiAddBranchForZone(control_zone, air_terminal)
|
1693
1749
|
|
1694
|
-
control_zone
|
1695
|
-
control_zone.setSequentialCoolingFractionSchedule(air_terminal, get_sequential_load_schedule(model, sequential_cool_load_fracs))
|
1750
|
+
set_sequential_load_fractions(model, control_zone, air_terminal, sequential_heat_load_fracs, sequential_cool_load_fracs, hvac_unavailable_periods, heating_system)
|
1696
1751
|
|
1697
1752
|
return air_loop
|
1698
1753
|
end
|
@@ -1786,29 +1841,36 @@ class HVAC
|
|
1786
1841
|
end
|
1787
1842
|
end
|
1788
1843
|
|
1789
|
-
def self.
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1844
|
+
def self.calc_heat_cap_ft_spec(heat_pump, num_speeds)
|
1845
|
+
if heat_pump.heat_pump_type == HPXML::HVACTypeHeatPumpMiniSplit
|
1846
|
+
# Coefficients for the indoor temperature relationship are retained from the generic curve (Daikin lab data).
|
1847
|
+
iat_slope = -0.005770375
|
1848
|
+
iat_intercept = 0.403926296
|
1849
|
+
else
|
1850
|
+
if num_speeds == 1
|
1851
|
+
iat_slope = -0.002303414
|
1852
|
+
iat_intercept = 0.18417308
|
1853
|
+
elsif num_speeds == 2
|
1854
|
+
iat_slope = -0.002947013
|
1855
|
+
iat_intercept = 0.23168251
|
1856
|
+
elsif num_speeds == 4
|
1857
|
+
iat_slope = -0.002897048
|
1858
|
+
iat_intercept = 0.209319129
|
1859
|
+
end
|
1803
1860
|
end
|
1804
1861
|
|
1805
|
-
# Derive coefficients from user input for heating capacity at 47F and 17F
|
1806
1862
|
# Biquadratic: capacity multiplier = a + b*IAT + c*IAT^2 + d*OAT + e*OAT^2 + f*IAT*OAT
|
1807
|
-
|
1808
|
-
if heat_pump.
|
1809
|
-
|
1863
|
+
# Derive coefficients from user input for capacity retention at outdoor drybulb temperature X [C].
|
1864
|
+
if not heat_pump.heating_capacity_17F.nil?
|
1865
|
+
x_A = 17.0
|
1866
|
+
if heat_pump.heating_capacity > 0
|
1867
|
+
y_A = heat_pump.heating_capacity_17F / heat_pump.heating_capacity
|
1868
|
+
else
|
1869
|
+
y_A = 0.0
|
1870
|
+
end
|
1810
1871
|
else
|
1811
|
-
|
1872
|
+
x_A = heat_pump.heating_capacity_retention_temp
|
1873
|
+
y_A = heat_pump.heating_capacity_retention_fraction
|
1812
1874
|
end
|
1813
1875
|
x_B = 47.0 # 47F is the rating point
|
1814
1876
|
y_B = 1.0
|
@@ -1816,12 +1878,7 @@ class HVAC
|
|
1816
1878
|
oat_slope = (y_B - y_A) / (x_B - x_A)
|
1817
1879
|
oat_intercept = y_A - (x_A * oat_slope)
|
1818
1880
|
|
1819
|
-
|
1820
|
-
for _i in 1..num_speeds
|
1821
|
-
heat_cap_ft_spec << [oat_intercept + iat_intercept, iat_slope, 0, oat_slope, 0, 0]
|
1822
|
-
end
|
1823
|
-
|
1824
|
-
return heat_cap_ft_spec
|
1881
|
+
return [[oat_intercept + iat_intercept, iat_slope, 0, oat_slope, 0, 0]] * num_speeds
|
1825
1882
|
end
|
1826
1883
|
|
1827
1884
|
def self.calc_eir_from_cop(cop, fan_power_rated)
|
@@ -2611,32 +2668,12 @@ class HVAC
|
|
2611
2668
|
return hspf
|
2612
2669
|
end
|
2613
2670
|
|
2614
|
-
def self.
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? cooling_system.heat_pump_type))
|
2619
|
-
clg_ap.cool_rated_cfm_per_ton = [312.0] # medium speed
|
2620
|
-
else
|
2621
|
-
clg_ap.cool_rated_cfm_per_ton = []
|
2622
|
-
clg_ap.cool_fan_speed_ratios.each_with_index do |fanspeed_ratio, i|
|
2623
|
-
clg_ap.cool_rated_cfm_per_ton << fanspeed_ratio * clg_ap.cool_rated_airflow_rate / clg_ap.cool_capacity_ratios[i]
|
2624
|
-
end
|
2625
|
-
end
|
2626
|
-
end
|
2627
|
-
|
2628
|
-
def self.set_heat_rated_cfm_per_ton(heating_system)
|
2629
|
-
htg_ap = heating_system.additional_properties
|
2630
|
-
|
2631
|
-
if (heating_system.is_a? HPXML::HeatingSystem) ||
|
2632
|
-
((heating_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? heating_system.heat_pump_type))
|
2633
|
-
htg_ap.heat_rated_cfm_per_ton = [350.0]
|
2634
|
-
else
|
2635
|
-
htg_ap.heat_rated_cfm_per_ton = []
|
2636
|
-
htg_ap.heat_fan_speed_ratios.each_with_index do |fanspeed_ratio, i|
|
2637
|
-
htg_ap.heat_rated_cfm_per_ton << fanspeed_ratio * htg_ap.heat_rated_airflow_rate / htg_ap.heat_capacity_ratios[i]
|
2638
|
-
end
|
2671
|
+
def self.calc_fan_speed_ratios(capacity_ratios, rated_cfm_per_tons, rated_airflow_rate)
|
2672
|
+
fan_speed_ratios = []
|
2673
|
+
capacity_ratios.each_with_index do |capacity_ratio, i|
|
2674
|
+
fan_speed_ratios << rated_cfm_per_tons[i] * capacity_ratio / rated_airflow_rate
|
2639
2675
|
end
|
2676
|
+
return fan_speed_ratios
|
2640
2677
|
end
|
2641
2678
|
|
2642
2679
|
def self.create_curve_biquadratic_constant(model)
|
@@ -2680,28 +2717,16 @@ class HVAC
|
|
2680
2717
|
return curve
|
2681
2718
|
end
|
2682
2719
|
|
2683
|
-
def self.convert_curve_biquadratic(coeff
|
2684
|
-
|
2685
|
-
|
2686
|
-
|
2687
|
-
|
2688
|
-
|
2689
|
-
|
2690
|
-
|
2691
|
-
|
2692
|
-
|
2693
|
-
return si_coeff
|
2694
|
-
else
|
2695
|
-
# Convert SI curves to IP curves
|
2696
|
-
ip_coeff = []
|
2697
|
-
ip_coeff << coeff[0] - 160.0 / 9.0 * (coeff[1] + coeff[3]) + 25600.0 / 81.0 * (coeff[2] + coeff[4] + coeff[5])
|
2698
|
-
ip_coeff << 5.0 / 9.0 * (coeff[1] - 320.0 / 9.0 * coeff[2] - 160.0 / 9.0 * coeff[5])
|
2699
|
-
ip_coeff << 25.0 / 81.0 * coeff[2]
|
2700
|
-
ip_coeff << 5.0 / 9.0 * (coeff[3] - 320.0 / 9.0 * coeff[4] - 160.0 / 9.0 * coeff[5])
|
2701
|
-
ip_coeff << 25.0 / 81.0 * coeff[4]
|
2702
|
-
ip_coeff << 25.0 / 81.0 * coeff[5]
|
2703
|
-
return ip_coeff
|
2704
|
-
end
|
2720
|
+
def self.convert_curve_biquadratic(coeff)
|
2721
|
+
# Convert IP curves to SI curves
|
2722
|
+
si_coeff = []
|
2723
|
+
si_coeff << coeff[0] + 32.0 * (coeff[1] + coeff[3]) + 1024.0 * (coeff[2] + coeff[4] + coeff[5])
|
2724
|
+
si_coeff << 9.0 / 5.0 * coeff[1] + 576.0 / 5.0 * coeff[2] + 288.0 / 5.0 * coeff[5]
|
2725
|
+
si_coeff << 81.0 / 25.0 * coeff[2]
|
2726
|
+
si_coeff << 9.0 / 5.0 * coeff[3] + 576.0 / 5.0 * coeff[4] + 288.0 / 5.0 * coeff[5]
|
2727
|
+
si_coeff << 81.0 / 25.0 * coeff[4]
|
2728
|
+
si_coeff << 81.0 / 25.0 * coeff[5]
|
2729
|
+
return si_coeff
|
2705
2730
|
end
|
2706
2731
|
|
2707
2732
|
def self.create_curve_biquadratic(model, coeff, name, min_x, max_x, min_y, max_y)
|
@@ -2823,6 +2848,7 @@ class HVAC
|
|
2823
2848
|
end
|
2824
2849
|
|
2825
2850
|
clg_coil = nil
|
2851
|
+
crankcase_heater_temp = 50 # F
|
2826
2852
|
|
2827
2853
|
for i in 0..(clg_ap.num_speeds - 1)
|
2828
2854
|
cap_ft_spec_si = convert_curve_biquadratic(clg_ap.cool_cap_ft_spec[i])
|
@@ -2846,7 +2872,7 @@ class HVAC
|
|
2846
2872
|
else
|
2847
2873
|
clg_coil.setRatedCOP(1.0 / clg_ap.cool_rated_eirs[i])
|
2848
2874
|
end
|
2849
|
-
clg_coil.setMaximumOutdoorDryBulbTemperatureForCrankcaseHeaterOperation(UnitConversions.convert(
|
2875
|
+
clg_coil.setMaximumOutdoorDryBulbTemperatureForCrankcaseHeaterOperation(UnitConversions.convert(crankcase_heater_temp, 'F', 'C')) if cooling_system.crankcase_heater_watts.to_f > 0.0 # From RESNET Publication No. 002-2017
|
2850
2876
|
clg_coil.setRatedSensibleHeatRatio(clg_ap.cool_rated_shrs_gross[i])
|
2851
2877
|
clg_coil.setNominalTimeForCondensateRemovalToBegin(1000.0)
|
2852
2878
|
clg_coil.setRatioOfInitialMoistureEvaporationRateAndSteadyStateLatentCapacity(1.5)
|
@@ -2861,7 +2887,7 @@ class HVAC
|
|
2861
2887
|
clg_coil.setApplyLatentDegradationtoSpeedsGreaterthan1(false)
|
2862
2888
|
clg_coil.setFuelType(EPlus::FuelTypeElectricity)
|
2863
2889
|
clg_coil.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
2864
|
-
clg_coil.setMaximumOutdoorDryBulbTemperatureforCrankcaseHeaterOperation(UnitConversions.convert(
|
2890
|
+
clg_coil.setMaximumOutdoorDryBulbTemperatureforCrankcaseHeaterOperation(UnitConversions.convert(crankcase_heater_temp, 'F', 'C')) if cooling_system.crankcase_heater_watts.to_f > 0.0 # From RESNET Publication No. 002-2017
|
2865
2891
|
end
|
2866
2892
|
stage = OpenStudio::Model::CoilCoolingDXMultiSpeedStageData.new(model, cap_ft_curve, cap_fff_curve, eir_ft_curve, eir_fff_curve, plf_fplr_curve, constant_biquadratic)
|
2867
2893
|
stage.setGrossRatedCoolingCOP(1.0 / clg_ap.cool_rated_eirs[i])
|
@@ -2879,7 +2905,7 @@ class HVAC
|
|
2879
2905
|
|
2880
2906
|
clg_coil.setName(obj_name + ' clg coil')
|
2881
2907
|
clg_coil.setCondenserType('AirCooled')
|
2882
|
-
clg_coil.setCrankcaseHeaterCapacity(
|
2908
|
+
clg_coil.setCrankcaseHeaterCapacity(cooling_system.crankcase_heater_watts)
|
2883
2909
|
clg_coil.additionalProperties.setFeature('HPXML_ID', cooling_system.id) # Used by reporting measure
|
2884
2910
|
|
2885
2911
|
return clg_coil
|
@@ -2893,6 +2919,7 @@ class HVAC
|
|
2893
2919
|
end
|
2894
2920
|
|
2895
2921
|
htg_coil = nil
|
2922
|
+
crankcase_heater_temp = 50 # F
|
2896
2923
|
|
2897
2924
|
for i in 0..(htg_ap.num_speeds - 1)
|
2898
2925
|
cap_ft_spec_si = convert_curve_biquadratic(htg_ap.heat_cap_ft_spec[i])
|
@@ -2938,8 +2965,8 @@ class HVAC
|
|
2938
2965
|
if heating_system.fraction_heat_load_served == 0
|
2939
2966
|
htg_coil.setResistiveDefrostHeaterCapacity(0)
|
2940
2967
|
end
|
2941
|
-
htg_coil.setMaximumOutdoorDryBulbTemperatureforCrankcaseHeaterOperation(UnitConversions.convert(
|
2942
|
-
htg_coil.setCrankcaseHeaterCapacity(
|
2968
|
+
htg_coil.setMaximumOutdoorDryBulbTemperatureforCrankcaseHeaterOperation(UnitConversions.convert(crankcase_heater_temp, 'F', 'C')) if heating_system.crankcase_heater_watts.to_f > 0.0 # From RESNET Publication No. 002-2017
|
2969
|
+
htg_coil.setCrankcaseHeaterCapacity(heating_system.crankcase_heater_watts)
|
2943
2970
|
htg_coil.additionalProperties.setFeature('HPXML_ID', heating_system.id) # Used by reporting measure
|
2944
2971
|
|
2945
2972
|
return htg_coil
|
@@ -2963,28 +2990,31 @@ class HVAC
|
|
2963
2990
|
end
|
2964
2991
|
end
|
2965
2992
|
|
2966
|
-
def self.set_cool_rated_shrs_gross(cooling_system)
|
2993
|
+
def self.set_cool_rated_shrs_gross(runner, cooling_system)
|
2967
2994
|
clg_ap = cooling_system.additional_properties
|
2968
2995
|
|
2969
|
-
# Convert SHRs from net to gross.
|
2970
2996
|
if ((cooling_system.is_a? HPXML::CoolingSystem) && ([HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type)) ||
|
2971
2997
|
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? cooling_system.heat_pump_type))
|
2972
2998
|
clg_ap.cool_rated_shrs_gross = [cooling_system.cooling_shr] # We don't model the fan separately, so set gross == net
|
2973
2999
|
else
|
3000
|
+
# rated shr gross and fan speed ratios
|
3001
|
+
dB_rated = 80.0 # deg-F
|
3002
|
+
win = 0.01118470 # Humidity ratio corresponding to 80F dry bulb/67F wet bulb (from EnergyPlus)
|
3003
|
+
|
3004
|
+
if clg_ap.num_speeds > 1
|
3005
|
+
cool_nominal_cfm_per_ton = (clg_ap.cool_rated_airflow_rate - clg_ap.cool_rated_cfm_per_ton[0] * clg_ap.cool_capacity_ratios[0]) / (clg_ap.cool_capacity_ratios[-1] - clg_ap.cool_capacity_ratios[0]) * (1.0 - clg_ap.cool_capacity_ratios[0]) + clg_ap.cool_rated_cfm_per_ton[0] * clg_ap.cool_capacity_ratios[0]
|
3006
|
+
else
|
3007
|
+
cool_nominal_cfm_per_ton = clg_ap.cool_rated_cfm_per_ton[0]
|
3008
|
+
end
|
3009
|
+
|
3010
|
+
p_atm = 14.696 # standard atmospheric pressure (psia)
|
3011
|
+
|
3012
|
+
ao = Psychrometrics.CoilAoFactor(runner, dB_rated, p_atm, UnitConversions.convert(1, 'ton', 'kBtu/hr'), cool_nominal_cfm_per_ton, cooling_system.cooling_shr, win)
|
3013
|
+
|
2974
3014
|
clg_ap.cool_rated_shrs_gross = []
|
2975
|
-
|
2976
|
-
|
2977
|
-
|
2978
|
-
qtot_gross_nominal = qtot_net_nominal + UnitConversions.convert(clg_ap.cool_rated_cfm_per_ton[speed] * clg_ap.fan_power_rated, 'Wh', 'Btu')
|
2979
|
-
qsens_gross_nominal = qsens_net_nominal + UnitConversions.convert(clg_ap.cool_rated_cfm_per_ton[speed] * clg_ap.fan_power_rated, 'Wh', 'Btu')
|
2980
|
-
clg_ap.cool_rated_shrs_gross << (qsens_gross_nominal / qtot_gross_nominal)
|
2981
|
-
|
2982
|
-
# Make sure SHR's are in valid range based on E+ model limits.
|
2983
|
-
# The following correlation was developed by Jon Winkler to test for maximum allowed SHR based on the 300 - 450 cfm/ton limits in E+
|
2984
|
-
max_shr = 0.3821066 + 0.001050652 * clg_ap.cool_rated_cfm_per_ton[speed] - 0.01
|
2985
|
-
clg_ap.cool_rated_shrs_gross[speed] = [clg_ap.cool_rated_shrs_gross[speed], max_shr].min
|
2986
|
-
min_shr = 0.60 # Approximate minimum SHR such that an ADP exists
|
2987
|
-
clg_ap.cool_rated_shrs_gross[speed] = [clg_ap.cool_rated_shrs_gross[speed], min_shr].max
|
3015
|
+
clg_ap.cool_capacity_ratios.each_with_index do |capacity_ratio, i|
|
3016
|
+
# Calculate the SHR for each speed. Use minimum value of 0.98 to prevent E+ bypass factor calculation errors
|
3017
|
+
clg_ap.cool_rated_shrs_gross << [Psychrometrics.CalculateSHR(runner, dB_rated, p_atm, UnitConversions.convert(capacity_ratio, 'ton', 'kBtu/hr'), clg_ap.cool_rated_cfm_per_ton[i] * capacity_ratio, ao, win), 0.98].min
|
2988
3018
|
end
|
2989
3019
|
end
|
2990
3020
|
end
|
@@ -3030,10 +3060,8 @@ class HVAC
|
|
3030
3060
|
end
|
3031
3061
|
elsif num_speeds == 2
|
3032
3062
|
htg_ap.heat_c_d = 0.11
|
3033
|
-
elsif num_speeds
|
3034
|
-
htg_ap.heat_c_d = 0.
|
3035
|
-
elsif num_speeds == 10 # mini-split heat pump
|
3036
|
-
htg_ap.heat_c_d = 0.40
|
3063
|
+
elsif num_speeds >= 4
|
3064
|
+
htg_ap.heat_c_d = 0.25
|
3037
3065
|
end
|
3038
3066
|
|
3039
3067
|
htg_ap.heat_plf_fplr_spec = [calc_plr_coefficients(htg_ap.heat_c_d)] * num_speeds
|
@@ -3078,33 +3106,6 @@ class HVAC
|
|
3078
3106
|
return
|
3079
3107
|
end
|
3080
3108
|
|
3081
|
-
def self.set_cool_rated_cfm_per_ton_mshp(heat_pump, num_speeds)
|
3082
|
-
hp_ap = heat_pump.additional_properties
|
3083
|
-
|
3084
|
-
dB_rated = 80.0 # deg-F
|
3085
|
-
wB_rated = 67.0 # deg-F
|
3086
|
-
|
3087
|
-
cool_nominal_capacity_ratio = 1.0
|
3088
|
-
cool_nominal_cfm_per_ton = ((hp_ap.cool_max_cfm_per_ton * hp_ap.cool_max_capacity_ratio - hp_ap.cool_min_cfm_per_ton * hp_ap.cool_min_capacity_ratio) /
|
3089
|
-
(hp_ap.cool_max_capacity_ratio - hp_ap.cool_min_capacity_ratio)) *
|
3090
|
-
(cool_nominal_capacity_ratio - hp_ap.cool_min_capacity_ratio) + hp_ap.cool_min_cfm_per_ton * hp_ap.cool_min_capacity_ratio
|
3091
|
-
|
3092
|
-
p_atm = 14.696 # standard atmospheric pressure (psia)
|
3093
|
-
|
3094
|
-
ao = Psychrometrics.CoilAoFactor(dB_rated, wB_rated, p_atm, UnitConversions.convert(1, 'ton', 'kBtu/hr'), cool_nominal_cfm_per_ton, heat_pump.cooling_shr)
|
3095
|
-
|
3096
|
-
hp_ap.cool_capacity_ratios = []
|
3097
|
-
hp_ap.cool_rated_cfm_per_ton = []
|
3098
|
-
hp_ap.cool_rated_shrs_gross = []
|
3099
|
-
|
3100
|
-
for i in 0..num_speeds - 1
|
3101
|
-
hp_ap.cool_capacity_ratios << hp_ap.cool_min_capacity_ratio + i * (hp_ap.cool_max_capacity_ratio - hp_ap.cool_min_capacity_ratio) / (num_speeds - 1)
|
3102
|
-
hp_ap.cool_rated_cfm_per_ton << (hp_ap.cool_min_cfm_per_ton * hp_ap.cool_min_capacity_ratio + i * (hp_ap.cool_max_cfm_per_ton * hp_ap.cool_max_capacity_ratio - hp_ap.cool_min_cfm_per_ton * hp_ap.cool_min_capacity_ratio) / (num_speeds - 1)) / hp_ap.cool_capacity_ratios[-1]
|
3103
|
-
# Calculate the SHR for each speed. Use minimum value of 0.98 to prevent E+ bypass factor calculation errors
|
3104
|
-
hp_ap.cool_rated_shrs_gross[i] = [Psychrometrics.CalculateSHR(dB_rated, wB_rated, p_atm, UnitConversions.convert(hp_ap.cool_capacity_ratios[i], 'ton', 'kBtu/hr'), hp_ap.cool_rated_cfm_per_ton[i] * hp_ap.cool_capacity_ratios[i], ao), 0.98].min
|
3105
|
-
end
|
3106
|
-
end
|
3107
|
-
|
3108
3109
|
def self.set_cool_rated_eirs_mshp(cooling_system, num_speeds)
|
3109
3110
|
clg_ap = cooling_system.additional_properties
|
3110
3111
|
|
@@ -3172,10 +3173,7 @@ class HVAC
|
|
3172
3173
|
hp_ap.cool_capacity_ratios = hp_ap.cool_capacity_ratios.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3173
3174
|
hp_ap.cool_rated_shrs_gross = hp_ap.cool_rated_shrs_gross.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3174
3175
|
hp_ap.cool_rated_eirs = hp_ap.cool_rated_eirs.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3175
|
-
hp_ap.cool_fan_speed_ratios =
|
3176
|
-
for i in 0..(hp_ap.speed_indices.size - 1)
|
3177
|
-
hp_ap.cool_fan_speed_ratios << hp_ap.cool_rated_cfm_per_ton[i] * hp_ap.cool_capacity_ratios[i] / (hp_ap.cool_rated_cfm_per_ton[-1] * hp_ap.cool_capacity_ratios[-1])
|
3178
|
-
end
|
3176
|
+
hp_ap.cool_fan_speed_ratios = hp_ap.cool_fan_speed_ratios.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3179
3177
|
|
3180
3178
|
if heat_pump.is_a? HPXML::HeatPump # Skip for mini-split air conditioner
|
3181
3179
|
# Heating
|
@@ -3187,10 +3185,7 @@ class HVAC
|
|
3187
3185
|
hp_ap.heat_rated_cfm_per_ton = hp_ap.heat_rated_cfm_per_ton.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3188
3186
|
hp_ap.heat_capacity_ratios = hp_ap.heat_capacity_ratios.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3189
3187
|
hp_ap.heat_rated_eirs = hp_ap.heat_rated_eirs.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3190
|
-
hp_ap.heat_fan_speed_ratios =
|
3191
|
-
for i in 0..(hp_ap.speed_indices.size - 1)
|
3192
|
-
hp_ap.heat_fan_speed_ratios << hp_ap.heat_rated_cfm_per_ton[i] * hp_ap.heat_capacity_ratios[i] / (hp_ap.heat_rated_cfm_per_ton[-1] * hp_ap.heat_capacity_ratios[-1])
|
3193
|
-
end
|
3188
|
+
hp_ap.heat_fan_speed_ratios = hp_ap.heat_fan_speed_ratios.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3194
3189
|
end
|
3195
3190
|
end
|
3196
3191
|
|
@@ -3300,18 +3295,6 @@ class HVAC
|
|
3300
3295
|
return seer
|
3301
3296
|
end
|
3302
3297
|
|
3303
|
-
def self.set_heat_rated_cfm_per_ton_mshp(heat_pump, num_speeds)
|
3304
|
-
hp_ap = heat_pump.additional_properties
|
3305
|
-
|
3306
|
-
hp_ap.heat_capacity_ratios = []
|
3307
|
-
hp_ap.heat_rated_cfm_per_ton = []
|
3308
|
-
|
3309
|
-
for i in 0..num_speeds - 1
|
3310
|
-
hp_ap.heat_capacity_ratios << hp_ap.heat_min_capacity_ratio + i * (hp_ap.heat_max_capacity_ratio - hp_ap.heat_min_capacity_ratio) / (num_speeds - 1)
|
3311
|
-
hp_ap.heat_rated_cfm_per_ton << (hp_ap.heat_min_cfm_per_ton * hp_ap.heat_min_capacity_ratio + i * (hp_ap.heat_max_cfm_per_ton * hp_ap.heat_max_capacity_ratio - hp_ap.heat_min_cfm_per_ton * hp_ap.heat_min_capacity_ratio) / (num_speeds - 1)) / hp_ap.heat_capacity_ratios[-1]
|
3312
|
-
end
|
3313
|
-
end
|
3314
|
-
|
3315
3298
|
def self.set_heat_rated_eirs_mshp(heat_pump, num_speeds)
|
3316
3299
|
hp_ap = heat_pump.additional_properties
|
3317
3300
|
|
@@ -3548,49 +3531,72 @@ class HVAC
|
|
3548
3531
|
return sequential_load_fracs
|
3549
3532
|
end
|
3550
3533
|
|
3551
|
-
def self.get_sequential_load_schedule(model, fractions)
|
3534
|
+
def self.get_sequential_load_schedule(model, fractions, unavailable_periods)
|
3535
|
+
if fractions.nil?
|
3536
|
+
fractions = [0]
|
3537
|
+
unavailable_periods = []
|
3538
|
+
end
|
3539
|
+
|
3552
3540
|
values = fractions.map { |f| f > 1 ? 1.0 : f.round(5) }
|
3553
3541
|
|
3542
|
+
sch_name = 'Sequential Fraction Schedule'
|
3554
3543
|
if values.uniq.length == 1
|
3555
|
-
s =
|
3556
|
-
s.
|
3544
|
+
s = ScheduleConstant.new(model, sch_name, values[0], Constants.ScheduleTypeLimitsFraction, unavailable_periods: unavailable_periods)
|
3545
|
+
s = s.schedule
|
3557
3546
|
else
|
3558
3547
|
s = Schedule.create_ruleset_from_daily_season(model, values)
|
3548
|
+
s.setName(sch_name)
|
3549
|
+
Schedule.set_unavailable_periods(s, sch_name, unavailable_periods, model.getYearDescription.assumedYear)
|
3550
|
+
Schedule.set_schedule_type_limits(model, s, Constants.ScheduleTypeLimitsFraction)
|
3559
3551
|
end
|
3560
3552
|
|
3561
|
-
s.setName('Sequential Fraction Schedule')
|
3562
|
-
Schedule.set_schedule_type_limits(model, s, Constants.ScheduleTypeLimitsFraction)
|
3563
3553
|
return s
|
3564
3554
|
end
|
3565
3555
|
|
3566
|
-
def self.
|
3567
|
-
|
3568
|
-
|
3569
|
-
|
3570
|
-
|
3571
|
-
|
3572
|
-
|
3573
|
-
|
3574
|
-
|
3575
|
-
|
3576
|
-
|
3577
|
-
|
3578
|
-
|
3579
|
-
|
3580
|
-
|
3581
|
-
|
3582
|
-
|
3583
|
-
|
3584
|
-
if
|
3585
|
-
|
3556
|
+
def self.set_sequential_load_fractions(model, control_zone, hvac_object, sequential_heat_load_fracs, sequential_cool_load_fracs, hvac_unavailable_periods, heating_system = nil)
|
3557
|
+
heating_sch = get_sequential_load_schedule(model, sequential_heat_load_fracs, hvac_unavailable_periods)
|
3558
|
+
cooling_sch = get_sequential_load_schedule(model, sequential_cool_load_fracs, hvac_unavailable_periods)
|
3559
|
+
control_zone.setSequentialHeatingFractionSchedule(hvac_object, heating_sch)
|
3560
|
+
control_zone.setSequentialCoolingFractionSchedule(hvac_object, cooling_sch)
|
3561
|
+
|
3562
|
+
if (not heating_system.nil?) && (heating_system.is_a? HPXML::HeatingSystem) && heating_system.is_heat_pump_backup_system
|
3563
|
+
# Backup system for a heat pump, and heat pump has been set with
|
3564
|
+
# backup heating switchover temperature or backup heating lockout temperature.
|
3565
|
+
# Use EMS to prevent operation of this system above the specified temperature.
|
3566
|
+
|
3567
|
+
max_heating_temp = heating_system.primary_heat_pump.additional_properties.supp_max_temp
|
3568
|
+
|
3569
|
+
# Sensor
|
3570
|
+
tout_db_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Site Outdoor Air Drybulb Temperature')
|
3571
|
+
tout_db_sensor.setKeyName('Environment')
|
3572
|
+
|
3573
|
+
# Actuator
|
3574
|
+
if heating_sch.is_a? OpenStudio::Model::ScheduleConstant
|
3575
|
+
actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(heating_sch, *EPlus::EMSActuatorScheduleConstantValue)
|
3576
|
+
elsif heating_sch.is_a? OpenStudio::Model::ScheduleRuleset
|
3577
|
+
actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(heating_sch, *EPlus::EMSActuatorScheduleYearValue)
|
3586
3578
|
else
|
3587
|
-
|
3579
|
+
fail "Unexpected heating schedule type: #{heating_sch.class}."
|
3588
3580
|
end
|
3589
|
-
|
3581
|
+
actuator.setName("#{heating_sch.name.to_s.gsub(' ', '_')}_act")
|
3582
|
+
|
3583
|
+
# Program
|
3584
|
+
temp_override_program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
3585
|
+
temp_override_program.setName("#{heating_sch.name} program")
|
3586
|
+
temp_override_program.addLine("If #{tout_db_sensor.name} > #{UnitConversions.convert(max_heating_temp, 'F', 'C')}")
|
3587
|
+
temp_override_program.addLine(" Set #{actuator.name} = 0")
|
3588
|
+
temp_override_program.addLine('Else')
|
3589
|
+
temp_override_program.addLine(" Set #{actuator.name} = NULL") # Allow normal operation
|
3590
|
+
temp_override_program.addLine('EndIf')
|
3591
|
+
|
3592
|
+
program_calling_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
3593
|
+
program_calling_manager.setName("#{heating_sch.name} program manager")
|
3594
|
+
program_calling_manager.setCallingPoint('BeginZoneTimestepAfterInitHeatBalance')
|
3595
|
+
program_calling_manager.addProgram(temp_override_program)
|
3590
3596
|
end
|
3591
3597
|
end
|
3592
3598
|
|
3593
|
-
def self.set_heat_pump_temperatures(heat_pump)
|
3599
|
+
def self.set_heat_pump_temperatures(heat_pump, runner = nil)
|
3594
3600
|
hp_ap = heat_pump.additional_properties
|
3595
3601
|
|
3596
3602
|
# Sets:
|
@@ -3599,9 +3605,18 @@ class HVAC
|
|
3599
3605
|
if not heat_pump.backup_heating_switchover_temp.nil?
|
3600
3606
|
hp_ap.hp_min_temp = heat_pump.backup_heating_switchover_temp
|
3601
3607
|
hp_ap.supp_max_temp = heat_pump.backup_heating_switchover_temp
|
3608
|
+
|
3609
|
+
if heat_pump.backup_type == HPXML::HeatPumpBackupTypeIntegrated
|
3610
|
+
hp_backup_fuel = heat_pump.backup_heating_fuel
|
3611
|
+
elsif not heat_pump.backup_system.nil?
|
3612
|
+
hp_backup_fuel = heat_pump.backup_system.heating_system_fuel
|
3613
|
+
end
|
3614
|
+
if (hp_backup_fuel == HPXML::FuelTypeElectricity) && (not runner.nil?)
|
3615
|
+
runner.registerError('Switchover temperature should not be used for a heat pump with electric backup; use compressor lockout temperature instead.')
|
3616
|
+
end
|
3602
3617
|
else
|
3618
|
+
hp_ap.hp_min_temp = heat_pump.compressor_lockout_temp
|
3603
3619
|
hp_ap.supp_max_temp = heat_pump.backup_heating_lockout_temp
|
3604
|
-
hp_ap.hp_min_temp = -40.0
|
3605
3620
|
end
|
3606
3621
|
end
|
3607
3622
|
|
@@ -3958,7 +3973,7 @@ class HVAC
|
|
3958
3973
|
chiller_input = UnitConversions.convert(cooling_system.cooling_efficiency_kw_per_ton * UnitConversions.convert(cap, 'Btu/hr', 'ton'), 'kW', 'W')
|
3959
3974
|
if distribution_type == HPXML::HVACDistributionTypeHydronic
|
3960
3975
|
if distribution_system.hydronic_type == HPXML::HydronicTypeWaterLoop
|
3961
|
-
wlhp = hpxml.heat_pumps.
|
3976
|
+
wlhp = hpxml.heat_pumps.find { |hp| hp.heat_pump_type == HPXML::HVACTypeHeatPumpWaterLoopToAir }
|
3962
3977
|
aux_dweq = wlhp.cooling_capacity / wlhp.cooling_efficiency_eer
|
3963
3978
|
else
|
3964
3979
|
aux_dweq = 0.0
|
@@ -3976,7 +3991,7 @@ class HVAC
|
|
3976
3991
|
# Cooling tower w/ water loop heat pump
|
3977
3992
|
if distribution_type == HPXML::HVACDistributionTypeHydronic
|
3978
3993
|
if distribution_system.hydronic_type == HPXML::HydronicTypeWaterLoop
|
3979
|
-
wlhp = hpxml.heat_pumps.
|
3994
|
+
wlhp = hpxml.heat_pumps.find { |hp| hp.heat_pump_type == HPXML::HVACTypeHeatPumpWaterLoopToAir }
|
3980
3995
|
wlhp_cap = wlhp.cooling_capacity
|
3981
3996
|
wlhp_input = wlhp_cap / wlhp.cooling_efficiency_eer
|
3982
3997
|
end
|
@@ -4077,7 +4092,7 @@ class HVAC
|
|
4077
4092
|
|
4078
4093
|
# Heat pump
|
4079
4094
|
# If this approach is ever removed, also remove code in HVACSizing.apply_hvac_loads()
|
4080
|
-
wlhp = hpxml.heat_pumps.
|
4095
|
+
wlhp = hpxml.heat_pumps.find { |hp| hp.heat_pump_type == HPXML::HVACTypeHeatPumpWaterLoopToAir }
|
4081
4096
|
wlhp.fraction_heat_load_served = fraction_heat_load_served * (1.0 / wlhp.heating_efficiency_cop)
|
4082
4097
|
wlhp.fraction_cool_load_served = 0.0
|
4083
4098
|
|