urbanopt-cli 0.8.3 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -6
- data/CHANGELOG.md +14 -0
- data/CMakeLists.txt +7 -7
- data/Gemfile +3 -1
- data/README.md +9 -0
- data/example_files/Gemfile +23 -16
- data/example_files/Gemfile.lock +177 -0
- data/example_files/base_workflow_res.osw +57 -14
- data/example_files/class_project_coincident.json +1322 -0
- data/example_files/class_project_diverse.json +1322 -0
- data/example_files/disco/config.json +42 -0
- data/example_files/disco/cost_database.xlsx +0 -0
- data/example_files/disco/technical_catalog.json +12126 -0
- data/example_files/mappers/Baseline.rb +10 -7
- data/example_files/mappers/ChilledWaterStorage.rb +98 -0
- data/example_files/mappers/ClassProject.rb +110 -0
- data/example_files/mappers/CreateBar.rb +1 -0
- data/example_files/mappers/HighEfficiency.rb +13 -11
- data/example_files/mappers/PeakHoursMelsShedding.rb +72 -0
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +78 -0
- data/example_files/mappers/ThermalStorage.rb +1 -0
- data/example_files/mappers/base_workflow.osw +55 -14
- data/example_files/mappers/class_project_workflow.osw +328 -0
- data/example_files/mappers/createbar_workflow.osw +16 -16
- data/example_files/measures/BuildResidentialModel/measure.rb +7 -1
- data/example_files/measures/BuildResidentialModel/measure.xml +1313 -706
- data/example_files/opendss/electrical_database.json +1446 -1446
- data/example_files/python_deps/dependencies.json +5 -0
- data/example_files/python_deps/install_python.ps1 +96 -0
- data/example_files/python_deps/install_python.sh +120 -0
- data/example_files/residential/clothes_dryer.tsv +11 -11
- data/example_files/residential/clothes_washer.tsv +3 -3
- data/example_files/residential/dishwasher.tsv +3 -3
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +0 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +8 -21
- data/example_files/resources/hpxml-measures/.gitignore +2 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1272 -1094
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +978 -659
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +52 -74
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +77 -140
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +30 -27
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +32 -13
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +55 -51
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +89 -16
- data/example_files/resources/hpxml-measures/Changelog.md +65 -0
- data/example_files/resources/hpxml-measures/Gemfile +2 -4
- data/example_files/resources/hpxml-measures/Gemfile.lock +2 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +276 -300
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +221 -215
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +215 -170
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +108 -16
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +24 -44
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +564 -197
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/cambium/README.md +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +7 -55
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +24 -19
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +541 -211
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +300 -172
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +0 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +230 -141
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +145 -137
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +191 -97
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/iso-schematron.xsd +391 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +194 -198
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +140 -145
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +11 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +33 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +17 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +14 -12
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +39 -17
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/battery.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +114 -57
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/utility_bills.rb +148 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +85 -127
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +26 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +2 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +67 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +117 -56
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +141 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +453 -344
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +124 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +28 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +172 -79
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +7 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +6 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +213 -95
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +1 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +76 -0
- data/example_files/resources/hpxml-measures/README.md +2 -3
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +585 -287
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +304 -352
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +404 -279
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +222 -501
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +137 -200
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate Min Annual Charge.json +649 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate Min Monthly Charge.json +649 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate.json +647 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate Min Annual Charge.json +8776 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate Min Monthly Charge.json +8776 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate.json +8774 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate Min Annual Charge.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate Min Monthly Charge.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate.json +657 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate Min Annual Charge.json +670 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate Min Monthly Charge.json +670 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate.json +668 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate Min Annual Charge.json +655 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate Min Monthly Charge.json +655 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate.json +653 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/openei_rates.zip +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/Average_retail_price_of_electricity.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/HouseholdConsumption.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/NG_PRI_SUM_A_EPG0_PRS_DMCF_A.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/PET_PRI_WFR_A_EPD2F_PRS_DPGAL_W.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/PET_PRI_WFR_A_EPLLPA_PRS_DPGAL_W.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/README.md +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/util.rb +506 -25
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Contains Demand Charges.json +1312 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Invalid Fixed Charge Units.json +657 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Invalid Min Charge Units.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/JacksonElectricMemberCorp-ResidentialSeniorCitizenLowIncomeAssistance.json +681 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Missing Required Fields.json +54 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/data.csv +8761 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +1006 -235
- data/example_files/resources/hpxml-measures/docs/source/conf.py +1 -1
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +0 -1
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +2 -2
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +461 -261
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +146 -152
- data/example_files/resources/hpxml-measures/tasks.rb +616 -802
- data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +28 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +13 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +31 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +21 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +37 -22
- data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +24 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +33 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +30 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +10 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +22 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +18 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +25 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +26 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +25 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +35 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +28 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +35 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +20 -13
- data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +12 -9
- data/example_files/resources/hpxml-measures/workflow/real_homes/house048.xml +25 -14
- data/example_files/resources/hpxml-measures/workflow/real_homes/house049.xml +10 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house050.xml +20 -11
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +91 -88
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +546 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +546 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +555 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +7 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +17 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +7 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +600 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +606 -593
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-calctype-operational.xml +480 -471
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +464 -457
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +496 -487
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +466 -459
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +518 -509
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +513 -504
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +445 -438
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +476 -467
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +443 -436
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +446 -439
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +445 -438
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +476 -467
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +446 -439
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +489 -480
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +499 -490
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +491 -482
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +510 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +495 -486
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +709 -695
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +528 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +512 -503
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +504 -495
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +497 -488
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +490 -481
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +487 -478
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached-2stories.xml +639 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached-atticroof-cathedral.xml +587 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +639 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-defaults.xml +539 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-loads-large-uncommon.xml +644 -633
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-loads-large-uncommon2.xml +644 -633
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational.xml +575 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +536 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +20 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +584 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +584 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +28 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +20 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +550 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +589 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +619 -608
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +620 -609
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +618 -607
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +90 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2507 -2460
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +595 -584
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +594 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +597 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +671 -656
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-foundation-conditioned-basement-wall-interior-insulation.xml → base-foundation-conditioned-basement-wall-insulation.xml} +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +35 -16
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +583 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +600 -589
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +599 -588
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +629 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +579 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +581 -570
- 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 +582 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +628 -615
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +535 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +589 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +536 -527
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +18 -7
- 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 +582 -571
- 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 +582 -571
- 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 +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +578 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +575 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +551 -542
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +532 -530
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +525 -516
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +525 -516
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +533 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +611 -598
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +589 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +17 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +574 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +570 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +570 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +552 -543
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +963 -938
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +33 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ptac-with-heating.xml → base-hvac-ptac-with-heating-natural-gas.xml} +23 -21
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +594 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +591 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +601 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +601 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +19 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +20 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +21 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +37 -19
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +590 -579
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +578 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +632 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +614 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +677 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +593 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +27 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +676 -665
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +616 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +615 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +586 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1700 -1677
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +622 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +697 -682
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-pv-battery-lifetime-model.xml → base-pv-battery-round-trip-efficiency.xml} +20 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +624 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +622 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +640 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +639 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +623 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +606 -595
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-smooth.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +636 -625
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +27 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +21 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +21 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-tank-heat-pump-detailed-operating-modes.xml → base-simcontrol-temperature-capacitance-multiplier.xml} +25 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-tank-heat-pump-detailed-setpoints.xml → base-simcontrol-timestep-30-mins.xml} +25 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +18 -13
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +12 -7
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +8 -24
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +366 -358
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +311 -303
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +311 -303
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +327 -319
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +327 -319
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +332 -324
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +332 -324
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +341 -333
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +341 -333
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +383 -379
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +383 -379
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +538 -534
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +550 -546
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +444 -410
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +8 -8
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +444 -410
- data/example_files/resources/hpxml-measures/workflow/tests/compare.py +18 -4
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +133 -288
- data/example_files/scripts/convert_urbanopt_to_disco.py +130 -0
- data/example_files/scripts/default_control_changes.csv +8 -0
- data/example_files/scripts/default_voltage_regulators.csv +3 -0
- data/example_files/scripts/read_data.py +331 -0
- data/example_files/visualization/input_visualization_feature.html +172 -81
- data/example_files/visualization/input_visualization_scenario.html +178 -82
- data/example_files/xml_building/17/README.md +2 -2
- data/example_files/xml_building/17/unit 1.xml +40 -41
- data/example_files/xml_building/17/unit 2.xml +35 -36
- data/example_files/xml_building/17/unit 3.xml +35 -36
- data/example_files/xml_building/17/unit 4.xml +41 -42
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +596 -96
- data/uo_cli.gemspec +6 -5
- metadata +121 -36
- data/example_files/residential/exhaust.tsv +0 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/hvac_equipment_efficiency.csv +0 -493
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/water_heater_efficiency.csv +0 -157
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/HPXMLvalidator.xml +0 -620
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +0 -107
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +0 -450
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +0 -85
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +0 -72
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +0 -290
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_10kW.csv +0 -8761
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_1kW.csv +0 -8761
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_None.csv +0 -8761
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +0 -410
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class HVAC
|
4
|
-
def self.apply_air_source_hvac_systems(model,
|
4
|
+
def self.apply_air_source_hvac_systems(model, cooling_system, heating_system,
|
5
5
|
sequential_cool_load_fracs, sequential_heat_load_fracs,
|
6
6
|
control_zone)
|
7
7
|
is_heatpump = false
|
@@ -15,6 +15,9 @@ class HVAC
|
|
15
15
|
elsif cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpPTHP
|
16
16
|
obj_name = Constants.ObjectNamePTHP
|
17
17
|
fan_watts_per_cfm = 0.0
|
18
|
+
elsif cooling_system.heat_pump_type == HPXML::HVACTypeHeatPumpRoom
|
19
|
+
obj_name = Constants.ObjectNameRoomHP
|
20
|
+
fan_watts_per_cfm = 0.0
|
18
21
|
else
|
19
22
|
fail "Unexpected heat pump type: #{cooling_system.heat_pump_type}."
|
20
23
|
end
|
@@ -29,14 +32,15 @@ class HVAC
|
|
29
32
|
fail "Fan powers for heating system '#{heating_system.id}' and cooling system '#{cooling_system.id}' are attached to a single distribution system and therefore must be the same."
|
30
33
|
end
|
31
34
|
end
|
32
|
-
elsif cooling_system.cooling_system_type
|
33
|
-
obj_name = Constants.ObjectNameRoomAirConditioner
|
35
|
+
elsif [HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
|
34
36
|
fan_watts_per_cfm = 0.0
|
37
|
+
if cooling_system.cooling_system_type == HPXML::HVACTypeRoomAirConditioner
|
38
|
+
obj_name = Constants.ObjectNameRoomAirConditioner
|
39
|
+
else
|
40
|
+
obj_name = Constants.ObjectNamePTAC
|
41
|
+
end
|
35
42
|
elsif cooling_system.cooling_system_type == HPXML::HVACTypeMiniSplitAirConditioner
|
36
43
|
obj_name = Constants.ObjectNameMiniSplitAirConditioner
|
37
|
-
elsif cooling_system.cooling_system_type == HPXML::HVACTypePTAC
|
38
|
-
obj_name = Constants.ObjectNamePTAC
|
39
|
-
fan_watts_per_cfm = 0.0
|
40
44
|
else
|
41
45
|
fail "Unexpected cooling system type: #{cooling_system.cooling_system_type}."
|
42
46
|
end
|
@@ -46,10 +50,6 @@ class HVAC
|
|
46
50
|
elsif (heating_system.is_a? HPXML::HeatingSystem) && (heating_system.heating_system_type == HPXML::HVACTypeFurnace)
|
47
51
|
obj_name = Constants.ObjectNameFurnace
|
48
52
|
num_speeds = 1
|
49
|
-
elsif (heating_system.is_a? HPXML::HeatingSystem) && (heating_system.heating_system_type == HPXML::HVACTypePTACHeating)
|
50
|
-
obj_name = Constants.ObjectNamePTACHeating
|
51
|
-
fan_watts_per_cfm = 0.0
|
52
|
-
num_speeds = 1
|
53
53
|
else
|
54
54
|
fail "Unexpected heating system type: #{heating_system.heating_system_type}, expect central air source hvac systems."
|
55
55
|
end
|
@@ -63,6 +63,23 @@ class HVAC
|
|
63
63
|
clg_ap.cool_fan_speed_ratios.each do |r|
|
64
64
|
fan_cfms << clg_cfm * r
|
65
65
|
end
|
66
|
+
if (cooling_system.is_a? HPXML::CoolingSystem) && cooling_system.has_integrated_heating
|
67
|
+
if cooling_system.integrated_heating_system_fuel == HPXML::FuelTypeElectricity
|
68
|
+
htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model)
|
69
|
+
htg_coil.setEfficiency(cooling_system.integrated_heating_system_efficiency_percent)
|
70
|
+
else
|
71
|
+
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model)
|
72
|
+
htg_coil.setGasBurnerEfficiency(cooling_system.integrated_heating_system_efficiency_percent)
|
73
|
+
htg_coil.setParasiticElectricLoad(0)
|
74
|
+
htg_coil.setParasiticGasLoad(0)
|
75
|
+
htg_coil.setFuelType(EPlus.fuel_type(cooling_system.integrated_heating_system_fuel))
|
76
|
+
end
|
77
|
+
htg_coil.setNominalCapacity(UnitConversions.convert(cooling_system.integrated_heating_system_capacity, 'Btu/hr', 'W'))
|
78
|
+
htg_coil.setName(obj_name + ' htg coil')
|
79
|
+
htg_coil.additionalProperties.setFeature('HPXML_ID', cooling_system.id) # Used by reporting measure
|
80
|
+
htg_cfm = cooling_system.integrated_heating_system_airflow_cfm
|
81
|
+
fan_cfms << htg_cfm
|
82
|
+
end
|
66
83
|
end
|
67
84
|
|
68
85
|
if not heating_system.nil?
|
@@ -83,11 +100,7 @@ class HVAC
|
|
83
100
|
# Heating Coil
|
84
101
|
if heating_system.heating_system_fuel == HPXML::FuelTypeElectricity
|
85
102
|
htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model)
|
86
|
-
|
87
|
-
htg_coil.setEfficiency(heating_system.heating_efficiency_percent)
|
88
|
-
else
|
89
|
-
htg_coil.setEfficiency(heating_system.heating_efficiency_afue)
|
90
|
-
end
|
103
|
+
htg_coil.setEfficiency(heating_system.heating_efficiency_afue)
|
91
104
|
else
|
92
105
|
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model)
|
93
106
|
htg_coil.setGasBurnerEfficiency(heating_system.heating_efficiency_afue)
|
@@ -119,7 +132,11 @@ class HVAC
|
|
119
132
|
disaggregate_fan_or_pump(model, fan, htg_coil, clg_coil, htg_supp_coil, cooling_system)
|
120
133
|
else
|
121
134
|
if not cooling_system.nil?
|
122
|
-
|
135
|
+
if cooling_system.has_integrated_heating
|
136
|
+
disaggregate_fan_or_pump(model, fan, htg_coil, clg_coil, nil, cooling_system)
|
137
|
+
else
|
138
|
+
disaggregate_fan_or_pump(model, fan, nil, clg_coil, nil, cooling_system)
|
139
|
+
end
|
123
140
|
end
|
124
141
|
if not heating_system.nil?
|
125
142
|
disaggregate_fan_or_pump(model, fan, htg_coil, nil, htg_supp_coil, heating_system)
|
@@ -152,7 +169,7 @@ class HVAC
|
|
152
169
|
return air_loop
|
153
170
|
end
|
154
171
|
|
155
|
-
def self.apply_evaporative_cooler(model,
|
172
|
+
def self.apply_evaporative_cooler(model, cooling_system,
|
156
173
|
sequential_cool_load_fracs, control_zone)
|
157
174
|
|
158
175
|
obj_name = Constants.ObjectNameEvaporativeCooler
|
@@ -204,7 +221,7 @@ class HVAC
|
|
204
221
|
|
205
222
|
def self.apply_ground_to_air_heat_pump(model, runner, weather, heat_pump,
|
206
223
|
sequential_heat_load_fracs, sequential_cool_load_fracs,
|
207
|
-
control_zone)
|
224
|
+
control_zone, ground_conductivity)
|
208
225
|
|
209
226
|
obj_name = Constants.ObjectNameGroundSourceHeatPump
|
210
227
|
|
@@ -252,8 +269,8 @@ class HVAC
|
|
252
269
|
ground_heat_exch_vert = OpenStudio::Model::GroundHeatExchangerVertical.new(model)
|
253
270
|
ground_heat_exch_vert.setName(obj_name + ' exchanger')
|
254
271
|
ground_heat_exch_vert.setBoreHoleRadius(UnitConversions.convert(hp_ap.bore_diameter / 2.0, 'in', 'm'))
|
255
|
-
ground_heat_exch_vert.setGroundThermalConductivity(UnitConversions.convert(
|
256
|
-
ground_heat_exch_vert.setGroundThermalHeatCapacity(UnitConversions.convert(
|
272
|
+
ground_heat_exch_vert.setGroundThermalConductivity(UnitConversions.convert(ground_conductivity, 'Btu/(hr*ft*R)', 'W/(m*K)'))
|
273
|
+
ground_heat_exch_vert.setGroundThermalHeatCapacity(UnitConversions.convert(ground_conductivity / hp_ap.ground_diffusivity, 'Btu/(ft^3*F)', 'J/(m^3*K)'))
|
257
274
|
ground_heat_exch_vert.setGroundTemperature(UnitConversions.convert(weather.data.AnnualAvgDrybulb, 'F', 'C'))
|
258
275
|
ground_heat_exch_vert.setGroutThermalConductivity(UnitConversions.convert(hp_ap.grout_conductivity, 'Btu/(hr*ft*R)', 'W/(m*K)'))
|
259
276
|
ground_heat_exch_vert.setPipeThermalConductivity(UnitConversions.convert(hp_ap.pipe_cond, 'Btu/(hr*ft*R)', 'W/(m*K)'))
|
@@ -346,23 +363,19 @@ class HVAC
|
|
346
363
|
|
347
364
|
if heat_pump.is_shared_system
|
348
365
|
# Shared pump power per ANSI/RESNET/ICC 301-2019 Section 4.4.5.1 (pump runs 8760)
|
349
|
-
# Ancillary fields do not correctly work so using ElectricEquipment object instead;
|
350
|
-
# Revert when https://github.com/NREL/EnergyPlus/issues/8230 is fixed.
|
351
366
|
shared_pump_w = heat_pump.shared_loop_watts / heat_pump.number_of_units_served.to_f
|
352
|
-
# air_loop_unitary.setAncilliaryOffCycleElectricPower(shared_pump_w)
|
353
|
-
# air_loop_unitary.setAncilliaryOnCycleElectricPower(shared_pump_w)
|
354
367
|
equip_def = OpenStudio::Model::ElectricEquipmentDefinition.new(model)
|
355
|
-
equip_def.setName(Constants.
|
368
|
+
equip_def.setName(Constants.ObjectNameGSHPSharedPump)
|
356
369
|
equip = OpenStudio::Model::ElectricEquipment.new(equip_def)
|
357
370
|
equip.setName(equip_def.name.to_s)
|
358
|
-
equip.setSpace(control_zone.spaces[0])
|
371
|
+
equip.setSpace(control_zone.spaces[0]) # no heat gain, so assign the equipment to an arbitrary space
|
359
372
|
equip_def.setDesignLevel(shared_pump_w)
|
360
373
|
equip_def.setFractionRadiant(0)
|
361
374
|
equip_def.setFractionLatent(0)
|
362
375
|
equip_def.setFractionLost(1)
|
363
376
|
equip.setSchedule(model.alwaysOnDiscreteSchedule)
|
364
377
|
equip.setEndUseSubcategory(equip_def.name.to_s)
|
365
|
-
|
378
|
+
equip.additionalProperties.setFeature('HPXML_ID', heat_pump.id) # Used by reporting measure
|
366
379
|
end
|
367
380
|
|
368
381
|
# Air Loop
|
@@ -374,7 +387,7 @@ class HVAC
|
|
374
387
|
return air_loop
|
375
388
|
end
|
376
389
|
|
377
|
-
def self.apply_water_loop_to_air_heat_pump(model,
|
390
|
+
def self.apply_water_loop_to_air_heat_pump(model, heat_pump,
|
378
391
|
sequential_heat_load_fracs, sequential_cool_load_fracs,
|
379
392
|
control_zone)
|
380
393
|
if heat_pump.fraction_cool_load_served > 0
|
@@ -601,7 +614,7 @@ class HVAC
|
|
601
614
|
return zone_hvac
|
602
615
|
end
|
603
616
|
|
604
|
-
def self.apply_electric_baseboard(model,
|
617
|
+
def self.apply_electric_baseboard(model, heating_system,
|
605
618
|
sequential_heat_load_fracs, control_zone)
|
606
619
|
|
607
620
|
obj_name = Constants.ObjectNameElectricBaseboard
|
@@ -618,13 +631,11 @@ class HVAC
|
|
618
631
|
control_zone.setSequentialCoolingFractionSchedule(zone_hvac, get_sequential_load_schedule(model, [0]))
|
619
632
|
end
|
620
633
|
|
621
|
-
def self.apply_unit_heater(model,
|
634
|
+
def self.apply_unit_heater(model, heating_system,
|
622
635
|
sequential_heat_load_fracs, control_zone)
|
623
636
|
|
624
637
|
obj_name = Constants.ObjectNameUnitHeater
|
625
638
|
|
626
|
-
htg_ap = heating_system.additional_properties
|
627
|
-
|
628
639
|
# Heating Coil
|
629
640
|
efficiency = heating_system.heating_efficiency_afue
|
630
641
|
efficiency = heating_system.heating_efficiency_percent if efficiency.nil?
|
@@ -657,7 +668,7 @@ class HVAC
|
|
657
668
|
control_zone.setSequentialCoolingFractionSchedule(unitary_system, get_sequential_load_schedule(model, [0]))
|
658
669
|
end
|
659
670
|
|
660
|
-
def self.apply_ideal_air_loads(model,
|
671
|
+
def self.apply_ideal_air_loads(model, obj_name, sequential_cool_load_fracs,
|
661
672
|
sequential_heat_load_fracs, control_zone)
|
662
673
|
|
663
674
|
# Ideal Air System
|
@@ -687,7 +698,7 @@ class HVAC
|
|
687
698
|
control_zone.setSequentialHeatingFractionSchedule(ideal_air, get_sequential_load_schedule(model, sequential_heat_load_fracs))
|
688
699
|
end
|
689
700
|
|
690
|
-
def self.apply_dehumidifiers(model,
|
701
|
+
def self.apply_dehumidifiers(model, dehumidifiers, living_space)
|
691
702
|
dehumidifier_id = dehumidifiers[0].id # Syncs with the ReportSimulationOutput measure, which only looks at first dehumidifier ID
|
692
703
|
|
693
704
|
if dehumidifiers.map { |d| d.rh_setpoint }.uniq.size > 1
|
@@ -771,7 +782,7 @@ class HVAC
|
|
771
782
|
weekend_sch = ceiling_fan.weekend_fractions
|
772
783
|
monthly_sch = ceiling_fan.monthly_multipliers
|
773
784
|
ceiling_fan_sch_obj = MonthWeekdayWeekendSchedule.new(model, obj_name + ' schedule', weekday_sch, weekend_sch, monthly_sch, Constants.ScheduleTypeLimitsFraction)
|
774
|
-
ceiling_fan_design_level = ceiling_fan_sch_obj.
|
785
|
+
ceiling_fan_design_level = ceiling_fan_sch_obj.calc_design_level_from_daily_kwh(annual_kwh / 365.0)
|
775
786
|
ceiling_fan_sch = ceiling_fan_sch_obj.schedule
|
776
787
|
else
|
777
788
|
runner.registerWarning("Both '#{SchedulesFile::ColumnCeilingFan}' schedule file and weekday fractions provided; the latter will be ignored.") if !ceiling_fan.weekday_fractions.nil?
|
@@ -838,10 +849,17 @@ class HVAC
|
|
838
849
|
|
839
850
|
def self.create_setpoint_schedules(runner, heating_days, cooling_days, htg_weekday_setpoints, htg_weekend_setpoints, clg_weekday_setpoints, clg_weekend_setpoints, year)
|
840
851
|
# Create setpoint schedules
|
852
|
+
# This method ensures that we don't construct a setpoint schedule where the cooling setpoint
|
853
|
+
# is less than the heating setpoint, which would result in an E+ error.
|
854
|
+
|
855
|
+
# Note: It's tempting to adjust the setpoints, e.g., outside of the heating/cooling seasons,
|
856
|
+
# to prevent unmet hours being reported. This is a dangerous idea. These setpoints are used
|
857
|
+
# by natural ventilation, Kiva initialization, and probably other things.
|
858
|
+
|
841
859
|
num_days = Constants.NumDaysInYear(year)
|
842
860
|
warning = false
|
843
|
-
|
844
|
-
if (heating_days[i] ==
|
861
|
+
for i in 0..(num_days - 1)
|
862
|
+
if (heating_days[i] == cooling_days[i]) # both (or neither) heating/cooling seasons
|
845
863
|
htg_wkdy = htg_weekday_setpoints[i].zip(clg_weekday_setpoints[i]).map { |h, c| c < h ? (h + c) / 2.0 : h }
|
846
864
|
htg_wked = htg_weekend_setpoints[i].zip(clg_weekend_setpoints[i]).map { |h, c| c < h ? (h + c) / 2.0 : h }
|
847
865
|
clg_wkdy = htg_weekday_setpoints[i].zip(clg_weekday_setpoints[i]).map { |h, c| c < h ? (h + c) / 2.0 : c }
|
@@ -852,8 +870,8 @@ class HVAC
|
|
852
870
|
clg_wkdy = htg_weekday_setpoints[i].zip(clg_weekday_setpoints[i]).map { |h, c| c < h ? h : c }
|
853
871
|
clg_wked = htg_weekend_setpoints[i].zip(clg_weekend_setpoints[i]).map { |h, c| c < h ? h : c }
|
854
872
|
elsif cooling_days[i] == 1 # cooling only seasons; heating has maximum of cooling
|
855
|
-
htg_wkdy =
|
856
|
-
htg_wked =
|
873
|
+
htg_wkdy = clg_weekday_setpoints[i].zip(htg_weekday_setpoints[i]).map { |c, h| c < h ? c : h }
|
874
|
+
htg_wked = clg_weekend_setpoints[i].zip(htg_weekend_setpoints[i]).map { |c, h| c < h ? c : h }
|
857
875
|
clg_wkdy = clg_weekday_setpoints[i]
|
858
876
|
clg_wked = clg_weekend_setpoints[i]
|
859
877
|
else
|
@@ -1210,7 +1228,10 @@ class HVAC
|
|
1210
1228
|
elsif seer > 21
|
1211
1229
|
return HPXML::HVACCompressorTypeVariableSpeed
|
1212
1230
|
end
|
1213
|
-
elsif [HPXML::HVACTypePTAC,
|
1231
|
+
elsif [HPXML::HVACTypePTAC,
|
1232
|
+
HPXML::HVACTypeHeatPumpPTHP,
|
1233
|
+
HPXML::HVACTypeHeatPumpRoom,
|
1234
|
+
HPXML::HVACTypeRoomAirConditioner].include? hvac_type
|
1214
1235
|
return HPXML::HVACCompressorTypeSingleStage
|
1215
1236
|
end
|
1216
1237
|
return
|
@@ -1401,6 +1422,7 @@ class HVAC
|
|
1401
1422
|
end
|
1402
1423
|
fan_or_pump_sensor.setName("#{fan_or_pump.name} s")
|
1403
1424
|
fan_or_pump_sensor.setKeyName(fan_or_pump.name.to_s)
|
1425
|
+
fan_or_pump_var = fan_or_pump.name.to_s.gsub(' ', '_')
|
1404
1426
|
|
1405
1427
|
if clg_object.nil?
|
1406
1428
|
clg_object_sensor = nil
|
@@ -1416,7 +1438,6 @@ class HVAC
|
|
1416
1438
|
end
|
1417
1439
|
|
1418
1440
|
if htg_object.nil?
|
1419
|
-
htg_fuel = nil
|
1420
1441
|
htg_object_sensor = nil
|
1421
1442
|
else
|
1422
1443
|
htg_fuel = EPlus::FuelTypeElectricity
|
@@ -1436,7 +1457,6 @@ class HVAC
|
|
1436
1457
|
end
|
1437
1458
|
|
1438
1459
|
if backup_htg_object.nil?
|
1439
|
-
backup_htg_fuel = nil
|
1440
1460
|
backup_htg_object_sensor = nil
|
1441
1461
|
else
|
1442
1462
|
backup_htg_fuel = EPlus::FuelTypeElectricity
|
@@ -1454,33 +1474,26 @@ class HVAC
|
|
1454
1474
|
sensors = { 'clg' => clg_object_sensor,
|
1455
1475
|
'primary_htg' => htg_object_sensor,
|
1456
1476
|
'backup_htg' => backup_htg_object_sensor }
|
1457
|
-
sensors = sensors.select { |
|
1458
|
-
|
1459
|
-
fan_or_pump_var = fan_or_pump.name.to_s.gsub(' ', '_')
|
1477
|
+
sensors = sensors.select { |_m, s| !s.nil? }
|
1460
1478
|
|
1461
1479
|
# Disaggregate electric fan/pump energy
|
1462
1480
|
fan_or_pump_program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
1463
1481
|
fan_or_pump_program.setName("#{fan_or_pump_var} disaggregate program")
|
1464
1482
|
if htg_object.is_a?(OpenStudio::Model::ZoneHVACBaseboardConvectiveWater) || htg_object.is_a?(OpenStudio::Model::ZoneHVACFourPipeFanCoil)
|
1465
1483
|
# Pump may occasionally run when baseboard isn't, so just assign all pump energy here
|
1466
|
-
mode,
|
1484
|
+
mode, _sensor = sensors.first
|
1467
1485
|
if (sensors.size != 1) || (mode != 'primary_htg')
|
1468
1486
|
fail 'Unexpected situation.'
|
1469
1487
|
end
|
1470
1488
|
|
1471
1489
|
fan_or_pump_program.addLine(" Set #{fan_or_pump_var}_#{mode} = #{fan_or_pump_sensor.name}")
|
1472
1490
|
else
|
1473
|
-
sensors.each do |mode
|
1491
|
+
sensors.keys.each do |mode|
|
1474
1492
|
fan_or_pump_program.addLine("Set #{fan_or_pump_var}_#{mode} = 0")
|
1475
1493
|
end
|
1476
1494
|
sensors.each_with_index do |(mode, sensor), i|
|
1477
|
-
|
1478
|
-
|
1479
|
-
elsif i == 2
|
1480
|
-
fan_or_pump_program.addLine('Else')
|
1481
|
-
else
|
1482
|
-
fan_or_pump_program.addLine("ElseIf #{sensor.name} > 0")
|
1483
|
-
end
|
1495
|
+
str_prefix = (i == 0 ? 'If' : 'ElseIf')
|
1496
|
+
fan_or_pump_program.addLine("#{str_prefix} #{sensor.name} > 0")
|
1484
1497
|
fan_or_pump_program.addLine(" Set #{fan_or_pump_var}_#{mode} = #{fan_or_pump_sensor.name}")
|
1485
1498
|
end
|
1486
1499
|
fan_or_pump_program.addLine('EndIf')
|
@@ -1804,7 +1817,7 @@ class HVAC
|
|
1804
1817
|
oat_intercept = y_A - (x_A * oat_slope)
|
1805
1818
|
|
1806
1819
|
heat_cap_ft_spec = []
|
1807
|
-
|
1820
|
+
for _i in 1..num_speeds
|
1808
1821
|
heat_cap_ft_spec << [oat_intercept + iat_intercept, iat_slope, 0, oat_slope, 0, 0]
|
1809
1822
|
end
|
1810
1823
|
|
@@ -1840,7 +1853,7 @@ class HVAC
|
|
1840
1853
|
|
1841
1854
|
eir_nom = calc_eir_from_eer(eer_nom, fan_power_rated)
|
1842
1855
|
|
1843
|
-
if calc_type
|
1856
|
+
if calc_type == 'seer'
|
1844
1857
|
indices = [0, 1, 4]
|
1845
1858
|
else
|
1846
1859
|
indices = [0, 1, 2, 4]
|
@@ -1851,7 +1864,7 @@ class HVAC
|
|
1851
1864
|
# Seer calculation is based on performance at three speeds
|
1852
1865
|
cops = [cop_ratios[indices[0]], cop_ratios[indices[1]], cop_ratios[indices[2]]]
|
1853
1866
|
|
1854
|
-
|
1867
|
+
if calc_type != 'seer'
|
1855
1868
|
cops << cop_ratios[indices[3]]
|
1856
1869
|
end
|
1857
1870
|
|
@@ -1880,7 +1893,7 @@ class HVAC
|
|
1880
1893
|
return [calc_cop_from_eir(eir_1, fan_power_rated), cop_2]
|
1881
1894
|
end
|
1882
1895
|
|
1883
|
-
def self.calc_cops_from_eir_4speed(cop_nom, fan_power_rated, calc_type
|
1896
|
+
def self.calc_cops_from_eir_4speed(cop_nom, fan_power_rated, calc_type: 'hspf')
|
1884
1897
|
# Returns rated cop at minimum, intermediate, and nominal speed given rated cop
|
1885
1898
|
|
1886
1899
|
eir_nom = calc_eir_from_cop(cop_nom, fan_power_rated)
|
@@ -1932,7 +1945,7 @@ class HVAC
|
|
1932
1945
|
|
1933
1946
|
err = 1
|
1934
1947
|
eer_c = (eer_a + eer_b) / 2.0
|
1935
|
-
|
1948
|
+
for _n in 1..iter_max
|
1936
1949
|
eers = calc_eers_from_eir_2speed(eer_a, fan_power_rated)
|
1937
1950
|
f_a = calc_seer_2speed(eers, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q) - seer
|
1938
1951
|
|
@@ -1975,11 +1988,11 @@ class HVAC
|
|
1975
1988
|
|
1976
1989
|
err = 1
|
1977
1990
|
eer_c = (eer_a + eer_b) / 2.0
|
1978
|
-
|
1979
|
-
eers = calc_eers_from_eir_4speed(eer_a, fan_power_rated,
|
1991
|
+
for _n in 1..iter_max
|
1992
|
+
eers = calc_eers_from_eir_4speed(eer_a, fan_power_rated, 'seer')
|
1980
1993
|
f_a = calc_seer_4speed(eers, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q) - seer
|
1981
1994
|
|
1982
|
-
eers = calc_eers_from_eir_4speed(eer_c, fan_power_rated,
|
1995
|
+
eers = calc_eers_from_eir_4speed(eer_c, fan_power_rated, 'seer')
|
1983
1996
|
f_c = calc_seer_4speed(eers, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q) - seer
|
1984
1997
|
|
1985
1998
|
if f_c == 0
|
@@ -2002,7 +2015,7 @@ class HVAC
|
|
2002
2015
|
fail 'Variable-speed cooling eers iteration failed to converge.'
|
2003
2016
|
end
|
2004
2017
|
|
2005
|
-
return calc_eers_from_eir_4speed(eer_c, fan_power_rated,
|
2018
|
+
return calc_eers_from_eir_4speed(eer_c, fan_power_rated, 'model')
|
2006
2019
|
end
|
2007
2020
|
|
2008
2021
|
def self.calc_seer_2speed(eers, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q)
|
@@ -2184,7 +2197,7 @@ class HVAC
|
|
2184
2197
|
|
2185
2198
|
err = 1
|
2186
2199
|
cop_c = (cop_a + cop_b) / 2.0
|
2187
|
-
|
2200
|
+
for _n in 1..iter_max
|
2188
2201
|
f_a = calc_hspf_1speed(cop_a, c_d, fan_power_rated, coeff_eir, coeff_q) - hspf
|
2189
2202
|
f_c = calc_hspf_1speed(cop_c, c_d, fan_power_rated, coeff_eir, coeff_q) - hspf
|
2190
2203
|
|
@@ -2224,7 +2237,7 @@ class HVAC
|
|
2224
2237
|
|
2225
2238
|
err = 1
|
2226
2239
|
cop_c = (cop_a + cop_b) / 2.0
|
2227
|
-
|
2240
|
+
for _n in 1..iter_max
|
2228
2241
|
cops = calc_cops_from_eir_2speed(cop_a, fan_power_rated)
|
2229
2242
|
f_a = calc_hspf_2speed(cops, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q) - hspf
|
2230
2243
|
|
@@ -2267,11 +2280,11 @@ class HVAC
|
|
2267
2280
|
|
2268
2281
|
err = 1
|
2269
2282
|
cop_c = (cop_a + cop_b) / 2.0
|
2270
|
-
|
2271
|
-
cops = calc_cops_from_eir_4speed(cop_a, fan_power_rated, calc_type
|
2283
|
+
for _n in 1..iter_max
|
2284
|
+
cops = calc_cops_from_eir_4speed(cop_a, fan_power_rated, calc_type: 'hspf')
|
2272
2285
|
f_a = calc_hspf_4speed(cops, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q) - hspf
|
2273
2286
|
|
2274
|
-
cops = calc_cops_from_eir_4speed(cop_c, fan_power_rated, calc_type
|
2287
|
+
cops = calc_cops_from_eir_4speed(cop_c, fan_power_rated, calc_type: 'hspf')
|
2275
2288
|
f_c = calc_hspf_4speed(cops, c_d, capacity_ratios, fanspeed_ratios, fan_power_rated, coeff_eir, coeff_q) - hspf
|
2276
2289
|
|
2277
2290
|
if f_c == 0
|
@@ -2294,7 +2307,7 @@ class HVAC
|
|
2294
2307
|
fail 'Variable-speed heating cops iteration failed to converge.'
|
2295
2308
|
end
|
2296
2309
|
|
2297
|
-
return calc_cops_from_eir_4speed(cop_c, fan_power_rated, calc_type
|
2310
|
+
return calc_cops_from_eir_4speed(cop_c, fan_power_rated, calc_type: 'model')
|
2298
2311
|
end
|
2299
2312
|
|
2300
2313
|
def self.calc_hspf_1speed(cop_47, c_d, fan_power_rated, coeff_eir, coeff_q)
|
@@ -2429,7 +2442,6 @@ class HVAC
|
|
2429
2442
|
p_l = p_L17 + (((p_L47 - p_L17) * (t_bins[i] - 17.0)) / (47.0 - 17.0))
|
2430
2443
|
end
|
2431
2444
|
|
2432
|
-
x_t_h = [bL / q_h, 1.0].min
|
2433
2445
|
x_t_l = [bL / q_l, 1.0].min
|
2434
2446
|
pLF = 1.0 - (c_d * (1.0 - x_t_l))
|
2435
2447
|
if (t_bins[i] <= t_off) || (q_h / (p_h * 3.412) < 1.0)
|
@@ -2603,7 +2615,7 @@ class HVAC
|
|
2603
2615
|
clg_ap = cooling_system.additional_properties
|
2604
2616
|
|
2605
2617
|
if ((cooling_system.is_a? HPXML::CoolingSystem) && ([HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type)) ||
|
2606
|
-
((cooling_system.is_a? HPXML::HeatPump) && (cooling_system.heat_pump_type
|
2618
|
+
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? cooling_system.heat_pump_type))
|
2607
2619
|
clg_ap.cool_rated_cfm_per_ton = [312.0] # medium speed
|
2608
2620
|
else
|
2609
2621
|
clg_ap.cool_rated_cfm_per_ton = []
|
@@ -2617,7 +2629,7 @@ class HVAC
|
|
2617
2629
|
htg_ap = heating_system.additional_properties
|
2618
2630
|
|
2619
2631
|
if (heating_system.is_a? HPXML::HeatingSystem) ||
|
2620
|
-
((heating_system.is_a? HPXML::HeatPump) && (heating_system.heat_pump_type
|
2632
|
+
((heating_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? heating_system.heat_pump_type))
|
2621
2633
|
htg_ap.heat_rated_cfm_per_ton = [350.0]
|
2622
2634
|
else
|
2623
2635
|
htg_ap.heat_rated_cfm_per_ton = []
|
@@ -2824,7 +2836,7 @@ class HVAC
|
|
2824
2836
|
if clg_ap.num_speeds == 1
|
2825
2837
|
clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.new(model, model.alwaysOnDiscreteSchedule, cap_ft_curve, cap_fff_curve, eir_ft_curve, eir_fff_curve, plf_fplr_curve)
|
2826
2838
|
# Coil COP calculation based on system type
|
2827
|
-
if [HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC, HPXML::HVACTypeHeatPumpPTHP].include? clg_type
|
2839
|
+
if [HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC, HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? clg_type
|
2828
2840
|
if cooling_system.cooling_efficiency_ceer.nil?
|
2829
2841
|
ceer = calc_ceer_from_eer(cooling_system)
|
2830
2842
|
else
|
@@ -2876,12 +2888,6 @@ class HVAC
|
|
2876
2888
|
def self.create_dx_heating_coil(model, obj_name, heating_system)
|
2877
2889
|
htg_ap = heating_system.additional_properties
|
2878
2890
|
|
2879
|
-
if heating_system.is_a? HPXML::HeatingSystem
|
2880
|
-
htg_type = heating_system.heating_system_type
|
2881
|
-
elsif heating_system.is_a? HPXML::HeatPump
|
2882
|
-
htg_type = heating_system.heat_pump_type
|
2883
|
-
end
|
2884
|
-
|
2885
2891
|
if htg_ap.num_speeds > 1
|
2886
2892
|
constant_biquadratic = create_curve_biquadratic_constant(model)
|
2887
2893
|
end
|
@@ -2901,7 +2907,7 @@ class HVAC
|
|
2901
2907
|
htg_coil = OpenStudio::Model::CoilHeatingDXSingleSpeed.new(model, model.alwaysOnDiscreteSchedule, cap_ft_curve, cap_fff_curve, eir_ft_curve, eir_fff_curve, plf_fplr_curve)
|
2902
2908
|
if heating_system.heating_efficiency_cop.nil?
|
2903
2909
|
htg_coil.setRatedCOP(1.0 / htg_ap.heat_rated_eirs[i])
|
2904
|
-
else # PTHP
|
2910
|
+
else # PTHP or room heat pump
|
2905
2911
|
htg_coil.setRatedCOP(heating_system.heating_efficiency_cop)
|
2906
2912
|
end
|
2907
2913
|
htg_coil.setRatedTotalHeatingCapacity(UnitConversions.convert(heating_system.heating_capacity, 'Btu/hr', 'W'))
|
@@ -2943,7 +2949,7 @@ class HVAC
|
|
2943
2949
|
clg_ap = cooling_system.additional_properties
|
2944
2950
|
|
2945
2951
|
clg_ap.cool_rated_eirs = []
|
2946
|
-
|
2952
|
+
for speed in 0..clg_ap.num_speeds - 1
|
2947
2953
|
clg_ap.cool_rated_eirs << calc_eir_from_eer(clg_ap.cool_eers[speed], clg_ap.fan_power_rated)
|
2948
2954
|
end
|
2949
2955
|
end
|
@@ -2952,7 +2958,7 @@ class HVAC
|
|
2952
2958
|
htg_ap = heating_system.additional_properties
|
2953
2959
|
|
2954
2960
|
htg_ap.heat_rated_eirs = []
|
2955
|
-
|
2961
|
+
for speed in 0..htg_ap.num_speeds - 1
|
2956
2962
|
htg_ap.heat_rated_eirs << calc_eir_from_cop(htg_ap.heat_cops[speed], htg_ap.fan_power_rated)
|
2957
2963
|
end
|
2958
2964
|
end
|
@@ -2962,11 +2968,11 @@ class HVAC
|
|
2962
2968
|
|
2963
2969
|
# Convert SHRs from net to gross.
|
2964
2970
|
if ((cooling_system.is_a? HPXML::CoolingSystem) && ([HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type)) ||
|
2965
|
-
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP].include? cooling_system.heat_pump_type))
|
2971
|
+
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? cooling_system.heat_pump_type))
|
2966
2972
|
clg_ap.cool_rated_shrs_gross = [cooling_system.cooling_shr] # We don't model the fan separately, so set gross == net
|
2967
2973
|
else
|
2968
2974
|
clg_ap.cool_rated_shrs_gross = []
|
2969
|
-
|
2975
|
+
for speed in 0..clg_ap.num_speeds - 1
|
2970
2976
|
qtot_net_nominal = 12000.0
|
2971
2977
|
qsens_net_nominal = qtot_net_nominal * clg_ap.cool_rated_shrs_net[speed]
|
2972
2978
|
qtot_gross_nominal = qtot_net_nominal + UnitConversions.convert(clg_ap.cool_rated_cfm_per_ton[speed] * clg_ap.fan_power_rated, 'Wh', 'Btu')
|
@@ -2992,7 +2998,7 @@ class HVAC
|
|
2992
2998
|
|
2993
2999
|
# Degradation coefficient for cooling
|
2994
3000
|
if ((cooling_system.is_a? HPXML::CoolingSystem) && ([HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type)) ||
|
2995
|
-
((cooling_system.is_a? HPXML::HeatPump) && (cooling_system.heat_pump_type
|
3001
|
+
((cooling_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? cooling_system.heat_pump_type))
|
2996
3002
|
clg_ap.cool_c_d = 0.22
|
2997
3003
|
elsif num_speeds == 1
|
2998
3004
|
if cooling_system.cooling_efficiency_seer < 13.0
|
@@ -3014,7 +3020,7 @@ class HVAC
|
|
3014
3020
|
htg_ap = heating_system.additional_properties
|
3015
3021
|
|
3016
3022
|
# Degradation coefficient for heating
|
3017
|
-
if (heating_system.is_a? HPXML::HeatPump) && (heating_system.heat_pump_type
|
3023
|
+
if (heating_system.is_a? HPXML::HeatPump) && ([HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? heating_system.heat_pump_type)
|
3018
3024
|
htg_ap.heat_c_d = 0.22
|
3019
3025
|
elsif num_speeds == 1
|
3020
3026
|
if heating_system.heating_efficiency_hspf < 7.0
|
@@ -3046,13 +3052,12 @@ class HVAC
|
|
3046
3052
|
hvac_ap.fan_power_rated = hvac_system.fan_watts_per_cfm # W/cfm
|
3047
3053
|
else
|
3048
3054
|
# Based on ASHRAE 1449-RP and recommended by Hugh Henderson
|
3049
|
-
|
3050
|
-
if seer <= 14
|
3055
|
+
if hvac_system.cooling_efficiency_seer <= 14
|
3051
3056
|
hvac_ap.fan_power_rated = 0.25 # W/cfm
|
3052
|
-
elsif
|
3057
|
+
elsif hvac_system.cooling_efficiency_seer >= 16
|
3053
3058
|
hvac_ap.fan_power_rated = 0.18 # W/cfm
|
3054
3059
|
else
|
3055
|
-
hvac_ap.fan_power_rated = 0.25 + (0.18 - 0.25) * (
|
3060
|
+
hvac_ap.fan_power_rated = 0.25 + (0.18 - 0.25) * (hvac_system.cooling_efficiency_seer - 14.0) / 2.0 # W/cfm
|
3056
3061
|
end
|
3057
3062
|
end
|
3058
3063
|
end
|
@@ -3092,7 +3097,7 @@ class HVAC
|
|
3092
3097
|
hp_ap.cool_rated_cfm_per_ton = []
|
3093
3098
|
hp_ap.cool_rated_shrs_gross = []
|
3094
3099
|
|
3095
|
-
|
3100
|
+
for i in 0..num_speeds - 1
|
3096
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)
|
3097
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]
|
3098
3103
|
# Calculate the SHR for each speed. Use minimum value of 0.98 to prevent E+ bypass factor calculation errors
|
@@ -3111,7 +3116,7 @@ class HVAC
|
|
3111
3116
|
fan_powers_rated = []
|
3112
3117
|
eers_rated = []
|
3113
3118
|
|
3114
|
-
|
3119
|
+
for i in 0..num_speeds - 1
|
3115
3120
|
fan_powers_rated << clg_ap.fan_power_rated * fan_powers_norm[i]
|
3116
3121
|
eers_rated << UnitConversions.convert(cop_max_speed, 'W', 'Btu/hr') * cops_norm[i]
|
3117
3122
|
end
|
@@ -3126,9 +3131,9 @@ class HVAC
|
|
3126
3131
|
cvg = false
|
3127
3132
|
final_n = nil
|
3128
3133
|
|
3129
|
-
|
3134
|
+
for n in 1..itmax + 1
|
3130
3135
|
final_n = n
|
3131
|
-
|
3136
|
+
for i in 0..num_speeds - 1
|
3132
3137
|
eers_rated[i] = UnitConversions.convert(cop_max_speed, 'W', 'Btu/hr') * cops_norm[i]
|
3133
3138
|
end
|
3134
3139
|
|
@@ -3147,7 +3152,7 @@ class HVAC
|
|
3147
3152
|
|
3148
3153
|
clg_ap.cool_rated_eirs = []
|
3149
3154
|
|
3150
|
-
|
3155
|
+
for i in 0..num_speeds - 1
|
3151
3156
|
clg_ap.cool_rated_eirs << calc_eir_from_eer(UnitConversions.convert(cop_max_speed, 'W', 'Btu/hr') * cops_norm[i], fan_powers_rated[i])
|
3152
3157
|
end
|
3153
3158
|
end
|
@@ -3158,15 +3163,15 @@ class HVAC
|
|
3158
3163
|
# Down-select to speed indices
|
3159
3164
|
|
3160
3165
|
# Cooling
|
3161
|
-
hp_ap.cool_cap_ft_spec = hp_ap.cool_cap_ft_spec.select.with_index { |
|
3162
|
-
hp_ap.cool_eir_ft_spec = hp_ap.cool_eir_ft_spec.select.with_index { |
|
3163
|
-
hp_ap.cool_cap_fflow_spec = hp_ap.cool_cap_fflow_spec.select.with_index { |
|
3164
|
-
hp_ap.cool_eir_fflow_spec = hp_ap.cool_eir_fflow_spec.select.with_index { |
|
3165
|
-
hp_ap.cool_plf_fplr_spec = hp_ap.cool_plf_fplr_spec.select.with_index { |
|
3166
|
-
hp_ap.cool_rated_cfm_per_ton = hp_ap.cool_rated_cfm_per_ton.select.with_index { |
|
3167
|
-
hp_ap.cool_capacity_ratios = hp_ap.cool_capacity_ratios.select.with_index { |
|
3168
|
-
hp_ap.cool_rated_shrs_gross = hp_ap.cool_rated_shrs_gross.select.with_index { |
|
3169
|
-
hp_ap.cool_rated_eirs = hp_ap.cool_rated_eirs.select.with_index { |
|
3166
|
+
hp_ap.cool_cap_ft_spec = hp_ap.cool_cap_ft_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3167
|
+
hp_ap.cool_eir_ft_spec = hp_ap.cool_eir_ft_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3168
|
+
hp_ap.cool_cap_fflow_spec = hp_ap.cool_cap_fflow_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3169
|
+
hp_ap.cool_eir_fflow_spec = hp_ap.cool_eir_fflow_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3170
|
+
hp_ap.cool_plf_fplr_spec = hp_ap.cool_plf_fplr_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3171
|
+
hp_ap.cool_rated_cfm_per_ton = hp_ap.cool_rated_cfm_per_ton.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3172
|
+
hp_ap.cool_capacity_ratios = hp_ap.cool_capacity_ratios.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3173
|
+
hp_ap.cool_rated_shrs_gross = hp_ap.cool_rated_shrs_gross.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3174
|
+
hp_ap.cool_rated_eirs = hp_ap.cool_rated_eirs.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3170
3175
|
hp_ap.cool_fan_speed_ratios = []
|
3171
3176
|
for i in 0..(hp_ap.speed_indices.size - 1)
|
3172
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])
|
@@ -3174,14 +3179,14 @@ class HVAC
|
|
3174
3179
|
|
3175
3180
|
if heat_pump.is_a? HPXML::HeatPump # Skip for mini-split air conditioner
|
3176
3181
|
# Heating
|
3177
|
-
hp_ap.heat_eir_ft_spec = hp_ap.heat_eir_ft_spec.select.with_index { |
|
3178
|
-
hp_ap.heat_cap_fflow_spec = hp_ap.heat_cap_fflow_spec.select.with_index { |
|
3179
|
-
hp_ap.heat_eir_fflow_spec = hp_ap.heat_eir_fflow_spec.select.with_index { |
|
3180
|
-
hp_ap.heat_cap_ft_spec = hp_ap.heat_cap_ft_spec.select.with_index { |
|
3181
|
-
hp_ap.heat_plf_fplr_spec = hp_ap.heat_plf_fplr_spec.select.with_index { |
|
3182
|
-
hp_ap.heat_rated_cfm_per_ton = hp_ap.heat_rated_cfm_per_ton.select.with_index { |
|
3183
|
-
hp_ap.heat_capacity_ratios = hp_ap.heat_capacity_ratios.select.with_index { |
|
3184
|
-
hp_ap.heat_rated_eirs = hp_ap.heat_rated_eirs.select.with_index { |
|
3182
|
+
hp_ap.heat_eir_ft_spec = hp_ap.heat_eir_ft_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3183
|
+
hp_ap.heat_cap_fflow_spec = hp_ap.heat_cap_fflow_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3184
|
+
hp_ap.heat_eir_fflow_spec = hp_ap.heat_eir_fflow_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3185
|
+
hp_ap.heat_cap_ft_spec = hp_ap.heat_cap_ft_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3186
|
+
hp_ap.heat_plf_fplr_spec = hp_ap.heat_plf_fplr_spec.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3187
|
+
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
|
+
hp_ap.heat_capacity_ratios = hp_ap.heat_capacity_ratios.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3189
|
+
hp_ap.heat_rated_eirs = hp_ap.heat_rated_eirs.select.with_index { |_x, i| hp_ap.speed_indices.include? i }
|
3185
3190
|
hp_ap.heat_fan_speed_ratios = []
|
3186
3191
|
for i in 0..(hp_ap.speed_indices.size - 1)
|
3187
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])
|
@@ -3267,24 +3272,24 @@ class HVAC
|
|
3267
3272
|
t_bins = [67.0, 72.0, 77.0, 82.0, 87.0, 92.0, 97.0, 102.0]
|
3268
3273
|
frac_hours = [0.214, 0.231, 0.216, 0.161, 0.104, 0.052, 0.018, 0.004]
|
3269
3274
|
|
3270
|
-
|
3271
|
-
bL = ((t_bins[
|
3272
|
-
q_k1 = q_F1_net + (q_B1_net - q_F1_net) / (82.0 - 67.0) * (t_bins[
|
3273
|
-
p_k1 = p_F1 + (p_B1 - p_F1) / (82.0 - 67.0) * (t_bins[
|
3274
|
-
q_k2 = q_B2_net + (q_A2_net - q_B2_net) / (95.0 - 82.0) * (t_bins[
|
3275
|
-
p_k2 = p_B2 + (p_A2 - p_B2) / (95.0 - 82.0) * (t_bins[
|
3275
|
+
for i in 0..7
|
3276
|
+
bL = ((t_bins[i] - 65.0) / (95.0 - 65.0)) * (q_A2_net / 1.1)
|
3277
|
+
q_k1 = q_F1_net + (q_B1_net - q_F1_net) / (82.0 - 67.0) * (t_bins[i] - 67.0)
|
3278
|
+
p_k1 = p_F1 + (p_B1 - p_F1) / (82.0 - 67.0) * (t_bins[i] - 67)
|
3279
|
+
q_k2 = q_B2_net + (q_A2_net - q_B2_net) / (95.0 - 82.0) * (t_bins[i] - 82.0)
|
3280
|
+
p_k2 = p_B2 + (p_A2 - p_B2) / (95.0 - 82.0) * (t_bins[i] - 82.0)
|
3276
3281
|
|
3277
3282
|
if bL <= q_k1
|
3278
3283
|
x_k1 = bL / q_k1
|
3279
|
-
q_Tj_N = x_k1 * q_k1 * frac_hours[
|
3280
|
-
e_Tj_N = x_k1 * p_k1 * frac_hours[
|
3284
|
+
q_Tj_N = x_k1 * q_k1 * frac_hours[i]
|
3285
|
+
e_Tj_N = x_k1 * p_k1 * frac_hours[i] / (1 - c_d * (1 - x_k1))
|
3281
3286
|
elsif (q_k1 < bL) && (bL <= q_k2)
|
3282
|
-
q_Tj_N = bL * frac_hours[
|
3283
|
-
eer_T_j = a + b * t_bins[
|
3287
|
+
q_Tj_N = bL * frac_hours[i]
|
3288
|
+
eer_T_j = a + b * t_bins[i] + c * t_bins[i]**2
|
3284
3289
|
e_Tj_N = q_Tj_N / eer_T_j
|
3285
3290
|
else
|
3286
|
-
q_Tj_N = frac_hours[
|
3287
|
-
e_Tj_N = frac_hours[
|
3291
|
+
q_Tj_N = frac_hours[i] * q_k2
|
3292
|
+
e_Tj_N = frac_hours[i] * p_k2
|
3288
3293
|
end
|
3289
3294
|
|
3290
3295
|
q_tot += q_Tj_N
|
@@ -3301,7 +3306,7 @@ class HVAC
|
|
3301
3306
|
hp_ap.heat_capacity_ratios = []
|
3302
3307
|
hp_ap.heat_rated_cfm_per_ton = []
|
3303
3308
|
|
3304
|
-
|
3309
|
+
for i in 0..num_speeds - 1
|
3305
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)
|
3306
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]
|
3307
3312
|
end
|
@@ -3318,14 +3323,14 @@ class HVAC
|
|
3318
3323
|
fan_powers_rated = []
|
3319
3324
|
cops_rated = []
|
3320
3325
|
|
3321
|
-
|
3326
|
+
for i in 0..num_speeds - 1
|
3322
3327
|
fan_powers_rated << hp_ap.fan_power_rated * fan_powers_norm[i]
|
3323
3328
|
cops_rated << cop_max_speed * cops_norm[i]
|
3324
3329
|
end
|
3325
3330
|
|
3326
3331
|
cop_max_speed_1 = cop_max_speed
|
3327
3332
|
cop_max_speed_2 = cop_max_speed
|
3328
|
-
error = heat_pump.heating_efficiency_hspf - calc_mshp_hspf(cops_rated, hp_ap.heat_c_d, hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, fan_powers_rated, hp_ap.
|
3333
|
+
error = heat_pump.heating_efficiency_hspf - calc_mshp_hspf(cops_rated, hp_ap.heat_c_d, hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, fan_powers_rated, hp_ap.heat_eir_ft_spec, hp_ap.heat_cap_ft_spec)
|
3329
3334
|
|
3330
3335
|
error1 = error
|
3331
3336
|
error2 = error
|
@@ -3334,13 +3339,13 @@ class HVAC
|
|
3334
3339
|
cvg = false
|
3335
3340
|
final_n = nil
|
3336
3341
|
|
3337
|
-
|
3342
|
+
for n in 1..itmax
|
3338
3343
|
final_n = n
|
3339
|
-
|
3344
|
+
for i in 0..num_speeds - 1
|
3340
3345
|
cops_rated[i] = cop_max_speed * cops_norm[i]
|
3341
3346
|
end
|
3342
3347
|
|
3343
|
-
error = heat_pump.heating_efficiency_hspf - calc_mshp_hspf(cops_rated, hp_ap.heat_c_d, hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, fan_powers_rated, hp_ap.
|
3348
|
+
error = heat_pump.heating_efficiency_hspf - calc_mshp_hspf(cops_rated, hp_ap.heat_c_d, hp_ap.heat_capacity_ratios, hp_ap.heat_rated_cfm_per_ton, fan_powers_rated, hp_ap.heat_eir_ft_spec, hp_ap.heat_cap_ft_spec)
|
3344
3349
|
|
3345
3350
|
cop_max_speed, cvg, cop_max_speed_1, error1, cop_max_speed_2, error2 = MathTools.Iterate(cop_max_speed, error, cop_max_speed_1, error1, cop_max_speed_2, error2, n, cvg)
|
3346
3351
|
|
@@ -3354,7 +3359,7 @@ class HVAC
|
|
3354
3359
|
end
|
3355
3360
|
|
3356
3361
|
hp_ap.heat_rated_eirs = []
|
3357
|
-
|
3362
|
+
for i in 0..num_speeds - 1
|
3358
3363
|
hp_ap.heat_rated_eirs << calc_eir_from_cop(cop_max_speed * cops_norm[i], fan_powers_rated[i])
|
3359
3364
|
end
|
3360
3365
|
end
|
@@ -3371,7 +3376,6 @@ class HVAC
|
|
3371
3376
|
else
|
3372
3377
|
hp_ap.design_hw = [35.0, weather.design.HeatingDrybulb + 35.0, weather.data.AnnualAvgDrybulb - 10.0].min # Temperature of fluid entering indoor coil, use 35F as upper bound
|
3373
3378
|
end
|
3374
|
-
hp_ap.ground_conductivity = 0.6 # Btu/h-ft-R
|
3375
3379
|
hp_ap.ground_diffusivity = 0.0208
|
3376
3380
|
hp_ap.grout_conductivity = 0.4 # Btu/h-ft-R
|
3377
3381
|
hp_ap.bore_diameter = 5.0 # in
|
@@ -3404,7 +3408,7 @@ class HVAC
|
|
3404
3408
|
hp_ap.shank_spacing = hp_ap.u_tube_spacing + hp_ap.pipe_od # Distance from center of pipe to center of pipe
|
3405
3409
|
end
|
3406
3410
|
|
3407
|
-
def self.calc_mshp_hspf(cop_47, c_d, capacity_ratio, cfm_tons, fan_power_rated,
|
3411
|
+
def self.calc_mshp_hspf(cop_47, c_d, capacity_ratio, cfm_tons, fan_power_rated, heat_eir_ft_spec, heat_cap_ft_spec)
|
3408
3412
|
n_max = (cop_47.length - 1.0) #-3 # Don't use max speed; FIXME: this is different than calc_mshp_seer?
|
3409
3413
|
n_min = 0
|
3410
3414
|
n_int = (n_min + (n_max - n_min) / 3.0).ceil.to_i
|
@@ -3492,23 +3496,23 @@ class HVAC
|
|
3492
3496
|
etot = 0
|
3493
3497
|
bLtot = 0
|
3494
3498
|
|
3495
|
-
|
3496
|
-
bL = ((65.0 - t_bins[
|
3499
|
+
for i in 0..14
|
3500
|
+
bL = ((65.0 - t_bins[i]) / (65.0 - t_OD)) * 0.77 * dHR
|
3497
3501
|
|
3498
|
-
q_1 = q_H1_1_net + (q_H0_1_net - q_H1_1_net) / (62.0 - 47.0) * (t_bins[
|
3499
|
-
p_1 = p_H1_1 + (p_H0_1 - p_H1_1) / (62.0 - 47.0) * (t_bins[
|
3502
|
+
q_1 = q_H1_1_net + (q_H0_1_net - q_H1_1_net) / (62.0 - 47.0) * (t_bins[i] - 47.0)
|
3503
|
+
p_1 = p_H1_1 + (p_H0_1 - p_H1_1) / (62.0 - 47.0) * (t_bins[i] - 47.0)
|
3500
3504
|
|
3501
|
-
if (t_bins[
|
3502
|
-
q_2 = q_H3_2_net + (q_H1_2_net - q_H3_2_net) * (t_bins[
|
3503
|
-
p_2 = p_H3_2 + (p_H1_2 - p_H3_2) * (t_bins[
|
3505
|
+
if (t_bins[i] <= 17.0) || (t_bins[i] >= 45.0)
|
3506
|
+
q_2 = q_H3_2_net + (q_H1_2_net - q_H3_2_net) * (t_bins[i] - 17.0) / (47.0 - 17.0)
|
3507
|
+
p_2 = p_H3_2 + (p_H1_2 - p_H3_2) * (t_bins[i] - 17.0) / (47.0 - 17.0)
|
3504
3508
|
else
|
3505
|
-
q_2 = q_H3_2_net + (q_H35_2 - q_H3_2_net) * (t_bins[
|
3506
|
-
p_2 = p_H3_2 + (p_H35_2 - p_H3_2) * (t_bins[
|
3509
|
+
q_2 = q_H3_2_net + (q_H35_2 - q_H3_2_net) * (t_bins[i] - 17) / (35.0 - 17.0)
|
3510
|
+
p_2 = p_H3_2 + (p_H35_2 - p_H3_2) * (t_bins[i] - 17.0) / (35.0 - 17.0)
|
3507
3511
|
end
|
3508
3512
|
|
3509
|
-
if t_bins[
|
3513
|
+
if t_bins[i] <= t_off
|
3510
3514
|
delta = 0
|
3511
|
-
elsif t_bins[
|
3515
|
+
elsif t_bins[i] >= t_on
|
3512
3516
|
delta = 1.0
|
3513
3517
|
else
|
3514
3518
|
delta = 0.5
|
@@ -3516,15 +3520,15 @@ class HVAC
|
|
3516
3520
|
|
3517
3521
|
if bL <= q_1
|
3518
3522
|
x_1 = bL / q_1
|
3519
|
-
e_Tj_n = delta * x_1 * p_1 * frac_hours[
|
3523
|
+
e_Tj_n = delta * x_1 * p_1 * frac_hours[i] / (1.0 - c_d * (1.0 - x_1))
|
3520
3524
|
elsif (q_1 < bL) && (bL <= q_2)
|
3521
|
-
cop_T_j = a + b * t_bins[
|
3522
|
-
e_Tj_n = delta * frac_hours[
|
3525
|
+
cop_T_j = a + b * t_bins[i] + c * t_bins[i]**2
|
3526
|
+
e_Tj_n = delta * frac_hours[i] * bL / cop_T_j + (1.0 - delta) * bL * (frac_hours[i])
|
3523
3527
|
else
|
3524
|
-
e_Tj_n = delta * frac_hours[
|
3528
|
+
e_Tj_n = delta * frac_hours[i] * p_2 + frac_hours[i] * (bL - delta * q_2)
|
3525
3529
|
end
|
3526
3530
|
|
3527
|
-
bLtot += frac_hours[
|
3531
|
+
bLtot += frac_hours[i] * bL
|
3528
3532
|
etot += e_Tj_n
|
3529
3533
|
end
|
3530
3534
|
|
@@ -3577,7 +3581,7 @@ class HVAC
|
|
3577
3581
|
hvac_ap.crankcase_kw = 0.0
|
3578
3582
|
hvac_ap.crankcase_temp = nil
|
3579
3583
|
else
|
3580
|
-
if [HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypePTAC, HPXML::HVACTypeRoomAirConditioner].include? clg_sys_type
|
3584
|
+
if [HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom, HPXML::HVACTypePTAC, HPXML::HVACTypeRoomAirConditioner].include? clg_sys_type
|
3581
3585
|
hvac_ap.crankcase_kw = 0.0
|
3582
3586
|
else
|
3583
3587
|
hvac_ap.crankcase_kw = 0.05 * hvac_system.fraction_cool_load_served # From RESNET Publication No. 002-2017
|
@@ -3653,13 +3657,13 @@ class HVAC
|
|
3653
3657
|
|
3654
3658
|
def self.get_charge_fault_heating_coeff(f_chg)
|
3655
3659
|
if f_chg <= 0
|
3656
|
-
qgr_values = [-0.0338595, 0.0, 0.0202827, -2.6226343] # Add a zero term to combine cooling and heating
|
3657
|
-
p_values = [0.0615649, 0.0, 0.0044554, -0.2598507] # Add a zero term to combine cooling and heating
|
3660
|
+
qgr_values = [-0.0338595, 0.0, 0.0202827, -2.6226343] # Add a zero term to combine cooling and heating calculation
|
3661
|
+
p_values = [0.0615649, 0.0, 0.0044554, -0.2598507] # Add a zero term to combine cooling and heating calculation
|
3658
3662
|
else
|
3659
|
-
qgr_values = [-0.0029514, 0.0, 0.0007379, -0.0064112] # Add a zero term to combine cooling and heating
|
3660
|
-
p_values = [-0.0594134, 0.0, 0.0159205, 1.8872153] # Add a zero term to combine cooling and heating
|
3663
|
+
qgr_values = [-0.0029514, 0.0, 0.0007379, -0.0064112] # Add a zero term to combine cooling and heating calculation
|
3664
|
+
p_values = [-0.0594134, 0.0, 0.0159205, 1.8872153] # Add a zero term to combine cooling and heating calculation
|
3661
3665
|
end
|
3662
|
-
ff_chg_values = [0.0, 8.33] # Add a zero term to combine cooling and heating
|
3666
|
+
ff_chg_values = [0.0, 8.33] # Add a zero term to combine cooling and heating calculation
|
3663
3667
|
return qgr_values, p_values, ff_chg_values
|
3664
3668
|
end
|
3665
3669
|
|
@@ -4017,8 +4021,17 @@ class HVAC
|
|
4017
4021
|
# Convert "fan coil" air distribution system to "regular velocity"
|
4018
4022
|
if distribution_system.hvac_systems.size > 1
|
4019
4023
|
# Has attached heating system, so create a copy specifically for the cooling system
|
4020
|
-
hpxml.hvac_distributions
|
4021
|
-
|
4024
|
+
hpxml.hvac_distributions.add(id: "#{distribution_system.id}_#{cooling_system.id}",
|
4025
|
+
distribution_system_type: distribution_system.distribution_system_type,
|
4026
|
+
air_type: distribution_system.air_type,
|
4027
|
+
number_of_return_registers: distribution_system.number_of_return_registers,
|
4028
|
+
conditioned_floor_area_served: distribution_system.conditioned_floor_area_served)
|
4029
|
+
distribution_system.duct_leakage_measurements.each do |lm|
|
4030
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << lm.dup
|
4031
|
+
end
|
4032
|
+
distribution_system.ducts.each do |d|
|
4033
|
+
hpxml.hvac_distributions[-1].ducts << d.dup
|
4034
|
+
end
|
4022
4035
|
cooling_system.distribution_system_idref = hpxml.hvac_distributions[-1].id
|
4023
4036
|
end
|
4024
4037
|
hpxml.hvac_distributions[-1].air_type = HPXML::AirTypeRegularVelocity
|
@@ -4036,6 +4049,9 @@ class HVAC
|
|
4036
4049
|
duct_leakage_value: 0,
|
4037
4050
|
duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
|
4038
4051
|
end
|
4052
|
+
hpxml.hvac_distributions[-1].ducts.each do |d|
|
4053
|
+
d.id = "#{d.id}_#{cooling_system.id}"
|
4054
|
+
end
|
4039
4055
|
end
|
4040
4056
|
end
|
4041
4057
|
|
@@ -4049,7 +4065,6 @@ class HVAC
|
|
4049
4065
|
|
4050
4066
|
applied = true
|
4051
4067
|
distribution_system = heating_system.distribution_system
|
4052
|
-
distribution_type = distribution_system.distribution_system_type
|
4053
4068
|
hydronic_type = distribution_system.hydronic_type
|
4054
4069
|
|
4055
4070
|
if heating_system.heating_system_type == HPXML::HVACTypeBoiler && hydronic_type.to_s == HPXML::HydronicTypeWaterLoop
|
@@ -4099,11 +4114,11 @@ class HVAC
|
|
4099
4114
|
end
|
4100
4115
|
|
4101
4116
|
def self.is_attached_heating_and_cooling_systems(hpxml, heating_system, cooling_system)
|
4102
|
-
# Now only allows furnace+AC
|
4103
|
-
if not (hpxml.heating_systems.include?
|
4117
|
+
# Now only allows furnace+AC
|
4118
|
+
if not ((hpxml.heating_systems.include? heating_system) && (hpxml.cooling_systems.include? cooling_system))
|
4104
4119
|
return false
|
4105
4120
|
end
|
4106
|
-
if not (
|
4121
|
+
if not (heating_system.heating_system_type == HPXML::HVACTypeFurnace && cooling_system.cooling_system_type == HPXML::HVACTypeCentralAirConditioner)
|
4107
4122
|
return false
|
4108
4123
|
end
|
4109
4124
|
|
@@ -4190,44 +4205,25 @@ class HVAC
|
|
4190
4205
|
return { rh_setpoint: rh_setpoint, ief: ief }
|
4191
4206
|
end
|
4192
4207
|
|
4193
|
-
def self.
|
4194
|
-
|
4195
|
-
|
4196
|
-
|
4197
|
-
|
4198
|
-
|
4199
|
-
|
4200
|
-
|
4201
|
-
HPXML::HVACTypePTAC => 'packaged_dx',
|
4202
|
-
HPXML::HVACTypeHeatPumpAirToAir => 'heat_pump',
|
4203
|
-
HPXML::HVACTypeFurnace => 'central_furnace',
|
4204
|
-
HPXML::HVACTypeWallFurnace => 'wall_furnace',
|
4205
|
-
HPXML::HVACTypeFloorFurnace => 'wall_furnace', # floor furnaces mapped to wall furnaces
|
4206
|
-
HPXML::HVACTypeBoiler => 'boiler' }[hvac_type]
|
4207
|
-
|
4208
|
-
fuel_primary_id = { EPlus::FuelTypeElectricity => 'electric',
|
4209
|
-
EPlus::FuelTypeNaturalGas => 'natural_gas',
|
4210
|
-
EPlus::FuelTypeOil => 'fuel_oil',
|
4211
|
-
EPlus::FuelTypeCoal => 'fuel_oil', # assumption
|
4212
|
-
EPlus::FuelTypeWoodCord => 'fuel_oil', # assumption
|
4213
|
-
EPlus::FuelTypeWoodPellets => 'fuel_oil', # assumption
|
4214
|
-
EPlus::FuelTypePropane => 'lpg' }[EPlus.fuel_type(fuel_type)]
|
4215
|
-
|
4216
|
-
metric_id = units.downcase
|
4217
|
-
value = nil
|
4218
|
-
lookup_year = 0
|
4219
|
-
CSV.foreach(File.join(File.dirname(__FILE__), 'data', 'hvac_equipment_efficiency.csv'), headers: true) do |row|
|
4220
|
-
next unless row['type_id'] == type_id
|
4221
|
-
next unless row['fuel_primary_id'] == fuel_primary_id
|
4222
|
-
next unless row['metric_id'] == metric_id
|
4223
|
-
|
4224
|
-
row_year = Integer(row['year'])
|
4225
|
-
if (row_year - year).abs <= (lookup_year - year).abs
|
4226
|
-
lookup_year = row_year
|
4227
|
-
value = Float(row['value'])
|
4228
|
-
end
|
4208
|
+
def self.calc_seer_from_seer2(seer2, is_ducted)
|
4209
|
+
# ANSI/RESNET/ICC 301 Table 4.4.4.1(1) SEER2/HSPF2 Conversion Factors
|
4210
|
+
# Note: There are less common system types (packaged, small duct high velocity,
|
4211
|
+
# and space-constrained) that we don't handle here.
|
4212
|
+
if is_ducted # Ducted split system
|
4213
|
+
return seer2 / 0.95
|
4214
|
+
else # Ductless systems
|
4215
|
+
return seer2 / 1.00
|
4229
4216
|
end
|
4217
|
+
end
|
4230
4218
|
|
4231
|
-
|
4219
|
+
def self.calc_hspf_from_hspf2(hspf2, is_ducted)
|
4220
|
+
# ANSI/RESNET/ICC 301 Table 4.4.4.1(1) SEER2/HSPF2 Conversion Factors
|
4221
|
+
# Note: There are less common system types (packaged, small duct high velocity,
|
4222
|
+
# and space-constrained) that we don't handle here.
|
4223
|
+
if is_ducted # Ducted split system
|
4224
|
+
return hspf2 / 0.85
|
4225
|
+
else # Ducted split system
|
4226
|
+
return hspf2 / 0.90
|
4227
|
+
end
|
4232
4228
|
end
|
4233
4229
|
end
|