urbanopt-cli 0.8.3 → 0.9.1
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 +20 -0
- data/CMakeLists.txt +7 -7
- data/Gemfile +3 -1
- data/LICENSE.md +1 -1
- data/README.md +9 -0
- data/Rakefile +1 -1
- 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 +11 -8
- data/example_files/mappers/ChilledWaterStorage.rb +98 -0
- data/example_files/mappers/ClassProject.rb +110 -0
- data/example_files/mappers/CreateBar.rb +2 -1
- data/example_files/mappers/EvCharging.rb +1 -1
- data/example_files/mappers/FlexibleHotWater.rb +1 -1
- data/example_files/mappers/Floorspace.rb +1 -1
- data/example_files/mappers/HighEfficiency.rb +14 -12
- data/example_files/mappers/HighEfficiencyCreateBar.rb +1 -1
- data/example_files/mappers/HighEfficiencyFloorspace.rb +1 -1
- data/example_files/mappers/PeakHoursMelsShedding.rb +72 -0
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +78 -0
- data/example_files/mappers/ThermalStorage.rb +2 -1
- 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 +37 -27
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +42 -15
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +70 -51
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +142 -21
- data/example_files/resources/hpxml-measures/Changelog.md +95 -19
- 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 +220 -214
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +215 -170
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +115 -18
- 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 +305 -176
- 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 +90 -128
- 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 +471 -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 +587 -284
- 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 +4 -3
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +468 -264
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +148 -154
- 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-subset.osw +64 -0
- 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 +163 -392
- 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 +2 -2
- data/lib/uo_cli.rb +597 -97
- data/uo_cli.gemspec +6 -5
- metadata +122 -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
@@ -5,10 +5,6 @@ require 'openstudio'
|
|
5
5
|
require 'fileutils'
|
6
6
|
require 'parallel'
|
7
7
|
require_relative '../../HPXMLtoOpenStudio/measure.rb'
|
8
|
-
require_relative '../../HPXMLtoOpenStudio/resources/constants'
|
9
|
-
require_relative '../../HPXMLtoOpenStudio/resources/meta_measure'
|
10
|
-
require_relative '../../HPXMLtoOpenStudio/resources/unit_conversions'
|
11
|
-
require_relative '../../HPXMLtoOpenStudio/resources/xmlhelper'
|
12
8
|
|
13
9
|
class HPXMLTest < MiniTest::Test
|
14
10
|
def setup
|
@@ -20,8 +16,6 @@ class HPXMLTest < MiniTest::Test
|
|
20
16
|
def test_simulations
|
21
17
|
results_out = File.join(@results_dir, 'results.csv')
|
22
18
|
File.delete(results_out) if File.exist? results_out
|
23
|
-
sizing_out = File.join(@results_dir, 'results_hvac_sizing.csv')
|
24
|
-
File.delete(sizing_out) if File.exist? sizing_out
|
25
19
|
bills_out = File.join(@results_dir, 'results_bills.csv')
|
26
20
|
File.delete(bills_out) if File.exist? bills_out
|
27
21
|
|
@@ -39,17 +33,14 @@ class HPXMLTest < MiniTest::Test
|
|
39
33
|
# Test simulations
|
40
34
|
puts "Running #{xmls.size} HPXML files..."
|
41
35
|
all_results = {}
|
42
|
-
all_sizing_results = {}
|
43
36
|
all_bill_results = {}
|
44
37
|
Parallel.map(xmls, in_threads: Parallel.processor_count) do |xml|
|
45
|
-
_test_schema_validation(xml)
|
46
38
|
xml_name = File.basename(xml)
|
47
|
-
all_results[xml_name],
|
39
|
+
all_results[xml_name], all_bill_results[xml_name] = _run_xml(xml, Parallel.worker_number)
|
48
40
|
end
|
49
41
|
|
50
|
-
|
51
|
-
|
52
|
-
_write_bill_results(all_bill_results.sort_by { |k, v| k.downcase }.to_h, bills_out)
|
42
|
+
_write_results(all_results.sort_by { |k, _v| k.downcase }.to_h, results_out)
|
43
|
+
_write_results(all_bill_results.sort_by { |k, _v| k.downcase }.to_h, bills_out)
|
53
44
|
end
|
54
45
|
|
55
46
|
def test_ashrae_140
|
@@ -70,30 +61,30 @@ class HPXMLTest < MiniTest::Test
|
|
70
61
|
all_results[xml_name], _, _ = _run_xml(xml, Parallel.worker_number)
|
71
62
|
end
|
72
63
|
|
73
|
-
_write_ashrae_140_results(all_results.sort_by { |k,
|
64
|
+
_write_ashrae_140_results(all_results.sort_by { |k, _v| k.downcase }.to_h, ashrae140_out)
|
74
65
|
end
|
75
66
|
|
76
67
|
def test_run_simulation_output_formats
|
77
68
|
# Check that the simulation produces outputs in the appropriate format
|
78
|
-
['csv', 'json', 'msgpack'].each do |output_format|
|
69
|
+
['csv', 'json', 'msgpack', 'csv_dview'].each do |output_format|
|
79
70
|
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
80
71
|
xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base.xml')
|
81
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml} --debug --hourly ALL --
|
72
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --debug --hourly ALL --output-format #{output_format}"
|
82
73
|
system(command, err: File::NULL)
|
83
74
|
|
75
|
+
output_format = 'csv' if output_format == 'csv_dview'
|
76
|
+
|
84
77
|
# Check for output files
|
85
78
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'eplusout.msgpack'))
|
86
79
|
assert(File.exist? File.join(File.dirname(xml), 'run', "results_annual.#{output_format}"))
|
87
80
|
assert(File.exist? File.join(File.dirname(xml), 'run', "results_timeseries.#{output_format}"))
|
88
|
-
assert(File.exist?
|
89
|
-
assert(File.exist? File.join(File.dirname(xml), 'run', "results_bills.#{output_format}"))
|
81
|
+
assert(File.exist?(File.join(File.dirname(xml), 'run', "results_bills.#{output_format}")))
|
90
82
|
|
91
83
|
# Check for debug files
|
92
84
|
osm_path = File.join(File.dirname(xml), 'run', 'in.osm')
|
93
85
|
assert(File.exist? osm_path)
|
94
86
|
hpxml_defaults_path = File.join(File.dirname(xml), 'run', 'in.xml')
|
95
87
|
assert(File.exist? hpxml_defaults_path)
|
96
|
-
_test_schema_validation(hpxml_defaults_path)
|
97
88
|
end
|
98
89
|
end
|
99
90
|
|
@@ -101,7 +92,7 @@ class HPXMLTest < MiniTest::Test
|
|
101
92
|
# Check that we can run a simulation using epJSON (instead of IDF) if requested
|
102
93
|
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
103
94
|
xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base.xml')
|
104
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml} --ep-input-format epjson"
|
95
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --ep-input-format epjson"
|
105
96
|
system(command, err: File::NULL)
|
106
97
|
|
107
98
|
# Check for epjson file
|
@@ -110,14 +101,13 @@ class HPXMLTest < MiniTest::Test
|
|
110
101
|
# Check for output files
|
111
102
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'eplusout.msgpack'))
|
112
103
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_annual.csv'))
|
113
|
-
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_hpxml.csv'))
|
114
104
|
end
|
115
105
|
|
116
106
|
def test_run_simulation_idf_input
|
117
107
|
# Check that we can run a simulation using IDF (instead of epJSON) if requested
|
118
108
|
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
119
109
|
xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base.xml')
|
120
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml} --ep-input-format idf"
|
110
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --ep-input-format idf"
|
121
111
|
system(command, err: File::NULL)
|
122
112
|
|
123
113
|
# Check for idf file
|
@@ -126,24 +116,22 @@ class HPXMLTest < MiniTest::Test
|
|
126
116
|
# Check for output files
|
127
117
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'eplusout.msgpack'))
|
128
118
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_annual.csv'))
|
129
|
-
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_hpxml.csv'))
|
130
119
|
end
|
131
120
|
|
132
121
|
def test_run_simulation_faster_performance
|
133
122
|
# Run w/ --skip-validation and w/o --add-component-loads arguments
|
134
123
|
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
135
124
|
xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base.xml')
|
136
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml} --skip-validation"
|
125
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --skip-validation"
|
137
126
|
system(command, err: File::NULL)
|
138
127
|
|
139
128
|
# Check for output files
|
140
129
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'eplusout.msgpack'))
|
141
130
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_annual.csv'))
|
142
|
-
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_hpxml.csv'))
|
143
131
|
|
144
132
|
# Check component loads don't exist
|
145
133
|
component_loads = {}
|
146
|
-
CSV.read(File.join(File.dirname(xml), 'run', '
|
134
|
+
CSV.read(File.join(File.dirname(xml), 'run', 'results_annual.csv'), headers: false).each do |data|
|
147
135
|
next unless data[0].to_s.start_with? 'Component Load'
|
148
136
|
|
149
137
|
component_loads[data[0]] = Float(data[1])
|
@@ -152,25 +140,35 @@ class HPXMLTest < MiniTest::Test
|
|
152
140
|
end
|
153
141
|
|
154
142
|
def test_run_simulation_detailed_occupancy_schedules
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
143
|
+
[false, true].each do |debug|
|
144
|
+
# Check that the simulation produces stochastic schedules if requested
|
145
|
+
sample_files_path = File.join(File.dirname(__FILE__), '..', 'sample_files')
|
146
|
+
tmp_hpxml_path = File.join(sample_files_path, 'tmp.xml')
|
147
|
+
hpxml = HPXML.new(hpxml_path: File.join(sample_files_path, 'base.xml'))
|
148
|
+
XMLHelper.write_file(hpxml.to_oga, tmp_hpxml_path)
|
160
149
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
150
|
+
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
151
|
+
xml = File.absolute_path(tmp_hpxml_path)
|
152
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --add-detailed-schedule stochastic"
|
153
|
+
command += ' -d' if debug
|
154
|
+
system(command, err: File::NULL)
|
165
155
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
156
|
+
# Check for output files
|
157
|
+
assert(File.exist? File.join(File.dirname(xml), 'run', 'eplusout.msgpack'))
|
158
|
+
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_annual.csv'))
|
159
|
+
assert(File.exist? File.join(File.dirname(xml), 'run', 'stochastic.csv'))
|
160
|
+
|
161
|
+
# Check stochastic.csv headers
|
162
|
+
schedules = CSV.read(File.join(File.dirname(xml), 'run', 'stochastic.csv'), headers: true)
|
163
|
+
if debug
|
164
|
+
assert(schedules.headers.include?(SchedulesFile::ColumnSleeping))
|
165
|
+
else
|
166
|
+
refute(schedules.headers.include?(SchedulesFile::ColumnSleeping))
|
167
|
+
end
|
171
168
|
|
172
|
-
|
173
|
-
|
169
|
+
# Cleanup
|
170
|
+
File.delete(tmp_hpxml_path) if File.exist? tmp_hpxml_path
|
171
|
+
end
|
174
172
|
end
|
175
173
|
|
176
174
|
def test_run_simulation_timeseries_outputs
|
@@ -178,7 +176,7 @@ class HPXMLTest < MiniTest::Test
|
|
178
176
|
# Check that the simulation produces timeseries with requested outputs
|
179
177
|
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
180
178
|
xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base.xml')
|
181
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml}"
|
179
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\""
|
182
180
|
if not invalid_variable_only
|
183
181
|
command += ' --hourly ALL'
|
184
182
|
command += ' --add-timeseries-time-column DST'
|
@@ -192,7 +190,6 @@ class HPXMLTest < MiniTest::Test
|
|
192
190
|
# Check for output files
|
193
191
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'eplusout.msgpack'))
|
194
192
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_annual.csv'))
|
195
|
-
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_hpxml.csv'))
|
196
193
|
if not invalid_variable_only
|
197
194
|
assert(File.exist? File.join(File.dirname(xml), 'run', 'results_timeseries.csv'))
|
198
195
|
# Check timeseries columns exist
|
@@ -213,171 +210,85 @@ class HPXMLTest < MiniTest::Test
|
|
213
210
|
end
|
214
211
|
end
|
215
212
|
|
216
|
-
def
|
217
|
-
# Check that simulation works using template
|
218
|
-
require 'json'
|
219
|
-
|
220
|
-
osw_path = File.join(File.dirname(__FILE__), '..', 'template-run-hpxml.osw')
|
221
|
-
|
222
|
-
# Create derivative OSW for testing
|
223
|
-
osw_path_test = osw_path.gsub('.osw', '_test.osw')
|
224
|
-
FileUtils.cp(osw_path, osw_path_test)
|
225
|
-
|
226
|
-
# Turn on debug mode
|
227
|
-
json = JSON.parse(File.read(osw_path_test), symbolize_names: true)
|
228
|
-
json[:steps][0][:arguments][:debug] = true
|
229
|
-
|
230
|
-
if Dir.exist? File.join(File.dirname(__FILE__), '..', '..', 'project')
|
231
|
-
# CI checks out the repo as "project", so update dir name
|
232
|
-
json[:steps][0][:measure_dir_name] = 'project'
|
233
|
-
end
|
234
|
-
|
235
|
-
File.open(osw_path_test, 'w') do |f|
|
236
|
-
f.write(JSON.pretty_generate(json))
|
237
|
-
end
|
238
|
-
|
239
|
-
command = "#{OpenStudio.getOpenStudioCLI} run -w \"#{osw_path_test}\""
|
240
|
-
system(command, err: File::NULL)
|
241
|
-
|
242
|
-
# Check for output files
|
243
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'eplusout.msgpack'))
|
244
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_annual.csv'))
|
245
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_hpxml.csv'))
|
246
|
-
|
247
|
-
# Check for debug files
|
248
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'in.osm'))
|
249
|
-
hpxml_defaults_path = File.join(File.dirname(osw_path_test), 'run', 'in.xml')
|
250
|
-
assert(File.exist? hpxml_defaults_path)
|
251
|
-
|
252
|
-
# Cleanup
|
253
|
-
File.delete(osw_path_test)
|
254
|
-
end
|
255
|
-
|
256
|
-
def test_template_osw_with_schedule
|
257
|
-
# Check that simulation works using template-run-hpxml-with-stochastic-occupancy.osw
|
213
|
+
def test_template_osws
|
214
|
+
# Check that simulation works using template-*.osw
|
258
215
|
require 'json'
|
259
216
|
|
260
|
-
|
217
|
+
['template-run-hpxml.osw',
|
218
|
+
'template-run-hpxml-with-stochastic-occupancy.osw',
|
219
|
+
'template-run-hpxml-with-stochastic-occupancy-subset.osw',
|
220
|
+
'template-build-and-run-hpxml-with-stochastic-occupancy.osw'].each do |osw_name|
|
221
|
+
osw_path = File.join(File.dirname(__FILE__), '..', osw_name)
|
261
222
|
|
262
|
-
|
263
|
-
|
264
|
-
|
223
|
+
# Create derivative OSW for testing
|
224
|
+
osw_path_test = osw_path.gsub('.osw', '_test.osw')
|
225
|
+
FileUtils.cp(osw_path, osw_path_test)
|
265
226
|
|
266
|
-
|
267
|
-
|
268
|
-
|
227
|
+
# Turn on debug mode
|
228
|
+
json = JSON.parse(File.read(osw_path_test), symbolize_names: true)
|
229
|
+
measure_index = json[:steps].find_index { |m| m[:measure_dir_name] == 'HPXMLtoOpenStudio' }
|
230
|
+
json[:steps][measure_index][:arguments][:debug] = true
|
269
231
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
File.open(osw_path_test, 'w') do |f|
|
276
|
-
f.write(JSON.pretty_generate(json))
|
277
|
-
end
|
278
|
-
|
279
|
-
command = "#{OpenStudio.getOpenStudioCLI} run -w \"#{osw_path_test}\""
|
280
|
-
system(command, err: File::NULL)
|
281
|
-
|
282
|
-
# Check for output files
|
283
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'eplusout.msgpack'))
|
284
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_annual.csv'))
|
285
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_hpxml.csv'))
|
286
|
-
|
287
|
-
# Check for debug files
|
288
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'in.osm'))
|
289
|
-
hpxml_defaults_path = File.join(File.dirname(osw_path_test), 'run', 'in.xml')
|
290
|
-
assert(File.exist? hpxml_defaults_path)
|
291
|
-
|
292
|
-
# Cleanup
|
293
|
-
File.delete(osw_path_test)
|
294
|
-
xml_path_test = File.join(File.dirname(__FILE__), '..', 'base-stochastic-schedules.xml')
|
295
|
-
File.delete(xml_path_test)
|
296
|
-
end
|
297
|
-
|
298
|
-
def test_template_osw_with_build_hpxml_and_schedule
|
299
|
-
# Check that simulation works using template-build-and-run-hpxml-with-stochastic-occupancy.osw
|
300
|
-
require 'json'
|
232
|
+
if Dir.exist? File.join(File.dirname(__FILE__), '..', '..', 'project')
|
233
|
+
# CI checks out the repo as "project", so update dir name
|
234
|
+
json[:steps][measure_index][:measure_dir_name] = 'project'
|
235
|
+
end
|
301
236
|
|
302
|
-
|
237
|
+
File.open(osw_path_test, 'w') do |f|
|
238
|
+
f.write(JSON.pretty_generate(json))
|
239
|
+
end
|
303
240
|
|
304
|
-
|
305
|
-
|
306
|
-
FileUtils.cp(osw_path, osw_path_test)
|
241
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" run -w \"#{osw_path_test}\""
|
242
|
+
system(command, err: File::NULL)
|
307
243
|
|
308
|
-
|
309
|
-
|
310
|
-
|
244
|
+
# Check for output files
|
245
|
+
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'eplusout.msgpack'))
|
246
|
+
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_annual.csv'))
|
311
247
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
248
|
+
# Check for debug files
|
249
|
+
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'in.osm'))
|
250
|
+
hpxml_defaults_path = File.join(File.dirname(osw_path_test), 'run', 'in.xml')
|
251
|
+
assert(File.exist? hpxml_defaults_path)
|
316
252
|
|
317
|
-
|
318
|
-
|
253
|
+
# Cleanup
|
254
|
+
File.delete(osw_path_test)
|
255
|
+
xml_path_test = File.join(File.dirname(__FILE__), '..', 'run', 'built.xml')
|
256
|
+
File.delete(xml_path_test) if File.exist?(xml_path_test)
|
257
|
+
xml_path_test = File.join(File.dirname(__FILE__), '..', 'run', 'built-stochastic-schedules.xml')
|
258
|
+
File.delete(xml_path_test) if File.exist?(xml_path_test)
|
319
259
|
end
|
320
|
-
|
321
|
-
command = "#{OpenStudio.getOpenStudioCLI} run -w \"#{osw_path_test}\""
|
322
|
-
system(command, err: File::NULL)
|
323
|
-
|
324
|
-
# Check for output files
|
325
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'eplusout.msgpack'))
|
326
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_annual.csv'))
|
327
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'results_hpxml.csv'))
|
328
|
-
|
329
|
-
# Check for debug files
|
330
|
-
assert(File.exist? File.join(File.dirname(osw_path_test), 'run', 'in.osm'))
|
331
|
-
hpxml_defaults_path = File.join(File.dirname(osw_path_test), 'run', 'in.xml')
|
332
|
-
assert(File.exist? hpxml_defaults_path)
|
333
|
-
|
334
|
-
# Cleanup
|
335
|
-
File.delete(osw_path_test)
|
336
|
-
xml_path_test = File.join(File.dirname(__FILE__), '..', 'built.xml')
|
337
|
-
File.delete(xml_path_test)
|
338
|
-
xml_path_test = File.join(File.dirname(__FILE__), '..', 'built-stochastic-schedules.xml')
|
339
|
-
File.delete(xml_path_test)
|
340
260
|
end
|
341
261
|
|
342
262
|
def test_multiple_building_ids
|
343
|
-
os_cli = OpenStudio.getOpenStudioCLI
|
344
263
|
rb_path = File.join(File.dirname(__FILE__), '..', 'run_simulation.rb')
|
345
264
|
xml = File.join(File.dirname(__FILE__), '..', 'sample_files', 'base-multiple-buildings.xml')
|
346
265
|
csv_output_path = File.join(File.dirname(xml), 'run', 'results_annual.csv')
|
347
266
|
run_log = File.join(File.dirname(xml), 'run', 'run.log')
|
348
267
|
|
349
268
|
# Check successful simulation when providing correct building ID
|
350
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml} --building-id MyBuilding"
|
269
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --building-id MyBuilding"
|
351
270
|
system(command, err: File::NULL)
|
352
271
|
assert_equal(true, File.exist?(csv_output_path))
|
353
272
|
|
354
273
|
# Check unsuccessful simulation when providing incorrect building ID
|
355
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml} --building-id MyFoo"
|
274
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\" --building-id MyFoo"
|
356
275
|
system(command, err: File::NULL)
|
357
276
|
assert_equal(false, File.exist?(csv_output_path))
|
358
277
|
assert(File.readlines(run_log).select { |l| l.include? "Could not find Building element with ID 'MyFoo'." }.size > 0)
|
359
278
|
|
360
279
|
# Check unsuccessful simulation when not providing building ID
|
361
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{rb_path} -x #{xml}"
|
280
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{rb_path}\" -x \"#{xml}\""
|
362
281
|
system(command, err: File::NULL)
|
363
282
|
assert_equal(false, File.exist?(csv_output_path))
|
364
283
|
assert(File.readlines(run_log).select { |l| l.include? 'Multiple Building elements defined in HPXML file; Building ID argument must be provided.' }.size > 0)
|
365
284
|
end
|
366
285
|
|
367
|
-
def test_weather_cache
|
368
|
-
cache_orig = File.join(@this_dir, '..', '..', 'weather', 'USA_CO_Denver.Intl.AP.725650_TMY3-cache.csv')
|
369
|
-
cache_bak = cache_orig + '.bak'
|
370
|
-
File.rename(cache_orig, cache_bak)
|
371
|
-
_run_xml(File.absolute_path(File.join(@this_dir, '..', 'sample_files', 'base.xml')))
|
372
|
-
File.rename(cache_bak, cache_orig) # Put original file back
|
373
|
-
end
|
374
|
-
|
375
286
|
def test_release_zips
|
376
287
|
# Check release zips successfully created
|
377
288
|
top_dir = File.join(@this_dir, '..', '..')
|
378
|
-
command = "#{OpenStudio.getOpenStudioCLI} #{File.join(top_dir, 'tasks.rb')} create_release_zips"
|
289
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" \"#{File.join(top_dir, 'tasks.rb')}\" create_release_zips"
|
379
290
|
system(command)
|
380
|
-
assert_equal(
|
291
|
+
assert_equal(1, Dir["#{top_dir}/*.zip"].size)
|
381
292
|
|
382
293
|
# Check successful running of simulation from release zips
|
383
294
|
require 'zip'
|
@@ -391,10 +302,9 @@ class HPXMLTest < MiniTest::Test
|
|
391
302
|
end
|
392
303
|
|
393
304
|
# Test run_simulation.rb
|
394
|
-
command = "#{OpenStudio.getOpenStudioCLI} OpenStudio-HPXML/workflow/run_simulation.rb -x OpenStudio-HPXML/workflow/sample_files/base.xml"
|
305
|
+
command = "\"#{OpenStudio.getOpenStudioCLI}\" OpenStudio-HPXML/workflow/run_simulation.rb -x OpenStudio-HPXML/workflow/sample_files/base.xml"
|
395
306
|
system(command)
|
396
307
|
assert(File.exist? 'OpenStudio-HPXML/workflow/sample_files/run/results_annual.csv')
|
397
|
-
assert(File.exist? 'OpenStudio-HPXML/workflow/sample_files/run/results_hpxml.csv')
|
398
308
|
|
399
309
|
File.delete(zip_path)
|
400
310
|
rm_path('OpenStudio-HPXML')
|
@@ -410,32 +320,27 @@ class HPXMLTest < MiniTest::Test
|
|
410
320
|
# Uses 'monthly' to verify timeseries results match annual results via error-checking
|
411
321
|
# inside the ReportSimulationOutput measure.
|
412
322
|
cli_path = OpenStudio.getOpenStudioCLI
|
413
|
-
command = "\"#{cli_path}\" \"#{File.join(File.dirname(__FILE__), '../run_simulation.rb')}\" -x #{xml} --add-component-loads -o #{rundir} --debug --monthly ALL
|
414
|
-
workflow_start = Time.now
|
323
|
+
command = "\"#{cli_path}\" \"#{File.join(File.dirname(__FILE__), '../run_simulation.rb')}\" -x \"#{xml}\" --add-component-loads -o \"#{rundir}\" --debug --monthly ALL"
|
415
324
|
success = system(command)
|
416
|
-
workflow_time = Time.now - workflow_start
|
417
325
|
|
418
326
|
rundir = File.join(rundir, 'run')
|
419
327
|
|
420
328
|
# Check results
|
329
|
+
print "Simulation failed: #{xml}.\n" unless success
|
421
330
|
assert_equal(true, success)
|
422
331
|
|
423
332
|
# Check for output files
|
424
333
|
annual_csv_path = File.join(rundir, 'results_annual.csv')
|
425
334
|
timeseries_csv_path = File.join(rundir, 'results_timeseries.csv')
|
426
|
-
hpxml_csv_path = File.join(rundir, 'results_hpxml.csv')
|
427
335
|
bills_csv_path = File.join(rundir, 'results_bills.csv')
|
428
336
|
assert(File.exist? annual_csv_path)
|
429
337
|
assert(File.exist? timeseries_csv_path)
|
430
|
-
assert(File.exist? hpxml_csv_path)
|
431
|
-
|
432
|
-
# Get results
|
433
|
-
results = _get_simulation_results(annual_csv_path, xml)
|
434
338
|
|
435
339
|
# Check outputs
|
436
340
|
hpxml_defaults_path = File.join(rundir, 'in.xml')
|
437
|
-
|
438
|
-
|
341
|
+
xsd_path = File.join(File.dirname(__FILE__), '..', '..', 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema', 'HPXML.xsd')
|
342
|
+
stron_path = File.join(File.dirname(__FILE__), '..', '..', 'HPXMLtoOpenStudio', 'resources', 'hpxml_schematron', 'EPvalidator.xml')
|
343
|
+
hpxml = HPXML.new(hpxml_path: hpxml_defaults_path, schema_path: xsd_path, schematron_path: stron_path) # Validate in.xml to ensure it can be run back through OS-HPXML
|
439
344
|
if not hpxml.errors.empty?
|
440
345
|
puts 'ERRORS:'
|
441
346
|
hpxml.errors.each do |error|
|
@@ -443,14 +348,14 @@ class HPXMLTest < MiniTest::Test
|
|
443
348
|
end
|
444
349
|
flunk "EPvalidator.xml error in #{hpxml_defaults_path}."
|
445
350
|
end
|
446
|
-
|
447
|
-
|
351
|
+
bill_results = _get_bill_results(bills_csv_path)
|
352
|
+
results = _get_simulation_results(annual_csv_path, xml, hpxml)
|
448
353
|
_verify_outputs(rundir, xml, results, hpxml)
|
449
354
|
|
450
|
-
return results,
|
355
|
+
return results, bill_results
|
451
356
|
end
|
452
357
|
|
453
|
-
def _get_simulation_results(annual_csv_path, xml)
|
358
|
+
def _get_simulation_results(annual_csv_path, xml, hpxml)
|
454
359
|
# Grab all outputs from reporting measure CSV annual results
|
455
360
|
results = {}
|
456
361
|
CSV.foreach(annual_csv_path) do |row|
|
@@ -461,94 +366,29 @@ class HPXMLTest < MiniTest::Test
|
|
461
366
|
|
462
367
|
# Check discrepancy between total load and sum of component loads
|
463
368
|
if not xml.include? 'ASHRAE_Standard_140'
|
464
|
-
sum_component_htg_loads = results.select { |k,
|
465
|
-
sum_component_clg_loads = results.select { |k,
|
466
|
-
|
467
|
-
|
468
|
-
abs_htg_load_delta = (
|
469
|
-
abs_clg_load_delta = (
|
470
|
-
avg_htg_load = ([
|
471
|
-
avg_clg_load = ([
|
369
|
+
sum_component_htg_loads = results.select { |k, _v| k.start_with? 'Component Load: Heating:' }.values.sum(0.0)
|
370
|
+
sum_component_clg_loads = results.select { |k, _v| k.start_with? 'Component Load: Cooling:' }.values.sum(0.0)
|
371
|
+
total_htg_load_delivered = results['Load: Heating: Delivered (MBtu)']
|
372
|
+
total_clg_load_delivered = results['Load: Cooling: Delivered (MBtu)']
|
373
|
+
abs_htg_load_delta = (total_htg_load_delivered - sum_component_htg_loads).abs
|
374
|
+
abs_clg_load_delta = (total_clg_load_delivered - sum_component_clg_loads).abs
|
375
|
+
avg_htg_load = ([total_htg_load_delivered, abs_htg_load_delta].sum / 2.0)
|
376
|
+
avg_clg_load = ([total_clg_load_delivered, abs_clg_load_delta].sum / 2.0)
|
472
377
|
abs_htg_load_frac = abs_htg_load_delta / avg_htg_load
|
473
378
|
abs_clg_load_frac = abs_clg_load_delta / avg_clg_load
|
474
379
|
# Check that the difference is less than 0.6MBtu or less than 10%
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
end
|
481
|
-
|
482
|
-
def _get_hvac_sizing_results(hpxml, xml)
|
483
|
-
results = {}
|
484
|
-
return if xml.include? 'ASHRAE_Standard_140'
|
485
|
-
|
486
|
-
# Heating design loads
|
487
|
-
hpxml.hvac_plant.class::HDL_ATTRS.each do |attr, element_name|
|
488
|
-
results["heating_load_#{attr.to_s.gsub('hdl_', '')} [Btuh]"] = hpxml.hvac_plant.send(attr.to_s)
|
489
|
-
end
|
490
|
-
|
491
|
-
# Cooling sensible design loads
|
492
|
-
hpxml.hvac_plant.class::CDL_SENS_ATTRS.each do |attr, element_name|
|
493
|
-
results["cooling_load_#{attr.to_s.gsub('cdl_', '')} [Btuh]"] = hpxml.hvac_plant.send(attr.to_s)
|
494
|
-
end
|
495
|
-
|
496
|
-
# Cooling latent design loads
|
497
|
-
hpxml.hvac_plant.class::CDL_LAT_ATTRS.each do |attr, element_name|
|
498
|
-
results["cooling_load_#{attr.to_s.gsub('cdl_', '')} [Btuh]"] = hpxml.hvac_plant.send(attr.to_s)
|
499
|
-
end
|
500
|
-
|
501
|
-
# Heating capacities/airflows
|
502
|
-
results['heating_capacity [Btuh]'] = 0.0
|
503
|
-
results['heating_backup_capacity [Btuh]'] = 0.0
|
504
|
-
results['heating_airflow [cfm]'] = 0.0
|
505
|
-
(hpxml.heating_systems + hpxml.heat_pumps).each do |htg_sys|
|
506
|
-
results['heating_capacity [Btuh]'] += htg_sys.heating_capacity
|
507
|
-
if htg_sys.is_a? HPXML::HeatPump
|
508
|
-
if not htg_sys.backup_heating_capacity.nil?
|
509
|
-
results['heating_backup_capacity [Btuh]'] += htg_sys.backup_heating_capacity
|
510
|
-
elsif not htg_sys.backup_system.nil?
|
511
|
-
results['heating_backup_capacity [Btuh]'] += htg_sys.backup_system.heating_capacity
|
512
|
-
end
|
380
|
+
if hpxml.total_fraction_heat_load_served > 0
|
381
|
+
assert((abs_htg_load_delta < 0.6) || (abs_htg_load_frac < 0.1))
|
382
|
+
end
|
383
|
+
if hpxml.total_fraction_cool_load_served > 0
|
384
|
+
assert((abs_clg_load_delta < 1.1) || (abs_clg_load_frac < 0.1))
|
513
385
|
end
|
514
|
-
results['heating_airflow [cfm]'] += htg_sys.heating_airflow_cfm.to_f
|
515
|
-
end
|
516
|
-
|
517
|
-
# Cooling capacity/airflows
|
518
|
-
results['cooling_capacity [Btuh]'] = 0.0
|
519
|
-
results['cooling_airflow [cfm]'] = 0.0
|
520
|
-
(hpxml.cooling_systems + hpxml.heat_pumps).each do |clg_sys|
|
521
|
-
results['cooling_capacity [Btuh]'] += clg_sys.cooling_capacity
|
522
|
-
results['cooling_airflow [cfm]'] += clg_sys.cooling_airflow_cfm
|
523
|
-
end
|
524
|
-
|
525
|
-
assert(!results.empty?)
|
526
|
-
|
527
|
-
if (hpxml.heating_systems + hpxml.heat_pumps).select { |h| h.fraction_heat_load_served.to_f > 0 }.empty?
|
528
|
-
# No heating equipment; check for zero heating capacities/airflows/duct loads
|
529
|
-
assert_equal(0.0, results['heating_capacity [Btuh]'])
|
530
|
-
assert_equal(0.0, results['heating_backup_capacity [Btuh]'])
|
531
|
-
assert_equal(0.0, results['heating_airflow [cfm]'])
|
532
|
-
assert_equal(0.0, results['heating_load_ducts [Btuh]'])
|
533
|
-
end
|
534
|
-
if (hpxml.cooling_systems + hpxml.heat_pumps).select { |c| c.fraction_cool_load_served.to_f > 0 }.empty?
|
535
|
-
# No cooling equipment; check for zero cooling capacities/airflows/duct loads
|
536
|
-
assert_equal(0.0, results['cooling_capacity [Btuh]'])
|
537
|
-
assert_equal(0.0, results['cooling_airflow [cfm]'])
|
538
|
-
assert_equal(0.0, results['cooling_load_sens_ducts [Btuh]'])
|
539
|
-
assert_equal(0.0, results['cooling_load_lat_ducts [Btuh]'])
|
540
|
-
end
|
541
|
-
if hpxml.hvac_distributions.map { |dist| dist.ducts.size }.empty?
|
542
|
-
# No ducts; check for zero duct loads
|
543
|
-
assert_equal(0.0, results['heating_load_ducts [Btuh]'])
|
544
|
-
assert_equal(0.0, results['cooling_load_sens_ducts [Btuh]'])
|
545
|
-
assert_equal(0.0, results['cooling_load_lat_ducts [Btuh]'])
|
546
386
|
end
|
547
387
|
|
548
388
|
return results
|
549
389
|
end
|
550
390
|
|
551
|
-
def _get_bill_results(bill_csv_path
|
391
|
+
def _get_bill_results(bill_csv_path)
|
552
392
|
# Grab all outputs from reporting measure CSV bill results
|
553
393
|
results = {}
|
554
394
|
if File.exist? bill_csv_path
|
@@ -562,17 +402,6 @@ class HPXMLTest < MiniTest::Test
|
|
562
402
|
return results
|
563
403
|
end
|
564
404
|
|
565
|
-
def _test_schema_validation(xml)
|
566
|
-
# TODO: Remove this when schema validation is included with CLI calls
|
567
|
-
schemas_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema'))
|
568
|
-
hpxml_doc = XMLHelper.parse_file(xml)
|
569
|
-
errors = XMLHelper.validate(hpxml_doc.to_xml, File.join(schemas_dir, 'HPXML.xsd'), nil)
|
570
|
-
if errors.size > 0
|
571
|
-
puts "#{xml}: #{errors}"
|
572
|
-
end
|
573
|
-
assert_equal(0, errors.size)
|
574
|
-
end
|
575
|
-
|
576
405
|
def _verify_outputs(rundir, hpxml_path, results, hpxml)
|
577
406
|
assert(File.exist? File.join(rundir, 'eplusout.msgpack'))
|
578
407
|
|
@@ -585,24 +414,8 @@ class HPXMLTest < MiniTest::Test
|
|
585
414
|
hpxml.collapse_enclosure_surfaces()
|
586
415
|
|
587
416
|
# Check run.log warnings
|
588
|
-
def skip_utility_bill_warning(err_line)
|
589
|
-
utility_bill_warnings = ["#{EPlus::FuelTypeElectricity}:Facility".upcase,
|
590
|
-
"#{EPlus::FuelTypeElectricity}Produced:Facility".upcase,
|
591
|
-
"#{EPlus::FuelTypeNaturalGas}:Facility".upcase,
|
592
|
-
"#{EPlus::FuelTypeOil}:Facility".upcase,
|
593
|
-
"#{EPlus::FuelTypePropane}:Facility".upcase,
|
594
|
-
"#{EPlus::FuelTypeWoodCord}:Facility".upcase,
|
595
|
-
"#{EPlus::FuelTypeWoodPellets}:Facility".upcase,
|
596
|
-
"#{EPlus::FuelTypeCoal}:Facility".upcase]
|
597
|
-
skip_warning = false
|
598
|
-
utility_bill_warnings.each do |utility_bill_warning|
|
599
|
-
skip_warning = true if err_line.include? utility_bill_warning
|
600
|
-
end
|
601
|
-
return skip_warning
|
602
|
-
end
|
603
417
|
File.readlines(File.join(rundir, 'run.log')).each do |log_line|
|
604
418
|
next if log_line.strip.empty?
|
605
|
-
next if log_line.include? 'Warning: Could not load nokogiri, no HPXML validation performed.'
|
606
419
|
next if log_line.start_with? 'Info: '
|
607
420
|
next if log_line.start_with? 'Executing command'
|
608
421
|
next if log_line.include? "-cache.csv' could not be found; regenerating it."
|
@@ -647,8 +460,8 @@ class HPXMLTest < MiniTest::Test
|
|
647
460
|
if hpxml.windows.empty?
|
648
461
|
next if log_line.include? 'No windows specified, the model will not include window heat transfer.'
|
649
462
|
end
|
650
|
-
if hpxml.pv_systems.empty? && !hpxml.batteries.empty?
|
651
|
-
next if log_line.include? 'Battery without PV specified; battery is assumed to operate as backup and will not be modeled.'
|
463
|
+
if hpxml.pv_systems.empty? && !hpxml.batteries.empty? && hpxml.header.schedules_filepaths.empty?
|
464
|
+
next if log_line.include? 'Battery without PV specified, and no charging/discharging schedule provided; battery is assumed to operate as backup and will not be modeled.'
|
652
465
|
end
|
653
466
|
if hpxml_path.include? 'base-location-capetown-zaf.xml'
|
654
467
|
next if log_line.include? 'OS Message: Minutes field (60) on line 9 of EPW file'
|
@@ -659,7 +472,7 @@ class HPXMLTest < MiniTest::Test
|
|
659
472
|
next if log_line.include? 'DSE is not currently supported when calculating utility bills.'
|
660
473
|
end
|
661
474
|
|
662
|
-
flunk "Unexpected warning found
|
475
|
+
flunk "Unexpected run.log warning found for #{File.basename(hpxml_path)}: #{log_line}"
|
663
476
|
end
|
664
477
|
|
665
478
|
# Check for unexpected warnings
|
@@ -701,10 +514,7 @@ class HPXMLTest < MiniTest::Test
|
|
701
514
|
next if err_line.include? 'Actual air mass flow rate is smaller than 25% of water-to-air heat pump coil rated air flow rate.' # FUTURE: Remove this when https://github.com/NREL/EnergyPlus/issues/9125 is resolved
|
702
515
|
next if err_line.include? 'DetailedSkyDiffuseModeling is chosen but not needed as either the shading transmittance for shading devices does not change throughout the year'
|
703
516
|
next if err_line.include? 'View factors not complete'
|
704
|
-
|
705
|
-
if err_line.include? 'Output:Meter: invalid Key Name'
|
706
|
-
next if skip_utility_bill_warning(err_line)
|
707
|
-
end
|
517
|
+
next if err_line.include?('CheckSimpleWAHPRatedCurvesOutputs') && err_line.include?('WaterToAirHeatPump:EquationFit') # FIXME: Check these
|
708
518
|
|
709
519
|
# HPWHs
|
710
520
|
if hpxml.water_heating_systems.select { |wh| wh.water_heater_type == HPXML::WaterHeaterTypeHeatPump }.size > 0
|
@@ -722,7 +532,7 @@ class HPXMLTest < MiniTest::Test
|
|
722
532
|
next if err_line.include? 'Recovery Efficiency and Energy Factor could not be calculated during the test for standard ratings'
|
723
533
|
end
|
724
534
|
# HP defrost curves
|
725
|
-
if hpxml.heat_pumps.select { |hp| [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit, HPXML::HVACTypeHeatPumpPTHP].include? hp.heat_pump_type }.size > 0
|
535
|
+
if hpxml.heat_pumps.select { |hp| [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit, HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? hp.heat_pump_type }.size > 0
|
726
536
|
next if err_line.include?('GetDXCoils: Coil:Heating:DX') && err_line.include?('curve values')
|
727
537
|
end
|
728
538
|
if hpxml.cooling_systems.select { |c| c.cooling_system_type == HPXML::HVACTypeEvaporativeCooler }.size > 0
|
@@ -747,7 +557,7 @@ class HPXMLTest < MiniTest::Test
|
|
747
557
|
next if err_line.include? 'Supply Side is storing excess heat the majority of the time.'
|
748
558
|
end
|
749
559
|
|
750
|
-
flunk "Unexpected warning found: #{err_line}"
|
560
|
+
flunk "Unexpected eplusout.err warning found for #{File.basename(hpxml_path)}: #{err_line}"
|
751
561
|
end
|
752
562
|
|
753
563
|
# Check for unused objects/schedules/constructions warnings
|
@@ -772,8 +582,6 @@ class HPXMLTest < MiniTest::Test
|
|
772
582
|
num_invalid_output_variables = 0
|
773
583
|
File.readlines(File.join(rundir, 'eplusout.err')).each do |err_line|
|
774
584
|
if err_line.include? 'Output:Meter: invalid Key Name'
|
775
|
-
next if skip_utility_bill_warning(err_line)
|
776
|
-
|
777
585
|
num_invalid_output_meters += 1
|
778
586
|
elsif err_line.include?('Key=') && err_line.include?('VarName=')
|
779
587
|
num_invalid_output_variables += 1
|
@@ -873,6 +681,7 @@ class HPXMLTest < MiniTest::Test
|
|
873
681
|
assert_equal(0, num_kiva_instances) # no foundation, above dwelling unit
|
874
682
|
else
|
875
683
|
num_expected_kiva_instances = { 'base-foundation-ambient.xml' => 0, # no foundation in contact w/ ground
|
684
|
+
'base-enclosure-floortypes.xml' => 0, # no foundation in contact w/ ground
|
876
685
|
'base-foundation-multiple.xml' => 2, # additional instance for 2nd foundation type
|
877
686
|
'base-enclosure-2stories-garage.xml' => 2, # additional instance for garage
|
878
687
|
'base-foundation-basement-garage.xml' => 2, # additional instance for garage
|
@@ -1018,68 +827,68 @@ class HPXMLTest < MiniTest::Test
|
|
1018
827
|
assert_in_epsilon(hpxml_value, sql_value, 0.01)
|
1019
828
|
end
|
1020
829
|
|
1021
|
-
# Enclosure
|
1022
|
-
hpxml.
|
1023
|
-
|
830
|
+
# Enclosure Floors
|
831
|
+
hpxml.floors.each do |floor|
|
832
|
+
floor_id = floor.id.upcase
|
1024
833
|
|
1025
|
-
if
|
834
|
+
if floor.is_adiabatic
|
1026
835
|
# Adiabatic surfaces have their "BaseSurfaceIndex" as their "ExtBoundCond" in "Surfaces" table in SQL simulation results
|
1027
|
-
query_base_surf_idx = "SELECT BaseSurfaceIndex FROM Surfaces WHERE SurfaceName='#{
|
1028
|
-
query_ext_bound = "SELECT ExtBoundCond FROM Surfaces WHERE SurfaceName='#{
|
836
|
+
query_base_surf_idx = "SELECT BaseSurfaceIndex FROM Surfaces WHERE SurfaceName='#{floor_id}'"
|
837
|
+
query_ext_bound = "SELECT ExtBoundCond FROM Surfaces WHERE SurfaceName='#{floor_id}'"
|
1029
838
|
sql_value_base_surf_idx = sqlFile.execAndReturnFirstDouble(query_base_surf_idx).get
|
1030
839
|
sql_value_ext_bound_cond = sqlFile.execAndReturnFirstDouble(query_ext_bound).get
|
1031
840
|
assert_equal(sql_value_base_surf_idx, sql_value_ext_bound_cond)
|
1032
841
|
end
|
1033
842
|
|
1034
|
-
if
|
843
|
+
if floor.is_exterior
|
1035
844
|
table_name = 'Opaque Exterior'
|
1036
845
|
else
|
1037
846
|
table_name = 'Opaque Interior'
|
1038
847
|
end
|
1039
848
|
|
1040
849
|
# R-value
|
1041
|
-
hpxml_value =
|
850
|
+
hpxml_value = floor.insulation_assembly_r_value
|
1042
851
|
if hpxml_path.include? 'ASHRAE_Standard_140'
|
1043
852
|
# Compare R-value w/o film
|
1044
|
-
if
|
853
|
+
if floor.is_exterior # Raised floor
|
1045
854
|
hpxml_value -= Material.AirFilmFloorASHRAE140.rvalue
|
1046
855
|
hpxml_value -= Material.AirFilmFloorZeroWindASHRAE140.rvalue
|
1047
|
-
elsif
|
856
|
+
elsif floor.is_ceiling # Attic floor
|
1048
857
|
hpxml_value -= Material.AirFilmFloorASHRAE140.rvalue
|
1049
858
|
hpxml_value -= Material.AirFilmFloorASHRAE140.rvalue
|
1050
859
|
end
|
1051
|
-
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{
|
1052
|
-
elsif
|
860
|
+
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{floor_id}' AND ColumnName='U-Factor no Film' AND Units='W/m2-K'"
|
861
|
+
elsif floor.is_interior
|
1053
862
|
# Compare R-value w/o film
|
1054
|
-
if
|
863
|
+
if floor.is_ceiling
|
1055
864
|
hpxml_value -= Material.AirFilmFloorAverage.rvalue
|
1056
865
|
hpxml_value -= Material.AirFilmFloorAverage.rvalue
|
1057
866
|
else
|
1058
867
|
hpxml_value -= Material.AirFilmFloorReduced.rvalue
|
1059
868
|
hpxml_value -= Material.AirFilmFloorReduced.rvalue
|
1060
869
|
end
|
1061
|
-
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{
|
870
|
+
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{floor_id}' AND ColumnName='U-Factor no Film' AND Units='W/m2-K'"
|
1062
871
|
else
|
1063
872
|
# Compare R-value w/ film
|
1064
|
-
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{
|
873
|
+
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{floor_id}' AND ColumnName='U-Factor with Film' AND Units='W/m2-K'"
|
1065
874
|
end
|
1066
875
|
sql_value = 1.0 / UnitConversions.convert(sqlFile.execAndReturnFirstDouble(query).get, 'W/(m^2*K)', 'Btu/(hr*ft^2*F)')
|
1067
876
|
assert_in_epsilon(hpxml_value, sql_value, 0.1)
|
1068
877
|
|
1069
878
|
# Area
|
1070
|
-
hpxml_value =
|
1071
|
-
query = "SELECT SUM(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{
|
879
|
+
hpxml_value = floor.area
|
880
|
+
query = "SELECT SUM(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{floor_id}' AND ColumnName='Net Area' AND Units='m2'"
|
1072
881
|
sql_value = UnitConversions.convert(sqlFile.execAndReturnFirstDouble(query).get, 'm^2', 'ft^2')
|
1073
882
|
assert_operator(sql_value, :>, 0.01)
|
1074
883
|
assert_in_epsilon(hpxml_value, sql_value, 0.1)
|
1075
884
|
|
1076
885
|
# Tilt
|
1077
|
-
if
|
886
|
+
if floor.is_ceiling
|
1078
887
|
hpxml_value = 0
|
1079
888
|
else
|
1080
889
|
hpxml_value = 180
|
1081
890
|
end
|
1082
|
-
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{
|
891
|
+
query = "SELECT AVG(Value) FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='#{table_name}' AND RowName='#{floor_id}' AND ColumnName='Tilt' AND Units='deg'"
|
1083
892
|
sql_value = sqlFile.execAndReturnFirstDouble(query).get
|
1084
893
|
assert_in_epsilon(hpxml_value, sql_value, 0.01)
|
1085
894
|
end
|
@@ -1197,19 +1006,21 @@ class HPXMLTest < MiniTest::Test
|
|
1197
1006
|
|
1198
1007
|
# HVAC Load Fractions
|
1199
1008
|
if (not hpxml_path.include? 'location-miami') && (not hpxml_path.include? 'location-honolulu') && (not hpxml_path.include? 'location-phoenix')
|
1200
|
-
htg_energy = results.select { |k,
|
1009
|
+
htg_energy = results.select { |k, _v| (k.include?(': Heating (MBtu)') || k.include?(': Heating Fans/Pumps (MBtu)')) && !k.include?('Load') }.values.sum(0.0)
|
1201
1010
|
assert_equal(hpxml.total_fraction_heat_load_served > 0, htg_energy > 0)
|
1202
1011
|
end
|
1203
|
-
clg_energy = results.select { |k,
|
1012
|
+
clg_energy = results.select { |k, _v| (k.include?(': Cooling (MBtu)') || k.include?(': Cooling Fans/Pumps (MBtu)')) && !k.include?('Load') }.values.sum(0.0)
|
1204
1013
|
assert_equal(hpxml.total_fraction_cool_load_served > 0, clg_energy > 0)
|
1205
1014
|
|
1206
1015
|
# Mechanical Ventilation
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1016
|
+
whole_vent_fans = hpxml.ventilation_fans.select { |vent_mech| vent_mech.used_for_whole_building_ventilation && !vent_mech.is_cfis_supplemental_fan? }
|
1017
|
+
local_vent_fans = hpxml.ventilation_fans.select { |vent_mech| vent_mech.used_for_local_ventilation }
|
1018
|
+
fan_cfis = whole_vent_fans.select { |vent_mech| vent_mech.fan_type == HPXML::MechVentTypeCFIS }
|
1019
|
+
fan_sup = whole_vent_fans.select { |vent_mech| vent_mech.fan_type == HPXML::MechVentTypeSupply }
|
1020
|
+
fan_exh = whole_vent_fans.select { |vent_mech| vent_mech.fan_type == HPXML::MechVentTypeExhaust }
|
1021
|
+
fan_bal = whole_vent_fans.select { |vent_mech| [HPXML::MechVentTypeBalanced, HPXML::MechVentTypeERV, HPXML::MechVentTypeHRV].include?(vent_mech.fan_type) }
|
1022
|
+
vent_fan_kitchen = local_vent_fans.select { |vent_mech| vent_mech.fan_location == HPXML::LocationKitchen }
|
1023
|
+
vent_fan_bath = local_vent_fans.select { |vent_mech| vent_mech.fan_location == HPXML::LocationBath }
|
1213
1024
|
|
1214
1025
|
if not (fan_cfis + fan_sup + fan_exh + fan_bal + vent_fan_kitchen + vent_fan_bath).empty?
|
1215
1026
|
mv_energy = UnitConversions.convert(results['End Use: Electricity: Mech Vent (MBtu)'], 'MBtu', 'GJ')
|
@@ -1265,7 +1076,7 @@ class HPXMLTest < MiniTest::Test
|
|
1265
1076
|
end
|
1266
1077
|
|
1267
1078
|
# Lighting
|
1268
|
-
ltg_energy = results.select { |k,
|
1079
|
+
ltg_energy = results.select { |k, _v| k.include? 'End Use: Electricity: Lighting' }.values.sum(0.0)
|
1269
1080
|
assert_equal(hpxml.lighting_groups.size > 0, ltg_energy > 0)
|
1270
1081
|
|
1271
1082
|
# Get fuels
|
@@ -1279,6 +1090,11 @@ class HPXMLTest < MiniTest::Test
|
|
1279
1090
|
htg_fuels << heating_system.heating_system_fuel
|
1280
1091
|
end
|
1281
1092
|
end
|
1093
|
+
hpxml.cooling_systems.each do |cooling_system|
|
1094
|
+
if cooling_system.has_integrated_heating
|
1095
|
+
htg_fuels << cooling_system.integrated_heating_system_fuel
|
1096
|
+
end
|
1097
|
+
end
|
1282
1098
|
hpxml.heat_pumps.each do |heat_pump|
|
1283
1099
|
if heat_pump.fraction_heat_load_served > 0
|
1284
1100
|
htg_backup_fuels << heat_pump.backup_heating_fuel
|
@@ -1347,14 +1163,22 @@ class HPXMLTest < MiniTest::Test
|
|
1347
1163
|
end
|
1348
1164
|
|
1349
1165
|
# Check unmet hours
|
1350
|
-
unmet_hours_htg = results.select { |k,
|
1351
|
-
unmet_hours_clg = results.select { |k,
|
1166
|
+
unmet_hours_htg = results.select { |k, _v| k.include? 'Unmet Hours: Heating' }.values.sum(0.0)
|
1167
|
+
unmet_hours_clg = results.select { |k, _v| k.include? 'Unmet Hours: Cooling' }.values.sum(0.0)
|
1352
1168
|
if hpxml_path.include? 'base-hvac-undersized.xml'
|
1353
1169
|
assert_operator(unmet_hours_htg, :>, 1000)
|
1354
1170
|
assert_operator(unmet_hours_clg, :>, 1000)
|
1355
1171
|
else
|
1356
|
-
|
1357
|
-
|
1172
|
+
if hpxml.total_fraction_heat_load_served == 0
|
1173
|
+
assert_equal(0, unmet_hours_htg)
|
1174
|
+
else
|
1175
|
+
assert_operator(unmet_hours_htg, :<, 350)
|
1176
|
+
end
|
1177
|
+
if hpxml.total_fraction_cool_load_served == 0
|
1178
|
+
assert_equal(0, unmet_hours_clg)
|
1179
|
+
else
|
1180
|
+
assert_operator(unmet_hours_clg, :<, 350)
|
1181
|
+
end
|
1358
1182
|
end
|
1359
1183
|
|
1360
1184
|
sqlFile.close
|
@@ -1364,11 +1188,11 @@ class HPXMLTest < MiniTest::Test
|
|
1364
1188
|
GC.start()
|
1365
1189
|
end
|
1366
1190
|
|
1367
|
-
def
|
1191
|
+
def _write_results(results, csv_out)
|
1368
1192
|
require 'csv'
|
1369
1193
|
|
1370
1194
|
output_keys = []
|
1371
|
-
results.each do |
|
1195
|
+
results.values.each do |xml_results|
|
1372
1196
|
xml_results.keys.each do |key|
|
1373
1197
|
next if output_keys.include? key
|
1374
1198
|
|
@@ -1376,13 +1200,8 @@ class HPXMLTest < MiniTest::Test
|
|
1376
1200
|
end
|
1377
1201
|
end
|
1378
1202
|
|
1379
|
-
column_headers = ['HPXML']
|
1380
|
-
output_keys.each do |key|
|
1381
|
-
column_headers << key
|
1382
|
-
end
|
1383
|
-
|
1384
1203
|
CSV.open(csv_out, 'w') do |csv|
|
1385
|
-
csv <<
|
1204
|
+
csv << ['HPXML'] + output_keys
|
1386
1205
|
results.sort.each do |xml, xml_results|
|
1387
1206
|
csv_row = [xml]
|
1388
1207
|
output_keys.each do |key|
|
@@ -1396,55 +1215,7 @@ class HPXMLTest < MiniTest::Test
|
|
1396
1215
|
end
|
1397
1216
|
end
|
1398
1217
|
|
1399
|
-
puts "Wrote
|
1400
|
-
end
|
1401
|
-
|
1402
|
-
def _write_hvac_sizing_results(all_sizing_results, csv_out)
|
1403
|
-
require 'csv'
|
1404
|
-
|
1405
|
-
output_keys = nil
|
1406
|
-
all_sizing_results.each do |xml, xml_results|
|
1407
|
-
output_keys = xml_results.keys
|
1408
|
-
break
|
1409
|
-
end
|
1410
|
-
return if output_keys.nil?
|
1411
|
-
|
1412
|
-
CSV.open(csv_out, 'w') do |csv|
|
1413
|
-
csv << ['HPXML'] + output_keys
|
1414
|
-
all_sizing_results.sort.each do |xml, xml_results|
|
1415
|
-
csv_row = [xml]
|
1416
|
-
output_keys.each do |key|
|
1417
|
-
csv_row << xml_results[key]
|
1418
|
-
end
|
1419
|
-
csv << csv_row
|
1420
|
-
end
|
1421
|
-
end
|
1422
|
-
|
1423
|
-
puts "Wrote HVAC sizing results to #{csv_out}."
|
1424
|
-
end
|
1425
|
-
|
1426
|
-
def _write_bill_results(all_bill_results, csv_out)
|
1427
|
-
require 'csv'
|
1428
|
-
|
1429
|
-
output_keys = nil
|
1430
|
-
all_bill_results.each do |xml, xml_results|
|
1431
|
-
output_keys = xml_results.keys
|
1432
|
-
break
|
1433
|
-
end
|
1434
|
-
return if output_keys.nil?
|
1435
|
-
|
1436
|
-
CSV.open(csv_out, 'w') do |csv|
|
1437
|
-
csv << ['HPXML'] + output_keys
|
1438
|
-
all_bill_results.sort.each do |xml, xml_results|
|
1439
|
-
csv_row = [xml]
|
1440
|
-
output_keys.each do |key|
|
1441
|
-
csv_row << xml_results[key]
|
1442
|
-
end
|
1443
|
-
csv << csv_row
|
1444
|
-
end
|
1445
|
-
end
|
1446
|
-
|
1447
|
-
puts "Wrote utility bill results to #{csv_out}."
|
1218
|
+
puts "Wrote results to #{csv_out}."
|
1448
1219
|
end
|
1449
1220
|
|
1450
1221
|
def _write_ashrae_140_results(all_results, csv_out)
|