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
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
Dir["#{File.dirname(__FILE__)}/HPXMLtoOpenStudio/resources/*.rb"].each do |resource_file|
|
4
|
+
next if resource_file.include? 'minitest_helper.rb'
|
5
|
+
|
6
|
+
require resource_file
|
7
|
+
end
|
7
8
|
|
9
|
+
def create_hpxmls
|
8
10
|
this_dir = File.dirname(__FILE__)
|
9
11
|
tests_dir = File.join(this_dir, 'workflow/sample_files')
|
10
12
|
|
@@ -59,6 +61,7 @@ def create_hpxmls
|
|
59
61
|
'base-atticroof-unvented-insulated-roof.xml' => 'base.xml',
|
60
62
|
'base-atticroof-vented.xml' => 'base.xml',
|
61
63
|
'base-battery.xml' => 'base.xml',
|
64
|
+
'base-battery-scheduled.xml' => 'base-battery.xml',
|
62
65
|
'base-bldgtype-multifamily.xml' => 'base.xml',
|
63
66
|
'base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml' => 'base-bldgtype-multifamily.xml',
|
64
67
|
'base-bldgtype-multifamily-adjacent-to-multiple.xml' => 'base-bldgtype-multifamily.xml',
|
@@ -84,6 +87,7 @@ def create_hpxmls
|
|
84
87
|
'base-bldgtype-multifamily-shared-generator.xml' => 'base-bldgtype-multifamily.xml',
|
85
88
|
'base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml' => 'base-bldgtype-multifamily.xml',
|
86
89
|
'base-bldgtype-multifamily-shared-laundry-room.xml' => 'base-bldgtype-multifamily.xml',
|
90
|
+
'base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml' => 'base-bldgtype-multifamily-shared-laundry-room.xml',
|
87
91
|
'base-bldgtype-multifamily-shared-mechvent.xml' => 'base-bldgtype-multifamily.xml',
|
88
92
|
'base-bldgtype-multifamily-shared-mechvent-multiple.xml' => 'base-bldgtype-multifamily.xml',
|
89
93
|
'base-bldgtype-multifamily-shared-mechvent-preconditioning.xml' => 'base-bldgtype-multifamily-shared-mechvent.xml',
|
@@ -107,6 +111,7 @@ def create_hpxmls
|
|
107
111
|
'base-dhw-desuperheater-var-speed.xml' => 'base-hvac-central-ac-only-var-speed.xml',
|
108
112
|
'base-dhw-dwhr.xml' => 'base.xml',
|
109
113
|
'base-dhw-indirect.xml' => 'base-hvac-boiler-gas-only.xml',
|
114
|
+
'base-dhw-indirect-detailed-setpoints.xml' => 'base-dhw-indirect.xml',
|
110
115
|
'base-dhw-indirect-dse.xml' => 'base-dhw-indirect.xml',
|
111
116
|
'base-dhw-indirect-outside.xml' => 'base-dhw-indirect.xml',
|
112
117
|
'base-dhw-indirect-standbyloss.xml' => 'base-dhw-indirect.xml',
|
@@ -130,6 +135,7 @@ def create_hpxmls
|
|
130
135
|
'base-dhw-solar-indirect-flat-plate.xml' => 'base.xml',
|
131
136
|
'base-dhw-solar-thermosyphon-flat-plate.xml' => 'base-dhw-solar-indirect-flat-plate.xml',
|
132
137
|
'base-dhw-tank-coal.xml' => 'base-dhw-tank-gas.xml',
|
138
|
+
'base-dhw-tank-detailed-setpoints.xml' => 'base.xml',
|
133
139
|
'base-dhw-tank-elec-uef.xml' => 'base.xml',
|
134
140
|
'base-dhw-tank-gas.xml' => 'base.xml',
|
135
141
|
'base-dhw-tank-gas-uef.xml' => 'base-dhw-tank-gas.xml',
|
@@ -141,11 +147,8 @@ def create_hpxmls
|
|
141
147
|
'base-dhw-tank-heat-pump-with-solar.xml' => 'base-dhw-tank-heat-pump.xml',
|
142
148
|
'base-dhw-tank-heat-pump-with-solar-fraction.xml' => 'base-dhw-tank-heat-pump.xml',
|
143
149
|
'base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml' => 'base-dhw-tank-heat-pump-uef.xml',
|
144
|
-
'base-dhw-tank-heat-pump-detailed-setpoints.xml' => 'base-dhw-tank-heat-pump-uef.xml',
|
145
|
-
'base-dhw-tank-heat-pump-detailed-operating-modes.xml' => 'base-dhw-tank-heat-pump-uef.xml',
|
146
150
|
'base-dhw-tank-heat-pump-detailed-schedules.xml' => 'base-dhw-tank-heat-pump-uef.xml',
|
147
151
|
'base-dhw-tank-model-type-stratified.xml' => 'base.xml',
|
148
|
-
'base-dhw-tank-detailed-setpoints.xml' => 'base.xml',
|
149
152
|
'base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml' => 'base-dhw-tank-model-type-stratified.xml',
|
150
153
|
'base-dhw-tank-oil.xml' => 'base-dhw-tank-gas.xml',
|
151
154
|
'base-dhw-tank-wood.xml' => 'base-dhw-tank-gas.xml',
|
@@ -164,6 +167,8 @@ def create_hpxmls
|
|
164
167
|
'base-enclosure-beds-2.xml' => 'base.xml',
|
165
168
|
'base-enclosure-beds-4.xml' => 'base.xml',
|
166
169
|
'base-enclosure-beds-5.xml' => 'base.xml',
|
170
|
+
'base-enclosure-ceilingtypes.xml' => 'base.xml',
|
171
|
+
'base-enclosure-floortypes.xml' => 'base-foundation-ambient.xml',
|
167
172
|
'base-enclosure-garage.xml' => 'base.xml',
|
168
173
|
'base-enclosure-infil-ach-house-pressure.xml' => 'base.xml',
|
169
174
|
'base-enclosure-infil-cfm-house-pressure.xml' => 'base-enclosure-infil-cfm50.xml',
|
@@ -181,6 +186,7 @@ def create_hpxmls
|
|
181
186
|
'base-enclosure-split-surfaces.xml' => 'base-enclosure-skylights.xml', # Surfaces should collapse via HPXML.collapse_enclosure_surfaces()
|
182
187
|
'base-enclosure-split-surfaces2.xml' => 'base-enclosure-skylights.xml', # Surfaces should NOT collapse via HPXML.collapse_enclosure_surfaces()
|
183
188
|
'base-enclosure-walltypes.xml' => 'base.xml',
|
189
|
+
'base-enclosure-windows-natural-ventilation-availability.xml' => 'base.xml',
|
184
190
|
'base-enclosure-windows-none.xml' => 'base.xml',
|
185
191
|
'base-enclosure-windows-physical-properties.xml' => 'base.xml',
|
186
192
|
'base-enclosure-windows-shading.xml' => 'base.xml',
|
@@ -190,7 +196,7 @@ def create_hpxmls
|
|
190
196
|
'base-foundation-basement-garage.xml' => 'base.xml',
|
191
197
|
'base-foundation-complex.xml' => 'base.xml',
|
192
198
|
'base-foundation-conditioned-basement-slab-insulation.xml' => 'base.xml',
|
193
|
-
'base-foundation-conditioned-basement-wall-
|
199
|
+
'base-foundation-conditioned-basement-wall-insulation.xml' => 'base.xml',
|
194
200
|
'base-foundation-conditioned-crawlspace.xml' => 'base.xml',
|
195
201
|
'base-foundation-multiple.xml' => 'base-foundation-unconditioned-basement.xml',
|
196
202
|
'base-foundation-slab.xml' => 'base.xml',
|
@@ -205,6 +211,7 @@ def create_hpxmls
|
|
205
211
|
'base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
206
212
|
'base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
207
213
|
'base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
214
|
+
'base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
208
215
|
'base-hvac-air-to-air-heat-pump-2-speed.xml' => 'base.xml',
|
209
216
|
'base-hvac-air-to-air-heat-pump-var-speed.xml' => 'base.xml',
|
210
217
|
'base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml' => 'base-hvac-air-to-air-heat-pump-var-speed.xml',
|
@@ -216,6 +223,7 @@ def create_hpxmls
|
|
216
223
|
'base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
217
224
|
'base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
218
225
|
'base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml' => 'base-hvac-air-to-air-heat-pump-1-speed.xml',
|
226
|
+
'base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml' => 'base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml',
|
219
227
|
'base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml' => 'base-hvac-air-to-air-heat-pump-2-speed.xml',
|
220
228
|
'base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml' => 'base-hvac-air-to-air-heat-pump-2-speed.xml',
|
221
229
|
'base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml' => 'base-hvac-air-to-air-heat-pump-2-speed.xml',
|
@@ -256,10 +264,14 @@ def create_hpxmls
|
|
256
264
|
'base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml' => 'base-hvac-mini-split-heat-pump-ductless-backup-stove.xml',
|
257
265
|
'base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml' => 'base-hvac-mini-split-air-conditioner-only-ducted.xml',
|
258
266
|
'base-hvac-autosize-ptac.xml' => 'base-hvac-ptac.xml',
|
259
|
-
'base-hvac-autosize-ptac-with-heating.xml' => 'base-hvac-ptac-with-heating.xml',
|
267
|
+
'base-hvac-autosize-ptac-with-heating.xml' => 'base-hvac-ptac-with-heating-electricity.xml',
|
260
268
|
'base-hvac-autosize-pthp-sizing-methodology-acca.xml' => 'base-hvac-pthp.xml',
|
261
269
|
'base-hvac-autosize-pthp-sizing-methodology-hers.xml' => 'base-hvac-pthp.xml',
|
262
270
|
'base-hvac-autosize-pthp-sizing-methodology-maxload.xml' => 'base-hvac-pthp.xml',
|
271
|
+
'base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml' => 'base-hvac-room-ac-with-reverse-cycle.xml',
|
272
|
+
'base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml' => 'base-hvac-room-ac-with-reverse-cycle.xml',
|
273
|
+
'base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml' => 'base-hvac-room-ac-with-reverse-cycle.xml',
|
274
|
+
'base-hvac-autosize-room-ac-with-heating.xml' => 'base-hvac-room-ac-with-heating.xml',
|
263
275
|
'base-hvac-autosize-room-ac-only.xml' => 'base-hvac-room-ac-only.xml',
|
264
276
|
'base-hvac-autosize-stove-oil-only.xml' => 'base-hvac-stove-oil-only.xml',
|
265
277
|
'base-hvac-autosize-wall-furnace-elec-only.xml' => 'base-hvac-wall-furnace-elec-only.xml',
|
@@ -271,6 +283,7 @@ def create_hpxmls
|
|
271
283
|
'base-hvac-boiler-propane-only.xml' => 'base-hvac-boiler-gas-only.xml',
|
272
284
|
'base-hvac-boiler-wood-only.xml' => 'base-hvac-boiler-gas-only.xml',
|
273
285
|
'base-hvac-central-ac-only-1-speed.xml' => 'base.xml',
|
286
|
+
'base-hvac-central-ac-only-1-speed-seer2.xml' => 'base-hvac-central-ac-only-1-speed.xml',
|
274
287
|
'base-hvac-central-ac-only-2-speed.xml' => 'base.xml',
|
275
288
|
'base-hvac-central-ac-only-var-speed.xml' => 'base.xml',
|
276
289
|
'base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml' => 'base-hvac-central-ac-only-1-speed.xml',
|
@@ -283,6 +296,7 @@ def create_hpxmls
|
|
283
296
|
'base-hvac-ducts-leakage-cfm50.xml' => 'base.xml',
|
284
297
|
'base-hvac-ducts-leakage-percent.xml' => 'base.xml',
|
285
298
|
'base-hvac-ducts-area-fractions.xml' => 'base-enclosure-2stories.xml',
|
299
|
+
'base-hvac-ducts-area-multipliers.xml' => 'base.xml',
|
286
300
|
'base-hvac-elec-resistance-only.xml' => 'base.xml',
|
287
301
|
'base-hvac-evap-cooler-furnace-gas.xml' => 'base.xml',
|
288
302
|
'base-hvac-evap-cooler-only.xml' => 'base.xml',
|
@@ -323,14 +337,17 @@ def create_hpxmls
|
|
323
337
|
'base-hvac-mini-split-heat-pump-ductless.xml' => 'base-hvac-mini-split-heat-pump-ducted.xml',
|
324
338
|
'base-hvac-mini-split-heat-pump-ductless-backup-stove.xml' => 'base-hvac-mini-split-heat-pump-ductless.xml',
|
325
339
|
'base-hvac-multiple.xml' => 'base.xml',
|
326
|
-
'base-hvac-none.xml' => 'base.xml',
|
340
|
+
'base-hvac-none.xml' => 'base-location-honolulu-hi.xml',
|
327
341
|
'base-hvac-portable-heater-gas-only.xml' => 'base.xml',
|
328
342
|
'base-hvac-ptac.xml' => 'base.xml',
|
329
|
-
'base-hvac-ptac-with-heating.xml' => 'base-hvac-ptac.xml',
|
343
|
+
'base-hvac-ptac-with-heating-electricity.xml' => 'base-hvac-ptac.xml',
|
344
|
+
'base-hvac-ptac-with-heating-natural-gas.xml' => 'base-hvac-ptac.xml',
|
330
345
|
'base-hvac-pthp.xml' => 'base-hvac-ground-to-air-heat-pump.xml',
|
331
346
|
'base-hvac-room-ac-only.xml' => 'base.xml',
|
332
347
|
'base-hvac-room-ac-only-33percent.xml' => 'base-hvac-room-ac-only.xml',
|
333
348
|
'base-hvac-room-ac-only-ceer.xml' => 'base-hvac-room-ac-only.xml',
|
349
|
+
'base-hvac-room-ac-with-heating.xml' => 'base-hvac-room-ac-only.xml',
|
350
|
+
'base-hvac-room-ac-with-reverse-cycle.xml' => 'base-hvac-pthp.xml',
|
334
351
|
'base-hvac-room-ac-only-detailed-setpoints.xml' => 'base-hvac-room-ac-only.xml',
|
335
352
|
'base-hvac-seasons.xml' => 'base.xml',
|
336
353
|
'base-hvac-setpoints.xml' => 'base.xml',
|
@@ -360,6 +377,8 @@ def create_hpxmls
|
|
360
377
|
'base-mechvent-cfis-airflow-fraction-zero.xml' => 'base-mechvent-cfis.xml',
|
361
378
|
'base-mechvent-cfis-dse.xml' => 'base-hvac-dse.xml',
|
362
379
|
'base-mechvent-cfis-evap-cooler-only-ducted.xml' => 'base-hvac-evap-cooler-only-ducted.xml',
|
380
|
+
'base-mechvent-cfis-supplemental-fan-exhaust.xml' => 'base-mechvent-cfis.xml',
|
381
|
+
'base-mechvent-cfis-supplemental-fan-supply.xml' => 'base-mechvent-cfis.xml',
|
363
382
|
'base-mechvent-erv.xml' => 'base.xml',
|
364
383
|
'base-mechvent-erv-atre-asre.xml' => 'base.xml',
|
365
384
|
'base-mechvent-exhaust.xml' => 'base.xml',
|
@@ -370,9 +389,17 @@ def create_hpxmls
|
|
370
389
|
'base-mechvent-supply.xml' => 'base.xml',
|
371
390
|
'base-mechvent-whole-house-fan.xml' => 'base.xml',
|
372
391
|
'base-misc-additional-properties.xml' => 'base.xml',
|
392
|
+
'base-misc-bills.xml' => 'base.xml',
|
393
|
+
'base-misc-bills-none.xml' => 'base.xml',
|
394
|
+
'base-misc-bills-pv.xml' => 'base-pv.xml',
|
395
|
+
'base-misc-bills-pv-detailed-only.xml' => 'base-pv.xml',
|
396
|
+
'base-misc-bills-pv-mixed.xml' => 'base-pv.xml',
|
373
397
|
'base-misc-defaults.xml' => 'base.xml',
|
374
398
|
'base-misc-emissions.xml' => 'base-pv-battery.xml',
|
375
399
|
'base-misc-generators.xml' => 'base.xml',
|
400
|
+
'base-misc-generators-battery.xml' => 'base-misc-generators.xml',
|
401
|
+
'base-misc-generators-battery-scheduled.xml' => 'base-misc-generators-battery.xml',
|
402
|
+
'base-misc-ground-conductivity.xml' => 'base.xml',
|
376
403
|
'base-misc-loads-large-uncommon.xml' => 'base-schedules-simple.xml',
|
377
404
|
'base-misc-loads-large-uncommon2.xml' => 'base-misc-loads-large-uncommon.xml',
|
378
405
|
'base-misc-loads-none.xml' => 'base.xml',
|
@@ -383,13 +410,19 @@ def create_hpxmls
|
|
383
410
|
'base-pv.xml' => 'base.xml',
|
384
411
|
'base-pv-battery.xml' => 'base-battery.xml',
|
385
412
|
'base-pv-battery-ah.xml' => 'base-pv-battery.xml',
|
386
|
-
'base-pv-battery-lifetime-model.xml' => 'base-pv-battery.xml',
|
387
413
|
'base-pv-battery-garage.xml' => 'base-enclosure-garage.xml',
|
414
|
+
# 'base-pv-battery-lifetime-model.xml' => 'base-pv-battery.xml',
|
415
|
+
'base-pv-battery-round-trip-efficiency.xml' => 'base-pv-battery.xml',
|
416
|
+
'base-pv-battery-scheduled.xml' => 'base-pv-battery.xml',
|
417
|
+
'base-pv-generators.xml' => 'base-pv.xml',
|
418
|
+
'base-pv-generators-battery.xml' => 'base-pv-generators.xml',
|
419
|
+
'base-pv-generators-battery-scheduled.xml' => 'base-pv-generators-battery.xml',
|
388
420
|
'base-schedules-simple.xml' => 'base.xml',
|
389
421
|
'base-schedules-detailed-all-10-mins.xml' => 'base-simcontrol-timestep-10-mins.xml',
|
390
422
|
'base-schedules-detailed-occupancy-smooth.xml' => 'base.xml',
|
391
423
|
'base-schedules-detailed-occupancy-stochastic.xml' => 'base.xml',
|
392
424
|
'base-schedules-detailed-occupancy-stochastic-vacancy.xml' => 'base.xml',
|
425
|
+
'base-schedules-detailed-occupancy-stochastic-10-mins.xml' => 'base.xml',
|
393
426
|
'base-schedules-detailed-setpoints.xml' => 'base.xml',
|
394
427
|
'base-schedules-detailed-setpoints-daily-schedules.xml' => 'base.xml',
|
395
428
|
'base-schedules-detailed-setpoints-daily-setbacks.xml' => 'base.xml',
|
@@ -397,12 +430,15 @@ def create_hpxmls
|
|
397
430
|
'base-simcontrol-daylight-saving-custom.xml' => 'base.xml',
|
398
431
|
'base-simcontrol-daylight-saving-disabled.xml' => 'base.xml',
|
399
432
|
'base-simcontrol-runperiod-1-month.xml' => 'base.xml',
|
400
|
-
'base-simcontrol-
|
433
|
+
'base-simcontrol-temperature-capacitance-multiplier.xml' => 'base.xml',
|
434
|
+
'base-simcontrol-timestep-10-mins.xml' => 'base.xml',
|
435
|
+
'base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml' => 'base-simcontrol-timestep-10-mins.xml',
|
436
|
+
'base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml' => 'base-simcontrol-timestep-10-mins.xml',
|
437
|
+
'base-simcontrol-timestep-30-mins.xml' => 'base.xml',
|
401
438
|
}
|
402
439
|
|
403
440
|
puts "Generating #{hpxmls_files.size} HPXML files..."
|
404
441
|
|
405
|
-
hpxml_docs = {}
|
406
442
|
hpxmls_files.each_with_index do |(hpxml_file, orig_parent), i|
|
407
443
|
puts "[#{i + 1}/#{hpxmls_files.size}] Generating #{hpxml_file}..."
|
408
444
|
|
@@ -451,7 +487,7 @@ def create_hpxmls
|
|
451
487
|
if hpxml_file.include? 'ASHRAE_Standard_140'
|
452
488
|
hpxml_path = File.absolute_path(File.join(tests_dir, '..', 'tests', hpxml_file))
|
453
489
|
hpxml = HPXML.new(hpxml_path: hpxml_path, collapse_enclosure: false)
|
454
|
-
apply_hpxml_modification_ashrae_140(
|
490
|
+
apply_hpxml_modification_ashrae_140(hpxml)
|
455
491
|
else
|
456
492
|
hpxml_path = File.absolute_path(File.join(tests_dir, hpxml_file))
|
457
493
|
hpxml = HPXML.new(hpxml_path: hpxml_path, collapse_enclosure: false)
|
@@ -465,14 +501,17 @@ def create_hpxmls
|
|
465
501
|
hpxml_element = XMLHelper.get_element(hpxml_doc, '/HPXML')
|
466
502
|
building_element = XMLHelper.get_element(hpxml_element, 'Building')
|
467
503
|
for i in 2..3
|
468
|
-
new_building_element =
|
504
|
+
new_building_element = Marshal.load(Marshal.dump(building_element)) # Deep copy
|
469
505
|
|
470
506
|
# Make all IDs unique so the HPXML is valid
|
471
507
|
new_building_element.each_node do |node|
|
472
508
|
next unless node.is_a?(Oga::XML::Element)
|
473
|
-
next if XMLHelper.get_attribute_value(node, 'id').nil?
|
474
509
|
|
475
|
-
|
510
|
+
if not XMLHelper.get_attribute_value(node, 'id').nil?
|
511
|
+
XMLHelper.add_attribute(node, 'id', "#{XMLHelper.get_attribute_value(node, 'id')}_#{i}")
|
512
|
+
elsif not XMLHelper.get_attribute_value(node, 'idref').nil?
|
513
|
+
XMLHelper.add_attribute(node, 'idref', "#{XMLHelper.get_attribute_value(node, 'idref')}_#{i}")
|
514
|
+
end
|
476
515
|
end
|
477
516
|
|
478
517
|
hpxml_element.children << new_building_element
|
@@ -480,7 +519,13 @@ def create_hpxmls
|
|
480
519
|
end
|
481
520
|
|
482
521
|
XMLHelper.write_file(hpxml_doc, hpxml_path)
|
483
|
-
|
522
|
+
|
523
|
+
schema_path = File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema', 'HPXML.xsd')
|
524
|
+
errors, _ = XMLValidator.validate_against_schema(hpxml_path, schema_path)
|
525
|
+
if errors.size > 0
|
526
|
+
puts "\nError: Did not successfully validate #{hpxml_file}."
|
527
|
+
exit!
|
528
|
+
end
|
484
529
|
rescue Exception => e
|
485
530
|
puts "\n#{e}\n#{e.backtrace.join('\n')}"
|
486
531
|
puts "\nError: Did not successfully generate #{hpxml_file}."
|
@@ -506,21 +551,15 @@ def create_hpxmls
|
|
506
551
|
puts "Warning: Extra HPXML file found at #{File.absolute_path(hpxml)}"
|
507
552
|
end
|
508
553
|
end
|
509
|
-
|
510
|
-
if hpxml_docs.size != hpxmls_files.size
|
511
|
-
return
|
512
|
-
end
|
513
|
-
|
514
|
-
return hpxml_docs
|
515
554
|
end
|
516
555
|
|
517
556
|
def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
518
557
|
if hpxml_file.include? 'ASHRAE_Standard_140'
|
519
|
-
args['hpxml_path'] = "
|
558
|
+
args['hpxml_path'] = "workflow/tests/#{hpxml_file}"
|
520
559
|
else
|
521
|
-
args['hpxml_path'] = "
|
560
|
+
args['hpxml_path'] = "workflow/sample_files/#{hpxml_file}"
|
522
561
|
end
|
523
|
-
args['apply_validation'] =
|
562
|
+
args['apply_validation'] = false
|
524
563
|
|
525
564
|
if ['base.xml'].include? hpxml_file
|
526
565
|
args['simulation_control_timestep'] = 60
|
@@ -553,10 +592,9 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
553
592
|
args['geometry_unit_num_bedrooms'] = 3
|
554
593
|
args['geometry_unit_num_bathrooms'] = 2
|
555
594
|
args['geometry_unit_num_occupants'] = 3
|
556
|
-
args['geometry_has_flue_or_chimney'] = Constants.Auto
|
557
595
|
args['floor_over_foundation_assembly_r'] = 0
|
558
596
|
args['floor_over_garage_assembly_r'] = 0
|
559
|
-
args['
|
597
|
+
args['floor_type'] = HPXML::FloorTypeWoodFrame
|
560
598
|
args['foundation_wall_thickness'] = 8.0
|
561
599
|
args['foundation_wall_insulation_r'] = 8.9
|
562
600
|
args['foundation_wall_insulation_distance_to_top'] = 0.0
|
@@ -579,10 +617,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
579
617
|
args['neighbor_back_distance'] = 0
|
580
618
|
args['neighbor_left_distance'] = 0
|
581
619
|
args['neighbor_right_distance'] = 0
|
582
|
-
args['neighbor_front_height'] = Constants.Auto
|
583
|
-
args['neighbor_back_height'] = Constants.Auto
|
584
|
-
args['neighbor_left_height'] = Constants.Auto
|
585
|
-
args['neighbor_right_height'] = Constants.Auto
|
586
620
|
args['wall_type'] = HPXML::WallTypeWoodStud
|
587
621
|
args['wall_siding_type'] = HPXML::SidingTypeWood
|
588
622
|
args['wall_color'] = HPXML::ColorMedium
|
@@ -624,7 +658,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
624
658
|
args['air_leakage_units'] = HPXML::UnitsACH
|
625
659
|
args['air_leakage_house_pressure'] = 50
|
626
660
|
args['air_leakage_value'] = 3
|
627
|
-
args['site_shielding_of_home'] = Constants.Auto
|
628
661
|
args['heating_system_type'] = HPXML::HVACTypeFurnace
|
629
662
|
args['heating_system_fuel'] = HPXML::FuelTypeNaturalGas
|
630
663
|
args['heating_system_heating_efficiency'] = 0.92
|
@@ -646,7 +679,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
646
679
|
args['heat_pump_cooling_compressor_type'] = HPXML::HVACCompressorTypeSingleStage
|
647
680
|
args['heat_pump_cooling_sensible_heat_fraction'] = 0.73
|
648
681
|
args['heat_pump_heating_capacity'] = 36000.0
|
649
|
-
args['heat_pump_heating_capacity_17_f'] = Constants.Auto
|
650
682
|
args['heat_pump_cooling_capacity'] = 36000.0
|
651
683
|
args['heat_pump_fraction_heat_load_served'] = 1
|
652
684
|
args['heat_pump_fraction_cool_load_served'] = 1
|
@@ -670,7 +702,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
670
702
|
args['heating_system_2_type'] = 'none'
|
671
703
|
args['heating_system_2_fuel'] = HPXML::FuelTypeElectricity
|
672
704
|
args['heating_system_2_heating_efficiency'] = 1.0
|
673
|
-
args['heating_system_2_heating_capacity'] = Constants.Auto
|
674
705
|
args['heating_system_2_fraction_heat_load_served'] = 0.25
|
675
706
|
args['mech_vent_fan_type'] = 'none'
|
676
707
|
args['mech_vent_flow_rate'] = 110
|
@@ -690,8 +721,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
690
721
|
args['kitchen_fans_quantity'] = 0
|
691
722
|
args['bathroom_fans_quantity'] = 0
|
692
723
|
args['whole_house_fan_present'] = false
|
693
|
-
args['whole_house_fan_flow_rate'] = 4500
|
694
|
-
args['whole_house_fan_power'] = 300
|
695
724
|
args['water_heater_type'] = HPXML::WaterHeaterTypeStorage
|
696
725
|
args['water_heater_fuel_type'] = HPXML::FuelTypeElectricity
|
697
726
|
args['water_heater_location'] = HPXML::LocationLivingSpace
|
@@ -700,7 +729,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
700
729
|
args['water_heater_efficiency'] = 0.95
|
701
730
|
args['water_heater_recovery_efficiency'] = 0.76
|
702
731
|
args['water_heater_heating_capacity'] = 18767
|
703
|
-
args['water_heater_standby_loss'] = 0
|
704
732
|
args['water_heater_jacket_rvalue'] = 0
|
705
733
|
args['water_heater_setpoint_temperature'] = 125
|
706
734
|
args['water_heater_num_units_served'] = 1
|
@@ -716,7 +744,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
716
744
|
args['dwhr_efficiency'] = 0.55
|
717
745
|
args['water_fixtures_shower_low_flow'] = true
|
718
746
|
args['water_fixtures_sink_low_flow'] = false
|
719
|
-
args['water_fixtures_usage_multiplier'] = 1.0
|
720
747
|
args['solar_thermal_system_type'] = 'none'
|
721
748
|
args['solar_thermal_collector_area'] = 40.0
|
722
749
|
args['solar_thermal_collector_loop_type'] = HPXML::SolarThermalLoopTypeDirect
|
@@ -725,46 +752,34 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
725
752
|
args['solar_thermal_collector_tilt'] = 20
|
726
753
|
args['solar_thermal_collector_rated_optical_efficiency'] = 0.5
|
727
754
|
args['solar_thermal_collector_rated_thermal_losses'] = 0.2799
|
728
|
-
args['solar_thermal_storage_volume'] = Constants.Auto
|
729
755
|
args['solar_thermal_solar_fraction'] = 0
|
730
|
-
args['
|
731
|
-
args['pv_system_location'] = Constants.Auto
|
732
|
-
args['pv_system_tracking'] = Constants.Auto
|
756
|
+
args['pv_system_present'] = false
|
733
757
|
args['pv_system_array_azimuth'] = 180
|
734
758
|
args['pv_system_array_tilt'] = 20
|
735
759
|
args['pv_system_max_power_output'] = 4000
|
736
|
-
args['
|
737
|
-
args['pv_system_system_losses_fraction'] = 0.14
|
738
|
-
args['pv_system_num_bedrooms_served'] = 3
|
739
|
-
args['pv_system_2_module_type'] = 'none'
|
740
|
-
args['pv_system_2_location'] = Constants.Auto
|
741
|
-
args['pv_system_2_tracking'] = Constants.Auto
|
760
|
+
args['pv_system_2_present'] = false
|
742
761
|
args['pv_system_2_array_azimuth'] = 180
|
743
762
|
args['pv_system_2_array_tilt'] = 20
|
744
763
|
args['pv_system_2_max_power_output'] = 4000
|
745
|
-
args['
|
746
|
-
args['
|
747
|
-
args['battery_capacity'] = Constants.Auto
|
764
|
+
args['battery_present'] = false
|
765
|
+
args['lighting_present'] = true
|
748
766
|
args['lighting_interior_fraction_cfl'] = 0.4
|
749
767
|
args['lighting_interior_fraction_lfl'] = 0.1
|
750
768
|
args['lighting_interior_fraction_led'] = 0.25
|
751
|
-
args['lighting_interior_usage_multiplier'] = 1.0
|
752
769
|
args['lighting_exterior_fraction_cfl'] = 0.4
|
753
770
|
args['lighting_exterior_fraction_lfl'] = 0.1
|
754
771
|
args['lighting_exterior_fraction_led'] = 0.25
|
755
|
-
args['lighting_exterior_usage_multiplier'] = 1.0
|
756
772
|
args['lighting_garage_fraction_cfl'] = 0.4
|
757
773
|
args['lighting_garage_fraction_lfl'] = 0.1
|
758
774
|
args['lighting_garage_fraction_led'] = 0.25
|
759
|
-
args['lighting_garage_usage_multiplier'] = 1.0
|
760
775
|
args['holiday_lighting_present'] = false
|
761
|
-
args['holiday_lighting_daily_kwh'] = Constants.Auto
|
762
776
|
args['dehumidifier_type'] = 'none'
|
763
777
|
args['dehumidifier_efficiency_type'] = 'EnergyFactor'
|
764
778
|
args['dehumidifier_efficiency'] = 1.8
|
765
779
|
args['dehumidifier_capacity'] = 40
|
766
780
|
args['dehumidifier_rh_setpoint'] = 0.5
|
767
781
|
args['dehumidifier_fraction_dehumidification_load_served'] = 1
|
782
|
+
args['clothes_washer_present'] = true
|
768
783
|
args['clothes_washer_location'] = HPXML::LocationLivingSpace
|
769
784
|
args['clothes_washer_efficiency_type'] = 'IntegratedModifiedEnergyFactor'
|
770
785
|
args['clothes_washer_efficiency'] = 1.21
|
@@ -774,13 +789,13 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
774
789
|
args['clothes_washer_label_annual_gas_cost'] = 27.0
|
775
790
|
args['clothes_washer_label_usage'] = 6.0
|
776
791
|
args['clothes_washer_capacity'] = 3.2
|
777
|
-
args['
|
792
|
+
args['clothes_dryer_present'] = true
|
778
793
|
args['clothes_dryer_location'] = HPXML::LocationLivingSpace
|
779
794
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypeElectricity
|
780
795
|
args['clothes_dryer_efficiency_type'] = 'CombinedEnergyFactor'
|
781
796
|
args['clothes_dryer_efficiency'] = 3.73
|
782
797
|
args['clothes_dryer_vented_flow_rate'] = 150.0
|
783
|
-
args['
|
798
|
+
args['dishwasher_present'] = true
|
784
799
|
args['dishwasher_location'] = HPXML::LocationLivingSpace
|
785
800
|
args['dishwasher_efficiency_type'] = 'RatedAnnualkWh'
|
786
801
|
args['dishwasher_efficiency'] = 307
|
@@ -789,66 +804,35 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
789
804
|
args['dishwasher_label_annual_gas_cost'] = 22.32
|
790
805
|
args['dishwasher_label_usage'] = 4.0
|
791
806
|
args['dishwasher_place_setting_capacity'] = 12
|
792
|
-
args['
|
807
|
+
args['refrigerator_present'] = true
|
793
808
|
args['refrigerator_location'] = HPXML::LocationLivingSpace
|
794
809
|
args['refrigerator_rated_annual_kwh'] = 650.0
|
795
|
-
args['
|
796
|
-
args['
|
797
|
-
args['
|
798
|
-
args['extra_refrigerator_usage_multiplier'] = 1.0
|
799
|
-
args['freezer_location'] = 'none'
|
800
|
-
args['freezer_rated_annual_kwh'] = Constants.Auto
|
801
|
-
args['freezer_usage_multiplier'] = 1.0
|
810
|
+
args['extra_refrigerator_present'] = false
|
811
|
+
args['freezer_present'] = false
|
812
|
+
args['cooking_range_oven_present'] = true
|
802
813
|
args['cooking_range_oven_location'] = HPXML::LocationLivingSpace
|
803
814
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypeElectricity
|
804
815
|
args['cooking_range_oven_is_induction'] = false
|
805
816
|
args['cooking_range_oven_is_convection'] = false
|
806
|
-
args['cooking_range_oven_usage_multiplier'] = 1.0
|
807
817
|
args['ceiling_fan_present'] = false
|
808
|
-
args['ceiling_fan_efficiency'] = Constants.Auto
|
809
|
-
args['ceiling_fan_quantity'] = Constants.Auto
|
810
|
-
args['ceiling_fan_cooling_setpoint_temp_offset'] = 0
|
811
818
|
args['misc_plug_loads_television_present'] = true
|
812
819
|
args['misc_plug_loads_television_annual_kwh'] = 620.0
|
813
|
-
args['misc_plug_loads_television_usage_multiplier'] = 1.0
|
814
820
|
args['misc_plug_loads_other_annual_kwh'] = 2457.0
|
815
821
|
args['misc_plug_loads_other_frac_sensible'] = 0.855
|
816
822
|
args['misc_plug_loads_other_frac_latent'] = 0.045
|
817
|
-
args['misc_plug_loads_other_usage_multiplier'] = 1.0
|
818
823
|
args['misc_plug_loads_well_pump_present'] = false
|
819
|
-
args['misc_plug_loads_well_pump_annual_kwh'] = Constants.Auto
|
820
|
-
args['misc_plug_loads_well_pump_usage_multiplier'] = 0.0
|
821
824
|
args['misc_plug_loads_vehicle_present'] = false
|
822
|
-
args['misc_plug_loads_vehicle_annual_kwh'] = Constants.Auto
|
823
|
-
args['misc_plug_loads_vehicle_usage_multiplier'] = 0.0
|
824
825
|
args['misc_fuel_loads_grill_present'] = false
|
825
826
|
args['misc_fuel_loads_grill_fuel_type'] = HPXML::FuelTypeNaturalGas
|
826
|
-
args['misc_fuel_loads_grill_annual_therm'] = Constants.Auto
|
827
|
-
args['misc_fuel_loads_grill_usage_multiplier'] = 0.0
|
828
827
|
args['misc_fuel_loads_lighting_present'] = false
|
829
828
|
args['misc_fuel_loads_lighting_fuel_type'] = HPXML::FuelTypeNaturalGas
|
830
|
-
args['misc_fuel_loads_lighting_annual_therm'] = Constants.Auto
|
831
|
-
args['misc_fuel_loads_lighting_usage_multiplier'] = 0.0
|
832
829
|
args['misc_fuel_loads_fireplace_present'] = false
|
833
830
|
args['misc_fuel_loads_fireplace_fuel_type'] = HPXML::FuelTypeNaturalGas
|
834
|
-
args['misc_fuel_loads_fireplace_annual_therm'] = Constants.Auto
|
835
|
-
args['misc_fuel_loads_fireplace_frac_sensible'] = Constants.Auto
|
836
|
-
args['misc_fuel_loads_fireplace_frac_latent'] = Constants.Auto
|
837
|
-
args['misc_fuel_loads_fireplace_usage_multiplier'] = 0.0
|
838
831
|
args['pool_present'] = false
|
839
|
-
args['pool_pump_annual_kwh'] = Constants.Auto
|
840
|
-
args['pool_pump_usage_multiplier'] = 1.0
|
841
832
|
args['pool_heater_type'] = HPXML::HeaterTypeElectricResistance
|
842
|
-
args['pool_heater_annual_kwh'] = Constants.Auto
|
843
|
-
args['pool_heater_annual_therm'] = Constants.Auto
|
844
|
-
args['pool_heater_usage_multiplier'] = 1.0
|
845
833
|
args['hot_tub_present'] = false
|
846
|
-
args['hot_tub_pump_annual_kwh'] = Constants.Auto
|
847
|
-
args['hot_tub_pump_usage_multiplier'] = 1.0
|
848
834
|
args['hot_tub_heater_type'] = HPXML::HeaterTypeElectricResistance
|
849
|
-
args['
|
850
|
-
args['hot_tub_heater_annual_therm'] = Constants.Auto
|
851
|
-
args['hot_tub_heater_usage_multiplier'] = 1.0
|
835
|
+
args['utility_bill_scenario_names'] = 'Bills'
|
852
836
|
elsif ['ASHRAE_Standard_140/L100AC.xml'].include? hpxml_file
|
853
837
|
args['weather_station_epw_filepath'] = 'USA_CO_Colorado.Springs-Peterson.Field.724660_TMY3.epw'
|
854
838
|
args['geometry_unit_type'] = HPXML::ResidentialTypeSFD
|
@@ -874,12 +858,10 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
874
858
|
args['geometry_attic_type'] = HPXML::AtticTypeVented
|
875
859
|
args['geometry_eaves_depth'] = 0
|
876
860
|
args['geometry_unit_num_bedrooms'] = 3
|
877
|
-
args['geometry_unit_num_bathrooms'] = Constants.Auto
|
878
861
|
args['geometry_unit_num_occupants'] = 0
|
879
|
-
args['geometry_has_flue_or_chimney'] = Constants.Auto
|
880
862
|
args['floor_over_foundation_assembly_r'] = 14.15
|
881
863
|
args['floor_over_garage_assembly_r'] = 0
|
882
|
-
args['
|
864
|
+
args['floor_type'] = HPXML::FloorTypeWoodFrame
|
883
865
|
args['foundation_wall_thickness'] = 6.0
|
884
866
|
args['foundation_wall_insulation_r'] = 0
|
885
867
|
args['foundation_wall_insulation_distance_to_top'] = 0
|
@@ -902,10 +884,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
902
884
|
args['neighbor_back_distance'] = 0
|
903
885
|
args['neighbor_left_distance'] = 0
|
904
886
|
args['neighbor_right_distance'] = 0
|
905
|
-
args['neighbor_front_height'] = Constants.Auto
|
906
|
-
args['neighbor_back_height'] = Constants.Auto
|
907
|
-
args['neighbor_left_height'] = Constants.Auto
|
908
|
-
args['neighbor_right_height'] = Constants.Auto
|
909
887
|
args['wall_type'] = HPXML::WallTypeWoodStud
|
910
888
|
args['wall_siding_type'] = HPXML::SidingTypeWood
|
911
889
|
args['wall_color'] = HPXML::ColorMedium
|
@@ -947,18 +925,15 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
947
925
|
args['air_leakage_units'] = HPXML::UnitsACHNatural
|
948
926
|
args['air_leakage_house_pressure'] = 50
|
949
927
|
args['air_leakage_value'] = 0.67
|
950
|
-
args['site_shielding_of_home'] = Constants.Auto
|
951
928
|
args['heating_system_type'] = 'none'
|
952
929
|
args['heating_system_fuel'] = HPXML::FuelTypeNaturalGas
|
953
930
|
args['heating_system_heating_efficiency'] = 0
|
954
|
-
args['heating_system_heating_capacity'] = Constants.Auto
|
955
931
|
args['heating_system_fraction_heat_load_served'] = 0
|
956
932
|
args['cooling_system_type'] = 'none'
|
957
933
|
args['cooling_system_cooling_efficiency_type'] = HPXML::UnitsSEER
|
958
934
|
args['cooling_system_cooling_efficiency'] = 0
|
959
935
|
args['cooling_system_cooling_compressor_type'] = HPXML::HVACCompressorTypeSingleStage
|
960
936
|
args['cooling_system_cooling_sensible_heat_fraction'] = 0
|
961
|
-
args['cooling_system_cooling_capacity'] = Constants.Auto
|
962
937
|
args['cooling_system_fraction_cool_load_served'] = 0
|
963
938
|
args['cooling_system_is_ducted'] = false
|
964
939
|
args['heat_pump_type'] = 'none'
|
@@ -968,15 +943,11 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
968
943
|
args['heat_pump_cooling_efficiency'] = 0
|
969
944
|
args['heat_pump_cooling_compressor_type'] = HPXML::HVACCompressorTypeSingleStage
|
970
945
|
args['heat_pump_cooling_sensible_heat_fraction'] = 0
|
971
|
-
args['heat_pump_heating_capacity'] = Constants.Auto
|
972
|
-
args['heat_pump_heating_capacity_17_f'] = Constants.Auto
|
973
|
-
args['heat_pump_cooling_capacity'] = Constants.Auto
|
974
946
|
args['heat_pump_fraction_heat_load_served'] = 0
|
975
947
|
args['heat_pump_fraction_cool_load_served'] = 0
|
976
948
|
args['heat_pump_backup_type'] = 'none'
|
977
949
|
args['heat_pump_backup_fuel'] = HPXML::FuelTypeElectricity
|
978
950
|
args['heat_pump_backup_heating_efficiency'] = 0
|
979
|
-
args['heat_pump_backup_heating_capacity'] = Constants.Auto
|
980
951
|
args['hvac_control_heating_weekday_setpoint'] = 68
|
981
952
|
args['hvac_control_heating_weekend_setpoint'] = 68
|
982
953
|
args['hvac_control_cooling_weekday_setpoint'] = 78
|
@@ -993,7 +964,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
993
964
|
args['heating_system_2_type'] = 'none'
|
994
965
|
args['heating_system_2_fuel'] = HPXML::FuelTypeElectricity
|
995
966
|
args['heating_system_2_heating_efficiency'] = 0
|
996
|
-
args['heating_system_2_heating_capacity'] = Constants.Auto
|
997
967
|
args['heating_system_2_fraction_heat_load_served'] = 0
|
998
968
|
args['mech_vent_fan_type'] = 'none'
|
999
969
|
args['mech_vent_flow_rate'] = 0
|
@@ -1013,8 +983,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1013
983
|
args['kitchen_fans_quantity'] = 0
|
1014
984
|
args['bathroom_fans_quantity'] = 0
|
1015
985
|
args['whole_house_fan_present'] = false
|
1016
|
-
args['whole_house_fan_flow_rate'] = 0
|
1017
|
-
args['whole_house_fan_power'] = 0
|
1018
986
|
args['water_heater_type'] = 'none'
|
1019
987
|
args['water_heater_fuel_type'] = HPXML::FuelTypeElectricity
|
1020
988
|
args['water_heater_location'] = HPXML::LocationLivingSpace
|
@@ -1022,8 +990,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1022
990
|
args['water_heater_efficiency_type'] = 'EnergyFactor'
|
1023
991
|
args['water_heater_efficiency'] = 0
|
1024
992
|
args['water_heater_recovery_efficiency'] = 0
|
1025
|
-
args['water_heater_heating_capacity'] = Constants.Auto
|
1026
|
-
args['water_heater_standby_loss'] = 0
|
1027
993
|
args['water_heater_jacket_rvalue'] = 0
|
1028
994
|
args['water_heater_setpoint_temperature'] = 0
|
1029
995
|
args['water_heater_num_units_served'] = 0
|
@@ -1048,26 +1014,16 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1048
1014
|
args['solar_thermal_collector_tilt'] = 0
|
1049
1015
|
args['solar_thermal_collector_rated_optical_efficiency'] = 0
|
1050
1016
|
args['solar_thermal_collector_rated_thermal_losses'] = 0
|
1051
|
-
args['solar_thermal_storage_volume'] = Constants.Auto
|
1052
1017
|
args['solar_thermal_solar_fraction'] = 0
|
1053
|
-
args['
|
1054
|
-
args['pv_system_location'] = Constants.Auto
|
1055
|
-
args['pv_system_tracking'] = Constants.Auto
|
1018
|
+
args['pv_system_present'] = false
|
1056
1019
|
args['pv_system_array_azimuth'] = 0
|
1057
1020
|
args['pv_system_array_tilt'] = 0
|
1058
1021
|
args['pv_system_max_power_output'] = 0
|
1059
|
-
args['
|
1060
|
-
args['pv_system_system_losses_fraction'] = 0
|
1061
|
-
args['pv_system_num_bedrooms_served'] = 0
|
1062
|
-
args['pv_system_2_module_type'] = 'none'
|
1063
|
-
args['pv_system_2_location'] = Constants.Auto
|
1064
|
-
args['pv_system_2_tracking'] = Constants.Auto
|
1022
|
+
args['pv_system_2_present'] = false
|
1065
1023
|
args['pv_system_2_array_azimuth'] = 0
|
1066
1024
|
args['pv_system_2_array_tilt'] = 0
|
1067
1025
|
args['pv_system_2_max_power_output'] = 0
|
1068
|
-
args['
|
1069
|
-
args['battery_power'] = Constants.Auto
|
1070
|
-
args['battery_capacity'] = Constants.Auto
|
1026
|
+
args['battery_present'] = false
|
1071
1027
|
args['lighting_present'] = false
|
1072
1028
|
args['lighting_interior_fraction_cfl'] = 0
|
1073
1029
|
args['lighting_interior_fraction_lfl'] = 0
|
@@ -1082,97 +1038,41 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1082
1038
|
args['lighting_garage_fraction_led'] = 0
|
1083
1039
|
args['lighting_garage_usage_multiplier'] = 0
|
1084
1040
|
args['holiday_lighting_present'] = false
|
1085
|
-
args['holiday_lighting_daily_kwh'] = Constants.Auto
|
1086
1041
|
args['dehumidifier_type'] = 'none'
|
1087
1042
|
args['dehumidifier_efficiency_type'] = 'EnergyFactor'
|
1088
1043
|
args['dehumidifier_efficiency'] = 0
|
1089
1044
|
args['dehumidifier_capacity'] = 0
|
1090
1045
|
args['dehumidifier_rh_setpoint'] = 0
|
1091
1046
|
args['dehumidifier_fraction_dehumidification_load_served'] = 0
|
1092
|
-
args['
|
1047
|
+
args['clothes_washer_present'] = false
|
1093
1048
|
args['clothes_washer_efficiency_type'] = 'IntegratedModifiedEnergyFactor'
|
1094
|
-
args['
|
1095
|
-
args['clothes_washer_rated_annual_kwh'] = 0
|
1096
|
-
args['clothes_washer_label_electric_rate'] = 0
|
1097
|
-
args['clothes_washer_label_gas_rate'] = 0
|
1098
|
-
args['clothes_washer_label_annual_gas_cost'] = 0
|
1099
|
-
args['clothes_washer_label_usage'] = 0
|
1100
|
-
args['clothes_washer_capacity'] = 0
|
1101
|
-
args['clothes_washer_usage_multiplier'] = 0
|
1102
|
-
args['clothes_dryer_location'] = 'none'
|
1049
|
+
args['clothes_dryer_present'] = false
|
1103
1050
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypeElectricity
|
1104
1051
|
args['clothes_dryer_efficiency_type'] = 'CombinedEnergyFactor'
|
1105
|
-
args['
|
1106
|
-
args['clothes_dryer_vented_flow_rate'] = 0
|
1107
|
-
args['clothes_dryer_usage_multiplier'] = 0
|
1108
|
-
args['dishwasher_location'] = 'none'
|
1052
|
+
args['dishwasher_present'] = false
|
1109
1053
|
args['dishwasher_efficiency_type'] = 'RatedAnnualkWh'
|
1110
|
-
args['
|
1111
|
-
args['
|
1112
|
-
args['
|
1113
|
-
args['
|
1114
|
-
args['dishwasher_label_usage'] = 0
|
1115
|
-
args['dishwasher_place_setting_capacity'] = 0
|
1116
|
-
args['dishwasher_usage_multiplier'] = 0
|
1117
|
-
args['refrigerator_location'] = 'none'
|
1118
|
-
args['refrigerator_rated_annual_kwh'] = 0
|
1119
|
-
args['refrigerator_usage_multiplier'] = 0
|
1120
|
-
args['extra_refrigerator_location'] = 'none'
|
1121
|
-
args['extra_refrigerator_rated_annual_kwh'] = Constants.Auto
|
1122
|
-
args['extra_refrigerator_usage_multiplier'] = 0
|
1123
|
-
args['freezer_location'] = 'none'
|
1124
|
-
args['freezer_rated_annual_kwh'] = Constants.Auto
|
1125
|
-
args['freezer_usage_multiplier'] = 0
|
1126
|
-
args['cooking_range_oven_location'] = 'none'
|
1054
|
+
args['refrigerator_present'] = false
|
1055
|
+
args['extra_refrigerator_present'] = false
|
1056
|
+
args['freezer_present'] = false
|
1057
|
+
args['cooking_range_oven_present'] = false
|
1127
1058
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypeElectricity
|
1128
|
-
args['cooking_range_oven_is_induction'] = false
|
1129
|
-
args['cooking_range_oven_is_convection'] = false
|
1130
|
-
args['cooking_range_oven_usage_multiplier'] = 0
|
1131
1059
|
args['ceiling_fan_present'] = false
|
1132
|
-
args['ceiling_fan_efficiency'] = Constants.Auto
|
1133
|
-
args['ceiling_fan_quantity'] = Constants.Auto
|
1134
|
-
args['ceiling_fan_cooling_setpoint_temp_offset'] = 0
|
1135
1060
|
args['misc_plug_loads_television_present'] = false
|
1136
|
-
args['misc_plug_loads_television_annual_kwh'] = 0
|
1137
|
-
args['misc_plug_loads_television_usage_multiplier'] = 0
|
1138
1061
|
args['misc_plug_loads_other_annual_kwh'] = 7302.0
|
1139
1062
|
args['misc_plug_loads_other_frac_sensible'] = 0.822
|
1140
1063
|
args['misc_plug_loads_other_frac_latent'] = 0.178
|
1141
|
-
args['misc_plug_loads_other_usage_multiplier'] = 1.0
|
1142
1064
|
args['misc_plug_loads_well_pump_present'] = false
|
1143
|
-
args['misc_plug_loads_well_pump_annual_kwh'] = Constants.Auto
|
1144
|
-
args['misc_plug_loads_well_pump_usage_multiplier'] = 0
|
1145
1065
|
args['misc_plug_loads_vehicle_present'] = false
|
1146
|
-
args['misc_plug_loads_vehicle_annual_kwh'] = Constants.Auto
|
1147
|
-
args['misc_plug_loads_vehicle_usage_multiplier'] = 0
|
1148
1066
|
args['misc_fuel_loads_grill_present'] = false
|
1149
1067
|
args['misc_fuel_loads_grill_fuel_type'] = HPXML::FuelTypeNaturalGas
|
1150
|
-
args['misc_fuel_loads_grill_annual_therm'] = Constants.Auto
|
1151
|
-
args['misc_fuel_loads_grill_usage_multiplier'] = 0
|
1152
1068
|
args['misc_fuel_loads_lighting_present'] = false
|
1153
1069
|
args['misc_fuel_loads_lighting_fuel_type'] = HPXML::FuelTypeNaturalGas
|
1154
|
-
args['misc_fuel_loads_lighting_annual_therm'] = Constants.Auto
|
1155
|
-
args['misc_fuel_loads_lighting_usage_multiplier'] = 0
|
1156
1070
|
args['misc_fuel_loads_fireplace_present'] = false
|
1157
1071
|
args['misc_fuel_loads_fireplace_fuel_type'] = HPXML::FuelTypeNaturalGas
|
1158
|
-
args['misc_fuel_loads_fireplace_annual_therm'] = Constants.Auto
|
1159
|
-
args['misc_fuel_loads_fireplace_frac_sensible'] = Constants.Auto
|
1160
|
-
args['misc_fuel_loads_fireplace_frac_latent'] = Constants.Auto
|
1161
|
-
args['misc_fuel_loads_fireplace_usage_multiplier'] = 0
|
1162
1072
|
args['pool_present'] = false
|
1163
|
-
args['pool_pump_annual_kwh'] = Constants.Auto
|
1164
|
-
args['pool_pump_usage_multiplier'] = 0
|
1165
1073
|
args['pool_heater_type'] = HPXML::HeaterTypeElectricResistance
|
1166
|
-
args['pool_heater_annual_kwh'] = Constants.Auto
|
1167
|
-
args['pool_heater_annual_therm'] = Constants.Auto
|
1168
|
-
args['pool_heater_usage_multiplier'] = 0
|
1169
1074
|
args['hot_tub_present'] = false
|
1170
|
-
args['hot_tub_pump_annual_kwh'] = Constants.Auto
|
1171
|
-
args['hot_tub_pump_usage_multiplier'] = 0
|
1172
1075
|
args['hot_tub_heater_type'] = HPXML::HeaterTypeElectricResistance
|
1173
|
-
args['hot_tub_heater_annual_kwh'] = Constants.Auto
|
1174
|
-
args['hot_tub_heater_annual_therm'] = Constants.Auto
|
1175
|
-
args['hot_tub_heater_usage_multiplier'] = 0
|
1176
1076
|
end
|
1177
1077
|
|
1178
1078
|
# ASHRAE 140
|
@@ -1249,7 +1149,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1249
1149
|
if ['base-appliances-coal.xml'].include? hpxml_file
|
1250
1150
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypeCoal
|
1251
1151
|
args['clothes_dryer_efficiency'] = 3.3
|
1252
|
-
args
|
1152
|
+
args.delete('clothes_dryer_vented_flow_rate')
|
1253
1153
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypeCoal
|
1254
1154
|
elsif ['base-appliances-dehumidifier.xml'].include? hpxml_file
|
1255
1155
|
args['dehumidifier_type'] = HPXML::DehumidifierTypePortable
|
@@ -1261,7 +1161,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1261
1161
|
elsif ['base-appliances-gas.xml'].include? hpxml_file
|
1262
1162
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypeNaturalGas
|
1263
1163
|
args['clothes_dryer_efficiency'] = 3.3
|
1264
|
-
args
|
1164
|
+
args.delete('clothes_dryer_vented_flow_rate')
|
1265
1165
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypeNaturalGas
|
1266
1166
|
elsif ['base-appliances-modified.xml'].include? hpxml_file
|
1267
1167
|
args['clothes_washer_efficiency_type'] = 'ModifiedEnergyFactor'
|
@@ -1273,27 +1173,27 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1273
1173
|
args['dishwasher_efficiency'] = 0.7
|
1274
1174
|
args['dishwasher_place_setting_capacity'] = 6
|
1275
1175
|
elsif ['base-appliances-none.xml'].include? hpxml_file
|
1276
|
-
args['
|
1277
|
-
args['
|
1278
|
-
args['
|
1279
|
-
args['
|
1280
|
-
args['
|
1176
|
+
args['clothes_washer_present'] = false
|
1177
|
+
args['clothes_dryer_present'] = false
|
1178
|
+
args['dishwasher_present'] = false
|
1179
|
+
args['refrigerator_present'] = false
|
1180
|
+
args['cooking_range_oven_present'] = false
|
1281
1181
|
elsif ['base-appliances-oil.xml',
|
1282
1182
|
'base-appliances-oil-location-miami-fl.xml'].include? hpxml_file
|
1283
1183
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypeOil
|
1284
1184
|
args['clothes_dryer_efficiency'] = 3.3
|
1285
|
-
args
|
1185
|
+
args.delete('clothes_dryer_vented_flow_rate')
|
1286
1186
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypeOil
|
1287
1187
|
elsif ['base-appliances-propane.xml',
|
1288
1188
|
'base-appliances-propane-location-portland-or.xml'].include? hpxml_file
|
1289
1189
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypePropane
|
1290
1190
|
args['clothes_dryer_efficiency'] = 3.3
|
1291
|
-
args
|
1191
|
+
args.delete('clothes_dryer_vented_flow_rate')
|
1292
1192
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypePropane
|
1293
1193
|
elsif ['base-appliances-wood.xml'].include? hpxml_file
|
1294
1194
|
args['clothes_dryer_fuel_type'] = HPXML::FuelTypeWoodCord
|
1295
1195
|
args['clothes_dryer_efficiency'] = 3.3
|
1296
|
-
args
|
1196
|
+
args.delete('clothes_dryer_vented_flow_rate')
|
1297
1197
|
args['cooking_range_oven_fuel_type'] = HPXML::FuelTypeWoodCord
|
1298
1198
|
end
|
1299
1199
|
|
@@ -1352,6 +1252,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1352
1252
|
if ['base-bldgtype-single-family-attached.xml'].include? hpxml_file
|
1353
1253
|
args['geometry_unit_type'] = HPXML::ResidentialTypeSFA
|
1354
1254
|
args['geometry_unit_cfa'] = 1800.0
|
1255
|
+
args['geometry_unit_aspect_ratio'] = 0.6667
|
1355
1256
|
args['geometry_building_num_units'] = 3
|
1356
1257
|
args['geometry_unit_right_wall_is_adiabatic'] = true
|
1357
1258
|
args['window_front_wwr'] = 0.18
|
@@ -1384,6 +1285,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1384
1285
|
if ['base-bldgtype-multifamily.xml'].include? hpxml_file
|
1385
1286
|
args['geometry_unit_type'] = HPXML::ResidentialTypeApartment
|
1386
1287
|
args['geometry_unit_cfa'] = 900.0
|
1288
|
+
args['geometry_unit_aspect_ratio'] = 0.6667
|
1387
1289
|
args['geometry_foundation_type'] = HPXML::FoundationTypeAboveApartment
|
1388
1290
|
args['geometry_attic_type'] = HPXML::AtticTypeBelowApartment
|
1389
1291
|
args['geometry_unit_right_wall_is_adiabatic'] = true
|
@@ -1432,6 +1334,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1432
1334
|
args['mech_vent_shared_precooling_efficiency'] = 4.0
|
1433
1335
|
args['mech_vent_shared_precooling_fraction_cool_load_served'] = 0.8
|
1434
1336
|
elsif ['base-bldgtype-multifamily-shared-pv.xml'].include? hpxml_file
|
1337
|
+
args['pv_system_present'] = true
|
1435
1338
|
args['pv_system_num_bedrooms_served'] = 6 * 3
|
1436
1339
|
args['pv_system_location'] = HPXML::LocationGround
|
1437
1340
|
args['pv_system_module_type'] = HPXML::PVModuleTypeStandard
|
@@ -1457,19 +1360,19 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1457
1360
|
'base-bldgtype-multifamily-calctype-operational.xml'].include? hpxml_file
|
1458
1361
|
args['occupancy_calculation_type'] = HPXML::OccupancyCalculationTypeOperational
|
1459
1362
|
args['geometry_unit_num_occupants'] = 1
|
1460
|
-
args
|
1461
|
-
args
|
1462
|
-
args
|
1463
|
-
args
|
1464
|
-
args
|
1465
|
-
args
|
1466
|
-
args
|
1467
|
-
args
|
1468
|
-
args
|
1469
|
-
args
|
1470
|
-
args
|
1471
|
-
args
|
1472
|
-
args
|
1363
|
+
args.delete('misc_plug_loads_television_annual_kwh')
|
1364
|
+
args.delete('misc_plug_loads_other_annual_kwh')
|
1365
|
+
args.delete('pool_pump_annual_kwh')
|
1366
|
+
args.delete('pool_heater_annual_therm')
|
1367
|
+
args.delete('pool_heater_annual_kwh')
|
1368
|
+
args.delete('hot_tub_pump_annual_kwh')
|
1369
|
+
args.delete('hot_tub_heater_annual_therm')
|
1370
|
+
args.delete('hot_tub_heater_annual_kwh')
|
1371
|
+
args.delete('misc_plug_loads_well_pump_annual_kwh')
|
1372
|
+
args.delete('misc_plug_loads_vehicle_annual_kwh')
|
1373
|
+
args.delete('misc_fuel_loads_grill_annual_therm')
|
1374
|
+
args.delete('misc_fuel_loads_lighting_annual_therm')
|
1375
|
+
args.delete('misc_fuel_loads_fireplace_annual_therm')
|
1473
1376
|
elsif ['base-calctype-operational-misc-defaults.xml'].include? hpxml_file
|
1474
1377
|
args['occupancy_calculation_type'] = HPXML::OccupancyCalculationTypeOperational
|
1475
1378
|
args['geometry_unit_num_occupants'] = 5
|
@@ -1478,7 +1381,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1478
1381
|
# DHW
|
1479
1382
|
if ['base-dhw-combi-tankless.xml'].include? hpxml_file
|
1480
1383
|
args['water_heater_type'] = HPXML::WaterHeaterTypeCombiTankless
|
1481
|
-
args
|
1384
|
+
args.delete('water_heater_tank_volume')
|
1482
1385
|
elsif ['base-dhw-combi-tankless-outside.xml',
|
1483
1386
|
'base-dhw-indirect-outside.xml',
|
1484
1387
|
'base-dhw-tank-gas-outside.xml',
|
@@ -1507,7 +1410,6 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1507
1410
|
args['water_fixtures_sink_low_flow'] = true
|
1508
1411
|
elsif ['base-dhw-none.xml'].include? hpxml_file
|
1509
1412
|
args['water_heater_type'] = 'none'
|
1510
|
-
args['dishwasher_location'] = 'none'
|
1511
1413
|
elsif ['base-dhw-recirc-demand.xml'].include? hpxml_file
|
1512
1414
|
args['hot_water_distribution_system_type'] = HPXML::DHWDistTypeRecirc
|
1513
1415
|
args['hot_water_distribution_recirc_control_type'] = HPXML::DHWRecirControlTypeSensor
|
@@ -1581,7 +1483,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1581
1483
|
args['solar_thermal_storage_volume'] = 60
|
1582
1484
|
elsif ['base-dhw-tankless-electric.xml'].include? hpxml_file
|
1583
1485
|
args['water_heater_type'] = HPXML::WaterHeaterTypeTankless
|
1584
|
-
args
|
1486
|
+
args.delete('water_heater_tank_volume')
|
1585
1487
|
args['water_heater_efficiency'] = 0.99
|
1586
1488
|
elsif ['base-dhw-tankless-electric-uef.xml'].include? hpxml_file
|
1587
1489
|
args['water_heater_efficiency_type'] = 'UniformEnergyFactor'
|
@@ -1589,7 +1491,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1589
1491
|
elsif ['base-dhw-tankless-gas.xml'].include? hpxml_file
|
1590
1492
|
args['water_heater_type'] = HPXML::WaterHeaterTypeTankless
|
1591
1493
|
args['water_heater_fuel_type'] = HPXML::FuelTypeNaturalGas
|
1592
|
-
args
|
1494
|
+
args.delete('water_heater_tank_volume')
|
1593
1495
|
args['water_heater_efficiency'] = 0.82
|
1594
1496
|
elsif ['base-dhw-tankless-gas-uef.xml'].include? hpxml_file
|
1595
1497
|
args['water_heater_efficiency_type'] = 'UniformEnergyFactor'
|
@@ -1609,7 +1511,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1609
1511
|
elsif ['base-dhw-desuperheater-tankless.xml'].include? hpxml_file
|
1610
1512
|
args['water_heater_uses_desuperheater'] = true
|
1611
1513
|
args['water_heater_type'] = HPXML::WaterHeaterTypeTankless
|
1612
|
-
args
|
1514
|
+
args.delete('water_heater_tank_volume')
|
1613
1515
|
args['water_heater_efficiency'] = 0.99
|
1614
1516
|
elsif ['base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml'].include? hpxml_file
|
1615
1517
|
args['water_heater_operating_mode'] = HPXML::WaterHeaterOperatingModeHeatPumpOnly
|
@@ -1688,6 +1590,8 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1688
1590
|
args['overhangs_right_depth'] = 1.5
|
1689
1591
|
args['overhangs_right_distance_to_top_of_window'] = 2.0
|
1690
1592
|
args['overhangs_right_distance_to_bottom_of_window'] = 6.0
|
1593
|
+
elsif ['base-enclosure-windows-natural-ventilation-availability.xml'].include? hpxml_file
|
1594
|
+
args['window_natvent_availability'] = 7
|
1691
1595
|
elsif ['base-enclosure-windows-none.xml'].include? hpxml_file
|
1692
1596
|
args['window_area_front'] = 0
|
1693
1597
|
args['window_area_back'] = 0
|
@@ -1715,7 +1619,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1715
1619
|
elsif ['base-foundation-conditioned-basement-slab-insulation.xml'].include? hpxml_file
|
1716
1620
|
args['slab_under_insulation_r'] = 10
|
1717
1621
|
args['slab_under_width'] = 4
|
1718
|
-
elsif ['base-foundation-conditioned-basement-wall-
|
1622
|
+
elsif ['base-foundation-conditioned-basement-wall-insulation.xml'].include? hpxml_file
|
1719
1623
|
args['foundation_wall_type'] = HPXML::FoundationWallTypeConcreteBlockFoamCore
|
1720
1624
|
args['foundation_wall_insulation_r'] = 18.9
|
1721
1625
|
args['foundation_wall_insulation_distance_to_top'] = 1.0
|
@@ -1724,7 +1628,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1724
1628
|
args['geometry_foundation_type'] = HPXML::FoundationTypeSlab
|
1725
1629
|
args['geometry_foundation_height'] = 0.0
|
1726
1630
|
args['geometry_foundation_height_above_grade'] = 0.0
|
1727
|
-
args
|
1631
|
+
args.delete('foundation_wall_insulation_distance_to_bottom')
|
1728
1632
|
args['slab_under_insulation_r'] = 5
|
1729
1633
|
args['slab_under_width'] = 999
|
1730
1634
|
args['slab_carpet_fraction'] = 1.0
|
@@ -1805,6 +1709,11 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1805
1709
|
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpAirToAir
|
1806
1710
|
args['heat_pump_heating_capacity_17_f'] = args['heat_pump_heating_capacity'] * 0.6
|
1807
1711
|
args['heat_pump_backup_type'] = HPXML::HeatPumpBackupTypeIntegrated
|
1712
|
+
elsif ['base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml'].include? hpxml_file
|
1713
|
+
args['heat_pump_cooling_efficiency_type'] = HPXML::UnitsSEER2
|
1714
|
+
args['heat_pump_cooling_efficiency'] = (args['heat_pump_cooling_efficiency'] * 0.95).round(1)
|
1715
|
+
args['heat_pump_heating_efficiency_type'] = HPXML::UnitsHSPF2
|
1716
|
+
args['heat_pump_heating_efficiency'] = (args['heat_pump_heating_efficiency'] * 0.85).round(1)
|
1808
1717
|
elsif ['base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml'].include? hpxml_file
|
1809
1718
|
args['heat_pump_heating_capacity'] = 0.0
|
1810
1719
|
args['heat_pump_heating_capacity_17_f'] = 0.0
|
@@ -1848,21 +1757,23 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1848
1757
|
elsif ['base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml'].include? hpxml_file
|
1849
1758
|
args['heat_pump_backup_heating_switchover_temp'] = 25
|
1850
1759
|
elsif hpxml_file.include? 'autosize'
|
1851
|
-
args
|
1852
|
-
args
|
1853
|
-
args
|
1760
|
+
args.delete('heating_system_heating_capacity')
|
1761
|
+
args.delete('heating_system_2_heating_capacity')
|
1762
|
+
args.delete('cooling_system_cooling_capacity')
|
1763
|
+
args.delete('heat_pump_heating_capacity')
|
1764
|
+
args.delete('cooling_system_integrated_heating_system_capacity')
|
1854
1765
|
if hpxml_file.include? 'sizing-methodology-hers'
|
1855
|
-
args['
|
1766
|
+
args['heat_pump_sizing_methodology'] = HPXML::HeatPumpSizingHERS
|
1856
1767
|
elsif hpxml_file.include? 'sizing-methodology-maxload'
|
1857
|
-
args['
|
1768
|
+
args['heat_pump_sizing_methodology'] = HPXML::HeatPumpSizingMaxLoad
|
1858
1769
|
elsif hpxml_file.include? 'sizing-methodology-acca'
|
1859
|
-
args['
|
1770
|
+
args['heat_pump_sizing_methodology'] = HPXML::HeatPumpSizingACCA
|
1860
1771
|
else
|
1861
|
-
args['
|
1772
|
+
args['heat_pump_sizing_methodology'] = HPXML::HeatPumpSizingHERS
|
1862
1773
|
end
|
1863
|
-
args
|
1864
|
-
args
|
1865
|
-
args
|
1774
|
+
args.delete('heat_pump_heating_capacity_17_f')
|
1775
|
+
args.delete('heat_pump_backup_heating_capacity')
|
1776
|
+
args.delete('heat_pump_cooling_capacity')
|
1866
1777
|
elsif ['base-hvac-boiler-coal-only.xml',
|
1867
1778
|
'base-hvac-furnace-coal-only.xml'].include? hpxml_file
|
1868
1779
|
args['heating_system_fuel'] = HPXML::FuelTypeCoal
|
@@ -1887,6 +1798,9 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
1887
1798
|
args['heating_system_fuel'] = HPXML::FuelTypeWoodCord
|
1888
1799
|
elsif ['base-hvac-central-ac-only-1-speed.xml'].include? hpxml_file
|
1889
1800
|
args['heating_system_type'] = 'none'
|
1801
|
+
elsif ['base-hvac-central-ac-only-1-speed-seer2.xml'].include? hpxml_file
|
1802
|
+
args['cooling_system_cooling_efficiency_type'] = HPXML::UnitsSEER2
|
1803
|
+
args['cooling_system_cooling_efficiency'] = (args['cooling_system_cooling_efficiency'] * 0.95).round(1)
|
1890
1804
|
elsif ['base-hvac-central-ac-only-2-speed.xml'].include? hpxml_file
|
1891
1805
|
args['heating_system_type'] = 'none'
|
1892
1806
|
args['cooling_system_cooling_efficiency'] = 18.0
|
@@ -2013,8 +1927,8 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2013
1927
|
args['heat_pump_cooling_capacity'] = 0.0
|
2014
1928
|
args['heat_pump_fraction_cool_load_served'] = 0
|
2015
1929
|
elsif ['base-hvac-seasons.xml'].include? hpxml_file
|
2016
|
-
args['hvac_control_heating_season_period'] = 'Nov 1 -
|
2017
|
-
args['hvac_control_cooling_season_period'] = 'Jun 1 - Oct
|
1930
|
+
args['hvac_control_heating_season_period'] = 'Nov 1 - May 1'
|
1931
|
+
args['hvac_control_cooling_season_period'] = 'Jun 1 - Oct 1'
|
2018
1932
|
elsif ['base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml',
|
2019
1933
|
'base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml',
|
2020
1934
|
'base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml',
|
@@ -2094,6 +2008,18 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2094
2008
|
elsif ['base-hvac-room-ac-only-33percent.xml'].include? hpxml_file
|
2095
2009
|
args['cooling_system_fraction_cool_load_served'] = 0.33
|
2096
2010
|
args['cooling_system_cooling_capacity'] = 8000.0
|
2011
|
+
elsif ['base-hvac-room-ac-with-heating.xml',
|
2012
|
+
'base-hvac-ptac-with-heating-electricity.xml',
|
2013
|
+
'base-hvac-ptac-with-heating-natural-gas.xml'].include? hpxml_file
|
2014
|
+
args['cooling_system_integrated_heating_system_capacity'] = 36000.0
|
2015
|
+
args['cooling_system_integrated_heating_system_fraction_heat_load_served'] = 1.0
|
2016
|
+
if ['base-hvac-ptac-with-heating-natural-gas.xml'].include? hpxml_file
|
2017
|
+
args['cooling_system_integrated_heating_system_fuel'] = HPXML::FuelTypeNaturalGas
|
2018
|
+
args['cooling_system_integrated_heating_system_efficiency_percent'] = 0.8
|
2019
|
+
else
|
2020
|
+
args['cooling_system_integrated_heating_system_fuel'] = HPXML::FuelTypeElectricity
|
2021
|
+
args['cooling_system_integrated_heating_system_efficiency_percent'] = 1.0
|
2022
|
+
end
|
2097
2023
|
elsif ['base-hvac-setpoints.xml'].include? hpxml_file
|
2098
2024
|
args['hvac_control_heating_weekday_setpoint'] = 60
|
2099
2025
|
args['hvac_control_heating_weekend_setpoint'] = 60
|
@@ -2120,15 +2046,14 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2120
2046
|
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpPTHP
|
2121
2047
|
args['heat_pump_cooling_efficiency'] = 11.4
|
2122
2048
|
args['heat_pump_cooling_sensible_heat_fraction'] = 0.65
|
2049
|
+
elsif ['base-hvac-room-ac-with-reverse-cycle.xml'].include? hpxml_file
|
2050
|
+
args['heat_pump_type'] = HPXML::HVACTypeHeatPumpRoom
|
2123
2051
|
elsif ['base-hvac-ptac.xml'].include? hpxml_file
|
2124
2052
|
args['heating_system_type'] = 'none'
|
2125
2053
|
args['cooling_system_type'] = HPXML::HVACTypePTAC
|
2126
2054
|
args['cooling_system_cooling_efficiency_type'] = HPXML::UnitsEER
|
2127
2055
|
args['cooling_system_cooling_efficiency'] = 10.7
|
2128
2056
|
args['cooling_system_cooling_sensible_heat_fraction'] = 0.65
|
2129
|
-
elsif ['base-hvac-ptac-with-heating.xml'].include? hpxml_file
|
2130
|
-
args['heating_system_type'] = HPXML::HVACTypePTACHeating
|
2131
|
-
args['heating_system_heating_efficiency'] = 1.0
|
2132
2057
|
end
|
2133
2058
|
|
2134
2059
|
# Lighting
|
@@ -2178,6 +2103,10 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2178
2103
|
args['site_state_code'] = 'FL'
|
2179
2104
|
args['weather_station_epw_filepath'] = 'USA_FL_Miami.Intl.AP.722020_TMY3.epw'
|
2180
2105
|
args['heating_system_heating_capacity'] = 12000.0
|
2106
|
+
elsif ['base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml'].include? hpxml_file
|
2107
|
+
args['site_iecc_zone'] = '1A'
|
2108
|
+
args['site_state_code'] = 'FL'
|
2109
|
+
args['weather_station_epw_filepath'] = 'USA_FL_Miami.Intl.AP.722020_TMY3.epw'
|
2181
2110
|
elsif ['base-location-phoenix-az.xml'].include? hpxml_file
|
2182
2111
|
args['site_iecc_zone'] = '2B'
|
2183
2112
|
args['site_state_code'] = 'AZ'
|
@@ -2197,6 +2126,8 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2197
2126
|
elsif ['base-misc-defaults.xml'].include? hpxml_file
|
2198
2127
|
args.delete('site_iecc_zone')
|
2199
2128
|
args.delete('site_state_code')
|
2129
|
+
elsif ['base-misc-ground-conductivity.xml'].include? hpxml_file
|
2130
|
+
args['site_ground_conductivity'] = 0.8
|
2200
2131
|
end
|
2201
2132
|
|
2202
2133
|
# Mechanical Ventilation
|
@@ -2250,6 +2181,8 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2250
2181
|
args['mech_vent_fan_type'] = HPXML::MechVentTypeSupply
|
2251
2182
|
elsif ['base-mechvent-whole-house-fan.xml'].include? hpxml_file
|
2252
2183
|
args['whole_house_fan_present'] = true
|
2184
|
+
args['whole_house_fan_flow_rate'] = 4500.0
|
2185
|
+
args['whole_house_fan_power'] = 300.0
|
2253
2186
|
end
|
2254
2187
|
|
2255
2188
|
# Misc
|
@@ -2258,16 +2191,43 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2258
2191
|
end
|
2259
2192
|
if ['base-misc-additional-properties.xml'].include? hpxml_file
|
2260
2193
|
args['additional_properties'] += '|LowIncome=false|Remodeled|Description=2-story home in Denver|comma=,|special=<|special2=>|special3=/|special4=\\'
|
2194
|
+
elsif ['base-misc-bills.xml'].include? hpxml_file
|
2195
|
+
args['utility_bill_scenario_names'] = 'Bills'
|
2196
|
+
args['utility_bill_electricity_fixed_charges'] = '12'
|
2197
|
+
args['utility_bill_electricity_marginal_rates'] = '0.12'
|
2198
|
+
args['utility_bill_natural_gas_fixed_charges'] = '12'
|
2199
|
+
args['utility_bill_natural_gas_marginal_rates'] = '1.10'
|
2200
|
+
elsif ['base-misc-bills-none.xml'].include? hpxml_file
|
2201
|
+
args.delete('utility_bill_scenario_names')
|
2202
|
+
elsif ['base-misc-bills-pv.xml'].include? hpxml_file
|
2203
|
+
args['pv_system_max_power_output'] = 10000 # Ensure there is excess annual PV production
|
2204
|
+
args['utility_bill_scenario_names'] = 'Net Metering w/ Wholesale Excess Rate, Net Metering w/ Retail Excess Rate, Feed-In Tariff'
|
2205
|
+
args['utility_bill_electricity_fixed_charges'] = '10, 10, 10'
|
2206
|
+
args['utility_bill_electricity_marginal_rates'] = '0.12, 0.12, 0.12'
|
2207
|
+
args['utility_bill_natural_gas_fixed_charges'] = '11, 11, 11'
|
2208
|
+
args['utility_bill_natural_gas_marginal_rates'] = '1.10, 1.10, 1.10'
|
2209
|
+
args['utility_bill_pv_compensation_types'] = "#{HPXML::PVCompensationTypeNetMetering}, #{HPXML::PVCompensationTypeNetMetering}, #{HPXML::PVCompensationTypeFeedInTariff}"
|
2210
|
+
args['utility_bill_pv_net_metering_annual_excess_sellback_rate_types'] = "#{HPXML::PVAnnualExcessSellbackRateTypeUserSpecified}, #{HPXML::PVAnnualExcessSellbackRateTypeRetailElectricityCost}, NA"
|
2211
|
+
args['utility_bill_pv_net_metering_annual_excess_sellback_rates'] = '0.035, NA, NA'
|
2212
|
+
args['utility_bill_pv_feed_in_tariff_rates'] = 'NA, NA, 0.13'
|
2213
|
+
args['utility_bill_pv_monthly_grid_connection_fee_units'] = "#{HPXML::UnitsDollarsPerkW}, #{HPXML::UnitsDollarsPerkW}, #{HPXML::UnitsDollars}"
|
2214
|
+
args['utility_bill_pv_monthly_grid_connection_fees'] = '2.5, 2.5, 7.5'
|
2215
|
+
elsif ['base-misc-bills-pv-detailed-only.xml'].include? hpxml_file
|
2216
|
+
args['utility_bill_scenario_names'] = 'Tiered, TOU, Tiered and TOU, Real-Time Pricing'
|
2217
|
+
args['utility_bill_electricity_filepaths'] = '../../ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate.json, ../../ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate.json, ../../ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate.json, ../../ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate.json'
|
2218
|
+
elsif ['base-misc-bills-pv-mixed.xml'].include? hpxml_file
|
2219
|
+
args['utility_bill_scenario_names'] = 'Simple, Detailed'
|
2220
|
+
args['utility_bill_electricity_filepaths'] = 'NA, ../../ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate.json'
|
2261
2221
|
elsif ['base-misc-defaults.xml'].include? hpxml_file
|
2262
2222
|
args.delete('simulation_control_timestep')
|
2263
2223
|
args.delete('site_type')
|
2264
|
-
args
|
2265
|
-
args
|
2266
|
-
args
|
2267
|
-
args
|
2268
|
-
args
|
2269
|
-
args
|
2270
|
-
args
|
2224
|
+
args.delete('geometry_unit_num_bathrooms')
|
2225
|
+
args.delete('geometry_unit_num_occupants')
|
2226
|
+
args.delete('foundation_wall_insulation_distance_to_top')
|
2227
|
+
args.delete('foundation_wall_insulation_distance_to_bottom')
|
2228
|
+
args.delete('foundation_wall_thickness')
|
2229
|
+
args.delete('slab_thickness')
|
2230
|
+
args.delete('slab_carpet_fraction')
|
2271
2231
|
args.delete('roof_material_type')
|
2272
2232
|
args['roof_color'] = HPXML::ColorLight
|
2273
2233
|
args.delete('roof_material_type')
|
@@ -2278,66 +2238,68 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2278
2238
|
args.delete('cooling_system_cooling_compressor_type')
|
2279
2239
|
args.delete('cooling_system_cooling_sensible_heat_fraction')
|
2280
2240
|
args['mech_vent_fan_type'] = HPXML::MechVentTypeExhaust
|
2281
|
-
args
|
2282
|
-
args
|
2283
|
-
args
|
2284
|
-
args
|
2285
|
-
args
|
2286
|
-
args
|
2241
|
+
args.delete('mech_vent_hours_in_operation')
|
2242
|
+
args.delete('mech_vent_fan_power')
|
2243
|
+
args.delete('ducts_supply_location')
|
2244
|
+
args.delete('ducts_return_location')
|
2245
|
+
args.delete('ducts_supply_surface_area')
|
2246
|
+
args.delete('ducts_return_surface_area')
|
2287
2247
|
args['ducts_number_of_return_registers'] = 2
|
2288
|
-
args
|
2289
|
-
args
|
2290
|
-
args
|
2291
|
-
args
|
2292
|
-
args
|
2293
|
-
args
|
2294
|
-
args
|
2248
|
+
args.delete('kitchen_fans_quantity')
|
2249
|
+
args.delete('bathroom_fans_quantity')
|
2250
|
+
args.delete('water_heater_location')
|
2251
|
+
args.delete('water_heater_tank_volume')
|
2252
|
+
args.delete('water_heater_setpoint_temperature')
|
2253
|
+
args.delete('hot_water_distribution_standard_piping_length')
|
2254
|
+
args.delete('hot_water_distribution_pipe_r')
|
2295
2255
|
args['solar_thermal_system_type'] = HPXML::SolarThermalSystemType
|
2296
2256
|
args['solar_thermal_collector_type'] = HPXML::SolarThermalTypeSingleGlazing
|
2297
2257
|
args['solar_thermal_collector_rated_optical_efficiency'] = 0.77
|
2298
2258
|
args['solar_thermal_collector_rated_thermal_losses'] = 0.793
|
2299
|
-
args['
|
2259
|
+
args['pv_system_present'] = true
|
2260
|
+
args.delete('pv_system_module_type')
|
2300
2261
|
args.delete('pv_system_inverter_efficiency')
|
2301
2262
|
args.delete('pv_system_system_losses_fraction')
|
2302
|
-
args['
|
2303
|
-
args
|
2304
|
-
args
|
2305
|
-
args
|
2306
|
-
args
|
2307
|
-
args
|
2308
|
-
args
|
2309
|
-
args
|
2310
|
-
args
|
2311
|
-
args
|
2312
|
-
args
|
2313
|
-
args
|
2314
|
-
args
|
2315
|
-
args
|
2316
|
-
args
|
2317
|
-
args
|
2318
|
-
args
|
2319
|
-
args
|
2320
|
-
args
|
2321
|
-
args
|
2322
|
-
args
|
2323
|
-
args
|
2263
|
+
args['battery_present'] = true
|
2264
|
+
args.delete('battery_location')
|
2265
|
+
args.delete('clothes_washer_location')
|
2266
|
+
args.delete('clothes_washer_efficiency')
|
2267
|
+
args.delete('clothes_washer_rated_annual_kwh')
|
2268
|
+
args.delete('clothes_washer_label_electric_rate')
|
2269
|
+
args.delete('clothes_washer_label_gas_rate')
|
2270
|
+
args.delete('clothes_washer_label_annual_gas_cost')
|
2271
|
+
args.delete('clothes_washer_label_usage')
|
2272
|
+
args.delete('clothes_washer_capacity')
|
2273
|
+
args.delete('clothes_dryer_location')
|
2274
|
+
args.delete('clothes_dryer_efficiency')
|
2275
|
+
args.delete('clothes_dryer_vented_flow_rate')
|
2276
|
+
args.delete('dishwasher_location')
|
2277
|
+
args.delete('dishwasher_efficiency')
|
2278
|
+
args.delete('dishwasher_label_electric_rate')
|
2279
|
+
args.delete('dishwasher_label_gas_rate')
|
2280
|
+
args.delete('dishwasher_label_annual_gas_cost')
|
2281
|
+
args.delete('dishwasher_label_usage')
|
2282
|
+
args.delete('dishwasher_place_setting_capacity')
|
2283
|
+
args.delete('refrigerator_location')
|
2284
|
+
args.delete('refrigerator_rated_annual_kwh')
|
2285
|
+
args.delete('cooking_range_oven_location')
|
2324
2286
|
args.delete('cooking_range_oven_is_induction')
|
2325
2287
|
args.delete('cooking_range_oven_is_convection')
|
2326
2288
|
args['ceiling_fan_present'] = true
|
2327
|
-
args
|
2328
|
-
args
|
2329
|
-
args
|
2330
|
-
args
|
2331
|
-
args
|
2332
|
-
args
|
2333
|
-
args
|
2289
|
+
args.delete('misc_plug_loads_television_annual_kwh')
|
2290
|
+
args.delete('misc_plug_loads_other_annual_kwh')
|
2291
|
+
args.delete('misc_plug_loads_other_frac_sensible')
|
2292
|
+
args.delete('misc_plug_loads_other_frac_latent')
|
2293
|
+
args.delete('mech_vent_flow_rate')
|
2294
|
+
args.delete('kitchen_fans_flow_rate')
|
2295
|
+
args.delete('bathroom_fans_flow_rate')
|
2334
2296
|
args['whole_house_fan_present'] = true
|
2335
|
-
args
|
2336
|
-
args
|
2337
|
-
args
|
2338
|
-
args
|
2339
|
-
args
|
2340
|
-
args
|
2297
|
+
args.delete('whole_house_fan_flow_rate')
|
2298
|
+
args.delete('whole_house_fan_power')
|
2299
|
+
args.delete('hvac_control_heating_weekday_setpoint')
|
2300
|
+
args.delete('hvac_control_heating_weekend_setpoint')
|
2301
|
+
args.delete('hvac_control_cooling_weekday_setpoint')
|
2302
|
+
args.delete('hvac_control_cooling_weekend_setpoint')
|
2341
2303
|
elsif ['base-misc-emissions.xml'].include? hpxml_file
|
2342
2304
|
args['emissions_scenario_names'] = 'Cambium Hourly MidCase LRMER RMPA, Cambium Hourly LowRECosts LRMER RMPA, Cambium Annual MidCase AER National, eGRID RMPA, eGRID RMPA'
|
2343
2305
|
args['emissions_types'] = 'CO2e, CO2e, CO2e, SO2, NOx'
|
@@ -2346,29 +2308,26 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2346
2308
|
args['emissions_electricity_number_of_header_rows'] = '1, 1, , , '
|
2347
2309
|
args['emissions_electricity_column_numbers'] = '17, 17, , , '
|
2348
2310
|
elsif ['base-misc-loads-large-uncommon.xml'].include? hpxml_file
|
2349
|
-
args
|
2311
|
+
args.delete('extra_refrigerator_location')
|
2312
|
+
args['extra_refrigerator_present'] = true
|
2350
2313
|
args['extra_refrigerator_rated_annual_kwh'] = 700.0
|
2314
|
+
args['freezer_present'] = true
|
2351
2315
|
args['freezer_location'] = HPXML::LocationLivingSpace
|
2352
2316
|
args['freezer_rated_annual_kwh'] = 300.0
|
2353
2317
|
args['misc_plug_loads_well_pump_present'] = true
|
2354
2318
|
args['misc_plug_loads_well_pump_annual_kwh'] = 475.0
|
2355
|
-
args['misc_plug_loads_well_pump_usage_multiplier'] = 1.0
|
2356
2319
|
args['misc_plug_loads_vehicle_present'] = true
|
2357
2320
|
args['misc_plug_loads_vehicle_annual_kwh'] = 1500.0
|
2358
|
-
args['misc_plug_loads_vehicle_usage_multiplier'] = 1.0
|
2359
2321
|
args['misc_fuel_loads_grill_present'] = true
|
2360
2322
|
args['misc_fuel_loads_grill_fuel_type'] = HPXML::FuelTypePropane
|
2361
2323
|
args['misc_fuel_loads_grill_annual_therm'] = 25.0
|
2362
|
-
args['misc_fuel_loads_grill_usage_multiplier'] = 1.0
|
2363
2324
|
args['misc_fuel_loads_lighting_present'] = true
|
2364
2325
|
args['misc_fuel_loads_lighting_annual_therm'] = 28.0
|
2365
|
-
args['misc_fuel_loads_lighting_usage_multiplier'] = 1.0
|
2366
2326
|
args['misc_fuel_loads_fireplace_present'] = true
|
2367
2327
|
args['misc_fuel_loads_fireplace_fuel_type'] = HPXML::FuelTypeWoodCord
|
2368
2328
|
args['misc_fuel_loads_fireplace_annual_therm'] = 55.0
|
2369
2329
|
args['misc_fuel_loads_fireplace_frac_sensible'] = 0.5
|
2370
2330
|
args['misc_fuel_loads_fireplace_frac_latent'] = 0.1
|
2371
|
-
args['misc_fuel_loads_fireplace_usage_multiplier'] = 1.0
|
2372
2331
|
args['pool_present'] = true
|
2373
2332
|
args['pool_heater_type'] = HPXML::HeaterTypeGas
|
2374
2333
|
args['pool_pump_annual_kwh'] = 2700.0
|
@@ -2397,6 +2356,7 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2397
2356
|
args['clothes_dryer_usage_multiplier'] = 0.9
|
2398
2357
|
args['dishwasher_usage_multiplier'] = 0.9
|
2399
2358
|
args['refrigerator_usage_multiplier'] = 0.9
|
2359
|
+
args['freezer_present'] = true
|
2400
2360
|
args['freezer_location'] = HPXML::LocationLivingSpace
|
2401
2361
|
args['freezer_rated_annual_kwh'] = 300.0
|
2402
2362
|
args['freezer_usage_multiplier'] = 0.9
|
@@ -2430,15 +2390,21 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2430
2390
|
elsif ['base-misc-loads-none.xml'].include? hpxml_file
|
2431
2391
|
args['misc_plug_loads_television_present'] = false
|
2432
2392
|
args['misc_plug_loads_other_annual_kwh'] = 0.0
|
2433
|
-
args
|
2434
|
-
args
|
2393
|
+
args.delete('misc_plug_loads_other_frac_sensible')
|
2394
|
+
args.delete('misc_plug_loads_other_frac_latent')
|
2435
2395
|
end
|
2436
2396
|
|
2437
2397
|
# PV
|
2438
|
-
if ['base-pv.xml'
|
2398
|
+
if ['base-pv.xml',
|
2399
|
+
'base-pv-battery.xml',
|
2400
|
+
'base-pv-battery-garage.xml'].include? hpxml_file
|
2401
|
+
args['pv_system_present'] = true
|
2439
2402
|
args['pv_system_module_type'] = HPXML::PVModuleTypeStandard
|
2440
2403
|
args['pv_system_location'] = HPXML::LocationRoof
|
2441
2404
|
args['pv_system_tracking'] = HPXML::PVTrackingTypeFixed
|
2405
|
+
args['pv_system_inverter_efficiency'] = 0.96
|
2406
|
+
args['pv_system_system_losses_fraction'] = 0.14
|
2407
|
+
args['pv_system_2_present'] = true
|
2442
2408
|
args['pv_system_2_module_type'] = HPXML::PVModuleTypePremium
|
2443
2409
|
args['pv_system_2_location'] = HPXML::LocationRoof
|
2444
2410
|
args['pv_system_2_tracking'] = HPXML::PVTrackingTypeFixed
|
@@ -2447,33 +2413,21 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2447
2413
|
end
|
2448
2414
|
|
2449
2415
|
# Battery
|
2450
|
-
if ['base-battery.xml'
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
args['
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
args['
|
2461
|
-
args['
|
2462
|
-
args['
|
2463
|
-
|
2464
|
-
|
2465
|
-
args['pv_system_module_type'] = HPXML::PVModuleTypeStandard
|
2466
|
-
args['pv_system_location'] = HPXML::LocationRoof
|
2467
|
-
args['pv_system_tracking'] = HPXML::PVTrackingTypeFixed
|
2468
|
-
args['pv_system_2_module_type'] = HPXML::PVModuleTypePremium
|
2469
|
-
args['pv_system_2_location'] = HPXML::LocationRoof
|
2470
|
-
args['pv_system_2_tracking'] = HPXML::PVTrackingTypeFixed
|
2471
|
-
args['pv_system_2_array_azimuth'] = 90
|
2472
|
-
args['pv_system_2_max_power_output'] = 1500
|
2473
|
-
args['battery_location'] = HPXML::LocationGarage
|
2474
|
-
args['battery_power'] = '15000'
|
2475
|
-
args['battery_capacity'] = '20'
|
2476
|
-
args['battery_usable_capacity'] = '18'
|
2416
|
+
if ['base-battery.xml',
|
2417
|
+
'base-misc-generators-battery.xml',
|
2418
|
+
'base-pv-battery-garage.xml',
|
2419
|
+
'base-pv-generators-battery.xml'].include? hpxml_file
|
2420
|
+
args['battery_present'] = true
|
2421
|
+
if hpxml_file == 'base-pv-battery-garage.xml'
|
2422
|
+
args['battery_location'] = HPXML::LocationGarage
|
2423
|
+
else
|
2424
|
+
args['battery_location'] = HPXML::LocationOutside
|
2425
|
+
end
|
2426
|
+
args['battery_power'] = 6000
|
2427
|
+
args['battery_capacity'] = 20
|
2428
|
+
args['battery_usable_capacity'] = 18
|
2429
|
+
elsif ['base-pv-battery-round-trip-efficiency.xml'].include? hpxml_file
|
2430
|
+
args['battery_round_trip_efficiency'] = 0.8
|
2477
2431
|
end
|
2478
2432
|
|
2479
2433
|
# Simulation Control
|
@@ -2485,9 +2439,17 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2485
2439
|
elsif ['base-simcontrol-daylight-saving-disabled.xml'].include? hpxml_file
|
2486
2440
|
args['simulation_control_daylight_saving_enabled'] = false
|
2487
2441
|
elsif ['base-simcontrol-runperiod-1-month.xml'].include? hpxml_file
|
2488
|
-
args['simulation_control_run_period'] = '
|
2442
|
+
args['simulation_control_run_period'] = 'Feb 1 - Feb 28'
|
2443
|
+
elsif ['base-simcontrol-temperature-capacitance-multiplier.xml'].include? hpxml_file
|
2444
|
+
args['simulation_control_temperature_capacitance_multiplier'] = 7.0
|
2489
2445
|
elsif ['base-simcontrol-timestep-10-mins.xml'].include? hpxml_file
|
2490
2446
|
args['simulation_control_timestep'] = 10
|
2447
|
+
elsif ['base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml'].include? hpxml_file
|
2448
|
+
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-10-mins.csv'
|
2449
|
+
elsif ['base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml'].include? hpxml_file
|
2450
|
+
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic.csv'
|
2451
|
+
elsif ['base-simcontrol-timestep-30-mins.xml'].include? hpxml_file
|
2452
|
+
args['simulation_control_timestep'] = 30
|
2491
2453
|
end
|
2492
2454
|
|
2493
2455
|
# Occupancy Schedules
|
@@ -2507,6 +2469,8 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2507
2469
|
sch_args['schedules_vacancy_period'] = 'Dec 1 - Jan 31'
|
2508
2470
|
sch_args['output_csv_path'] = '../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-vacancy.csv'
|
2509
2471
|
sch_args['hpxml_output_path'] = sch_args['hpxml_path']
|
2472
|
+
elsif ['base-schedules-detailed-occupancy-stochastic-10-mins.xml'].include? hpxml_file
|
2473
|
+
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-10-mins.csv'
|
2510
2474
|
elsif ['base-schedules-detailed-all-10-mins.xml'].include? hpxml_file
|
2511
2475
|
sch_args['hpxml_path'] = args['hpxml_path']
|
2512
2476
|
sch_args['schedules_type'] = 'stochastic'
|
@@ -2516,67 +2480,72 @@ def set_measure_argument_values(hpxml_file, args, sch_args, orig_parent)
|
|
2516
2480
|
|
2517
2481
|
# Setpoint Schedules
|
2518
2482
|
if ['base-schedules-detailed-setpoints.xml'].include? hpxml_file
|
2519
|
-
args
|
2520
|
-
args
|
2521
|
-
args
|
2522
|
-
args
|
2483
|
+
args.delete('hvac_control_heating_weekday_setpoint')
|
2484
|
+
args.delete('hvac_control_heating_weekend_setpoint')
|
2485
|
+
args.delete('hvac_control_cooling_weekday_setpoint')
|
2486
|
+
args.delete('hvac_control_cooling_weekend_setpoint')
|
2523
2487
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/setpoints.csv'
|
2524
2488
|
elsif ['base-schedules-detailed-setpoints-daily-schedules.xml'].include? hpxml_file
|
2525
|
-
args
|
2526
|
-
args
|
2527
|
-
args
|
2528
|
-
args
|
2489
|
+
args.delete('hvac_control_heating_weekday_setpoint')
|
2490
|
+
args.delete('hvac_control_heating_weekend_setpoint')
|
2491
|
+
args.delete('hvac_control_cooling_weekday_setpoint')
|
2492
|
+
args.delete('hvac_control_cooling_weekend_setpoint')
|
2529
2493
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/setpoints-daily-schedules.csv'
|
2530
2494
|
elsif ['base-schedules-detailed-setpoints-daily-setbacks.xml'].include? hpxml_file
|
2531
|
-
args
|
2532
|
-
args
|
2533
|
-
args
|
2534
|
-
args
|
2495
|
+
args.delete('hvac_control_heating_weekday_setpoint')
|
2496
|
+
args.delete('hvac_control_heating_weekend_setpoint')
|
2497
|
+
args.delete('hvac_control_cooling_weekday_setpoint')
|
2498
|
+
args.delete('hvac_control_cooling_weekend_setpoint')
|
2535
2499
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/setpoints-daily-setbacks.csv'
|
2536
2500
|
elsif ['base-schedules-detailed-all-10-mins.xml'].include? hpxml_file
|
2537
|
-
args
|
2538
|
-
args
|
2539
|
-
args
|
2540
|
-
args
|
2501
|
+
args.delete('hvac_control_heating_weekday_setpoint')
|
2502
|
+
args.delete('hvac_control_heating_weekend_setpoint')
|
2503
|
+
args.delete('hvac_control_cooling_weekday_setpoint')
|
2504
|
+
args.delete('hvac_control_cooling_weekend_setpoint')
|
2541
2505
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/setpoints-10-mins.csv'
|
2542
2506
|
elsif ['base-hvac-furnace-gas-only-detailed-setpoints.xml'].include? hpxml_file
|
2543
|
-
args
|
2544
|
-
args
|
2507
|
+
args.delete('hvac_control_heating_weekday_setpoint')
|
2508
|
+
args.delete('hvac_control_heating_weekend_setpoint')
|
2545
2509
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/setpoints-heating-only.csv'
|
2546
2510
|
elsif ['base-hvac-room-ac-only-detailed-setpoints.xml'].include? hpxml_file
|
2547
|
-
args
|
2548
|
-
args
|
2511
|
+
args.delete('hvac_control_cooling_weekday_setpoint')
|
2512
|
+
args.delete('hvac_control_cooling_weekend_setpoint')
|
2549
2513
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/setpoints-cooling-only.csv'
|
2550
2514
|
end
|
2551
2515
|
|
2552
2516
|
# Water Heater Schedules
|
2553
|
-
if ['base-dhw-tank-heat-pump-detailed-setpoints.xml'
|
2554
|
-
|
2517
|
+
if ['base-dhw-tank-heat-pump-detailed-setpoints.xml',
|
2518
|
+
'base-dhw-indirect-detailed-setpoints.xml',
|
2519
|
+
'base-dhw-tank-detailed-setpoints.xml',
|
2520
|
+
'base-dhw-tankless-detailed-setpoints.xml'].include? hpxml_file
|
2521
|
+
args.delete('water_heater_setpoint_temperature')
|
2555
2522
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-setpoints.csv'
|
2556
2523
|
elsif ['base-dhw-tank-heat-pump-detailed-operating-modes.xml'].include? hpxml_file
|
2557
|
-
args
|
2524
|
+
args.delete('water_heater_setpoint_temperature')
|
2558
2525
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-operating-modes.csv'
|
2559
2526
|
elsif ['base-dhw-tank-heat-pump-detailed-schedules.xml'].include? hpxml_file
|
2560
|
-
args
|
2527
|
+
args.delete('water_heater_setpoint_temperature')
|
2561
2528
|
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-setpoints.csv, ../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-operating-modes.csv'
|
2562
|
-
elsif ['base-dhw-tank-detailed-setpoints.xml'].include? hpxml_file
|
2563
|
-
args['water_heater_setpoint_temperature'] = Constants.Auto
|
2564
|
-
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-setpoints.csv'
|
2565
|
-
elsif ['base-dhw-tankless-detailed-setpoints.xml'].include? hpxml_file
|
2566
|
-
args['water_heater_setpoint_temperature'] = Constants.Auto
|
2567
|
-
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-setpoints.csv'
|
2568
2529
|
elsif ['base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml'].include? hpxml_file
|
2569
2530
|
sch_args['hpxml_path'] = args['hpxml_path']
|
2570
2531
|
sch_args['schedules_type'] = 'stochastic'
|
2571
2532
|
sch_args['output_csv_path'] = '../../HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic.csv'
|
2572
2533
|
sch_args['hpxml_output_path'] = sch_args['hpxml_path']
|
2573
2534
|
elsif ['base-schedules-detailed-all-10-mins.xml'].include? hpxml_file
|
2574
|
-
args
|
2535
|
+
args.delete('water_heater_setpoint_temperature')
|
2575
2536
|
args['schedules_filepaths'] += ', ../../HPXMLtoOpenStudio/resources/schedule_files/water-heater-setpoints-10-mins.csv'
|
2576
2537
|
end
|
2538
|
+
|
2539
|
+
# Battery Schedules
|
2540
|
+
if ['base-battery-scheduled.xml',
|
2541
|
+
'base-misc-generators-battery-scheduled.xml',
|
2542
|
+
'base-pv-battery-scheduled.xml',
|
2543
|
+
'base-pv-generators-battery-scheduled.xml'].include? hpxml_file
|
2544
|
+
args['schedules_filepaths'] = '../../HPXMLtoOpenStudio/resources/schedule_files/battery.csv'
|
2545
|
+
end
|
2577
2546
|
end
|
2578
2547
|
|
2579
|
-
def apply_hpxml_modification_ashrae_140(
|
2548
|
+
def apply_hpxml_modification_ashrae_140(hpxml)
|
2580
2549
|
# Set detailed HPXML values for ASHRAE 140 test files
|
2581
2550
|
|
2582
2551
|
renumber_hpxml_ids(hpxml)
|
@@ -2586,7 +2555,7 @@ def apply_hpxml_modification_ashrae_140(hpxml_file, hpxml)
|
|
2586
2555
|
# ------------ #
|
2587
2556
|
|
2588
2557
|
hpxml.header.xml_generated_by = 'tasks.rb'
|
2589
|
-
hpxml.header.created_date_and_time = Time.new(2000, 1, 1).strftime('%Y-%m-%dT%H:%M:%S%:z') # Hard-code to prevent diffs
|
2558
|
+
hpxml.header.created_date_and_time = Time.new(2000, 1, 1, 0, 0, 0, '-07:00').strftime('%Y-%m-%dT%H:%M:%S%:z') # Hard-code to prevent diffs
|
2590
2559
|
hpxml.header.apply_ashrae140_assumptions = true
|
2591
2560
|
|
2592
2561
|
# --------------------- #
|
@@ -2630,11 +2599,11 @@ def apply_hpxml_modification_ashrae_140(hpxml_file, hpxml)
|
|
2630
2599
|
end
|
2631
2600
|
end
|
2632
2601
|
end
|
2633
|
-
hpxml.
|
2634
|
-
next unless
|
2602
|
+
hpxml.floors.each do |floor|
|
2603
|
+
next unless floor.is_ceiling
|
2635
2604
|
|
2636
|
-
|
2637
|
-
|
2605
|
+
floor.interior_finish_type = HPXML::InteriorFinishGypsumBoard
|
2606
|
+
floor.interior_finish_thickness = 0.5
|
2638
2607
|
end
|
2639
2608
|
hpxml.foundation_walls.each do |fwall|
|
2640
2609
|
if fwall.insulation_interior_r_value == 0
|
@@ -2695,7 +2664,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
2695
2664
|
|
2696
2665
|
# General logic for all files
|
2697
2666
|
hpxml.header.xml_generated_by = 'tasks.rb'
|
2698
|
-
hpxml.header.created_date_and_time = Time.new(2000, 1, 1).strftime('%Y-%m-%dT%H:%M:%S%:z') # Hard-code to prevent diffs
|
2667
|
+
hpxml.header.created_date_and_time = Time.new(2000, 1, 1, 0, 0, 0, '-07:00').strftime('%Y-%m-%dT%H:%M:%S%:z') # Hard-code to prevent diffs
|
2699
2668
|
|
2700
2669
|
# Logic that can only be applied based on the file name
|
2701
2670
|
if ['base-hvac-undersized-allow-increased-fixed-capacities.xml'].include? hpxml_file
|
@@ -2762,7 +2731,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
2762
2731
|
|
2763
2732
|
roof.interior_finish_type = HPXML::InteriorFinishGypsumBoard
|
2764
2733
|
end
|
2765
|
-
(hpxml.walls + hpxml.foundation_walls + hpxml.
|
2734
|
+
(hpxml.walls + hpxml.foundation_walls + hpxml.floors).each do |surface|
|
2766
2735
|
if surface.is_a?(HPXML::FoundationWall) && surface.interior_adjacent_to != HPXML::LocationBasementConditioned
|
2767
2736
|
surface.interior_finish_type = HPXML::InteriorFinishNone
|
2768
2737
|
end
|
@@ -2775,7 +2744,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
2775
2744
|
HPXML::LocationAtticVented,
|
2776
2745
|
HPXML::LocationOtherHousingUnit,
|
2777
2746
|
HPXML::LocationBasementConditioned].include?(surface.exterior_adjacent_to)
|
2778
|
-
next if surface.is_a?(HPXML::
|
2747
|
+
next if surface.is_a?(HPXML::Floor) && surface.is_floor
|
2779
2748
|
|
2780
2749
|
surface.interior_finish_type = HPXML::InteriorFinishGypsumBoard
|
2781
2750
|
end
|
@@ -2817,12 +2786,12 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
2817
2786
|
w.exterior_adjacent_to == HPXML::LocationOtherHousingUnit
|
2818
2787
|
} [0]
|
2819
2788
|
wall.exterior_adjacent_to = adjacent_to
|
2820
|
-
hpxml.
|
2821
|
-
hpxml.
|
2789
|
+
hpxml.floors[0].exterior_adjacent_to = adjacent_to
|
2790
|
+
hpxml.floors[1].exterior_adjacent_to = adjacent_to
|
2822
2791
|
if hpxml_file != 'base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml'
|
2823
2792
|
wall.insulation_assembly_r_value = 23
|
2824
|
-
hpxml.
|
2825
|
-
hpxml.
|
2793
|
+
hpxml.floors[0].insulation_assembly_r_value = 18.7
|
2794
|
+
hpxml.floors[1].insulation_assembly_r_value = 18.7
|
2826
2795
|
end
|
2827
2796
|
hpxml.windows.each do |window|
|
2828
2797
|
window.area *= 0.35
|
@@ -2885,25 +2854,28 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
2885
2854
|
emittance: 0.92,
|
2886
2855
|
interior_finish_type: HPXML::InteriorFinishGypsumBoard,
|
2887
2856
|
insulation_assembly_r_value: 4.0)
|
2888
|
-
hpxml.
|
2889
|
-
hpxml.
|
2890
|
-
|
2891
|
-
|
2892
|
-
|
2893
|
-
|
2894
|
-
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2898
|
-
|
2899
|
-
|
2900
|
-
|
2901
|
-
|
2902
|
-
|
2903
|
-
|
2904
|
-
|
2905
|
-
|
2906
|
-
|
2857
|
+
hpxml.floors[0].delete
|
2858
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
2859
|
+
exterior_adjacent_to: HPXML::LocationOtherNonFreezingSpace,
|
2860
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
2861
|
+
floor_type: HPXML::FloorTypeWoodFrame,
|
2862
|
+
area: 550,
|
2863
|
+
insulation_assembly_r_value: 18.7,
|
2864
|
+
floor_or_ceiling: HPXML::FloorOrCeilingFloor)
|
2865
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
2866
|
+
exterior_adjacent_to: HPXML::LocationOtherMultifamilyBufferSpace,
|
2867
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
2868
|
+
floor_type: HPXML::FloorTypeWoodFrame,
|
2869
|
+
area: 200,
|
2870
|
+
insulation_assembly_r_value: 18.7,
|
2871
|
+
floor_or_ceiling: HPXML::FloorOrCeilingFloor)
|
2872
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
2873
|
+
exterior_adjacent_to: HPXML::LocationOtherHeatedSpace,
|
2874
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
2875
|
+
floor_type: HPXML::FloorTypeWoodFrame,
|
2876
|
+
area: 150,
|
2877
|
+
insulation_assembly_r_value: 2.1,
|
2878
|
+
floor_or_ceiling: HPXML::FloorOrCeilingFloor)
|
2907
2879
|
wall = hpxml.walls.select { |w|
|
2908
2880
|
w.interior_adjacent_to == HPXML::LocationLivingSpace &&
|
2909
2881
|
w.exterior_adjacent_to == HPXML::LocationOtherMultifamilyBufferSpace
|
@@ -3006,12 +2978,14 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3006
2978
|
hpxml.foundation_walls.each do |foundation_wall|
|
3007
2979
|
foundation_wall.area = 1200.0 / hpxml.foundation_walls.size
|
3008
2980
|
end
|
3009
|
-
hpxml.
|
3010
|
-
|
3011
|
-
|
3012
|
-
|
3013
|
-
|
3014
|
-
|
2981
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
2982
|
+
exterior_adjacent_to: HPXML::LocationAtticUnvented,
|
2983
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
2984
|
+
floor_type: HPXML::FloorTypeWoodFrame,
|
2985
|
+
area: 450,
|
2986
|
+
interior_finish_type: HPXML::InteriorFinishGypsumBoard,
|
2987
|
+
insulation_assembly_r_value: 39.3,
|
2988
|
+
floor_or_ceiling: HPXML::FloorOrCeilingCeiling)
|
3015
2989
|
hpxml.slabs[0].area = 1350
|
3016
2990
|
hpxml.slabs[0].exposed_perimeter = 150
|
3017
2991
|
hpxml.windows[1].area = 108
|
@@ -3152,10 +3126,10 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3152
3126
|
hpxml.rim_joists[-1].id = "RimJoist#{hpxml.rim_joists.size}"
|
3153
3127
|
hpxml.rim_joists[-1].interior_adjacent_to = HPXML::LocationLivingSpace
|
3154
3128
|
hpxml.rim_joists[-1].area = 116
|
3155
|
-
elsif ['base-foundation-conditioned-basement-wall-
|
3129
|
+
elsif ['base-foundation-conditioned-basement-wall-insulation.xml'].include? hpxml_file
|
3156
3130
|
hpxml.foundation_walls.each do |foundation_wall|
|
3157
3131
|
foundation_wall.insulation_interior_r_value = 10
|
3158
|
-
foundation_wall.insulation_interior_distance_to_top =
|
3132
|
+
foundation_wall.insulation_interior_distance_to_top = 1
|
3159
3133
|
foundation_wall.insulation_interior_distance_to_bottom = 8
|
3160
3134
|
foundation_wall.insulation_exterior_r_value = 8.9
|
3161
3135
|
foundation_wall.insulation_exterior_distance_to_top = 1
|
@@ -3250,12 +3224,14 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3250
3224
|
depth_below_grade: 3,
|
3251
3225
|
insulation_interior_r_value: 0,
|
3252
3226
|
insulation_exterior_r_value: 0)
|
3253
|
-
hpxml.
|
3254
|
-
hpxml.
|
3255
|
-
|
3256
|
-
|
3257
|
-
|
3258
|
-
|
3227
|
+
hpxml.floors[0].area = 675
|
3228
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
3229
|
+
exterior_adjacent_to: HPXML::LocationCrawlspaceUnvented,
|
3230
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
3231
|
+
floor_type: HPXML::FloorTypeWoodFrame,
|
3232
|
+
area: 675,
|
3233
|
+
insulation_assembly_r_value: 18.7,
|
3234
|
+
floor_or_ceiling: HPXML::FloorOrCeilingFloor)
|
3259
3235
|
hpxml.slabs[0].area = 675
|
3260
3236
|
hpxml.slabs[0].exposed_perimeter = 75
|
3261
3237
|
hpxml.slabs.add(id: "Slab#{hpxml.slabs.size + 1}",
|
@@ -3392,11 +3368,13 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3392
3368
|
solar_absorptance: 0.7,
|
3393
3369
|
emittance: 0.92,
|
3394
3370
|
insulation_assembly_r_value: 4)
|
3395
|
-
hpxml.
|
3396
|
-
|
3397
|
-
|
3398
|
-
|
3399
|
-
|
3371
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
3372
|
+
exterior_adjacent_to: HPXML::LocationGarage,
|
3373
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
3374
|
+
floor_type: HPXML::FloorTypeWoodFrame,
|
3375
|
+
area: 400,
|
3376
|
+
insulation_assembly_r_value: 39.3,
|
3377
|
+
floor_or_ceiling: HPXML::FloorOrCeilingFloor)
|
3400
3378
|
hpxml.slabs[0].area -= 400
|
3401
3379
|
hpxml.slabs[0].exposed_perimeter -= 40
|
3402
3380
|
hpxml.slabs.add(id: "Slab#{hpxml.slabs.size + 1}",
|
@@ -3421,6 +3399,45 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3421
3399
|
area: 4,
|
3422
3400
|
azimuth: 0,
|
3423
3401
|
r_value: 4.4)
|
3402
|
+
elsif ['base-enclosure-ceilingtypes.xml'].include? hpxml_file
|
3403
|
+
exterior_adjacent_to = hpxml.floors[0].exterior_adjacent_to
|
3404
|
+
area = hpxml.floors[0].area
|
3405
|
+
hpxml.floors.reverse_each do |floor|
|
3406
|
+
floor.delete
|
3407
|
+
end
|
3408
|
+
floors_map = { HPXML::FloorTypeSIP => 16.1,
|
3409
|
+
HPXML::FloorTypeConcrete => 3.2,
|
3410
|
+
HPXML::FloorTypeSteelFrame => 8.1 }
|
3411
|
+
floors_map.each_with_index do |(floor_type, assembly_r), _i|
|
3412
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
3413
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
3414
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
3415
|
+
floor_type: floor_type,
|
3416
|
+
area: area / floors_map.size,
|
3417
|
+
insulation_assembly_r_value: assembly_r,
|
3418
|
+
floor_or_ceiling: HPXML::FloorOrCeilingCeiling)
|
3419
|
+
end
|
3420
|
+
elsif ['base-enclosure-floortypes.xml'].include? hpxml_file
|
3421
|
+
exterior_adjacent_to = hpxml.floors[0].exterior_adjacent_to
|
3422
|
+
area = hpxml.floors[0].area
|
3423
|
+
ceiling = hpxml.floors[1].dup
|
3424
|
+
hpxml.floors.reverse_each do |floor|
|
3425
|
+
floor.delete
|
3426
|
+
end
|
3427
|
+
floors_map = { HPXML::FloorTypeSIP => 16.1,
|
3428
|
+
HPXML::FloorTypeConcrete => 3.2,
|
3429
|
+
HPXML::FloorTypeSteelFrame => 8.1 }
|
3430
|
+
floors_map.each_with_index do |(floor_type, assembly_r), _i|
|
3431
|
+
hpxml.floors.add(id: "Floor#{hpxml.floors.size + 1}",
|
3432
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
3433
|
+
interior_adjacent_to: HPXML::LocationLivingSpace,
|
3434
|
+
floor_type: floor_type,
|
3435
|
+
area: area / floors_map.size,
|
3436
|
+
insulation_assembly_r_value: assembly_r,
|
3437
|
+
floor_or_ceiling: HPXML::FloorOrCeilingFloor)
|
3438
|
+
end
|
3439
|
+
hpxml.floors << ceiling
|
3440
|
+
hpxml.floors[-1].id = "Floor#{hpxml.floors.size}"
|
3424
3441
|
elsif ['base-enclosure-walltypes.xml'].include? hpxml_file
|
3425
3442
|
hpxml.rim_joists.reverse_each do |rim_joist|
|
3426
3443
|
rim_joist.delete
|
@@ -3435,7 +3452,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3435
3452
|
[HPXML::SidingTypeSyntheticStucco, HPXML::ColorMediumDark],
|
3436
3453
|
[HPXML::SidingTypeVinyl, HPXML::ColorLight],
|
3437
3454
|
[HPXML::SidingTypeNone, HPXML::ColorMedium]]
|
3438
|
-
siding_types.
|
3455
|
+
siding_types.each do |siding_type|
|
3439
3456
|
hpxml.rim_joists.add(id: "RimJoist#{hpxml.rim_joists.size + 1}",
|
3440
3457
|
exterior_adjacent_to: HPXML::LocationOutside,
|
3441
3458
|
interior_adjacent_to: HPXML::LocationBasementConditioned,
|
@@ -3622,19 +3639,19 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3622
3639
|
hpxml.foundation_walls << hpxml.foundation_walls[-1].dup
|
3623
3640
|
hpxml.foundation_walls[-1].id += '_tiny'
|
3624
3641
|
hpxml.foundation_walls[-1].area = 0.05
|
3625
|
-
for n in 1..hpxml.
|
3626
|
-
hpxml.
|
3642
|
+
for n in 1..hpxml.floors.size
|
3643
|
+
hpxml.floors[n - 1].area /= 9.0
|
3627
3644
|
for i in 2..9
|
3628
|
-
hpxml.
|
3629
|
-
hpxml.
|
3645
|
+
hpxml.floors << hpxml.floors[n - 1].dup
|
3646
|
+
hpxml.floors[-1].id += "_#{i}"
|
3630
3647
|
if hpxml_file == 'base-enclosure-split-surfaces2.xml'
|
3631
|
-
hpxml.
|
3648
|
+
hpxml.floors[-1].insulation_assembly_r_value += 0.01 * i
|
3632
3649
|
end
|
3633
3650
|
end
|
3634
3651
|
end
|
3635
|
-
hpxml.
|
3636
|
-
hpxml.
|
3637
|
-
hpxml.
|
3652
|
+
hpxml.floors << hpxml.floors[-1].dup
|
3653
|
+
hpxml.floors[-1].id += '_tiny'
|
3654
|
+
hpxml.floors[-1].area = 0.05
|
3638
3655
|
for n in 1..hpxml.slabs.size
|
3639
3656
|
hpxml.slabs[n - 1].area /= 9.0
|
3640
3657
|
hpxml.slabs[n - 1].exposed_perimeter /= 9.0
|
@@ -3650,7 +3667,6 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3650
3667
|
hpxml.slabs << hpxml.slabs[-1].dup
|
3651
3668
|
hpxml.slabs[-1].id += '_tiny'
|
3652
3669
|
hpxml.slabs[-1].area = 0.05
|
3653
|
-
area_adjustments = []
|
3654
3670
|
for n in 1..hpxml.windows.size
|
3655
3671
|
hpxml.windows[n - 1].area /= 9.0
|
3656
3672
|
hpxml.windows[n - 1].fraction_operable = 0.0
|
@@ -3687,7 +3703,6 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3687
3703
|
hpxml.skylights << hpxml.skylights[-1].dup
|
3688
3704
|
hpxml.skylights[-1].id += '_tiny'
|
3689
3705
|
hpxml.skylights[-1].area = 0.05
|
3690
|
-
area_adjustments = []
|
3691
3706
|
for n in 1..hpxml.doors.size
|
3692
3707
|
hpxml.doors[n - 1].area /= 9.0
|
3693
3708
|
for i in 2..9
|
@@ -3835,11 +3850,13 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3835
3850
|
duct_leakage_units: HPXML::UnitsCFM25,
|
3836
3851
|
duct_leakage_value: 10,
|
3837
3852
|
duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
|
3838
|
-
hpxml.hvac_distributions[-1].ducts.add(
|
3853
|
+
hpxml.hvac_distributions[-1].ducts.add(id: "Ducts#{hpxml.hvac_distributions[-1].ducts.size + 1}",
|
3854
|
+
duct_type: HPXML::DuctTypeSupply,
|
3839
3855
|
duct_insulation_r_value: 0,
|
3840
3856
|
duct_location: HPXML::LocationOtherMultifamilyBufferSpace,
|
3841
3857
|
duct_surface_area: 50)
|
3842
|
-
hpxml.hvac_distributions[-1].ducts.add(
|
3858
|
+
hpxml.hvac_distributions[-1].ducts.add(id: "Ducts#{hpxml.hvac_distributions[-1].ducts.size + 1}",
|
3859
|
+
duct_type: HPXML::DuctTypeReturn,
|
3843
3860
|
duct_insulation_r_value: 0,
|
3844
3861
|
duct_location: HPXML::LocationOtherMultifamilyBufferSpace,
|
3845
3862
|
duct_surface_area: 20)
|
@@ -3939,11 +3956,6 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3939
3956
|
hpxml.heating_systems[i].fraction_heat_load_served = 0.35
|
3940
3957
|
end
|
3941
3958
|
end
|
3942
|
-
elsif ['base-misc-defaults.xml'].include? hpxml_file
|
3943
|
-
hpxml.heating_systems[0].year_installed = 2009
|
3944
|
-
hpxml.heating_systems[0].heating_efficiency_afue = nil
|
3945
|
-
hpxml.cooling_systems[0].year_installed = 2009
|
3946
|
-
hpxml.cooling_systems[0].cooling_efficiency_seer = nil
|
3947
3959
|
elsif ['base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml'].include? hpxml_file
|
3948
3960
|
hpxml.heat_pumps[0].backup_heating_efficiency_afue = hpxml.heat_pumps[0].backup_heating_efficiency_percent
|
3949
3961
|
hpxml.heat_pumps[0].backup_heating_efficiency_percent = nil
|
@@ -3951,7 +3963,9 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3951
3963
|
'base-enclosure-2stories-garage.xml',
|
3952
3964
|
'base-hvac-ducts-area-fractions.xml'].include? hpxml_file
|
3953
3965
|
hpxml.hvac_distributions[0].ducts << hpxml.hvac_distributions[0].ducts[0].dup
|
3966
|
+
hpxml.hvac_distributions[0].ducts[-1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size}"
|
3954
3967
|
hpxml.hvac_distributions[0].ducts << hpxml.hvac_distributions[0].ducts[1].dup
|
3968
|
+
hpxml.hvac_distributions[0].ducts[-1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size}"
|
3955
3969
|
hpxml.hvac_distributions[0].ducts[2].duct_location = HPXML::LocationExteriorWall
|
3956
3970
|
hpxml.hvac_distributions[0].ducts[2].duct_surface_area = 37.5
|
3957
3971
|
hpxml.hvac_distributions[0].ducts[3].duct_location = HPXML::LocationLivingSpace
|
@@ -3975,42 +3989,67 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
3975
3989
|
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
3976
3990
|
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
3977
3991
|
air_type: HPXML::AirTypeRegularVelocity)
|
3978
|
-
hpxml.hvac_distributions[
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
hpxml.hvac_distributions[
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
3986
|
-
hpxml.hvac_distributions[0].ducts.add(
|
3992
|
+
hpxml.hvac_distributions[0].duct_leakage_measurements.add(duct_type: HPXML::DuctTypeSupply,
|
3993
|
+
duct_leakage_units: HPXML::UnitsCFM25,
|
3994
|
+
duct_leakage_value: 75,
|
3995
|
+
duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
|
3996
|
+
hpxml.hvac_distributions[0].duct_leakage_measurements.add(duct_type: HPXML::DuctTypeReturn,
|
3997
|
+
duct_leakage_units: HPXML::UnitsCFM25,
|
3998
|
+
duct_leakage_value: 25,
|
3999
|
+
duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
|
4000
|
+
hpxml.hvac_distributions[0].ducts.add(id: "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}",
|
4001
|
+
duct_type: HPXML::DuctTypeSupply,
|
3987
4002
|
duct_insulation_r_value: 8,
|
3988
4003
|
duct_location: HPXML::LocationAtticUnvented,
|
3989
4004
|
duct_surface_area: 75)
|
3990
|
-
hpxml.hvac_distributions[0].ducts.add(
|
4005
|
+
hpxml.hvac_distributions[0].ducts.add(id: "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}",
|
4006
|
+
duct_type: HPXML::DuctTypeSupply,
|
3991
4007
|
duct_insulation_r_value: 8,
|
3992
4008
|
duct_location: HPXML::LocationOutside,
|
3993
4009
|
duct_surface_area: 75)
|
3994
|
-
hpxml.hvac_distributions[0].ducts.add(
|
4010
|
+
hpxml.hvac_distributions[0].ducts.add(id: "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}",
|
4011
|
+
duct_type: HPXML::DuctTypeReturn,
|
3995
4012
|
duct_insulation_r_value: 4,
|
3996
4013
|
duct_location: HPXML::LocationAtticUnvented,
|
3997
4014
|
duct_surface_area: 25)
|
3998
|
-
hpxml.hvac_distributions[0].ducts.add(
|
4015
|
+
hpxml.hvac_distributions[0].ducts.add(id: "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}",
|
4016
|
+
duct_type: HPXML::DuctTypeReturn,
|
3999
4017
|
duct_insulation_r_value: 4,
|
4000
4018
|
duct_location: HPXML::LocationOutside,
|
4001
4019
|
duct_surface_area: 25)
|
4002
|
-
hpxml.hvac_distributions
|
4003
|
-
|
4020
|
+
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
4021
|
+
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
4022
|
+
air_type: HPXML::AirTypeRegularVelocity)
|
4023
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[0].dup
|
4024
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[1].dup
|
4025
|
+
for i in 0..3
|
4026
|
+
hpxml.hvac_distributions[-1].ducts << hpxml.hvac_distributions[0].ducts[i].dup
|
4027
|
+
hpxml.hvac_distributions[-1].ducts[-1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size + i + 1}"
|
4028
|
+
end
|
4004
4029
|
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
4005
4030
|
distribution_system_type: HPXML::HVACDistributionTypeHydronic,
|
4006
4031
|
hydronic_type: HPXML::HydronicTypeBaseboard)
|
4007
4032
|
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
4008
4033
|
distribution_system_type: HPXML::HVACDistributionTypeHydronic,
|
4009
4034
|
hydronic_type: HPXML::HydronicTypeBaseboard)
|
4010
|
-
hpxml.hvac_distributions
|
4011
|
-
|
4012
|
-
|
4013
|
-
hpxml.hvac_distributions[-1].
|
4035
|
+
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
4036
|
+
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
4037
|
+
air_type: HPXML::AirTypeRegularVelocity)
|
4038
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[0].dup
|
4039
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[1].dup
|
4040
|
+
for i in 0..3
|
4041
|
+
hpxml.hvac_distributions[-1].ducts << hpxml.hvac_distributions[0].ducts[i].dup
|
4042
|
+
hpxml.hvac_distributions[-1].ducts[-1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size * 2 + i + 1}"
|
4043
|
+
end
|
4044
|
+
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
4045
|
+
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
4046
|
+
air_type: HPXML::AirTypeRegularVelocity)
|
4047
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[0].dup
|
4048
|
+
hpxml.hvac_distributions[-1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[1].dup
|
4049
|
+
for i in 0..3
|
4050
|
+
hpxml.hvac_distributions[-1].ducts << hpxml.hvac_distributions[0].ducts[i].dup
|
4051
|
+
hpxml.hvac_distributions[-1].ducts[-1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size * 3 + i + 1}"
|
4052
|
+
end
|
4014
4053
|
hpxml.heating_systems.reverse_each do |heating_system|
|
4015
4054
|
heating_system.delete
|
4016
4055
|
end
|
@@ -4133,8 +4172,15 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4133
4172
|
primary_heating_system: true)
|
4134
4173
|
elsif ['base-mechvent-multiple.xml',
|
4135
4174
|
'base-bldgtype-multifamily-shared-mechvent-multiple.xml'].include? hpxml_file
|
4136
|
-
hpxml.hvac_distributions
|
4137
|
-
|
4175
|
+
hpxml.hvac_distributions.add(id: "HVACDistribution#{hpxml.hvac_distributions.size + 1}",
|
4176
|
+
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
4177
|
+
air_type: HPXML::AirTypeRegularVelocity)
|
4178
|
+
hpxml.hvac_distributions[1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[0].dup
|
4179
|
+
hpxml.hvac_distributions[1].duct_leakage_measurements << hpxml.hvac_distributions[0].duct_leakage_measurements[1].dup
|
4180
|
+
hpxml.hvac_distributions[1].ducts << hpxml.hvac_distributions[0].ducts[0].dup
|
4181
|
+
hpxml.hvac_distributions[1].ducts << hpxml.hvac_distributions[0].ducts[1].dup
|
4182
|
+
hpxml.hvac_distributions[1].ducts[0].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}"
|
4183
|
+
hpxml.hvac_distributions[1].ducts[1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size + 2}"
|
4138
4184
|
hpxml.heating_systems[0].heating_capacity /= 2.0
|
4139
4185
|
hpxml.heating_systems[0].fraction_heat_load_served /= 2.0
|
4140
4186
|
hpxml.heating_systems[0].primary_system = false
|
@@ -4151,11 +4197,13 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4151
4197
|
hpxml.cooling_systems[1].primary_system = true
|
4152
4198
|
elsif ['base-bldgtype-multifamily-adjacent-to-multiple.xml'].include? hpxml_file
|
4153
4199
|
hpxml.hvac_distributions[0].ducts[1].duct_location = HPXML::LocationOtherHousingUnit
|
4154
|
-
hpxml.hvac_distributions[0].ducts.add(
|
4200
|
+
hpxml.hvac_distributions[0].ducts.add(id: "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}",
|
4201
|
+
duct_type: HPXML::DuctTypeSupply,
|
4155
4202
|
duct_insulation_r_value: 4,
|
4156
4203
|
duct_location: HPXML::LocationRoofDeck,
|
4157
4204
|
duct_surface_area: 150)
|
4158
|
-
hpxml.hvac_distributions[0].ducts.add(
|
4205
|
+
hpxml.hvac_distributions[0].ducts.add(id: "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}",
|
4206
|
+
duct_type: HPXML::DuctTypeReturn,
|
4159
4207
|
duct_insulation_r_value: 0,
|
4160
4208
|
duct_location: HPXML::LocationRoofDeck,
|
4161
4209
|
duct_surface_area: 50)
|
@@ -4179,6 +4227,12 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4179
4227
|
hpxml.hvac_distributions[0].duct_leakage_measurements << hpxml.hvac_distributions[1].duct_leakage_measurements[1].dup
|
4180
4228
|
hpxml.hvac_distributions[0].ducts << hpxml.hvac_distributions[1].ducts[0].dup
|
4181
4229
|
hpxml.hvac_distributions[0].ducts << hpxml.hvac_distributions[1].ducts[1].dup
|
4230
|
+
hpxml.hvac_distributions[1].ducts[0].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size + 1}"
|
4231
|
+
hpxml.hvac_distributions[1].ducts[1].id = "Ducts#{hpxml.hvac_distributions[0].ducts.size + 2}"
|
4232
|
+
end
|
4233
|
+
if ['base-hvac-ducts-area-multipliers.xml'].include? hpxml_file
|
4234
|
+
hpxml.hvac_distributions[0].ducts[0].duct_surface_area_multiplier = 0.5
|
4235
|
+
hpxml.hvac_distributions[0].ducts[1].duct_surface_area_multiplier = 1.5
|
4182
4236
|
end
|
4183
4237
|
|
4184
4238
|
# ------------------ #
|
@@ -4197,7 +4251,8 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4197
4251
|
hpxml.hot_water_distributions[0].shared_recirculation_number_of_units_served = 6
|
4198
4252
|
hpxml.hot_water_distributions[0].shared_recirculation_pump_power = 220
|
4199
4253
|
hpxml.hot_water_distributions[0].shared_recirculation_control_type = HPXML::DHWRecirControlTypeTimer
|
4200
|
-
elsif ['base-bldgtype-multifamily-shared-laundry-room.xml'
|
4254
|
+
elsif ['base-bldgtype-multifamily-shared-laundry-room.xml',
|
4255
|
+
'base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml'].include? hpxml_file
|
4201
4256
|
hpxml.water_heating_systems.reverse_each do |water_heating_system|
|
4202
4257
|
water_heating_system.delete
|
4203
4258
|
end
|
@@ -4213,15 +4268,18 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4213
4268
|
energy_factor: 0.59,
|
4214
4269
|
recovery_efficiency: 0.76,
|
4215
4270
|
temperature: 125.0)
|
4271
|
+
if hpxml_file == 'base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml'
|
4272
|
+
hpxml.water_heating_systems[0].fraction_dhw_load_served /= 2.0
|
4273
|
+
hpxml.water_heating_systems[0].tank_volume /= 2.0
|
4274
|
+
hpxml.water_heating_systems[0].number_of_units_served /= 2.0
|
4275
|
+
hpxml.water_heating_systems << hpxml.water_heating_systems[0].dup
|
4276
|
+
hpxml.water_heating_systems[1].id = "WaterHeatingSystem#{hpxml.water_heating_systems.size}"
|
4277
|
+
end
|
4216
4278
|
elsif ['base-dhw-tank-gas-uef-fhr.xml'].include? hpxml_file
|
4217
4279
|
hpxml.water_heating_systems[0].first_hour_rating = 56.0
|
4218
4280
|
hpxml.water_heating_systems[0].usage_bin = nil
|
4219
4281
|
elsif ['base-dhw-tankless-electric-outside.xml'].include? hpxml_file
|
4220
4282
|
hpxml.water_heating_systems[0].performance_adjustment = 0.92
|
4221
|
-
elsif ['base-misc-defaults.xml'].include? hpxml_file
|
4222
|
-
hpxml.water_heating_systems[0].year_installed = 2009
|
4223
|
-
hpxml.water_heating_systems[0].heating_capacity = nil
|
4224
|
-
hpxml.water_heating_systems[0].energy_factor = nil
|
4225
4283
|
elsif ['base-dhw-multiple.xml'].include? hpxml_file
|
4226
4284
|
hpxml.water_heating_systems[0].fraction_dhw_load_served = 0.2
|
4227
4285
|
hpxml.water_heating_systems.add(id: "WaterHeatingSystem#{hpxml.water_heating_systems.size + 1}",
|
@@ -4359,6 +4417,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4359
4417
|
hours_in_operation: 8,
|
4360
4418
|
fan_power: 150,
|
4361
4419
|
used_for_whole_building_ventilation: true,
|
4420
|
+
cfis_addtl_runtime_operating_mode: HPXML::CFISModeAirHandler,
|
4362
4421
|
distribution_system_idref: 'HVACDistribution1')
|
4363
4422
|
elsif ['base-mechvent-multiple.xml'].include? hpxml_file
|
4364
4423
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
@@ -4367,16 +4426,15 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4367
4426
|
used_for_seasonal_cooling_load_reduction: true)
|
4368
4427
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4369
4428
|
fan_type: HPXML::MechVentTypeSupply,
|
4370
|
-
tested_flow_rate: 27.5,
|
4371
|
-
hours_in_operation: 24,
|
4372
|
-
fan_power: 7.5,
|
4373
|
-
used_for_whole_building_ventilation: true)
|
4374
|
-
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4375
|
-
fan_type: HPXML::MechVentTypeExhaust,
|
4376
4429
|
tested_flow_rate: 12.5,
|
4377
4430
|
hours_in_operation: 14,
|
4378
4431
|
fan_power: 2.5,
|
4379
4432
|
used_for_whole_building_ventilation: true)
|
4433
|
+
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4434
|
+
fan_type: HPXML::MechVentTypeExhaust,
|
4435
|
+
tested_flow_rate: 30.0,
|
4436
|
+
fan_power: 7.5,
|
4437
|
+
used_for_whole_building_ventilation: true)
|
4380
4438
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4381
4439
|
fan_type: HPXML::MechVentTypeBalanced,
|
4382
4440
|
tested_flow_rate: 27.5,
|
@@ -4413,6 +4471,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4413
4471
|
hours_in_operation: 8,
|
4414
4472
|
fan_power: 37.5,
|
4415
4473
|
used_for_whole_building_ventilation: true,
|
4474
|
+
cfis_addtl_runtime_operating_mode: HPXML::CFISModeAirHandler,
|
4416
4475
|
distribution_system_idref: 'HVACDistribution1')
|
4417
4476
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4418
4477
|
fan_type: HPXML::MechVentTypeCFIS,
|
@@ -4420,6 +4479,8 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4420
4479
|
hours_in_operation: 8,
|
4421
4480
|
fan_power: 37.5,
|
4422
4481
|
used_for_whole_building_ventilation: true,
|
4482
|
+
cfis_addtl_runtime_operating_mode: HPXML::CFISModeSupplementalFan,
|
4483
|
+
cfis_supplemental_fan_idref: hpxml.ventilation_fans.select { |f| f.fan_type == HPXML::MechVentTypeExhaust }[0].id,
|
4423
4484
|
distribution_system_idref: 'HVACDistribution2')
|
4424
4485
|
# Test ventilation system w/ zero airflow and hours
|
4425
4486
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
@@ -4438,6 +4499,19 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4438
4499
|
used_for_whole_building_ventilation: true)
|
4439
4500
|
elsif ['base-mechvent-cfis-airflow-fraction-zero.xml'].include? hpxml_file
|
4440
4501
|
hpxml.ventilation_fans[0].cfis_vent_mode_airflow_fraction = 0.0
|
4502
|
+
elsif ['base-mechvent-cfis-supplemental-fan-exhaust.xml',
|
4503
|
+
'base-mechvent-cfis-supplemental-fan-supply.xml'].include? hpxml_file
|
4504
|
+
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
4505
|
+
tested_flow_rate: 120,
|
4506
|
+
fan_power: 30,
|
4507
|
+
used_for_whole_building_ventilation: true)
|
4508
|
+
if hpxml_file == 'base-mechvent-cfis-supplemental-fan-exhaust.xml'
|
4509
|
+
hpxml.ventilation_fans[-1].fan_type = HPXML::MechVentTypeExhaust
|
4510
|
+
else
|
4511
|
+
hpxml.ventilation_fans[-1].fan_type = HPXML::MechVentTypeSupply
|
4512
|
+
end
|
4513
|
+
hpxml.ventilation_fans[0].cfis_addtl_runtime_operating_mode = HPXML::CFISModeSupplementalFan
|
4514
|
+
hpxml.ventilation_fans[0].cfis_supplemental_fan_idref = hpxml.ventilation_fans[1].id
|
4441
4515
|
end
|
4442
4516
|
|
4443
4517
|
# ---------------- #
|
@@ -4447,7 +4521,12 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4447
4521
|
# Logic that can only be applied based on the file name
|
4448
4522
|
if ['base-misc-defaults.xml'].include? hpxml_file
|
4449
4523
|
hpxml.pv_systems[0].year_modules_manufactured = 2015
|
4450
|
-
elsif ['base-misc-generators.xml'
|
4524
|
+
elsif ['base-misc-generators.xml',
|
4525
|
+
'base-misc-generators-battery.xml',
|
4526
|
+
'base-misc-generators-battery-scheduled.xml',
|
4527
|
+
'base-pv-generators.xml',
|
4528
|
+
'base-pv-generators-battery.xml',
|
4529
|
+
'base-pv-generators-battery-scheduled.xml'].include? hpxml_file
|
4451
4530
|
hpxml.generators.add(id: "Generator#{hpxml.generators.size + 1}",
|
4452
4531
|
fuel_type: HPXML::FuelTypeNaturalGas,
|
4453
4532
|
annual_consumption_kbtu: 8500,
|
@@ -4538,15 +4617,21 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4538
4617
|
hpxml.hot_tubs[0].heater_weekend_fractions = '0.024, 0.029, 0.024, 0.029, 0.047, 0.067, 0.057, 0.024, 0.024, 0.019, 0.015, 0.014, 0.014, 0.014, 0.024, 0.058, 0.126, 0.122, 0.068, 0.061, 0.051, 0.043, 0.024, 0.024'
|
4539
4618
|
hpxml.hot_tubs[0].heater_monthly_multipliers = '0.921, 0.928, 0.921, 0.915, 0.921, 1.160, 1.158, 1.158, 1.160, 0.921, 0.915, 0.921'
|
4540
4619
|
end
|
4541
|
-
if ['base-bldgtype-multifamily-shared-laundry-room.xml'
|
4620
|
+
if ['base-bldgtype-multifamily-shared-laundry-room.xml',
|
4621
|
+
'base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml'].include? hpxml_file
|
4542
4622
|
hpxml.clothes_washers[0].is_shared_appliance = true
|
4543
4623
|
hpxml.clothes_washers[0].location = HPXML::LocationOtherHeatedSpace
|
4544
|
-
hpxml.clothes_washers[0].water_heating_system_idref = hpxml.water_heating_systems[0].id
|
4545
4624
|
hpxml.clothes_dryers[0].location = HPXML::LocationOtherHeatedSpace
|
4546
4625
|
hpxml.clothes_dryers[0].is_shared_appliance = true
|
4547
4626
|
hpxml.dishwashers[0].is_shared_appliance = true
|
4548
4627
|
hpxml.dishwashers[0].location = HPXML::LocationOtherHeatedSpace
|
4549
|
-
|
4628
|
+
if hpxml_file == 'base-bldgtype-multifamily-shared-laundry-room.xml'
|
4629
|
+
hpxml.clothes_washers[0].water_heating_system_idref = hpxml.water_heating_systems[0].id
|
4630
|
+
hpxml.dishwashers[0].water_heating_system_idref = hpxml.water_heating_systems[0].id
|
4631
|
+
elsif hpxml_file == 'base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml'
|
4632
|
+
hpxml.clothes_washers[0].hot_water_distribution_idref = hpxml.hot_water_distributions[0].id
|
4633
|
+
hpxml.dishwashers[0].hot_water_distribution_idref = hpxml.hot_water_distributions[0].id
|
4634
|
+
end
|
4550
4635
|
elsif ['base-misc-defaults.xml'].include? hpxml_file
|
4551
4636
|
hpxml.refrigerators[0].primary_indicator = nil
|
4552
4637
|
end
|
@@ -4631,7 +4716,7 @@ def apply_hpxml_modification(hpxml_file, hpxml)
|
|
4631
4716
|
hpxml.rim_joists +
|
4632
4717
|
hpxml.walls +
|
4633
4718
|
hpxml.foundation_walls +
|
4634
|
-
hpxml.
|
4719
|
+
hpxml.floors +
|
4635
4720
|
hpxml.slabs +
|
4636
4721
|
hpxml.windows +
|
4637
4722
|
hpxml.skylights +
|
@@ -4649,7 +4734,7 @@ def renumber_hpxml_ids(hpxml)
|
|
4649
4734
|
{ hpxml.walls => 'Wall',
|
4650
4735
|
hpxml.foundation_walls => 'FoundationWall',
|
4651
4736
|
hpxml.rim_joists => 'RimJoist',
|
4652
|
-
hpxml.
|
4737
|
+
hpxml.floors => 'Floor',
|
4653
4738
|
hpxml.roofs => 'Roof',
|
4654
4739
|
hpxml.slabs => 'Slab',
|
4655
4740
|
hpxml.windows => 'Window',
|
@@ -4666,8 +4751,8 @@ def renumber_hpxml_ids(hpxml)
|
|
4666
4751
|
if attic_or_fnd.respond_to?(:attached_to_rim_joist_idrefs) && !attic_or_fnd.attached_to_rim_joist_idrefs.nil? && !attic_or_fnd.attached_to_rim_joist_idrefs.delete(surf.id).nil?
|
4667
4752
|
attic_or_fnd.attached_to_rim_joist_idrefs << "#{surf_name}#{i + 1}"
|
4668
4753
|
end
|
4669
|
-
if attic_or_fnd.respond_to?(:
|
4670
|
-
attic_or_fnd.
|
4754
|
+
if attic_or_fnd.respond_to?(:attached_to_floor_idrefs) && !attic_or_fnd.attached_to_floor_idrefs.nil? && !attic_or_fnd.attached_to_floor_idrefs.delete(surf.id).nil?
|
4755
|
+
attic_or_fnd.attached_to_floor_idrefs << "#{surf_name}#{i + 1}"
|
4671
4756
|
end
|
4672
4757
|
if attic_or_fnd.respond_to?(:attached_to_slab_idrefs) && !attic_or_fnd.attached_to_slab_idrefs.nil? && !attic_or_fnd.attached_to_slab_idrefs.delete(surf.id).nil?
|
4673
4758
|
attic_or_fnd.attached_to_slab_idrefs << "#{surf_name}#{i + 1}"
|
@@ -4700,291 +4785,37 @@ def renumber_hpxml_ids(hpxml)
|
|
4700
4785
|
end
|
4701
4786
|
end
|
4702
4787
|
|
4703
|
-
def
|
4788
|
+
def download_utility_rates
|
4704
4789
|
require_relative 'HPXMLtoOpenStudio/resources/util'
|
4790
|
+
require_relative 'ReportUtilityBills/resources/util'
|
4705
4791
|
|
4706
|
-
|
4707
|
-
|
4708
|
-
|
4709
|
-
UrlResolver.fetch('https://data.nrel.gov/system/files/128/tmy3s-cache-csv.zip', tmpfile)
|
4710
|
-
|
4711
|
-
puts 'Extracting weather files...'
|
4712
|
-
require 'zip'
|
4713
|
-
weather_dir = File.join(File.dirname(__FILE__), 'weather')
|
4714
|
-
Zip.on_exists_proc = true
|
4715
|
-
Zip::File.open(tmpfile.path.to_s) do |zip_file|
|
4716
|
-
zip_file.each do |f|
|
4717
|
-
zip_file.extract(f, File.join(weather_dir, f.name))
|
4718
|
-
end
|
4719
|
-
end
|
4720
|
-
|
4721
|
-
num_epws_actual = Dir[File.join(weather_dir, '*.epw')].count
|
4722
|
-
puts "#{num_epws_actual} weather files are available in the weather directory."
|
4723
|
-
puts 'Completed.'
|
4724
|
-
exit!
|
4725
|
-
end
|
4726
|
-
|
4727
|
-
def get_elements_from_sample_files(hpxml_docs)
|
4728
|
-
elements_being_used = []
|
4729
|
-
hpxml_docs.each do |xml, hpxml_doc|
|
4730
|
-
root = XMLHelper.get_element(hpxml_doc, '/HPXML')
|
4731
|
-
root.each_node do |node|
|
4732
|
-
next unless node.is_a?(Oga::XML::Element)
|
4733
|
-
|
4734
|
-
ancestors = []
|
4735
|
-
node.each_ancestor do |parent_node|
|
4736
|
-
ancestors << ['h:', parent_node.name].join()
|
4737
|
-
end
|
4738
|
-
parent_element_xpath = ancestors.reverse
|
4739
|
-
child_element_xpath = ['h:', node.name].join()
|
4740
|
-
element_xpath = [parent_element_xpath, child_element_xpath].join('/')
|
4741
|
-
|
4742
|
-
next if element_xpath.include? 'extension'
|
4743
|
-
|
4744
|
-
elements_being_used << element_xpath if not elements_being_used.include? element_xpath
|
4745
|
-
end
|
4746
|
-
end
|
4747
|
-
|
4748
|
-
return elements_being_used
|
4749
|
-
end
|
4750
|
-
|
4751
|
-
def create_schematron_hpxml_validator(hpxml_docs)
|
4752
|
-
puts 'Generating HPXMLvalidator.xml...'
|
4753
|
-
elements_in_sample_files = get_elements_from_sample_files(hpxml_docs)
|
4754
|
-
|
4755
|
-
hpxml_base_elements_xsd = File.read(File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema', 'HPXMLBaseElements.xsd'))
|
4756
|
-
hpxml_base_elements_xsd_doc = Oga.parse_xml(hpxml_base_elements_xsd)
|
4757
|
-
|
4758
|
-
# construct dictionary for enumerations and min/max values of HPXML data types
|
4759
|
-
hpxml_data_types_xsd = File.read(File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema', 'HPXMLDataTypes.xsd'))
|
4760
|
-
hpxml_data_types_xsd_doc = Oga.parse_xml(hpxml_data_types_xsd)
|
4761
|
-
hpxml_data_types_dict = {}
|
4762
|
-
hpxml_data_types_xsd_doc.xpath('//xs:simpleType | //xs:complexType').each do |simple_type_element|
|
4763
|
-
enums = []
|
4764
|
-
simple_type_element.xpath('xs:restriction/xs:enumeration').each do |enum|
|
4765
|
-
enums << enum.get('value')
|
4766
|
-
end
|
4767
|
-
minInclusive_element = simple_type_element.at_xpath('xs:restriction/xs:minInclusive')
|
4768
|
-
min_inclusive = minInclusive_element.get('value') if not minInclusive_element.nil?
|
4769
|
-
maxInclusive_element = simple_type_element.at_xpath('xs:restriction/xs:maxInclusive')
|
4770
|
-
max_inclusive = maxInclusive_element.get('value') if not maxInclusive_element.nil?
|
4771
|
-
minExclusive_element = simple_type_element.at_xpath('xs:restriction/xs:minExclusive')
|
4772
|
-
min_exclusive = minExclusive_element.get('value') if not minExclusive_element.nil?
|
4773
|
-
maxExclusive_element = simple_type_element.at_xpath('xs:restriction/xs:maxExclusive')
|
4774
|
-
max_exclusive = maxExclusive_element.get('value') if not maxExclusive_element.nil?
|
4775
|
-
|
4776
|
-
simple_type_element_name = simple_type_element.get('name')
|
4777
|
-
hpxml_data_types_dict[simple_type_element_name] = {}
|
4778
|
-
hpxml_data_types_dict[simple_type_element_name][:enums] = enums
|
4779
|
-
hpxml_data_types_dict[simple_type_element_name][:min_inclusive] = min_inclusive
|
4780
|
-
hpxml_data_types_dict[simple_type_element_name][:max_inclusive] = max_inclusive
|
4781
|
-
hpxml_data_types_dict[simple_type_element_name][:min_exclusive] = min_exclusive
|
4782
|
-
hpxml_data_types_dict[simple_type_element_name][:max_exclusive] = max_exclusive
|
4783
|
-
end
|
4784
|
-
|
4785
|
-
# construct HPXMLvalidator.xml
|
4786
|
-
hpxml_validator = XMLHelper.create_doc(version = '1.0', encoding = 'UTF-8')
|
4787
|
-
root = XMLHelper.add_element(hpxml_validator, 'sch:schema')
|
4788
|
-
XMLHelper.add_attribute(root, 'xmlns:sch', 'http://purl.oclc.org/dsdl/schematron')
|
4789
|
-
XMLHelper.add_element(root, 'sch:title', 'HPXML Schematron Validator: HPXML.xsd', :string)
|
4790
|
-
name_space = XMLHelper.add_element(root, 'sch:ns')
|
4791
|
-
XMLHelper.add_attribute(name_space, 'uri', 'http://hpxmlonline.com/2019/10')
|
4792
|
-
XMLHelper.add_attribute(name_space, 'prefix', 'h')
|
4793
|
-
pattern = XMLHelper.add_element(root, 'sch:pattern')
|
4794
|
-
|
4795
|
-
# construct complexType and group elements dictionary
|
4796
|
-
complex_type_or_group_dict = {}
|
4797
|
-
['//xs:complexType', '//xs:group', '//xs:element'].each do |param|
|
4798
|
-
hpxml_base_elements_xsd_doc.xpath(param).each do |param_type|
|
4799
|
-
next if param_type.name == 'element' && (not ['XMLTransactionHeaderInformation', 'ProjectStatus', 'SoftwareInfo'].include?(param_type.get('name')))
|
4800
|
-
next if param_type.get('name').nil?
|
4801
|
-
|
4802
|
-
param_type_name = param_type.get('name')
|
4803
|
-
complex_type_or_group_dict[param_type_name] = {}
|
4804
|
-
|
4805
|
-
elements = { 'child' => [], 'base' => [] }
|
4806
|
-
param_type.each_node do |element|
|
4807
|
-
elements['child'] << element
|
4808
|
-
next unless element.is_a? Oga::XML::Element
|
4809
|
-
|
4810
|
-
next unless element.name == 'extension'
|
4811
|
-
|
4812
|
-
base_element_name = element.get('base').to_s
|
4813
|
-
hpxml_base_elements_xsd_doc.xpath("#{param}[@name='#{base_element_name}']").each do |base_element|
|
4814
|
-
base_element.each_node do |element|
|
4815
|
-
elements['base'] << element
|
4816
|
-
end
|
4817
|
-
end
|
4818
|
-
end
|
4792
|
+
rates_dir = File.join(File.dirname(__FILE__), 'ReportUtilityBills/resources/detailed_rates')
|
4793
|
+
FileUtils.mkdir(rates_dir) if !File.exist?(rates_dir)
|
4794
|
+
filepath = File.join(rates_dir, 'usurdb.csv')
|
4819
4795
|
|
4820
|
-
|
4821
|
-
|
4822
|
-
|
4823
|
-
next unless (element.name == 'element' || element.name == 'group')
|
4824
|
-
next if element.name == 'element' && (element.get('name').nil? && element.get('ref').nil?)
|
4825
|
-
next if element.name == 'group' && element.get('ref').nil?
|
4796
|
+
if !File.exist?(filepath)
|
4797
|
+
require 'tempfile'
|
4798
|
+
tmpfile = Tempfile.new('rates')
|
4826
4799
|
|
4827
|
-
|
4828
|
-
element.each_ancestor do |node|
|
4829
|
-
next if node.get('name').nil?
|
4830
|
-
next if node.get('name') == param_type.get('name') # exclude complexType name from element xpath
|
4800
|
+
UrlResolver.fetch('https://openei.org/apps/USURDB/download/usurdb.csv.gz', tmpfile)
|
4831
4801
|
|
4832
|
-
|
4833
|
-
|
4834
|
-
|
4835
|
-
|
4836
|
-
|
4837
|
-
if element.name == 'element'
|
4838
|
-
child_element_name = element.get('name')
|
4839
|
-
child_element_name = element.get('ref') if child_element_name.nil? # Backup
|
4840
|
-
element_type = element.get('type')
|
4841
|
-
element_type = element.get('ref') if element_type.nil? # Backup
|
4842
|
-
elsif element.name == 'group'
|
4843
|
-
child_element_name = nil # exclude group name from the element's xpath
|
4844
|
-
element_type = element.get('ref')
|
4845
|
-
end
|
4846
|
-
element_xpath = parent_element_names.push(child_element_name)
|
4847
|
-
complex_type_or_group_dict[param_type_name][element_xpath] = element_type
|
4848
|
-
end
|
4802
|
+
puts 'Extracting utility rates...'
|
4803
|
+
require 'zlib'
|
4804
|
+
Zlib::GzipReader.open(tmpfile.path.to_s) do |input_stream|
|
4805
|
+
File.open(filepath, 'w') do |output_stream|
|
4806
|
+
IO.copy_stream(input_stream, output_stream)
|
4849
4807
|
end
|
4850
4808
|
end
|
4851
4809
|
end
|
4852
4810
|
|
4853
|
-
|
4854
|
-
top_level_elements_of_interest = elements_in_sample_files.map { |e| e.split('/')[1].gsub('h:', '') }.uniq
|
4855
|
-
top_level_elements_of_interest.each do |element|
|
4856
|
-
top_level_element = []
|
4857
|
-
top_level_element << element
|
4858
|
-
top_level_element_type = element
|
4859
|
-
get_element_full_xpaths(element_xpaths, complex_type_or_group_dict, top_level_element, top_level_element_type)
|
4860
|
-
end
|
4861
|
-
|
4862
|
-
# Add enumeration and min/max numeric values
|
4863
|
-
rules = {}
|
4864
|
-
element_xpaths.each do |element_xpath, element_type|
|
4865
|
-
next if element_type.nil?
|
4866
|
-
|
4867
|
-
# Skip element xpaths not being used in sample files
|
4868
|
-
element_xpath_with_prefix = element_xpath.compact.map { |e| "h:#{e}" }
|
4869
|
-
context_xpath = element_xpath_with_prefix.join('/').chomp('/')
|
4870
|
-
next unless elements_in_sample_files.any? { |item| item.include? context_xpath }
|
4871
|
-
|
4872
|
-
hpxml_data_type_name = [element_type, '_simple'].join() # FUTURE: This may need to be improved later since enumeration and minimum/maximum values cannot be guaranteed to always be placed within simpleType.
|
4873
|
-
hpxml_data_type = hpxml_data_types_dict[hpxml_data_type_name]
|
4874
|
-
hpxml_data_type = hpxml_data_types_dict[element_type] if hpxml_data_type.nil? # Backup
|
4875
|
-
if hpxml_data_type.nil?
|
4876
|
-
fail "Could not find data type name for '#{element_type}'."
|
4877
|
-
end
|
4878
|
-
|
4879
|
-
next if hpxml_data_type[:enums].empty? && hpxml_data_type[:min_inclusive].nil? && hpxml_data_type[:max_inclusive].nil? && hpxml_data_type[:min_exclusive].nil? && hpxml_data_type[:max_exclusive].nil?
|
4880
|
-
|
4881
|
-
element_name = context_xpath.split('/')[-1]
|
4882
|
-
context_xpath = context_xpath.split('/')[0..-2].join('/').chomp('/').prepend('/h:HPXML/')
|
4883
|
-
rule = rules[context_xpath]
|
4884
|
-
if rule.nil?
|
4885
|
-
# Need new rule
|
4886
|
-
rule = XMLHelper.add_element(pattern, 'sch:rule')
|
4887
|
-
XMLHelper.add_attribute(rule, 'context', context_xpath)
|
4888
|
-
rules[context_xpath] = rule
|
4889
|
-
end
|
4890
|
-
|
4891
|
-
if not hpxml_data_type[:enums].empty?
|
4892
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be \"#{hpxml_data_type[:enums].join('" or "')}\"", :string)
|
4893
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4894
|
-
XMLHelper.add_attribute(assertion, 'test', "#{element_name}[#{hpxml_data_type[:enums].map { |e| "text()=\"#{e}\"" }.join(' or ')}] or not(#{element_name})")
|
4895
|
-
else
|
4896
|
-
if hpxml_data_type[:min_inclusive]
|
4897
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be greater than or equal to #{hpxml_data_type[:min_inclusive]}", :string)
|
4898
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4899
|
-
XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) >= #{hpxml_data_type[:min_inclusive]} or not(#{element_name})")
|
4900
|
-
end
|
4901
|
-
if hpxml_data_type[:max_inclusive]
|
4902
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be less than or equal to #{hpxml_data_type[:max_inclusive]}", :string)
|
4903
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4904
|
-
XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) <= #{hpxml_data_type[:max_inclusive]} or not(#{element_name})")
|
4905
|
-
end
|
4906
|
-
if hpxml_data_type[:min_exclusive]
|
4907
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be greater than #{hpxml_data_type[:min_exclusive]}", :string)
|
4908
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4909
|
-
XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) > #{hpxml_data_type[:min_exclusive]} or not(#{element_name})")
|
4910
|
-
end
|
4911
|
-
if hpxml_data_type[:max_exclusive]
|
4912
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name.gsub('h:', '')} to be less than #{hpxml_data_type[:max_exclusive]}", :string)
|
4913
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4914
|
-
XMLHelper.add_attribute(assertion, 'test', "number(#{element_name}) < #{hpxml_data_type[:max_exclusive]} or not(#{element_name})")
|
4915
|
-
end
|
4916
|
-
end
|
4917
|
-
end
|
4811
|
+
num_rates_actual = process_usurdb(filepath)
|
4918
4812
|
|
4919
|
-
#
|
4920
|
-
|
4921
|
-
|
4922
|
-
'BuildingID']
|
4923
|
-
idref_names = ['AttachedToRoof',
|
4924
|
-
'AttachedToFrameFloor',
|
4925
|
-
'AttachedToSlab',
|
4926
|
-
'AttachedToFoundationWall',
|
4927
|
-
'AttachedToWall',
|
4928
|
-
'AttachedToRimJoist',
|
4929
|
-
'DistributionSystem',
|
4930
|
-
'AttachedToHVACDistributionSystem',
|
4931
|
-
'RelatedHVACSystem',
|
4932
|
-
'ConnectedTo']
|
4933
|
-
elements_in_sample_files.each do |element_xpath|
|
4934
|
-
element_name = element_xpath.split('/')[-1].gsub('h:', '')
|
4935
|
-
context_xpath = "/#{element_xpath.split('/')[0..-2].join('/')}"
|
4936
|
-
if id_names.include? element_name
|
4937
|
-
rule = rules[context_xpath]
|
4938
|
-
if rule.nil?
|
4939
|
-
# Need new rule
|
4940
|
-
rule = XMLHelper.add_element(pattern, 'sch:rule')
|
4941
|
-
XMLHelper.add_attribute(rule, 'context', context_xpath)
|
4942
|
-
rules[context_xpath] = rule
|
4943
|
-
end
|
4944
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected #{element_name} with id attribute", :string)
|
4945
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4946
|
-
XMLHelper.add_attribute(assertion, 'test', "count(h:#{element_name}[@id]) = 1")
|
4947
|
-
elsif idref_names.include?(element_name)
|
4948
|
-
rule = rules[context_xpath]
|
4949
|
-
if rule.nil?
|
4950
|
-
# Need new rule
|
4951
|
-
rule = XMLHelper.add_element(pattern, 'sch:rule')
|
4952
|
-
XMLHelper.add_attribute(rule, 'context', context_xpath)
|
4953
|
-
rules[context_xpath] = rule
|
4954
|
-
end
|
4955
|
-
assertion = XMLHelper.add_element(rule, 'sch:assert', "Expected idref attribute for #{element_name}", :string)
|
4956
|
-
XMLHelper.add_attribute(assertion, 'role', 'ERROR')
|
4957
|
-
XMLHelper.add_attribute(assertion, 'test', "count(h:#{element_name}[@idref]) = count(h:#{element_name})")
|
4958
|
-
end
|
4959
|
-
end
|
4960
|
-
|
4961
|
-
XMLHelper.write_file(hpxml_validator, File.join(File.dirname(__FILE__), 'HPXMLtoOpenStudio', 'resources', 'hpxml_schematron', 'HPXMLvalidator.xml'))
|
4962
|
-
end
|
4963
|
-
|
4964
|
-
def get_element_full_xpaths(element_xpaths, complex_type_or_group_dict, element_xpath, element_type)
|
4965
|
-
if not complex_type_or_group_dict.keys.include? element_type
|
4966
|
-
element_xpaths[element_xpath] = element_type
|
4967
|
-
else
|
4968
|
-
complex_type_or_group = deep_copy_object(complex_type_or_group_dict[element_type])
|
4969
|
-
complex_type_or_group.each do |k, v|
|
4970
|
-
child_element_xpath = k.unshift(element_xpath).flatten!
|
4971
|
-
child_element_type = v
|
4972
|
-
|
4973
|
-
if not complex_type_or_group_dict.keys.include? child_element_type
|
4974
|
-
element_xpaths[child_element_xpath] = child_element_type
|
4975
|
-
next
|
4976
|
-
end
|
4977
|
-
|
4978
|
-
get_element_full_xpaths(element_xpaths, complex_type_or_group_dict, child_element_xpath, child_element_type)
|
4979
|
-
end
|
4980
|
-
end
|
4981
|
-
end
|
4982
|
-
|
4983
|
-
def deep_copy_object(obj)
|
4984
|
-
return Marshal.load(Marshal.dump(obj))
|
4813
|
+
puts "#{num_rates_actual} rate files are available in openei_rates.zip."
|
4814
|
+
puts 'Completed.'
|
4815
|
+
exit!
|
4985
4816
|
end
|
4986
4817
|
|
4987
|
-
command_list = [:update_measures, :update_hpxmls, :cache_weather, :create_release_zips, :
|
4818
|
+
command_list = [:update_measures, :update_hpxmls, :cache_weather, :create_release_zips, :download_utility_rates]
|
4988
4819
|
|
4989
4820
|
def display_usage(command_list)
|
4990
4821
|
puts "Usage: openstudio #{File.basename(__FILE__)} [COMMAND]\nCommands:\n " + command_list.join("\n ")
|
@@ -5012,7 +4843,17 @@ if ARGV[0].to_sym == :update_measures
|
|
5012
4843
|
# Apply rubocop
|
5013
4844
|
cops = ['Layout',
|
5014
4845
|
'Lint/DeprecatedClassMethods',
|
4846
|
+
'Lint/DuplicateElsifCondition',
|
4847
|
+
'Lint/DuplicateHashKey',
|
4848
|
+
'Lint/DuplicateMethods',
|
4849
|
+
'Lint/InterpolationCheck',
|
4850
|
+
'Lint/LiteralAsCondition',
|
5015
4851
|
'Lint/RedundantStringCoercion',
|
4852
|
+
'Lint/SelfAssignment',
|
4853
|
+
'Lint/UnderscorePrefixedVariableName',
|
4854
|
+
'Lint/UnusedBlockArgument',
|
4855
|
+
'Lint/UnusedMethodArgument',
|
4856
|
+
'Lint/UselessAssignment',
|
5016
4857
|
'Style/AndOr',
|
5017
4858
|
'Style/FrozenStringLiteralComment',
|
5018
4859
|
'Style/HashSyntax',
|
@@ -5034,9 +4875,8 @@ if ARGV[0].to_sym == :update_measures
|
|
5034
4875
|
# Update measures XMLs
|
5035
4876
|
puts 'Updating measure.xmls...'
|
5036
4877
|
require 'oga'
|
5037
|
-
require_relative 'HPXMLtoOpenStudio/resources/xmlhelper'
|
5038
4878
|
Dir['**/measure.xml'].each do |measure_xml|
|
5039
|
-
for n_attempt in 1..5 # For some reason CLI randomly generates errors, so try multiple times
|
4879
|
+
for n_attempt in 1..5 # For some reason CLI randomly generates errors, so try multiple times
|
5040
4880
|
measure_dir = File.dirname(measure_xml)
|
5041
4881
|
command = "#{OpenStudio.getOpenStudioCLI} measure -u '#{measure_dir}'"
|
5042
4882
|
system(command, [:out, :err] => File::NULL)
|
@@ -5054,7 +4894,21 @@ if ARGV[0].to_sym == :update_measures
|
|
5054
4894
|
fail "#{measure_xml}: #{err_val}" # Error generated all 5 times, fail
|
5055
4895
|
else
|
5056
4896
|
# Remove error from measure XML, try again
|
5057
|
-
|
4897
|
+
orig_lines = File.readlines(measure_xml)
|
4898
|
+
new_lines = []
|
4899
|
+
inside_error = false
|
4900
|
+
orig_lines.each do |l|
|
4901
|
+
if l.include? '<error>'
|
4902
|
+
inside_error = true
|
4903
|
+
end
|
4904
|
+
if l.include? '</error>'
|
4905
|
+
inside_error = false
|
4906
|
+
next
|
4907
|
+
end
|
4908
|
+
next if inside_error
|
4909
|
+
|
4910
|
+
new_lines << l
|
4911
|
+
end
|
5058
4912
|
File.open(measure_xml, 'w') do |file|
|
5059
4913
|
file.puts new_lines
|
5060
4914
|
end
|
@@ -5072,17 +4926,10 @@ if ARGV[0].to_sym == :update_hpxmls
|
|
5072
4926
|
ENV['HOMEDRIVE'] = 'C:\\' if !ENV['HOMEDRIVE'].nil? && ENV['HOMEDRIVE'].start_with?('U:')
|
5073
4927
|
|
5074
4928
|
# Create sample/test HPXMLs
|
5075
|
-
|
5076
|
-
|
5077
|
-
# Create Schematron file that reflects HPXML schema
|
5078
|
-
if not hpxml_docs.nil?
|
5079
|
-
create_schematron_hpxml_validator(hpxml_docs)
|
5080
|
-
end
|
4929
|
+
create_hpxmls()
|
5081
4930
|
end
|
5082
4931
|
|
5083
4932
|
if ARGV[0].to_sym == :cache_weather
|
5084
|
-
require_relative 'HPXMLtoOpenStudio/resources/weather'
|
5085
|
-
|
5086
4933
|
OpenStudio::Logger.instance.standardOutLogger.setLogLevel(OpenStudio::Fatal)
|
5087
4934
|
runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
|
5088
4935
|
puts 'Creating cache *.csv for weather files...'
|
@@ -5101,20 +4948,11 @@ if ARGV[0].to_sym == :cache_weather
|
|
5101
4948
|
end
|
5102
4949
|
end
|
5103
4950
|
|
5104
|
-
if ARGV[0].to_sym == :
|
5105
|
-
|
4951
|
+
if ARGV[0].to_sym == :download_utility_rates
|
4952
|
+
download_utility_rates
|
5106
4953
|
end
|
5107
4954
|
|
5108
4955
|
if ARGV[0].to_sym == :create_release_zips
|
5109
|
-
require_relative 'HPXMLtoOpenStudio/resources/version'
|
5110
|
-
|
5111
|
-
release_map = { File.join(File.dirname(__FILE__), "OpenStudio-HPXML-v#{Version::OS_HPXML_Version}-minimal.zip") => false,
|
5112
|
-
File.join(File.dirname(__FILE__), "OpenStudio-HPXML-v#{Version::OS_HPXML_Version}-full.zip") => true }
|
5113
|
-
|
5114
|
-
release_map.keys.each do |zip_path|
|
5115
|
-
File.delete(zip_path) if File.exist? zip_path
|
5116
|
-
end
|
5117
|
-
|
5118
4956
|
if ENV['CI']
|
5119
4957
|
# CI doesn't have git, so default to everything
|
5120
4958
|
git_files = Dir['**/*.*']
|
@@ -5137,8 +4975,6 @@ if ARGV[0].to_sym == :create_release_zips
|
|
5137
4975
|
'BuildResidentialScheduleFile/resources/**/*.*',
|
5138
4976
|
'HPXMLtoOpenStudio/measure.*',
|
5139
4977
|
'HPXMLtoOpenStudio/resources/**/*.*',
|
5140
|
-
'ReportHPXMLOutput/measure.*',
|
5141
|
-
'ReportHPXMLOutput/resources/**/*.*',
|
5142
4978
|
'ReportSimulationOutput/measure.*',
|
5143
4979
|
'ReportSimulationOutput/resources/**/*.*',
|
5144
4980
|
'ReportUtilityBills/measure.*',
|
@@ -5172,50 +5008,28 @@ if ARGV[0].to_sym == :create_release_zips
|
|
5172
5008
|
if Dir.exist? fonts_dir
|
5173
5009
|
FileUtils.rm_r(fonts_dir)
|
5174
5010
|
end
|
5175
|
-
|
5176
|
-
# Check if we need to download weather files for the full release zip
|
5177
|
-
num_epws_expected = 1011
|
5178
|
-
num_epws_local = 0
|
5179
|
-
files.each do |f|
|
5180
|
-
Dir[f].each do |file|
|
5181
|
-
next unless file.end_with? '.epw'
|
5182
|
-
|
5183
|
-
num_epws_local += 1
|
5184
|
-
end
|
5185
|
-
end
|
5186
|
-
|
5187
|
-
# Make sure we have the full set of weather files
|
5188
|
-
if num_epws_local < num_epws_expected
|
5189
|
-
puts 'Fetching all weather files...'
|
5190
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{__FILE__} download_weather"
|
5191
|
-
log = `#{command}`
|
5192
|
-
end
|
5193
5011
|
end
|
5194
5012
|
|
5195
5013
|
# Create zip files
|
5196
5014
|
require 'zip'
|
5197
|
-
|
5198
|
-
|
5199
|
-
|
5200
|
-
|
5201
|
-
|
5202
|
-
|
5203
|
-
|
5204
|
-
|
5205
|
-
|
5206
|
-
|
5207
|
-
|
5208
|
-
else
|
5209
|
-
if not git_files.include? file
|
5210
|
-
next
|
5211
|
-
end
|
5015
|
+
zip_path = File.join(File.dirname(__FILE__), "OpenStudio-HPXML-v#{Version::OS_HPXML_Version}.zip")
|
5016
|
+
File.delete(zip_path) if File.exist? zip_path
|
5017
|
+
puts "Creating #{zip_path}..."
|
5018
|
+
Zip::File.open(zip_path, create: true) do |zipfile|
|
5019
|
+
files.each do |f|
|
5020
|
+
Dir[f].each do |file|
|
5021
|
+
if file.start_with? 'documentation'
|
5022
|
+
# always include
|
5023
|
+
else
|
5024
|
+
if not git_files.include? file
|
5025
|
+
next
|
5212
5026
|
end
|
5213
|
-
zipfile.add(File.join('OpenStudio-HPXML', file), file)
|
5214
5027
|
end
|
5028
|
+
zipfile.add(File.join('OpenStudio-HPXML', file), file)
|
5215
5029
|
end
|
5216
5030
|
end
|
5217
|
-
puts "Wrote file at #{zip_path}."
|
5218
5031
|
end
|
5032
|
+
puts "Wrote file at #{zip_path}."
|
5219
5033
|
|
5220
5034
|
# Cleanup
|
5221
5035
|
if not ENV['CI']
|