urbanopt-cli 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +5 -6
- data/CHANGELOG.md +21 -0
- data/CMakeLists.txt +7 -7
- data/Gemfile +3 -1
- data/README.md +9 -0
- data/example_files/Gemfile +23 -16
- data/example_files/Gemfile.lock +177 -0
- data/example_files/base_workflow_res.osw +57 -14
- data/example_files/class_project_coincident.json +1322 -0
- data/example_files/class_project_diverse.json +1322 -0
- data/example_files/disco/config.json +42 -0
- data/example_files/disco/cost_database.xlsx +0 -0
- data/example_files/disco/technical_catalog.json +12126 -0
- data/example_files/mappers/Baseline.rb +10 -7
- data/example_files/mappers/ChilledWaterStorage.rb +98 -0
- data/example_files/mappers/ClassProject.rb +110 -0
- data/example_files/mappers/CreateBar.rb +1 -0
- data/example_files/mappers/HighEfficiency.rb +13 -11
- data/example_files/mappers/PeakHoursMelsShedding.rb +72 -0
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +78 -0
- data/example_files/mappers/ThermalStorage.rb +1 -0
- data/example_files/mappers/base_workflow.osw +55 -14
- data/example_files/mappers/class_project_workflow.osw +328 -0
- data/example_files/mappers/createbar_workflow.osw +16 -16
- data/example_files/measures/BuildResidentialModel/measure.rb +7 -1
- data/example_files/measures/BuildResidentialModel/measure.xml +1313 -706
- data/example_files/opendss/electrical_database.json +1446 -1446
- data/example_files/python_deps/dependencies.json +5 -0
- data/example_files/python_deps/install_python.ps1 +96 -0
- data/example_files/python_deps/install_python.sh +120 -0
- data/example_files/residential/clothes_dryer.tsv +11 -11
- data/example_files/residential/clothes_washer.tsv +3 -3
- data/example_files/residential/dishwasher.tsv +3 -3
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +0 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +8 -21
- data/example_files/resources/hpxml-measures/.gitignore +2 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1272 -1094
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +978 -659
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +52 -74
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +77 -140
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +30 -27
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +32 -13
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +55 -51
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +89 -16
- data/example_files/resources/hpxml-measures/Changelog.md +65 -0
- data/example_files/resources/hpxml-measures/Gemfile +2 -4
- data/example_files/resources/hpxml-measures/Gemfile.lock +2 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +276 -300
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +221 -215
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +215 -170
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +108 -16
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +24 -44
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +564 -197
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/cambium/README.md +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +7 -55
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +24 -19
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +541 -211
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +300 -172
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +0 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +230 -141
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +145 -137
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +191 -97
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/iso-schematron.xsd +391 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +194 -198
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +140 -145
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +11 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +33 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +17 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +14 -12
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +39 -17
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/battery.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +114 -57
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/utility_bills.rb +148 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +85 -127
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +26 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +2 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +67 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +117 -56
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +141 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +453 -344
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +124 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +28 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +172 -79
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +7 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +6 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +213 -95
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +1 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +76 -0
- data/example_files/resources/hpxml-measures/README.md +2 -3
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +585 -287
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +304 -352
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +404 -279
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +222 -501
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +137 -200
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate Min Annual Charge.json +649 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate Min Monthly Charge.json +649 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate.json +647 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate Min Annual Charge.json +8776 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate Min Monthly Charge.json +8776 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate.json +8774 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate Min Annual Charge.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate Min Monthly Charge.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate.json +657 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate Min Annual Charge.json +670 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate Min Monthly Charge.json +670 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate.json +668 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate Min Annual Charge.json +655 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate Min Monthly Charge.json +655 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate.json +653 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/openei_rates.zip +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/Average_retail_price_of_electricity.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/HouseholdConsumption.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/NG_PRI_SUM_A_EPG0_PRS_DMCF_A.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/PET_PRI_WFR_A_EPD2F_PRS_DPGAL_W.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/PET_PRI_WFR_A_EPLLPA_PRS_DPGAL_W.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/README.md +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/util.rb +506 -25
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Contains Demand Charges.json +1312 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Invalid Fixed Charge Units.json +657 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Invalid Min Charge Units.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/JacksonElectricMemberCorp-ResidentialSeniorCitizenLowIncomeAssistance.json +681 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Missing Required Fields.json +54 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/data.csv +8761 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +1006 -235
- data/example_files/resources/hpxml-measures/docs/source/conf.py +1 -1
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +0 -1
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +2 -2
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +461 -261
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +146 -152
- data/example_files/resources/hpxml-measures/tasks.rb +616 -802
- data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +28 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +13 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +31 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +21 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +37 -22
- data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +24 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +33 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +30 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +10 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +22 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +18 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +25 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +26 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +25 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +35 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +28 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +35 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +20 -13
- data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +12 -9
- data/example_files/resources/hpxml-measures/workflow/real_homes/house048.xml +25 -14
- data/example_files/resources/hpxml-measures/workflow/real_homes/house049.xml +10 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house050.xml +20 -11
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +91 -88
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +546 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +546 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +555 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +7 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +17 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +7 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +600 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +606 -593
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-calctype-operational.xml +480 -471
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +464 -457
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +496 -487
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +466 -459
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +518 -509
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +513 -504
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +445 -438
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +476 -467
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +443 -436
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +446 -439
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +445 -438
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +476 -467
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +446 -439
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +489 -480
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +499 -490
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +491 -482
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +510 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +495 -486
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +709 -695
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +528 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +512 -503
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +504 -495
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +497 -488
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +490 -481
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +487 -478
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached-2stories.xml +639 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached-atticroof-cathedral.xml +587 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +639 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-defaults.xml +539 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-loads-large-uncommon.xml +644 -633
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-loads-large-uncommon2.xml +644 -633
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational.xml +575 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +536 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +20 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +584 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +584 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +28 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +20 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +550 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +589 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +619 -608
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +620 -609
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +618 -607
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +90 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2507 -2460
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +595 -584
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +594 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +597 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +671 -656
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-foundation-conditioned-basement-wall-interior-insulation.xml → base-foundation-conditioned-basement-wall-insulation.xml} +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +35 -16
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +583 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +600 -589
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +599 -588
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +629 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +579 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml +582 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +628 -615
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +535 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +589 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +536 -527
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +578 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +575 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +551 -542
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +532 -530
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +525 -516
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +525 -516
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +533 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +611 -598
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +589 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +17 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +574 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +570 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +570 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +552 -543
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +963 -938
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +33 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ptac-with-heating.xml → base-hvac-ptac-with-heating-natural-gas.xml} +23 -21
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +594 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +591 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +601 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +601 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +19 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +20 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +21 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +37 -19
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +590 -579
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +578 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +632 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +614 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +677 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +593 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +27 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +676 -665
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +616 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +615 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +586 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1700 -1677
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +622 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +697 -682
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-pv-battery-lifetime-model.xml → base-pv-battery-round-trip-efficiency.xml} +20 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +624 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +622 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +640 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +639 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +623 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +606 -595
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-smooth.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +636 -625
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +27 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +21 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +21 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-tank-heat-pump-detailed-operating-modes.xml → base-simcontrol-temperature-capacitance-multiplier.xml} +25 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-tank-heat-pump-detailed-setpoints.xml → base-simcontrol-timestep-30-mins.xml} +25 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +18 -13
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +12 -7
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +8 -24
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +366 -358
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +311 -303
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +311 -303
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +327 -319
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +327 -319
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +332 -324
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +332 -324
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +341 -333
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +341 -333
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +383 -379
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +383 -379
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +538 -534
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +550 -546
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +444 -410
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +8 -8
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +444 -410
- data/example_files/resources/hpxml-measures/workflow/tests/compare.py +18 -4
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +133 -288
- data/example_files/scripts/convert_urbanopt_to_disco.py +130 -0
- data/example_files/scripts/default_control_changes.csv +8 -0
- data/example_files/scripts/default_voltage_regulators.csv +3 -0
- data/example_files/scripts/read_data.py +331 -0
- data/example_files/visualization/input_visualization_feature.html +172 -81
- data/example_files/visualization/input_visualization_scenario.html +178 -82
- data/example_files/xml_building/17/README.md +2 -2
- data/example_files/xml_building/17/unit 1.xml +40 -41
- data/example_files/xml_building/17/unit 2.xml +35 -36
- data/example_files/xml_building/17/unit 3.xml +35 -36
- data/example_files/xml_building/17/unit 4.xml +41 -42
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +601 -101
- data/scripts/setup-env.bat +6 -7
- data/uo_cli.gemspec +6 -5
- metadata +121 -36
- data/example_files/residential/exhaust.tsv +0 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/hvac_equipment_efficiency.csv +0 -493
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/water_heater_efficiency.csv +0 -157
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/HPXMLvalidator.xml +0 -620
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +0 -107
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +0 -450
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +0 -85
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +0 -72
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +0 -290
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_10kW.csv +0 -8761
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_1kW.csv +0 -8761
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_None.csv +0 -8761
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +0 -410
|
@@ -6,13 +6,15 @@ require 'openstudio/measure/ShowRunnerOutput'
|
|
|
6
6
|
require 'fileutils'
|
|
7
7
|
require_relative '../measure.rb'
|
|
8
8
|
require 'csv'
|
|
9
|
+
require_relative '../resources/xmlhelper.rb'
|
|
10
|
+
require_relative '../resources/xmlvalidator.rb'
|
|
9
11
|
|
|
10
12
|
class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
11
13
|
def setup
|
|
12
14
|
@root_path = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..'))
|
|
13
15
|
@sample_files_path = File.join(@root_path, 'workflow', 'sample_files')
|
|
16
|
+
@hpxml_schema_path = File.absolute_path(File.join(@root_path, 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema', 'HPXML.xsd'))
|
|
14
17
|
@epvalidator_stron_path = File.join(@root_path, 'HPXMLtoOpenStudio', 'resources', 'hpxml_schematron', 'EPvalidator.xml')
|
|
15
|
-
@hpxml_stron_path = File.join(@root_path, 'HPXMLtoOpenStudio', 'resources', 'hpxml_schematron', 'HPXMLvalidator.xml')
|
|
16
18
|
|
|
17
19
|
@tmp_hpxml_path = File.join(@sample_files_path, 'tmp.xml')
|
|
18
20
|
@tmp_csv_path = File.join(@sample_files_path, 'tmp.csv')
|
|
@@ -38,27 +40,17 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
38
40
|
puts "[#{i + 1}/#{xmls.size}] Testing #{File.basename(xml)}..."
|
|
39
41
|
|
|
40
42
|
# Test validation
|
|
43
|
+
_test_schema_validation(xml, @hpxml_schema_path)
|
|
41
44
|
hpxml_doc = HPXML.new(hpxml_path: xml, building_id: 'MyBuilding').to_oga()
|
|
42
|
-
|
|
43
|
-
_test_schematron_validation(hpxml_doc, expected_errors: []) # Ensure no errors
|
|
45
|
+
_test_schematron_validation(xml, hpxml_doc, expected_errors: []) # Ensure no errors
|
|
44
46
|
end
|
|
45
47
|
puts
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
def test_validation_of_schematron_doc
|
|
49
51
|
# Check that the schematron file is valid
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
require 'schematron-nokogiri'
|
|
53
|
-
|
|
54
|
-
[@epvalidator_stron_path, @hpxml_stron_path].each do |s_path|
|
|
55
|
-
xml_doc = Nokogiri::XML(File.open(s_path)) do |config|
|
|
56
|
-
config.options = Nokogiri::XML::ParseOptions::STRICT
|
|
57
|
-
end
|
|
58
|
-
stron_doc = SchematronNokogiri::Schema.new(xml_doc)
|
|
59
|
-
end
|
|
60
|
-
rescue LoadError
|
|
61
|
-
end
|
|
52
|
+
schematron_schema_path = File.absolute_path(File.join(@root_path, 'HPXMLtoOpenStudio', 'resources', 'hpxml_schematron', 'iso-schematron.xsd'))
|
|
53
|
+
_test_schema_validation(@epvalidator_stron_path, schematron_schema_path)
|
|
62
54
|
end
|
|
63
55
|
|
|
64
56
|
def test_role_attributes_in_schematron_doc
|
|
@@ -91,7 +83,8 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
91
83
|
end
|
|
92
84
|
end
|
|
93
85
|
|
|
94
|
-
def
|
|
86
|
+
def test_schema_schematron_error_messages
|
|
87
|
+
OpenStudio::Logger.instance.standardOutLogger.setLogLevel(OpenStudio::Fatal)
|
|
95
88
|
# Test case => Error message
|
|
96
89
|
all_expected_errors = { 'boiler-invalid-afue' => ['Expected AnnualHeatingEfficiency[Units="AFUE"]/Value to be less than or equal to 1'],
|
|
97
90
|
'clothes-dryer-location' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
|
|
@@ -106,7 +99,8 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
106
99
|
'duct-leakage-cfm50' => ['Expected Value to be greater than or equal to 0 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/DuctLeakageMeasurement/DuctLeakage[Units="CFM25" or Units="CFM50"], id: "HVACDistribution1"]'],
|
|
107
100
|
'duct-leakage-percent' => ['Expected Value to be less than 1 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/DuctLeakageMeasurement/DuctLeakage[Units="Percent"], id: "HVACDistribution1"]'],
|
|
108
101
|
'duct-location' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
|
|
109
|
-
'duct-location-unconditioned-space' => ["Expected DuctLocation to be 'living space' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'crawlspace - conditioned' or 'attic - vented' or 'attic - unvented' or 'garage' or 'exterior wall' or 'under slab' or 'roof deck' or 'outside' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/Ducts, id: \"
|
|
102
|
+
'duct-location-unconditioned-space' => ["Expected DuctLocation to be 'living space' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'crawlspace - conditioned' or 'attic - vented' or 'attic - unvented' or 'garage' or 'exterior wall' or 'under slab' or 'roof deck' or 'outside' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/Ducts, id: \"Ducts1\"]",
|
|
103
|
+
"Expected DuctLocation to be 'living space' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'crawlspace - conditioned' or 'attic - vented' or 'attic - unvented' or 'garage' or 'exterior wall' or 'under slab' or 'roof deck' or 'outside' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space' [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/Ducts, id: \"Ducts2\"]"],
|
|
110
104
|
'emissions-electricity-schedule' => ['Expected NumberofHeaderRows to be greater than or equal to 0',
|
|
111
105
|
'Expected ColumnNumber to be greater than or equal to 1'],
|
|
112
106
|
'enclosure-attic-missing-roof' => ['There must be at least one roof adjacent to "attic - unvented". [context: /HPXML/Building/BuildingDetails/Enclosure[*/*[InteriorAdjacentTo="attic - unvented" or ExteriorAdjacentTo="attic - unvented"]]]'],
|
|
@@ -134,7 +128,8 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
134
128
|
'hvac-distribution-return-duct-leakage-missing' => ['Expected 1 element(s) for xpath: DuctLeakageMeasurement[DuctType="return"]/DuctLeakage[(Units="CFM25" or Units="CFM50" or Units="Percent") and TotalOrToOutside="to outside"] [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution[AirDistributionType[text()="regular velocity" or text()="gravity"]], id: "HVACDistribution1"]'],
|
|
135
129
|
'hvac-frac-load-served' => ['Expected sum(FractionHeatLoadServed) to be less than or equal to 1 [context: /HPXML/Building/BuildingDetails]',
|
|
136
130
|
'Expected sum(FractionCoolLoadServed) to be less than or equal to 1 [context: /HPXML/Building/BuildingDetails]'],
|
|
137
|
-
'
|
|
131
|
+
'incomplete-integrated-heating' => ['Expected 1 element(s) for xpath: IntegratedHeatingSystemFractionHeatLoadServed'],
|
|
132
|
+
'invalid-assembly-effective-rvalue' => ["Element 'AssemblyEffectiveRValue': [facet 'minExclusive'] The value '0.0' must be greater than '0'."],
|
|
138
133
|
'invalid-battery-capacities-ah' => ['Expected UsableCapacity to be less than NominalCapacity'],
|
|
139
134
|
'invalid-battery-capacities-kwh' => ['Expected UsableCapacity to be less than NominalCapacity'],
|
|
140
135
|
'invalid-calendar-year-low' => ['Expected CalendarYear to be greater than or equal to 1600'],
|
|
@@ -150,30 +145,38 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
150
145
|
'invalid-foundation-wall-properties' => ['Expected DepthBelowGrade to be less than or equal to Height [context: /HPXML/Building/BuildingDetails/Enclosure/FoundationWalls/FoundationWall, id: "FoundationWall1"]',
|
|
151
146
|
'Expected DistanceToBottomOfInsulation to be greater than or equal to DistanceToTopOfInsulation [context: /HPXML/Building/BuildingDetails/Enclosure/FoundationWalls/FoundationWall/Insulation/Layer[InstallationType="continuous - exterior" or InstallationType="continuous - interior"], id: "FoundationWall1Insulation"]',
|
|
152
147
|
'Expected DistanceToBottomOfInsulation to be less than or equal to ../../Height [context: /HPXML/Building/BuildingDetails/Enclosure/FoundationWalls/FoundationWall/Insulation/Layer[InstallationType="continuous - exterior" or InstallationType="continuous - interior"], id: "FoundationWall1Insulation"]'],
|
|
148
|
+
'invalid-ground-conductivity' => ['Expected extension/GroundConductivity to be greater than 0'],
|
|
153
149
|
'invalid-hvac-installation-quality' => ['Expected extension/AirflowDefectRatio to be greater than or equal to -0.9 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACPlant/HeatPump[HeatPumpType="air-to-air"], id: "HeatPump1"]',
|
|
154
150
|
'Expected extension/ChargeDefectRatio to be greater than or equal to -0.9 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACPlant/HeatPump[HeatPumpType="air-to-air"], id: "HeatPump1"]'],
|
|
155
151
|
'invalid-hvac-installation-quality2' => ['Expected extension/AirflowDefectRatio to be less than or equal to 9 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACPlant/HeatPump[HeatPumpType="air-to-air"], id: "HeatPump1"]',
|
|
156
152
|
'Expected extension/ChargeDefectRatio to be less than or equal to 9 [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACPlant/HeatPump[HeatPumpType="air-to-air"], id: "HeatPump1"]'],
|
|
157
|
-
'invalid-id2' => ['
|
|
158
|
-
'invalid-input-parameters' => ["
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
'
|
|
162
|
-
'
|
|
163
|
-
'
|
|
164
|
-
'invalid-insulation-top' => ['
|
|
153
|
+
'invalid-id2' => ["Element 'SystemIdentifier': The attribute 'id' is required but missing."],
|
|
154
|
+
'invalid-input-parameters' => ["Element 'Transaction': [facet 'enumeration'] The value 'modify' is not an element of the set {'create', 'update'}.",
|
|
155
|
+
"Element 'SiteType': [facet 'enumeration'] The value 'mountain' is not an element of the set {'rural', 'suburban', 'urban'}.",
|
|
156
|
+
"Element 'Year': [facet 'enumeration'] The value '2020' is not an element of the set {'2021', '2018', '2015', '2012', '2009', '2006', '2003'}.",
|
|
157
|
+
"Element 'Azimuth': [facet 'maxExclusive'] The value '365' must be less than '360'.",
|
|
158
|
+
"Element 'RadiantBarrierGrade': [facet 'maxInclusive'] The value '4' is greater than the maximum value allowed ('3').",
|
|
159
|
+
"Element 'EnergyFactor': [facet 'maxInclusive'] The value '5.1' is greater than the maximum value allowed ('5')."],
|
|
160
|
+
'invalid-insulation-top' => ["Element 'DistanceToTopOfInsulation': [facet 'minInclusive'] The value '-0.5' is less than the minimum value allowed ('0')."],
|
|
161
|
+
'invalid-integrated-heating' => ['Expected 0 element(s) for xpath: IntegratedHeatingSystemFuel'],
|
|
162
|
+
'invalid-natvent-availability' => ['Expected extension/NaturalVentilationAvailabilityDaysperWeek to be less than or equal to 7'],
|
|
163
|
+
'invalid-natvent-availability2' => ['Expected extension/NaturalVentilationAvailabilityDaysperWeek to be greater than or equal to 0'],
|
|
165
164
|
'invalid-number-of-bedrooms-served' => ['Expected extension/NumberofBedroomsServed to be greater than ../../../BuildingSummary/BuildingConstruction/NumberofBedrooms [context: /HPXML/Building/BuildingDetails/Systems/Photovoltaics/PVSystem[IsSharedSystem="true"], id: "PVSystem1"]'],
|
|
166
165
|
'invalid-number-of-conditioned-floors' => ['Expected NumberofConditionedFloors to be greater than or equal to NumberofConditionedFloorsAboveGrade [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
|
|
167
166
|
'invalid-number-of-units-served' => ['Expected NumberofUnitsServed to be greater than 1 [context: /HPXML/Building/BuildingDetails/Systems/WaterHeating/WaterHeatingSystem[IsSharedSystem="true"], id: "WaterHeatingSystem1"]'],
|
|
168
167
|
'invalid-shared-vent-in-unit-flowrate' => ['Expected RatedFlowRate to be greater than extension/InUnitFlowRate [context: /HPXML/Building/BuildingDetails/Systems/MechanicalVentilation/VentilationFans/VentilationFan[UsedForWholeBuildingVentilation="true" and IsSharedSystem="true"], id: "VentilationFan1"]'],
|
|
169
|
-
'invalid-
|
|
170
|
-
'invalid-timezone-utcoffset-
|
|
168
|
+
'invalid-timestep' => ['Expected Timestep to be 60, 30, 20, 15, 12, 10, 6, 5, 4, 3, 2, or 1'],
|
|
169
|
+
'invalid-timezone-utcoffset-low' => ["Element 'UTCOffset': [facet 'minInclusive'] The value '-13.0' is less than the minimum value allowed ('-12')."],
|
|
170
|
+
'invalid-timezone-utcoffset-high' => ["Element 'UTCOffset': [facet 'maxInclusive'] The value '15.0' is greater than the maximum value allowed ('14')."],
|
|
171
171
|
'invalid-ventilation-fan' => ['Expected 1 element(s) for xpath: UsedForWholeBuildingVentilation[text()="true"] | UsedForLocalVentilation[text()="true"] | UsedForSeasonalCoolingLoadReduction[text()="true"] | UsedForGarageVentilation[text()="true"]'],
|
|
172
|
+
'invalid-ventilation-recovery' => ['Expected 0 element(s) for xpath: TotalRecoveryEfficiency | AdjustedTotalRecoveryEfficiency',
|
|
173
|
+
'Expected 0 element(s) for xpath: SensibleRecoveryEfficiency | AdjustedSensibleRecoveryEfficiency'],
|
|
172
174
|
'invalid-window-height' => ['Expected DistanceToBottomOfWindow to be greater than DistanceToTopOfWindow [context: /HPXML/Building/BuildingDetails/Enclosure/Windows/Window/Overhangs[number(Depth) > 0], id: "Window2"]'],
|
|
173
175
|
'lighting-fractions' => ['Expected sum(LightingGroup/FractionofUnitsInLocation) for Location="interior" to be less than or equal to 1 [context: /HPXML/Building/BuildingDetails/Lighting]'],
|
|
174
|
-
'missing-
|
|
175
|
-
'missing-
|
|
176
|
-
'missing-duct-
|
|
176
|
+
'missing-cfis-supplemental-fan' => ['Expected 1 element(s) for xpath: SupplementalFan'],
|
|
177
|
+
'missing-distribution-cfa-served' => ['Expected 1 element(s) for xpath: ../../../ConditionedFloorAreaServed [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/Ducts[not(DuctSurfaceArea)], id: "Ducts2"]'],
|
|
178
|
+
'missing-duct-area' => ['Expected 1 or more element(s) for xpath: FractionDuctArea | DuctSurfaceArea [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/Ducts[DuctLocation], id: "Ducts2"]'],
|
|
179
|
+
'missing-duct-location' => ['Expected 0 element(s) for xpath: FractionDuctArea | DuctSurfaceArea [context: /HPXML/Building/BuildingDetails/Systems/HVAC/HVACDistribution/DistributionSystemType/AirDistribution/Ducts[not(DuctLocation)], id: "Ducts2"]'],
|
|
177
180
|
'missing-elements' => ['Expected 1 element(s) for xpath: NumberofConditionedFloors [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]',
|
|
178
181
|
'Expected 1 element(s) for xpath: ConditionedFloorArea [context: /HPXML/Building/BuildingDetails/BuildingSummary/BuildingConstruction]'],
|
|
179
182
|
'missing-num-residents' => ['Expected 1 element(s) for xpath: NumberofResidents'],
|
|
@@ -181,7 +184,6 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
181
184
|
'multifamily-reference-duct' => ['There are references to "other multifamily buffer space" but ResidentialFacilityType is not "single-family attached" or "apartment unit".'],
|
|
182
185
|
'multifamily-reference-surface' => ['There are references to "other heated space" but ResidentialFacilityType is not "single-family attached" or "apartment unit".'],
|
|
183
186
|
'multifamily-reference-water-heater' => ['There are references to "other non-freezing space" but ResidentialFacilityType is not "single-family attached" or "apartment unit".'],
|
|
184
|
-
'ptac-unattached-cooling-system' => ['Expected 1 or more element(s) for xpath: ../CoolingSystem/CoolingSystemType[text()="packaged terminal air conditioner"'],
|
|
185
187
|
'refrigerator-location' => ['A location is specified as "garage" but no surfaces were found adjacent to this space type.'],
|
|
186
188
|
'solar-fraction-one' => ['Expected SolarFraction to be less than 1 [context: /HPXML/Building/BuildingDetails/Systems/SolarThermal/SolarThermalSystem, id: "SolarThermalSystem1"]'],
|
|
187
189
|
'water-heater-location' => ['A location is specified as "crawlspace - vented" but no surfaces were found adjacent to this space type.'],
|
|
@@ -273,11 +275,11 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
273
275
|
end
|
|
274
276
|
elsif ['enclosure-garage-missing-roof-ceiling'].include? error_case
|
|
275
277
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-enclosure-garage.xml'))
|
|
276
|
-
hpxml.
|
|
278
|
+
hpxml.floors.select { |w|
|
|
277
279
|
w.interior_adjacent_to == HPXML::LocationGarage &&
|
|
278
280
|
w.exterior_adjacent_to == HPXML::LocationAtticUnvented
|
|
279
|
-
}.reverse_each do |
|
|
280
|
-
|
|
281
|
+
}.reverse_each do |floor|
|
|
282
|
+
floor.delete
|
|
281
283
|
end
|
|
282
284
|
elsif ['enclosure-garage-missing-slab'].include? error_case
|
|
283
285
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-enclosure-garage.xml'))
|
|
@@ -286,8 +288,8 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
286
288
|
end
|
|
287
289
|
elsif ['enclosure-living-missing-ceiling-roof'].include? error_case
|
|
288
290
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
289
|
-
hpxml.
|
|
290
|
-
|
|
291
|
+
hpxml.floors.reverse_each do |floor|
|
|
292
|
+
floor.delete
|
|
291
293
|
end
|
|
292
294
|
elsif ['enclosure-living-missing-exterior-wall'].include? error_case
|
|
293
295
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
@@ -332,9 +334,13 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
332
334
|
elsif ['heat-pump-multiple-backup-systems'].include? error_case
|
|
333
335
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml'))
|
|
334
336
|
hpxml.heating_systems << hpxml.heating_systems[0].dup
|
|
337
|
+
hpxml.heating_systems[-1].id = 'HeatingSystem2'
|
|
335
338
|
hpxml.heat_pumps[0].fraction_heat_load_served = 0.5
|
|
336
339
|
hpxml.heat_pumps[0].fraction_cool_load_served = 0.5
|
|
337
340
|
hpxml.heat_pumps << hpxml.heat_pumps[0].dup
|
|
341
|
+
hpxml.heat_pumps[-1].id = 'HeatPump2'
|
|
342
|
+
hpxml.heat_pumps[-1].primary_heating_system = false
|
|
343
|
+
hpxml.heat_pumps[-1].primary_cooling_system = false
|
|
338
344
|
elsif ['hvac-distribution-return-duct-leakage-missing'].include? error_case
|
|
339
345
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-evap-cooler-only-ducted.xml'))
|
|
340
346
|
hpxml.hvac_distributions[0].duct_leakage_measurements[-1].delete
|
|
@@ -346,6 +352,9 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
346
352
|
hpxml.cooling_systems[0].primary_system = true
|
|
347
353
|
hpxml.heat_pumps[-1].primary_heating_system = false
|
|
348
354
|
hpxml.heat_pumps[-1].primary_cooling_system = false
|
|
355
|
+
elsif ['incomplete-integrated-heating'].include? error_case
|
|
356
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-ptac-with-heating-electricity.xml'))
|
|
357
|
+
hpxml.cooling_systems[0].integrated_heating_system_fraction_heat_load_served = nil
|
|
349
358
|
elsif ['invalid-assembly-effective-rvalue'].include? error_case
|
|
350
359
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
351
360
|
hpxml.walls[0].insulation_assembly_r_value = 0.0
|
|
@@ -379,6 +388,9 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
379
388
|
hpxml.foundation_walls[0].depth_below_grade = 9.0
|
|
380
389
|
hpxml.foundation_walls[0].insulation_interior_distance_to_top = 12.0
|
|
381
390
|
hpxml.foundation_walls[0].insulation_interior_distance_to_bottom = 10.0
|
|
391
|
+
elsif ['invalid-ground-conductivity'].include? error_case
|
|
392
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
393
|
+
hpxml.site.ground_conductivity = 0.0
|
|
382
394
|
elsif ['invalid-hvac-installation-quality'].include? error_case
|
|
383
395
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-air-to-air-heat-pump-1-speed.xml'))
|
|
384
396
|
hpxml.heat_pumps[0].airflow_defect_ratio = -99
|
|
@@ -393,7 +405,7 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
393
405
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
394
406
|
hpxml.header.transaction = 'modify'
|
|
395
407
|
hpxml.site.site_type = 'mountain'
|
|
396
|
-
hpxml.climate_and_risk_zones.
|
|
408
|
+
hpxml.climate_and_risk_zones.climate_zone_ieccs[0].year = 2020
|
|
397
409
|
hpxml.roofs.each do |roof|
|
|
398
410
|
roof.radiant_barrier_grade = 4
|
|
399
411
|
end
|
|
@@ -403,6 +415,17 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
403
415
|
elsif ['invalid-insulation-top'].include? error_case
|
|
404
416
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
405
417
|
hpxml.foundation_walls[0].insulation_interior_distance_to_top = -0.5
|
|
418
|
+
elsif ['invalid-integrated-heating'].include? error_case
|
|
419
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-central-ac-only-1-speed.xml'))
|
|
420
|
+
hpxml.cooling_systems[0].integrated_heating_system_fuel = HPXML::FuelTypeElectricity
|
|
421
|
+
hpxml.cooling_systems[0].integrated_heating_system_efficiency_percent = 0.98
|
|
422
|
+
hpxml.cooling_systems[0].integrated_heating_system_fraction_heat_load_served = 1.0
|
|
423
|
+
elsif ['invalid-natvent-availability'].include? error_case
|
|
424
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
425
|
+
hpxml.header.natvent_days_per_week = 8
|
|
426
|
+
elsif ['invalid-natvent-availability2'].include? error_case
|
|
427
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
428
|
+
hpxml.header.natvent_days_per_week = -1
|
|
406
429
|
elsif ['invalid-number-of-bedrooms-served'].include? error_case
|
|
407
430
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-pv.xml'))
|
|
408
431
|
hpxml.pv_systems[0].number_of_bedrooms_served = 3
|
|
@@ -415,6 +438,9 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
415
438
|
elsif ['invalid-shared-vent-in-unit-flowrate'].include? error_case
|
|
416
439
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-mechvent.xml'))
|
|
417
440
|
hpxml.ventilation_fans[0].rated_flow_rate = 80
|
|
441
|
+
elsif ['invalid-timestep'].include? error_case
|
|
442
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
443
|
+
hpxml.header.timestep = 45
|
|
418
444
|
elsif ['invalid-timezone-utcoffset-low'].include? error_case
|
|
419
445
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
420
446
|
hpxml.header.time_zone_utc_offset = -13
|
|
@@ -424,6 +450,10 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
424
450
|
elsif ['invalid-ventilation-fan'].include? error_case
|
|
425
451
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-exhaust.xml'))
|
|
426
452
|
hpxml.ventilation_fans[0].used_for_garage_ventilation = true
|
|
453
|
+
elsif ['invalid-ventilation-recovery'].include? error_case
|
|
454
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-exhaust.xml'))
|
|
455
|
+
hpxml.ventilation_fans[0].sensible_recovery_efficiency = 0.72
|
|
456
|
+
hpxml.ventilation_fans[0].total_recovery_efficiency = 0.48
|
|
427
457
|
elsif ['invalid-window-height'].include? error_case
|
|
428
458
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-enclosure-overhangs.xml'))
|
|
429
459
|
hpxml.windows[1].overhangs_distance_to_bottom_of_window = 1.0
|
|
@@ -431,6 +461,9 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
431
461
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
432
462
|
int_cfl = hpxml.lighting_groups.select { |lg| lg.location == HPXML::LocationInterior && lg.lighting_type == HPXML::LightingTypeCFL }[0]
|
|
433
463
|
int_cfl.fraction_of_units_in_location = 0.8
|
|
464
|
+
elsif ['missing-cfis-supplemental-fan'].include? error_case
|
|
465
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-cfis.xml'))
|
|
466
|
+
hpxml.ventilation_fans[0].cfis_addtl_runtime_operating_mode = HPXML::CFISModeSupplementalFan
|
|
434
467
|
elsif ['missing-distribution-cfa-served'].include? error_case
|
|
435
468
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
436
469
|
hpxml.hvac_distributions[0].ducts[1].duct_surface_area = nil
|
|
@@ -457,16 +490,14 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
457
490
|
hpxml.hvac_distributions[0].ducts[0].duct_location = HPXML::LocationOtherMultifamilyBufferSpace
|
|
458
491
|
elsif ['multifamily-reference-surface'].include? error_case
|
|
459
492
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
460
|
-
hpxml.
|
|
461
|
-
hpxml.
|
|
462
|
-
hpxml.
|
|
463
|
-
hpxml.
|
|
493
|
+
hpxml.floors << hpxml.floors[0].dup
|
|
494
|
+
hpxml.floors[1].id = "Floor#{hpxml.floors.size}"
|
|
495
|
+
hpxml.floors[1].insulation_id = "FloorInsulation#{hpxml.floors.size}"
|
|
496
|
+
hpxml.floors[1].exterior_adjacent_to = HPXML::LocationOtherHeatedSpace
|
|
497
|
+
hpxml.floors[1].floor_or_ceiling = HPXML::FloorOrCeilingCeiling
|
|
464
498
|
elsif ['multifamily-reference-water-heater'].include? error_case
|
|
465
499
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
466
500
|
hpxml.water_heating_systems[0].location = HPXML::LocationOtherNonFreezingSpace
|
|
467
|
-
elsif ['ptac-unattached-cooling-system'].include? error_case
|
|
468
|
-
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-ptac-with-heating.xml'))
|
|
469
|
-
hpxml.cooling_systems[0].delete
|
|
470
501
|
elsif ['refrigerator-location'].include? error_case
|
|
471
502
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
472
503
|
hpxml.refrigerators[0].location = HPXML::LocationGarage
|
|
@@ -495,11 +526,13 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
495
526
|
end
|
|
496
527
|
|
|
497
528
|
# Test against schematron
|
|
498
|
-
|
|
529
|
+
XMLHelper.write_file(hpxml_doc, @tmp_hpxml_path)
|
|
530
|
+
_test_schema_and_schematron_validation(@tmp_hpxml_path, hpxml_doc, expected_errors: expected_errors)
|
|
499
531
|
end
|
|
500
532
|
end
|
|
501
533
|
|
|
502
|
-
def
|
|
534
|
+
def test_schema_schematron_warning_messages
|
|
535
|
+
OpenStudio::Logger.instance.standardOutLogger.setLogLevel(OpenStudio::Fatal)
|
|
503
536
|
# Test case => Warning message
|
|
504
537
|
all_expected_warnings = { 'battery-pv-output-power-low' => ['Max power output should typically be greater than or equal to 500 W.',
|
|
505
538
|
'Max power output should typically be greater than or equal to 500 W.',
|
|
@@ -514,6 +547,7 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
514
547
|
'No space cooling specified, the model will not include space cooling energy use.'],
|
|
515
548
|
'dhw-setpoint-low' => ['Hot water setpoint should typically be greater than or equal to 110 deg-F.'],
|
|
516
549
|
'garage-ventilation' => ['Ventilation fans for the garage are not currently modeled.'],
|
|
550
|
+
'integrated-heating-efficiency-low' => ['Percent efficiency should typically be greater than or equal to 0.6.'],
|
|
517
551
|
'hvac-dse-low' => ['Heating DSE should typically be greater than or equal to 0.5.',
|
|
518
552
|
'Cooling DSE should typically be greater than or equal to 0.5.'],
|
|
519
553
|
'hvac-capacities-low' => ['Heating capacity should typically be greater than or equal to 1000 Btu/hr.',
|
|
@@ -590,6 +624,9 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
590
624
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
591
625
|
hpxml.ventilation_fans.add(id: 'VentilationFan1',
|
|
592
626
|
used_for_garage_ventilation: true)
|
|
627
|
+
elsif ['integrated-heating-efficiency-low'].include? warning_case
|
|
628
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-ptac-with-heating-electricity.xml'))
|
|
629
|
+
hpxml.cooling_systems[0].integrated_heating_system_efficiency_percent = 0.5
|
|
593
630
|
elsif ['hvac-dse-low'].include? warning_case
|
|
594
631
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-dse.xml'))
|
|
595
632
|
hpxml.hvac_distributions[0].annual_heating_dse = 0.1
|
|
@@ -661,15 +698,23 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
661
698
|
hpxml_doc = hpxml.to_oga()
|
|
662
699
|
|
|
663
700
|
# Test against schematron
|
|
664
|
-
|
|
701
|
+
XMLHelper.write_file(hpxml_doc, @tmp_hpxml_path)
|
|
702
|
+
_test_schema_and_schematron_validation(@tmp_hpxml_path, hpxml_doc, expected_warnings: expected_warnings)
|
|
665
703
|
end
|
|
666
704
|
end
|
|
667
705
|
|
|
668
|
-
def
|
|
706
|
+
def test_ruby_error_messages
|
|
669
707
|
# Test case => Error message
|
|
670
|
-
all_expected_errors = { '
|
|
708
|
+
all_expected_errors = { 'battery-bad-values-max-not-one' => ["Schedule max value for column 'battery' must be 1."],
|
|
709
|
+
'battery-bad-values-min-not-neg-one' => ["Schedule min value for column 'battery' must be -1."],
|
|
710
|
+
'cfis-with-hydronic-distribution' => ["Attached HVAC distribution system 'HVACDistribution1' cannot be hydronic for ventilation fan 'VentilationFan1'."],
|
|
711
|
+
'cfis-invalid-supplemental-fan' => ["CFIS supplemental fan 'VentilationFan2' must be of type 'supply only' or 'exhaust only'."],
|
|
712
|
+
'cfis-invalid-supplemental-fan2' => ["CFIS supplemental fan 'VentilationFan2' must be set as used for whole building ventilation."],
|
|
713
|
+
'cfis-invalid-supplemental-fan3' => ["CFIS supplemental fan 'VentilationFan2' cannot be a shared system."],
|
|
714
|
+
'cfis-invalid-supplemental-fan4' => ["CFIS supplemental fan 'VentilationFan2' cannot have HoursInOperation specified."],
|
|
671
715
|
'dehumidifier-setpoints' => ['All dehumidifiers must have the same setpoint but multiple setpoints were specified.'],
|
|
672
|
-
'
|
|
716
|
+
'desuperheater-with-detailed-setpoints' => ["Detailed setpoints for water heating system 'WaterHeatingSystem1' is not currently supported for desuperheaters."],
|
|
717
|
+
'duplicate-id' => ["Element 'SystemIdentifier', attribute 'id': 'PlugLoad1' is not a valid value of the atomic type 'xs:ID'."],
|
|
673
718
|
'emissions-duplicate-names' => ['Found multiple Emissions Scenarios with the Scenario Name='],
|
|
674
719
|
'emissions-wrong-columns' => ['Emissions File has too few columns. Cannot find column number'],
|
|
675
720
|
'emissions-wrong-filename' => ["Emissions File file path 'invalid-wrong-filename.csv' does not exist."],
|
|
@@ -681,26 +726,24 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
681
726
|
'hvac-dse-multiple-attached-heating' => ["Multiple heating systems found attached to distribution system 'HVACDistribution1'."],
|
|
682
727
|
'hvac-inconsistent-fan-powers' => ["Fan powers for heating system 'HeatingSystem1' and cooling system 'CoolingSystem1' are attached to a single distribution system and therefore must be the same."],
|
|
683
728
|
'hvac-invalid-distribution-system-type' => ["Incorrect HVAC distribution system type for HVAC type: 'Furnace'. Should be one of: ["],
|
|
684
|
-
'hvac-seasons-less-than-a-year' => ['HeatingSeason and CoolingSeason, when combined, must span the entire year.'],
|
|
685
729
|
'hvac-shared-boiler-multiple' => ['More than one shared heating system found.'],
|
|
686
730
|
'hvac-shared-chiller-multiple' => ['More than one shared cooling system found.'],
|
|
687
731
|
'hvac-shared-chiller-negative-seer-eq' => ["Negative SEER equivalent calculated for cooling system 'CoolingSystem1', double check inputs."],
|
|
688
732
|
'invalid-battery-capacity-units' => ["UsableCapacity and NominalCapacity for Battery 'Battery1' must be in the same units."],
|
|
689
733
|
'invalid-battery-capacity-units2' => ["UsableCapacity and NominalCapacity for Battery 'Battery1' must be in the same units."],
|
|
690
|
-
'invalid-datatype-boolean' => ["
|
|
691
|
-
'invalid-datatype-integer' => ["
|
|
734
|
+
'invalid-datatype-boolean' => ["Element 'RadiantBarrier': 'FOOBAR' is not a valid value of the atomic type 'xs:boolean'"],
|
|
735
|
+
'invalid-datatype-integer' => ["Element 'NumberofBedrooms': '2.5' is not a valid value of the atomic type 'IntegerGreaterThanOrEqualToZero_simple'."],
|
|
692
736
|
'invalid-datatype-float' => ["Cannot convert 'FOOBAR' to float for Slab/extension/CarpetFraction."],
|
|
693
737
|
'invalid-daylight-saving' => ['Daylight Saving End Day of Month (31) must be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.'],
|
|
694
738
|
'invalid-distribution-cfa-served' => ['The total conditioned floor area served by the HVAC distribution system(s) for heating is larger than the conditioned floor area of the building.',
|
|
695
739
|
'The total conditioned floor area served by the HVAC distribution system(s) for cooling is larger than the conditioned floor area of the building.'],
|
|
696
740
|
'invalid-epw-filepath' => ["foo.epw' could not be found."],
|
|
697
|
-
'invalid-id' => ["
|
|
741
|
+
'invalid-id' => ["Element 'SystemIdentifier', attribute 'id': '' is not a valid value of the atomic type 'xs:ID'."],
|
|
698
742
|
'invalid-neighbor-shading-azimuth' => ['A neighbor building has an azimuth (145) not equal to the azimuth of any wall.'],
|
|
699
743
|
'invalid-relatedhvac-dhw-indirect' => ["RelatedHVACSystem 'HeatingSystem_bad' not found for water heating system 'WaterHeatingSystem1'"],
|
|
700
744
|
'invalid-relatedhvac-desuperheater' => ["RelatedHVACSystem 'CoolingSystem_bad' not found for water heating system 'WaterHeatingSystem1'."],
|
|
701
|
-
'invalid-schema-version' => ["HPXML
|
|
745
|
+
'invalid-schema-version' => ["Element 'HPXML', attribute 'schemaVersion'"],
|
|
702
746
|
'invalid-skylights-physical-properties' => ["Could not lookup UFactor and SHGC for skylight 'Skylight2'."],
|
|
703
|
-
'invalid-timestep' => ['Timestep (45) must be one of: 60, 30, 20, 15, 12, 10, 6, 5, 4, 3, 2, 1.'],
|
|
704
747
|
'invalid-runperiod' => ['Run Period End Day of Month (31) must be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.'],
|
|
705
748
|
'invalid-windows-physical-properties' => ["Could not lookup UFactor and SHGC for window 'Window3'."],
|
|
706
749
|
'leap-year-TMY' => ['Specified a leap year (2008) but weather data has 8760 hours.'],
|
|
@@ -718,7 +761,6 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
718
761
|
'schedule-detailed-bad-values-mode-negative' => ["Schedule value for column 'water_heater_operating_mode' must be either 0 or 1."],
|
|
719
762
|
'schedule-detailed-bad-values-mode-fraction' => ["Schedule value for column 'vacancy' must be either 0 or 1."],
|
|
720
763
|
'schedule-detailed-duplicate-columns' => ["Schedule column name 'occupants' is duplicated."],
|
|
721
|
-
'schedule-detailed-wrong-columns' => ["Schedule column name 'lighting' is invalid."],
|
|
722
764
|
'schedule-detailed-wrong-filename' => ["Schedules file path 'invalid-wrong-filename.csv' does not exist."],
|
|
723
765
|
'schedule-detailed-wrong-rows' => ["Schedule has invalid number of rows (8759) for column 'occupants'. Must be one of: 8760, 17520, 26280, 35040, 43800, 52560, 87600, 105120, 131400, 175200, 262800, 525600."],
|
|
724
766
|
'solar-thermal-system-with-combi-tankless' => ["Water heating system 'WaterHeatingSystem1' connected to solar thermal system 'SolarThermalSystem1' cannot be a space-heating boiler."],
|
|
@@ -730,25 +772,62 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
730
772
|
'unattached-hvac-distribution' => ["Attached HVAC distribution system 'foobar' not found for HVAC system 'HeatingSystem1'."],
|
|
731
773
|
'unattached-skylight' => ["Attached roof 'foobar' not found for skylight 'Skylight1'."],
|
|
732
774
|
'unattached-solar-thermal-system' => ["Attached water heating system 'foobar' not found for solar thermal system 'SolarThermalSystem1'."],
|
|
775
|
+
'unattached-shared-clothes-washer-dhw-distribution' => ["Attached hot water distribution 'foobar' not found for clothes washer"],
|
|
733
776
|
'unattached-shared-clothes-washer-water-heater' => ["Attached water heating system 'foobar' not found for clothes washer"],
|
|
777
|
+
'unattached-shared-dishwasher-dhw-distribution' => ["Attached hot water distribution 'foobar' not found for dishwasher"],
|
|
734
778
|
'unattached-shared-dishwasher-water-heater' => ["Attached water heating system 'foobar' not found for dishwasher"],
|
|
735
779
|
'unattached-window' => ["Attached wall 'foobar' not found for window 'Window1'."] }
|
|
736
780
|
|
|
737
781
|
all_expected_errors.each_with_index do |(error_case, expected_errors), i|
|
|
738
782
|
puts "[#{i + 1}/#{all_expected_errors.size}] Testing #{error_case}..."
|
|
739
783
|
# Create HPXML object
|
|
740
|
-
if ['
|
|
784
|
+
if ['battery-bad-values-max-not-one'].include? error_case
|
|
785
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-battery-scheduled.xml'))
|
|
786
|
+
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml.header.schedules_filepaths[0]))
|
|
787
|
+
csv_data[1][0] = 1.1
|
|
788
|
+
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
|
|
789
|
+
hpxml.header.schedules_filepaths = [@tmp_csv_path]
|
|
790
|
+
elsif ['battery-bad-values-min-not-neg-one'].include? error_case
|
|
791
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-battery-scheduled.xml'))
|
|
792
|
+
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml.header.schedules_filepaths[0]))
|
|
793
|
+
csv_data[1][0] = -1.1
|
|
794
|
+
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
|
|
795
|
+
hpxml.header.schedules_filepaths = [@tmp_csv_path]
|
|
796
|
+
elsif ['cfis-with-hydronic-distribution'].include? error_case
|
|
741
797
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-boiler-gas-only.xml'))
|
|
742
798
|
hpxml.ventilation_fans.add(id: "VentilationFan#{hpxml.ventilation_fans.size + 1}",
|
|
743
799
|
fan_type: HPXML::MechVentTypeCFIS,
|
|
744
800
|
used_for_whole_building_ventilation: true,
|
|
745
801
|
distribution_system_idref: hpxml.hvac_distributions[0].id)
|
|
802
|
+
elsif ['cfis-invalid-supplemental-fan'].include? error_case
|
|
803
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-cfis-supplemental-fan-exhaust.xml'))
|
|
804
|
+
suppl_fan = hpxml.ventilation_fans.select { |f| f.is_cfis_supplemental_fan? }[0]
|
|
805
|
+
suppl_fan.fan_type = HPXML::MechVentTypeBalanced
|
|
806
|
+
elsif ['cfis-invalid-supplemental-fan2'].include? error_case
|
|
807
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-cfis-supplemental-fan-exhaust.xml'))
|
|
808
|
+
suppl_fan = hpxml.ventilation_fans.select { |f| f.is_cfis_supplemental_fan? }[0]
|
|
809
|
+
suppl_fan.used_for_whole_building_ventilation = false
|
|
810
|
+
suppl_fan.used_for_garage_ventilation = true
|
|
811
|
+
elsif ['cfis-invalid-supplemental-fan3'].include? error_case
|
|
812
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-cfis-supplemental-fan-exhaust.xml'))
|
|
813
|
+
suppl_fan = hpxml.ventilation_fans.select { |f| f.is_cfis_supplemental_fan? }[0]
|
|
814
|
+
suppl_fan.is_shared_system = true
|
|
815
|
+
suppl_fan.fraction_recirculation = 0.0
|
|
816
|
+
suppl_fan.in_unit_flow_rate = suppl_fan.tested_flow_rate / 2.0
|
|
817
|
+
elsif ['cfis-invalid-supplemental-fan4'].include? error_case
|
|
818
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-cfis-supplemental-fan-exhaust.xml'))
|
|
819
|
+
suppl_fan = hpxml.ventilation_fans.select { |f| f.is_cfis_supplemental_fan? }[0]
|
|
820
|
+
suppl_fan.hours_in_operation = 12.0
|
|
746
821
|
elsif ['dehumidifier-setpoints'].include? error_case
|
|
747
822
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-appliances-dehumidifier-multiple.xml'))
|
|
748
823
|
hpxml.dehumidifiers[-1].rh_setpoint = 0.55
|
|
824
|
+
elsif ['desuperheater-with-detailed-setpoints'].include? error_case
|
|
825
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-dhw-tank-detailed-setpoints.xml'))
|
|
826
|
+
hpxml.water_heating_systems[0].uses_desuperheater = true
|
|
827
|
+
hpxml.water_heating_systems[0].related_hvac_idref = hpxml.cooling_systems[0].id
|
|
749
828
|
elsif ['duplicate-id'].include? error_case
|
|
750
829
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
751
|
-
hpxml.
|
|
830
|
+
hpxml.plug_loads[-1].id = hpxml.plug_loads[0].id
|
|
752
831
|
elsif ['emissions-duplicate-names'].include? error_case
|
|
753
832
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-misc-emissions.xml'))
|
|
754
833
|
hpxml.header.emissions_scenarios << hpxml.header.emissions_scenarios[0].dup
|
|
@@ -800,16 +879,6 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
800
879
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
801
880
|
hpxml.cooling_systems[0].fan_watts_per_cfm = 0.55
|
|
802
881
|
hpxml.heating_systems[0].fan_watts_per_cfm = 0.45
|
|
803
|
-
elsif ['hvac-seasons-less-than-a-year'].include? error_case
|
|
804
|
-
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
805
|
-
hpxml.hvac_controls[0].seasons_heating_begin_month = 10
|
|
806
|
-
hpxml.hvac_controls[0].seasons_heating_begin_day = 1
|
|
807
|
-
hpxml.hvac_controls[0].seasons_heating_end_month = 5
|
|
808
|
-
hpxml.hvac_controls[0].seasons_heating_end_day = 31
|
|
809
|
-
hpxml.hvac_controls[0].seasons_cooling_begin_month = 7
|
|
810
|
-
hpxml.hvac_controls[0].seasons_cooling_begin_day = 1
|
|
811
|
-
hpxml.hvac_controls[0].seasons_cooling_end_month = 9
|
|
812
|
-
hpxml.hvac_controls[0].seasons_cooling_end_day = 30
|
|
813
882
|
elsif ['hvac-shared-boiler-multiple'].include? error_case
|
|
814
883
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-boiler-only-baseboard.xml'))
|
|
815
884
|
hpxml.hvac_distributions << hpxml.hvac_distributions[0].dup
|
|
@@ -883,9 +952,6 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
883
952
|
elsif ['invalid-skylights-physical-properties'].include? error_case
|
|
884
953
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-enclosure-skylights-physical-properties.xml'))
|
|
885
954
|
hpxml.skylights[1].thermal_break = false
|
|
886
|
-
elsif ['invalid-timestep'].include? error_case
|
|
887
|
-
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
888
|
-
hpxml.header.timestep = 45
|
|
889
955
|
elsif ['invalid-windows-physical-properties'].include? error_case
|
|
890
956
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-enclosure-windows-physical-properties.xml'))
|
|
891
957
|
hpxml.windows[2].thermal_break = false
|
|
@@ -960,12 +1026,6 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
960
1026
|
hpxml.header.schedules_filepaths = []
|
|
961
1027
|
hpxml.header.schedules_filepaths << @tmp_csv_path
|
|
962
1028
|
hpxml.header.schedules_filepaths << @tmp_csv_path
|
|
963
|
-
elsif ['schedule-detailed-wrong-columns'].include? error_case
|
|
964
|
-
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-schedules-detailed-occupancy-stochastic.xml'))
|
|
965
|
-
csv_data = CSV.read(File.join(File.dirname(hpxml.hpxml_path), hpxml.header.schedules_filepaths[0]))
|
|
966
|
-
csv_data[0][1] = 'lighting'
|
|
967
|
-
File.write(@tmp_csv_path, csv_data.map(&:to_csv).join)
|
|
968
|
-
hpxml.header.schedules_filepaths = [@tmp_csv_path]
|
|
969
1029
|
elsif ['schedule-detailed-wrong-filename'].include? error_case
|
|
970
1030
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
971
1031
|
hpxml.header.schedules_filepaths << 'invalid-wrong-filename.csv'
|
|
@@ -1032,9 +1092,17 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1032
1092
|
elsif ['unattached-solar-thermal-system'].include? error_case
|
|
1033
1093
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-dhw-solar-indirect-flat-plate.xml'))
|
|
1034
1094
|
hpxml.solar_thermal_systems[0].water_heating_system_idref = 'foobar'
|
|
1095
|
+
elsif ['unattached-shared-clothes-washer-dhw-distribution'].include? error_case
|
|
1096
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-laundry-room.xml'))
|
|
1097
|
+
hpxml.clothes_washers[0].water_heating_system_idref = nil
|
|
1098
|
+
hpxml.clothes_washers[0].hot_water_distribution_idref = 'foobar'
|
|
1035
1099
|
elsif ['unattached-shared-clothes-washer-water-heater'].include? error_case
|
|
1036
1100
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-laundry-room.xml'))
|
|
1037
1101
|
hpxml.clothes_washers[0].water_heating_system_idref = 'foobar'
|
|
1102
|
+
elsif ['unattached-shared-dishwasher-dhw-distribution'].include? error_case
|
|
1103
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-laundry-room.xml'))
|
|
1104
|
+
hpxml.dishwashers[0].water_heating_system_idref = nil
|
|
1105
|
+
hpxml.dishwashers[0].hot_water_distribution_idref = 'foobar'
|
|
1038
1106
|
elsif ['unattached-shared-dishwasher-water-heater'].include? error_case
|
|
1039
1107
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-bldgtype-multifamily-shared-laundry-room.xml'))
|
|
1040
1108
|
hpxml.dishwashers[0].water_heating_system_idref = 'foobar'
|
|
@@ -1060,13 +1128,14 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1060
1128
|
end
|
|
1061
1129
|
|
|
1062
1130
|
XMLHelper.write_file(hpxml_doc, @tmp_hpxml_path)
|
|
1063
|
-
|
|
1131
|
+
_test_measure('error', expected_errors)
|
|
1064
1132
|
end
|
|
1065
1133
|
end
|
|
1066
1134
|
|
|
1067
|
-
def
|
|
1135
|
+
def test_ruby_warning_messages
|
|
1068
1136
|
# Test case => Error message
|
|
1069
|
-
all_expected_warnings = { '
|
|
1137
|
+
all_expected_warnings = { 'cfis-undersized-supplemental-fan' => ["CFIS supplemental fan 'VentilationFan2' is undersized (90.0 cfm) compared to the target hourly ventilation rate (110.0 cfm)."],
|
|
1138
|
+
'hvac-setpoint-adjustments' => ['HVAC setpoints have been automatically adjusted to prevent periods where the heating setpoint is greater than the cooling setpoint.'],
|
|
1070
1139
|
'hvac-setpoint-adjustments-daily-setbacks' => ['HVAC setpoints have been automatically adjusted to prevent periods where the heating setpoint is greater than the cooling setpoint.'],
|
|
1071
1140
|
'hvac-setpoint-adjustments-daily-schedules' => ['HVAC setpoints have been automatically adjusted to prevent periods where the heating setpoint is greater than the cooling setpoint.'],
|
|
1072
1141
|
'schedule-file-and-weekday-weekend-multipliers' => ["Both 'occupants' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
@@ -1084,6 +1153,12 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1084
1153
|
"Both 'refrigerator' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1085
1154
|
"Both 'refrigerator' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1086
1155
|
"Both 'refrigerator' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1156
|
+
"Both 'extra_refrigerator' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1157
|
+
"Both 'extra_refrigerator' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1158
|
+
"Both 'extra_refrigerator' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1159
|
+
"Both 'freezer' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1160
|
+
"Both 'freezer' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1161
|
+
"Both 'freezer' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1087
1162
|
"Both 'cooking_range' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1088
1163
|
"Both 'cooking_range' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1089
1164
|
"Both 'cooking_range' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
@@ -1096,12 +1171,39 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1096
1171
|
"Both 'plug_loads_other' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1097
1172
|
"Both 'plug_loads_other' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1098
1173
|
"Both 'plug_loads_other' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1174
|
+
"Both 'plug_loads_vehicle' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1175
|
+
"Both 'plug_loads_vehicle' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1176
|
+
"Both 'plug_loads_vehicle' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1177
|
+
"Both 'plug_loads_well_pump' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1178
|
+
"Both 'plug_loads_well_pump' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1179
|
+
"Both 'plug_loads_well_pump' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1180
|
+
"Both 'fuel_loads_grill' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1181
|
+
"Both 'fuel_loads_grill' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1182
|
+
"Both 'fuel_loads_grill' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1183
|
+
"Both 'fuel_loads_lighting' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1184
|
+
"Both 'fuel_loads_lighting' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1185
|
+
"Both 'fuel_loads_lighting' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1186
|
+
"Both 'fuel_loads_fireplace' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1187
|
+
"Both 'fuel_loads_fireplace' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1188
|
+
"Both 'fuel_loads_fireplace' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1099
1189
|
"Both 'lighting_interior' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1100
1190
|
"Both 'lighting_interior' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1101
1191
|
"Both 'lighting_interior' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1102
1192
|
"Both 'lighting_exterior' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1103
1193
|
"Both 'lighting_exterior' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1104
|
-
"Both 'lighting_exterior' schedule file and monthly multipliers provided; the latter will be ignored."
|
|
1194
|
+
"Both 'lighting_exterior' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1195
|
+
"Both 'pool_pump' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1196
|
+
"Both 'pool_pump' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1197
|
+
"Both 'pool_pump' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1198
|
+
"Both 'pool_heater' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1199
|
+
"Both 'pool_heater' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1200
|
+
"Both 'pool_heater' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1201
|
+
"Both 'hot_tub_pump' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1202
|
+
"Both 'hot_tub_pump' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1203
|
+
"Both 'hot_tub_pump' schedule file and monthly multipliers provided; the latter will be ignored.",
|
|
1204
|
+
"Both 'hot_tub_heater' schedule file and weekday fractions provided; the latter will be ignored.",
|
|
1205
|
+
"Both 'hot_tub_heater' schedule file and weekend fractions provided; the latter will be ignored.",
|
|
1206
|
+
"Both 'hot_tub_heater' schedule file and monthly multipliers provided; the latter will be ignored."],
|
|
1105
1207
|
'schedule-file-and-setpoints' => ["Both 'heating_setpoint' schedule file and heating setpoint temperature provided; the latter will be ignored.",
|
|
1106
1208
|
"Both 'cooling_setpoint' schedule file and cooling setpoint temperature provided; the latter will be ignored.",
|
|
1107
1209
|
"Both 'water_heater_setpoint' schedule file and setpoint temperature provided; the latter will be ignored."],
|
|
@@ -1110,7 +1212,11 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1110
1212
|
all_expected_warnings.each_with_index do |(warning_case, expected_warnings), i|
|
|
1111
1213
|
puts "[#{i + 1}/#{all_expected_warnings.size}] Testing #{warning_case}..."
|
|
1112
1214
|
# Create HPXML object
|
|
1113
|
-
if ['
|
|
1215
|
+
if ['cfis-undersized-supplemental-fan'].include? warning_case
|
|
1216
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-mechvent-cfis-supplemental-fan-exhaust.xml'))
|
|
1217
|
+
suppl_fan = hpxml.ventilation_fans.select { |f| f.is_cfis_supplemental_fan? }[0]
|
|
1218
|
+
suppl_fan.tested_flow_rate = 90.0
|
|
1219
|
+
elsif ['hvac-setpoint-adjustments'].include? warning_case
|
|
1114
1220
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
1115
1221
|
hpxml.hvac_controls[0].heating_setpoint_temp = 76.0
|
|
1116
1222
|
hpxml.hvac_controls[0].cooling_setpoint_temp = 75.0
|
|
@@ -1122,7 +1228,8 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1122
1228
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-hvac-setpoints-daily-schedules.xml'))
|
|
1123
1229
|
hpxml.hvac_controls[0].weekday_heating_setpoints = '64, 64, 64, 64, 64, 64, 64, 76, 70, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 68, 68, 64, 64'
|
|
1124
1230
|
elsif ['schedule-file-and-weekday-weekend-multipliers'].include? warning_case
|
|
1125
|
-
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-
|
|
1231
|
+
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base-misc-loads-large-uncommon.xml'))
|
|
1232
|
+
hpxml.header.utility_bill_scenarios.clear # we don't want the propane warning
|
|
1126
1233
|
hpxml.header.schedules_filepaths << 'HPXMLtoOpenStudio/resources/schedule_files/occupancy-smooth.csv'
|
|
1127
1234
|
elsif ['schedule-file-and-setpoints'].include? warning_case
|
|
1128
1235
|
hpxml = HPXML.new(hpxml_path: File.join(@sample_files_path, 'base.xml'))
|
|
@@ -1138,15 +1245,14 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1138
1245
|
hpxml_doc = hpxml.to_oga()
|
|
1139
1246
|
|
|
1140
1247
|
XMLHelper.write_file(hpxml_doc, @tmp_hpxml_path)
|
|
1141
|
-
|
|
1248
|
+
_test_measure('warning', expected_warnings)
|
|
1142
1249
|
end
|
|
1143
1250
|
end
|
|
1144
1251
|
|
|
1145
1252
|
private
|
|
1146
1253
|
|
|
1147
|
-
def _test_schematron_validation(hpxml_doc, expected_errors: nil, expected_warnings: nil)
|
|
1148
|
-
|
|
1149
|
-
errors, warnings = Validator.run_validators(hpxml_doc, [@epvalidator_stron_path, @hpxml_stron_path])
|
|
1254
|
+
def _test_schematron_validation(hpxml_path, hpxml_doc, expected_errors: nil, expected_warnings: nil)
|
|
1255
|
+
errors, warnings = XMLValidator.validate_against_schematron(hpxml_path, @epvalidator_stron_path, hpxml_doc)
|
|
1150
1256
|
if not expected_errors.nil?
|
|
1151
1257
|
_compare_errors_or_warnings('error', errors, expected_errors)
|
|
1152
1258
|
end
|
|
@@ -1155,16 +1261,25 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1155
1261
|
end
|
|
1156
1262
|
end
|
|
1157
1263
|
|
|
1158
|
-
def _test_schema_validation(
|
|
1159
|
-
|
|
1160
|
-
schemas_dir = File.absolute_path(File.join(@root_path, 'HPXMLtoOpenStudio', 'resources', 'hpxml_schema'))
|
|
1161
|
-
errors = XMLHelper.validate(hpxml_doc.to_xml, File.join(schemas_dir, 'HPXML.xsd'), nil)
|
|
1264
|
+
def _test_schema_validation(hpxml_path, schema_path)
|
|
1265
|
+
errors, _warnings = XMLValidator.validate_against_schema(hpxml_path, schema_path)
|
|
1162
1266
|
if errors.size > 0
|
|
1163
|
-
flunk "#{
|
|
1267
|
+
flunk "#{hpxml_path}: #{errors}"
|
|
1268
|
+
end
|
|
1269
|
+
end
|
|
1270
|
+
|
|
1271
|
+
def _test_schema_and_schematron_validation(hpxml_path, hpxml_doc, expected_errors: nil, expected_warnings: nil)
|
|
1272
|
+
sct_errors, sct_warnings = XMLValidator.validate_against_schematron(hpxml_path, @epvalidator_stron_path, hpxml_doc)
|
|
1273
|
+
xsd_errors, xsd_warnings = XMLValidator.validate_against_schema(hpxml_path, @hpxml_schema_path)
|
|
1274
|
+
if not expected_errors.nil?
|
|
1275
|
+
_compare_errors_or_warnings('error', sct_errors + xsd_errors, expected_errors)
|
|
1276
|
+
end
|
|
1277
|
+
if not expected_warnings.nil?
|
|
1278
|
+
_compare_errors_or_warnings('warning', sct_warnings + xsd_warnings, expected_warnings)
|
|
1164
1279
|
end
|
|
1165
1280
|
end
|
|
1166
1281
|
|
|
1167
|
-
def _test_measure(error_or_warning,
|
|
1282
|
+
def _test_measure(error_or_warning, expected_errors_or_warnings)
|
|
1168
1283
|
# create an instance of the measure
|
|
1169
1284
|
measure = HPXMLtoOpenStudio.new
|
|
1170
1285
|
|
|
@@ -1200,6 +1315,9 @@ class HPXMLtoOpenStudioValidationTest < MiniTest::Test
|
|
|
1200
1315
|
actual_errors_or_warnings << s
|
|
1201
1316
|
end
|
|
1202
1317
|
elsif error_or_warning == 'warning'
|
|
1318
|
+
# show the output
|
|
1319
|
+
show_output(result) unless result.value.valueName == 'Success'
|
|
1320
|
+
|
|
1203
1321
|
assert_equal('Success', result.value.valueName)
|
|
1204
1322
|
|
|
1205
1323
|
result.stepWarnings.each do |s|
|