urbanopt-cli 0.8.2 → 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 +21 -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 +601 -101
- data/scripts/setup-env.bat +6 -7
- 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
@@ -7,32 +7,14 @@ require 'openstudio'
|
|
7
7
|
require 'pathname'
|
8
8
|
require 'csv'
|
9
9
|
require 'oga'
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
require_relative '../HPXMLtoOpenStudio/resources/hpxml'
|
19
|
-
require_relative '../HPXMLtoOpenStudio/resources/hvac'
|
20
|
-
require_relative '../HPXMLtoOpenStudio/resources/hvac_sizing'
|
21
|
-
require_relative '../HPXMLtoOpenStudio/resources/lighting'
|
22
|
-
require_relative '../HPXMLtoOpenStudio/resources/location'
|
23
|
-
require_relative '../HPXMLtoOpenStudio/resources/materials'
|
24
|
-
require_relative '../HPXMLtoOpenStudio/resources/misc_loads'
|
25
|
-
require_relative '../HPXMLtoOpenStudio/resources/meta_measure'
|
26
|
-
require_relative '../HPXMLtoOpenStudio/resources/psychrometrics'
|
27
|
-
require_relative '../HPXMLtoOpenStudio/resources/pv'
|
28
|
-
require_relative '../HPXMLtoOpenStudio/resources/schedules'
|
29
|
-
require_relative '../HPXMLtoOpenStudio/resources/unit_conversions'
|
30
|
-
require_relative '../HPXMLtoOpenStudio/resources/util'
|
31
|
-
require_relative '../HPXMLtoOpenStudio/resources/validator'
|
32
|
-
require_relative '../HPXMLtoOpenStudio/resources/version'
|
33
|
-
require_relative '../HPXMLtoOpenStudio/resources/waterheater'
|
34
|
-
require_relative '../HPXMLtoOpenStudio/resources/weather'
|
35
|
-
require_relative '../HPXMLtoOpenStudio/resources/xmlhelper'
|
10
|
+
Dir["#{File.dirname(__FILE__)}/resources/*.rb"].each do |resource_file|
|
11
|
+
require resource_file
|
12
|
+
end
|
13
|
+
Dir["#{File.dirname(__FILE__)}/../HPXMLtoOpenStudio/resources/*.rb"].each do |resource_file|
|
14
|
+
next if resource_file.include? 'minitest_helper.rb'
|
15
|
+
|
16
|
+
require resource_file
|
17
|
+
end
|
36
18
|
|
37
19
|
# start the measure
|
38
20
|
class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
@@ -48,11 +30,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
48
30
|
|
49
31
|
# human readable description of modeling approach
|
50
32
|
def modeler_description
|
51
|
-
return ''
|
33
|
+
return "Note: OS-HPXML default values can be found in the OS-HPXML documentation or can be seen by using the 'apply_defaults' argument."
|
52
34
|
end
|
53
35
|
|
54
36
|
# define the arguments that the user will input
|
55
|
-
def arguments(model)
|
37
|
+
def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
|
56
38
|
args = OpenStudio::Measure::OSArgumentVector.new
|
57
39
|
|
58
40
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('hpxml_path', true)
|
@@ -76,7 +58,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
76
58
|
|
77
59
|
arg = OpenStudio::Measure::OSArgument.makeChoiceArgument('occupancy_calculation_type', occupancy_calculation_type_choices, false)
|
78
60
|
arg.setDisplayName('Occupancy Calculation Type')
|
79
|
-
arg.setDescription("The type of occupancy calculation type. If '#{HPXML::OccupancyCalculationTypeAsset}' is chosen, various end uses (e.g., clothes washer) are calculated using number of bedrooms and/or conditioned floor area. If '#{HPXML::OccupancyCalculationTypeOperational}' is chosen, end uses based on number of bedrooms are adjusted for the number of occupants.
|
61
|
+
arg.setDescription("The type of occupancy calculation type. If '#{HPXML::OccupancyCalculationTypeAsset}' is chosen, various end uses (e.g., clothes washer) are calculated using number of bedrooms and/or conditioned floor area. If '#{HPXML::OccupancyCalculationTypeOperational}' is chosen, end uses based on number of bedrooms are adjusted for the number of occupants. If not provided, the OS-HPXML default is used.")
|
80
62
|
args << arg
|
81
63
|
|
82
64
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_filepaths', false)
|
@@ -87,28 +69,33 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
87
69
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('simulation_control_timestep', false)
|
88
70
|
arg.setDisplayName('Simulation Control: Timestep')
|
89
71
|
arg.setUnits('min')
|
90
|
-
arg.setDescription('Value must be a divisor of 60.')
|
72
|
+
arg.setDescription('Value must be a divisor of 60. If not provided, the OS-HPXML default is used.')
|
91
73
|
args << arg
|
92
74
|
|
93
75
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('simulation_control_run_period', false)
|
94
76
|
arg.setDisplayName('Simulation Control: Run Period')
|
95
|
-
arg.setDescription('Enter a date like "Jan 1 - Dec 31".')
|
77
|
+
arg.setDescription('Enter a date like "Jan 1 - Dec 31". If not provided, the OS-HPXML default is used.')
|
96
78
|
args << arg
|
97
79
|
|
98
80
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('simulation_control_run_period_calendar_year', false)
|
99
81
|
arg.setDisplayName('Simulation Control: Run Period Calendar Year')
|
100
82
|
arg.setUnits('year')
|
101
|
-
arg.setDescription('This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file.')
|
83
|
+
arg.setDescription('This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file. If not provided, the OS-HPXML default is used.')
|
102
84
|
args << arg
|
103
85
|
|
104
86
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('simulation_control_daylight_saving_enabled', false)
|
105
87
|
arg.setDisplayName('Simulation Control: Daylight Saving Enabled')
|
106
|
-
arg.setDescription('Whether to use daylight saving.')
|
88
|
+
arg.setDescription('Whether to use daylight saving. If not provided, the OS-HPXML default is used.')
|
107
89
|
args << arg
|
108
90
|
|
109
91
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('simulation_control_daylight_saving_period', false)
|
110
92
|
arg.setDisplayName('Simulation Control: Daylight Saving Period')
|
111
|
-
arg.setDescription('Enter a date like "Mar 15 - Dec 15".')
|
93
|
+
arg.setDescription('Enter a date like "Mar 15 - Dec 15". If not provided, the OS-HPXML default is used.')
|
94
|
+
args << arg
|
95
|
+
|
96
|
+
arg = OpenStudio::Measure::OSArgument::makeStringArgument('simulation_control_temperature_capacitance_multiplier', false)
|
97
|
+
arg.setDisplayName('Simulation Control: Temperature Capacitance Multiplier')
|
98
|
+
arg.setDescription('Affects the transient calculation of indoor air temperatures. If not provided, the OS-HPXML default is used.')
|
112
99
|
args << arg
|
113
100
|
|
114
101
|
site_type_choices = OpenStudio::StringVector.new
|
@@ -118,19 +105,23 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
118
105
|
|
119
106
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('site_type', site_type_choices, false)
|
120
107
|
arg.setDisplayName('Site: Type')
|
121
|
-
arg.setDescription('The type of site.')
|
108
|
+
arg.setDescription('The type of site. If not provided, the OS-HPXML default is used.')
|
122
109
|
args << arg
|
123
110
|
|
124
111
|
site_shielding_of_home_choices = OpenStudio::StringVector.new
|
125
|
-
site_shielding_of_home_choices << Constants.Auto
|
126
112
|
site_shielding_of_home_choices << HPXML::ShieldingExposed
|
127
113
|
site_shielding_of_home_choices << HPXML::ShieldingNormal
|
128
114
|
site_shielding_of_home_choices << HPXML::ShieldingWellShielded
|
129
115
|
|
130
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('site_shielding_of_home', site_shielding_of_home_choices,
|
116
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('site_shielding_of_home', site_shielding_of_home_choices, false)
|
131
117
|
arg.setDisplayName('Site: Shielding of Home')
|
132
|
-
arg.setDescription(
|
133
|
-
arg
|
118
|
+
arg.setDescription('Presence of nearby buildings, trees, obstructions for infiltration model. If not provided, the OS-HPXML default is used.')
|
119
|
+
args << arg
|
120
|
+
|
121
|
+
arg = OpenStudio::Measure::OSArgument.makeDoubleArgument('site_ground_conductivity', false)
|
122
|
+
arg.setDisplayName('Site: Ground Conductivity')
|
123
|
+
arg.setDescription('Conductivity of the ground soil. If not provided, the OS-HPXML default is used.')
|
124
|
+
arg.setUnits('Btu/hr-ft-F')
|
134
125
|
args << arg
|
135
126
|
|
136
127
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('site_zip_code', false)
|
@@ -172,7 +163,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
172
163
|
|
173
164
|
arg = OpenStudio::Measure::OSArgument.makeIntegerArgument('year_built', false)
|
174
165
|
arg.setDisplayName('Building Construction: Year Built')
|
175
|
-
arg.setDescription('The year the building was built')
|
166
|
+
arg.setDescription('The year the building was built.')
|
176
167
|
args << arg
|
177
168
|
|
178
169
|
unit_type_choices = OpenStudio::StringVector.new
|
@@ -250,24 +241,22 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
250
241
|
arg.setDefaultValue(3)
|
251
242
|
args << arg
|
252
243
|
|
253
|
-
arg = OpenStudio::Measure::OSArgument::
|
244
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('geometry_unit_num_bathrooms', false)
|
254
245
|
arg.setDisplayName('Geometry: Unit Number of Bathrooms')
|
255
246
|
arg.setUnits('#')
|
256
|
-
arg.setDescription(
|
257
|
-
arg.setDefaultValue(Constants.Auto)
|
247
|
+
arg.setDescription('The number of bathrooms in the unit. If not provided, the OS-HPXML default is used.')
|
258
248
|
args << arg
|
259
249
|
|
260
|
-
arg = OpenStudio::Measure::OSArgument::
|
250
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_unit_num_occupants', false)
|
261
251
|
arg.setDisplayName('Geometry: Unit Number of Occupants')
|
262
252
|
arg.setUnits('#')
|
263
|
-
arg.setDescription("The number of occupants in the unit.
|
264
|
-
arg.setDefaultValue(Constants.Auto)
|
253
|
+
arg.setDescription("The number of occupants in the unit. If not provided, the OS-HPXML default is used. Required if Occupancy Calculation Type is '#{HPXML::OccupancyCalculationTypeOperational}'.")
|
265
254
|
args << arg
|
266
255
|
|
267
256
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('geometry_building_num_units', false)
|
268
257
|
arg.setDisplayName('Geometry: Building Number of Units')
|
269
258
|
arg.setUnits('#')
|
270
|
-
arg.setDescription("The number of units in the building.
|
259
|
+
arg.setDescription("The number of units in the building. Required for #{HPXML::ResidentialTypeSFA} and #{HPXML::ResidentialTypeApartment}s.")
|
271
260
|
args << arg
|
272
261
|
|
273
262
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_average_ceiling_height', true)
|
@@ -394,10 +383,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
394
383
|
arg.setDefaultValue(2.0)
|
395
384
|
args << arg
|
396
385
|
|
397
|
-
arg = OpenStudio::Measure::OSArgument::
|
386
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('geometry_has_flue_or_chimney', false)
|
398
387
|
arg.setDisplayName('Geometry: Has Flue or Chimney')
|
399
|
-
arg.setDescription(
|
400
|
-
arg.setDefaultValue(Constants.Auto)
|
388
|
+
arg.setDescription('Presence of flue or chimney for infiltration model. If not provided, the OS-HPXML default is used.')
|
401
389
|
args << arg
|
402
390
|
|
403
391
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_front_distance', true)
|
@@ -428,32 +416,28 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
428
416
|
arg.setDefaultValue(10.0)
|
429
417
|
args << arg
|
430
418
|
|
431
|
-
arg = OpenStudio::Measure::OSArgument::
|
419
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_front_height', false)
|
432
420
|
arg.setDisplayName('Neighbor: Front Height')
|
433
421
|
arg.setUnits('ft')
|
434
|
-
arg.setDescription(
|
435
|
-
arg.setDefaultValue(Constants.Auto)
|
422
|
+
arg.setDescription('The height of the neighboring building to the front. If not provided, the OS-HPXML default is used.')
|
436
423
|
args << arg
|
437
424
|
|
438
|
-
arg = OpenStudio::Measure::OSArgument::
|
425
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_back_height', false)
|
439
426
|
arg.setDisplayName('Neighbor: Back Height')
|
440
427
|
arg.setUnits('ft')
|
441
|
-
arg.setDescription(
|
442
|
-
arg.setDefaultValue(Constants.Auto)
|
428
|
+
arg.setDescription('The height of the neighboring building to the back. If not provided, the OS-HPXML default is used.')
|
443
429
|
args << arg
|
444
430
|
|
445
|
-
arg = OpenStudio::Measure::OSArgument::
|
431
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_left_height', false)
|
446
432
|
arg.setDisplayName('Neighbor: Left Height')
|
447
433
|
arg.setUnits('ft')
|
448
|
-
arg.setDescription(
|
449
|
-
arg.setDefaultValue(Constants.Auto)
|
434
|
+
arg.setDescription('The height of the neighboring building to the left. If not provided, the OS-HPXML default is used.')
|
450
435
|
args << arg
|
451
436
|
|
452
|
-
arg = OpenStudio::Measure::OSArgument::
|
437
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_right_height', false)
|
453
438
|
arg.setDisplayName('Neighbor: Right Height')
|
454
439
|
arg.setUnits('ft')
|
455
|
-
arg.setDescription(
|
456
|
-
arg.setDefaultValue(Constants.Auto)
|
440
|
+
arg.setDescription('The height of the neighboring building to the right. If not provided, the OS-HPXML default is used.')
|
457
441
|
args << arg
|
458
442
|
|
459
443
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('floor_over_foundation_assembly_r', true)
|
@@ -470,8 +454,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
470
454
|
arg.setDefaultValue(28.1)
|
471
455
|
args << arg
|
472
456
|
|
457
|
+
floor_type_choices = OpenStudio::StringVector.new
|
458
|
+
floor_type_choices << HPXML::FloorTypeWoodFrame
|
459
|
+
floor_type_choices << HPXML::FloorTypeSIP
|
460
|
+
floor_type_choices << HPXML::FloorTypeConcrete
|
461
|
+
floor_type_choices << HPXML::FloorTypeSteelFrame
|
462
|
+
|
463
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('floor_type', floor_type_choices, true)
|
464
|
+
arg.setDisplayName('Floor: Type')
|
465
|
+
arg.setDescription('The type of floors.')
|
466
|
+
arg.setDefaultValue(HPXML::FloorTypeWoodFrame)
|
467
|
+
args << arg
|
468
|
+
|
473
469
|
foundation_wall_type_choices = OpenStudio::StringVector.new
|
474
|
-
foundation_wall_type_choices << Constants.Auto
|
475
470
|
foundation_wall_type_choices << HPXML::FoundationWallTypeSolidConcrete
|
476
471
|
foundation_wall_type_choices << HPXML::FoundationWallTypeConcreteBlock
|
477
472
|
foundation_wall_type_choices << HPXML::FoundationWallTypeConcreteBlockFoamCore
|
@@ -481,17 +476,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
481
476
|
foundation_wall_type_choices << HPXML::FoundationWallTypeDoubleBrick
|
482
477
|
foundation_wall_type_choices << HPXML::FoundationWallTypeWood
|
483
478
|
|
484
|
-
arg = OpenStudio::Measure::OSArgument::
|
479
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('foundation_wall_type', foundation_wall_type_choices, false)
|
485
480
|
arg.setDisplayName('Foundation Wall: Type')
|
486
|
-
arg.setDescription('The material type of the foundation wall.')
|
487
|
-
arg.setDefaultValue(Constants.Auto)
|
481
|
+
arg.setDescription('The material type of the foundation wall. If not provided, the OS-HPXML default is used.')
|
488
482
|
args << arg
|
489
483
|
|
490
|
-
arg = OpenStudio::Measure::OSArgument::
|
484
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_thickness', false)
|
491
485
|
arg.setDisplayName('Foundation Wall: Thickness')
|
492
486
|
arg.setUnits('in')
|
493
|
-
arg.setDescription('The thickness of the foundation wall.')
|
494
|
-
arg.setDefaultValue(Constants.Auto)
|
487
|
+
arg.setDescription('The thickness of the foundation wall. If not provided, the OS-HPXML default is used.')
|
495
488
|
args << arg
|
496
489
|
|
497
490
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_r', true)
|
@@ -512,30 +505,28 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
512
505
|
arg.setDefaultValue('exterior')
|
513
506
|
args << arg
|
514
507
|
|
515
|
-
arg = OpenStudio::Measure::OSArgument::
|
508
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_distance_to_top', false)
|
516
509
|
arg.setDisplayName('Foundation Wall: Insulation Distance To Top')
|
517
510
|
arg.setUnits('ft')
|
518
|
-
arg.setDescription(
|
519
|
-
arg.setDefaultValue(Constants.Auto)
|
511
|
+
arg.setDescription('The distance from the top of the foundation wall to the top of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default is used.')
|
520
512
|
args << arg
|
521
513
|
|
522
|
-
arg = OpenStudio::Measure::OSArgument::
|
514
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_distance_to_bottom', false)
|
523
515
|
arg.setDisplayName('Foundation Wall: Insulation Distance To Bottom')
|
524
516
|
arg.setUnits('ft')
|
525
|
-
arg.setDescription(
|
526
|
-
arg.setDefaultValue(Constants.Auto)
|
517
|
+
arg.setDescription('The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default is used.')
|
527
518
|
args << arg
|
528
519
|
|
529
520
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_assembly_r', false)
|
530
521
|
arg.setDisplayName('Foundation Wall: Assembly R-value')
|
531
522
|
arg.setUnits('h-ft^2-R/Btu')
|
532
|
-
arg.setDescription('Assembly R-value for the foundation walls. Only applies to basements/crawlspaces. If provided, overrides the previous foundation wall insulation inputs.')
|
523
|
+
arg.setDescription('Assembly R-value for the foundation walls. Only applies to basements/crawlspaces. If provided, overrides the previous foundation wall insulation inputs. If not provided, it is ignored.')
|
533
524
|
args << arg
|
534
525
|
|
535
526
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('rim_joist_assembly_r', false)
|
536
527
|
arg.setDisplayName('Rim Joist: Assembly R-value')
|
537
528
|
arg.setUnits('h-ft^2-R/Btu')
|
538
|
-
arg.setDescription('Assembly R-value for the rim joists. Only applies to basements/crawlspaces.')
|
529
|
+
arg.setDescription('Assembly R-value for the rim joists. Only applies to basements/crawlspaces. Required if a rim joist height is provided.')
|
539
530
|
args << arg
|
540
531
|
|
541
532
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_perimeter_insulation_r', true)
|
@@ -566,25 +557,22 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
566
557
|
arg.setDefaultValue(0)
|
567
558
|
args << arg
|
568
559
|
|
569
|
-
arg = OpenStudio::Measure::OSArgument::
|
560
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_thickness', false)
|
570
561
|
arg.setDisplayName('Slab: Thickness')
|
571
562
|
arg.setUnits('in')
|
572
|
-
arg.setDescription('The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab.')
|
573
|
-
arg.setDefaultValue(Constants.Auto)
|
563
|
+
arg.setDescription('The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab. If not provided, the OS-HPXML default is used.')
|
574
564
|
args << arg
|
575
565
|
|
576
|
-
arg = OpenStudio::Measure::OSArgument::
|
566
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_carpet_fraction', false)
|
577
567
|
arg.setDisplayName('Slab: Carpet Fraction')
|
578
568
|
arg.setUnits('Frac')
|
579
|
-
arg.setDescription('Fraction of the slab floor area that is carpeted.')
|
580
|
-
arg.setDefaultValue(Constants.Auto)
|
569
|
+
arg.setDescription('Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML default is used.')
|
581
570
|
args << arg
|
582
571
|
|
583
|
-
arg = OpenStudio::Measure::OSArgument::
|
572
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_carpet_r', false)
|
584
573
|
arg.setDisplayName('Slab: Carpet R-value')
|
585
574
|
arg.setUnits('h-ft^2-R/Btu')
|
586
|
-
arg.setDescription('R-value of the slab carpet.')
|
587
|
-
arg.setDefaultValue(Constants.Auto)
|
575
|
+
arg.setDescription('R-value of the slab carpet. If not provided, the OS-HPXML default is used.')
|
588
576
|
args << arg
|
589
577
|
|
590
578
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_assembly_r', true)
|
@@ -607,7 +595,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
607
595
|
|
608
596
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_material_type', roof_material_type_choices, false)
|
609
597
|
arg.setDisplayName('Roof: Material Type')
|
610
|
-
arg.setDescription('The material type of the roof.')
|
598
|
+
arg.setDescription('The material type of the roof. If not provided, the OS-HPXML default is used.')
|
611
599
|
args << arg
|
612
600
|
|
613
601
|
color_choices = OpenStudio::StringVector.new
|
@@ -617,10 +605,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
617
605
|
color_choices << HPXML::ColorMediumDark
|
618
606
|
color_choices << HPXML::ColorReflective
|
619
607
|
|
620
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_color', color_choices,
|
608
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_color', color_choices, false)
|
621
609
|
arg.setDisplayName('Roof: Color')
|
622
|
-
arg.setDescription('The color of the roof.')
|
623
|
-
arg.setDefaultValue(HPXML::ColorMedium)
|
610
|
+
arg.setDescription('The color of the roof. If not provided, the OS-HPXML default is used.')
|
624
611
|
args << arg
|
625
612
|
|
626
613
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('roof_assembly_r', true)
|
@@ -681,13 +668,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
681
668
|
|
682
669
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_siding_type', wall_siding_type_choices, false)
|
683
670
|
arg.setDisplayName('Wall: Siding Type')
|
684
|
-
arg.setDescription('The siding type of the walls. Also applies to rim joists.')
|
671
|
+
arg.setDescription('The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default is used.')
|
685
672
|
args << arg
|
686
673
|
|
687
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_color', color_choices,
|
674
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_color', color_choices, false)
|
688
675
|
arg.setDisplayName('Wall: Color')
|
689
|
-
arg.setDescription('The color of the walls. Also applies to rim joists.')
|
690
|
-
arg.setDefaultValue(HPXML::ColorMedium)
|
676
|
+
arg.setDescription('The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default is used.')
|
691
677
|
args << arg
|
692
678
|
|
693
679
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('wall_assembly_r', true)
|
@@ -763,7 +749,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
763
749
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_fraction_operable', false)
|
764
750
|
arg.setDisplayName('Windows: Fraction Operable')
|
765
751
|
arg.setUnits('Frac')
|
766
|
-
arg.setDescription('Fraction of windows that are operable.')
|
752
|
+
arg.setDescription('Fraction of windows that are operable. If not provided, the OS-HPXML default is used.')
|
753
|
+
args << arg
|
754
|
+
|
755
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('window_natvent_availability', false)
|
756
|
+
arg.setDisplayName('Windows: Natural Ventilation Availability')
|
757
|
+
arg.setUnits('Days/week')
|
758
|
+
arg.setDescription('For operable windows, the number of days/week that windows can be opened by occupants for natural ventilation. If not provided, the OS-HPXML default is used.')
|
767
759
|
args << arg
|
768
760
|
|
769
761
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_ufactor', true)
|
@@ -782,25 +774,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
782
774
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_interior_shading_winter', false)
|
783
775
|
arg.setDisplayName('Windows: Winter Interior Shading')
|
784
776
|
arg.setUnits('Frac')
|
785
|
-
arg.setDescription('Interior shading multiplier for the heating season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
|
777
|
+
arg.setDescription('Interior shading multiplier for the heating season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default is used.')
|
786
778
|
args << arg
|
787
779
|
|
788
780
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_interior_shading_summer', false)
|
789
781
|
arg.setDisplayName('Windows: Summer Interior Shading')
|
790
782
|
arg.setUnits('Frac')
|
791
|
-
arg.setDescription('Interior shading multiplier for the cooling season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
|
783
|
+
arg.setDescription('Interior shading multiplier for the cooling season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default is used.')
|
792
784
|
args << arg
|
793
785
|
|
794
786
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_exterior_shading_winter', false)
|
795
787
|
arg.setDisplayName('Windows: Winter Exterior Shading')
|
796
788
|
arg.setUnits('Frac')
|
797
|
-
arg.setDescription('Exterior shading multiplier for the heating season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
|
789
|
+
arg.setDescription('Exterior shading multiplier for the heating season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default is used.')
|
798
790
|
args << arg
|
799
791
|
|
800
792
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_exterior_shading_summer', false)
|
801
793
|
arg.setDisplayName('Windows: Summer Exterior Shading')
|
802
794
|
arg.setUnits('Frac')
|
803
|
-
arg.setDescription('Exterior shading multiplier for the cooling season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc.')
|
795
|
+
arg.setDescription('Exterior shading multiplier for the cooling season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default is used.')
|
804
796
|
args << arg
|
805
797
|
|
806
798
|
storm_window_type_choices = OpenStudio::StringVector.new
|
@@ -809,7 +801,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
809
801
|
|
810
802
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('window_storm_type', storm_window_type_choices, false)
|
811
803
|
arg.setDisplayName('Windows: Storm Type')
|
812
|
-
arg.setDescription('The type of storm, if present.')
|
804
|
+
arg.setDescription('The type of storm, if present. If not provided, assumes there is no storm.')
|
813
805
|
args << arg
|
814
806
|
|
815
807
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('overhangs_front_depth', true)
|
@@ -939,7 +931,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
939
931
|
|
940
932
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('skylight_storm_type', storm_window_type_choices, false)
|
941
933
|
arg.setDisplayName('Skylights: Storm Type')
|
942
|
-
arg.setDescription('The type of storm, if present.')
|
934
|
+
arg.setDescription('The type of storm, if present. If not provided, assumes there is no storm.')
|
943
935
|
args << arg
|
944
936
|
|
945
937
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('door_area', true)
|
@@ -991,7 +983,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
991
983
|
heating_system_type_choices << HPXML::HVACTypePortableHeater
|
992
984
|
heating_system_type_choices << HPXML::HVACTypeFireplace
|
993
985
|
heating_system_type_choices << HPXML::HVACTypeFixedHeater
|
994
|
-
heating_system_type_choices << HPXML::HVACTypePTACHeating
|
995
986
|
heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Baseboard"
|
996
987
|
heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Ductless Fan Coil"
|
997
988
|
|
@@ -1014,6 +1005,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1014
1005
|
|
1015
1006
|
cooling_efficiency_type_choices = OpenStudio::StringVector.new
|
1016
1007
|
cooling_efficiency_type_choices << HPXML::UnitsSEER
|
1008
|
+
cooling_efficiency_type_choices << HPXML::UnitsSEER2
|
1017
1009
|
cooling_efficiency_type_choices << HPXML::UnitsEER
|
1018
1010
|
cooling_efficiency_type_choices << HPXML::UnitsCEER
|
1019
1011
|
|
@@ -1024,13 +1016,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1024
1016
|
|
1025
1017
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_type', heating_system_type_choices, true)
|
1026
1018
|
arg.setDisplayName('Heating System: Type')
|
1027
|
-
arg.setDescription("The type of heating system. Use 'none' if there is no heating system.")
|
1019
|
+
arg.setDescription("The type of heating system. Use 'none' if there is no heating system or if there is a heat pump serving a heating load.")
|
1028
1020
|
arg.setDefaultValue(HPXML::HVACTypeFurnace)
|
1029
1021
|
args << arg
|
1030
1022
|
|
1031
1023
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_fuel', heating_system_fuel_choices, true)
|
1032
1024
|
arg.setDisplayName('Heating System: Fuel Type')
|
1033
|
-
arg.setDescription("The fuel type of the heating system. Ignored for #{HPXML::HVACTypeElectricResistance}
|
1025
|
+
arg.setDescription("The fuel type of the heating system. Ignored for #{HPXML::HVACTypeElectricResistance}.")
|
1034
1026
|
arg.setDefaultValue(HPXML::FuelTypeNaturalGas)
|
1035
1027
|
args << arg
|
1036
1028
|
|
@@ -1041,11 +1033,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1041
1033
|
arg.setDefaultValue(0.78)
|
1042
1034
|
args << arg
|
1043
1035
|
|
1044
|
-
arg = OpenStudio::Measure::OSArgument::
|
1036
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_capacity', false)
|
1045
1037
|
arg.setDisplayName('Heating System: Heating Capacity')
|
1046
|
-
arg.setDescription(
|
1038
|
+
arg.setDescription('The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default is used.')
|
1047
1039
|
arg.setUnits('Btu/hr')
|
1048
|
-
arg.setDefaultValue(Constants.Auto)
|
1049
1040
|
args << arg
|
1050
1041
|
|
1051
1042
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_fraction_heat_load_served', true)
|
@@ -1057,45 +1048,43 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1057
1048
|
|
1058
1049
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_airflow_defect_ratio', false)
|
1059
1050
|
arg.setDisplayName('Heating System: Airflow Defect Ratio')
|
1060
|
-
arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heating system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeFurnace}.")
|
1051
|
+
arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heating system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeFurnace}. If not provided, assumes no defect.")
|
1061
1052
|
arg.setUnits('Frac')
|
1062
1053
|
args << arg
|
1063
1054
|
|
1064
1055
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_type', cooling_system_type_choices, true)
|
1065
1056
|
arg.setDisplayName('Cooling System: Type')
|
1066
|
-
arg.setDescription("The type of cooling system. Use 'none' if there is no cooling system.")
|
1057
|
+
arg.setDescription("The type of cooling system. Use 'none' if there is no cooling system or if there is a heat pump serving a cooling load.")
|
1067
1058
|
arg.setDefaultValue(HPXML::HVACTypeCentralAirConditioner)
|
1068
1059
|
args << arg
|
1069
1060
|
|
1070
1061
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_efficiency_type', cooling_efficiency_type_choices, true)
|
1071
1062
|
arg.setDisplayName('Cooling System: Efficiency Type')
|
1072
|
-
arg.setDescription("The efficiency type of the cooling system. System types #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner} use #{HPXML::UnitsSEER}. System types #{HPXML::HVACTypeRoomAirConditioner} and #{HPXML::HVACTypePTAC} use #{HPXML::UnitsEER} or #{HPXML::UnitsCEER}. Ignored for system type #{HPXML::HVACTypeEvaporativeCooler}.")
|
1063
|
+
arg.setDescription("The efficiency type of the cooling system. System types #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner} use #{HPXML::UnitsSEER} or #{HPXML::UnitsSEER2}. System types #{HPXML::HVACTypeRoomAirConditioner} and #{HPXML::HVACTypePTAC} use #{HPXML::UnitsEER} or #{HPXML::UnitsCEER}. Ignored for system type #{HPXML::HVACTypeEvaporativeCooler}.")
|
1073
1064
|
arg.setDefaultValue(HPXML::UnitsSEER)
|
1074
1065
|
args << arg
|
1075
1066
|
|
1076
1067
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_efficiency', true)
|
1077
1068
|
arg.setDisplayName('Cooling System: Efficiency')
|
1078
|
-
arg.setUnits("#{HPXML::UnitsSEER} or #{HPXML::UnitsEER} or #{HPXML::UnitsCEER}")
|
1079
1069
|
arg.setDescription("The rated efficiency value of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}.")
|
1080
1070
|
arg.setDefaultValue(13.0)
|
1081
1071
|
args << arg
|
1082
1072
|
|
1083
1073
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_compressor_type', compressor_type_choices, false)
|
1084
1074
|
arg.setDisplayName('Cooling System: Cooling Compressor Type')
|
1085
|
-
arg.setDescription("The compressor type of the cooling system. Only applies to #{HPXML::HVACTypeCentralAirConditioner}.")
|
1075
|
+
arg.setDescription("The compressor type of the cooling system. Only applies to #{HPXML::HVACTypeCentralAirConditioner}. If not provided, the OS-HPXML default is used.")
|
1086
1076
|
args << arg
|
1087
1077
|
|
1088
1078
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_sensible_heat_fraction', false)
|
1089
1079
|
arg.setDisplayName('Cooling System: Cooling Sensible Heat Fraction')
|
1090
|
-
arg.setDescription("The sensible heat fraction of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}.")
|
1080
|
+
arg.setDescription("The sensible heat fraction of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}. If not provided, the OS-HPXML default is used.")
|
1091
1081
|
arg.setUnits('Frac')
|
1092
1082
|
args << arg
|
1093
1083
|
|
1094
|
-
arg = OpenStudio::Measure::OSArgument::
|
1084
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_capacity', false)
|
1095
1085
|
arg.setDisplayName('Cooling System: Cooling Capacity')
|
1096
|
-
arg.setDescription(
|
1086
|
+
arg.setDescription('The output cooling capacity of the cooling system. If not provided, the OS-HPXML autosized default is used.')
|
1097
1087
|
arg.setUnits('Btu/hr')
|
1098
|
-
arg.setDefaultValue(Constants.Auto)
|
1099
1088
|
args << arg
|
1100
1089
|
|
1101
1090
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_fraction_cool_load_served', true)
|
@@ -1113,13 +1102,36 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1113
1102
|
|
1114
1103
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_airflow_defect_ratio', false)
|
1115
1104
|
arg.setDisplayName('Cooling System: Airflow Defect Ratio')
|
1116
|
-
arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the cooling system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeCentralAirConditioner} and ducted #{HPXML::HVACTypeMiniSplitAirConditioner}.")
|
1105
|
+
arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the cooling system per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeCentralAirConditioner} and ducted #{HPXML::HVACTypeMiniSplitAirConditioner}. If not provided, assumes no defect.")
|
1117
1106
|
arg.setUnits('Frac')
|
1118
1107
|
args << arg
|
1119
1108
|
|
1120
1109
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_charge_defect_ratio', false)
|
1121
1110
|
arg.setDisplayName('Cooling System: Charge Defect Ratio')
|
1122
|
-
arg.setDescription("The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge) / DesignCharge, of the cooling system per ANSI/RESNET/ACCA Standard 310. A value of zero means no refrigerant charge defect. Applies only to #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner}.")
|
1111
|
+
arg.setDescription("The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge) / DesignCharge, of the cooling system per ANSI/RESNET/ACCA Standard 310. A value of zero means no refrigerant charge defect. Applies only to #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner}. If not provided, assumes no defect.")
|
1112
|
+
arg.setUnits('Frac')
|
1113
|
+
args << arg
|
1114
|
+
|
1115
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_integrated_heating_system_fuel', heating_system_fuel_choices, false)
|
1116
|
+
arg.setDisplayName('Cooling System: Integrated Heating System Fuel Type')
|
1117
|
+
arg.setDescription("The fuel type of the heating system integrated into cooling system. Only used for #{HPXML::HVACTypePTAC} and #{HPXML::HVACTypeRoomAirConditioner}.")
|
1118
|
+
args << arg
|
1119
|
+
|
1120
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_integrated_heating_system_efficiency_percent', false)
|
1121
|
+
arg.setDisplayName('Cooling System: Integrated Heating System Efficiency')
|
1122
|
+
arg.setUnits('Frac')
|
1123
|
+
arg.setDescription("The rated heating efficiency value of the heating system integrated into cooling system. Only used for #{HPXML::HVACTypePTAC} and #{HPXML::HVACTypeRoomAirConditioner}.")
|
1124
|
+
args << arg
|
1125
|
+
|
1126
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_integrated_heating_system_capacity', false)
|
1127
|
+
arg.setDisplayName('Cooling System: Integrated Heating System Heating Capacity')
|
1128
|
+
arg.setDescription("The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default is used. Only used for #{HPXML::HVACTypePTAC} and #{HPXML::HVACTypeRoomAirConditioner}.")
|
1129
|
+
arg.setUnits('Btu/hr')
|
1130
|
+
args << arg
|
1131
|
+
|
1132
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_integrated_heating_system_fraction_heat_load_served', false)
|
1133
|
+
arg.setDisplayName('Cooling System: Integrated Heating System Fraction Heat Load Served')
|
1134
|
+
arg.setDescription("The heating load served by the heating system integrated into cooling system. Only used for #{HPXML::HVACTypePTAC} and #{HPXML::HVACTypeRoomAirConditioner}.")
|
1123
1135
|
arg.setUnits('Frac')
|
1124
1136
|
args << arg
|
1125
1137
|
|
@@ -1129,9 +1141,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1129
1141
|
heat_pump_type_choices << HPXML::HVACTypeHeatPumpMiniSplit
|
1130
1142
|
heat_pump_type_choices << HPXML::HVACTypeHeatPumpGroundToAir
|
1131
1143
|
heat_pump_type_choices << HPXML::HVACTypeHeatPumpPTHP
|
1144
|
+
heat_pump_type_choices << HPXML::HVACTypeHeatPumpRoom
|
1132
1145
|
|
1133
1146
|
heat_pump_heating_efficiency_type_choices = OpenStudio::StringVector.new
|
1134
1147
|
heat_pump_heating_efficiency_type_choices << HPXML::UnitsHSPF
|
1148
|
+
heat_pump_heating_efficiency_type_choices << HPXML::UnitsHSPF2
|
1135
1149
|
heat_pump_heating_efficiency_type_choices << HPXML::UnitsCOP
|
1136
1150
|
|
1137
1151
|
heat_pump_fuel_choices = OpenStudio::StringVector.new
|
@@ -1148,6 +1162,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1148
1162
|
heat_pump_backup_fuel_choices << HPXML::FuelTypeOil
|
1149
1163
|
heat_pump_backup_fuel_choices << HPXML::FuelTypePropane
|
1150
1164
|
|
1165
|
+
heat_pump_sizing_choices = OpenStudio::StringVector.new
|
1166
|
+
heat_pump_sizing_choices << HPXML::HeatPumpSizingACCA
|
1167
|
+
heat_pump_sizing_choices << HPXML::HeatPumpSizingHERS
|
1168
|
+
heat_pump_sizing_choices << HPXML::HeatPumpSizingMaxLoad
|
1169
|
+
|
1151
1170
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_type', heat_pump_type_choices, true)
|
1152
1171
|
arg.setDisplayName('Heat Pump: Type')
|
1153
1172
|
arg.setDescription("The type of heat pump. Use 'none' if there is no heat pump.")
|
@@ -1156,60 +1175,55 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1156
1175
|
|
1157
1176
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_heating_efficiency_type', heat_pump_heating_efficiency_type_choices, true)
|
1158
1177
|
arg.setDisplayName('Heat Pump: Heating Efficiency Type')
|
1159
|
-
arg.setDescription("The heating efficiency type of heat pump. System types #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit} use #{HPXML::UnitsHSPF}. System types #{HPXML::HVACTypeHeatPumpGroundToAir} and #{HPXML::
|
1178
|
+
arg.setDescription("The heating efficiency type of heat pump. System types #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit} use #{HPXML::UnitsHSPF} or #{HPXML::UnitsHSPF2}. System types #{HPXML::HVACTypeHeatPumpGroundToAir}, #{HPXML::HVACTypeHeatPumpPTHP} and #{HPXML::HVACTypeHeatPumpRoom} use #{HPXML::UnitsCOP}.")
|
1160
1179
|
arg.setDefaultValue(HPXML::UnitsHSPF)
|
1161
1180
|
args << arg
|
1162
1181
|
|
1163
1182
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_efficiency', true)
|
1164
1183
|
arg.setDisplayName('Heat Pump: Heating Efficiency')
|
1165
|
-
arg.setUnits("#{HPXML::UnitsHSPF} or #{HPXML::UnitsCOP}")
|
1166
1184
|
arg.setDescription('The rated heating efficiency value of the heat pump.')
|
1167
1185
|
arg.setDefaultValue(7.7)
|
1168
1186
|
args << arg
|
1169
1187
|
|
1170
1188
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_efficiency_type', cooling_efficiency_type_choices, true)
|
1171
1189
|
arg.setDisplayName('Heat Pump: Cooling Efficiency Type')
|
1172
|
-
arg.setDescription("The cooling efficiency type of heat pump. System types #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit} use #{HPXML::UnitsSEER}. System types #{HPXML::HVACTypeHeatPumpGroundToAir} and #{HPXML::
|
1190
|
+
arg.setDescription("The cooling efficiency type of heat pump. System types #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit} use #{HPXML::UnitsSEER} or #{HPXML::UnitsSEER2}. System types #{HPXML::HVACTypeHeatPumpGroundToAir}, #{HPXML::HVACTypeHeatPumpPTHP} and #{HPXML::HVACTypeHeatPumpRoom} use #{HPXML::UnitsEER}.")
|
1173
1191
|
arg.setDefaultValue(HPXML::UnitsSEER)
|
1174
1192
|
args << arg
|
1175
1193
|
|
1176
1194
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_efficiency', true)
|
1177
1195
|
arg.setDisplayName('Heat Pump: Cooling Efficiency')
|
1178
|
-
arg.setUnits("#{HPXML::UnitsSEER} or #{HPXML::UnitsEER}")
|
1179
1196
|
arg.setDescription('The rated cooling efficiency value of the heat pump.')
|
1180
1197
|
arg.setDefaultValue(13.0)
|
1181
1198
|
args << arg
|
1182
1199
|
|
1183
1200
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_compressor_type', compressor_type_choices, false)
|
1184
1201
|
arg.setDisplayName('Heat Pump: Cooling Compressor Type')
|
1185
|
-
arg.setDescription("The compressor type of the heat pump. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir}.")
|
1202
|
+
arg.setDescription("The compressor type of the heat pump. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir}. If not provided, the OS-HPXML default is used.")
|
1186
1203
|
args << arg
|
1187
1204
|
|
1188
1205
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_sensible_heat_fraction', false)
|
1189
1206
|
arg.setDisplayName('Heat Pump: Cooling Sensible Heat Fraction')
|
1190
|
-
arg.setDescription('The sensible heat fraction of the heat pump.')
|
1207
|
+
arg.setDescription('The sensible heat fraction of the heat pump. If not provided, the OS-HPXML default is used.')
|
1191
1208
|
arg.setUnits('Frac')
|
1192
1209
|
args << arg
|
1193
1210
|
|
1194
|
-
arg = OpenStudio::Measure::OSArgument::
|
1211
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_capacity', false)
|
1195
1212
|
arg.setDisplayName('Heat Pump: Heating Capacity')
|
1196
|
-
arg.setDescription(
|
1213
|
+
arg.setDescription('The output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default is used.')
|
1197
1214
|
arg.setUnits('Btu/hr')
|
1198
|
-
arg.setDefaultValue(Constants.Auto)
|
1199
1215
|
args << arg
|
1200
1216
|
|
1201
|
-
arg = OpenStudio::Measure::OSArgument::
|
1217
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_capacity_17_f', false)
|
1202
1218
|
arg.setDisplayName('Heat Pump: Heating Capacity 17F')
|
1203
|
-
arg.setDescription("The output heating capacity of the heat pump at 17F. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}.")
|
1219
|
+
arg.setDescription("The output heating capacity of the heat pump at 17F. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}. If not provided, the OS-HPXML default is used.")
|
1204
1220
|
arg.setUnits('Btu/hr')
|
1205
|
-
arg.setDefaultValue(Constants.Auto)
|
1206
1221
|
args << arg
|
1207
1222
|
|
1208
|
-
arg = OpenStudio::Measure::OSArgument::
|
1223
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_capacity', false)
|
1209
1224
|
arg.setDisplayName('Heat Pump: Cooling Capacity')
|
1210
|
-
arg.setDescription(
|
1225
|
+
arg.setDescription('The output cooling capacity of the heat pump. If not provided, the OS-HPXML autosized default is used.')
|
1211
1226
|
arg.setUnits('Btu/hr')
|
1212
|
-
arg.setDefaultValue(Constants.Auto)
|
1213
1227
|
args << arg
|
1214
1228
|
|
1215
1229
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_fraction_heat_load_served', true)
|
@@ -1244,11 +1258,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1244
1258
|
arg.setDefaultValue(1)
|
1245
1259
|
args << arg
|
1246
1260
|
|
1247
|
-
arg = OpenStudio::Measure::OSArgument::
|
1261
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_capacity', false)
|
1248
1262
|
arg.setDisplayName('Heat Pump: Backup Heating Capacity')
|
1249
|
-
arg.setDescription("The backup output heating capacity of the heat pump.
|
1263
|
+
arg.setDescription("The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default is used. Only applies if Backup Type is '#{HPXML::HeatPumpBackupTypeIntegrated}'.")
|
1250
1264
|
arg.setUnits('Btu/hr')
|
1251
|
-
arg.setDefaultValue(Constants.Auto)
|
1252
1265
|
args << arg
|
1253
1266
|
|
1254
1267
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_switchover_temp', false)
|
@@ -1263,20 +1276,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1263
1276
|
arg.setUnits('deg-F')
|
1264
1277
|
args << arg
|
1265
1278
|
|
1279
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_sizing_methodology', heat_pump_sizing_choices, false)
|
1280
|
+
arg.setDisplayName('Heat Pump: Sizing Methodology')
|
1281
|
+
arg.setDescription('The auto-sizing methodology to use when the heat pump capacity is not provided. If not provided, the OS-HPXML default is used.')
|
1282
|
+
args << arg
|
1283
|
+
|
1266
1284
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heat_pump_is_ducted', false)
|
1267
1285
|
arg.setDisplayName('Heat Pump: Is Ducted')
|
1268
|
-
arg.setDescription("Whether the heat pump is ducted or not. Only used for #{HPXML::HVACTypeHeatPumpMiniSplit}. It's assumed that #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpGroundToAir} are ducted.")
|
1286
|
+
arg.setDescription("Whether the heat pump is ducted or not. Only used for #{HPXML::HVACTypeHeatPumpMiniSplit}. It's assumed that #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpGroundToAir} are ducted. If not provided, assumes not ducted.")
|
1269
1287
|
args << arg
|
1270
1288
|
|
1271
1289
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_airflow_defect_ratio', false)
|
1272
1290
|
arg.setDisplayName('Heat Pump: Airflow Defect Ratio')
|
1273
|
-
arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heat pump per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeHeatPumpAirToAir}, ducted #{HPXML::HVACTypeHeatPumpMiniSplit}, and #{HPXML::HVACTypeHeatPumpGroundToAir}.")
|
1291
|
+
arg.setDescription("The airflow defect ratio, defined as (InstalledAirflow - DesignAirflow) / DesignAirflow, of the heat pump per ANSI/RESNET/ACCA Standard 310. A value of zero means no airflow defect. Applies only to #{HPXML::HVACTypeHeatPumpAirToAir}, ducted #{HPXML::HVACTypeHeatPumpMiniSplit}, and #{HPXML::HVACTypeHeatPumpGroundToAir}. If not provided, assumes no defect.")
|
1274
1292
|
arg.setUnits('Frac')
|
1275
1293
|
args << arg
|
1276
1294
|
|
1277
1295
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_charge_defect_ratio', false)
|
1278
1296
|
arg.setDisplayName('Heat Pump: Charge Defect Ratio')
|
1279
|
-
arg.setDescription('The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge) / DesignCharge, of the heat pump per ANSI/RESNET/ACCA Standard 310. A value of zero means no refrigerant charge defect. Applies to all heat pump types.')
|
1297
|
+
arg.setDescription('The refrigerant charge defect ratio, defined as (InstalledCharge - DesignCharge) / DesignCharge, of the heat pump per ANSI/RESNET/ACCA Standard 310. A value of zero means no refrigerant charge defect. Applies to all heat pump types. If not provided, assumes no defect.')
|
1280
1298
|
arg.setUnits('Frac')
|
1281
1299
|
args << arg
|
1282
1300
|
|
@@ -1309,11 +1327,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1309
1327
|
arg.setDefaultValue(1.0)
|
1310
1328
|
args << arg
|
1311
1329
|
|
1312
|
-
arg = OpenStudio::Measure::OSArgument::
|
1330
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_2_heating_capacity', false)
|
1313
1331
|
arg.setDisplayName('Heating System 2: Heating Capacity')
|
1314
|
-
arg.setDescription(
|
1332
|
+
arg.setDescription('The output heating capacity of the second heating system. If not provided, the OS-HPXML autosized default is used.')
|
1315
1333
|
arg.setUnits('Btu/hr')
|
1316
|
-
arg.setDefaultValue(Constants.Auto)
|
1317
1334
|
args << arg
|
1318
1335
|
|
1319
1336
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_2_fraction_heat_load_served', true)
|
@@ -1323,42 +1340,38 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1323
1340
|
arg.setDefaultValue(0.25)
|
1324
1341
|
args << arg
|
1325
1342
|
|
1326
|
-
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_heating_weekday_setpoint',
|
1343
|
+
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_heating_weekday_setpoint', false)
|
1327
1344
|
arg.setDisplayName('HVAC Control: Heating Weekday Setpoint Schedule')
|
1328
|
-
arg.setDescription('Specify the constant or 24-hour comma-separated weekday heating setpoint schedule.')
|
1345
|
+
arg.setDescription('Specify the constant or 24-hour comma-separated weekday heating setpoint schedule. Required unless a detailed CSV schedule is provided.')
|
1329
1346
|
arg.setUnits('deg-F')
|
1330
|
-
arg.setDefaultValue(Constants.Auto)
|
1331
1347
|
args << arg
|
1332
1348
|
|
1333
|
-
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_heating_weekend_setpoint',
|
1349
|
+
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_heating_weekend_setpoint', false)
|
1334
1350
|
arg.setDisplayName('HVAC Control: Heating Weekend Setpoint Schedule')
|
1335
|
-
arg.setDescription('Specify the constant or 24-hour comma-separated weekend heating setpoint schedule.')
|
1351
|
+
arg.setDescription('Specify the constant or 24-hour comma-separated weekend heating setpoint schedule. Required unless a detailed CSV schedule is provided.')
|
1336
1352
|
arg.setUnits('deg-F')
|
1337
|
-
arg.setDefaultValue(Constants.Auto)
|
1338
1353
|
args << arg
|
1339
1354
|
|
1340
|
-
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_cooling_weekday_setpoint',
|
1355
|
+
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_cooling_weekday_setpoint', false)
|
1341
1356
|
arg.setDisplayName('HVAC Control: Cooling Weekday Setpoint Schedule')
|
1342
|
-
arg.setDescription('Specify the constant or 24-hour comma-separated weekday cooling setpoint schedule.')
|
1357
|
+
arg.setDescription('Specify the constant or 24-hour comma-separated weekday cooling setpoint schedule. Required unless a detailed CSV schedule is provided.')
|
1343
1358
|
arg.setUnits('deg-F')
|
1344
|
-
arg.setDefaultValue(Constants.Auto)
|
1345
1359
|
args << arg
|
1346
1360
|
|
1347
|
-
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_cooling_weekend_setpoint',
|
1361
|
+
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_cooling_weekend_setpoint', false)
|
1348
1362
|
arg.setDisplayName('HVAC Control: Cooling Weekend Setpoint Schedule')
|
1349
|
-
arg.setDescription('Specify the constant or 24-hour comma-separated weekend cooling setpoint schedule.')
|
1363
|
+
arg.setDescription('Specify the constant or 24-hour comma-separated weekend cooling setpoint schedule. Required unless a detailed CSV schedule is provided.')
|
1350
1364
|
arg.setUnits('deg-F')
|
1351
|
-
arg.setDefaultValue(Constants.Auto)
|
1352
1365
|
args << arg
|
1353
1366
|
|
1354
1367
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_heating_season_period', false)
|
1355
1368
|
arg.setDisplayName('HVAC Control: Heating Season Period')
|
1356
|
-
arg.setDescription(
|
1369
|
+
arg.setDescription("Enter a date like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default is used. Can also provide '#{HPXML::BuildingAmerica}' to use automatic seasons from the Building America House Simulation Protocols.")
|
1357
1370
|
args << arg
|
1358
1371
|
|
1359
1372
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_cooling_season_period', false)
|
1360
1373
|
arg.setDisplayName('HVAC Control: Cooling Season Period')
|
1361
|
-
arg.setDescription(
|
1374
|
+
arg.setDescription("Enter a date like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default is used. Can also provide '#{HPXML::BuildingAmerica}' to use automatic seasons from the Building America House Simulation Protocols.")
|
1362
1375
|
args << arg
|
1363
1376
|
|
1364
1377
|
duct_leakage_units_choices = OpenStudio::StringVector.new
|
@@ -1367,7 +1380,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1367
1380
|
duct_leakage_units_choices << HPXML::UnitsPercent
|
1368
1381
|
|
1369
1382
|
duct_location_choices = OpenStudio::StringVector.new
|
1370
|
-
duct_location_choices << Constants.Auto
|
1371
1383
|
duct_location_choices << HPXML::LocationLivingSpace
|
1372
1384
|
duct_location_choices << HPXML::LocationBasementConditioned
|
1373
1385
|
duct_location_choices << HPXML::LocationBasementUnconditioned
|
@@ -1404,10 +1416,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1404
1416
|
arg.setDefaultValue(0.1)
|
1405
1417
|
args << arg
|
1406
1418
|
|
1407
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_supply_location', duct_location_choices,
|
1419
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_supply_location', duct_location_choices, false)
|
1408
1420
|
arg.setDisplayName('Ducts: Supply Location')
|
1409
|
-
arg.setDescription('The location of the supply ducts.')
|
1410
|
-
arg.setDefaultValue(Constants.Auto)
|
1421
|
+
arg.setDescription('The location of the supply ducts. If not provided, the OS-HPXML default is used.')
|
1411
1422
|
args << arg
|
1412
1423
|
|
1413
1424
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_supply_insulation_r', true)
|
@@ -1417,17 +1428,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1417
1428
|
arg.setDefaultValue(0)
|
1418
1429
|
args << arg
|
1419
1430
|
|
1420
|
-
arg = OpenStudio::Measure::OSArgument::
|
1431
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_supply_surface_area', false)
|
1421
1432
|
arg.setDisplayName('Ducts: Supply Surface Area')
|
1422
|
-
arg.setDescription('The surface area of the supply ducts.')
|
1433
|
+
arg.setDescription('The surface area of the supply ducts. If not provided, the OS-HPXML default is used.')
|
1423
1434
|
arg.setUnits('ft^2')
|
1424
|
-
arg.setDefaultValue(Constants.Auto)
|
1425
1435
|
args << arg
|
1426
1436
|
|
1427
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_return_location', duct_location_choices,
|
1437
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_return_location', duct_location_choices, false)
|
1428
1438
|
arg.setDisplayName('Ducts: Return Location')
|
1429
|
-
arg.setDescription('The location of the return ducts.')
|
1430
|
-
arg.setDefaultValue(Constants.Auto)
|
1439
|
+
arg.setDescription('The location of the return ducts. If not provided, the OS-HPXML default is used.')
|
1431
1440
|
args << arg
|
1432
1441
|
|
1433
1442
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_return_insulation_r', true)
|
@@ -1437,18 +1446,16 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1437
1446
|
arg.setDefaultValue(0)
|
1438
1447
|
args << arg
|
1439
1448
|
|
1440
|
-
arg = OpenStudio::Measure::OSArgument::
|
1449
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_return_surface_area', false)
|
1441
1450
|
arg.setDisplayName('Ducts: Return Surface Area')
|
1442
|
-
arg.setDescription('The surface area of the return ducts.')
|
1451
|
+
arg.setDescription('The surface area of the return ducts. If not provided, the OS-HPXML default is used.')
|
1443
1452
|
arg.setUnits('ft^2')
|
1444
|
-
arg.setDefaultValue(Constants.Auto)
|
1445
1453
|
args << arg
|
1446
1454
|
|
1447
|
-
arg = OpenStudio::Measure::OSArgument::
|
1455
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('ducts_number_of_return_registers', false)
|
1448
1456
|
arg.setDisplayName('Ducts: Number of Return Registers')
|
1449
|
-
arg.setDescription(
|
1457
|
+
arg.setDescription('The number of return registers of the ducts. Only used to calculate default return duct surface area. If not provided, the OS-HPXML default is used.')
|
1450
1458
|
arg.setUnits('#')
|
1451
|
-
arg.setDefaultValue(Constants.Auto)
|
1452
1459
|
args << arg
|
1453
1460
|
|
1454
1461
|
mech_vent_fan_type_choices = OpenStudio::StringVector.new
|
@@ -1470,18 +1477,16 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1470
1477
|
arg.setDefaultValue('none')
|
1471
1478
|
args << arg
|
1472
1479
|
|
1473
|
-
arg = OpenStudio::Measure::OSArgument::
|
1480
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_flow_rate', false)
|
1474
1481
|
arg.setDisplayName('Mechanical Ventilation: Flow Rate')
|
1475
|
-
arg.setDescription('The flow rate of the mechanical ventilation.')
|
1482
|
+
arg.setDescription('The flow rate of the mechanical ventilation. If not provided, the OS-HPXML default is used.')
|
1476
1483
|
arg.setUnits('CFM')
|
1477
|
-
arg.setDefaultValue(Constants.Auto)
|
1478
1484
|
args << arg
|
1479
1485
|
|
1480
|
-
arg = OpenStudio::Measure::OSArgument::
|
1486
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_hours_in_operation', false)
|
1481
1487
|
arg.setDisplayName('Mechanical Ventilation: Hours In Operation')
|
1482
|
-
arg.setDescription('The hours in operation of the mechanical ventilation.')
|
1488
|
+
arg.setDescription('The hours in operation of the mechanical ventilation. If not provided, the OS-HPXML default is used.')
|
1483
1489
|
arg.setUnits('hrs/day')
|
1484
|
-
arg.setDefaultValue(Constants.Auto)
|
1485
1490
|
args << arg
|
1486
1491
|
|
1487
1492
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_recovery_efficiency_type', mech_vent_recovery_efficiency_type_choices, true)
|
@@ -1504,11 +1509,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1504
1509
|
arg.setDefaultValue(0.72)
|
1505
1510
|
args << arg
|
1506
1511
|
|
1507
|
-
arg = OpenStudio::Measure::OSArgument::
|
1512
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_fan_power', false)
|
1508
1513
|
arg.setDisplayName('Mechanical Ventilation: Fan Power')
|
1509
|
-
arg.setDescription('The fan power of the mechanical ventilation.')
|
1514
|
+
arg.setDescription('The fan power of the mechanical ventilation. If not provided, the OS-HPXML default is used.')
|
1510
1515
|
arg.setUnits('W')
|
1511
|
-
arg.setDefaultValue(Constants.Auto)
|
1512
1516
|
args << arg
|
1513
1517
|
|
1514
1518
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('mech_vent_num_units_served', true)
|
@@ -1520,24 +1524,24 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1520
1524
|
|
1521
1525
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_shared_frac_recirculation', false)
|
1522
1526
|
arg.setDisplayName('Shared Mechanical Ventilation: Fraction Recirculation')
|
1523
|
-
arg.setDescription('Fraction of the total supply air that is recirculated, with the remainder assumed to be outdoor air. The value must be 0 for exhaust only systems.
|
1527
|
+
arg.setDescription('Fraction of the total supply air that is recirculated, with the remainder assumed to be outdoor air. The value must be 0 for exhaust only systems. Required for a shared mechanical ventilation system.')
|
1524
1528
|
arg.setUnits('Frac')
|
1525
1529
|
args << arg
|
1526
1530
|
|
1527
1531
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_shared_preheating_fuel', heating_system_fuel_choices, false)
|
1528
1532
|
arg.setDisplayName('Shared Mechanical Ventilation: Preheating Fuel')
|
1529
|
-
arg.setDescription('Fuel type of the preconditioning heating equipment. Only used for a shared mechanical ventilation system.')
|
1533
|
+
arg.setDescription('Fuel type of the preconditioning heating equipment. Only used for a shared mechanical ventilation system. If not provided, assumes no preheating.')
|
1530
1534
|
args << arg
|
1531
1535
|
|
1532
1536
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_shared_preheating_efficiency', false)
|
1533
1537
|
arg.setDisplayName('Shared Mechanical Ventilation: Preheating Efficiency')
|
1534
|
-
arg.setDescription('Efficiency of the preconditioning heating equipment. Only used for a shared mechanical ventilation system.')
|
1538
|
+
arg.setDescription('Efficiency of the preconditioning heating equipment. Only used for a shared mechanical ventilation system. If not provided, assumes no preheating.')
|
1535
1539
|
arg.setUnits('COP')
|
1536
1540
|
args << arg
|
1537
1541
|
|
1538
1542
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_shared_preheating_fraction_heat_load_served', false)
|
1539
1543
|
arg.setDisplayName('Shared Mechanical Ventilation: Preheating Fraction Ventilation Heat Load Served')
|
1540
|
-
arg.setDescription('Fraction of heating load introduced by the shared ventilation system that is met by the preconditioning heating equipment.')
|
1544
|
+
arg.setDescription('Fraction of heating load introduced by the shared ventilation system that is met by the preconditioning heating equipment. If not provided, assumes no preheating.')
|
1541
1545
|
arg.setUnits('Frac')
|
1542
1546
|
args << arg
|
1543
1547
|
|
@@ -1546,18 +1550,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1546
1550
|
|
1547
1551
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('mech_vent_shared_precooling_fuel', cooling_system_fuel_choices, false)
|
1548
1552
|
arg.setDisplayName('Shared Mechanical Ventilation: Precooling Fuel')
|
1549
|
-
arg.setDescription('Fuel type of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system.')
|
1553
|
+
arg.setDescription('Fuel type of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system. If not provided, assumes no precooling.')
|
1550
1554
|
args << arg
|
1551
1555
|
|
1552
1556
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_shared_precooling_efficiency', false)
|
1553
1557
|
arg.setDisplayName('Shared Mechanical Ventilation: Precooling Efficiency')
|
1554
|
-
arg.setDescription('Efficiency of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system.')
|
1558
|
+
arg.setDescription('Efficiency of the preconditioning cooling equipment. Only used for a shared mechanical ventilation system. If not provided, assumes no precooling.')
|
1555
1559
|
arg.setUnits('COP')
|
1556
1560
|
args << arg
|
1557
1561
|
|
1558
1562
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_shared_precooling_fraction_cool_load_served', false)
|
1559
1563
|
arg.setDisplayName('Shared Mechanical Ventilation: Precooling Fraction Ventilation Cool Load Served')
|
1560
|
-
arg.setDescription('Fraction of cooling load introduced by the shared ventilation system that is met by the preconditioning cooling equipment.')
|
1564
|
+
arg.setDescription('Fraction of cooling load introduced by the shared ventilation system that is met by the preconditioning cooling equipment. If not provided, assumes no precooling.')
|
1561
1565
|
arg.setUnits('Frac')
|
1562
1566
|
args << arg
|
1563
1567
|
|
@@ -1616,74 +1620,64 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1616
1620
|
arg.setDefaultValue(30)
|
1617
1621
|
args << arg
|
1618
1622
|
|
1619
|
-
arg = OpenStudio::Measure::OSArgument::
|
1623
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_quantity', false)
|
1620
1624
|
arg.setDisplayName('Kitchen Fans: Quantity')
|
1621
|
-
arg.setDescription('The quantity of the kitchen fans.')
|
1625
|
+
arg.setDescription('The quantity of the kitchen fans. If not provided, the OS-HPXML default is used.')
|
1622
1626
|
arg.setUnits('#')
|
1623
|
-
arg.setDefaultValue(Constants.Auto)
|
1624
1627
|
args << arg
|
1625
1628
|
|
1626
|
-
arg = OpenStudio::Measure::OSArgument::
|
1629
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_flow_rate', false)
|
1627
1630
|
arg.setDisplayName('Kitchen Fans: Flow Rate')
|
1628
|
-
arg.setDescription('The flow rate of the kitchen fan.')
|
1631
|
+
arg.setDescription('The flow rate of the kitchen fan. If not provided, the OS-HPXML default is used.')
|
1629
1632
|
arg.setUnits('CFM')
|
1630
|
-
arg.setDefaultValue(Constants.Auto)
|
1631
1633
|
args << arg
|
1632
1634
|
|
1633
|
-
arg = OpenStudio::Measure::OSArgument::
|
1635
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_hours_in_operation', false)
|
1634
1636
|
arg.setDisplayName('Kitchen Fans: Hours In Operation')
|
1635
|
-
arg.setDescription('The hours in operation of the kitchen fan.')
|
1637
|
+
arg.setDescription('The hours in operation of the kitchen fan. If not provided, the OS-HPXML default is used.')
|
1636
1638
|
arg.setUnits('hrs/day')
|
1637
|
-
arg.setDefaultValue(Constants.Auto)
|
1638
1639
|
args << arg
|
1639
1640
|
|
1640
|
-
arg = OpenStudio::Measure::OSArgument::
|
1641
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_power', false)
|
1641
1642
|
arg.setDisplayName('Kitchen Fans: Fan Power')
|
1642
|
-
arg.setDescription('The fan power of the kitchen fan.')
|
1643
|
+
arg.setDescription('The fan power of the kitchen fan. If not provided, the OS-HPXML default is used.')
|
1643
1644
|
arg.setUnits('W')
|
1644
|
-
arg.setDefaultValue(Constants.Auto)
|
1645
1645
|
args << arg
|
1646
1646
|
|
1647
|
-
arg = OpenStudio::Measure::OSArgument::
|
1647
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_start_hour', false)
|
1648
1648
|
arg.setDisplayName('Kitchen Fans: Start Hour')
|
1649
|
-
arg.setDescription('The start hour of the kitchen fan.')
|
1649
|
+
arg.setDescription('The start hour of the kitchen fan. If not provided, the OS-HPXML default is used.')
|
1650
1650
|
arg.setUnits('hr')
|
1651
|
-
arg.setDefaultValue(Constants.Auto)
|
1652
1651
|
args << arg
|
1653
1652
|
|
1654
|
-
arg = OpenStudio::Measure::OSArgument::
|
1653
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_quantity', false)
|
1655
1654
|
arg.setDisplayName('Bathroom Fans: Quantity')
|
1656
|
-
arg.setDescription('The quantity of the bathroom fans.')
|
1655
|
+
arg.setDescription('The quantity of the bathroom fans. If not provided, the OS-HPXML default is used.')
|
1657
1656
|
arg.setUnits('#')
|
1658
|
-
arg.setDefaultValue(Constants.Auto)
|
1659
1657
|
args << arg
|
1660
1658
|
|
1661
|
-
arg = OpenStudio::Measure::OSArgument::
|
1659
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_flow_rate', false)
|
1662
1660
|
arg.setDisplayName('Bathroom Fans: Flow Rate')
|
1663
|
-
arg.setDescription('The flow rate of the bathroom fans.')
|
1661
|
+
arg.setDescription('The flow rate of the bathroom fans. If not provided, the OS-HPXML default is used.')
|
1664
1662
|
arg.setUnits('CFM')
|
1665
|
-
arg.setDefaultValue(Constants.Auto)
|
1666
1663
|
args << arg
|
1667
1664
|
|
1668
|
-
arg = OpenStudio::Measure::OSArgument::
|
1665
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_hours_in_operation', false)
|
1669
1666
|
arg.setDisplayName('Bathroom Fans: Hours In Operation')
|
1670
|
-
arg.setDescription('The hours in operation of the bathroom fans.')
|
1667
|
+
arg.setDescription('The hours in operation of the bathroom fans. If not provided, the OS-HPXML default is used.')
|
1671
1668
|
arg.setUnits('hrs/day')
|
1672
|
-
arg.setDefaultValue(Constants.Auto)
|
1673
1669
|
args << arg
|
1674
1670
|
|
1675
|
-
arg = OpenStudio::Measure::OSArgument::
|
1671
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_power', false)
|
1676
1672
|
arg.setDisplayName('Bathroom Fans: Fan Power')
|
1677
|
-
arg.setDescription('The fan power of the bathroom fans.')
|
1673
|
+
arg.setDescription('The fan power of the bathroom fans. If not provided, the OS-HPXML default is used.')
|
1678
1674
|
arg.setUnits('W')
|
1679
|
-
arg.setDefaultValue(Constants.Auto)
|
1680
1675
|
args << arg
|
1681
1676
|
|
1682
|
-
arg = OpenStudio::Measure::OSArgument::
|
1677
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_start_hour', false)
|
1683
1678
|
arg.setDisplayName('Bathroom Fans: Start Hour')
|
1684
|
-
arg.setDescription('The start hour of the bathroom fans.')
|
1679
|
+
arg.setDescription('The start hour of the bathroom fans. If not provided, the OS-HPXML default is used.')
|
1685
1680
|
arg.setUnits('hr')
|
1686
|
-
arg.setDefaultValue(Constants.Auto)
|
1687
1681
|
args << arg
|
1688
1682
|
|
1689
1683
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('whole_house_fan_present', true)
|
@@ -1692,18 +1686,16 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1692
1686
|
arg.setDefaultValue(false)
|
1693
1687
|
args << arg
|
1694
1688
|
|
1695
|
-
arg = OpenStudio::Measure::OSArgument::
|
1689
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('whole_house_fan_flow_rate', false)
|
1696
1690
|
arg.setDisplayName('Whole House Fan: Flow Rate')
|
1697
|
-
arg.setDescription('The flow rate of the whole house fan.')
|
1691
|
+
arg.setDescription('The flow rate of the whole house fan. If not provided, the OS-HPXML default is used.')
|
1698
1692
|
arg.setUnits('CFM')
|
1699
|
-
arg.setDefaultValue(Constants.Auto)
|
1700
1693
|
args << arg
|
1701
1694
|
|
1702
|
-
arg = OpenStudio::Measure::OSArgument::
|
1695
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('whole_house_fan_power', false)
|
1703
1696
|
arg.setDisplayName('Whole House Fan: Fan Power')
|
1704
|
-
arg.setDescription('The fan power of the whole house fan.')
|
1697
|
+
arg.setDescription('The fan power of the whole house fan. If not provided, the OS-HPXML default is used.')
|
1705
1698
|
arg.setUnits('W')
|
1706
|
-
arg.setDefaultValue(Constants.Auto)
|
1707
1699
|
args << arg
|
1708
1700
|
|
1709
1701
|
water_heater_type_choices = OpenStudio::StringVector.new
|
@@ -1723,7 +1715,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1723
1715
|
water_heater_fuel_choices << HPXML::FuelTypeCoal
|
1724
1716
|
|
1725
1717
|
water_heater_location_choices = OpenStudio::StringVector.new
|
1726
|
-
water_heater_location_choices << Constants.Auto
|
1727
1718
|
water_heater_location_choices << HPXML::LocationLivingSpace
|
1728
1719
|
water_heater_location_choices << HPXML::LocationBasementConditioned
|
1729
1720
|
water_heater_location_choices << HPXML::LocationBasementUnconditioned
|
@@ -1761,17 +1752,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1761
1752
|
arg.setDefaultValue(HPXML::FuelTypeNaturalGas)
|
1762
1753
|
args << arg
|
1763
1754
|
|
1764
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_location', water_heater_location_choices,
|
1755
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_location', water_heater_location_choices, false)
|
1765
1756
|
arg.setDisplayName('Water Heater: Location')
|
1766
|
-
arg.setDescription('The location of water heater.')
|
1767
|
-
arg.setDefaultValue(Constants.Auto)
|
1757
|
+
arg.setDescription('The location of water heater. If not provided, the OS-HPXML default is used.')
|
1768
1758
|
args << arg
|
1769
1759
|
|
1770
|
-
arg = OpenStudio::Measure::OSArgument::
|
1760
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_tank_volume', false)
|
1771
1761
|
arg.setDisplayName('Water Heater: Tank Volume')
|
1772
|
-
arg.setDescription("Nominal volume of water heater tank.
|
1762
|
+
arg.setDescription("Nominal volume of water heater tank. Only applies to #{HPXML::WaterHeaterTypeStorage}, #{HPXML::WaterHeaterTypeHeatPump}, and #{HPXML::WaterHeaterTypeCombiStorage}. If not provided, the OS-HPXML default is used.")
|
1773
1763
|
arg.setUnits('gal')
|
1774
|
-
arg.setDefaultValue(Constants.Auto)
|
1775
1764
|
args << arg
|
1776
1765
|
|
1777
1766
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_efficiency_type', water_heater_efficiency_type_choices, true)
|
@@ -1788,40 +1777,37 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1788
1777
|
|
1789
1778
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_usage_bin', water_heater_usage_bin_choices, false)
|
1790
1779
|
arg.setDisplayName('Water Heater: Usage Bin')
|
1791
|
-
arg.setDescription("The usage of the water heater.
|
1780
|
+
arg.setDescription("The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not #{HPXML::WaterHeaterTypeTankless}. Does not apply to space-heating boilers. If not provided, the OS-HPXML default is used.")
|
1792
1781
|
args << arg
|
1793
1782
|
|
1794
|
-
arg = OpenStudio::Measure::OSArgument::
|
1783
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_recovery_efficiency', false)
|
1795
1784
|
arg.setDisplayName('Water Heater: Recovery Efficiency')
|
1796
|
-
arg.setDescription('Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters.')
|
1785
|
+
arg.setDescription('Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters. If not provided, the OS-HPXML default is used.')
|
1797
1786
|
arg.setUnits('Frac')
|
1798
|
-
arg.setDefaultValue(Constants.Auto)
|
1799
1787
|
args << arg
|
1800
1788
|
|
1801
|
-
arg = OpenStudio::Measure::OSArgument::
|
1789
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_heating_capacity', false)
|
1802
1790
|
arg.setDisplayName('Water Heater: Heating Capacity')
|
1803
|
-
arg.setDescription("Heating capacity.
|
1791
|
+
arg.setDescription("Heating capacity. Only applies to #{HPXML::WaterHeaterTypeStorage}. If not provided, the OS-HPXML default is used.")
|
1804
1792
|
arg.setUnits('Btu/hr')
|
1805
|
-
arg.setDefaultValue(Constants.Auto)
|
1806
1793
|
args << arg
|
1807
1794
|
|
1808
1795
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_standby_loss', false)
|
1809
1796
|
arg.setDisplayName('Water Heater: Standby Loss')
|
1810
|
-
arg.setDescription('The standby loss of water heater. Only applies to space-heating boilers.')
|
1797
|
+
arg.setDescription('The standby loss of water heater. Only applies to space-heating boilers. If not provided, the OS-HPXML default is used.')
|
1811
1798
|
arg.setUnits('deg-F/hr')
|
1812
1799
|
args << arg
|
1813
1800
|
|
1814
1801
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_jacket_rvalue', false)
|
1815
1802
|
arg.setDisplayName('Water Heater: Jacket R-value')
|
1816
|
-
arg.setDescription("The jacket R-value of water heater. Doesn't apply to #{HPXML::WaterHeaterTypeTankless} or #{HPXML::WaterHeaterTypeCombiTankless}.")
|
1803
|
+
arg.setDescription("The jacket R-value of water heater. Doesn't apply to #{HPXML::WaterHeaterTypeTankless} or #{HPXML::WaterHeaterTypeCombiTankless}. If not provided, defaults to no jacket insulation.")
|
1817
1804
|
arg.setUnits('h-ft^2-R/Btu')
|
1818
1805
|
args << arg
|
1819
1806
|
|
1820
|
-
arg = OpenStudio::Measure::OSArgument::
|
1807
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_setpoint_temperature', false)
|
1821
1808
|
arg.setDisplayName('Water Heater: Setpoint Temperature')
|
1822
|
-
arg.setDescription('The setpoint temperature of water heater.')
|
1809
|
+
arg.setDescription('The setpoint temperature of water heater. If not provided, the OS-HPXML default is used.')
|
1823
1810
|
arg.setUnits('deg-F')
|
1824
|
-
arg.setDefaultValue(Constants.Auto)
|
1825
1811
|
args << arg
|
1826
1812
|
|
1827
1813
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('water_heater_num_units_served', true)
|
@@ -1833,7 +1819,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1833
1819
|
|
1834
1820
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('water_heater_uses_desuperheater', false)
|
1835
1821
|
arg.setDisplayName('Water Heater: Uses Desuperheater')
|
1836
|
-
arg.setDescription("Requires that the dwelling unit has a #{HPXML::HVACTypeHeatPumpAirToAir}, #{HPXML::HVACTypeHeatPumpMiniSplit}, or #{HPXML::HVACTypeHeatPumpGroundToAir} heat pump or a #{HPXML::HVACTypeCentralAirConditioner} or #{HPXML::HVACTypeMiniSplitAirConditioner} air conditioner.")
|
1822
|
+
arg.setDescription("Requires that the dwelling unit has a #{HPXML::HVACTypeHeatPumpAirToAir}, #{HPXML::HVACTypeHeatPumpMiniSplit}, or #{HPXML::HVACTypeHeatPumpGroundToAir} heat pump or a #{HPXML::HVACTypeCentralAirConditioner} or #{HPXML::HVACTypeMiniSplitAirConditioner} air conditioner. If not provided, assumes no desuperheater.")
|
1837
1823
|
args << arg
|
1838
1824
|
|
1839
1825
|
water_heater_tank_model_type_choices = OpenStudio::StringVector.new
|
@@ -1842,7 +1828,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1842
1828
|
|
1843
1829
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_tank_model_type', water_heater_tank_model_type_choices, false)
|
1844
1830
|
arg.setDisplayName('Water Heater: Tank Type')
|
1845
|
-
arg.setDescription("Type of tank model to use. The '#{HPXML::WaterHeaterTankModelTypeStratified}' tank generally provide more accurate results, but may significantly increase run time. Applies only to #{HPXML::WaterHeaterTypeStorage}.")
|
1831
|
+
arg.setDescription("Type of tank model to use. The '#{HPXML::WaterHeaterTankModelTypeStratified}' tank generally provide more accurate results, but may significantly increase run time. Applies only to #{HPXML::WaterHeaterTypeStorage}. If not provided, the OS-HPXML default is used.")
|
1846
1832
|
args << arg
|
1847
1833
|
|
1848
1834
|
water_heater_operating_mode_choices = OpenStudio::StringVector.new
|
@@ -1851,7 +1837,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1851
1837
|
|
1852
1838
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_operating_mode', water_heater_operating_mode_choices, false)
|
1853
1839
|
arg.setDisplayName('Water Heater: Operating Mode')
|
1854
|
-
arg.setDescription("The water heater operating mode. The '#{HPXML::WaterHeaterOperatingModeHeatPumpOnly}' option only uses the heat pump, while '#{HPXML::WaterHeaterOperatingModeStandard}' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to #{HPXML::WaterHeaterTypeHeatPump}.")
|
1840
|
+
arg.setDescription("The water heater operating mode. The '#{HPXML::WaterHeaterOperatingModeHeatPumpOnly}' option only uses the heat pump, while '#{HPXML::WaterHeaterOperatingModeStandard}' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to #{HPXML::WaterHeaterTypeHeatPump}. If not provided, the OS-HPXML default is used.")
|
1855
1841
|
args << arg
|
1856
1842
|
|
1857
1843
|
hot_water_distribution_system_type_choices = OpenStudio::StringVector.new
|
@@ -1864,11 +1850,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1864
1850
|
arg.setDefaultValue(HPXML::DHWDistTypeStandard)
|
1865
1851
|
args << arg
|
1866
1852
|
|
1867
|
-
arg = OpenStudio::Measure::OSArgument::
|
1853
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_standard_piping_length', false)
|
1868
1854
|
arg.setDisplayName('Hot Water Distribution: Standard Piping Length')
|
1869
1855
|
arg.setUnits('ft')
|
1870
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeStandard}, the length of the piping.
|
1871
|
-
arg.setDefaultValue(Constants.Auto)
|
1856
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeStandard}, the length of the piping. If not provided, the OS-HPXML default is used.")
|
1872
1857
|
args << arg
|
1873
1858
|
|
1874
1859
|
recirculation_control_type_choices = OpenStudio::StringVector.new
|
@@ -1884,32 +1869,28 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1884
1869
|
arg.setDefaultValue(HPXML::DHWRecirControlTypeNone)
|
1885
1870
|
args << arg
|
1886
1871
|
|
1887
|
-
arg = OpenStudio::Measure::OSArgument::
|
1872
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_piping_length', false)
|
1888
1873
|
arg.setDisplayName('Hot Water Distribution: Recirculation Piping Length')
|
1889
1874
|
arg.setUnits('ft')
|
1890
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation piping.")
|
1891
|
-
arg.setDefaultValue(Constants.Auto)
|
1875
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation piping. If not provided, the OS-HPXML default is used.")
|
1892
1876
|
args << arg
|
1893
1877
|
|
1894
|
-
arg = OpenStudio::Measure::OSArgument::
|
1878
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_branch_piping_length', false)
|
1895
1879
|
arg.setDisplayName('Hot Water Distribution: Recirculation Branch Piping Length')
|
1896
1880
|
arg.setUnits('ft')
|
1897
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation branch piping.")
|
1898
|
-
arg.setDefaultValue(Constants.Auto)
|
1881
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation branch piping. If not provided, the OS-HPXML default is used.")
|
1899
1882
|
args << arg
|
1900
1883
|
|
1901
|
-
arg = OpenStudio::Measure::OSArgument::
|
1884
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_pump_power', false)
|
1902
1885
|
arg.setDisplayName('Hot Water Distribution: Recirculation Pump Power')
|
1903
1886
|
arg.setUnits('W')
|
1904
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the recirculation pump power.")
|
1905
|
-
arg.setDefaultValue(Constants.Auto)
|
1887
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the recirculation pump power. If not provided, the OS-HPXML default is used.")
|
1906
1888
|
args << arg
|
1907
1889
|
|
1908
|
-
arg = OpenStudio::Measure::OSArgument::
|
1890
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_pipe_r', false)
|
1909
1891
|
arg.setDisplayName('Hot Water Distribution: Pipe Insulation Nominal R-Value')
|
1910
1892
|
arg.setUnits('h-ft^2-R/Btu')
|
1911
|
-
arg.setDescription('Nominal R-value of the pipe insulation.')
|
1912
|
-
arg.setDefaultValue(Constants.Auto)
|
1893
|
+
arg.setDescription('Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default is used.')
|
1913
1894
|
args << arg
|
1914
1895
|
|
1915
1896
|
dwhr_facilities_connected_choices = OpenStudio::StringVector.new
|
@@ -1948,10 +1929,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1948
1929
|
arg.setDefaultValue(false)
|
1949
1930
|
args << arg
|
1950
1931
|
|
1951
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_fixtures_usage_multiplier',
|
1932
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_fixtures_usage_multiplier', false)
|
1952
1933
|
arg.setDisplayName('Hot Water Fixtures: Usage Multiplier')
|
1953
|
-
arg.setDescription('Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants.')
|
1954
|
-
arg.setDefaultValue(1.0)
|
1934
|
+
arg.setDescription('Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
1955
1935
|
args << arg
|
1956
1936
|
|
1957
1937
|
solar_thermal_system_type_choices = OpenStudio::StringVector.new
|
@@ -2017,16 +1997,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2017
1997
|
|
2018
1998
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('solar_thermal_collector_rated_thermal_losses', true)
|
2019
1999
|
arg.setDisplayName('Solar Thermal: Collector Rated Thermal Losses')
|
2020
|
-
arg.setUnits('
|
2000
|
+
arg.setUnits('Btu/hr-ft^2-R')
|
2021
2001
|
arg.setDescription('The collector rated thermal losses of the solar thermal system.')
|
2022
2002
|
arg.setDefaultValue(0.2799)
|
2023
2003
|
args << arg
|
2024
2004
|
|
2025
|
-
arg = OpenStudio::Measure::OSArgument::
|
2005
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('solar_thermal_storage_volume', false)
|
2026
2006
|
arg.setDisplayName('Solar Thermal: Storage Volume')
|
2027
|
-
arg.setUnits('
|
2028
|
-
arg.setDescription('The storage volume of the solar thermal system.')
|
2029
|
-
arg.setDefaultValue(Constants.Auto)
|
2007
|
+
arg.setUnits('gal')
|
2008
|
+
arg.setDescription('The storage volume of the solar thermal system. If not provided, the OS-HPXML default is used.')
|
2030
2009
|
args << arg
|
2031
2010
|
|
2032
2011
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('solar_thermal_solar_fraction', true)
|
@@ -2037,40 +2016,39 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2037
2016
|
args << arg
|
2038
2017
|
|
2039
2018
|
pv_system_module_type_choices = OpenStudio::StringVector.new
|
2040
|
-
pv_system_module_type_choices << 'none'
|
2041
|
-
pv_system_module_type_choices << Constants.Auto
|
2042
2019
|
pv_system_module_type_choices << HPXML::PVModuleTypeStandard
|
2043
2020
|
pv_system_module_type_choices << HPXML::PVModuleTypePremium
|
2044
2021
|
pv_system_module_type_choices << HPXML::PVModuleTypeThinFilm
|
2045
2022
|
|
2046
2023
|
pv_system_location_choices = OpenStudio::StringVector.new
|
2047
|
-
pv_system_location_choices << Constants.Auto
|
2048
2024
|
pv_system_location_choices << HPXML::LocationRoof
|
2049
2025
|
pv_system_location_choices << HPXML::LocationGround
|
2050
2026
|
|
2051
2027
|
pv_system_tracking_choices = OpenStudio::StringVector.new
|
2052
|
-
pv_system_tracking_choices << Constants.Auto
|
2053
2028
|
pv_system_tracking_choices << HPXML::PVTrackingTypeFixed
|
2054
2029
|
pv_system_tracking_choices << HPXML::PVTrackingType1Axis
|
2055
2030
|
pv_system_tracking_choices << HPXML::PVTrackingType1AxisBacktracked
|
2056
2031
|
pv_system_tracking_choices << HPXML::PVTrackingType2Axis
|
2057
2032
|
|
2058
|
-
arg = OpenStudio::Measure::OSArgument::
|
2033
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('pv_system_present', true)
|
2034
|
+
arg.setDisplayName('PV System: Present')
|
2035
|
+
arg.setDescription('Whether there is a PV system present.')
|
2036
|
+
arg.setDefaultValue(false)
|
2037
|
+
args << arg
|
2038
|
+
|
2039
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_module_type', pv_system_module_type_choices, false)
|
2059
2040
|
arg.setDisplayName('PV System: Module Type')
|
2060
|
-
arg.setDescription(
|
2061
|
-
arg.setDefaultValue('none')
|
2041
|
+
arg.setDescription('Module type of the PV system. If not provided, the OS-HPXML default is used.')
|
2062
2042
|
args << arg
|
2063
2043
|
|
2064
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_location', pv_system_location_choices,
|
2044
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_location', pv_system_location_choices, false)
|
2065
2045
|
arg.setDisplayName('PV System: Location')
|
2066
|
-
arg.setDescription('Location of the PV system.')
|
2067
|
-
arg.setDefaultValue(Constants.Auto)
|
2046
|
+
arg.setDescription('Location of the PV system. If not provided, the OS-HPXML default is used.')
|
2068
2047
|
args << arg
|
2069
2048
|
|
2070
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_tracking', pv_system_tracking_choices,
|
2049
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_tracking', pv_system_tracking_choices, false)
|
2071
2050
|
arg.setDisplayName('PV System: Tracking')
|
2072
|
-
arg.setDescription('
|
2073
|
-
arg.setDefaultValue(Constants.Auto)
|
2051
|
+
arg.setDescription('Type of tracking for the PV system. If not provided, the OS-HPXML default is used.')
|
2074
2052
|
args << arg
|
2075
2053
|
|
2076
2054
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_array_azimuth', true)
|
@@ -2097,38 +2075,40 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2097
2075
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_inverter_efficiency', false)
|
2098
2076
|
arg.setDisplayName('PV System: Inverter Efficiency')
|
2099
2077
|
arg.setUnits('Frac')
|
2100
|
-
arg.setDescription('Inverter efficiency of the PV system. If there are two PV systems, this will apply to both.')
|
2078
|
+
arg.setDescription('Inverter efficiency of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default is used.')
|
2101
2079
|
args << arg
|
2102
2080
|
|
2103
2081
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_system_losses_fraction', false)
|
2104
2082
|
arg.setDisplayName('PV System: System Losses Fraction')
|
2105
2083
|
arg.setUnits('Frac')
|
2106
|
-
arg.setDescription('System losses fraction of the PV system. If there are two PV systems, this will apply to both.')
|
2084
|
+
arg.setDescription('System losses fraction of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default is used.')
|
2107
2085
|
args << arg
|
2108
2086
|
|
2109
|
-
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('pv_system_num_bedrooms_served',
|
2087
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('pv_system_num_bedrooms_served', false)
|
2110
2088
|
arg.setDisplayName('PV System: Number of Bedrooms Served')
|
2111
|
-
arg.setDescription("Number of bedrooms served by PV system.
|
2089
|
+
arg.setDescription("Number of bedrooms served by PV system. Required if #{HPXML::ResidentialTypeSFA} or #{HPXML::ResidentialTypeApartment}. Used to apportion PV generation to the unit of a SFA/MF building. If there are two PV systems, this will apply to both.")
|
2112
2090
|
arg.setUnits('#')
|
2113
|
-
arg.setDefaultValue(3)
|
2114
2091
|
args << arg
|
2115
2092
|
|
2116
|
-
arg = OpenStudio::Measure::OSArgument::
|
2093
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('pv_system_2_present', true)
|
2094
|
+
arg.setDisplayName('PV System 2: Present')
|
2095
|
+
arg.setDescription('Whether there is a second PV system present.')
|
2096
|
+
arg.setDefaultValue(false)
|
2097
|
+
args << arg
|
2098
|
+
|
2099
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_module_type', pv_system_module_type_choices, false)
|
2117
2100
|
arg.setDisplayName('PV System 2: Module Type')
|
2118
|
-
arg.setDescription(
|
2119
|
-
arg.setDefaultValue('none')
|
2101
|
+
arg.setDescription('Module type of the second PV system. If not provided, the OS-HPXML default is used.')
|
2120
2102
|
args << arg
|
2121
2103
|
|
2122
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_location', pv_system_location_choices,
|
2104
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_location', pv_system_location_choices, false)
|
2123
2105
|
arg.setDisplayName('PV System 2: Location')
|
2124
|
-
arg.setDescription('Location of the second PV system.')
|
2125
|
-
arg.setDefaultValue(Constants.Auto)
|
2106
|
+
arg.setDescription('Location of the second PV system. If not provided, the OS-HPXML default is used.')
|
2126
2107
|
args << arg
|
2127
2108
|
|
2128
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_tracking', pv_system_tracking_choices,
|
2109
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_tracking', pv_system_tracking_choices, false)
|
2129
2110
|
arg.setDisplayName('PV System 2: Tracking')
|
2130
|
-
arg.setDescription('
|
2131
|
-
arg.setDefaultValue(Constants.Auto)
|
2111
|
+
arg.setDescription('Type of tracking for the second PV system. If not provided, the OS-HPXML default is used.')
|
2132
2112
|
args << arg
|
2133
2113
|
|
2134
2114
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_2_array_azimuth', true)
|
@@ -2153,8 +2133,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2153
2133
|
args << arg
|
2154
2134
|
|
2155
2135
|
battery_location_choices = OpenStudio::StringVector.new
|
2156
|
-
battery_location_choices << Constants.Auto
|
2157
|
-
battery_location_choices << 'none'
|
2158
2136
|
battery_location_choices << HPXML::LocationLivingSpace
|
2159
2137
|
battery_location_choices << HPXML::LocationBasementConditioned
|
2160
2138
|
battery_location_choices << HPXML::LocationBasementUnconditioned
|
@@ -2166,33 +2144,42 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2166
2144
|
battery_location_choices << HPXML::LocationGarage
|
2167
2145
|
battery_location_choices << HPXML::LocationOutside
|
2168
2146
|
|
2169
|
-
arg = OpenStudio::Measure::OSArgument::
|
2147
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('battery_present', true)
|
2148
|
+
arg.setDisplayName('Battery: Present')
|
2149
|
+
arg.setDescription('Whether there is a lithium ion battery present.')
|
2150
|
+
arg.setDefaultValue(false)
|
2151
|
+
args << arg
|
2152
|
+
|
2153
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('battery_location', battery_location_choices, false)
|
2170
2154
|
arg.setDisplayName('Battery: Location')
|
2171
|
-
arg.setDescription('The space type for the lithium ion battery location.')
|
2172
|
-
arg.setDefaultValue('none')
|
2155
|
+
arg.setDescription('The space type for the lithium ion battery location. If not provided, the OS-HPXML default is used.')
|
2173
2156
|
args << arg
|
2174
2157
|
|
2175
|
-
arg = OpenStudio::Measure::OSArgument::
|
2158
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_power', false)
|
2176
2159
|
arg.setDisplayName('Battery: Rated Power Output')
|
2177
|
-
arg.setDescription('The rated power output of the lithium ion battery.')
|
2160
|
+
arg.setDescription('The rated power output of the lithium ion battery. If not provided, the OS-HPXML default is used.')
|
2178
2161
|
arg.setUnits('W')
|
2179
|
-
arg.setDefaultValue(Constants.Auto)
|
2180
2162
|
args << arg
|
2181
2163
|
|
2182
|
-
arg = OpenStudio::Measure::OSArgument::
|
2164
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_capacity', false)
|
2183
2165
|
arg.setDisplayName('Battery: Nominal Capacity')
|
2184
|
-
arg.setDescription('The nominal capacity of the lithium ion battery.')
|
2166
|
+
arg.setDescription('The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML default is used.')
|
2185
2167
|
arg.setUnits('kWh')
|
2186
|
-
arg.setDefaultValue(Constants.Auto)
|
2187
2168
|
args << arg
|
2188
2169
|
|
2189
|
-
arg = OpenStudio::Measure::OSArgument::
|
2170
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_usable_capacity', false)
|
2190
2171
|
arg.setDisplayName('Battery: Usable Capacity')
|
2191
|
-
arg.setDescription('The usable capacity of the lithium ion battery.')
|
2172
|
+
arg.setDescription('The usable capacity of the lithium ion battery. If not provided, the OS-HPXML default is used.')
|
2192
2173
|
arg.setUnits('kWh')
|
2193
2174
|
args << arg
|
2194
2175
|
|
2195
|
-
arg = OpenStudio::Measure::OSArgument::
|
2176
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_round_trip_efficiency', false)
|
2177
|
+
arg.setDisplayName('Battery: Round Trip Efficiency')
|
2178
|
+
arg.setDescription('The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default is used.')
|
2179
|
+
arg.setUnits('Frac')
|
2180
|
+
args << arg
|
2181
|
+
|
2182
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('lighting_present', true)
|
2196
2183
|
arg.setDisplayName('Lighting: Present')
|
2197
2184
|
arg.setDescription('Whether there is lighting energy use.')
|
2198
2185
|
arg.setDefaultValue(true)
|
@@ -2216,10 +2203,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2216
2203
|
arg.setDefaultValue(0.0)
|
2217
2204
|
args << arg
|
2218
2205
|
|
2219
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_interior_usage_multiplier',
|
2206
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_interior_usage_multiplier', false)
|
2220
2207
|
arg.setDisplayName('Lighting: Interior Usage Multiplier')
|
2221
|
-
arg.setDescription('Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants.')
|
2222
|
-
arg.setDefaultValue(1.0)
|
2208
|
+
arg.setDescription('Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2223
2209
|
args << arg
|
2224
2210
|
|
2225
2211
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_exterior_fraction_cfl', true)
|
@@ -2240,10 +2226,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2240
2226
|
arg.setDefaultValue(0.0)
|
2241
2227
|
args << arg
|
2242
2228
|
|
2243
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_exterior_usage_multiplier',
|
2229
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_exterior_usage_multiplier', false)
|
2244
2230
|
arg.setDisplayName('Lighting: Exterior Usage Multiplier')
|
2245
|
-
arg.setDescription('Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants.')
|
2246
|
-
arg.setDefaultValue(1.0)
|
2231
|
+
arg.setDescription('Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2247
2232
|
args << arg
|
2248
2233
|
|
2249
2234
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_garage_fraction_cfl', true)
|
@@ -2264,10 +2249,9 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2264
2249
|
arg.setDefaultValue(0.0)
|
2265
2250
|
args << arg
|
2266
2251
|
|
2267
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_garage_usage_multiplier',
|
2252
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_garage_usage_multiplier', false)
|
2268
2253
|
arg.setDisplayName('Lighting: Garage Usage Multiplier')
|
2269
|
-
arg.setDescription('Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants.')
|
2270
|
-
arg.setDefaultValue(1.0)
|
2254
|
+
arg.setDescription('Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2271
2255
|
args << arg
|
2272
2256
|
|
2273
2257
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('holiday_lighting_present', true)
|
@@ -2276,16 +2260,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2276
2260
|
arg.setDefaultValue(false)
|
2277
2261
|
args << arg
|
2278
2262
|
|
2279
|
-
arg = OpenStudio::Measure::OSArgument::
|
2263
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('holiday_lighting_daily_kwh', false)
|
2280
2264
|
arg.setDisplayName('Holiday Lighting: Daily Consumption')
|
2281
2265
|
arg.setUnits('kWh/day')
|
2282
|
-
arg.setDescription('The daily energy consumption for holiday lighting (exterior).')
|
2283
|
-
arg.setDefaultValue(Constants.Auto)
|
2266
|
+
arg.setDescription('The daily energy consumption for holiday lighting (exterior). If not provided, the OS-HPXML default is used.')
|
2284
2267
|
args << arg
|
2285
2268
|
|
2286
2269
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('holiday_lighting_period', false)
|
2287
2270
|
arg.setDisplayName('Holiday Lighting: Period')
|
2288
|
-
arg.setDescription('Enter a date like "Nov 25 - Jan 5".')
|
2271
|
+
arg.setDescription('Enter a date like "Nov 25 - Jan 5". If not provided, the OS-HPXML default is used.')
|
2289
2272
|
args << arg
|
2290
2273
|
|
2291
2274
|
dehumidifier_type_choices = OpenStudio::StringVector.new
|
@@ -2338,8 +2321,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2338
2321
|
args << arg
|
2339
2322
|
|
2340
2323
|
appliance_location_choices = OpenStudio::StringVector.new
|
2341
|
-
appliance_location_choices << Constants.Auto
|
2342
|
-
appliance_location_choices << 'none'
|
2343
2324
|
appliance_location_choices << HPXML::LocationLivingSpace
|
2344
2325
|
appliance_location_choices << HPXML::LocationBasementConditioned
|
2345
2326
|
appliance_location_choices << HPXML::LocationBasementUnconditioned
|
@@ -2353,10 +2334,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2353
2334
|
clothes_washer_efficiency_type_choices << 'ModifiedEnergyFactor'
|
2354
2335
|
clothes_washer_efficiency_type_choices << 'IntegratedModifiedEnergyFactor'
|
2355
2336
|
|
2356
|
-
arg = OpenStudio::Measure::OSArgument::
|
2337
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('clothes_washer_present', true)
|
2338
|
+
arg.setDisplayName('Clothes Washer: Present')
|
2339
|
+
arg.setDescription('Whether there is a clothes washer present.')
|
2340
|
+
arg.setDefaultValue(true)
|
2341
|
+
args << arg
|
2342
|
+
|
2343
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_washer_location', appliance_location_choices, false)
|
2357
2344
|
arg.setDisplayName('Clothes Washer: Location')
|
2358
|
-
arg.setDescription('The space type for the clothes washer location.')
|
2359
|
-
arg.setDefaultValue(Constants.Auto)
|
2345
|
+
arg.setDescription('The space type for the clothes washer location. If not provided, the OS-HPXML default is used.')
|
2360
2346
|
args << arg
|
2361
2347
|
|
2362
2348
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_washer_efficiency_type', clothes_washer_efficiency_type_choices, true)
|
@@ -2365,65 +2351,62 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2365
2351
|
arg.setDefaultValue('IntegratedModifiedEnergyFactor')
|
2366
2352
|
args << arg
|
2367
2353
|
|
2368
|
-
arg = OpenStudio::Measure::OSArgument::
|
2354
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_efficiency', false)
|
2369
2355
|
arg.setDisplayName('Clothes Washer: Efficiency')
|
2370
2356
|
arg.setUnits('ft^3/kWh-cyc')
|
2371
|
-
arg.setDescription('The efficiency of the clothes washer.')
|
2372
|
-
arg.setDefaultValue(Constants.Auto)
|
2357
|
+
arg.setDescription('The efficiency of the clothes washer. If not provided, the OS-HPXML default is used.')
|
2373
2358
|
args << arg
|
2374
2359
|
|
2375
|
-
arg = OpenStudio::Measure::OSArgument::
|
2360
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_rated_annual_kwh', false)
|
2376
2361
|
arg.setDisplayName('Clothes Washer: Rated Annual Consumption')
|
2377
2362
|
arg.setUnits('kWh/yr')
|
2378
|
-
arg.setDescription('The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating.')
|
2379
|
-
arg.setDefaultValue(Constants.Auto)
|
2363
|
+
arg.setDescription('The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default is used.')
|
2380
2364
|
args << arg
|
2381
2365
|
|
2382
|
-
arg = OpenStudio::Measure::OSArgument::
|
2366
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_electric_rate', false)
|
2383
2367
|
arg.setDisplayName('Clothes Washer: Label Electric Rate')
|
2384
2368
|
arg.setUnits('$/kWh')
|
2385
|
-
arg.setDescription('The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating.')
|
2386
|
-
arg.setDefaultValue(Constants.Auto)
|
2369
|
+
arg.setDescription('The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default is used.')
|
2387
2370
|
args << arg
|
2388
2371
|
|
2389
|
-
arg = OpenStudio::Measure::OSArgument::
|
2372
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_gas_rate', false)
|
2390
2373
|
arg.setDisplayName('Clothes Washer: Label Gas Rate')
|
2391
2374
|
arg.setUnits('$/therm')
|
2392
|
-
arg.setDescription('The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating.')
|
2393
|
-
arg.setDefaultValue(Constants.Auto)
|
2375
|
+
arg.setDescription('The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default is used.')
|
2394
2376
|
args << arg
|
2395
2377
|
|
2396
|
-
arg = OpenStudio::Measure::OSArgument::
|
2378
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_annual_gas_cost', false)
|
2397
2379
|
arg.setDisplayName('Clothes Washer: Label Annual Cost with Gas DHW')
|
2398
2380
|
arg.setUnits('$')
|
2399
|
-
arg.setDescription('The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label.')
|
2400
|
-
arg.setDefaultValue(Constants.Auto)
|
2381
|
+
arg.setDescription('The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label. If not provided, the OS-HPXML default is used.')
|
2401
2382
|
args << arg
|
2402
2383
|
|
2403
|
-
arg = OpenStudio::Measure::OSArgument::
|
2384
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_usage', false)
|
2404
2385
|
arg.setDisplayName('Clothes Washer: Label Usage')
|
2405
2386
|
arg.setUnits('cyc/wk')
|
2406
|
-
arg.setDescription('The clothes washer loads per week.')
|
2407
|
-
arg.setDefaultValue(Constants.Auto)
|
2387
|
+
arg.setDescription('The clothes washer loads per week. If not provided, the OS-HPXML default is used.')
|
2408
2388
|
args << arg
|
2409
2389
|
|
2410
|
-
arg = OpenStudio::Measure::OSArgument::
|
2390
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_capacity', false)
|
2411
2391
|
arg.setDisplayName('Clothes Washer: Drum Volume')
|
2412
2392
|
arg.setUnits('ft^3')
|
2413
|
-
arg.setDescription("Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature.")
|
2414
|
-
arg.setDefaultValue(Constants.Auto)
|
2393
|
+
arg.setDescription("Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature. If not provided, the OS-HPXML default is used.")
|
2415
2394
|
args << arg
|
2416
2395
|
|
2417
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_usage_multiplier',
|
2396
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_usage_multiplier', false)
|
2418
2397
|
arg.setDisplayName('Clothes Washer: Usage Multiplier')
|
2419
|
-
arg.setDescription('Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants.')
|
2420
|
-
arg.setDefaultValue(1.0)
|
2398
|
+
arg.setDescription('Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2421
2399
|
args << arg
|
2422
2400
|
|
2423
|
-
arg = OpenStudio::Measure::OSArgument::
|
2401
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('clothes_dryer_present', true)
|
2402
|
+
arg.setDisplayName('Clothes Dryer: Present')
|
2403
|
+
arg.setDescription('Whether there is a clothes dryer present.')
|
2404
|
+
arg.setDefaultValue(true)
|
2405
|
+
args << arg
|
2406
|
+
|
2407
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_location', appliance_location_choices, false)
|
2424
2408
|
arg.setDisplayName('Clothes Dryer: Location')
|
2425
|
-
arg.setDescription('The space type for the clothes dryer location.')
|
2426
|
-
arg.setDefaultValue(Constants.Auto)
|
2409
|
+
arg.setDescription('The space type for the clothes dryer location. If not provided, the OS-HPXML default is used.')
|
2427
2410
|
args << arg
|
2428
2411
|
|
2429
2412
|
clothes_dryer_fuel_choices = OpenStudio::StringVector.new
|
@@ -2450,30 +2433,32 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2450
2433
|
arg.setDefaultValue('CombinedEnergyFactor')
|
2451
2434
|
args << arg
|
2452
2435
|
|
2453
|
-
arg = OpenStudio::Measure::OSArgument::
|
2436
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_efficiency', false)
|
2454
2437
|
arg.setDisplayName('Clothes Dryer: Efficiency')
|
2455
2438
|
arg.setUnits('lb/kWh')
|
2456
|
-
arg.setDescription('The efficiency of the clothes dryer.')
|
2457
|
-
arg.setDefaultValue(Constants.Auto)
|
2439
|
+
arg.setDescription('The efficiency of the clothes dryer. If not provided, the OS-HPXML default is used.')
|
2458
2440
|
args << arg
|
2459
2441
|
|
2460
|
-
arg = OpenStudio::Measure::OSArgument::
|
2442
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_vented_flow_rate', false)
|
2461
2443
|
arg.setDisplayName('Clothes Dryer: Vented Flow Rate')
|
2462
|
-
arg.setDescription('The exhaust flow rate of the vented clothes dryer.')
|
2444
|
+
arg.setDescription('The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML default is used.')
|
2463
2445
|
arg.setUnits('CFM')
|
2464
|
-
arg.setDefaultValue(Constants.Auto)
|
2465
2446
|
args << arg
|
2466
2447
|
|
2467
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_usage_multiplier',
|
2448
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_usage_multiplier', false)
|
2468
2449
|
arg.setDisplayName('Clothes Dryer: Usage Multiplier')
|
2469
|
-
arg.setDescription('Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants.')
|
2470
|
-
arg.setDefaultValue(1.0)
|
2450
|
+
arg.setDescription('Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2471
2451
|
args << arg
|
2472
2452
|
|
2473
|
-
arg = OpenStudio::Measure::OSArgument::
|
2453
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('dishwasher_present', true)
|
2454
|
+
arg.setDisplayName('Dishwasher: Present')
|
2455
|
+
arg.setDescription('Whether there is a dishwasher present.')
|
2456
|
+
arg.setDefaultValue(true)
|
2457
|
+
args << arg
|
2458
|
+
|
2459
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dishwasher_location', appliance_location_choices, false)
|
2474
2460
|
arg.setDisplayName('Dishwasher: Location')
|
2475
|
-
arg.setDescription('The space type for the dishwasher location.')
|
2476
|
-
arg.setDefaultValue(Constants.Auto)
|
2461
|
+
arg.setDescription('The space type for the dishwasher location. If not provided, the OS-HPXML default is used.')
|
2477
2462
|
args << arg
|
2478
2463
|
|
2479
2464
|
dishwasher_efficiency_type_choices = OpenStudio::StringVector.new
|
@@ -2486,109 +2471,111 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2486
2471
|
arg.setDefaultValue('RatedAnnualkWh')
|
2487
2472
|
args << arg
|
2488
2473
|
|
2489
|
-
arg = OpenStudio::Measure::OSArgument::
|
2474
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_efficiency', false)
|
2490
2475
|
arg.setDisplayName('Dishwasher: Efficiency')
|
2491
2476
|
arg.setUnits('RatedAnnualkWh or EnergyFactor')
|
2492
|
-
arg.setDescription('The efficiency of the dishwasher.')
|
2493
|
-
arg.setDefaultValue(Constants.Auto)
|
2477
|
+
arg.setDescription('The efficiency of the dishwasher. If not provided, the OS-HPXML default is used.')
|
2494
2478
|
args << arg
|
2495
2479
|
|
2496
|
-
arg = OpenStudio::Measure::OSArgument::
|
2480
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_electric_rate', false)
|
2497
2481
|
arg.setDisplayName('Dishwasher: Label Electric Rate')
|
2498
2482
|
arg.setUnits('$/kWh')
|
2499
|
-
arg.setDescription('The label electric rate of the dishwasher.')
|
2500
|
-
arg.setDefaultValue(Constants.Auto)
|
2483
|
+
arg.setDescription('The label electric rate of the dishwasher. If not provided, the OS-HPXML default is used.')
|
2501
2484
|
args << arg
|
2502
2485
|
|
2503
|
-
arg = OpenStudio::Measure::OSArgument::
|
2486
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_gas_rate', false)
|
2504
2487
|
arg.setDisplayName('Dishwasher: Label Gas Rate')
|
2505
2488
|
arg.setUnits('$/therm')
|
2506
|
-
arg.setDescription('The label gas rate of the dishwasher.')
|
2507
|
-
arg.setDefaultValue(Constants.Auto)
|
2489
|
+
arg.setDescription('The label gas rate of the dishwasher. If not provided, the OS-HPXML default is used.')
|
2508
2490
|
args << arg
|
2509
2491
|
|
2510
|
-
arg = OpenStudio::Measure::OSArgument::
|
2492
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_annual_gas_cost', false)
|
2511
2493
|
arg.setDisplayName('Dishwasher: Label Annual Gas Cost')
|
2512
2494
|
arg.setUnits('$')
|
2513
|
-
arg.setDescription('The label annual gas cost of the dishwasher.')
|
2514
|
-
arg.setDefaultValue(Constants.Auto)
|
2495
|
+
arg.setDescription('The label annual gas cost of the dishwasher. If not provided, the OS-HPXML default is used.')
|
2515
2496
|
args << arg
|
2516
2497
|
|
2517
|
-
arg = OpenStudio::Measure::OSArgument::
|
2498
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_usage', false)
|
2518
2499
|
arg.setDisplayName('Dishwasher: Label Usage')
|
2519
2500
|
arg.setUnits('cyc/wk')
|
2520
|
-
arg.setDescription('The dishwasher loads per week.')
|
2521
|
-
arg.setDefaultValue(Constants.Auto)
|
2501
|
+
arg.setDescription('The dishwasher loads per week. If not provided, the OS-HPXML default is used.')
|
2522
2502
|
args << arg
|
2523
2503
|
|
2524
|
-
arg = OpenStudio::Measure::OSArgument::
|
2504
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('dishwasher_place_setting_capacity', false)
|
2525
2505
|
arg.setDisplayName('Dishwasher: Number of Place Settings')
|
2526
2506
|
arg.setUnits('#')
|
2527
|
-
arg.setDescription("The number of place settings for the unit. Data obtained from manufacturer's literature.")
|
2528
|
-
arg.setDefaultValue(Constants.Auto)
|
2507
|
+
arg.setDescription("The number of place settings for the unit. Data obtained from manufacturer's literature. If not provided, the OS-HPXML default is used.")
|
2529
2508
|
args << arg
|
2530
2509
|
|
2531
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_usage_multiplier',
|
2510
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_usage_multiplier', false)
|
2532
2511
|
arg.setDisplayName('Dishwasher: Usage Multiplier')
|
2533
|
-
arg.setDescription('Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants.')
|
2534
|
-
arg.setDefaultValue(1.0)
|
2512
|
+
arg.setDescription('Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2535
2513
|
args << arg
|
2536
2514
|
|
2537
|
-
arg = OpenStudio::Measure::OSArgument::
|
2515
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('refrigerator_present', true)
|
2516
|
+
arg.setDisplayName('Refrigerator: Present')
|
2517
|
+
arg.setDescription('Whether there is a refrigerator present.')
|
2518
|
+
arg.setDefaultValue(true)
|
2519
|
+
args << arg
|
2520
|
+
|
2521
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('refrigerator_location', appliance_location_choices, false)
|
2538
2522
|
arg.setDisplayName('Refrigerator: Location')
|
2539
|
-
arg.setDescription('The space type for the refrigerator location.')
|
2540
|
-
arg.setDefaultValue(Constants.Auto)
|
2523
|
+
arg.setDescription('The space type for the refrigerator location. If not provided, the OS-HPXML default is used.')
|
2541
2524
|
args << arg
|
2542
2525
|
|
2543
|
-
arg = OpenStudio::Measure::OSArgument::
|
2526
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('refrigerator_rated_annual_kwh', false)
|
2544
2527
|
arg.setDisplayName('Refrigerator: Rated Annual Consumption')
|
2545
2528
|
arg.setUnits('kWh/yr')
|
2546
|
-
arg.setDescription('The EnergyGuide rated annual energy consumption for a refrigerator.')
|
2547
|
-
arg.setDefaultValue(Constants.Auto)
|
2529
|
+
arg.setDescription('The EnergyGuide rated annual energy consumption for a refrigerator. If not provided, the OS-HPXML default is used.')
|
2548
2530
|
args << arg
|
2549
2531
|
|
2550
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('refrigerator_usage_multiplier',
|
2532
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('refrigerator_usage_multiplier', false)
|
2551
2533
|
arg.setDisplayName('Refrigerator: Usage Multiplier')
|
2552
|
-
arg.setDescription('Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants.')
|
2553
|
-
arg.setDefaultValue(1.0)
|
2534
|
+
arg.setDescription('Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2554
2535
|
args << arg
|
2555
2536
|
|
2556
|
-
arg = OpenStudio::Measure::OSArgument::
|
2537
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('extra_refrigerator_present', true)
|
2538
|
+
arg.setDisplayName('Extra Refrigerator: Present')
|
2539
|
+
arg.setDescription('Whether there is an extra refrigerator present.')
|
2540
|
+
arg.setDefaultValue(false)
|
2541
|
+
args << arg
|
2542
|
+
|
2543
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('extra_refrigerator_location', appliance_location_choices, false)
|
2557
2544
|
arg.setDisplayName('Extra Refrigerator: Location')
|
2558
|
-
arg.setDescription('The space type for the extra refrigerator location.')
|
2559
|
-
arg.setDefaultValue('none')
|
2545
|
+
arg.setDescription('The space type for the extra refrigerator location. If not provided, the OS-HPXML default is used.')
|
2560
2546
|
args << arg
|
2561
2547
|
|
2562
|
-
arg = OpenStudio::Measure::OSArgument::
|
2548
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('extra_refrigerator_rated_annual_kwh', false)
|
2563
2549
|
arg.setDisplayName('Extra Refrigerator: Rated Annual Consumption')
|
2564
2550
|
arg.setUnits('kWh/yr')
|
2565
|
-
arg.setDescription('The EnergyGuide rated annual energy consumption for an extra rrefrigerator.')
|
2566
|
-
arg.setDefaultValue(Constants.Auto)
|
2551
|
+
arg.setDescription('The EnergyGuide rated annual energy consumption for an extra rrefrigerator. If not provided, the OS-HPXML default is used.')
|
2567
2552
|
args << arg
|
2568
2553
|
|
2569
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('extra_refrigerator_usage_multiplier',
|
2554
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('extra_refrigerator_usage_multiplier', false)
|
2570
2555
|
arg.setDisplayName('Extra Refrigerator: Usage Multiplier')
|
2571
|
-
arg.setDescription('Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants.')
|
2572
|
-
arg.setDefaultValue(1.0)
|
2556
|
+
arg.setDescription('Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2573
2557
|
args << arg
|
2574
2558
|
|
2575
|
-
arg = OpenStudio::Measure::OSArgument::
|
2559
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('freezer_present', true)
|
2560
|
+
arg.setDisplayName('Freezer: Present')
|
2561
|
+
arg.setDescription('Whether there is a freezer present.')
|
2562
|
+
arg.setDefaultValue(false)
|
2563
|
+
args << arg
|
2564
|
+
|
2565
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('freezer_location', appliance_location_choices, false)
|
2576
2566
|
arg.setDisplayName('Freezer: Location')
|
2577
|
-
arg.setDescription('The space type for the freezer location.')
|
2578
|
-
arg.setDefaultValue('none')
|
2567
|
+
arg.setDescription('The space type for the freezer location. If not provided, the OS-HPXML default is used.')
|
2579
2568
|
args << arg
|
2580
2569
|
|
2581
|
-
arg = OpenStudio::Measure::OSArgument::
|
2570
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('freezer_rated_annual_kwh', false)
|
2582
2571
|
arg.setDisplayName('Freezer: Rated Annual Consumption')
|
2583
2572
|
arg.setUnits('kWh/yr')
|
2584
|
-
arg.setDescription('The EnergyGuide rated annual energy consumption for a freezer.')
|
2585
|
-
arg.setDefaultValue(Constants.Auto)
|
2573
|
+
arg.setDescription('The EnergyGuide rated annual energy consumption for a freezer. If not provided, the OS-HPXML default is used.')
|
2586
2574
|
args << arg
|
2587
2575
|
|
2588
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('freezer_usage_multiplier',
|
2576
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('freezer_usage_multiplier', false)
|
2589
2577
|
arg.setDisplayName('Freezer: Usage Multiplier')
|
2590
|
-
arg.setDescription('Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants.')
|
2591
|
-
arg.setDefaultValue(1.0)
|
2578
|
+
arg.setDescription('Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2592
2579
|
args << arg
|
2593
2580
|
|
2594
2581
|
cooking_range_oven_fuel_choices = OpenStudio::StringVector.new
|
@@ -2599,10 +2586,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2599
2586
|
cooking_range_oven_fuel_choices << HPXML::FuelTypeWoodCord
|
2600
2587
|
cooking_range_oven_fuel_choices << HPXML::FuelTypeCoal
|
2601
2588
|
|
2602
|
-
arg = OpenStudio::Measure::OSArgument::
|
2589
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooking_range_oven_present', true)
|
2590
|
+
arg.setDisplayName('Cooking Range/Oven: Present')
|
2591
|
+
arg.setDescription('Whether there is a cooking range/oven present.')
|
2592
|
+
arg.setDefaultValue(true)
|
2593
|
+
args << arg
|
2594
|
+
|
2595
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooking_range_oven_location', appliance_location_choices, false)
|
2603
2596
|
arg.setDisplayName('Cooking Range/Oven: Location')
|
2604
|
-
arg.setDescription('The space type for the cooking range/oven location.')
|
2605
|
-
arg.setDefaultValue(Constants.Auto)
|
2597
|
+
arg.setDescription('The space type for the cooking range/oven location. If not provided, the OS-HPXML default is used.')
|
2606
2598
|
args << arg
|
2607
2599
|
|
2608
2600
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooking_range_oven_fuel_type', cooking_range_oven_fuel_choices, true)
|
@@ -2613,45 +2605,41 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2613
2605
|
|
2614
2606
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooking_range_oven_is_induction', false)
|
2615
2607
|
arg.setDisplayName('Cooking Range/Oven: Is Induction')
|
2616
|
-
arg.setDescription('Whether the cooking range is induction.')
|
2608
|
+
arg.setDescription('Whether the cooking range is induction. If not provided, the OS-HPXML default is used.')
|
2617
2609
|
args << arg
|
2618
2610
|
|
2619
2611
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooking_range_oven_is_convection', false)
|
2620
2612
|
arg.setDisplayName('Cooking Range/Oven: Is Convection')
|
2621
|
-
arg.setDescription('Whether the oven is convection.')
|
2613
|
+
arg.setDescription('Whether the oven is convection. If not provided, the OS-HPXML default is used.')
|
2622
2614
|
args << arg
|
2623
2615
|
|
2624
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooking_range_oven_usage_multiplier',
|
2616
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooking_range_oven_usage_multiplier', false)
|
2625
2617
|
arg.setDisplayName('Cooking Range/Oven: Usage Multiplier')
|
2626
|
-
arg.setDescription('Multiplier on the cooking range/oven energy usage that can reflect, e.g., high/low usage occupants.')
|
2627
|
-
arg.setDefaultValue(1.0)
|
2618
|
+
arg.setDescription('Multiplier on the cooking range/oven energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2628
2619
|
args << arg
|
2629
2620
|
|
2630
2621
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('ceiling_fan_present', true)
|
2631
2622
|
arg.setDisplayName('Ceiling Fan: Present')
|
2632
|
-
arg.setDescription('Whether there
|
2623
|
+
arg.setDescription('Whether there are any ceiling fans.')
|
2633
2624
|
arg.setDefaultValue(true)
|
2634
2625
|
args << arg
|
2635
2626
|
|
2636
|
-
arg = OpenStudio::Measure::OSArgument::
|
2627
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_efficiency', false)
|
2637
2628
|
arg.setDisplayName('Ceiling Fan: Efficiency')
|
2638
2629
|
arg.setUnits('CFM/W')
|
2639
|
-
arg.setDescription('The efficiency rating of the ceiling fan(s) at medium speed.')
|
2640
|
-
arg.setDefaultValue(Constants.Auto)
|
2630
|
+
arg.setDescription('The efficiency rating of the ceiling fan(s) at medium speed. If not provided, the OS-HPXML default is used.')
|
2641
2631
|
args << arg
|
2642
2632
|
|
2643
|
-
arg = OpenStudio::Measure::OSArgument::
|
2633
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('ceiling_fan_quantity', false)
|
2644
2634
|
arg.setDisplayName('Ceiling Fan: Quantity')
|
2645
2635
|
arg.setUnits('#')
|
2646
|
-
arg.setDescription('Total number of ceiling fans.')
|
2647
|
-
arg.setDefaultValue(Constants.Auto)
|
2636
|
+
arg.setDescription('Total number of ceiling fans. If not provided, the OS-HPXML default is used.')
|
2648
2637
|
args << arg
|
2649
2638
|
|
2650
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_cooling_setpoint_temp_offset',
|
2639
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_cooling_setpoint_temp_offset', false)
|
2651
2640
|
arg.setDisplayName('Ceiling Fan: Cooling Setpoint Temperature Offset')
|
2652
2641
|
arg.setUnits('deg-F')
|
2653
|
-
arg.setDescription('The setpoint temperature offset during cooling season for the ceiling fan(s). Only applies if ceiling fan quantity is greater than zero.')
|
2654
|
-
arg.setDefaultValue(0.0)
|
2642
|
+
arg.setDescription('The setpoint temperature offset during cooling season for the ceiling fan(s). Only applies if ceiling fan quantity is greater than zero. If not provided, the OS-HPXML default is used.')
|
2655
2643
|
args << arg
|
2656
2644
|
|
2657
2645
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_plug_loads_television_present', true)
|
@@ -2660,44 +2648,38 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2660
2648
|
arg.setDefaultValue(true)
|
2661
2649
|
args << arg
|
2662
2650
|
|
2663
|
-
arg = OpenStudio::Measure::OSArgument::
|
2651
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_television_annual_kwh', false)
|
2664
2652
|
arg.setDisplayName('Misc Plug Loads: Television Annual kWh')
|
2665
|
-
arg.setDescription('The annual energy consumption of the television plug loads.')
|
2653
|
+
arg.setDescription('The annual energy consumption of the television plug loads. If not provided, the OS-HPXML default is used.')
|
2666
2654
|
arg.setUnits('kWh/yr')
|
2667
|
-
arg.setDefaultValue(Constants.Auto)
|
2668
2655
|
args << arg
|
2669
2656
|
|
2670
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_television_usage_multiplier',
|
2657
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_television_usage_multiplier', false)
|
2671
2658
|
arg.setDisplayName('Misc Plug Loads: Television Usage Multiplier')
|
2672
|
-
arg.setDescription('Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants.')
|
2673
|
-
arg.setDefaultValue(1.0)
|
2659
|
+
arg.setDescription('Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2674
2660
|
args << arg
|
2675
2661
|
|
2676
|
-
arg = OpenStudio::Measure::OSArgument::
|
2662
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_annual_kwh', false)
|
2677
2663
|
arg.setDisplayName('Misc Plug Loads: Other Annual kWh')
|
2678
|
-
arg.setDescription('The annual energy consumption of the other residual plug loads.')
|
2664
|
+
arg.setDescription('The annual energy consumption of the other residual plug loads. If not provided, the OS-HPXML default is used.')
|
2679
2665
|
arg.setUnits('kWh/yr')
|
2680
|
-
arg.setDefaultValue(Constants.Auto)
|
2681
2666
|
args << arg
|
2682
2667
|
|
2683
|
-
arg = OpenStudio::Measure::OSArgument::
|
2668
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_frac_sensible', false)
|
2684
2669
|
arg.setDisplayName('Misc Plug Loads: Other Sensible Fraction')
|
2685
|
-
arg.setDescription("Fraction of other residual plug loads' internal gains that are sensible.")
|
2670
|
+
arg.setDescription("Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default is used.")
|
2686
2671
|
arg.setUnits('Frac')
|
2687
|
-
arg.setDefaultValue(Constants.Auto)
|
2688
2672
|
args << arg
|
2689
2673
|
|
2690
|
-
arg = OpenStudio::Measure::OSArgument::
|
2674
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_frac_latent', false)
|
2691
2675
|
arg.setDisplayName('Misc Plug Loads: Other Latent Fraction')
|
2692
|
-
arg.setDescription("Fraction of other residual plug loads' internal gains that are latent.")
|
2676
|
+
arg.setDescription("Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default is used.")
|
2693
2677
|
arg.setUnits('Frac')
|
2694
|
-
arg.setDefaultValue(Constants.Auto)
|
2695
2678
|
args << arg
|
2696
2679
|
|
2697
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_usage_multiplier',
|
2680
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_usage_multiplier', false)
|
2698
2681
|
arg.setDisplayName('Misc Plug Loads: Other Usage Multiplier')
|
2699
|
-
arg.setDescription('Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants.')
|
2700
|
-
arg.setDefaultValue(1.0)
|
2682
|
+
arg.setDescription('Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2701
2683
|
args << arg
|
2702
2684
|
|
2703
2685
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_plug_loads_well_pump_present', true)
|
@@ -2706,17 +2688,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2706
2688
|
arg.setDefaultValue(false)
|
2707
2689
|
args << arg
|
2708
2690
|
|
2709
|
-
arg = OpenStudio::Measure::OSArgument::
|
2691
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_well_pump_annual_kwh', false)
|
2710
2692
|
arg.setDisplayName('Misc Plug Loads: Well Pump Annual kWh')
|
2711
|
-
arg.setDescription('The annual energy consumption of the well pump plug loads.')
|
2693
|
+
arg.setDescription('The annual energy consumption of the well pump plug loads. If not provided, the OS-HPXML default is used.')
|
2712
2694
|
arg.setUnits('kWh/yr')
|
2713
|
-
arg.setDefaultValue(Constants.Auto)
|
2714
2695
|
args << arg
|
2715
2696
|
|
2716
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_well_pump_usage_multiplier',
|
2697
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_well_pump_usage_multiplier', false)
|
2717
2698
|
arg.setDisplayName('Misc Plug Loads: Well Pump Usage Multiplier')
|
2718
|
-
arg.setDescription('Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants.')
|
2719
|
-
arg.setDefaultValue(1.0)
|
2699
|
+
arg.setDescription('Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2720
2700
|
args << arg
|
2721
2701
|
|
2722
2702
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_plug_loads_vehicle_present', true)
|
@@ -2725,17 +2705,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2725
2705
|
arg.setDefaultValue(false)
|
2726
2706
|
args << arg
|
2727
2707
|
|
2728
|
-
arg = OpenStudio::Measure::OSArgument::
|
2708
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_vehicle_annual_kwh', false)
|
2729
2709
|
arg.setDisplayName('Misc Plug Loads: Vehicle Annual kWh')
|
2730
|
-
arg.setDescription('The annual energy consumption of the electric vehicle plug loads.')
|
2710
|
+
arg.setDescription('The annual energy consumption of the electric vehicle plug loads. If not provided, the OS-HPXML default is used.')
|
2731
2711
|
arg.setUnits('kWh/yr')
|
2732
|
-
arg.setDefaultValue(Constants.Auto)
|
2733
2712
|
args << arg
|
2734
2713
|
|
2735
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_vehicle_usage_multiplier',
|
2714
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_vehicle_usage_multiplier', false)
|
2736
2715
|
arg.setDisplayName('Misc Plug Loads: Vehicle Usage Multiplier')
|
2737
|
-
arg.setDescription('Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants.')
|
2738
|
-
arg.setDefaultValue(1.0)
|
2716
|
+
arg.setDescription('Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2739
2717
|
args << arg
|
2740
2718
|
|
2741
2719
|
misc_fuel_loads_fuel_choices = OpenStudio::StringVector.new
|
@@ -2745,11 +2723,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2745
2723
|
misc_fuel_loads_fuel_choices << HPXML::FuelTypeWoodCord
|
2746
2724
|
misc_fuel_loads_fuel_choices << HPXML::FuelTypeWoodPellets
|
2747
2725
|
|
2748
|
-
misc_fuel_loads_location_choices = OpenStudio::StringVector.new
|
2749
|
-
misc_fuel_loads_location_choices << Constants.Auto
|
2750
|
-
misc_fuel_loads_location_choices << HPXML::LocationInterior
|
2751
|
-
misc_fuel_loads_location_choices << HPXML::LocationExterior
|
2752
|
-
|
2753
2726
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_fuel_loads_grill_present', true)
|
2754
2727
|
arg.setDisplayName('Misc Fuel Loads: Grill Present')
|
2755
2728
|
arg.setDescription('Whether there is a fuel loads grill.')
|
@@ -2762,17 +2735,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2762
2735
|
arg.setDefaultValue(HPXML::FuelTypeNaturalGas)
|
2763
2736
|
args << arg
|
2764
2737
|
|
2765
|
-
arg = OpenStudio::Measure::OSArgument::
|
2738
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_grill_annual_therm', false)
|
2766
2739
|
arg.setDisplayName('Misc Fuel Loads: Grill Annual therm')
|
2767
|
-
arg.setDescription('The annual energy consumption of the fuel loads grill.')
|
2740
|
+
arg.setDescription('The annual energy consumption of the fuel loads grill. If not provided, the OS-HPXML default is used.')
|
2768
2741
|
arg.setUnits('therm/yr')
|
2769
|
-
arg.setDefaultValue(Constants.Auto)
|
2770
2742
|
args << arg
|
2771
2743
|
|
2772
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_grill_usage_multiplier',
|
2744
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_grill_usage_multiplier', false)
|
2773
2745
|
arg.setDisplayName('Misc Fuel Loads: Grill Usage Multiplier')
|
2774
|
-
arg.setDescription('Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants.')
|
2775
|
-
arg.setDefaultValue(0.0)
|
2746
|
+
arg.setDescription('Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2776
2747
|
args << arg
|
2777
2748
|
|
2778
2749
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_fuel_loads_lighting_present', true)
|
@@ -2787,17 +2758,15 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2787
2758
|
arg.setDefaultValue(HPXML::FuelTypeNaturalGas)
|
2788
2759
|
args << arg
|
2789
2760
|
|
2790
|
-
arg = OpenStudio::Measure::OSArgument::
|
2761
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_lighting_annual_therm', false)
|
2791
2762
|
arg.setDisplayName('Misc Fuel Loads: Lighting Annual therm')
|
2792
|
-
arg.setDescription('The annual energy consumption of the fuel loads lighting.')
|
2763
|
+
arg.setDescription('The annual energy consumption of the fuel loads lighting. If not provided, the OS-HPXML default is used.')
|
2793
2764
|
arg.setUnits('therm/yr')
|
2794
|
-
arg.setDefaultValue(Constants.Auto)
|
2795
2765
|
args << arg
|
2796
2766
|
|
2797
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_lighting_usage_multiplier',
|
2767
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_lighting_usage_multiplier', false)
|
2798
2768
|
arg.setDisplayName('Misc Fuel Loads: Lighting Usage Multiplier')
|
2799
|
-
arg.setDescription('Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants.')
|
2800
|
-
arg.setDefaultValue(0.0)
|
2769
|
+
arg.setDescription('Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2801
2770
|
args << arg
|
2802
2771
|
|
2803
2772
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_fuel_loads_fireplace_present', true)
|
@@ -2812,31 +2781,27 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2812
2781
|
arg.setDefaultValue(HPXML::FuelTypeNaturalGas)
|
2813
2782
|
args << arg
|
2814
2783
|
|
2815
|
-
arg = OpenStudio::Measure::OSArgument::
|
2784
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_annual_therm', false)
|
2816
2785
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Annual therm')
|
2817
|
-
arg.setDescription('The annual energy consumption of the fuel loads fireplace.')
|
2786
|
+
arg.setDescription('The annual energy consumption of the fuel loads fireplace. If not provided, the OS-HPXML default is used.')
|
2818
2787
|
arg.setUnits('therm/yr')
|
2819
|
-
arg.setDefaultValue(Constants.Auto)
|
2820
2788
|
args << arg
|
2821
2789
|
|
2822
|
-
arg = OpenStudio::Measure::OSArgument::
|
2790
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_frac_sensible', false)
|
2823
2791
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Sensible Fraction')
|
2824
|
-
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are sensible.")
|
2792
|
+
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default is used.")
|
2825
2793
|
arg.setUnits('Frac')
|
2826
|
-
arg.setDefaultValue(Constants.Auto)
|
2827
2794
|
args << arg
|
2828
2795
|
|
2829
|
-
arg = OpenStudio::Measure::OSArgument::
|
2796
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_frac_latent', false)
|
2830
2797
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Latent Fraction')
|
2831
|
-
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are latent.")
|
2798
|
+
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default is used.")
|
2832
2799
|
arg.setUnits('Frac')
|
2833
|
-
arg.setDefaultValue(Constants.Auto)
|
2834
2800
|
args << arg
|
2835
2801
|
|
2836
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_usage_multiplier',
|
2802
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_usage_multiplier', false)
|
2837
2803
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Usage Multiplier')
|
2838
|
-
arg.setDescription('Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants.')
|
2839
|
-
arg.setDefaultValue(0.0)
|
2804
|
+
arg.setDescription('Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2840
2805
|
args << arg
|
2841
2806
|
|
2842
2807
|
heater_type_choices = OpenStudio::StringVector.new
|
@@ -2851,43 +2816,38 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2851
2816
|
arg.setDefaultValue(false)
|
2852
2817
|
args << arg
|
2853
2818
|
|
2854
|
-
arg = OpenStudio::Measure::OSArgument::
|
2819
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_pump_annual_kwh', false)
|
2855
2820
|
arg.setDisplayName('Pool: Pump Annual kWh')
|
2856
|
-
arg.setDescription('The annual energy consumption of the pool pump.')
|
2821
|
+
arg.setDescription('The annual energy consumption of the pool pump. If not provided, the OS-HPXML default is used.')
|
2857
2822
|
arg.setUnits('kWh/yr')
|
2858
|
-
arg.setDefaultValue(Constants.Auto)
|
2859
2823
|
args << arg
|
2860
2824
|
|
2861
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_pump_usage_multiplier',
|
2825
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_pump_usage_multiplier', false)
|
2862
2826
|
arg.setDisplayName('Pool: Pump Usage Multiplier')
|
2863
|
-
arg.setDescription('Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants.')
|
2864
|
-
arg.setDefaultValue(1.0)
|
2827
|
+
arg.setDescription('Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2865
2828
|
args << arg
|
2866
2829
|
|
2867
2830
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pool_heater_type', heater_type_choices, true)
|
2868
2831
|
arg.setDisplayName('Pool: Heater Type')
|
2869
|
-
arg.setDescription("The type of pool heater. Use '
|
2832
|
+
arg.setDescription("The type of pool heater. Use '#{HPXML::TypeNone}' if there is no pool heater.")
|
2870
2833
|
arg.setDefaultValue(HPXML::TypeNone)
|
2871
2834
|
args << arg
|
2872
2835
|
|
2873
|
-
arg = OpenStudio::Measure::OSArgument::
|
2836
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_annual_kwh', false)
|
2874
2837
|
arg.setDisplayName('Pool: Heater Annual kWh')
|
2875
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} pool heater.")
|
2838
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} pool heater. If not provided, the OS-HPXML default is used.")
|
2876
2839
|
arg.setUnits('kWh/yr')
|
2877
|
-
arg.setDefaultValue(Constants.Auto)
|
2878
2840
|
args << arg
|
2879
2841
|
|
2880
|
-
arg = OpenStudio::Measure::OSArgument::
|
2842
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_annual_therm', false)
|
2881
2843
|
arg.setDisplayName('Pool: Heater Annual therm')
|
2882
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} pool heater.")
|
2844
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} pool heater. If not provided, the OS-HPXML default is used.")
|
2883
2845
|
arg.setUnits('therm/yr')
|
2884
|
-
arg.setDefaultValue(Constants.Auto)
|
2885
2846
|
args << arg
|
2886
2847
|
|
2887
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_usage_multiplier',
|
2848
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_usage_multiplier', false)
|
2888
2849
|
arg.setDisplayName('Pool: Heater Usage Multiplier')
|
2889
|
-
arg.setDescription('Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants.')
|
2890
|
-
arg.setDefaultValue(1.0)
|
2850
|
+
arg.setDescription('Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2891
2851
|
args << arg
|
2892
2852
|
|
2893
2853
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('hot_tub_present', true)
|
@@ -2896,48 +2856,43 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2896
2856
|
arg.setDefaultValue(false)
|
2897
2857
|
args << arg
|
2898
2858
|
|
2899
|
-
arg = OpenStudio::Measure::OSArgument::
|
2859
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_pump_annual_kwh', false)
|
2900
2860
|
arg.setDisplayName('Hot Tub: Pump Annual kWh')
|
2901
|
-
arg.setDescription('The annual energy consumption of the hot tub pump.')
|
2861
|
+
arg.setDescription('The annual energy consumption of the hot tub pump. If not provided, the OS-HPXML default is used.')
|
2902
2862
|
arg.setUnits('kWh/yr')
|
2903
|
-
arg.setDefaultValue(Constants.Auto)
|
2904
2863
|
args << arg
|
2905
2864
|
|
2906
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_pump_usage_multiplier',
|
2865
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_pump_usage_multiplier', false)
|
2907
2866
|
arg.setDisplayName('Hot Tub: Pump Usage Multiplier')
|
2908
|
-
arg.setDescription('Multiplier on the hot tub pump energy usage that can reflect, e.g., high/low usage occupants.')
|
2909
|
-
arg.setDefaultValue(1.0)
|
2867
|
+
arg.setDescription('Multiplier on the hot tub pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2910
2868
|
args << arg
|
2911
2869
|
|
2912
2870
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('hot_tub_heater_type', heater_type_choices, true)
|
2913
2871
|
arg.setDisplayName('Hot Tub: Heater Type')
|
2914
|
-
arg.setDescription("The type of hot tub heater. Use '
|
2872
|
+
arg.setDescription("The type of hot tub heater. Use '#{HPXML::TypeNone}' if there is no hot tub heater.")
|
2915
2873
|
arg.setDefaultValue(HPXML::TypeNone)
|
2916
2874
|
args << arg
|
2917
2875
|
|
2918
|
-
arg = OpenStudio::Measure::OSArgument::
|
2876
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_heater_annual_kwh', false)
|
2919
2877
|
arg.setDisplayName('Hot Tub: Heater Annual kWh')
|
2920
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} hot tub heater.")
|
2878
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} hot tub heater. If not provided, the OS-HPXML default is used.")
|
2921
2879
|
arg.setUnits('kWh/yr')
|
2922
|
-
arg.setDefaultValue(Constants.Auto)
|
2923
2880
|
args << arg
|
2924
2881
|
|
2925
|
-
arg = OpenStudio::Measure::OSArgument::
|
2882
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_heater_annual_therm', false)
|
2926
2883
|
arg.setDisplayName('Hot Tub: Heater Annual therm')
|
2927
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} hot tub heater.")
|
2884
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} hot tub heater. If not provided, the OS-HPXML default is used.")
|
2928
2885
|
arg.setUnits('therm/yr')
|
2929
|
-
arg.setDefaultValue(Constants.Auto)
|
2930
2886
|
args << arg
|
2931
2887
|
|
2932
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_heater_usage_multiplier',
|
2888
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_tub_heater_usage_multiplier', false)
|
2933
2889
|
arg.setDisplayName('Hot Tub: Heater Usage Multiplier')
|
2934
|
-
arg.setDescription('Multiplier on the hot tub heater energy usage that can reflect, e.g., high/low usage occupants.')
|
2935
|
-
arg.setDefaultValue(1.0)
|
2890
|
+
arg.setDescription('Multiplier on the hot tub heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default is used.')
|
2936
2891
|
args << arg
|
2937
2892
|
|
2938
2893
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('emissions_scenario_names', false)
|
2939
2894
|
arg.setDisplayName('Emissions: Scenario Names')
|
2940
|
-
arg.setDescription('Names of emissions scenarios. If multiple scenarios, use a comma-separated list.')
|
2895
|
+
arg.setDescription('Names of emissions scenarios. If multiple scenarios, use a comma-separated list. If not provided, no emissions scenarios are calculated.')
|
2941
2896
|
args << arg
|
2942
2897
|
|
2943
2898
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('emissions_types', false)
|
@@ -2981,6 +2936,68 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2981
2936
|
args << arg
|
2982
2937
|
end
|
2983
2938
|
|
2939
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_scenario_names', false)
|
2940
|
+
arg.setDisplayName('Utility Bills: Scenario Names')
|
2941
|
+
arg.setDescription('Names of utility bill scenarios. If multiple scenarios, use a comma-separated list. If not provided, no utility bills scenarios are calculated.')
|
2942
|
+
args << arg
|
2943
|
+
|
2944
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_electricity_filepaths', false)
|
2945
|
+
arg.setDisplayName('Utility Bills: Electricity File Paths')
|
2946
|
+
arg.setDescription('Electricity tariff file specified as an absolute/relative path to a file with utility rate structure information. Tariff file must be formatted to OpenEI API version 7. If multiple scenarios, use a comma-separated list.')
|
2947
|
+
args << arg
|
2948
|
+
|
2949
|
+
([HPXML::FuelTypeElectricity] + Constants.FossilFuels).each do |fuel|
|
2950
|
+
underscore_case = OpenStudio::toUnderscoreCase(fuel)
|
2951
|
+
all_caps_case = fuel.split(' ').map(&:capitalize).join(' ')
|
2952
|
+
cap_case = fuel.capitalize
|
2953
|
+
|
2954
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument("utility_bill_#{underscore_case}_fixed_charges", false)
|
2955
|
+
arg.setDisplayName("Utility Bills: #{all_caps_case} Fixed Charges")
|
2956
|
+
arg.setDescription("#{cap_case} utility bill monthly fixed charges. If multiple scenarios, use a comma-separated list.")
|
2957
|
+
args << arg
|
2958
|
+
end
|
2959
|
+
|
2960
|
+
([HPXML::FuelTypeElectricity] + Constants.FossilFuels).each do |fuel|
|
2961
|
+
underscore_case = OpenStudio::toUnderscoreCase(fuel)
|
2962
|
+
all_caps_case = fuel.split(' ').map(&:capitalize).join(' ')
|
2963
|
+
cap_case = fuel.capitalize
|
2964
|
+
|
2965
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument("utility_bill_#{underscore_case}_marginal_rates", false)
|
2966
|
+
arg.setDisplayName("Utility Bills: #{all_caps_case} Marginal Rates")
|
2967
|
+
arg.setDescription("#{cap_case} utility bill marginal rates. If multiple scenarios, use a comma-separated list.")
|
2968
|
+
args << arg
|
2969
|
+
end
|
2970
|
+
|
2971
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_pv_compensation_types', false)
|
2972
|
+
arg.setDisplayName('Utility Bills: PV Compensation Types')
|
2973
|
+
arg.setDescription('Utility bill PV compensation types. If multiple scenarios, use a comma-separated list.')
|
2974
|
+
args << arg
|
2975
|
+
|
2976
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_pv_net_metering_annual_excess_sellback_rate_types', false)
|
2977
|
+
arg.setDisplayName('Utility Bills: PV Net Metering Annual Excess Sellback Rate Types')
|
2978
|
+
arg.setDescription("Utility bill PV net metering annual excess sellback rate types. Only applies if the PV compensation type is '#{HPXML::PVCompensationTypeNetMetering}'. If multiple scenarios, use a comma-separated list.")
|
2979
|
+
args << arg
|
2980
|
+
|
2981
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_pv_net_metering_annual_excess_sellback_rates', false)
|
2982
|
+
arg.setDisplayName('Utility Bills: PV Net Metering Annual Excess Sellback Rates')
|
2983
|
+
arg.setDescription("Utility bill PV net metering annual excess sellback rates. Only applies if the PV compensation type is '#{HPXML::PVCompensationTypeNetMetering}' and the PV annual excess sellback rate type is '#{HPXML::PVAnnualExcessSellbackRateTypeUserSpecified}'. If multiple scenarios, use a comma-separated list.")
|
2984
|
+
args << arg
|
2985
|
+
|
2986
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_pv_feed_in_tariff_rates', false)
|
2987
|
+
arg.setDisplayName('Utility Bills: PV Feed-In Tariff Rates')
|
2988
|
+
arg.setDescription("Utility bill PV annual full/gross feed-in tariff rates. Only applies if the PV compensation type is '#{HPXML::PVCompensationTypeFeedInTariff}'. If multiple scenarios, use a comma-separated list.")
|
2989
|
+
args << arg
|
2990
|
+
|
2991
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_pv_monthly_grid_connection_fee_units', false)
|
2992
|
+
arg.setDisplayName('Utility Bills: PV Monthly Grid Connection Fee Units')
|
2993
|
+
arg.setDescription('Utility bill PV monthly grid connection fee units. If multiple scenarios, use a comma-separated list.')
|
2994
|
+
args << arg
|
2995
|
+
|
2996
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('utility_bill_pv_monthly_grid_connection_fees', false)
|
2997
|
+
arg.setDisplayName('Utility Bills: PV Monthly Grid Connection Fees')
|
2998
|
+
arg.setDescription('Utility bill PV monthly grid connection fees. If multiple scenarios, use a comma-separated list.')
|
2999
|
+
args << arg
|
3000
|
+
|
2984
3001
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('additional_properties', false)
|
2985
3002
|
arg.setDisplayName('Additional Properties')
|
2986
3003
|
arg.setDescription("Additional properties specified as key-value pairs (i.e., key=value). If multiple additional properties, use a |-separated list. For example, 'LowIncome=false|Remodeled|Description=2-story home in Denver'. These properties will be stored in the HPXML file under /HPXML/SoftwareInfo/extension/AdditionalProperties.")
|
@@ -3052,9 +3069,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3052
3069
|
|
3053
3070
|
hpxml_path = args[:hpxml_path]
|
3054
3071
|
unless (Pathname.new hpxml_path).absolute?
|
3055
|
-
hpxml_path = File.expand_path(
|
3072
|
+
hpxml_path = File.expand_path(hpxml_path)
|
3056
3073
|
end
|
3057
3074
|
|
3075
|
+
XMLHelper.write_file(hpxml_doc, hpxml_path)
|
3076
|
+
runner.registerInfo("Wrote file: #{hpxml_path}")
|
3077
|
+
|
3058
3078
|
# Check for invalid HPXML file
|
3059
3079
|
if args[:apply_validation].is_initialized && args[:apply_validation].get
|
3060
3080
|
if not validate_hpxml(runner, hpxml_path, hpxml_doc)
|
@@ -3062,9 +3082,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3062
3082
|
end
|
3063
3083
|
end
|
3064
3084
|
|
3065
|
-
XMLHelper.write_file(hpxml_doc, hpxml_path)
|
3066
|
-
runner.registerInfo("Wrote file: #{hpxml_path}")
|
3067
|
-
|
3068
3085
|
# Uncomment for debugging purposes
|
3069
3086
|
# File.write(hpxml_path.gsub('.xml', '.osm'), model.to_s)
|
3070
3087
|
|
@@ -3105,29 +3122,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3105
3122
|
warning = (args[:geometry_attic_type] == HPXML::AtticTypeConditioned) && (args[:ceiling_assembly_r] > 2.1)
|
3106
3123
|
warnings << 'Home with conditioned attic has ceiling insulation.' if warning
|
3107
3124
|
|
3108
|
-
if args[:misc_plug_loads_television_annual_kwh] != Constants.Auto
|
3109
|
-
warning = (args[:misc_plug_loads_television_annual_kwh].to_f == 0.0 && args[:misc_plug_loads_television_usage_multiplier] != 0.0)
|
3110
|
-
warnings << 'Specified a non-zero usage multiplier for zero television plug loads.' if warning
|
3111
|
-
end
|
3112
|
-
|
3113
|
-
if args[:misc_plug_loads_other_annual_kwh] != Constants.Auto
|
3114
|
-
warning = (args[:misc_plug_loads_other_annual_kwh].to_f == 0.0 && args[:misc_plug_loads_other_usage_multiplier] != 0.0)
|
3115
|
-
warnings << 'Specified a non-zero usage multiplier for zero other plug loads.' if warning
|
3116
|
-
end
|
3117
|
-
|
3118
|
-
if args[:misc_plug_loads_well_pump_annual_kwh] != Constants.Auto
|
3119
|
-
warning = (args[:misc_plug_loads_well_pump_annual_kwh].to_f == 0.0 && args[:misc_plug_loads_well_pump_usage_multiplier] != 0.0)
|
3120
|
-
warnings << 'Specified a non-zero usage multiplier for zero well pump plug loads.' if warning
|
3121
|
-
end
|
3122
|
-
|
3123
|
-
if args[:misc_plug_loads_vehicle_annual_kwh] != Constants.Auto
|
3124
|
-
warning = (args[:misc_plug_loads_vehicle_annual_kwh].to_f && args[:misc_plug_loads_vehicle_usage_multiplier] != 0.0)
|
3125
|
-
warnings << 'Specified a non-zero usage multiplier for zero vehicle plug loads.' if warning
|
3126
|
-
end
|
3127
|
-
|
3128
|
-
warning = (!args[:misc_fuel_loads_grill_present] && args[:misc_fuel_loads_grill_usage_multiplier] != 0.0) || (!args[:misc_fuel_loads_lighting_present] && args[:misc_fuel_loads_lighting_usage_multiplier] != 0.0) || (!args[:misc_fuel_loads_fireplace_present] && args[:misc_fuel_loads_fireplace_usage_multiplier] != 0.0)
|
3129
|
-
warnings << 'Specified a non-zero usage multiplier for a fuel load that is zero.' if warning
|
3130
|
-
|
3131
3125
|
return warnings
|
3132
3126
|
end
|
3133
3127
|
|
@@ -3140,24 +3134,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3140
3134
|
error = (args[:cooling_system_type] != 'none') && (args[:heat_pump_type] != 'none') && (args[:cooling_system_fraction_cool_load_served] > 0) && (args[:heat_pump_fraction_cool_load_served] > 0)
|
3141
3135
|
errors << 'Multiple central cooling systems are not currently supported.' if error
|
3142
3136
|
|
3143
|
-
if args[:geometry_unit_num_bathrooms] != Constants.Auto
|
3144
|
-
error = (Float(args[:geometry_unit_num_bathrooms]) % 1 != 0)
|
3145
|
-
errors << 'Number of bathrooms must be an integer.' if error
|
3146
|
-
end
|
3147
|
-
|
3148
|
-
if args[:ceiling_fan_quantity] != Constants.Auto
|
3149
|
-
error = (Float(args[:ceiling_fan_quantity]) % 1 != 0)
|
3150
|
-
errors << 'Quantity of ceiling fans must be an integer.' if error
|
3151
|
-
end
|
3152
|
-
|
3153
3137
|
error = ![HPXML::FoundationTypeSlab, HPXML::FoundationTypeAboveApartment].include?(args[:geometry_foundation_type]) && (args[:geometry_foundation_height] == 0)
|
3154
3138
|
errors << "Foundation type of '#{args[:geometry_foundation_type]}' cannot have a height of zero." if error
|
3155
3139
|
|
3156
3140
|
error = (args[:geometry_unit_type] == HPXML::ResidentialTypeApartment) && ([HPXML::FoundationTypeBasementConditioned, HPXML::FoundationTypeCrawlspaceConditioned].include? args[:geometry_foundation_type])
|
3157
3141
|
errors << 'Conditioned basement/crawlspace foundation type for apartment units is not currently supported.' if error
|
3158
3142
|
|
3159
|
-
error = (
|
3160
|
-
errors << 'Duct location and surface area not both
|
3143
|
+
error = (args[:ducts_supply_location].is_initialized != args[:ducts_supply_surface_area].is_initialized) || (args[:ducts_return_location].is_initialized != args[:ducts_return_surface_area].is_initialized)
|
3144
|
+
errors << 'Duct location and surface area not both defaulted or not both specified.' if error
|
3161
3145
|
|
3162
3146
|
error = (args[:heating_system_2_type] != 'none') && (args[:heating_system_2_fraction_heat_load_served] == 1.0)
|
3163
3147
|
errors << 'The fraction of heat load served by the second heating system is 100%.' if error
|
@@ -3230,6 +3214,20 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3230
3214
|
errors << 'One or more emissions arguments does not have enough comma-separated elements specified.' if error
|
3231
3215
|
end
|
3232
3216
|
|
3217
|
+
bills_args_initialized = [args[:utility_bill_scenario_names].is_initialized]
|
3218
|
+
if bills_args_initialized.uniq[0]
|
3219
|
+
bills_scenario_lengths = [args[:utility_bill_scenario_names].get.count(',')]
|
3220
|
+
([HPXML::FuelTypeElectricity] + Constants.FossilFuels).each do |fuel|
|
3221
|
+
underscore_case = OpenStudio::toUnderscoreCase(fuel)
|
3222
|
+
|
3223
|
+
bills_scenario_lengths += [args["utility_bill_#{underscore_case}_fixed_charges".to_sym].get.count(',')] if args["utility_bill_#{underscore_case}_fixed_charges".to_sym].is_initialized
|
3224
|
+
bills_scenario_lengths += [args["utility_bill_#{underscore_case}_marginal_rates".to_sym].get.count(',')] if args["utility_bill_#{underscore_case}_marginal_rates".to_sym].is_initialized
|
3225
|
+
end
|
3226
|
+
|
3227
|
+
error = (bills_scenario_lengths.uniq.size != 1)
|
3228
|
+
errors << 'One or more utility bill arguments does not have enough comma-separated elements specified.' if error
|
3229
|
+
end
|
3230
|
+
|
3233
3231
|
error = (args[:geometry_unit_aspect_ratio] <= 0)
|
3234
3232
|
errors << 'Aspect ratio must be greater than zero.' if error
|
3235
3233
|
|
@@ -3270,27 +3268,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3270
3268
|
end
|
3271
3269
|
|
3272
3270
|
def validate_hpxml(runner, hpxml_path, hpxml_doc)
|
3273
|
-
schemas_dir = File.join(File.dirname(__FILE__), '../HPXMLtoOpenStudio/resources/hpxml_schema')
|
3274
|
-
schematron_dir = File.join(File.dirname(__FILE__), '../HPXMLtoOpenStudio/resources/hpxml_schematron')
|
3275
|
-
|
3276
3271
|
is_valid = true
|
3277
3272
|
|
3278
3273
|
# Validate input HPXML against schema
|
3279
|
-
|
3280
|
-
|
3281
|
-
|
3282
|
-
end
|
3274
|
+
schema_dir = File.join(File.dirname(__FILE__), '../HPXMLtoOpenStudio/resources/hpxml_schema')
|
3275
|
+
schema_path = File.join(schema_dir, 'HPXML.xsd')
|
3276
|
+
xsd_errors, xsd_warnings = XMLValidator.validate_against_schema(hpxml_path, schema_path)
|
3283
3277
|
|
3284
3278
|
# Validate input HPXML against schematron docs
|
3285
|
-
|
3286
|
-
|
3287
|
-
|
3288
|
-
|
3279
|
+
schematron_dir = File.join(File.dirname(__FILE__), '../HPXMLtoOpenStudio/resources/hpxml_schematron')
|
3280
|
+
schematron_path = File.join(schematron_dir, 'EPvalidator.xml')
|
3281
|
+
sct_errors, sct_warnings = XMLValidator.validate_against_schematron(hpxml_path, schematron_path, hpxml_doc)
|
3282
|
+
|
3283
|
+
# Handle errors/warnings
|
3284
|
+
(xsd_errors + sct_errors).each do |error|
|
3289
3285
|
runner.registerError("#{hpxml_path}: #{error}")
|
3290
3286
|
is_valid = false
|
3291
3287
|
end
|
3292
|
-
|
3293
|
-
runner.registerWarning("#{warning}")
|
3288
|
+
(xsd_warnings + sct_warnings).each do |warning|
|
3289
|
+
runner.registerWarning("#{hpxml_path}: #{warning}")
|
3294
3290
|
end
|
3295
3291
|
|
3296
3292
|
return is_valid
|
@@ -3299,6 +3295,11 @@ end
|
|
3299
3295
|
|
3300
3296
|
class HPXMLFile
|
3301
3297
|
def self.create(runner, model, args, epw_file)
|
3298
|
+
if (args[:hvac_control_heating_season_period].to_s == HPXML::BuildingAmerica) || (args[:hvac_control_cooling_season_period].to_s == HPXML::BuildingAmerica) || (args[:apply_defaults].is_initialized && args[:apply_defaults].get)
|
3299
|
+
OpenStudio::Model::WeatherFile.setWeatherFile(model, epw_file)
|
3300
|
+
weather = WeatherProcess.new(model, runner)
|
3301
|
+
end
|
3302
|
+
|
3302
3303
|
success = create_geometry_envelope(runner, model, args)
|
3303
3304
|
return false if not success
|
3304
3305
|
|
@@ -3310,61 +3311,61 @@ class HPXMLFile
|
|
3310
3311
|
|
3311
3312
|
hpxml = HPXML.new
|
3312
3313
|
|
3313
|
-
set_header(hpxml,
|
3314
|
-
set_site(hpxml,
|
3315
|
-
set_neighbor_buildings(hpxml,
|
3316
|
-
set_building_occupancy(hpxml,
|
3317
|
-
set_building_construction(hpxml,
|
3318
|
-
set_climate_and_risk_zones(hpxml,
|
3319
|
-
set_air_infiltration_measurements(hpxml,
|
3320
|
-
set_roofs(hpxml,
|
3321
|
-
set_rim_joists(hpxml,
|
3322
|
-
set_walls(hpxml,
|
3323
|
-
set_foundation_walls(hpxml,
|
3324
|
-
|
3325
|
-
set_slabs(hpxml,
|
3326
|
-
set_windows(hpxml,
|
3327
|
-
set_skylights(hpxml,
|
3328
|
-
set_doors(hpxml,
|
3329
|
-
set_attics(hpxml,
|
3330
|
-
set_foundations(hpxml,
|
3331
|
-
set_heating_systems(hpxml,
|
3332
|
-
set_cooling_systems(hpxml,
|
3333
|
-
set_heat_pumps(hpxml,
|
3334
|
-
set_secondary_heating_systems(hpxml,
|
3335
|
-
set_hvac_distribution(hpxml,
|
3336
|
-
set_hvac_control(hpxml,
|
3337
|
-
set_ventilation_fans(hpxml,
|
3338
|
-
set_water_heating_systems(hpxml,
|
3339
|
-
set_hot_water_distribution(hpxml,
|
3340
|
-
set_water_fixtures(hpxml,
|
3341
|
-
set_solar_thermal(hpxml,
|
3342
|
-
set_pv_systems(hpxml,
|
3343
|
-
set_battery(hpxml,
|
3344
|
-
set_lighting(hpxml,
|
3345
|
-
set_dehumidifier(hpxml,
|
3346
|
-
set_clothes_washer(hpxml,
|
3347
|
-
set_clothes_dryer(hpxml,
|
3348
|
-
set_dishwasher(hpxml,
|
3349
|
-
set_refrigerator(hpxml,
|
3350
|
-
set_extra_refrigerator(hpxml,
|
3351
|
-
set_freezer(hpxml,
|
3352
|
-
set_cooking_range_oven(hpxml,
|
3353
|
-
set_ceiling_fans(hpxml,
|
3354
|
-
set_misc_plug_loads_television(hpxml,
|
3355
|
-
set_misc_plug_loads_other(hpxml,
|
3356
|
-
set_misc_plug_loads_vehicle(hpxml,
|
3357
|
-
set_misc_plug_loads_well_pump(hpxml,
|
3358
|
-
set_misc_fuel_loads_grill(hpxml,
|
3359
|
-
set_misc_fuel_loads_lighting(hpxml,
|
3360
|
-
set_misc_fuel_loads_fireplace(hpxml,
|
3361
|
-
set_pool(hpxml,
|
3362
|
-
set_hot_tub(hpxml,
|
3314
|
+
set_header(hpxml, args)
|
3315
|
+
set_site(hpxml, args)
|
3316
|
+
set_neighbor_buildings(hpxml, args)
|
3317
|
+
set_building_occupancy(hpxml, args)
|
3318
|
+
set_building_construction(hpxml, args)
|
3319
|
+
set_climate_and_risk_zones(hpxml, args)
|
3320
|
+
set_air_infiltration_measurements(hpxml, args)
|
3321
|
+
set_roofs(hpxml, args, sorted_surfaces)
|
3322
|
+
set_rim_joists(hpxml, model, args, sorted_surfaces)
|
3323
|
+
set_walls(hpxml, model, args, sorted_surfaces)
|
3324
|
+
set_foundation_walls(hpxml, model, args, sorted_surfaces)
|
3325
|
+
set_floors(hpxml, args, sorted_surfaces)
|
3326
|
+
set_slabs(hpxml, model, args, sorted_surfaces)
|
3327
|
+
set_windows(hpxml, model, args, sorted_subsurfaces)
|
3328
|
+
set_skylights(hpxml, args, sorted_subsurfaces)
|
3329
|
+
set_doors(hpxml, model, args, sorted_subsurfaces)
|
3330
|
+
set_attics(hpxml, args)
|
3331
|
+
set_foundations(hpxml, args)
|
3332
|
+
set_heating_systems(hpxml, args)
|
3333
|
+
set_cooling_systems(hpxml, args)
|
3334
|
+
set_heat_pumps(hpxml, args)
|
3335
|
+
set_secondary_heating_systems(hpxml, args)
|
3336
|
+
set_hvac_distribution(hpxml, args)
|
3337
|
+
set_hvac_control(hpxml, args, epw_file, weather)
|
3338
|
+
set_ventilation_fans(hpxml, args)
|
3339
|
+
set_water_heating_systems(hpxml, args)
|
3340
|
+
set_hot_water_distribution(hpxml, args)
|
3341
|
+
set_water_fixtures(hpxml, args)
|
3342
|
+
set_solar_thermal(hpxml, args, epw_file)
|
3343
|
+
set_pv_systems(hpxml, args, epw_file)
|
3344
|
+
set_battery(hpxml, args)
|
3345
|
+
set_lighting(hpxml, args)
|
3346
|
+
set_dehumidifier(hpxml, args)
|
3347
|
+
set_clothes_washer(hpxml, args)
|
3348
|
+
set_clothes_dryer(hpxml, args)
|
3349
|
+
set_dishwasher(hpxml, args)
|
3350
|
+
set_refrigerator(hpxml, args)
|
3351
|
+
set_extra_refrigerator(hpxml, args)
|
3352
|
+
set_freezer(hpxml, args)
|
3353
|
+
set_cooking_range_oven(hpxml, args)
|
3354
|
+
set_ceiling_fans(hpxml, args)
|
3355
|
+
set_misc_plug_loads_television(hpxml, args)
|
3356
|
+
set_misc_plug_loads_other(hpxml, args)
|
3357
|
+
set_misc_plug_loads_vehicle(hpxml, args)
|
3358
|
+
set_misc_plug_loads_well_pump(hpxml, args)
|
3359
|
+
set_misc_fuel_loads_grill(hpxml, args)
|
3360
|
+
set_misc_fuel_loads_lighting(hpxml, args)
|
3361
|
+
set_misc_fuel_loads_fireplace(hpxml, args)
|
3362
|
+
set_pool(hpxml, args)
|
3363
|
+
set_hot_tub(hpxml, args)
|
3363
3364
|
|
3364
3365
|
# Collapse surfaces so that we don't get, e.g., individual windows
|
3365
3366
|
# or the front wall split because of the door. Exclude foundation walls
|
3366
3367
|
# from the list so we get all 4 foundation walls.
|
3367
|
-
hpxml.collapse_enclosure_surfaces([:roofs, :walls, :rim_joists, :
|
3368
|
+
hpxml.collapse_enclosure_surfaces([:roofs, :walls, :rim_joists, :floors,
|
3368
3369
|
:slabs, :windows, :skylights, :doors])
|
3369
3370
|
|
3370
3371
|
# After surfaces are collapsed, round all areas
|
@@ -3372,7 +3373,7 @@ class HPXMLFile
|
|
3372
3373
|
hpxml.rim_joists +
|
3373
3374
|
hpxml.walls +
|
3374
3375
|
hpxml.foundation_walls +
|
3375
|
-
hpxml.
|
3376
|
+
hpxml.floors +
|
3376
3377
|
hpxml.slabs +
|
3377
3378
|
hpxml.windows +
|
3378
3379
|
hpxml.skylights +
|
@@ -3390,9 +3391,7 @@ class HPXMLFile
|
|
3390
3391
|
|
3391
3392
|
if args[:apply_defaults].is_initialized && args[:apply_defaults].get
|
3392
3393
|
eri_version = Constants.ERIVersions[-1]
|
3393
|
-
|
3394
|
-
weather = WeatherProcess.new(model, runner)
|
3395
|
-
HPXMLDefaults.apply(hpxml, eri_version, weather, epw_file: epw_file)
|
3394
|
+
HPXMLDefaults.apply(runner, hpxml, eri_version, weather, epw_file: epw_file)
|
3396
3395
|
end
|
3397
3396
|
|
3398
3397
|
hpxml_doc = hpxml.to_oga()
|
@@ -3436,9 +3435,9 @@ class HPXMLFile
|
|
3436
3435
|
if args[:geometry_unit_type] == HPXML::ResidentialTypeSFD
|
3437
3436
|
success = Geometry.create_single_family_detached(runner: runner, model: model, **args)
|
3438
3437
|
elsif args[:geometry_unit_type] == HPXML::ResidentialTypeSFA
|
3439
|
-
success = Geometry.create_single_family_attached(
|
3438
|
+
success = Geometry.create_single_family_attached(model: model, **args)
|
3440
3439
|
elsif args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
|
3441
|
-
success = Geometry.create_apartment(
|
3440
|
+
success = Geometry.create_apartment(model: model, **args)
|
3442
3441
|
end
|
3443
3442
|
return false if not success
|
3444
3443
|
|
@@ -3451,7 +3450,7 @@ class HPXMLFile
|
|
3451
3450
|
return true
|
3452
3451
|
end
|
3453
3452
|
|
3454
|
-
def self.set_header(hpxml,
|
3453
|
+
def self.set_header(hpxml, args)
|
3455
3454
|
hpxml.header.xml_type = 'HPXML'
|
3456
3455
|
hpxml.header.xml_generated_by = 'BuildResidentialHPXML'
|
3457
3456
|
hpxml.header.transaction = 'create'
|
@@ -3459,6 +3458,9 @@ class HPXMLFile
|
|
3459
3458
|
if args[:occupancy_calculation_type].is_initialized
|
3460
3459
|
hpxml.header.occupancy_calculation_type = args[:occupancy_calculation_type].get
|
3461
3460
|
end
|
3461
|
+
if args[:window_natvent_availability].is_initialized
|
3462
|
+
hpxml.header.natvent_days_per_week = args[:window_natvent_availability].get
|
3463
|
+
end
|
3462
3464
|
if args[:schedules_filepaths].is_initialized
|
3463
3465
|
hpxml.header.schedules_filepaths = args[:schedules_filepaths].get.split(',').map(&:strip)
|
3464
3466
|
end
|
@@ -3466,7 +3468,6 @@ class HPXMLFile
|
|
3466
3468
|
if args[:software_info_program_used].is_initialized
|
3467
3469
|
hpxml.header.software_program_used = args[:software_info_program_used].get
|
3468
3470
|
end
|
3469
|
-
|
3470
3471
|
if args[:software_info_program_version].is_initialized
|
3471
3472
|
hpxml.header.software_program_version = args[:software_info_program_version].get
|
3472
3473
|
end
|
@@ -3498,6 +3499,10 @@ class HPXMLFile
|
|
3498
3499
|
hpxml.header.dst_end_day = end_day
|
3499
3500
|
end
|
3500
3501
|
|
3502
|
+
if args[:simulation_control_temperature_capacitance_multiplier].is_initialized
|
3503
|
+
hpxml.header.temperature_capacitance_multiplier = args[:simulation_control_temperature_capacitance_multiplier].get
|
3504
|
+
end
|
3505
|
+
|
3501
3506
|
hpxml.header.building_id = 'MyBuilding'
|
3502
3507
|
hpxml.header.event_type = 'proposed workscope'
|
3503
3508
|
|
@@ -3595,6 +3600,157 @@ class HPXMLFile
|
|
3595
3600
|
end
|
3596
3601
|
end
|
3597
3602
|
|
3603
|
+
if args[:utility_bill_scenario_names].is_initialized
|
3604
|
+
bills_scenario_names = args[:utility_bill_scenario_names].get.split(',').map(&:strip)
|
3605
|
+
|
3606
|
+
if args[:utility_bill_electricity_filepaths].is_initialized
|
3607
|
+
bills_electricity_filepaths = args[:utility_bill_electricity_filepaths].get.split(',').map(&:strip)
|
3608
|
+
else
|
3609
|
+
bills_electricity_filepaths = [nil] * bills_scenario_names.size
|
3610
|
+
end
|
3611
|
+
|
3612
|
+
fixed_charges = {}
|
3613
|
+
([HPXML::FuelTypeElectricity] + Constants.FossilFuels).each do |fuel|
|
3614
|
+
underscore_case = OpenStudio::toUnderscoreCase(fuel)
|
3615
|
+
|
3616
|
+
if args["utility_bill_#{underscore_case}_fixed_charges".to_sym].is_initialized
|
3617
|
+
fixed_charges[fuel] = args["utility_bill_#{underscore_case}_fixed_charges".to_sym].get.split(',').map(&:strip)
|
3618
|
+
else
|
3619
|
+
fixed_charges[fuel] = [nil] * bills_scenario_names.size
|
3620
|
+
end
|
3621
|
+
end
|
3622
|
+
|
3623
|
+
marginal_rates = {}
|
3624
|
+
([HPXML::FuelTypeElectricity] + Constants.FossilFuels).each do |fuel|
|
3625
|
+
underscore_case = OpenStudio::toUnderscoreCase(fuel)
|
3626
|
+
|
3627
|
+
if args["utility_bill_#{underscore_case}_marginal_rates".to_sym].is_initialized
|
3628
|
+
marginal_rates[fuel] = args["utility_bill_#{underscore_case}_marginal_rates".to_sym].get.split(',').map(&:strip)
|
3629
|
+
else
|
3630
|
+
marginal_rates[fuel] = [nil] * bills_scenario_names.size
|
3631
|
+
end
|
3632
|
+
end
|
3633
|
+
|
3634
|
+
if args[:utility_bill_pv_compensation_types].is_initialized
|
3635
|
+
bills_pv_compensation_types = args[:utility_bill_pv_compensation_types].get.split(',').map(&:strip)
|
3636
|
+
else
|
3637
|
+
bills_pv_compensation_types = [nil] * bills_scenario_names.size
|
3638
|
+
end
|
3639
|
+
|
3640
|
+
if args[:utility_bill_pv_net_metering_annual_excess_sellback_rate_types].is_initialized
|
3641
|
+
bills_pv_net_metering_annual_excess_sellback_rate_types = args[:utility_bill_pv_net_metering_annual_excess_sellback_rate_types].get.split(',').map(&:strip)
|
3642
|
+
else
|
3643
|
+
bills_pv_net_metering_annual_excess_sellback_rate_types = [nil] * bills_scenario_names.size
|
3644
|
+
end
|
3645
|
+
|
3646
|
+
if args[:utility_bill_pv_net_metering_annual_excess_sellback_rates].is_initialized
|
3647
|
+
bills_pv_net_metering_annual_excess_sellback_rates = args[:utility_bill_pv_net_metering_annual_excess_sellback_rates].get.split(',').map(&:strip)
|
3648
|
+
else
|
3649
|
+
bills_pv_net_metering_annual_excess_sellback_rates = [nil] * bills_scenario_names.size
|
3650
|
+
end
|
3651
|
+
|
3652
|
+
if args[:utility_bill_pv_feed_in_tariff_rates].is_initialized
|
3653
|
+
bills_pv_feed_in_tariff_rates = args[:utility_bill_pv_feed_in_tariff_rates].get.split(',').map(&:strip)
|
3654
|
+
else
|
3655
|
+
bills_pv_feed_in_tariff_rates = [nil] * bills_scenario_names.size
|
3656
|
+
end
|
3657
|
+
|
3658
|
+
if args[:utility_bill_pv_monthly_grid_connection_fee_units].is_initialized
|
3659
|
+
bills_pv_monthly_grid_connection_fee_units = args[:utility_bill_pv_monthly_grid_connection_fee_units].get.split(',').map(&:strip)
|
3660
|
+
else
|
3661
|
+
bills_pv_monthly_grid_connection_fee_units = [nil] * bills_scenario_names.size
|
3662
|
+
end
|
3663
|
+
|
3664
|
+
if args[:utility_bill_pv_monthly_grid_connection_fees].is_initialized
|
3665
|
+
bills_pv_monthly_grid_connection_fees = args[:utility_bill_pv_monthly_grid_connection_fees].get.split(',').map(&:strip)
|
3666
|
+
else
|
3667
|
+
bills_pv_monthly_grid_connection_fees = [nil] * bills_scenario_names.size
|
3668
|
+
end
|
3669
|
+
|
3670
|
+
bills_scenarios = bills_scenario_names.zip(bills_electricity_filepaths,
|
3671
|
+
fixed_charges[HPXML::FuelTypeElectricity],
|
3672
|
+
fixed_charges[HPXML::FuelTypeNaturalGas],
|
3673
|
+
fixed_charges[HPXML::FuelTypePropane],
|
3674
|
+
fixed_charges[HPXML::FuelTypeOil],
|
3675
|
+
fixed_charges[HPXML::FuelTypeCoal],
|
3676
|
+
fixed_charges[HPXML::FuelTypeWoodCord],
|
3677
|
+
fixed_charges[HPXML::FuelTypeWoodPellets],
|
3678
|
+
marginal_rates[HPXML::FuelTypeElectricity],
|
3679
|
+
marginal_rates[HPXML::FuelTypeNaturalGas],
|
3680
|
+
marginal_rates[HPXML::FuelTypePropane],
|
3681
|
+
marginal_rates[HPXML::FuelTypeOil],
|
3682
|
+
marginal_rates[HPXML::FuelTypeCoal],
|
3683
|
+
marginal_rates[HPXML::FuelTypeWoodCord],
|
3684
|
+
marginal_rates[HPXML::FuelTypeWoodPellets],
|
3685
|
+
bills_pv_compensation_types,
|
3686
|
+
bills_pv_net_metering_annual_excess_sellback_rate_types,
|
3687
|
+
bills_pv_net_metering_annual_excess_sellback_rates,
|
3688
|
+
bills_pv_feed_in_tariff_rates,
|
3689
|
+
bills_pv_monthly_grid_connection_fee_units,
|
3690
|
+
bills_pv_monthly_grid_connection_fees)
|
3691
|
+
|
3692
|
+
bills_scenarios.each do |bills_scenario|
|
3693
|
+
name, elec_tariff_filepath, elec_fixed_charge, natural_gas_fixed_charge, propane_fixed_charge, fuel_oil_fixed_charge, coal_fixed_charge, wood_fixed_charge, wood_pellets_fixed_charge, elec_marginal_rate, natural_gas_marginal_rate, propane_marginal_rate, fuel_oil_marginal_rate, coal_marginal_rate, wood_marginal_rate, wood_pellets_marginal_rate, pv_compensation_type, pv_net_metering_annual_excess_sellback_rate_type, pv_net_metering_annual_excess_sellback_rate, pv_feed_in_tariff_rate, pv_monthly_grid_connection_fee_unit, pv_monthly_grid_connection_fee = bills_scenario
|
3694
|
+
elec_tariff_filepath = (elec_tariff_filepath.to_s.include?('.') ? elec_tariff_filepath : nil)
|
3695
|
+
elec_fixed_charge = Float(elec_fixed_charge) rescue nil
|
3696
|
+
natural_gas_fixed_charge = Float(natural_gas_fixed_charge) rescue nil
|
3697
|
+
propane_fixed_charge = Float(propane_fixed_charge) rescue nil
|
3698
|
+
fuel_oil_fixed_charge = Float(fuel_oil_fixed_charge) rescue nil
|
3699
|
+
coal_fixed_charge = Float(coal_fixed_charge) rescue nil
|
3700
|
+
wood_fixed_charge = Float(wood_fixed_charge) rescue nil
|
3701
|
+
wood_pellets_fixed_charge = Float(wood_pellets_fixed_charge) rescue nil
|
3702
|
+
elec_marginal_rate = Float(elec_marginal_rate) rescue nil
|
3703
|
+
natural_gas_marginal_rate = Float(natural_gas_marginal_rate) rescue nil
|
3704
|
+
propane_marginal_rate = Float(propane_marginal_rate) rescue nil
|
3705
|
+
fuel_oil_marginal_rate = Float(fuel_oil_marginal_rate) rescue nil
|
3706
|
+
coal_marginal_rate = Float(coal_marginal_rate) rescue nil
|
3707
|
+
wood_marginal_rate = Float(wood_marginal_rate) rescue nil
|
3708
|
+
wood_pellets_marginal_rate = Float(wood_pellets_marginal_rate) rescue nil
|
3709
|
+
|
3710
|
+
if pv_compensation_type == HPXML::PVCompensationTypeNetMetering
|
3711
|
+
if pv_net_metering_annual_excess_sellback_rate_type == HPXML::PVAnnualExcessSellbackRateTypeUserSpecified
|
3712
|
+
pv_net_metering_annual_excess_sellback_rate = Float(pv_net_metering_annual_excess_sellback_rate) rescue nil
|
3713
|
+
else
|
3714
|
+
pv_net_metering_annual_excess_sellback_rate = nil
|
3715
|
+
end
|
3716
|
+
pv_feed_in_tariff_rate = nil
|
3717
|
+
elsif pv_compensation_type == HPXML::PVCompensationTypeFeedInTariff
|
3718
|
+
pv_feed_in_tariff_rate = Float(pv_feed_in_tariff_rate) rescue nil
|
3719
|
+
pv_net_metering_annual_excess_sellback_rate_type = nil
|
3720
|
+
pv_net_metering_annual_excess_sellback_rate = nil
|
3721
|
+
end
|
3722
|
+
|
3723
|
+
if pv_monthly_grid_connection_fee_unit == HPXML::UnitsDollarsPerkW
|
3724
|
+
pv_monthly_grid_connection_fee_dollars_per_kw = Float(pv_monthly_grid_connection_fee) rescue nil
|
3725
|
+
elsif pv_monthly_grid_connection_fee_unit == HPXML::UnitsDollars
|
3726
|
+
pv_monthly_grid_connection_fee_dollars = Float(pv_monthly_grid_connection_fee) rescue nil
|
3727
|
+
end
|
3728
|
+
|
3729
|
+
hpxml.header.utility_bill_scenarios.add(name: name,
|
3730
|
+
elec_tariff_filepath: elec_tariff_filepath,
|
3731
|
+
elec_fixed_charge: elec_fixed_charge,
|
3732
|
+
natural_gas_fixed_charge: natural_gas_fixed_charge,
|
3733
|
+
propane_fixed_charge: propane_fixed_charge,
|
3734
|
+
fuel_oil_fixed_charge: fuel_oil_fixed_charge,
|
3735
|
+
coal_fixed_charge: coal_fixed_charge,
|
3736
|
+
wood_fixed_charge: wood_fixed_charge,
|
3737
|
+
wood_pellets_fixed_charge: wood_pellets_fixed_charge,
|
3738
|
+
elec_marginal_rate: elec_marginal_rate,
|
3739
|
+
natural_gas_marginal_rate: natural_gas_marginal_rate,
|
3740
|
+
propane_marginal_rate: propane_marginal_rate,
|
3741
|
+
fuel_oil_marginal_rate: fuel_oil_marginal_rate,
|
3742
|
+
coal_marginal_rate: coal_marginal_rate,
|
3743
|
+
wood_marginal_rate: wood_marginal_rate,
|
3744
|
+
wood_pellets_marginal_rate: wood_pellets_marginal_rate,
|
3745
|
+
pv_compensation_type: pv_compensation_type,
|
3746
|
+
pv_net_metering_annual_excess_sellback_rate_type: pv_net_metering_annual_excess_sellback_rate_type,
|
3747
|
+
pv_net_metering_annual_excess_sellback_rate: pv_net_metering_annual_excess_sellback_rate,
|
3748
|
+
pv_feed_in_tariff_rate: pv_feed_in_tariff_rate,
|
3749
|
+
pv_monthly_grid_connection_fee_dollars_per_kw: pv_monthly_grid_connection_fee_dollars_per_kw,
|
3750
|
+
pv_monthly_grid_connection_fee_dollars: pv_monthly_grid_connection_fee_dollars)
|
3751
|
+
end
|
3752
|
+
end
|
3753
|
+
|
3598
3754
|
if args[:additional_properties].is_initialized
|
3599
3755
|
extension_properties = {}
|
3600
3756
|
additional_properties = args[:additional_properties].get.split('|').map(&:strip)
|
@@ -3606,9 +3762,13 @@ class HPXMLFile
|
|
3606
3762
|
end
|
3607
3763
|
end
|
3608
3764
|
|
3609
|
-
def self.set_site(hpxml,
|
3610
|
-
if args[:site_shielding_of_home]
|
3611
|
-
shielding_of_home = args[:site_shielding_of_home]
|
3765
|
+
def self.set_site(hpxml, args)
|
3766
|
+
if args[:site_shielding_of_home].is_initialized
|
3767
|
+
hpxml.site.shielding_of_home = args[:site_shielding_of_home].get
|
3768
|
+
end
|
3769
|
+
|
3770
|
+
if args[:site_ground_conductivity].is_initialized
|
3771
|
+
hpxml.site.ground_conductivity = args[:site_ground_conductivity].get
|
3612
3772
|
end
|
3613
3773
|
|
3614
3774
|
if args[:site_type].is_initialized
|
@@ -3647,10 +3807,9 @@ class HPXMLFile
|
|
3647
3807
|
end
|
3648
3808
|
|
3649
3809
|
hpxml.site.azimuth_of_front_of_home = args[:geometry_unit_orientation]
|
3650
|
-
hpxml.site.shielding_of_home = shielding_of_home
|
3651
3810
|
end
|
3652
3811
|
|
3653
|
-
def self.set_neighbor_buildings(hpxml,
|
3812
|
+
def self.set_neighbor_buildings(hpxml, args)
|
3654
3813
|
nbr_map = { Constants.FacadeFront => [args[:neighbor_front_distance], args[:neighbor_front_height]],
|
3655
3814
|
Constants.FacadeBack => [args[:neighbor_back_distance], args[:neighbor_back_height]],
|
3656
3815
|
Constants.FacadeLeft => [args[:neighbor_left_distance], args[:neighbor_left_height]],
|
@@ -3662,8 +3821,8 @@ class HPXMLFile
|
|
3662
3821
|
|
3663
3822
|
azimuth = Geometry.get_azimuth_from_facade(facade: facade, orientation: args[:geometry_unit_orientation])
|
3664
3823
|
|
3665
|
-
if (distance > 0) &&
|
3666
|
-
height =
|
3824
|
+
if (distance > 0) && neighbor_height.is_initialized
|
3825
|
+
height = neighbor_height.get
|
3667
3826
|
end
|
3668
3827
|
|
3669
3828
|
hpxml.neighbor_buildings.add(azimuth: azimuth,
|
@@ -3672,13 +3831,13 @@ class HPXMLFile
|
|
3672
3831
|
end
|
3673
3832
|
end
|
3674
3833
|
|
3675
|
-
def self.set_building_occupancy(hpxml,
|
3676
|
-
if args[:geometry_unit_num_occupants]
|
3677
|
-
hpxml.building_occupancy.number_of_residents =
|
3834
|
+
def self.set_building_occupancy(hpxml, args)
|
3835
|
+
if args[:geometry_unit_num_occupants].is_initialized
|
3836
|
+
hpxml.building_occupancy.number_of_residents = args[:geometry_unit_num_occupants].get
|
3678
3837
|
end
|
3679
3838
|
end
|
3680
3839
|
|
3681
|
-
def self.set_building_construction(hpxml,
|
3840
|
+
def self.set_building_construction(hpxml, args)
|
3682
3841
|
if args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
|
3683
3842
|
args[:geometry_unit_num_floors_above_grade] = 1
|
3684
3843
|
end
|
@@ -3688,8 +3847,8 @@ class HPXMLFile
|
|
3688
3847
|
number_of_conditioned_floors += 1
|
3689
3848
|
end
|
3690
3849
|
|
3691
|
-
if args[:geometry_unit_num_bathrooms]
|
3692
|
-
number_of_bathrooms =
|
3850
|
+
if args[:geometry_unit_num_bathrooms].is_initialized
|
3851
|
+
number_of_bathrooms = args[:geometry_unit_num_bathrooms].get
|
3693
3852
|
end
|
3694
3853
|
|
3695
3854
|
conditioned_building_volume = args[:geometry_unit_cfa] * args[:geometry_average_ceiling_height]
|
@@ -3706,17 +3865,17 @@ class HPXMLFile
|
|
3706
3865
|
if args[:year_built].is_initialized
|
3707
3866
|
hpxml.building_construction.year_built = args[:year_built].get
|
3708
3867
|
end
|
3709
|
-
if args[:geometry_has_flue_or_chimney]
|
3710
|
-
hpxml.building_construction.has_flue_or_chimney = args[:geometry_has_flue_or_chimney]
|
3868
|
+
if args[:geometry_has_flue_or_chimney].is_initialized
|
3869
|
+
hpxml.building_construction.has_flue_or_chimney = args[:geometry_has_flue_or_chimney].get
|
3711
3870
|
end
|
3712
3871
|
end
|
3713
3872
|
|
3714
|
-
def self.set_climate_and_risk_zones(hpxml,
|
3873
|
+
def self.set_climate_and_risk_zones(hpxml, args)
|
3715
3874
|
hpxml.climate_and_risk_zones.weather_station_id = 'WeatherStation'
|
3716
3875
|
|
3717
3876
|
if args[:site_iecc_zone].is_initialized
|
3718
|
-
hpxml.climate_and_risk_zones.
|
3719
|
-
|
3877
|
+
hpxml.climate_and_risk_zones.climate_zone_ieccs.add(zone: args[:site_iecc_zone].get,
|
3878
|
+
year: 2006)
|
3720
3879
|
end
|
3721
3880
|
|
3722
3881
|
weather_station_name = File.basename(args[:weather_station_epw_filepath]).gsub('.epw', '')
|
@@ -3724,7 +3883,7 @@ class HPXMLFile
|
|
3724
3883
|
hpxml.climate_and_risk_zones.weather_station_epw_filepath = args[:weather_station_epw_filepath]
|
3725
3884
|
end
|
3726
3885
|
|
3727
|
-
def self.set_air_infiltration_measurements(hpxml,
|
3886
|
+
def self.set_air_infiltration_measurements(hpxml, args)
|
3728
3887
|
if args[:air_leakage_units] == HPXML::UnitsACH
|
3729
3888
|
house_pressure = args[:air_leakage_house_pressure]
|
3730
3889
|
unit_of_measure = HPXML::UnitsACH
|
@@ -3744,7 +3903,7 @@ class HPXMLFile
|
|
3744
3903
|
infiltration_volume: infiltration_volume)
|
3745
3904
|
end
|
3746
3905
|
|
3747
|
-
def self.set_roofs(hpxml,
|
3906
|
+
def self.set_roofs(hpxml, args, sorted_surfaces)
|
3748
3907
|
args[:geometry_roof_pitch] *= 12.0
|
3749
3908
|
if (args[:geometry_attic_type] == HPXML::AtticTypeFlatRoof) || (args[:geometry_attic_type] == HPXML::AtticTypeBelowApartment)
|
3750
3909
|
args[:geometry_roof_pitch] = 0.0
|
@@ -3761,8 +3920,8 @@ class HPXMLFile
|
|
3761
3920
|
roof_type = args[:roof_material_type].get
|
3762
3921
|
end
|
3763
3922
|
|
3764
|
-
if args[:roof_color]
|
3765
|
-
roof_color = args[:roof_color]
|
3923
|
+
if args[:roof_color].is_initialized
|
3924
|
+
roof_color = args[:roof_color].get
|
3766
3925
|
end
|
3767
3926
|
|
3768
3927
|
radiant_barrier = args[:roof_radiant_barrier]
|
@@ -3790,7 +3949,7 @@ class HPXMLFile
|
|
3790
3949
|
end
|
3791
3950
|
end
|
3792
3951
|
|
3793
|
-
def self.set_rim_joists(hpxml,
|
3952
|
+
def self.set_rim_joists(hpxml, model, args, sorted_surfaces)
|
3794
3953
|
sorted_surfaces.each do |surface|
|
3795
3954
|
next if surface.surfaceType != 'Wall'
|
3796
3955
|
next unless ['Outdoors', 'Adiabatic'].include? surface.outsideBoundaryCondition
|
@@ -3822,8 +3981,8 @@ class HPXMLFile
|
|
3822
3981
|
siding = args[:wall_siding_type].get
|
3823
3982
|
end
|
3824
3983
|
|
3825
|
-
if args[:wall_color]
|
3826
|
-
color = args[:wall_color]
|
3984
|
+
if args[:wall_color].is_initialized
|
3985
|
+
color = args[:wall_color].get
|
3827
3986
|
end
|
3828
3987
|
|
3829
3988
|
if interior_adjacent_to == exterior_adjacent_to
|
@@ -3846,7 +4005,7 @@ class HPXMLFile
|
|
3846
4005
|
end
|
3847
4006
|
end
|
3848
4007
|
|
3849
|
-
def self.set_walls(hpxml,
|
4008
|
+
def self.set_walls(hpxml, model, args, sorted_surfaces)
|
3850
4009
|
sorted_surfaces.each do |surface|
|
3851
4010
|
next if surface.surfaceType != 'Wall'
|
3852
4011
|
next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
|
@@ -3890,8 +4049,8 @@ class HPXMLFile
|
|
3890
4049
|
end
|
3891
4050
|
end
|
3892
4051
|
|
3893
|
-
if args[:wall_color]
|
3894
|
-
color = args[:wall_color]
|
4052
|
+
if args[:wall_color].is_initialized
|
4053
|
+
color = args[:wall_color].get
|
3895
4054
|
end
|
3896
4055
|
|
3897
4056
|
azimuth = Geometry.get_surface_azimuth(surface: surface, orientation: args[:geometry_unit_orientation])
|
@@ -3924,7 +4083,7 @@ class HPXMLFile
|
|
3924
4083
|
end
|
3925
4084
|
end
|
3926
4085
|
|
3927
|
-
def self.set_foundation_walls(hpxml,
|
4086
|
+
def self.set_foundation_walls(hpxml, model, args, sorted_surfaces)
|
3928
4087
|
sorted_surfaces.each do |surface|
|
3929
4088
|
next if surface.surfaceType != 'Wall'
|
3930
4089
|
next unless ['Foundation', 'Adiabatic'].include? surface.outsideBoundaryCondition
|
@@ -3967,32 +4126,32 @@ class HPXMLFile
|
|
3967
4126
|
elsif foundation_wall_insulation_location == 'interior'
|
3968
4127
|
insulation_interior_r_value = args[:foundation_wall_insulation_r]
|
3969
4128
|
if insulation_interior_r_value > 0
|
3970
|
-
if args[:foundation_wall_insulation_distance_to_top]
|
3971
|
-
insulation_interior_distance_to_top =
|
4129
|
+
if args[:foundation_wall_insulation_distance_to_top].is_initialized
|
4130
|
+
insulation_interior_distance_to_top = args[:foundation_wall_insulation_distance_to_top].get
|
3972
4131
|
end
|
3973
|
-
if args[:foundation_wall_insulation_distance_to_bottom]
|
3974
|
-
insulation_interior_distance_to_bottom =
|
4132
|
+
if args[:foundation_wall_insulation_distance_to_bottom].is_initialized
|
4133
|
+
insulation_interior_distance_to_bottom = args[:foundation_wall_insulation_distance_to_bottom].get
|
3975
4134
|
end
|
3976
4135
|
end
|
3977
4136
|
elsif foundation_wall_insulation_location == 'exterior'
|
3978
4137
|
insulation_exterior_r_value = args[:foundation_wall_insulation_r]
|
3979
4138
|
if insulation_exterior_r_value > 0
|
3980
|
-
if args[:foundation_wall_insulation_distance_to_top]
|
3981
|
-
insulation_exterior_distance_to_top =
|
4139
|
+
if args[:foundation_wall_insulation_distance_to_top].is_initialized
|
4140
|
+
insulation_exterior_distance_to_top = args[:foundation_wall_insulation_distance_to_top].get
|
3982
4141
|
end
|
3983
|
-
if args[:foundation_wall_insulation_distance_to_bottom]
|
3984
|
-
insulation_exterior_distance_to_bottom =
|
4142
|
+
if args[:foundation_wall_insulation_distance_to_bottom].is_initialized
|
4143
|
+
insulation_exterior_distance_to_bottom = args[:foundation_wall_insulation_distance_to_bottom].get
|
3985
4144
|
end
|
3986
4145
|
end
|
3987
4146
|
end
|
3988
4147
|
end
|
3989
4148
|
|
3990
|
-
if args[:foundation_wall_thickness]
|
3991
|
-
thickness =
|
4149
|
+
if args[:foundation_wall_thickness].is_initialized
|
4150
|
+
thickness = args[:foundation_wall_thickness].get
|
3992
4151
|
end
|
3993
4152
|
|
3994
|
-
if args[:foundation_wall_type]
|
3995
|
-
type = args[:foundation_wall_type]
|
4153
|
+
if args[:foundation_wall_type].is_initialized
|
4154
|
+
type = args[:foundation_wall_type].get
|
3996
4155
|
end
|
3997
4156
|
|
3998
4157
|
azimuth = Geometry.get_surface_azimuth(surface: surface, orientation: args[:geometry_unit_orientation])
|
@@ -4017,7 +4176,7 @@ class HPXMLFile
|
|
4017
4176
|
end
|
4018
4177
|
end
|
4019
4178
|
|
4020
|
-
def self.
|
4179
|
+
def self.set_floors(hpxml, args, sorted_surfaces)
|
4021
4180
|
if [HPXML::FoundationTypeBasementConditioned,
|
4022
4181
|
HPXML::FoundationTypeCrawlspaceConditioned].include?(args[:geometry_foundation_type]) && (args[:floor_over_foundation_assembly_r] > 2.1)
|
4023
4182
|
args[:floor_over_foundation_assembly_r] = 2.1 # Uninsulated
|
@@ -4040,9 +4199,9 @@ class HPXMLFile
|
|
4040
4199
|
elsif surface.outsideBoundaryCondition == 'Adiabatic'
|
4041
4200
|
exterior_adjacent_to = HPXML::LocationOtherHousingUnit
|
4042
4201
|
if surface.surfaceType == 'Floor'
|
4043
|
-
|
4202
|
+
floor_or_ceiling = HPXML::FloorOrCeilingFloor
|
4044
4203
|
elsif surface.surfaceType == 'RoofCeiling'
|
4045
|
-
|
4204
|
+
floor_or_ceiling = HPXML::FloorOrCeilingCeiling
|
4046
4205
|
end
|
4047
4206
|
end
|
4048
4207
|
|
@@ -4052,28 +4211,36 @@ class HPXMLFile
|
|
4052
4211
|
HPXML::LocationBasementConditioned,
|
4053
4212
|
HPXML::LocationCrawlspaceConditioned].include? exterior_adjacent_to
|
4054
4213
|
|
4055
|
-
hpxml.
|
4056
|
-
|
4057
|
-
|
4058
|
-
|
4059
|
-
|
4060
|
-
|
4214
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
4215
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
4216
|
+
interior_adjacent_to: interior_adjacent_to,
|
4217
|
+
floor_type: args[:floor_type],
|
4218
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'),
|
4219
|
+
floor_or_ceiling: floor_or_ceiling)
|
4220
|
+
if hpxml.floors[-1].floor_or_ceiling.nil?
|
4221
|
+
if hpxml.floors[-1].is_floor
|
4222
|
+
hpxml.floors[-1].floor_or_ceiling = HPXML::FloorOrCeilingFloor
|
4223
|
+
elsif hpxml.floors[-1].is_ceiling
|
4224
|
+
hpxml.floors[-1].floor_or_ceiling = HPXML::FloorOrCeilingCeiling
|
4225
|
+
end
|
4226
|
+
end
|
4227
|
+
@surface_ids[surface.name.to_s] = hpxml.floors[-1].id
|
4061
4228
|
|
4062
|
-
if hpxml.
|
4229
|
+
if hpxml.floors[-1].is_thermal_boundary
|
4063
4230
|
if [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? exterior_adjacent_to
|
4064
|
-
hpxml.
|
4231
|
+
hpxml.floors[-1].insulation_assembly_r_value = args[:ceiling_assembly_r]
|
4065
4232
|
elsif [HPXML::LocationGarage].include? exterior_adjacent_to
|
4066
|
-
hpxml.
|
4233
|
+
hpxml.floors[-1].insulation_assembly_r_value = args[:floor_over_garage_assembly_r]
|
4067
4234
|
else
|
4068
|
-
hpxml.
|
4235
|
+
hpxml.floors[-1].insulation_assembly_r_value = args[:floor_over_foundation_assembly_r]
|
4069
4236
|
end
|
4070
4237
|
else
|
4071
|
-
hpxml.
|
4238
|
+
hpxml.floors[-1].insulation_assembly_r_value = 2.1 # Uninsulated
|
4072
4239
|
end
|
4073
4240
|
end
|
4074
4241
|
end
|
4075
4242
|
|
4076
|
-
def self.set_slabs(hpxml,
|
4243
|
+
def self.set_slabs(hpxml, model, args, sorted_surfaces)
|
4077
4244
|
sorted_surfaces.each do |surface|
|
4078
4245
|
next unless ['Foundation'].include? surface.outsideBoundaryCondition
|
4079
4246
|
next if surface.surfaceType != 'Floor'
|
@@ -4110,16 +4277,16 @@ class HPXMLFile
|
|
4110
4277
|
under_slab_insulation_width = args[:slab_under_width]
|
4111
4278
|
end
|
4112
4279
|
|
4113
|
-
if args[:slab_thickness]
|
4114
|
-
thickness =
|
4280
|
+
if args[:slab_thickness].is_initialized
|
4281
|
+
thickness = args[:slab_thickness].get
|
4115
4282
|
end
|
4116
4283
|
|
4117
|
-
if args[:slab_carpet_fraction]
|
4118
|
-
carpet_fraction =
|
4284
|
+
if args[:slab_carpet_fraction].is_initialized
|
4285
|
+
carpet_fraction = args[:slab_carpet_fraction].get
|
4119
4286
|
end
|
4120
4287
|
|
4121
|
-
if args[:slab_carpet_r]
|
4122
|
-
carpet_r_value =
|
4288
|
+
if args[:slab_carpet_r].is_initialized
|
4289
|
+
carpet_r_value = args[:slab_carpet_r].get
|
4123
4290
|
end
|
4124
4291
|
|
4125
4292
|
hpxml.slabs.add(id: "Slab#{hpxml.slabs.size + 1}",
|
@@ -4146,7 +4313,7 @@ class HPXMLFile
|
|
4146
4313
|
end
|
4147
4314
|
end
|
4148
4315
|
|
4149
|
-
def self.set_windows(hpxml,
|
4316
|
+
def self.set_windows(hpxml, model, args, sorted_subsurfaces)
|
4150
4317
|
sorted_subsurfaces.each do |sub_surface|
|
4151
4318
|
next if sub_surface.subSurfaceType != 'FixedWindow'
|
4152
4319
|
|
@@ -4236,7 +4403,7 @@ class HPXMLFile
|
|
4236
4403
|
end
|
4237
4404
|
end
|
4238
4405
|
|
4239
|
-
def self.set_skylights(hpxml,
|
4406
|
+
def self.set_skylights(hpxml, args, sorted_subsurfaces)
|
4240
4407
|
sorted_subsurfaces.each do |sub_surface|
|
4241
4408
|
next if sub_surface.subSurfaceType != 'Skylight'
|
4242
4409
|
|
@@ -4262,7 +4429,7 @@ class HPXMLFile
|
|
4262
4429
|
end
|
4263
4430
|
end
|
4264
4431
|
|
4265
|
-
def self.set_doors(hpxml,
|
4432
|
+
def self.set_doors(hpxml, model, args, sorted_subsurfaces)
|
4266
4433
|
sorted_subsurfaces.each do |sub_surface|
|
4267
4434
|
next if sub_surface.subSurfaceType != 'Door'
|
4268
4435
|
|
@@ -4270,14 +4437,11 @@ class HPXMLFile
|
|
4270
4437
|
|
4271
4438
|
interior_adjacent_to = Geometry.get_adjacent_to(surface: surface)
|
4272
4439
|
|
4273
|
-
adjacent_surface = surface
|
4274
4440
|
if [HPXML::LocationOtherHousingUnit].include?(interior_adjacent_to)
|
4275
4441
|
adjacent_surface = Geometry.get_adiabatic_adjacent_surface(model: model, surface: surface)
|
4276
4442
|
next if adjacent_surface.nil?
|
4277
4443
|
end
|
4278
4444
|
|
4279
|
-
sub_surface_facade = Geometry.get_facade_for_surface(sub_surface)
|
4280
|
-
|
4281
4445
|
wall_idref = @surface_ids[surface.name.to_s]
|
4282
4446
|
next if wall_idref.nil?
|
4283
4447
|
|
@@ -4289,13 +4453,13 @@ class HPXMLFile
|
|
4289
4453
|
end
|
4290
4454
|
end
|
4291
4455
|
|
4292
|
-
def self.set_attics(hpxml,
|
4456
|
+
def self.set_attics(hpxml, args)
|
4293
4457
|
surf_ids = { 'roofs' => { 'surfaces' => hpxml.roofs, 'ids' => [] },
|
4294
4458
|
'walls' => { 'surfaces' => hpxml.walls, 'ids' => [] },
|
4295
|
-
'
|
4459
|
+
'floors' => { 'surfaces' => hpxml.floors, 'ids' => [] } }
|
4296
4460
|
|
4297
4461
|
attic_locations = [HPXML::LocationAtticUnconditioned, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented]
|
4298
|
-
surf_ids.each do |
|
4462
|
+
surf_ids.values.each do |surf_hash|
|
4299
4463
|
surf_hash['surfaces'].each do |surface|
|
4300
4464
|
next if (not attic_locations.include? surface.interior_adjacent_to) &&
|
4301
4465
|
(not attic_locations.include? surface.exterior_adjacent_to)
|
@@ -4317,12 +4481,12 @@ class HPXMLFile
|
|
4317
4481
|
attic_type: args[:geometry_attic_type],
|
4318
4482
|
attached_to_roof_idrefs: surf_ids['roofs']['ids'],
|
4319
4483
|
attached_to_wall_idrefs: surf_ids['walls']['ids'],
|
4320
|
-
|
4484
|
+
attached_to_floor_idrefs: surf_ids['floors']['ids'])
|
4321
4485
|
end
|
4322
4486
|
|
4323
|
-
def self.set_foundations(hpxml,
|
4487
|
+
def self.set_foundations(hpxml, args)
|
4324
4488
|
surf_ids = { 'slabs' => { 'surfaces' => hpxml.slabs, 'ids' => [] },
|
4325
|
-
'
|
4489
|
+
'floors' => { 'surfaces' => hpxml.floors, 'ids' => [] },
|
4326
4490
|
'foundation_walls' => { 'surfaces' => hpxml.foundation_walls, 'ids' => [] },
|
4327
4491
|
'walls' => { 'surfaces' => hpxml.walls, 'ids' => [] },
|
4328
4492
|
'rim_joists' => { 'surfaces' => hpxml.rim_joists, 'ids' => [] }, }
|
@@ -4338,7 +4502,7 @@ class HPXMLFile
|
|
4338
4502
|
next unless (foundation_locations.include? surface.interior_adjacent_to) ||
|
4339
4503
|
(foundation_locations.include? surface.exterior_adjacent_to) ||
|
4340
4504
|
(surf_type == 'slabs' && surface.interior_adjacent_to == HPXML::LocationLivingSpace) ||
|
4341
|
-
(surf_type == '
|
4505
|
+
(surf_type == 'floors' && surface.exterior_adjacent_to == HPXML::LocationOutside)
|
4342
4506
|
|
4343
4507
|
surf_hash['ids'] << surface.id
|
4344
4508
|
end
|
@@ -4347,22 +4511,22 @@ class HPXMLFile
|
|
4347
4511
|
hpxml.foundations.add(id: "Foundation#{hpxml.foundations.size + 1}",
|
4348
4512
|
foundation_type: args[:geometry_foundation_type],
|
4349
4513
|
attached_to_slab_idrefs: surf_ids['slabs']['ids'],
|
4350
|
-
|
4514
|
+
attached_to_floor_idrefs: surf_ids['floors']['ids'],
|
4351
4515
|
attached_to_foundation_wall_idrefs: surf_ids['foundation_walls']['ids'],
|
4352
4516
|
attached_to_wall_idrefs: surf_ids['walls']['ids'],
|
4353
4517
|
attached_to_rim_joist_idrefs: surf_ids['rim_joists']['ids'])
|
4354
4518
|
end
|
4355
4519
|
|
4356
|
-
def self.set_heating_systems(hpxml,
|
4520
|
+
def self.set_heating_systems(hpxml, args)
|
4357
4521
|
heating_system_type = args[:heating_system_type]
|
4358
4522
|
|
4359
4523
|
return if heating_system_type == 'none'
|
4360
4524
|
|
4361
|
-
if args[:heating_system_heating_capacity]
|
4362
|
-
heating_capacity =
|
4525
|
+
if args[:heating_system_heating_capacity].is_initialized
|
4526
|
+
heating_capacity = args[:heating_system_heating_capacity].get
|
4363
4527
|
end
|
4364
4528
|
|
4365
|
-
if [HPXML::HVACTypeElectricResistance
|
4529
|
+
if [HPXML::HVACTypeElectricResistance].include? heating_system_type
|
4366
4530
|
heating_system_fuel = HPXML::FuelTypeElectricity
|
4367
4531
|
else
|
4368
4532
|
heating_system_fuel = args[:heating_system_fuel]
|
@@ -4376,8 +4540,7 @@ class HPXMLFile
|
|
4376
4540
|
HPXML::HVACTypeStove,
|
4377
4541
|
HPXML::HVACTypePortableHeater,
|
4378
4542
|
HPXML::HVACTypeFireplace,
|
4379
|
-
HPXML::HVACTypeFixedHeater
|
4380
|
-
HPXML::HVACTypePTACHeating].include?(heating_system_type)
|
4543
|
+
HPXML::HVACTypeFixedHeater].include?(heating_system_type)
|
4381
4544
|
heating_efficiency_percent = args[:heating_system_heating_efficiency]
|
4382
4545
|
end
|
4383
4546
|
|
@@ -4412,13 +4575,13 @@ class HPXMLFile
|
|
4412
4575
|
primary_system: true)
|
4413
4576
|
end
|
4414
4577
|
|
4415
|
-
def self.set_cooling_systems(hpxml,
|
4578
|
+
def self.set_cooling_systems(hpxml, args)
|
4416
4579
|
cooling_system_type = args[:cooling_system_type]
|
4417
4580
|
|
4418
4581
|
return if cooling_system_type == 'none'
|
4419
4582
|
|
4420
|
-
if args[:cooling_system_cooling_capacity]
|
4421
|
-
cooling_capacity =
|
4583
|
+
if args[:cooling_system_cooling_capacity].is_initialized
|
4584
|
+
cooling_capacity = args[:cooling_system_cooling_capacity].get
|
4422
4585
|
end
|
4423
4586
|
|
4424
4587
|
if args[:cooling_system_cooling_compressor_type].is_initialized
|
@@ -4436,6 +4599,8 @@ class HPXMLFile
|
|
4436
4599
|
if cooling_system_type != HPXML::HVACTypeEvaporativeCooler
|
4437
4600
|
if args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsSEER
|
4438
4601
|
cooling_efficiency_seer = args[:cooling_system_cooling_efficiency]
|
4602
|
+
elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsSEER2
|
4603
|
+
cooling_efficiency_seer2 = args[:cooling_system_cooling_efficiency]
|
4439
4604
|
elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsEER
|
4440
4605
|
cooling_efficiency_eer = args[:cooling_system_cooling_efficiency]
|
4441
4606
|
elsif args[:cooling_system_cooling_efficiency_type] == HPXML::UnitsCEER
|
@@ -4455,6 +4620,24 @@ class HPXMLFile
|
|
4455
4620
|
end
|
4456
4621
|
end
|
4457
4622
|
|
4623
|
+
if [HPXML::HVACTypePTAC, HPXML::HVACTypeRoomAirConditioner].include?(cooling_system_type)
|
4624
|
+
if args[:cooling_system_integrated_heating_system_fuel].is_initialized
|
4625
|
+
integrated_heating_system_fuel = args[:cooling_system_integrated_heating_system_fuel].get
|
4626
|
+
end
|
4627
|
+
|
4628
|
+
if args[:cooling_system_integrated_heating_system_fraction_heat_load_served].is_initialized
|
4629
|
+
integrated_heating_system_fraction_heat_load_served = args[:cooling_system_integrated_heating_system_fraction_heat_load_served].get
|
4630
|
+
end
|
4631
|
+
|
4632
|
+
if args[:cooling_system_integrated_heating_system_capacity].is_initialized
|
4633
|
+
integrated_heating_system_capacity = args[:cooling_system_integrated_heating_system_capacity].get
|
4634
|
+
end
|
4635
|
+
|
4636
|
+
if args[:cooling_system_integrated_heating_system_efficiency_percent].is_initialized
|
4637
|
+
integrated_heating_system_efficiency_percent = args[:cooling_system_integrated_heating_system_efficiency_percent].get
|
4638
|
+
end
|
4639
|
+
end
|
4640
|
+
|
4458
4641
|
hpxml.cooling_systems.add(id: "CoolingSystem#{hpxml.cooling_systems.size + 1}",
|
4459
4642
|
cooling_system_type: cooling_system_type,
|
4460
4643
|
cooling_system_fuel: HPXML::FuelTypeElectricity,
|
@@ -4463,31 +4646,30 @@ class HPXMLFile
|
|
4463
4646
|
compressor_type: compressor_type,
|
4464
4647
|
cooling_shr: cooling_shr,
|
4465
4648
|
cooling_efficiency_seer: cooling_efficiency_seer,
|
4649
|
+
cooling_efficiency_seer2: cooling_efficiency_seer2,
|
4466
4650
|
cooling_efficiency_eer: cooling_efficiency_eer,
|
4467
4651
|
cooling_efficiency_ceer: cooling_efficiency_ceer,
|
4468
4652
|
airflow_defect_ratio: airflow_defect_ratio,
|
4469
4653
|
charge_defect_ratio: charge_defect_ratio,
|
4470
|
-
primary_system: true
|
4654
|
+
primary_system: true,
|
4655
|
+
integrated_heating_system_fuel: integrated_heating_system_fuel,
|
4656
|
+
integrated_heating_system_capacity: integrated_heating_system_capacity,
|
4657
|
+
integrated_heating_system_efficiency_percent: integrated_heating_system_efficiency_percent,
|
4658
|
+
integrated_heating_system_fraction_heat_load_served: integrated_heating_system_fraction_heat_load_served)
|
4471
4659
|
end
|
4472
4660
|
|
4473
|
-
def self.set_heat_pumps(hpxml,
|
4661
|
+
def self.set_heat_pumps(hpxml, args)
|
4474
4662
|
heat_pump_type = args[:heat_pump_type]
|
4475
4663
|
|
4476
4664
|
return if heat_pump_type == 'none'
|
4477
4665
|
|
4478
|
-
if args[:heat_pump_heating_capacity]
|
4479
|
-
|
4480
|
-
elsif args[:heat_pump_heating_capacity] == Constants.AutoHERSForHP
|
4481
|
-
hpxml.header.heat_pump_sizing_methodology = HPXML::HeatPumpSizingHERS
|
4482
|
-
elsif args[:heat_pump_heating_capacity] == Constants.AutoMaxLoadForHP
|
4483
|
-
hpxml.header.heat_pump_sizing_methodology = HPXML::HeatPumpSizingMaxLoad
|
4484
|
-
else
|
4485
|
-
heating_capacity = Float(args[:heat_pump_heating_capacity])
|
4666
|
+
if args[:heat_pump_heating_capacity].is_initialized
|
4667
|
+
heating_capacity = args[:heat_pump_heating_capacity].get
|
4486
4668
|
end
|
4487
4669
|
|
4488
4670
|
if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump_type
|
4489
|
-
if args[:heat_pump_heating_capacity_17_f]
|
4490
|
-
heating_capacity_17F =
|
4671
|
+
if args[:heat_pump_heating_capacity_17_f].is_initialized
|
4672
|
+
heating_capacity_17F = args[:heat_pump_heating_capacity_17_f].get
|
4491
4673
|
end
|
4492
4674
|
end
|
4493
4675
|
|
@@ -4495,8 +4677,8 @@ class HPXMLFile
|
|
4495
4677
|
backup_type = args[:heat_pump_backup_type]
|
4496
4678
|
backup_heating_fuel = args[:heat_pump_backup_fuel]
|
4497
4679
|
|
4498
|
-
if args[:heat_pump_backup_heating_capacity]
|
4499
|
-
backup_heating_capacity =
|
4680
|
+
if args[:heat_pump_backup_heating_capacity].is_initialized
|
4681
|
+
backup_heating_capacity = args[:heat_pump_backup_heating_capacity].get
|
4500
4682
|
end
|
4501
4683
|
|
4502
4684
|
if backup_heating_fuel == HPXML::FuelTypeElectricity
|
@@ -4527,8 +4709,8 @@ class HPXMLFile
|
|
4527
4709
|
end
|
4528
4710
|
end
|
4529
4711
|
|
4530
|
-
if args[:heat_pump_cooling_capacity]
|
4531
|
-
cooling_capacity =
|
4712
|
+
if args[:heat_pump_cooling_capacity].is_initialized
|
4713
|
+
cooling_capacity = args[:heat_pump_cooling_capacity].get
|
4532
4714
|
end
|
4533
4715
|
|
4534
4716
|
if args[:heat_pump_cooling_compressor_type].is_initialized
|
@@ -4543,12 +4725,16 @@ class HPXMLFile
|
|
4543
4725
|
|
4544
4726
|
if args[:heat_pump_heating_efficiency_type] == HPXML::UnitsHSPF
|
4545
4727
|
heating_efficiency_hspf = args[:heat_pump_heating_efficiency]
|
4728
|
+
elsif args[:heat_pump_heating_efficiency_type] == HPXML::UnitsHSPF2
|
4729
|
+
heating_efficiency_hspf2 = args[:heat_pump_heating_efficiency]
|
4546
4730
|
elsif args[:heat_pump_heating_efficiency_type] == HPXML::UnitsCOP
|
4547
4731
|
heating_efficiency_cop = args[:heat_pump_heating_efficiency]
|
4548
4732
|
end
|
4549
4733
|
|
4550
4734
|
if args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsSEER
|
4551
4735
|
cooling_efficiency_seer = args[:heat_pump_cooling_efficiency]
|
4736
|
+
elsif args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsSEER2
|
4737
|
+
cooling_efficiency_seer2 = args[:heat_pump_cooling_efficiency]
|
4552
4738
|
elsif args[:heat_pump_cooling_efficiency_type] == HPXML::UnitsEER
|
4553
4739
|
cooling_efficiency_eer = args[:heat_pump_cooling_efficiency]
|
4554
4740
|
end
|
@@ -4574,6 +4760,10 @@ class HPXMLFile
|
|
4574
4760
|
primary_cooling_system = true
|
4575
4761
|
end
|
4576
4762
|
|
4763
|
+
if args[:heat_pump_sizing_methodology].is_initialized
|
4764
|
+
hpxml.header.heat_pump_sizing_methodology = args[:heat_pump_sizing_methodology].get
|
4765
|
+
end
|
4766
|
+
|
4577
4767
|
hpxml.heat_pumps.add(id: "HeatPump#{hpxml.heat_pumps.size + 1}",
|
4578
4768
|
heat_pump_type: heat_pump_type,
|
4579
4769
|
heat_pump_fuel: HPXML::FuelTypeElectricity,
|
@@ -4593,7 +4783,9 @@ class HPXMLFile
|
|
4593
4783
|
backup_heating_switchover_temp: backup_heating_switchover_temp,
|
4594
4784
|
backup_heating_lockout_temp: backup_heating_lockout_temp,
|
4595
4785
|
heating_efficiency_hspf: heating_efficiency_hspf,
|
4786
|
+
heating_efficiency_hspf2: heating_efficiency_hspf2,
|
4596
4787
|
cooling_efficiency_seer: cooling_efficiency_seer,
|
4788
|
+
cooling_efficiency_seer2: cooling_efficiency_seer2,
|
4597
4789
|
heating_efficiency_cop: heating_efficiency_cop,
|
4598
4790
|
cooling_efficiency_eer: cooling_efficiency_eer,
|
4599
4791
|
airflow_defect_ratio: airflow_defect_ratio,
|
@@ -4602,14 +4794,14 @@ class HPXMLFile
|
|
4602
4794
|
primary_cooling_system: primary_cooling_system)
|
4603
4795
|
end
|
4604
4796
|
|
4605
|
-
def self.set_secondary_heating_systems(hpxml,
|
4797
|
+
def self.set_secondary_heating_systems(hpxml, args)
|
4606
4798
|
heating_system_type = args[:heating_system_2_type]
|
4607
4799
|
heating_system_is_heatpump_backup = (args[:heat_pump_type] != 'none' && args[:heat_pump_backup_type] == HPXML::HeatPumpBackupTypeSeparate)
|
4608
4800
|
|
4609
4801
|
return if heating_system_type == 'none' && (not heating_system_is_heatpump_backup)
|
4610
4802
|
|
4611
|
-
if args[:heating_system_2_heating_capacity]
|
4612
|
-
heating_capacity =
|
4803
|
+
if args[:heating_system_2_heating_capacity].is_initialized
|
4804
|
+
heating_capacity = args[:heating_system_2_heating_capacity].get
|
4613
4805
|
end
|
4614
4806
|
|
4615
4807
|
if args[:heating_system_2_fuel] == HPXML::HVACTypeElectricResistance
|
@@ -4641,7 +4833,7 @@ class HPXMLFile
|
|
4641
4833
|
heating_efficiency_percent: heating_efficiency_percent)
|
4642
4834
|
end
|
4643
4835
|
|
4644
|
-
def self.set_hvac_distribution(hpxml,
|
4836
|
+
def self.set_hvac_distribution(hpxml, args)
|
4645
4837
|
# HydronicDistribution?
|
4646
4838
|
hpxml.heating_systems.each do |heating_system|
|
4647
4839
|
next unless [heating_system.heating_system_type].include?(HPXML::HVACTypeBoiler)
|
@@ -4688,9 +4880,7 @@ class HPXMLFile
|
|
4688
4880
|
return if air_distribution_systems.size == 0 && fan_coil_distribution_systems.size == 0
|
4689
4881
|
|
4690
4882
|
if args[:ducts_number_of_return_registers].is_initialized
|
4691
|
-
|
4692
|
-
number_of_return_registers = Integer(args[:ducts_number_of_return_registers].get)
|
4693
|
-
end
|
4883
|
+
number_of_return_registers = args[:ducts_number_of_return_registers].get
|
4694
4884
|
end
|
4695
4885
|
|
4696
4886
|
if [HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && hpxml.heating_systems.size == 0 && hpxml.heat_pumps.size == 0
|
@@ -4735,29 +4925,31 @@ class HPXMLFile
|
|
4735
4925
|
end
|
4736
4926
|
|
4737
4927
|
def self.set_ducts(args, hvac_distribution)
|
4738
|
-
if args[:ducts_supply_location]
|
4739
|
-
ducts_supply_location = args[:ducts_supply_location]
|
4928
|
+
if args[:ducts_supply_location].is_initialized
|
4929
|
+
ducts_supply_location = args[:ducts_supply_location].get
|
4740
4930
|
end
|
4741
4931
|
|
4742
|
-
if args[:ducts_return_location]
|
4743
|
-
ducts_return_location = args[:ducts_return_location]
|
4932
|
+
if args[:ducts_return_location].is_initialized
|
4933
|
+
ducts_return_location = args[:ducts_return_location].get
|
4744
4934
|
end
|
4745
4935
|
|
4746
|
-
if args[:ducts_supply_surface_area]
|
4747
|
-
ducts_supply_surface_area =
|
4936
|
+
if args[:ducts_supply_surface_area].is_initialized
|
4937
|
+
ducts_supply_surface_area = args[:ducts_supply_surface_area].get
|
4748
4938
|
end
|
4749
4939
|
|
4750
|
-
if args[:ducts_return_surface_area]
|
4751
|
-
ducts_return_surface_area =
|
4940
|
+
if args[:ducts_return_surface_area].is_initialized
|
4941
|
+
ducts_return_surface_area = args[:ducts_return_surface_area].get
|
4752
4942
|
end
|
4753
4943
|
|
4754
|
-
hvac_distribution.ducts.add(
|
4944
|
+
hvac_distribution.ducts.add(id: "Ducts#{hvac_distribution.ducts.size + 1}",
|
4945
|
+
duct_type: HPXML::DuctTypeSupply,
|
4755
4946
|
duct_insulation_r_value: args[:ducts_supply_insulation_r],
|
4756
4947
|
duct_location: ducts_supply_location,
|
4757
4948
|
duct_surface_area: ducts_supply_surface_area)
|
4758
4949
|
|
4759
4950
|
if not ([HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && args[:cooling_system_is_ducted])
|
4760
|
-
hvac_distribution.ducts.add(
|
4951
|
+
hvac_distribution.ducts.add(id: "Ducts#{hvac_distribution.ducts.size + 1}",
|
4952
|
+
duct_type: HPXML::DuctTypeReturn,
|
4761
4953
|
duct_insulation_r_value: args[:ducts_return_insulation_r],
|
4762
4954
|
duct_location: ducts_return_location,
|
4763
4955
|
duct_surface_area: ducts_return_surface_area)
|
@@ -4769,27 +4961,30 @@ class HPXMLFile
|
|
4769
4961
|
end
|
4770
4962
|
end
|
4771
4963
|
|
4772
|
-
def self.set_hvac_control(hpxml,
|
4964
|
+
def self.set_hvac_control(hpxml, args, epw_file, weather)
|
4773
4965
|
return if (args[:heating_system_type] == 'none') && (args[:cooling_system_type] == 'none') && (args[:heat_pump_type] == 'none')
|
4774
4966
|
|
4775
4967
|
# Heating
|
4776
4968
|
if hpxml.total_fraction_heat_load_served > 0
|
4777
4969
|
|
4778
|
-
if args[:hvac_control_heating_weekday_setpoint]
|
4779
|
-
if args[:hvac_control_heating_weekday_setpoint]
|
4780
|
-
heating_setpoint_temp = args[:hvac_control_heating_weekday_setpoint]
|
4781
|
-
|
4782
|
-
|
4783
|
-
|
4784
|
-
weekday_heating_setpoints = args[:hvac_control_heating_weekday_setpoint]
|
4785
|
-
end
|
4786
|
-
if args[:hvac_control_heating_weekend_setpoint] != Constants.Auto
|
4787
|
-
weekend_heating_setpoints = args[:hvac_control_heating_weekend_setpoint]
|
4970
|
+
if args[:hvac_control_heating_weekday_setpoint].is_initialized && args[:hvac_control_heating_weekend_setpoint].is_initialized
|
4971
|
+
if args[:hvac_control_heating_weekday_setpoint].get == args[:hvac_control_heating_weekend_setpoint].get && !args[:hvac_control_heating_weekday_setpoint].get.include?(',')
|
4972
|
+
heating_setpoint_temp = Float(args[:hvac_control_heating_weekday_setpoint].get)
|
4973
|
+
else
|
4974
|
+
weekday_heating_setpoints = args[:hvac_control_heating_weekday_setpoint].get
|
4975
|
+
weekend_heating_setpoints = args[:hvac_control_heating_weekend_setpoint].get
|
4788
4976
|
end
|
4789
4977
|
end
|
4790
4978
|
|
4791
4979
|
if args[:hvac_control_heating_season_period].is_initialized
|
4792
|
-
|
4980
|
+
hvac_control_heating_season_period = args[:hvac_control_heating_season_period].get
|
4981
|
+
if hvac_control_heating_season_period == HPXML::BuildingAmerica
|
4982
|
+
heating_months, _cooling_months = HVAC.get_default_heating_and_cooling_seasons(weather)
|
4983
|
+
sim_calendar_year = Location.get_sim_calendar_year(hpxml.header.sim_calendar_year, epw_file)
|
4984
|
+
begin_month, begin_day, end_month, end_day = Schedule.get_begin_and_end_dates_from_monthly_array(heating_months, sim_calendar_year)
|
4985
|
+
else
|
4986
|
+
begin_month, begin_day, end_month, end_day = Schedule.parse_date_range(hvac_control_heating_season_period)
|
4987
|
+
end
|
4793
4988
|
seasons_heating_begin_month = begin_month
|
4794
4989
|
seasons_heating_begin_day = begin_day
|
4795
4990
|
seasons_heating_end_month = end_month
|
@@ -4801,29 +4996,28 @@ class HPXMLFile
|
|
4801
4996
|
# Cooling
|
4802
4997
|
if hpxml.total_fraction_cool_load_served > 0
|
4803
4998
|
|
4804
|
-
if args[:hvac_control_cooling_weekday_setpoint]
|
4805
|
-
if args[:hvac_control_cooling_weekday_setpoint]
|
4806
|
-
cooling_setpoint_temp = args[:hvac_control_cooling_weekday_setpoint]
|
4807
|
-
|
4808
|
-
|
4809
|
-
|
4810
|
-
weekday_cooling_setpoints = args[:hvac_control_cooling_weekday_setpoint]
|
4811
|
-
end
|
4812
|
-
if args[:hvac_control_cooling_weekend_setpoint] != Constants.Auto
|
4813
|
-
weekend_cooling_setpoints = args[:hvac_control_cooling_weekend_setpoint]
|
4999
|
+
if args[:hvac_control_cooling_weekday_setpoint].is_initialized && args[:hvac_control_cooling_weekend_setpoint].is_initialized
|
5000
|
+
if args[:hvac_control_cooling_weekday_setpoint].get == args[:hvac_control_cooling_weekend_setpoint].get && !args[:hvac_control_cooling_weekday_setpoint].get.include?(',')
|
5001
|
+
cooling_setpoint_temp = Float(args[:hvac_control_cooling_weekday_setpoint].get)
|
5002
|
+
else
|
5003
|
+
weekday_cooling_setpoints = args[:hvac_control_cooling_weekday_setpoint].get
|
5004
|
+
weekend_cooling_setpoints = args[:hvac_control_cooling_weekend_setpoint].get
|
4814
5005
|
end
|
4815
5006
|
end
|
4816
5007
|
|
4817
|
-
if args[:
|
4818
|
-
|
4819
|
-
end
|
4820
|
-
|
4821
|
-
if (args[:ceiling_fan_cooling_setpoint_temp_offset] > 0) && (ceiling_fan_quantity.nil? || ceiling_fan_quantity > 0)
|
4822
|
-
ceiling_fan_cooling_setpoint_temp_offset = args[:ceiling_fan_cooling_setpoint_temp_offset]
|
5008
|
+
if args[:ceiling_fan_cooling_setpoint_temp_offset].is_initialized
|
5009
|
+
ceiling_fan_cooling_setpoint_temp_offset = args[:ceiling_fan_cooling_setpoint_temp_offset].get
|
4823
5010
|
end
|
4824
5011
|
|
4825
5012
|
if args[:hvac_control_cooling_season_period].is_initialized
|
4826
|
-
|
5013
|
+
hvac_control_cooling_season_period = args[:hvac_control_cooling_season_period].get
|
5014
|
+
if hvac_control_cooling_season_period == HPXML::BuildingAmerica
|
5015
|
+
_heating_months, cooling_months = HVAC.get_default_heating_and_cooling_seasons(weather)
|
5016
|
+
sim_calendar_year = Location.get_sim_calendar_year(hpxml.header.sim_calendar_year, epw_file)
|
5017
|
+
begin_month, begin_day, end_month, end_day = Schedule.get_begin_and_end_dates_from_monthly_array(cooling_months, sim_calendar_year)
|
5018
|
+
else
|
5019
|
+
begin_month, begin_day, end_month, end_day = Schedule.parse_date_range(args[:hvac_control_cooling_season_period].get)
|
5020
|
+
end
|
4827
5021
|
seasons_cooling_begin_month = begin_month
|
4828
5022
|
seasons_cooling_begin_day = begin_day
|
4829
5023
|
seasons_cooling_end_month = end_month
|
@@ -4850,7 +5044,7 @@ class HPXMLFile
|
|
4850
5044
|
seasons_cooling_end_day: seasons_cooling_end_day)
|
4851
5045
|
end
|
4852
5046
|
|
4853
|
-
def self.set_ventilation_fans(hpxml,
|
5047
|
+
def self.set_ventilation_fans(hpxml, args)
|
4854
5048
|
if args[:mech_vent_fan_type] != 'none'
|
4855
5049
|
|
4856
5050
|
if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type])
|
@@ -4877,11 +5071,12 @@ class HPXMLFile
|
|
4877
5071
|
|
4878
5072
|
distribution_system_idref = hvac_distribution.id
|
4879
5073
|
end
|
5074
|
+
cfis_addtl_runtime_operating_mode = HPXML::CFISModeAirHandler
|
4880
5075
|
end
|
4881
5076
|
|
4882
5077
|
if args[:mech_vent_num_units_served] > 1
|
4883
5078
|
is_shared_system = true
|
4884
|
-
in_unit_flow_rate =
|
5079
|
+
in_unit_flow_rate = args[:mech_vent_flow_rate].get / args[:mech_vent_num_units_served].to_f
|
4885
5080
|
fraction_recirculation = args[:mech_vent_shared_frac_recirculation].get
|
4886
5081
|
if args[:mech_vent_shared_preheating_fuel].is_initialized && args[:mech_vent_shared_preheating_efficiency].is_initialized && args[:mech_vent_shared_preheating_fraction_heat_load_served].is_initialized
|
4887
5082
|
preheating_fuel = args[:mech_vent_shared_preheating_fuel].get
|
@@ -4895,20 +5090,21 @@ class HPXMLFile
|
|
4895
5090
|
end
|
4896
5091
|
end
|
4897
5092
|
|
4898
|
-
if args[:mech_vent_hours_in_operation]
|
4899
|
-
hours_in_operation =
|
5093
|
+
if args[:mech_vent_hours_in_operation].is_initialized
|
5094
|
+
hours_in_operation = args[:mech_vent_hours_in_operation].get
|
4900
5095
|
end
|
4901
5096
|
|
4902
|
-
if args[:mech_vent_fan_power]
|
4903
|
-
fan_power =
|
5097
|
+
if args[:mech_vent_fan_power].is_initialized
|
5098
|
+
fan_power = args[:mech_vent_fan_power].get
|
4904
5099
|
end
|
4905
5100
|
|
4906
|
-
if args[:mech_vent_flow_rate]
|
4907
|
-
rated_flow_rate =
|
5101
|
+
if args[:mech_vent_flow_rate].is_initialized
|
5102
|
+
rated_flow_rate = args[:mech_vent_flow_rate].get
|
4908
5103
|
end
|
4909
5104
|
|
4910
5105
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4911
5106
|
fan_type: args[:mech_vent_fan_type],
|
5107
|
+
cfis_addtl_runtime_operating_mode: cfis_addtl_runtime_operating_mode,
|
4912
5108
|
rated_flow_rate: rated_flow_rate,
|
4913
5109
|
hours_in_operation: hours_in_operation,
|
4914
5110
|
used_for_whole_building_ventilation: true,
|
@@ -4948,13 +5144,8 @@ class HPXMLFile
|
|
4948
5144
|
end
|
4949
5145
|
end
|
4950
5146
|
|
4951
|
-
|
4952
|
-
|
4953
|
-
end
|
4954
|
-
|
4955
|
-
if args[:mech_vent_2_fan_power] != Constants.Auto
|
4956
|
-
fan_power = Float(args[:mech_vent_2_fan_power])
|
4957
|
-
end
|
5147
|
+
hours_in_operation = args[:mech_vent_2_hours_in_operation]
|
5148
|
+
fan_power = args[:mech_vent_2_fan_power]
|
4958
5149
|
|
4959
5150
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4960
5151
|
fan_type: args[:mech_vent_2_fan_type],
|
@@ -4968,33 +5159,25 @@ class HPXMLFile
|
|
4968
5159
|
fan_power: fan_power)
|
4969
5160
|
end
|
4970
5161
|
|
4971
|
-
if
|
5162
|
+
if !args[:kitchen_fans_quantity].is_initialized || (args[:kitchen_fans_quantity].get > 0)
|
4972
5163
|
if args[:kitchen_fans_flow_rate].is_initialized
|
4973
|
-
|
4974
|
-
rated_flow_rate = Float(args[:kitchen_fans_flow_rate].get)
|
4975
|
-
end
|
5164
|
+
rated_flow_rate = args[:kitchen_fans_flow_rate].get
|
4976
5165
|
end
|
4977
5166
|
|
4978
5167
|
if args[:kitchen_fans_power].is_initialized
|
4979
|
-
|
4980
|
-
fan_power = Float(args[:kitchen_fans_power].get)
|
4981
|
-
end
|
5168
|
+
fan_power = args[:kitchen_fans_power].get
|
4982
5169
|
end
|
4983
5170
|
|
4984
5171
|
if args[:kitchen_fans_hours_in_operation].is_initialized
|
4985
|
-
|
4986
|
-
hours_in_operation = Float(args[:kitchen_fans_hours_in_operation].get)
|
4987
|
-
end
|
5172
|
+
hours_in_operation = args[:kitchen_fans_hours_in_operation].get
|
4988
5173
|
end
|
4989
5174
|
|
4990
5175
|
if args[:kitchen_fans_start_hour].is_initialized
|
4991
|
-
|
4992
|
-
start_hour = Integer(args[:kitchen_fans_start_hour].get)
|
4993
|
-
end
|
5176
|
+
start_hour = args[:kitchen_fans_start_hour].get
|
4994
5177
|
end
|
4995
5178
|
|
4996
|
-
if args[:kitchen_fans_quantity]
|
4997
|
-
quantity =
|
5179
|
+
if args[:kitchen_fans_quantity].is_initialized
|
5180
|
+
quantity = args[:kitchen_fans_quantity].get
|
4998
5181
|
end
|
4999
5182
|
|
5000
5183
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
@@ -5007,33 +5190,25 @@ class HPXMLFile
|
|
5007
5190
|
quantity: quantity)
|
5008
5191
|
end
|
5009
5192
|
|
5010
|
-
if
|
5193
|
+
if !args[:bathroom_fans_quantity].is_initialized || (args[:bathroom_fans_quantity].get > 0)
|
5011
5194
|
if args[:bathroom_fans_flow_rate].is_initialized
|
5012
|
-
|
5013
|
-
rated_flow_rate = Float(args[:bathroom_fans_flow_rate].get)
|
5014
|
-
end
|
5195
|
+
rated_flow_rate = args[:bathroom_fans_flow_rate].get
|
5015
5196
|
end
|
5016
5197
|
|
5017
5198
|
if args[:bathroom_fans_power].is_initialized
|
5018
|
-
|
5019
|
-
fan_power = Float(args[:bathroom_fans_power].get)
|
5020
|
-
end
|
5199
|
+
fan_power = args[:bathroom_fans_power].get
|
5021
5200
|
end
|
5022
5201
|
|
5023
5202
|
if args[:bathroom_fans_hours_in_operation].is_initialized
|
5024
|
-
|
5025
|
-
hours_in_operation = Float(args[:bathroom_fans_hours_in_operation].get)
|
5026
|
-
end
|
5203
|
+
hours_in_operation = args[:bathroom_fans_hours_in_operation].get
|
5027
5204
|
end
|
5028
5205
|
|
5029
5206
|
if args[:bathroom_fans_start_hour].is_initialized
|
5030
|
-
|
5031
|
-
start_hour = Integer(args[:bathroom_fans_start_hour].get)
|
5032
|
-
end
|
5207
|
+
start_hour = args[:bathroom_fans_start_hour].get
|
5033
5208
|
end
|
5034
5209
|
|
5035
|
-
if args[:bathroom_fans_quantity]
|
5036
|
-
quantity =
|
5210
|
+
if args[:bathroom_fans_quantity].is_initialized
|
5211
|
+
quantity = args[:bathroom_fans_quantity].get
|
5037
5212
|
end
|
5038
5213
|
|
5039
5214
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
@@ -5048,15 +5223,11 @@ class HPXMLFile
|
|
5048
5223
|
|
5049
5224
|
if args[:whole_house_fan_present]
|
5050
5225
|
if args[:whole_house_fan_flow_rate].is_initialized
|
5051
|
-
|
5052
|
-
rated_flow_rate = Float(args[:whole_house_fan_flow_rate].get)
|
5053
|
-
end
|
5226
|
+
rated_flow_rate = args[:whole_house_fan_flow_rate].get
|
5054
5227
|
end
|
5055
5228
|
|
5056
5229
|
if args[:whole_house_fan_power].is_initialized
|
5057
|
-
|
5058
|
-
fan_power = Float(args[:whole_house_fan_power].get)
|
5059
|
-
end
|
5230
|
+
fan_power = args[:whole_house_fan_power].get
|
5060
5231
|
end
|
5061
5232
|
|
5062
5233
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
@@ -5066,7 +5237,7 @@ class HPXMLFile
|
|
5066
5237
|
end
|
5067
5238
|
end
|
5068
5239
|
|
5069
|
-
def self.set_water_heating_systems(hpxml,
|
5240
|
+
def self.set_water_heating_systems(hpxml, args)
|
5070
5241
|
water_heater_type = args[:water_heater_type]
|
5071
5242
|
return if water_heater_type == 'none'
|
5072
5243
|
|
@@ -5076,16 +5247,16 @@ class HPXMLFile
|
|
5076
5247
|
fuel_type = HPXML::FuelTypeElectricity
|
5077
5248
|
end
|
5078
5249
|
|
5079
|
-
if args[:water_heater_location]
|
5080
|
-
location = args[:water_heater_location]
|
5250
|
+
if args[:water_heater_location].is_initialized
|
5251
|
+
location = args[:water_heater_location].get
|
5081
5252
|
end
|
5082
5253
|
|
5083
|
-
if args[:water_heater_tank_volume]
|
5084
|
-
tank_volume =
|
5254
|
+
if args[:water_heater_tank_volume].is_initialized
|
5255
|
+
tank_volume = args[:water_heater_tank_volume].get
|
5085
5256
|
end
|
5086
5257
|
|
5087
|
-
if args[:water_heater_setpoint_temperature]
|
5088
|
-
temperature =
|
5258
|
+
if args[:water_heater_setpoint_temperature].is_initialized
|
5259
|
+
temperature = args[:water_heater_setpoint_temperature].get
|
5089
5260
|
end
|
5090
5261
|
|
5091
5262
|
if not [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? water_heater_type
|
@@ -5100,8 +5271,8 @@ class HPXMLFile
|
|
5100
5271
|
end
|
5101
5272
|
|
5102
5273
|
if (fuel_type != HPXML::FuelTypeElectricity) && (water_heater_type == HPXML::WaterHeaterTypeStorage)
|
5103
|
-
if args[:water_heater_recovery_efficiency]
|
5104
|
-
recovery_efficiency =
|
5274
|
+
if args[:water_heater_recovery_efficiency].is_initialized
|
5275
|
+
recovery_efficiency = args[:water_heater_recovery_efficiency].get
|
5105
5276
|
end
|
5106
5277
|
end
|
5107
5278
|
|
@@ -5124,7 +5295,8 @@ class HPXMLFile
|
|
5124
5295
|
if [HPXML::WaterHeaterTypeCombiTankless, HPXML::WaterHeaterTypeCombiStorage].include? water_heater_type
|
5125
5296
|
if args[:water_heater_standby_loss].is_initialized
|
5126
5297
|
if args[:water_heater_standby_loss].get > 0
|
5127
|
-
|
5298
|
+
standby_loss_units = HPXML::UnitsDegFPerHour
|
5299
|
+
standby_loss_value = args[:water_heater_standby_loss].get
|
5128
5300
|
end
|
5129
5301
|
end
|
5130
5302
|
end
|
@@ -5162,8 +5334,8 @@ class HPXMLFile
|
|
5162
5334
|
end
|
5163
5335
|
|
5164
5336
|
if [HPXML::WaterHeaterTypeStorage].include? water_heater_type
|
5165
|
-
if args[:water_heater_heating_capacity]
|
5166
|
-
heating_capacity =
|
5337
|
+
if args[:water_heater_heating_capacity].is_initialized
|
5338
|
+
heating_capacity = args[:water_heater_heating_capacity].get
|
5167
5339
|
end
|
5168
5340
|
|
5169
5341
|
if args[:water_heater_tank_model_type].is_initialized
|
@@ -5187,7 +5359,8 @@ class HPXMLFile
|
|
5187
5359
|
recovery_efficiency: recovery_efficiency,
|
5188
5360
|
uses_desuperheater: uses_desuperheater,
|
5189
5361
|
related_hvac_idref: related_hvac_idref,
|
5190
|
-
|
5362
|
+
standby_loss_units: standby_loss_units,
|
5363
|
+
standby_loss_value: standby_loss_value,
|
5191
5364
|
jacket_r_value: jacket_r_value,
|
5192
5365
|
temperature: temperature,
|
5193
5366
|
heating_capacity: heating_capacity,
|
@@ -5197,7 +5370,7 @@ class HPXMLFile
|
|
5197
5370
|
operating_mode: operating_mode)
|
5198
5371
|
end
|
5199
5372
|
|
5200
|
-
def self.set_hot_water_distribution(hpxml,
|
5373
|
+
def self.set_hot_water_distribution(hpxml, args)
|
5201
5374
|
return if args[:water_heater_type] == 'none'
|
5202
5375
|
|
5203
5376
|
if args[:dwhr_facilities_connected] != 'none'
|
@@ -5207,27 +5380,27 @@ class HPXMLFile
|
|
5207
5380
|
end
|
5208
5381
|
|
5209
5382
|
if args[:hot_water_distribution_system_type] == HPXML::DHWDistTypeStandard
|
5210
|
-
if args[:hot_water_distribution_standard_piping_length]
|
5211
|
-
standard_piping_length =
|
5383
|
+
if args[:hot_water_distribution_standard_piping_length].is_initialized
|
5384
|
+
standard_piping_length = args[:hot_water_distribution_standard_piping_length].get
|
5212
5385
|
end
|
5213
5386
|
else
|
5214
5387
|
recirculation_control_type = args[:hot_water_distribution_recirc_control_type]
|
5215
5388
|
|
5216
|
-
if args[:hot_water_distribution_recirc_piping_length]
|
5217
|
-
recirculation_piping_length =
|
5389
|
+
if args[:hot_water_distribution_recirc_piping_length].is_initialized
|
5390
|
+
recirculation_piping_length = args[:hot_water_distribution_recirc_piping_length].get
|
5218
5391
|
end
|
5219
5392
|
|
5220
|
-
if args[:hot_water_distribution_recirc_branch_piping_length]
|
5221
|
-
recirculation_branch_piping_length =
|
5393
|
+
if args[:hot_water_distribution_recirc_branch_piping_length].is_initialized
|
5394
|
+
recirculation_branch_piping_length = args[:hot_water_distribution_recirc_branch_piping_length].get
|
5222
5395
|
end
|
5223
5396
|
|
5224
|
-
if args[:hot_water_distribution_recirc_pump_power]
|
5225
|
-
recirculation_pump_power =
|
5397
|
+
if args[:hot_water_distribution_recirc_pump_power].is_initialized
|
5398
|
+
recirculation_pump_power = args[:hot_water_distribution_recirc_pump_power].get
|
5226
5399
|
end
|
5227
5400
|
end
|
5228
5401
|
|
5229
|
-
if args[:hot_water_distribution_pipe_r]
|
5230
|
-
pipe_r_value =
|
5402
|
+
if args[:hot_water_distribution_pipe_r].is_initialized
|
5403
|
+
pipe_r_value = args[:hot_water_distribution_pipe_r].get
|
5231
5404
|
end
|
5232
5405
|
|
5233
5406
|
hpxml.hot_water_distributions.add(id: "HotWaterDistribution#{hpxml.hot_water_distributions.size + 1}",
|
@@ -5243,7 +5416,7 @@ class HPXMLFile
|
|
5243
5416
|
dwhr_efficiency: dwhr_efficiency)
|
5244
5417
|
end
|
5245
5418
|
|
5246
|
-
def self.set_water_fixtures(hpxml,
|
5419
|
+
def self.set_water_fixtures(hpxml, args)
|
5247
5420
|
return if args[:water_heater_type] == 'none'
|
5248
5421
|
|
5249
5422
|
hpxml.water_fixtures.add(id: "WaterFixture#{hpxml.water_fixtures.size + 1}",
|
@@ -5254,12 +5427,12 @@ class HPXMLFile
|
|
5254
5427
|
water_fixture_type: HPXML::WaterFixtureTypeFaucet,
|
5255
5428
|
low_flow: args[:water_fixtures_sink_low_flow])
|
5256
5429
|
|
5257
|
-
if args[:water_fixtures_usage_multiplier]
|
5258
|
-
hpxml.water_heating.water_fixtures_usage_multiplier = args[:water_fixtures_usage_multiplier]
|
5430
|
+
if args[:water_fixtures_usage_multiplier].is_initialized
|
5431
|
+
hpxml.water_heating.water_fixtures_usage_multiplier = args[:water_fixtures_usage_multiplier].get
|
5259
5432
|
end
|
5260
5433
|
end
|
5261
5434
|
|
5262
|
-
def self.set_solar_thermal(hpxml,
|
5435
|
+
def self.set_solar_thermal(hpxml, args, epw_file)
|
5263
5436
|
return if args[:solar_thermal_system_type] == 'none'
|
5264
5437
|
|
5265
5438
|
if args[:solar_thermal_solar_fraction] > 0
|
@@ -5273,8 +5446,8 @@ class HPXMLFile
|
|
5273
5446
|
collector_frta = args[:solar_thermal_collector_rated_optical_efficiency]
|
5274
5447
|
collector_frul = args[:solar_thermal_collector_rated_thermal_losses]
|
5275
5448
|
|
5276
|
-
if args[:solar_thermal_storage_volume]
|
5277
|
-
storage_volume =
|
5449
|
+
if args[:solar_thermal_storage_volume].is_initialized
|
5450
|
+
storage_volume = args[:solar_thermal_storage_volume].get
|
5278
5451
|
end
|
5279
5452
|
end
|
5280
5453
|
|
@@ -5296,20 +5469,20 @@ class HPXMLFile
|
|
5296
5469
|
solar_fraction: solar_fraction)
|
5297
5470
|
end
|
5298
5471
|
|
5299
|
-
def self.set_pv_systems(hpxml,
|
5300
|
-
[args[:
|
5301
|
-
next
|
5472
|
+
def self.set_pv_systems(hpxml, args, epw_file)
|
5473
|
+
[args[:pv_system_present], args[:pv_system_2_present]].each_with_index do |pv_system_present, i|
|
5474
|
+
next unless pv_system_present
|
5302
5475
|
|
5303
|
-
if [args[:pv_system_module_type], args[:pv_system_2_module_type]][i]
|
5304
|
-
module_type = [args[:pv_system_module_type], args[:pv_system_2_module_type]][i]
|
5476
|
+
if [args[:pv_system_module_type], args[:pv_system_2_module_type]][i].is_initialized
|
5477
|
+
module_type = [args[:pv_system_module_type], args[:pv_system_2_module_type]][i].get
|
5305
5478
|
end
|
5306
5479
|
|
5307
|
-
if [args[:pv_system_location], args[:pv_system_2_location]][i]
|
5308
|
-
location = [args[:pv_system_location], args[:pv_system_2_location]][i]
|
5480
|
+
if [args[:pv_system_location], args[:pv_system_2_location]][i].is_initialized
|
5481
|
+
location = [args[:pv_system_location], args[:pv_system_2_location]][i].get
|
5309
5482
|
end
|
5310
5483
|
|
5311
|
-
if [args[:pv_system_tracking], args[:pv_system_2_tracking]][i]
|
5312
|
-
tracking = [args[:pv_system_tracking], args[:pv_system_2_tracking]][i]
|
5484
|
+
if [args[:pv_system_tracking], args[:pv_system_2_tracking]][i].is_initialized
|
5485
|
+
tracking = [args[:pv_system_tracking], args[:pv_system_2_tracking]][i].get
|
5313
5486
|
end
|
5314
5487
|
|
5315
5488
|
max_power_output = [args[:pv_system_max_power_output], args[:pv_system_2_max_power_output]][i]
|
@@ -5323,9 +5496,9 @@ class HPXMLFile
|
|
5323
5496
|
end
|
5324
5497
|
|
5325
5498
|
if [HPXML::ResidentialTypeSFA, HPXML::ResidentialTypeApartment].include? args[:geometry_unit_type]
|
5326
|
-
if args[:pv_system_num_bedrooms_served] > args[:geometry_unit_num_bedrooms]
|
5499
|
+
if args[:pv_system_num_bedrooms_served].get > args[:geometry_unit_num_bedrooms]
|
5327
5500
|
is_shared_system = true
|
5328
|
-
number_of_bedrooms_served = args[:pv_system_num_bedrooms_served]
|
5501
|
+
number_of_bedrooms_served = args[:pv_system_num_bedrooms_served].get
|
5329
5502
|
end
|
5330
5503
|
end
|
5331
5504
|
|
@@ -5343,25 +5516,27 @@ class HPXMLFile
|
|
5343
5516
|
end
|
5344
5517
|
end
|
5345
5518
|
|
5346
|
-
def self.set_battery(hpxml,
|
5347
|
-
return
|
5519
|
+
def self.set_battery(hpxml, args)
|
5520
|
+
return unless args[:battery_present]
|
5348
5521
|
|
5349
|
-
if args[:battery_location]
|
5350
|
-
location = args[:battery_location]
|
5522
|
+
if args[:battery_location].is_initialized
|
5523
|
+
location = args[:battery_location].get
|
5351
5524
|
end
|
5352
5525
|
|
5353
|
-
if args[:battery_power]
|
5354
|
-
rated_power_output =
|
5526
|
+
if args[:battery_power].is_initialized
|
5527
|
+
rated_power_output = args[:battery_power].get
|
5355
5528
|
end
|
5356
5529
|
|
5357
|
-
if args[:battery_capacity]
|
5358
|
-
nominal_capacity_kwh =
|
5530
|
+
if args[:battery_capacity].is_initialized
|
5531
|
+
nominal_capacity_kwh = args[:battery_capacity].get
|
5359
5532
|
end
|
5360
5533
|
|
5361
5534
|
if args[:battery_usable_capacity].is_initialized
|
5362
|
-
|
5363
|
-
|
5364
|
-
|
5535
|
+
usable_capacity_kwh = args[:battery_usable_capacity].get
|
5536
|
+
end
|
5537
|
+
|
5538
|
+
if args[:battery_round_trip_efficiency].is_initialized
|
5539
|
+
round_trip_efficiency = args[:battery_round_trip_efficiency].get
|
5365
5540
|
end
|
5366
5541
|
|
5367
5542
|
hpxml.batteries.add(id: "Battery#{hpxml.batteries.size + 1}",
|
@@ -5369,11 +5544,12 @@ class HPXMLFile
|
|
5369
5544
|
location: location,
|
5370
5545
|
rated_power_output: rated_power_output,
|
5371
5546
|
nominal_capacity_kwh: nominal_capacity_kwh,
|
5372
|
-
usable_capacity_kwh: usable_capacity_kwh
|
5547
|
+
usable_capacity_kwh: usable_capacity_kwh,
|
5548
|
+
round_trip_efficiency: round_trip_efficiency)
|
5373
5549
|
end
|
5374
5550
|
|
5375
|
-
def self.set_lighting(hpxml,
|
5376
|
-
return
|
5551
|
+
def self.set_lighting(hpxml, args)
|
5552
|
+
return unless args[:lighting_present] || args[:ceiling_fan_present] # If ceiling fans present but not lighting present, need to continue and use lighting multipliers = 0 instead
|
5377
5553
|
|
5378
5554
|
hpxml.lighting_groups.add(id: "LightingGroup#{hpxml.lighting_groups.size + 1}",
|
5379
5555
|
location: HPXML::LocationInterior,
|
@@ -5412,24 +5588,30 @@ class HPXMLFile
|
|
5412
5588
|
fraction_of_units_in_location: args[:lighting_garage_fraction_led],
|
5413
5589
|
lighting_type: HPXML::LightingTypeLED)
|
5414
5590
|
|
5415
|
-
if args[:
|
5416
|
-
|
5417
|
-
|
5591
|
+
if args[:lighting_present]
|
5592
|
+
if args[:lighting_interior_usage_multiplier].is_initialized
|
5593
|
+
hpxml.lighting.interior_usage_multiplier = args[:lighting_interior_usage_multiplier].get
|
5594
|
+
end
|
5418
5595
|
|
5419
|
-
|
5420
|
-
|
5421
|
-
|
5596
|
+
if args[:lighting_exterior_usage_multiplier].is_initialized
|
5597
|
+
hpxml.lighting.exterior_usage_multiplier = args[:lighting_exterior_usage_multiplier].get
|
5598
|
+
end
|
5422
5599
|
|
5423
|
-
|
5424
|
-
|
5600
|
+
if args[:lighting_garage_usage_multiplier].is_initialized
|
5601
|
+
hpxml.lighting.garage_usage_multiplier = args[:lighting_garage_usage_multiplier].get
|
5602
|
+
end
|
5603
|
+
elsif args[:ceiling_fan_present]
|
5604
|
+
hpxml.lighting.interior_usage_multiplier = 0.0
|
5605
|
+
hpxml.lighting.exterior_usage_multiplier = 0.0
|
5606
|
+
hpxml.lighting.garage_usage_multiplier = 0.0
|
5425
5607
|
end
|
5426
5608
|
|
5427
5609
|
return unless args[:holiday_lighting_present]
|
5428
5610
|
|
5429
5611
|
hpxml.lighting.holiday_exists = true
|
5430
5612
|
|
5431
|
-
if args[:holiday_lighting_daily_kwh]
|
5432
|
-
hpxml.lighting.holiday_kwh_per_day =
|
5613
|
+
if args[:holiday_lighting_daily_kwh].is_initialized
|
5614
|
+
hpxml.lighting.holiday_kwh_per_day = args[:holiday_lighting_daily_kwh].get
|
5433
5615
|
end
|
5434
5616
|
|
5435
5617
|
if args[:holiday_lighting_period].is_initialized
|
@@ -5441,7 +5623,7 @@ class HPXMLFile
|
|
5441
5623
|
end
|
5442
5624
|
end
|
5443
5625
|
|
5444
|
-
def self.set_dehumidifier(hpxml,
|
5626
|
+
def self.set_dehumidifier(hpxml, args)
|
5445
5627
|
return if args[:dehumidifier_type] == 'none'
|
5446
5628
|
|
5447
5629
|
if args[:dehumidifier_efficiency_type] == 'EnergyFactor'
|
@@ -5460,52 +5642,48 @@ class HPXMLFile
|
|
5460
5642
|
location: HPXML::LocationLivingSpace)
|
5461
5643
|
end
|
5462
5644
|
|
5463
|
-
def self.set_clothes_washer(hpxml,
|
5464
|
-
if args[:water_heater_type] == 'none'
|
5465
|
-
|
5466
|
-
end
|
5467
|
-
|
5468
|
-
return if args[:clothes_washer_location] == 'none'
|
5645
|
+
def self.set_clothes_washer(hpxml, args)
|
5646
|
+
return if args[:water_heater_type] == 'none'
|
5647
|
+
return unless args[:clothes_washer_present]
|
5469
5648
|
|
5470
|
-
if args[:clothes_washer_rated_annual_kwh]
|
5471
|
-
rated_annual_kwh =
|
5472
|
-
return if Float(rated_annual_kwh) == 0
|
5649
|
+
if args[:clothes_washer_rated_annual_kwh].is_initialized
|
5650
|
+
rated_annual_kwh = args[:clothes_washer_rated_annual_kwh].get
|
5473
5651
|
end
|
5474
5652
|
|
5475
|
-
if args[:clothes_washer_location]
|
5476
|
-
location = args[:clothes_washer_location]
|
5653
|
+
if args[:clothes_washer_location].is_initialized
|
5654
|
+
location = args[:clothes_washer_location].get
|
5477
5655
|
end
|
5478
5656
|
|
5479
|
-
if args[:clothes_washer_efficiency]
|
5657
|
+
if args[:clothes_washer_efficiency].is_initialized
|
5480
5658
|
if args[:clothes_washer_efficiency_type] == 'ModifiedEnergyFactor'
|
5481
|
-
modified_energy_factor =
|
5659
|
+
modified_energy_factor = args[:clothes_washer_efficiency].get
|
5482
5660
|
elsif args[:clothes_washer_efficiency_type] == 'IntegratedModifiedEnergyFactor'
|
5483
|
-
integrated_modified_energy_factor =
|
5661
|
+
integrated_modified_energy_factor = args[:clothes_washer_efficiency].get
|
5484
5662
|
end
|
5485
5663
|
end
|
5486
5664
|
|
5487
|
-
if args[:clothes_washer_label_electric_rate]
|
5488
|
-
label_electric_rate =
|
5665
|
+
if args[:clothes_washer_label_electric_rate].is_initialized
|
5666
|
+
label_electric_rate = args[:clothes_washer_label_electric_rate].get
|
5489
5667
|
end
|
5490
5668
|
|
5491
|
-
if args[:clothes_washer_label_gas_rate]
|
5492
|
-
label_gas_rate =
|
5669
|
+
if args[:clothes_washer_label_gas_rate].is_initialized
|
5670
|
+
label_gas_rate = args[:clothes_washer_label_gas_rate].get
|
5493
5671
|
end
|
5494
5672
|
|
5495
|
-
if args[:clothes_washer_label_annual_gas_cost]
|
5496
|
-
label_annual_gas_cost =
|
5673
|
+
if args[:clothes_washer_label_annual_gas_cost].is_initialized
|
5674
|
+
label_annual_gas_cost = args[:clothes_washer_label_annual_gas_cost].get
|
5497
5675
|
end
|
5498
5676
|
|
5499
|
-
if args[:clothes_washer_label_usage]
|
5500
|
-
label_usage =
|
5677
|
+
if args[:clothes_washer_label_usage].is_initialized
|
5678
|
+
label_usage = args[:clothes_washer_label_usage].get
|
5501
5679
|
end
|
5502
5680
|
|
5503
|
-
if args[:clothes_washer_capacity]
|
5504
|
-
capacity =
|
5681
|
+
if args[:clothes_washer_capacity].is_initialized
|
5682
|
+
capacity = args[:clothes_washer_capacity].get
|
5505
5683
|
end
|
5506
5684
|
|
5507
|
-
if args[:clothes_washer_usage_multiplier]
|
5508
|
-
usage_multiplier =
|
5685
|
+
if args[:clothes_washer_usage_multiplier].is_initialized
|
5686
|
+
usage_multiplier = args[:clothes_washer_usage_multiplier].get
|
5509
5687
|
end
|
5510
5688
|
|
5511
5689
|
hpxml.clothes_washers.add(id: "ClothesWasher#{hpxml.clothes_washers.size + 1}",
|
@@ -5521,32 +5699,33 @@ class HPXMLFile
|
|
5521
5699
|
usage_multiplier: usage_multiplier)
|
5522
5700
|
end
|
5523
5701
|
|
5524
|
-
def self.set_clothes_dryer(hpxml,
|
5525
|
-
return if args[:
|
5526
|
-
return
|
5702
|
+
def self.set_clothes_dryer(hpxml, args)
|
5703
|
+
return if args[:water_heater_type] == 'none'
|
5704
|
+
return unless args[:clothes_washer_present]
|
5705
|
+
return unless args[:clothes_dryer_present]
|
5527
5706
|
|
5528
|
-
if args[:clothes_dryer_efficiency]
|
5707
|
+
if args[:clothes_dryer_efficiency].is_initialized
|
5529
5708
|
if args[:clothes_dryer_efficiency_type] == 'EnergyFactor'
|
5530
|
-
energy_factor =
|
5709
|
+
energy_factor = args[:clothes_dryer_efficiency].get
|
5531
5710
|
elsif args[:clothes_dryer_efficiency_type] == 'CombinedEnergyFactor'
|
5532
|
-
combined_energy_factor =
|
5711
|
+
combined_energy_factor = args[:clothes_dryer_efficiency].get
|
5533
5712
|
end
|
5534
5713
|
end
|
5535
5714
|
|
5536
|
-
if args[:clothes_dryer_location]
|
5537
|
-
location = args[:clothes_dryer_location]
|
5715
|
+
if args[:clothes_dryer_location].is_initialized
|
5716
|
+
location = args[:clothes_dryer_location].get
|
5538
5717
|
end
|
5539
5718
|
|
5540
|
-
if args[:clothes_dryer_vented_flow_rate]
|
5719
|
+
if args[:clothes_dryer_vented_flow_rate].is_initialized
|
5541
5720
|
is_vented = false
|
5542
|
-
if
|
5721
|
+
if args[:clothes_dryer_vented_flow_rate].get > 0
|
5543
5722
|
is_vented = true
|
5544
|
-
vented_flow_rate =
|
5723
|
+
vented_flow_rate = args[:clothes_dryer_vented_flow_rate].get
|
5545
5724
|
end
|
5546
5725
|
end
|
5547
5726
|
|
5548
|
-
if args[:clothes_dryer_usage_multiplier]
|
5549
|
-
usage_multiplier = args[:clothes_dryer_usage_multiplier]
|
5727
|
+
if args[:clothes_dryer_usage_multiplier].is_initialized
|
5728
|
+
usage_multiplier = args[:clothes_dryer_usage_multiplier].get
|
5550
5729
|
end
|
5551
5730
|
|
5552
5731
|
hpxml.clothes_dryers.add(id: "ClothesDryer#{hpxml.clothes_dryers.size + 1}",
|
@@ -5559,44 +5738,46 @@ class HPXMLFile
|
|
5559
5738
|
usage_multiplier: usage_multiplier)
|
5560
5739
|
end
|
5561
5740
|
|
5562
|
-
def self.set_dishwasher(hpxml,
|
5563
|
-
return if args[:
|
5741
|
+
def self.set_dishwasher(hpxml, args)
|
5742
|
+
return if args[:water_heater_type] == 'none'
|
5743
|
+
return unless args[:dishwasher_present]
|
5564
5744
|
|
5565
|
-
if args[:dishwasher_location]
|
5566
|
-
location = args[:dishwasher_location]
|
5745
|
+
if args[:dishwasher_location].is_initialized
|
5746
|
+
location = args[:dishwasher_location].get
|
5567
5747
|
end
|
5568
5748
|
|
5569
5749
|
if args[:dishwasher_efficiency_type] == 'RatedAnnualkWh'
|
5570
|
-
if args[:dishwasher_efficiency]
|
5571
|
-
rated_annual_kwh =
|
5572
|
-
return if Float(rated_annual_kwh) == 0
|
5750
|
+
if args[:dishwasher_efficiency].is_initialized
|
5751
|
+
rated_annual_kwh = args[:dishwasher_efficiency].get
|
5573
5752
|
end
|
5574
5753
|
elsif args[:dishwasher_efficiency_type] == 'EnergyFactor'
|
5575
|
-
|
5754
|
+
if args[:dishwasher_efficiency].is_initialized
|
5755
|
+
energy_factor = args[:dishwasher_efficiency].get
|
5756
|
+
end
|
5576
5757
|
end
|
5577
5758
|
|
5578
|
-
if args[:dishwasher_label_electric_rate]
|
5579
|
-
label_electric_rate =
|
5759
|
+
if args[:dishwasher_label_electric_rate].is_initialized
|
5760
|
+
label_electric_rate = args[:dishwasher_label_electric_rate].get
|
5580
5761
|
end
|
5581
5762
|
|
5582
|
-
if args[:dishwasher_label_gas_rate]
|
5583
|
-
label_gas_rate =
|
5763
|
+
if args[:dishwasher_label_gas_rate].is_initialized
|
5764
|
+
label_gas_rate = args[:dishwasher_label_gas_rate].get
|
5584
5765
|
end
|
5585
5766
|
|
5586
|
-
if args[:dishwasher_label_annual_gas_cost]
|
5587
|
-
label_annual_gas_cost =
|
5767
|
+
if args[:dishwasher_label_annual_gas_cost].is_initialized
|
5768
|
+
label_annual_gas_cost = args[:dishwasher_label_annual_gas_cost].get
|
5588
5769
|
end
|
5589
5770
|
|
5590
|
-
if args[:dishwasher_label_usage]
|
5591
|
-
label_usage =
|
5771
|
+
if args[:dishwasher_label_usage].is_initialized
|
5772
|
+
label_usage = args[:dishwasher_label_usage].get
|
5592
5773
|
end
|
5593
5774
|
|
5594
|
-
if args[:dishwasher_place_setting_capacity]
|
5595
|
-
place_setting_capacity =
|
5775
|
+
if args[:dishwasher_place_setting_capacity].is_initialized
|
5776
|
+
place_setting_capacity = args[:dishwasher_place_setting_capacity].get
|
5596
5777
|
end
|
5597
5778
|
|
5598
|
-
if args[:dishwasher_usage_multiplier]
|
5599
|
-
usage_multiplier = args[:dishwasher_usage_multiplier]
|
5779
|
+
if args[:dishwasher_usage_multiplier].is_initialized
|
5780
|
+
usage_multiplier = args[:dishwasher_usage_multiplier].get
|
5600
5781
|
end
|
5601
5782
|
|
5602
5783
|
hpxml.dishwashers.add(id: "Dishwasher#{hpxml.dishwashers.size + 1}",
|
@@ -5611,20 +5792,19 @@ class HPXMLFile
|
|
5611
5792
|
usage_multiplier: usage_multiplier)
|
5612
5793
|
end
|
5613
5794
|
|
5614
|
-
def self.set_refrigerator(hpxml,
|
5615
|
-
return
|
5795
|
+
def self.set_refrigerator(hpxml, args)
|
5796
|
+
return unless args[:refrigerator_present]
|
5616
5797
|
|
5617
|
-
if args[:refrigerator_rated_annual_kwh]
|
5618
|
-
rated_annual_kwh =
|
5619
|
-
return if Float(rated_annual_kwh) == 0
|
5798
|
+
if args[:refrigerator_rated_annual_kwh].is_initialized
|
5799
|
+
rated_annual_kwh = args[:refrigerator_rated_annual_kwh].get
|
5620
5800
|
end
|
5621
5801
|
|
5622
|
-
if args[:refrigerator_location]
|
5623
|
-
location = args[:refrigerator_location]
|
5802
|
+
if args[:refrigerator_location].is_initialized
|
5803
|
+
location = args[:refrigerator_location].get
|
5624
5804
|
end
|
5625
5805
|
|
5626
|
-
if args[:refrigerator_usage_multiplier]
|
5627
|
-
usage_multiplier = args[:refrigerator_usage_multiplier]
|
5806
|
+
if args[:refrigerator_usage_multiplier].is_initialized
|
5807
|
+
usage_multiplier = args[:refrigerator_usage_multiplier].get
|
5628
5808
|
end
|
5629
5809
|
|
5630
5810
|
hpxml.refrigerators.add(id: "Refrigerator#{hpxml.refrigerators.size + 1}",
|
@@ -5634,20 +5814,19 @@ class HPXMLFile
|
|
5634
5814
|
usage_multiplier: usage_multiplier)
|
5635
5815
|
end
|
5636
5816
|
|
5637
|
-
def self.set_extra_refrigerator(hpxml,
|
5638
|
-
return
|
5817
|
+
def self.set_extra_refrigerator(hpxml, args)
|
5818
|
+
return unless args[:extra_refrigerator_present]
|
5639
5819
|
|
5640
|
-
if args[:extra_refrigerator_rated_annual_kwh]
|
5641
|
-
rated_annual_kwh =
|
5642
|
-
return if Float(rated_annual_kwh) == 0
|
5820
|
+
if args[:extra_refrigerator_rated_annual_kwh].is_initialized
|
5821
|
+
rated_annual_kwh = args[:extra_refrigerator_rated_annual_kwh].get
|
5643
5822
|
end
|
5644
5823
|
|
5645
|
-
if args[:extra_refrigerator_location]
|
5646
|
-
location = args[:extra_refrigerator_location]
|
5824
|
+
if args[:extra_refrigerator_location].is_initialized
|
5825
|
+
location = args[:extra_refrigerator_location].get
|
5647
5826
|
end
|
5648
5827
|
|
5649
|
-
if args[:extra_refrigerator_usage_multiplier]
|
5650
|
-
usage_multiplier = args[:extra_refrigerator_usage_multiplier]
|
5828
|
+
if args[:extra_refrigerator_usage_multiplier].is_initialized
|
5829
|
+
usage_multiplier = args[:extra_refrigerator_usage_multiplier].get
|
5651
5830
|
end
|
5652
5831
|
|
5653
5832
|
hpxml.refrigerators.add(id: "Refrigerator#{hpxml.refrigerators.size + 1}",
|
@@ -5657,20 +5836,19 @@ class HPXMLFile
|
|
5657
5836
|
usage_multiplier: usage_multiplier)
|
5658
5837
|
end
|
5659
5838
|
|
5660
|
-
def self.set_freezer(hpxml,
|
5661
|
-
return
|
5839
|
+
def self.set_freezer(hpxml, args)
|
5840
|
+
return unless args[:freezer_present]
|
5662
5841
|
|
5663
|
-
if args[:freezer_rated_annual_kwh]
|
5664
|
-
rated_annual_kwh =
|
5665
|
-
return if Float(rated_annual_kwh) == 0
|
5842
|
+
if args[:freezer_rated_annual_kwh].is_initialized
|
5843
|
+
rated_annual_kwh = args[:freezer_rated_annual_kwh].get
|
5666
5844
|
end
|
5667
5845
|
|
5668
|
-
if args[:freezer_location]
|
5669
|
-
location = args[:freezer_location]
|
5846
|
+
if args[:freezer_location].is_initialized
|
5847
|
+
location = args[:freezer_location].get
|
5670
5848
|
end
|
5671
5849
|
|
5672
|
-
if args[:freezer_usage_multiplier]
|
5673
|
-
usage_multiplier = args[:freezer_usage_multiplier]
|
5850
|
+
if args[:freezer_usage_multiplier].is_initialized
|
5851
|
+
usage_multiplier = args[:freezer_usage_multiplier].get
|
5674
5852
|
end
|
5675
5853
|
|
5676
5854
|
hpxml.freezers.add(id: "Freezer#{hpxml.freezers.size + 1}",
|
@@ -5679,19 +5857,19 @@ class HPXMLFile
|
|
5679
5857
|
usage_multiplier: usage_multiplier)
|
5680
5858
|
end
|
5681
5859
|
|
5682
|
-
def self.set_cooking_range_oven(hpxml,
|
5683
|
-
return
|
5860
|
+
def self.set_cooking_range_oven(hpxml, args)
|
5861
|
+
return unless args[:cooking_range_oven_present]
|
5684
5862
|
|
5685
|
-
if args[:cooking_range_oven_location]
|
5686
|
-
location = args[:cooking_range_oven_location]
|
5863
|
+
if args[:cooking_range_oven_location].is_initialized
|
5864
|
+
location = args[:cooking_range_oven_location].get
|
5687
5865
|
end
|
5688
5866
|
|
5689
5867
|
if args[:cooking_range_oven_is_induction].is_initialized
|
5690
5868
|
is_induction = args[:cooking_range_oven_is_induction].get
|
5691
5869
|
end
|
5692
5870
|
|
5693
|
-
if args[:cooking_range_oven_usage_multiplier]
|
5694
|
-
usage_multiplier = args[:cooking_range_oven_usage_multiplier]
|
5871
|
+
if args[:cooking_range_oven_usage_multiplier].is_initialized
|
5872
|
+
usage_multiplier = args[:cooking_range_oven_usage_multiplier].get
|
5695
5873
|
end
|
5696
5874
|
|
5697
5875
|
hpxml.cooking_ranges.add(id: "CookingRange#{hpxml.cooking_ranges.size + 1}",
|
@@ -5708,15 +5886,15 @@ class HPXMLFile
|
|
5708
5886
|
is_convection: is_convection)
|
5709
5887
|
end
|
5710
5888
|
|
5711
|
-
def self.set_ceiling_fans(hpxml,
|
5889
|
+
def self.set_ceiling_fans(hpxml, args)
|
5712
5890
|
return unless args[:ceiling_fan_present]
|
5713
5891
|
|
5714
|
-
if args[:ceiling_fan_efficiency]
|
5715
|
-
efficiency =
|
5892
|
+
if args[:ceiling_fan_efficiency].is_initialized
|
5893
|
+
efficiency = args[:ceiling_fan_efficiency].get
|
5716
5894
|
end
|
5717
5895
|
|
5718
|
-
if args[:ceiling_fan_quantity]
|
5719
|
-
quantity =
|
5896
|
+
if args[:ceiling_fan_quantity].is_initialized
|
5897
|
+
quantity = args[:ceiling_fan_quantity].get
|
5720
5898
|
end
|
5721
5899
|
|
5722
5900
|
hpxml.ceiling_fans.add(id: "CeilingFan#{hpxml.ceiling_fans.size + 1}",
|
@@ -5724,15 +5902,15 @@ class HPXMLFile
|
|
5724
5902
|
quantity: quantity)
|
5725
5903
|
end
|
5726
5904
|
|
5727
|
-
def self.set_misc_plug_loads_television(hpxml,
|
5905
|
+
def self.set_misc_plug_loads_television(hpxml, args)
|
5728
5906
|
return unless args[:misc_plug_loads_television_present]
|
5729
5907
|
|
5730
|
-
if args[:misc_plug_loads_television_annual_kwh]
|
5731
|
-
kWh_per_year =
|
5908
|
+
if args[:misc_plug_loads_television_annual_kwh].is_initialized
|
5909
|
+
kWh_per_year = args[:misc_plug_loads_television_annual_kwh].get
|
5732
5910
|
end
|
5733
5911
|
|
5734
|
-
if args[:misc_plug_loads_television_usage_multiplier]
|
5735
|
-
usage_multiplier = args[:misc_plug_loads_television_usage_multiplier]
|
5912
|
+
if args[:misc_plug_loads_television_usage_multiplier].is_initialized
|
5913
|
+
usage_multiplier = args[:misc_plug_loads_television_usage_multiplier].get
|
5736
5914
|
end
|
5737
5915
|
|
5738
5916
|
hpxml.plug_loads.add(id: "PlugLoad#{hpxml.plug_loads.size + 1}",
|
@@ -5741,21 +5919,21 @@ class HPXMLFile
|
|
5741
5919
|
usage_multiplier: usage_multiplier)
|
5742
5920
|
end
|
5743
5921
|
|
5744
|
-
def self.set_misc_plug_loads_other(hpxml,
|
5745
|
-
if args[:misc_plug_loads_other_annual_kwh]
|
5746
|
-
kWh_per_year =
|
5922
|
+
def self.set_misc_plug_loads_other(hpxml, args)
|
5923
|
+
if args[:misc_plug_loads_other_annual_kwh].is_initialized
|
5924
|
+
kWh_per_year = args[:misc_plug_loads_other_annual_kwh].get
|
5747
5925
|
end
|
5748
5926
|
|
5749
|
-
if args[:misc_plug_loads_other_frac_sensible]
|
5750
|
-
frac_sensible =
|
5927
|
+
if args[:misc_plug_loads_other_frac_sensible].is_initialized
|
5928
|
+
frac_sensible = args[:misc_plug_loads_other_frac_sensible].get
|
5751
5929
|
end
|
5752
5930
|
|
5753
|
-
if args[:misc_plug_loads_other_frac_latent]
|
5754
|
-
frac_latent =
|
5931
|
+
if args[:misc_plug_loads_other_frac_latent].is_initialized
|
5932
|
+
frac_latent = args[:misc_plug_loads_other_frac_latent].get
|
5755
5933
|
end
|
5756
5934
|
|
5757
|
-
if args[:misc_plug_loads_other_usage_multiplier]
|
5758
|
-
usage_multiplier = args[:misc_plug_loads_other_usage_multiplier]
|
5935
|
+
if args[:misc_plug_loads_other_usage_multiplier].is_initialized
|
5936
|
+
usage_multiplier = args[:misc_plug_loads_other_usage_multiplier].get
|
5759
5937
|
end
|
5760
5938
|
|
5761
5939
|
hpxml.plug_loads.add(id: "PlugLoad#{hpxml.plug_loads.size + 1}",
|
@@ -5766,15 +5944,15 @@ class HPXMLFile
|
|
5766
5944
|
usage_multiplier: usage_multiplier)
|
5767
5945
|
end
|
5768
5946
|
|
5769
|
-
def self.set_misc_plug_loads_well_pump(hpxml,
|
5947
|
+
def self.set_misc_plug_loads_well_pump(hpxml, args)
|
5770
5948
|
return unless args[:misc_plug_loads_well_pump_present]
|
5771
5949
|
|
5772
|
-
if args[:misc_plug_loads_well_pump_annual_kwh]
|
5773
|
-
kWh_per_year =
|
5950
|
+
if args[:misc_plug_loads_well_pump_annual_kwh].is_initialized
|
5951
|
+
kWh_per_year = args[:misc_plug_loads_well_pump_annual_kwh].get
|
5774
5952
|
end
|
5775
5953
|
|
5776
|
-
if args[:misc_plug_loads_well_pump_usage_multiplier]
|
5777
|
-
usage_multiplier = args[:misc_plug_loads_well_pump_usage_multiplier]
|
5954
|
+
if args[:misc_plug_loads_well_pump_usage_multiplier].is_initialized
|
5955
|
+
usage_multiplier = args[:misc_plug_loads_well_pump_usage_multiplier].get
|
5778
5956
|
end
|
5779
5957
|
|
5780
5958
|
hpxml.plug_loads.add(id: "PlugLoad#{hpxml.plug_loads.size + 1}",
|
@@ -5783,15 +5961,15 @@ class HPXMLFile
|
|
5783
5961
|
usage_multiplier: usage_multiplier)
|
5784
5962
|
end
|
5785
5963
|
|
5786
|
-
def self.set_misc_plug_loads_vehicle(hpxml,
|
5964
|
+
def self.set_misc_plug_loads_vehicle(hpxml, args)
|
5787
5965
|
return unless args[:misc_plug_loads_vehicle_present]
|
5788
5966
|
|
5789
|
-
if args[:misc_plug_loads_vehicle_annual_kwh]
|
5790
|
-
kWh_per_year =
|
5967
|
+
if args[:misc_plug_loads_vehicle_annual_kwh].is_initialized
|
5968
|
+
kWh_per_year = args[:misc_plug_loads_vehicle_annual_kwh].get
|
5791
5969
|
end
|
5792
5970
|
|
5793
|
-
if args[:misc_plug_loads_vehicle_usage_multiplier]
|
5794
|
-
usage_multiplier = args[:misc_plug_loads_vehicle_usage_multiplier]
|
5971
|
+
if args[:misc_plug_loads_vehicle_usage_multiplier].is_initialized
|
5972
|
+
usage_multiplier = args[:misc_plug_loads_vehicle_usage_multiplier].get
|
5795
5973
|
end
|
5796
5974
|
|
5797
5975
|
hpxml.plug_loads.add(id: "PlugLoad#{hpxml.plug_loads.size + 1}",
|
@@ -5800,99 +5978,99 @@ class HPXMLFile
|
|
5800
5978
|
usage_multiplier: usage_multiplier)
|
5801
5979
|
end
|
5802
5980
|
|
5803
|
-
def self.set_misc_fuel_loads_grill(hpxml,
|
5804
|
-
|
5805
|
-
if args[:misc_fuel_loads_grill_annual_therm] != Constants.Auto
|
5806
|
-
therm_per_year = Float(args[:misc_fuel_loads_grill_annual_therm])
|
5807
|
-
end
|
5981
|
+
def self.set_misc_fuel_loads_grill(hpxml, args)
|
5982
|
+
return unless args[:misc_fuel_loads_grill_present]
|
5808
5983
|
|
5809
|
-
|
5810
|
-
|
5811
|
-
|
5984
|
+
if args[:misc_fuel_loads_grill_annual_therm].is_initialized
|
5985
|
+
therm_per_year = args[:misc_fuel_loads_grill_annual_therm].get
|
5986
|
+
end
|
5812
5987
|
|
5813
|
-
|
5814
|
-
|
5815
|
-
fuel_type: args[:misc_fuel_loads_grill_fuel_type],
|
5816
|
-
therm_per_year: therm_per_year,
|
5817
|
-
usage_multiplier: usage_multiplier)
|
5988
|
+
if args[:misc_fuel_loads_grill_usage_multiplier].is_initialized
|
5989
|
+
usage_multiplier = args[:misc_fuel_loads_grill_usage_multiplier].get
|
5818
5990
|
end
|
5991
|
+
|
5992
|
+
hpxml.fuel_loads.add(id: "FuelLoad#{hpxml.fuel_loads.size + 1}",
|
5993
|
+
fuel_load_type: HPXML::FuelLoadTypeGrill,
|
5994
|
+
fuel_type: args[:misc_fuel_loads_grill_fuel_type],
|
5995
|
+
therm_per_year: therm_per_year,
|
5996
|
+
usage_multiplier: usage_multiplier)
|
5819
5997
|
end
|
5820
5998
|
|
5821
|
-
def self.set_misc_fuel_loads_lighting(hpxml,
|
5822
|
-
|
5823
|
-
if args[:misc_fuel_loads_lighting_annual_therm] != Constants.Auto
|
5824
|
-
therm_per_year = Float(args[:misc_fuel_loads_lighting_annual_therm])
|
5825
|
-
end
|
5999
|
+
def self.set_misc_fuel_loads_lighting(hpxml, args)
|
6000
|
+
return unless args[:misc_fuel_loads_lighting_present]
|
5826
6001
|
|
5827
|
-
|
5828
|
-
|
5829
|
-
|
6002
|
+
if args[:misc_fuel_loads_lighting_annual_therm].is_initialized
|
6003
|
+
therm_per_year = args[:misc_fuel_loads_lighting_annual_therm].get
|
6004
|
+
end
|
5830
6005
|
|
5831
|
-
|
5832
|
-
|
5833
|
-
fuel_type: args[:misc_fuel_loads_lighting_fuel_type],
|
5834
|
-
therm_per_year: therm_per_year,
|
5835
|
-
usage_multiplier: usage_multiplier)
|
6006
|
+
if args[:misc_fuel_loads_lighting_usage_multiplier].is_initialized
|
6007
|
+
usage_multiplier = args[:misc_fuel_loads_lighting_usage_multiplier].get
|
5836
6008
|
end
|
6009
|
+
|
6010
|
+
hpxml.fuel_loads.add(id: "FuelLoad#{hpxml.fuel_loads.size + 1}",
|
6011
|
+
fuel_load_type: HPXML::FuelLoadTypeLighting,
|
6012
|
+
fuel_type: args[:misc_fuel_loads_lighting_fuel_type],
|
6013
|
+
therm_per_year: therm_per_year,
|
6014
|
+
usage_multiplier: usage_multiplier)
|
5837
6015
|
end
|
5838
6016
|
|
5839
|
-
def self.set_misc_fuel_loads_fireplace(hpxml,
|
5840
|
-
|
5841
|
-
if args[:misc_fuel_loads_fireplace_annual_therm] != Constants.Auto
|
5842
|
-
therm_per_year = Float(args[:misc_fuel_loads_fireplace_annual_therm])
|
5843
|
-
end
|
6017
|
+
def self.set_misc_fuel_loads_fireplace(hpxml, args)
|
6018
|
+
return unless args[:misc_fuel_loads_fireplace_present]
|
5844
6019
|
|
5845
|
-
|
5846
|
-
|
5847
|
-
|
6020
|
+
if args[:misc_fuel_loads_fireplace_annual_therm].is_initialized
|
6021
|
+
therm_per_year = args[:misc_fuel_loads_fireplace_annual_therm].get
|
6022
|
+
end
|
5848
6023
|
|
5849
|
-
|
5850
|
-
|
5851
|
-
|
6024
|
+
if args[:misc_fuel_loads_fireplace_frac_sensible].is_initialized
|
6025
|
+
frac_sensible = args[:misc_fuel_loads_fireplace_frac_sensible].get
|
6026
|
+
end
|
5852
6027
|
|
5853
|
-
|
5854
|
-
|
5855
|
-
|
6028
|
+
if args[:misc_fuel_loads_fireplace_frac_latent].is_initialized
|
6029
|
+
frac_latent = args[:misc_fuel_loads_fireplace_frac_latent].get
|
6030
|
+
end
|
5856
6031
|
|
5857
|
-
|
5858
|
-
|
5859
|
-
fuel_type: args[:misc_fuel_loads_fireplace_fuel_type],
|
5860
|
-
therm_per_year: therm_per_year,
|
5861
|
-
frac_sensible: frac_sensible,
|
5862
|
-
frac_latent: frac_latent,
|
5863
|
-
usage_multiplier: usage_multiplier)
|
6032
|
+
if args[:misc_fuel_loads_fireplace_usage_multiplier].is_initialized
|
6033
|
+
usage_multiplier = args[:misc_fuel_loads_fireplace_usage_multiplier].get
|
5864
6034
|
end
|
6035
|
+
|
6036
|
+
hpxml.fuel_loads.add(id: "FuelLoad#{hpxml.fuel_loads.size + 1}",
|
6037
|
+
fuel_load_type: HPXML::FuelLoadTypeFireplace,
|
6038
|
+
fuel_type: args[:misc_fuel_loads_fireplace_fuel_type],
|
6039
|
+
therm_per_year: therm_per_year,
|
6040
|
+
frac_sensible: frac_sensible,
|
6041
|
+
frac_latent: frac_latent,
|
6042
|
+
usage_multiplier: usage_multiplier)
|
5865
6043
|
end
|
5866
6044
|
|
5867
|
-
def self.set_pool(hpxml,
|
6045
|
+
def self.set_pool(hpxml, args)
|
5868
6046
|
return unless args[:pool_present]
|
5869
6047
|
|
5870
|
-
if args[:pool_pump_annual_kwh]
|
5871
|
-
pump_kwh_per_year =
|
6048
|
+
if args[:pool_pump_annual_kwh].is_initialized
|
6049
|
+
pump_kwh_per_year = args[:pool_pump_annual_kwh].get
|
5872
6050
|
end
|
5873
6051
|
|
5874
|
-
if args[:pool_pump_usage_multiplier]
|
5875
|
-
pump_usage_multiplier = args[:pool_pump_usage_multiplier]
|
6052
|
+
if args[:pool_pump_usage_multiplier].is_initialized
|
6053
|
+
pump_usage_multiplier = args[:pool_pump_usage_multiplier].get
|
5876
6054
|
end
|
5877
6055
|
|
5878
6056
|
pool_heater_type = args[:pool_heater_type]
|
5879
6057
|
|
5880
6058
|
if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(pool_heater_type)
|
5881
|
-
if args[:pool_heater_annual_kwh]
|
5882
|
-
heater_load_units =
|
5883
|
-
heater_load_value =
|
6059
|
+
if args[:pool_heater_annual_kwh].is_initialized
|
6060
|
+
heater_load_units = HPXML::UnitsKwhPerYear
|
6061
|
+
heater_load_value = args[:pool_heater_annual_kwh].get
|
5884
6062
|
end
|
5885
6063
|
end
|
5886
6064
|
|
5887
6065
|
if [HPXML::HeaterTypeGas].include?(pool_heater_type)
|
5888
|
-
if args[:pool_heater_annual_therm]
|
5889
|
-
heater_load_units =
|
5890
|
-
heater_load_value =
|
6066
|
+
if args[:pool_heater_annual_therm].is_initialized
|
6067
|
+
heater_load_units = HPXML::UnitsThermPerYear
|
6068
|
+
heater_load_value = args[:pool_heater_annual_therm].get
|
5891
6069
|
end
|
5892
6070
|
end
|
5893
6071
|
|
5894
|
-
if args[:pool_heater_usage_multiplier]
|
5895
|
-
heater_usage_multiplier = args[:pool_heater_usage_multiplier]
|
6072
|
+
if args[:pool_heater_usage_multiplier].is_initialized
|
6073
|
+
heater_usage_multiplier = args[:pool_heater_usage_multiplier].get
|
5896
6074
|
end
|
5897
6075
|
|
5898
6076
|
hpxml.pools.add(id: "Pool#{hpxml.pools.size + 1}",
|
@@ -5906,35 +6084,35 @@ class HPXMLFile
|
|
5906
6084
|
heater_usage_multiplier: heater_usage_multiplier)
|
5907
6085
|
end
|
5908
6086
|
|
5909
|
-
def self.set_hot_tub(hpxml,
|
6087
|
+
def self.set_hot_tub(hpxml, args)
|
5910
6088
|
return unless args[:hot_tub_present]
|
5911
6089
|
|
5912
|
-
if args[:hot_tub_pump_annual_kwh]
|
5913
|
-
pump_kwh_per_year =
|
6090
|
+
if args[:hot_tub_pump_annual_kwh].is_initialized
|
6091
|
+
pump_kwh_per_year = args[:hot_tub_pump_annual_kwh].get
|
5914
6092
|
end
|
5915
6093
|
|
5916
|
-
if args[:hot_tub_pump_usage_multiplier]
|
5917
|
-
pump_usage_multiplier = args[:hot_tub_pump_usage_multiplier]
|
6094
|
+
if args[:hot_tub_pump_usage_multiplier].is_initialized
|
6095
|
+
pump_usage_multiplier = args[:hot_tub_pump_usage_multiplier].get
|
5918
6096
|
end
|
5919
6097
|
|
5920
6098
|
hot_tub_heater_type = args[:hot_tub_heater_type]
|
5921
6099
|
|
5922
6100
|
if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(hot_tub_heater_type)
|
5923
|
-
if args[:hot_tub_heater_annual_kwh]
|
5924
|
-
heater_load_units =
|
5925
|
-
heater_load_value =
|
6101
|
+
if args[:hot_tub_heater_annual_kwh].is_initialized
|
6102
|
+
heater_load_units = HPXML::UnitsKwhPerYear
|
6103
|
+
heater_load_value = args[:hot_tub_heater_annual_kwh].get
|
5926
6104
|
end
|
5927
6105
|
end
|
5928
6106
|
|
5929
6107
|
if [HPXML::HeaterTypeGas].include?(hot_tub_heater_type)
|
5930
|
-
if args[:hot_tub_heater_annual_therm]
|
5931
|
-
heater_load_units =
|
5932
|
-
heater_load_value =
|
6108
|
+
if args[:hot_tub_heater_annual_therm].is_initialized
|
6109
|
+
heater_load_units = HPXML::UnitsThermPerYear
|
6110
|
+
heater_load_value = args[:hot_tub_heater_annual_therm].get
|
5933
6111
|
end
|
5934
6112
|
end
|
5935
6113
|
|
5936
|
-
if args[:hot_tub_heater_usage_multiplier]
|
5937
|
-
heater_usage_multiplier = args[:hot_tub_heater_usage_multiplier]
|
6114
|
+
if args[:hot_tub_heater_usage_multiplier].is_initialized
|
6115
|
+
heater_usage_multiplier = args[:hot_tub_heater_usage_multiplier].get
|
5938
6116
|
end
|
5939
6117
|
|
5940
6118
|
hpxml.hot_tubs.add(id: "HotTub#{hpxml.hot_tubs.size + 1}",
|